<?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>233697</bug_id>
          
          <creation_ts>2021-12-01 05:00:54 -0800</creation_ts>
          <short_desc>Move a few more files from WebCore/platform/text to WebCore/PAL/text</short_desc>
          <delta_ts>2021-12-08 18:49:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbarton</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kbr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>rego</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1819191</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-01 05:00:54 -0800</bug_when>
    <thetext>Move a few more files from WebCore/platform/text to WebCore/PAL/text</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819193</commentid>
    <comment_count>1</comment_count>
      <attachid>445559</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-01 05:02:36 -0800</bug_when>
    <thetext>Created attachment 445559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819923</commentid>
    <comment_count>2</comment_count>
      <attachid>445787</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-02 16:28:46 -0800</bug_when>
    <thetext>Created attachment 445787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821508</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-08 05:01:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/86206611&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821912</commentid>
    <comment_count>4</comment_count>
      <attachid>446472</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-08 18:24:59 -0800</bug_when>
    <thetext>Created attachment 446472
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821914</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-12-08 18:26:19 -0800</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445559</attachid>
            <date>2021-12-01 05:02:36 -0800</date>
            <delta_ts>2021-12-02 16:28:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233697-20211201050233.patch</filename>
            <type>text/plain</type>
            <size>1315244</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiNmQyZjJmYmNkN2I3
ODU1MzIxY2U1YjgwMWQ1YzJmYWNiMzhmNC4uNDg1ZDcyMDc2ZTQ0MTljYThjNGNlMjFlZmI4YWRh
MDVkNjVmMDQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1MiBAQAorMjAyMS0xMi0wMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgYSBm
ZXcgbW9yZSBmaWxlcyBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dCB0byBXZWJDb3JlL1BBTC90
ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2
OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmg6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRCb3VuZGFy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzTWlzc3BlbGxpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZSBj
b25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1l
bnRQYXRoIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3Bl
bGxpbmcpOgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6Cisg
ICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRMaWdhdHVyZXNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFy
aWFudExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlh
bnRQb3NpdGlvblByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlhbnRD
YXBzUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFyaWFudE51bWVyaWNQ
cm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50QWx0ZXJuYXRlc1By
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlhbnRFYXN0QXNpYW5Qcm9w
ZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZv
bnRTdHlsZUZyb21TdHlsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50RnJv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRTeW50aGVzaXNGcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFNob3J0aGFuZFZhbHVlRm9yU2VsZWN0aW9uUHJvcGVydGllcyk6
CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAqIGNzcy9D
U1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6ZW5z
dXJlTG9jYWxGb250RmFjZXNGb3JGYW1pbHlSZWdpc3RlcmVkKToKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2
ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkVVbmljb2RlQmlkaSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6Oldy
aXRpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpv
cGVyYXRvciBQQUw6Oktlcm5pbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtb290aGluZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtYWxsQ2Fw
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3Ig
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmlt
aXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkZvbnRWYXJp
YW50Q2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgUEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udE9wdGljYWxTaXppbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmlj
b2RlQmlkaSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVW
YWx1ZTo6b3BlcmF0b3IgVGV4dERpcmVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgV3JpdGluZ01vZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEtl
cm5pbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFs
dWU6Om9wZXJhdG9yIEZvbnRTbW9vdGhpbmdNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250U21hbGxDYXBzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRv
ciBUZXh0UmVuZGVyaW5nTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFZhcmlhbnRQb3NpdGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9u
dFZhcmlhbnRDYXBzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFyaWFudEFsdGVybmF0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnRPcHRp
Y2FsU2l6aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHkuaDoK
KyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5nZXMpOgorICAgICAgICAqIGNzcy9Gb250
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c3R5bGUgY29uc3QpOgorICAg
ICAgICAqIGNzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250U3R5bGVLZXl3b3JkKToKKyAgICAgICAgKiBjc3MvRm9udFZhcmlhbnRCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RGb250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlRm9udFZhcmlhbnQpOgorICAgICAgICAqIGNzcy9Gb250VmFyaWFudEJ1aWxkZXIuaDoKKyAg
ICAgICAgKiBjc3MvbWFrZXByb3AucGw6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIu
aDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVGb250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgICogZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OmFkamFjZW50U2lkZXNGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveERlY29yYXRpb25EYXRhOjpoYXNCb3JkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6Ym9yZGVy
T2JzY3VyZXNCYWNrZ3JvdW5kRWRnZSBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25EYXRhLmg6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Y29sb3JzTWF0Y2hBdENvcm5lciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjb2xvck5l
ZWRzQW50aUFsaWFzQXRDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OmNhbGN1
bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9y
ZGVyUGFpbnRlcjo6am9pblJlcXVpcmVzTWl0cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHln
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJh
d0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OnBhaW50VHJhbnNsdWNlbnRCb3JkZXJT
aWRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpw
YWludEJvcmRlcnMgY29uc3QpOgorICAgICAgICAqIGRvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFy
c2VyLmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRh
dGVUaXRsZUZyb21UaXRsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondy
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aXRsZVdpdGhEaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsQWxpZ25tZW50Rm9y
SW5saW5lRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsQWxpZ25tZW50Rm9y
QmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20v
UG9zaXRpb24uaDoKKyAgICAgICAgKiBkb20vUmF3RGF0YURvY3VtZW50UGFyc2VyLmg6CisgICAg
ICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRU
b0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcv
RGljdGF0aW9uQWx0ZXJuYXRpdmUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFy
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpp
c0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0ZvcndhcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dGV4dFNlbGVjdGlvbkludGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmRpZFN1Y2NlZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxDaGVja1JlcXVlc3Q6OnNldENoZWNrZXJBbmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
OjpkaWRDaGVja1N1Y2NlZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRD
aGVja0NhbmNlbCk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6bGFzdFJlcXVlc3RJZGVudGlmaWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6bGFzdFByb2Nlc3NlZElkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpbmRHcmFtbWF0aWNhbEVycm9ycyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5k
TWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6
c3VicmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpm
aW5kTWlzc3BlbGxlZFdvcmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kVW5ncmFtbWF0
aWNhbFBocmFzZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVy
OjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OmNoZWNraW5nUmFuZ2VNYXRjaGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNDaGVja2luZ1JhbmdlQ292ZXJlZEJ5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdSYW5nZUNv
dmVycyBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OmlzV29yZEVuZE1hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yRWFjaE1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OnJhbmdlRm9yTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZENsb3Nlc3RQ
bGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBsYWluVGV4dCk6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBv
c2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDoKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXN1YWxX
b3JkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdWZm
aXhMZW5ndGhGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVmaXhMZW5ndGhGb3JSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFdvcmRCb3VuZGFyeSk6
CisgICAgICAgIChXZWJDb3JlOjplbmRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
cHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0V29y
ZFBvc2l0aW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdEJvdW5kYXJ5T2ZMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0Qm91bmRhcnlPZkxpbmUpOgorICAgICAgICAqIGVk
aXRpbmcvVmlzaWJsZVVuaXRzLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudElu
UmFuZ2UpOgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6RGF0ZVRpbWVGb3JtYXRW
YWxpZGF0b3I6OnZpc2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpEYXRlVGltZUZvcm1hdFZhbGlkYXRvcjo6dmFsaWRhdGVGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXR1cERhdGVUaW1lQ2hv
b3NlclBhcmFtZXRlcnMpOgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
Lmg6CisgICAgICAgICogaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6YWRq
dXN0SW5uZXJUZXh0U3R5bGUgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpcmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1lYXN1cmVUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5h
bCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Zm9u
dFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjptZWFzdXJlVGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVudGl0eVBhcnNlcjo6Y29uc3VtZU5hbWVkRW50aXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVIVE1MRW50aXR5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MRW50aXR5UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OmFwcGVuZFRvRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dFN0cmVhbTo6aW5zZXJ0QXRDdXJyZW50SW5zZXJ0aW9u
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjptYXJrRW5kT2ZGaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dFN0cmVhbTo6Y3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0U3RyZWFtOjpzcGxpdEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0U3RyZWFtOjptZXJnZUZyb20pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OmFwcGVuZFRvRW5k
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU291cmNlVHJhY2tlcjo6c3RhcnRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlVHJhY2tlcjo6ZW5kVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VU
cmFja2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpidWZmZXJBU0NJSUNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpidWZmZXJDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRva2VuaXplcjo6ZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmVtaXRFbmRPZkZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVG9rZW5pemVyOjpjb21taXRUb1BhcnRpYWxFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRva2VuaXplcjo6Y29tbWl0VG9Db21wbGV0ZUVuZFRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tl
bik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjpwZWVrKToKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjphZHZhbmNlUGFzdE5vbk5ld2xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OnByb2Nlc3NOZXh0SW5w
dXRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6
OmlzQXRFbmRPZkZpbGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgICogaHRtbC90
cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFRv
a2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlQW5kRW1pdFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5pemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAgKiBodG1s
L3RyYWNrL1dlYlZUVFRva2VuaXplci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
dXNlZFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUNvbnRlbnRCcmVha2VyOjp0cnlCcmVha2luZ1RleHRSdW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6d29yZEJyZWFrQmVoYXZp
b3IgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUl0ZW1zQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmJ1aWxkQmlk
aVBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1zQnVpbGRl
cjo6YnJlYWtBbmRDb21wdXRlQmlkaUxldmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW1zQnVpbGRlcjo6aGFuZGxlSW5saW5lQm94U3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveEVuZCk6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGx5UnVuRXhwYW5zaW9uKToKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6aW5saW5lRGlyZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lu
bGluZURpc3BsYXlCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS90ZXh0L1RleHRVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFV0
aWw6OmZhbGxiYWNrRm9udHNGb3JSdW4pOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9J
bmxpbmVJdGVyYXRvckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJv
eDo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAg
ICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3Zl
cmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9y
U3R5bGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnRpdGxlIGNv
bnN0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwOgorICAgICAgICAqIGxv
YWRlci9FbXB0eUNsaWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlF
ZGl0b3JDbGllbnQ6OkVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogbG9hZGVy
L0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIGxv
YWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6SGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJlbnRJdGVtVGl0bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjppbml0aWFsaXplSXRlbSk6Cisg
ICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmg6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZEZvbnQuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZTo6Z2V0VG9vbFRpcCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
V2l0aFNvZnRTcGFjZXMpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnJvb3RNYXJnaW4gY29uc3QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy55YW1sOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3NCYXNl
Lmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmF4ZXNGbGlwcGVkRm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSk6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlOjptYWluRnJhbWVDYW5SdWJiZXJCYW5kT25TaWRlKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnNjcm9sbFBvc2l0aW9uSXNOb3RSdWJiZXJiYW5kaW5nRWRnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bp
bm5lZE9uU2lkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjpzaG91bGRSdWJiZXJCYW5kT25TaWRlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpib3hTaWRlRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhCb3gu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVN0eWxlOjp0ZXh0RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9S
ZWN0RWRnZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVjdEVkZ2VzOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RF
ZGdlczo6dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6cmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpib3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVk
Z2VzOjpsZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlY3RFZGdlczo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdl
czo6cmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpib3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlY3RFZGdlczo6c2V0QXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2Vz
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRSaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OnNldEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWN0RWRnZXM6OnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpiZWZvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjphZnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWN0RWRnZXM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YmVmb3JlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlY3RFZGdlczo6YWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVk
Z2VzOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OmVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OnNldEJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWN0RWRnZXM6OnNldEFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdl
czo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRFbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjppc1Bpbm5lZE9uU2lkZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRPblNpZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnRhcmdldFNpZGVGb3JTY3JvbGxE
ZWx0YSk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL0RyYWdJbWFnZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0lt
YWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFu
Y2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFN5bnRoZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpj
b2xsZWN0Q29tcGxleFRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmFwcGx5VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb25LZXk6Om1ha2VGbGFnc0tleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRo
Rm9yU2ltcGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZTo6cmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNTbWFs
bENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnJlbmRlcmluZ01v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoVmFyaWFudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWR2YW5jZWRUZXh0UmVuZGVy
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Y29tcHV0ZUVu
YWJsZUtlcm5pbmcgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6a2VybmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmb250U21vb3RoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldEtlcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6c2V0Rm9udFNtb290aGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU21hbGxDYXBzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxLZXJuaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxGb250
U21vb3RoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omlu
aXRpYWxUZXh0UmVuZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjppbml0aWFsRm9udFN5bnRoZXNpcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsVmFyaWFudFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxWYXJpYW50Q2Fwcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsVmFyaWFudEFsdGVy
bmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlh
bE9wdGljYWxTaXppbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250
czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERl
c2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnRleHRSZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6b3JpZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpub25DSktHbHlw
aE9yaWVudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
d2lkdGhWYXJpYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
Zm9udFN5bnRoZXNpcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnZhcmlhbnRDb21tb25MaWdhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjp2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudENvbnRleHR1
YWxBbHRlcm5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
dmFyaWFudFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
Ojp2YXJpYW50TnVtZXJpY0ZpZ3VyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnZhcmlhbnROdW1lcmljU3BhY2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1lcmljRnJhY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY09yZGluYWwgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFu
dEFsdGVybmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2
YXJpYW50RWFzdEFzaWFuVmFyaWFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5XaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5SdWJ5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudFNldHRpbmdzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6b3B0aWNhbFNpemluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZvbnRTdHlsZUF4aXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRG
b250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFJlbmRl
cmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVu
ZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9yaWVu
dGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Tm9uQ0pLR2x5
cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldEZvbnRT
eW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50
Q29tbW9uTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0
VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDYXBzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudE51bWVyaWNGaWd1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY1NwYWNp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJp
Y0ZyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFu
dE51bWVyaWNPcmRpbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0
VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3Jp
cHRpb246OnNldFZhcmlhbnRBbHRlcm5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNj
cmlwdGlvbjo6c2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFzaWFuUnVieSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9wdGljYWxTaXppbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRGb250U3R5bGVBeGlzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpkZWNvZGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6d2lkdGhWYXJpYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OnRleHRSZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBo
aWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFw
cGVkUmVjdHNGb3JPdXRsaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJ1bjo6VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
OjpleHBhbnNpb25CZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpk
aXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6cnRsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46Omx0ciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UnVuOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6V2lkdGhJ
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphcHBseUluaXRpYWxB
ZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpjYWxjdWxhdGVBZGRpdGlvbmFs
V2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGZWF0dXJlU2V0dGluZ3NG
cm9tVmFyaWFudHMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZVBsYXRmb3JtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6Okluc3Rh
bGxlZEZvbnQ6Okluc3RhbGxlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNl
OjpGb250RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1G
b250TG9va3VwV2l0aEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2l0aEZhbWlseVNw
ZWNpYWxDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpsb29rdXBGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
YWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZvbnRGb3JJbnN0YWxsZWRGb250cyk6CisgICAgICAgIChXZWJDb3JlOjppc0ZvbnRNYXRjaGlu
Z1VzZXJJbnN0YWxsZWRGb250RmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YWRkQXR0cmli
dXRlc0ZvcldlYkZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZEZvbnRNYW5kYXRv
cnlBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNj
cmlwdGlvbkNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnRDYXNjYWRlTGlz
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRl
eHQ6OmNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhh
dmlvcik6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6c3lz
dGVtRm9udFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQ6OmNhc2NhZGVMaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
VmVydGljYWxUZXh0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2
YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhl
c2lzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlcml2YXRpdmVGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6RHJhd0dseXBocyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeSk6CisgICAgICAgICogcGxhdGZvcm0v
aW9zL1NlbGVjdGlvbkdlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9t
ZXRyeTo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21l
dHJ5OjpzZXREaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRSdWJiZXJCYW5kT25TaWRl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjphZmZlY3RlZFNpZGVPbkRvbWluYW50QXhpcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxkUnViYmVy
QmFuZE9uU2lkZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2Fs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN0cmluZ0J1aWxkZXI6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRGaWVsZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9CaWRpUnVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlSdW46OkJpZGlSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6dGFrZU5leHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9CaWRpUnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjpuZXh0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQm9yZGVyRWRnZS5oOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZsYWdG
b3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVzRWRnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdubWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
bGluZUdyb3VwOjpCYXNlbGluZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VsaW5lR3Jv
dXA6OmlzT3Bwb3NpdGVCbG9ja0Zsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZWxp
bmVHcm91cDo6aXNPcnRob2dvbmFsQmxvY2tGbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VsaW5lR3JvdXA6OmlzQ29tcGF0aWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlbGluZUNvbnRleHQ6OmZpbmRDb21wYXRpYmxlU2hhcmVkR3JvdXApOgorICAgICAgICAqIHJl
bmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRC
YXNlbGluZUFsaWdubWVudDo6c2V0QmxvY2tGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzcGVsbGlu
Z1Rvb2xUaXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVu
Y2F0ZWQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lFbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lFbGxpcHNpc0Jv
eDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnNlbGVjdGlv
blJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50
U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVCb3g6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVCb3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUlubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjplbWJlZENoYXJGcm9tRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpub3Rp
ZnlPYnNlcnZlcldpbGxFeGl0T2JqZWN0KToKKyAgICAgICAgKFBBTDo6SXNvbGF0ZVRyYWNrZXI6
OmVtYmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50
SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNJc29sYXRlZElubGluZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0Q29udGFpbmluZ0lzb2xhdGVXaXRo
aW5Sb290KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om51bWJlck9mSXNvbGF0ZUFuY2Vz
dG9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphZGRQbGFjZWhvbGRlclJ1bkZvcklz
b2xhdGVkSW5saW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2Vy
OjpJc29sYXRlVHJhY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJh
Y2tlcjo6ZW50ZXJJc29sYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVU
cmFja2VyOjpleGl0SXNvbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6aW5Jc29sYXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklz
b2xhdGVUcmFja2VyOjplbWJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250
aW51ZVBhc3RFbmRJbnRlcm5hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5l
VGV4dEJveDo6ZXhwYW5zaW9uQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29uc3RydWN0TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RXhwYW5zaW9uQmVoYXZpb3IpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvclNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6aGFuZGxl
VHJhaWxpbmdTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JT
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVC
b3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojps
YXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxp
bmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lMaW5lTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6Y2hpbGRSZW1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0Jp
ZGlTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6
c2V0TGluZUJyZWFrSW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFkanVzdEJvcmRlckJveFJlY3RGb3JQYWludGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRSZWN0VG9DbGlwT3V0RnJvbUJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Ym9yZGVyVG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpib3JkZXJMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpib3JkZXJCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmJvcmRlclJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZEZsaXBCZWZvcmVBZnRlck1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENv
cm5lcik6CisgICAgICAgIChXZWJDb3JlOjpjb2xvcnNNYXRjaEF0Q29ybmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcik6CisgICAgICAgIChXZWJDb3Jl
Ojp3aWxsQmVPdmVyZHJhd24pOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKToKKyAgICAgICAgKFdlYkNvcmU6OmpvaW5SZXF1aXJlc01pdHJlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T25lQm9yZGVyU2lkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjYWxjdWxhdGVTaWRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXJTaWRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0Jh
Y2tncm91bmRFZGdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpib3JkZXJPYnNjdXJlc0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmlu
ZVRleHRJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3g6OmFwcGx5TGluZUNsYW1wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXRhaWxzTWFya2VyOjpvcmllbnRh
dGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpwYWludE91dGxpbmUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6aXNMZWZ0VG9SaWdodEZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZUJvcmRlckJlZm9yZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9yZGVy
QWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsb3dB
d2FyZVBhZGRpbmdCZWZvcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGli
bGVCb3g6OmZsb3dBd2FyZVBhZGRpbmdBZnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQgY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudGVkRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYWdtZW50ZWRGbG93Ojp1cGRhdGVGcmFnbWVudHNGcmFnbWVudGVkRmxvd1BvcnRpb25S
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
YWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxPcmlnaW4pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y29tcHV0
ZU1hcmtlclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpkaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQgY29uc3QpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6
OmNsaWVudFBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0
OjpwYWludENvbHVtblJ1bGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25H
ZW9tZXRyaWVzSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xsYXBzZWRCb3JkZXJzOjphZGRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjpwYWludFJvd0dyb3VwQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6b2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRlckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1heFdvcmRGcmFnbWVudFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3Mp
OgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL0JyZWFraW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0
OjpoYW5kbGVCUik6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91
dE9mRmxvd1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVFbXB0eUlubGluZSk6CisgICAgICAgIChXZWJDb3JlOjp0cnlIeXBoZW5hdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAq
IHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmFpbGluZ09iamVjdHM6OnVwZGF0ZVdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbnNGb3JU
cmFpbGluZ0JveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjptaXJyb3JJZk5lZWRlZCBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGh5
c2ljYWxSZWN0VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUG9pbnRUb0xv
Z2ljYWwpOgorICAgICAgICAoV2ViQ29yZTo6cGh5c2ljYWxTaXplVG9Mb2dpY2FsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZUJv
eFNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlT3V0c2lkZUluZm86OmNyZWF0ZVNoYXBlRm9ySW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OmJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
TmluZVBpZWNlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlUGllY2VIb3Jpem9udGFs
U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVBpZWNlVmVydGljYWxTaWRlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OmJvcmRlckJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6Ym9yZGVyQWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmJvcmRlckJlZm9yZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpib3JkZXJBZnRlcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpmb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6c2hvdWxkUGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dXNlZENsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjp1c2VkRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpkaXJlY3Rpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OndyaXRpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0hvcml6b250YWxXcml0aW5nTW9kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aXNWZXJ0aWNhbFdyaXRpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0ZsaXBwZWRMaW5lc1dy
aXRpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6c2V0VW5pY29kZUJpZGkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldERp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbFVuaWNvZGVC
aWRpKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbml0aWFsRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbml0aWFsV3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAqIHN0eWxlL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpFbGVtZW50UnVsZUNv
bGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjppc0xl
ZnRQYWdlIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjpQYWdlUnVsZUNvbGxlY3Rv
cik6CisgICAgICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgICogc3R5bGUv
U3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFk
anVzdCBjb25zdCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50
aGVzaXMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TGln
YXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxGb250VmFyaWFudE51bWVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjphZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyU3RhdGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZv
ckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAgICAgICog
c3R5bGUvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2
ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQgY29uc3QpOgorICAgICAgICAqIHht
bC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6dW5jb25zdW1lQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ2hh
cmFjdGVyUmVmZXJlbmNlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQpOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAyMS0xMS0zMCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIHRoZSB0
aW1lc3RhbXAgZm9yIHNjcm9sbGluZyB0aHJlYWQgYW5pbWF0aW9ucyB0aHJvdWdoIGFsbCB0aGUg
c2VydmljZVNjcm9sbEFuaW1hdGlvbigpIGNhbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCBhYTQ0
NzQ4YzU2NmNiZTc2NWUwZWE2YzlhYjBjN2JhMDA5Y2I4MjFkLi5iNzk5ZDYzNzg5MzA0NDE3NWQz
YzIxODdkMjFmOWU3NmMyMjUwZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBA
QAorMjAyMS0xMi0wMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgYSBmZXcgbW9yZSBmaWxlcyBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dCB0byBXZWJDb3JlL1BBTC90ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzM2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBhbC90ZXh0L0JpZGlDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L0JpZGlDb250
ZXh0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmguCisgICAgICAgICogcGFsL3RleHQvQmlkaVJlc29sdmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oLgorICAgICAgICAoUEFM
OjpEZXJpdmVkQ2xhc3M+OjpjcmVhdGVCaWRpUnVuc0ZvckxpbmUpOgorICAgICAgICAqIHBhbC90
ZXh0L0JpZGlSdW5MaXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0JpZGlSdW5MaXN0LmguCisgICAgICAgIChQQUw6OkJpZGlSdW5MaXN0PFJ1bj46OnJldmVy
c2VSdW5zKToKKyAgICAgICAgKiBwYWwvdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMu
aC4KKyAgICAgICAgKiBwYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5nZS5oLgorICAgICAgICAqIHBhbC90ZXh0
L0RhdGVUaW1lRm9ybWF0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwLgorICAgICAgICAoUEFMOjpEYXRlVGltZUZvcm1hdDo6
cGFyc2UpOgorICAgICAgICAqIHBhbC90ZXh0L0RhdGVUaW1lRm9ybWF0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmguCisgICAgICAg
ICogcGFsL3RleHQvRm9udFJlbmRlcmluZ01vZGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvRm9udFJlbmRlcmluZ01vZGUuaC4KKyAgICAgICAgKiBwYWwvdGV4
dC9IeXBoZW5hdGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9IeXBoZW5hdGlvbi5oLgorICAgICAgICAqIHBhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAuCisgICAgICAgIChQQUw6Omxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgpOgorICAgICAg
ICAqIHBhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L1NlZ21lbnRlZFN0
cmluZy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50
ZWRTdHJpbmcuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rp
b24uaC4KKyAgICAgICAgKiBwYWwvdGV4dC9TdWZmaXhUcmVlLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N1ZmZpeFRyZWUuaC4KKyAgICAgICAgKFBBTDo6QVND
SUlDb2RlYm9vazo6Y29kZVdvcmQpOgorICAgICAgICAqIHBhbC90ZXh0L1RleHRCb3VuZGFyaWVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5k
YXJpZXMuY3BwLgorICAgICAgICAoUEFMOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAg
ICAqIHBhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmguCisgICAgICAgIChQQUw6OnJlcXVpcmVz
Q29udGV4dEZvcldvcmRCb3VuZGFyeSk6CisgICAgICAgICogcGFsL3RleHQvVGV4dENoZWNraW5n
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2lu
Zy5oLgorICAgICAgICAqIHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oLgorICAgICAgICAqIHBh
bC90ZXh0L1RleHRGbGFncy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RmxhZ3MuaC4KKyAgICAgICAgKFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5nczo6ZGVj
b2RlKToKKyAgICAgICAgKFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmRlY29kZSk6
CisgICAgICAgIChQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlczo6ZGVjb2RlKToKKyAgICAg
ICAgKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmRlY29kZSk6CisgICAgICAgICog
cGFsL3RleHQvVW5pY29kZUJpZGkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVW5pY29kZUJpZGkuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9Xcml0aW5nTW9kZS5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5o
LgorICAgICAgICAqIHBhbC90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcC4KKyAgICAg
ICAgKiBwYWwvdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbS4KKyAgICAgICAgKFBB
TDo6ZmluZENvbXBsZXhXb3JkQm91bmRhcnkpOgorICAgICAgICAoUEFMOjpmaW5kTmV4dFdvcmRG
cm9tSW5kZXgpOgorICAgICAgICAqIHBhbC90ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW06IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q2hlY2tpbmdN
YWMubW0uCisKIDIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhlc2l6ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAppbmRl
eCA2NTM5MTUyZTk4YzVhYWM4ODg3NTFlOGEyYWIxOTQ3YmFiODIyMzAyLi5iYWVjODY4MTQ4ODEx
MGNlYjQ0NDZiYTA2YTYyMzVkNDNlZmFlYzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCkBAIC0zNyw4ICszNyw4IEBACiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25EaXJlY3Rpb24u
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSAiV3JpdGlu
Z01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Myw3ICs3Myw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBTdHJpbmcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAgICAg
Y29uc3QgVVJMJiBpY29uKCkgY29uc3QgeyByZXR1cm4gbV9pY29uOyB9CiAKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IERpcmVjdGlv
bjo6UnRsID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9u
ID09IERpcmVjdGlvbjo6UnRsID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUjsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaENsaWNr
RXZlbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGJjMzVkOGM2MWJiMTBhYjlhNjZmZTgwZmFmYmUyYmIzZGYyNWZlOGYuLjQ3NjZiNjhmNzQ0
ZTdkYjFmMGUwOWRhOGNjNTJlNmJhZWI5MWVhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNiw2ICsxMzYsMTQgQEAKIAkJ
MUMzNkM1MkYyNzQzMDExQTAwNkRBNEMxIC8qIFdlYkdQVURvd25jYXN0Q29udmVydFRvQmFja2lu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDMzZDNTJEMjc0MzAxMUEwMDZEQTRDMSAvKiBXZWJHUFVEb3duY2FzdENvbnZlcnRUb0JhY2tp
bmdDb250ZXh0LmggKi87IH07CiAJCTFDNDg3NkQ4MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3
NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKIAkJMUM0ODc2RDkxRjhE
N0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmggKi87
IH07CisJCTFDNUM1ODE4Mjc1Nzc0RjAwMDNCNTQwRCAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MEEyNzU3
NzRENzAwM0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi87IH07CisJCTFDNUM1ODE5Mjc1
Nzc0RjAwMDNCNTQwRCAvKiBRdW90ZWRQcmludGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MDUyNzU3NzRDRjAwM0I1NDBEIC8qIFF1
b3RlZFByaW50YWJsZS5jcHAgKi87IH07CisJCTFDNUM1ODFBMjc1Nzc0RjAwMDNCNTQwRCAvKiBC
aWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyogQmlkaUNvbnRleHQuY3BwICovOyB9Owor
CQkxQzVDNTgxQjI3NTc3NEYwMDAzQjU0MEQgLyogRGF0ZVRpbWVGb3JtYXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MTQyNzU3NzRFQTAw
M0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmNwcCAqLzsgfTsKKwkJMUM1QzU4MUMyNzU3NzRGMDAw
M0I1NDBEIC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1ODBEMjc1Nzc0REQwMDNCNTQwRCAvKiBUZXh0Qm91bmRh
cmllcy5jcHAgKi87IH07CisJCTFDNUM1ODIyMjc1NzdGMjkwMDNCNTQwRCAvKiBUZXh0Qm91bmRh
cmllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
NUM1ODIxMjc1NzdGMjgwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLzsgfTsKKwkJMUM1
QzU4MjYyNzU3OTkzRTAwM0I1NDBEIC8qIFRleHRDaGVja2luZ01hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1ODI1Mjc1Nzk5M0UwMDNCNTQw
RCAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi87IH07CisJCTFDNUM1ODI3Mjc1N0E1RUUwMDNCNTQw
RCAvKiBIeXBoZW5hdGlvbkNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNUM1ODFGMjc1NzdDN0YwMDNCNTQwRCAvKiBIeXBoZW5hdGlvbkNGLmNw
cCAqLzsgfTsKIAkJMUM3N0M4QzkyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExpbmsu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM3N0M4
QzcyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExpbmsuY3BwICovOyB9OwogCQkxQzc3
QzhDRTI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzc3QzhDRDI1RDdBNEEzMDA2MzVFMEMgLyog
T1RTVkdUYWJsZS5jcHAgKi87IH07CiAJCTFDQzNBQ0U4MjJCRDdFQzUwMEYzNjBGMCAvKiBNZXRh
bFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUND
M0FDRTcyMkJEN0VCODAwRjM2MEYwIC8qIE1ldGFsU1BJLmggKi87IH07CkBAIC01MzQsNiArNTQy
LDMyIEBACiAJCTFDMzZDNTJEMjc0MzAxMUEwMDZEQTRDMSAvKiBXZWJHUFVEb3duY2FzdENvbnZl
cnRUb0JhY2tpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVURvd25jYXN0Q29udmVy
dFRvQmFja2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2
RDYxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9n
Z2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDAyNzU3NzRDOTAwM0I1NDBEIC8qIEJpZGlDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwMjI3NTc3NENBMDAzQjU0MEQgLyog
QmlkaVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUmVz
b2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDMyNzU3NzRDQzAw
M0I1NDBEIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRSZW5kZXJp
bmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODA0Mjc1Nzc0Q0Qw
MDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dEJvdW5kYXJpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1
QzU4MDUyNzU3NzRDRjAwM0I1NDBEIC8qIFF1b3RlZFByaW50YWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdW90ZWRQcmludGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyogQmlkaUNvbnRl
eHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpZGlDb250ZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDcyNzU3NzREMjAwM0I1
NDBEIC8qIFRleHRGbGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dEZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODA4Mjc1Nzc0RDQw
MDNCNTQwRCAvKiBCaWRpUnVuTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCaWRpUnVuTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwOTI3
NTc3NEQ1MDAzQjU0MEQgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGF0ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM1QzU4MEEyNzU3NzRENzAwM0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MEIyNzU3NzREOTAwM0I1NDBEIC8qIENo
YXJhY3RlclByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hh
cmFjdGVyUHJvcGVydGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgw
QzI3NTc3NERCMDAzQjU0MEQgLyogU2VnbWVudGVkU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUM1QzU4MEQyNzU3NzRERDAwM0I1NDBEIC8qIFRleHRCb3VuZGFyaWVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MEYyNzU3NzRFMDAwM0I1NDBEIC8q
IFRleHRDaGVja2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hl
Y2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTAyNzU3NzRFMjAw
M0I1NDBEIC8qIFVuaWNvZGVCaWRpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVuaWNvZGVCaWRpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODExMjc1
Nzc0RTQwMDNCNTQwRCAvKiBTdWZmaXhUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN1ZmZpeFRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4
MTIyNzU3NzRFNjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEh5cGhlbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDNUM1ODEzMjc1Nzc0RTgwMDNCNTQwRCAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTQyNzU3NzRFQTAwM0I1NDBEIC8qIERhdGVU
aW1lRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVU
aW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTUyNzU3
NzRFQzAwM0I1NDBEIC8qIFF1b3RlZFByaW50YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBRdW90ZWRQcmludGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM1QzU4MTYyNzU3NzRFRTAwM0I1NDBEIC8qIFRleHREaXJlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVD
NTgxNzI3NTc3NEVGMDAzQjU0MEQgLyogV3JpdGluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV3JpdGluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM1QzU4MUYyNzU3N0M3RjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSHlwaGVuYXRpb25DRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDNUM1ODIxMjc1NzdGMjgwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MjQyNzU3OTVFNDAwM0I1NDBEIC8qIENo
YXJhY3RlclJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoYXJhY3Rl
clJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODI1Mjc1Nzk5M0Uw
MDNCNTQwRCAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0
Q2hlY2tpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjdDRUEyMUUz
MkVFMjYwMEY4MEYyRSAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvcmVUZXh0U29mdExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzc3QzhDODI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGluay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb3JlVGV4dFNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTU5LDYgKzExOTMsMTQgQEAKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFDNUM1ODFFMjc1NzdDNTcwMDNCNTQwRCAvKiBjZiAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUM1QzU4MUYy
NzU3N0M3RjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovLAorCQkJKTsKKwkJCXBhdGgg
PSBjZjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTFDQzVFM0MxMjczNzQ1
N0QwMDZGNkZGNCAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC0xMzM2LDEwICsxMzc4LDM0IEBACiAJCUEzMEQ0MTFEMUYwREQwQUMwMEI3
MTk1NCAvKiB0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkxQzVDNTgxRTI3NTc3QzU3MDAzQjU0MEQgLyogY2YgKi8sCiAJCQkJQTMwRDQxMjMxRjBE
RDEwNTAwQjcxOTU0IC8qIG1hYyAqLywKKwkJCQkxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyog
QmlkaUNvbnRleHQuY3BwICovLAorCQkJCTFDNUM1ODAwMjc1Nzc0QzkwMDNCNTQwRCAvKiBCaWRp
Q29udGV4dC5oICovLAorCQkJCTFDNUM1ODAyMjc1Nzc0Q0EwMDNCNTQwRCAvKiBCaWRpUmVzb2x2
ZXIuaCAqLywKKwkJCQkxQzVDNTgwODI3NTc3NEQ0MDAzQjU0MEQgLyogQmlkaVJ1bkxpc3QuaCAq
LywKKwkJCQkxQzVDNTgwQjI3NTc3NEQ5MDAzQjU0MEQgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5o
ICovLAorCQkJCTFDNUM1ODI0Mjc1Nzk1RTQwMDNCNTQwRCAvKiBDaGFyYWN0ZXJSYW5nZS5oICov
LAorCQkJCTFDNUM1ODE0Mjc1Nzc0RUEwMDNCNTQwRCAvKiBEYXRlVGltZUZvcm1hdC5jcHAgKi8s
CisJCQkJMUM1QzU4MDkyNzU3NzRENTAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmggKi8sCisJ
CQkJMUM1QzU4MDMyNzU3NzRDQzAwM0I1NDBEIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8sCisJ
CQkJMUM1QzU4MTIyNzU3NzRFNjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uLmggKi8sCiAJCQkJQTMw
RDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5nLmNwcCAqLywKIAkJCQlBMzBENDExRTFG
MEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywKKwkJCQkxQzVDNTgwNTI3NTc3NENGMDAz
QjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmNwcCAqLywKKwkJCQkxQzVDNTgxNTI3NTc3NEVDMDAz
QjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmggKi8sCisJCQkJMUM1QzU4MEEyNzU3NzRENzAwM0I1
NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8sCisJCQkJMUM1QzU4MEMyNzU3NzREQjAwM0I1
NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5oICovLAorCQkJCTFDNUM1ODEzMjc1Nzc0RTgwMDNCNTQw
RCAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8sCisJCQkJMUM1QzU4MTEyNzU3NzRFNDAwM0I1
NDBEIC8qIFN1ZmZpeFRyZWUuaCAqLywKKwkJCQkxQzVDNTgwRDI3NTc3NEREMDAzQjU0MEQgLyog
VGV4dEJvdW5kYXJpZXMuY3BwICovLAorCQkJCTFDNUM1ODA0Mjc1Nzc0Q0QwMDNCNTQwRCAvKiBU
ZXh0Qm91bmRhcmllcy5oICovLAorCQkJCTFDNUM1ODBGMjc1Nzc0RTAwMDNCNTQwRCAvKiBUZXh0
Q2hlY2tpbmcuaCAqLywKKwkJCQkxQzVDNTgxNjI3NTc3NEVFMDAzQjU0MEQgLyogVGV4dERpcmVj
dGlvbi5oICovLAorCQkJCTFDNUM1ODA3Mjc1Nzc0RDIwMDNCNTQwRCAvKiBUZXh0RmxhZ3MuaCAq
LywKIAkJCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5o
ICovLAorCQkJCTFDNUM1ODEwMjc1Nzc0RTIwMDNCNTQwRCAvKiBVbmljb2RlQmlkaS5oICovLAor
CQkJCTFDNUM1ODE3Mjc1Nzc0RUYwMDNCNTQwRCAvKiBXcml0aW5nTW9kZS5oICovLAogCQkJKTsK
IAkJCXBhdGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEzNDgsNiAr
MTQxNCw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUEzMEQ0
MTI0MUYwREQxMkQwMEI3MTk1NCAvKiBLaWxsUmluZ01hYy5tbSAqLywKKwkJCQkxQzVDNTgyMTI3
NTc3RjI4MDAzQjU0MEQgLyogVGV4dEJvdW5kYXJpZXMubW0gKi8sCisJCQkJMUM1QzU4MjUyNzU3
OTkzRTAwM0I1NDBEIC8qIFRleHRDaGVja2luZ01hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0g
bWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE3ODMsNiArMTg1MSw3IEBACiAJ
CQkJNTdGRDMxOEEyMkIzNTkzRTAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE2RTk5NTMyM0RBRTZCRTAwRTg3MUNCIC8qIEF1ZGlvVG9vbGJveFNvZnRM
aW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3N0U4N0IxMjI2QTQ2MDIwMEEyQUZGMCAvKiBB
VkZvdW5kYXRpb25Tb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODFBMjc1Nzc0
RjAwMDNCNTQwRCAvKiBCaWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRDJCNDEz
NDI1RjA1RTM1MDBBM0Y3MEEgLyogQ2xvY2tHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBDRjk5Q0E4MUY3Mzg0MzcwMDdFRTc5MyAvKiBDb3JlTWVkaWFTb2Z0TGluay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQzc3QzhDOTI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGlu
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3OTAsMTAgKzE4NTksMTIgQEAKIAkJCQk1N0YxQzkw
QTI1RENGMENGMDBFOEY2RUEgLyogQ3J5cHRvS2l0UHJpdmF0ZVNvZnRMaW5rLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjREREQwMUIyNjREQzY5RTAwRUYxQjkxIC8qIERhdGFEZXRlY3RvcnNDb3Jl
U29mdExpbmsubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNEUwODc1QzI2NkFDQTUzMDAwRjgxNEEg
LyogRGF0YURldGVjdG9yc1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUM1QzU4MUIy
NzU3NzRGMDAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUExMTc1QjU4MUY2QjQ3MDUwMEM0QjlGMCAvKiBEZWZhdWx0U2VhcmNoUHJvdmlkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjQ0MjkxNjQxRkE1MjY3MDAwMkNDOTNFIC8qIEZpbGVTaXplRm9y
bWF0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY0NDI5MTY4MUZBNTI3MDUwMDJDQzkzRSAv
KiBGaWxlU2l6ZUZvcm1hdHRlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMwMjJFRkUy
MkNGRThFMTAwNkRGMDFCIC8qIEd1bnppcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzVDNTgy
NzI3NTdBNUVFMDAzQjU0MEQgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMzBENDEyMjFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTMwRDQxMjUxRjBERDEyRDAwQjcxOTU0IC8qIEtpbGxSaW5nTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUM0ODc2RDgxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xODA5LDggKzE4ODAsMTAgQEAKIAkJCQlBMTE3NUI0RjFGNkIzMzczMDBD
NEI5RjAgLyogUG9wdXBNZW51Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ1MEZDOUYyMUY1RjYw
MjAwNERGQTU2IC8qIFF1aWNrTG9va1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjRD
ODVBNEUyNjU4NTUxQTAwNUI4OUNDIC8qIFF1aWNrTG9va1VJU29mdExpbmsubW0gaW4gU291cmNl
cyAqLywKKwkJCQkxQzVDNTgxOTI3NTc3NEYwMDAzQjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3MUMwMDM3MjcwN0VERjAwMEQwMjdDNyAvKiBSZXBsYXlL
aXRTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0OTc0RUE0MjY1RUVBMjIwMEI0OUI4
QyAvKiBSZXZlYWxTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODE4Mjc1Nzc0
RjAwMDNCNTQwRCAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NjZDREMxRjQ2MkQ2QTAwOUU2RUU5IC8qIFNlc3Npb25JRC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBM0FCNkU1MjFGM0QxREM1MDA5QzE0QjEgLyogU2xlZXBEaXNhYmxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBM0FCNkU2MDFGM0QxRTM5MDA5QzE0QjEgLyogU2xlZXBEaXNhYmxlckNvY29h
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgyMCw2ICsxODkzLDkgQEAKIAkJCQlBM0FCNkU1NzFG
M0QxRERCMDA5QzE0QjEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0FCNkU2NTFGM0QyMTdGMDA5QzE0QjEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTA3OUQxRDk4MjY5NTBERDcwMDg4MzU3NyAvKiBTeXN0ZW1T
dGF0dXNTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODFDMjc1Nzc0RjAwMDNC
NTQwRCAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzVDNTgyMjI3
NTc3RjI5MDAzQjU0MEQgLyogVGV4dEJvdW5kYXJpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQkx
QzVDNTgyNjI3NTc5OTNFMDAzQjU0MEQgLyogVGV4dENoZWNraW5nTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkUxMzQyQ0QyMTVBQTEwQTAwNzE5OUQyIC8qIFVJS2l0U29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQkwNzYxMURCNzI0M0ZBNUJGMDBEODA3MDQgLyogVXNhZ2VUcmFja2lu
Z1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUYzNDQyNDhBNkEwMDAwMjJENURF
IC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU2MzEyNzA5ZjQz
MmM0MTU3NTBlODE4ODljYjAxNWY2YmU5NDI4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisKKyNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250
ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4g
eworICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OworICAgIHZvaWQqIHBhcmVudDsKK307CisK
K0NPTVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4dCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNC
aWRpQ29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9zdGF5X3NtYWxsKTsKKworaW5saW5lIEJp
ZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBC
aWRpQ29udGV4dCogcGFyZW50KQorICAgIDogbV9sZXZlbChsZXZlbCkKKyAgICAsIG1fZGlyZWN0
aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fb3ZlcnJpZGUob3ZlcnJpZGUpCisgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2lubGluZSBSZWY8Qmlk
aUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNhY2hlZCh1bnNpZ25lZCBjaGFyIGxldmVs
LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdT
b3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBzb3VyY2UsIHBh
cmVudCkpOworfQorCitSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGUodW5zaWdu
ZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBC
aWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKK3sKKyAgICBB
U1NFUlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRf
VE9fUklHSFQpKTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHJldHVybiBjcmVhdGVVbmNh
Y2hlZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNlLCBwYXJlbnQpOworCisgICAg
QVNTRVJUKGxldmVsIDw9IDEpOworICAgIGlmICghbGV2ZWwpIHsKKyAgICAgICAgaWYgKCFvdmVy
cmlkZSkgeworICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29u
dGV4dD4+IGx0ckNvbnRleHQ7CisgICAgICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgbHRy
Q29udGV4dE9uY2VGbGFnOworICAgICAgICAgICAgc3RkOjpjYWxsX29uY2UobHRyQ29udGV4dE9u
Y2VGbGFnLCBbJl0oKSB7CisgICAgICAgICAgICAgICAgbHRyQ29udGV4dC5nZXQoKSA9IGNyZWF0
ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFsc2UsIEZyb21TdHlsZU9yRE9NLCAwKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuICpsdHJDb250ZXh0LmdldCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29u
dGV4dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKKyAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOworICAgICAgICBzdGQ6OmNhbGxfb25jZShsdHJP
dmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgeworICAgICAgICAgICAgbHRyT3ZlcnJpZGVD
b250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZUX1RPX1JJR0hULCB0cnVlLCBG
cm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKmx0ck92ZXJy
aWRlQ29udGV4dC5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAoIW92ZXJyaWRlKSB7CisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxDb250ZXh0Owor
ICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsQ29udGV4dE9uY2VGbGFnOworICAgICAg
ICBzdGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgICAg
IHJ0bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgxLCBVX1JJR0hUX1RPX0xFRlQsIGZh
bHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKnJ0
bENvbnRleHQuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0
cjxCaWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4dDsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UocnRs
T3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgcnRsT3ZlcnJpZGVDb250
ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9UT19MRUZULCB0cnVlLCBGcm9t
U3R5bGVPckRPTSwgMCk7CisgICAgfSk7CisgICAgcmV0dXJuICpydGxPdmVycmlkZUNvbnRleHQu
Z2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmPEJpZGlDb250ZXh0PiBjb3B5Q29udGV4dEFu
ZFJlYmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29udGV4dCwgQmlkaUNvbnRleHQqIHBhcmVu
dCkKK3sKKyAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50ID8gcGFyZW50LT5sZXZlbCgpIDogMDsK
KyAgICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgIG5ld0xl
dmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZlbCk7CisgICAgZWxzZSBpZiAocGFyZW50
KQorICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxldmVsKG5ld0xldmVsKTsKKyAg
ICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdMZXZlbCwgY29udGV4dC5kaXIoKSwgY29u
dGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgpLCBwYXJlbnQpOworfQorCisvLyBUaGUg
QmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFibGUgLS0gdGhleSdyZSByZS11c2VkIGZv
ciByZS1sYXlvdXQgYWZ0ZXIKKy8vIERPTSBtb2RpZmljYXRpb24vZWRpdGluZyAtLSBzbyB3ZSBj
b3B5IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMsIGFuZAorLy8gcmVjYWxjdWxhdGUgdGhl
aXIgbGV2ZWxzLgorUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y29weVN0YWNrUmVtb3Zp
bmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQoreworICAgIFZlY3RvcjxCaWRpQ29udGV4dCos
IDY0PiBjb250ZXh0czsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gdGhpczsgYW5jZXN0b3I7
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci0+
c291cmNlKCkgIT0gRnJvbVVuaWNvZGUpCisgICAgICAgICAgICBjb250ZXh0cy5hcHBlbmQoYW5j
ZXN0b3IpOworICAgIH0KKyAgICBBU1NFUlQoY29udGV4dHMuc2l6ZSgpKTsKKyAgICBhdXRvIHRv
cENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHMubGFzdCgp
LCBudWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb250ZXh0cy5zaXplKCkgLSAxOyBp
OyAtLWkpCisgICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZl
bCgqY29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0cigpKTsKKyAgICByZXR1cm4gdG9wQ29u
dGV4dDsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlDb250ZXh0JiBjMSwgY29uc3Qg
QmlkaUNvbnRleHQmIGMyKQoreworICAgIGlmICgmYzEgPT0gJmMyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5sZXZlbCgpIHx8IGMxLm92ZXJyaWRlKCkg
IT0gYzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBjMi5kaXIoKSB8fCBjMS5zb3VyY2UoKSAh
PSBjMi5zb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYzEucGFyZW50
KCkpCisgICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7CisgICAgcmV0dXJuIGMyLnBhcmVudCgp
ICYmICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBB
TApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NzRkYTE5ZmQzYjcwZDI5NTg3MmUxNjhhMTM2NzM4OGNmZDRjODIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBQQUwgeworCitlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5
bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKKworLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxp
Y2l0IGVtYmVkZGluZ3MuCitjbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxCaWRpQ29udGV4dD4geworcHVibGljOgorICAgIFBBTF9FWFBPUlQgc3RhdGljIFJl
ZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9u
LCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVP
ckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAgQmlkaUNvbnRleHQq
IHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9CisgICAgdW5zaWduZWQg
Y2hhciBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7IH0KKyAgICBVQ2hhckRpcmVjdGlv
biBkaXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9kaXJl
Y3Rpb24pOyB9CisgICAgYm9vbCBvdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGU7
IH0KKyAgICBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEJpZGlFbWJlZGRpbmdTb3VyY2U+KG1fc291cmNlKTsgfQorCisgICAgUEFMX0VYUE9S
VCBSZWY8QmlkaUNvbnRleHQ+IGNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRl
eHRzKCk7CisKK3ByaXZhdGU6CisgICAgQmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwg
VUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlD
b250ZXh0KiBwYXJlbnQpOworCisgICAgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlVW5j
YWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUs
IEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOworCisgICAgdW5zaWdu
ZWQgbV9sZXZlbCA6IDY7IC8vIFRoZSBtYXhpbWl1bSBiaWRpIGxldmVsIGlzIDYyOiBodHRwOi8v
dW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0V4cGxpY2l0X0xldmVsc19hbmRfRGlyZWN0aW9ucwor
ICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDogNTsgLy8gRGlyZWN0aW9uCisgICAgdW5zaWduZWQg
bV9vdmVycmlkZSA6IDE7CisgICAgdW5zaWduZWQgbV9zb3VyY2UgOiAxOyAvLyBCaWRpRW1iZWRk
aW5nU291cmNlCisgICAgUmVmUHRyPEJpZGlDb250ZXh0PiBtX3BhcmVudDsKK307CisKK2lubGlu
ZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyT2RkTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkK
K3sKKyAgICByZXR1cm4gKGxldmVsICsgMSkgfCAxOworfQorCitpbmxpbmUgdW5zaWduZWQgY2hh
ciBuZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQoreworICAgIHJldHVy
biAobGV2ZWwgKyAyKSAmIH4xOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNvbnRl
eHQmLCBjb25zdCBCaWRpQ29udGV4dCYpOworCit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjMxOTkzZDcx
YjcyZmJmZWQ5N2VkMDM5YjIzOTI3YjU1YzQyNTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0wLDAgKzEsOTYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisjaW5jbHVkZSAiQmlk
aVJ1bkxpc3QuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgUEFMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IGNs
YXNzIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgeworcHVibGljOgorICAgIHZvaWQgcmVzZXQo
KQorICAgIHsKKyAgICAgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworICAgICAgICBtX2N1cnJl
bnRUcmFuc2l0aW9uID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydElnbm9yaW5nU3Bh
Y2VzKGNvbnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
bV90cmFuc2l0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5k
KHRyYW5zaXRpb24pOworICAgIH0KKworICAgIHZvaWQgc3RvcElnbm9yaW5nU3BhY2VzKGNvbnN0
IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNpdGlv
bnMuc2l6ZSgpICUgMik7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRpb24p
OworICAgIH0KKworICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1lbnQoKTsKKyAg
ICB9CisKKyAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygpIHsgcmV0dXJu
IG1fdHJhbnNpdGlvbnM7IH0KKyAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQorICAgIHNpemVfdCBjdXJyZW50VHJhbnNpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIHNldEN1
cnJlbnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1cnJlbnRUcmFu
c2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGluY3JlbWVudEN1cnJlbnRU
cmFuc2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGRlY3JlbWVu
dE51bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5zaXRpb25zLnNp
emUoKSAtIDEpOyB9CisgICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SXRlcmF0
b3I+IG1fdHJhbnNpdGlvbnM7CisgICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRpb24geyAwIH07
Cit9OworCisvLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0eXBpY2FsbHkg
dGhlIGVuZCBvZiBhIGxpbmUpIGNhbgorLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVzZWQgdG8gcmVz
dGFydCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KK3N0cnVjdCBCaWRpU3RhdHVz
IHsKKyAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ3JlYXRlcyBhIEJpZGlT
dGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBkZWZhdWx0IGRp
cmVjdGlvbi4KKyAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBoYXMgdHdvIHBv
c3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMgYXQgbGVhc3Qg
MTkuCisgICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBpc092ZXJy
aWRlKQorICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gVV9M
RUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAsIGxhc3RTdHJvbmcoZW9y
KQorICAgICAgICAsIGxhc3QoZW9yKQorICAgICAgICAsIGNvbnRleHQoQmlkaUNvbnRleHQ6OmNy
ZWF0ZShkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMCA6IDEsIGVvciwgaXNPdmVy
cmlkZSkpCisgICAgeworICAgIH0KKworICAgIEJpZGlTdGF0dXMoVUNoYXJEaXJlY3Rpb24gZW9y
LCBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlvbiBsYXN0LCBSZWZQdHI8
QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKKyAgICAgICAgOiBlb3IoZW9yKQorICAgICAgICAsIGxh
c3RTdHJvbmcobGFzdFN0cm9uZykKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgICAgICwgY29u
dGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgIHsKKyAgICB9CisKKyAgICBVQ2hhckRpcmVjdGlv
biBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25n
IHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgVUNoYXJEaXJlY3Rpb24gbGFzdCB7IFVfT1RIRVJf
TkVVVFJBTCB9OworICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4dDsKK307CisKK3N0cnVj
dCBCaWRpRW1iZWRkaW5nIHsKKyAgICBCaWRpRW1iZWRkaW5nKFVDaGFyRGlyZWN0aW9uIGRpcmVj
dGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCisgICAgICAgIDogZGlyZWN0aW9uKGRp
cmVjdGlvbikKKyAgICAgICAgLCBzb3VyY2Uoc291cmNlKQorICAgIHsKKyAgICB9CisKKyAgICBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2U7
Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEs
IGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0dXJuIHN0YXR1czEuZW9yID09
IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0dXMyLmxhc3QgJiYgc3RhdHVzMS5s
YXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAqKHN0YXR1czEuY29udGV4dCkgPT0g
KihzdGF0dXMyLmNvbnRleHQpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJp
ZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0
dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKK30KKworc3RydWN0IEJpZGlDaGFyYWN0ZXJSdW4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJpZGlDaGFyYWN0
ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIEJpZGlDb250ZXh0KiBjb250ZXh0
LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pCisgICAgICAgIDogbV9zdGFydChzdGFydCkKKyAg
ICAgICAgLCBtX3N0b3Aoc3RvcCkKKyAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRleHQtPm92ZXJy
aWRlKCkpCisgICAgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkK
KyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOworCisgICAgICAgIG1fbGV2
ZWwgPSBjb250ZXh0LT5sZXZlbCgpOworCisgICAgICAgIC8vIGFkZCBsZXZlbCBvZiBydW4gKGNh
c2VzIEkxICYgSTIpCisgICAgICAgIGlmIChtX2xldmVsICUgMikgeworICAgICAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVfQVJBQklDX05V
TUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAg
bV9sZXZlbCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAgICAgICAg
ICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0g
VV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCArPSAyOworICAgICAg
ICB9CisgICAgfQorCisgICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQorICAgIHsKKyAgICAgICAgLy8g
RGVsZXRlIHRoZSBsaW5rZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0cnVjdG9yIHJl
Y3Vyc2lvbi4KKyAgICAgICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOworICAgICAgICB3
aGlsZSAobmV4dCkKKyAgICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Cisg
ICAgdW5zaWduZWQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQorICAgIHVuc2lnbmVk
IGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAgYm9vbCByZXZlcnNl
ZChib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3VhbGx5
T3JkZXJlZDsgfQorICAgIGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsg
cmV0dXJuIG1fb3ZlcnJpZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CisKKyAgICBCaWRpQ2hhcmFj
dGVyUnVuKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgc3RkOjp1
bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4gV1RGTW92ZSht
X25leHQpOyB9CisgICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVy
UnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQorCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7CisKK3B1YmxpYzoKKyAg
ICB1bnNpZ25lZCBtX3N0YXJ0OworICAgIHVuc2lnbmVkIG1fc3RvcDsKKyAgICB1bnNpZ25lZCBj
aGFyIG1fbGV2ZWw7CisgICAgYm9vbCBtX292ZXJyaWRlIDogMTsKKyAgICBib29sIG1faGFzSHlw
aGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEgbGF5ZXJpbmcg
dmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2JqZWN0IG9uIDY0
LWJpdC4KK307CisKK2VudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgeworICAgIE5vVmlzdWFs
T3ZlcnJpZGUsCisgICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICBWaXN1YWxSaWdo
dFRvTGVmdE92ZXJyaWRlCit9OworCisvLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0J3MgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KKy8vIGh0dHA6Ly91bmljb2Rl
Lm9yZy9yZXBvcnRzL3RyOQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1
biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKK3B1YmxpYzoKKyAgICBjb25z
dCBJdGVyYXRvciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICB2
b2lkIHNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVyYXRvciYgcG9z
aXRpb24pIHsgbV9jdXJyZW50ID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNv
bnN0IEl0ZXJhdG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRDb3VudCkKKyAg
ICB7CisgICAgICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOworICAgICAgICBtX25lc3RlZElzb2xh
dGVDb3VudCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7CisgICAgfQorCisgICAgdm9pZCBpbmNyZW1l
bnQoKSB7IHN0YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1lbnRJbnRlcm5h
bCgpOyB9CisKKyAgICBCaWRpQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzLmNvbnRleHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldENvbnRleHQoUmVmUHRyPEJpZGlDb250
ZXh0PiYmIGNvbnRleHQpIHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7IH0K
KworICAgIHZvaWQgc2V0TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7IG1fc3RhdHVz
Lmxhc3QgPSBsYXN0RGlyOyB9CisgICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVDaGFyRGlyZWN0
aW9uIGxhc3RTdHJvbmdEaXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RTdHJvbmdEaXI7
IH0KKyAgICB2b2lkIHNldEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsgbV9zdGF0dXMu
ZW9yID0gZW9yRGlyOyB9CisKKyAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25zdCB7IHJldHVy
biBtX2RpcmVjdGlvbjsgfQorICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlv
bikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQorCisgICAgY29uc3QgQmlkaVN0YXR1cyYg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhC
aWRpU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorCisgICAgV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUoKSB7
IHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KKworICAgIC8vIFRoZSBjdXJy
ZW50IGFsZ29yaXRobSBoYW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUgbGF5ZXIgb2YgbmVzdGlu
ZyBhdCBhIHRpbWUuCisgICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVhY2ggaXNvbGF0ZWQgc3Bh
biwgd2Ugd2lsbCB3YWxrIGludG8gKGFuZCBpZ25vcmUpIGFsbAorICAgIC8vIGNoaWxkIGlzb2xh
dGVkIHNwYW5zLgorICAgIHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25lc3RlZElzb2xhdGVDb3Vu
dCsrOyB9CisgICAgdm9pZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1fbmVzdGVkSXNvbGF0ZUNv
dW50ID49IDEpOyBtX25lc3RlZElzb2xhdGVDb3VudC0tOyB9CisgICAgYm9vbCBpbklzb2xhdGUo
KSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQorCisgICAgdm9pZCBlbWJl
ZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSk7CisgICAgYm9vbCBjb21taXRF
eHBsaWNpdEVtYmVkZGluZygpOworCisgICAgdm9pZCBjcmVhdGVCaWRpUnVuc0ZvckxpbmUoY29u
c3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBOb1Zpc3VhbE92ZXJy
aWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CisKKyAgICBCaWRpUnVuTGlzdDxSdW4+
JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyB1c2VkIHRv
IGJlIHBhcnQgb2YgZGVsZXRlUnVucygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9sYXRpb24uCisg
ICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorICAgIHZvaWQgbWFy
a0N1cnJlbnRSdW5FbXB0eSgpIHsgbV9lbXB0eVJ1biA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0
V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiwgc2l6ZV90
KTsKKyAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRl
ZFJ1bihSdW4mKTsKKworcHJvdGVjdGVkOgorICAgIEJpZGlSZXNvbHZlckJhc2UoKSA9IGRlZmF1
bHQ7CisKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2ZXJzIHN1YmNs
YXNzaW5nIHRoaXMgbWV0aG9kLCB3ZSBzaG91bGQKKyAgICAvLyBwYXNzIGluIHNvbWUgc29ydCBv
ZiBUcmFpdHMgb2JqZWN0IHdoaWNoIGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBmb3IgYXBwZW5k
aW5nLgorICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3MmPigq
dGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQorICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RF
bmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xhc3MmPigqdGhp
cykubmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpOyB9CisKKyAgICBJdGVyYXRvciBtX2N1
cnJlbnQ7CisgICAgLy8gc29yIGFuZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFuZCAiZW5kIG9m
IHJ1biIgcmVzcGVjdGl2ZWx5IGFuZCBjb3JyZXBvbmQKKyAgICAvLyB0byBhYnJldmlhdGlvbnMg
dXNlZCBpbiBVQkEgc3BlYzogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNCRDcKKyAg
ICBJdGVyYXRvciBtX3NvcjsgLy8gUG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhl
IGN1cnJlbnQgcnVuLgorICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8gdGhlIGxhc3Qg
Y2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KKyAgICBJdGVyYXRvciBtX2xhc3Q7CisgICAg
QmlkaVN0YXR1cyBtX3N0YXR1czsKKyAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFVf
T1RIRVJfTkVVVFJBTCB9OworICAgIEl0ZXJhdG9yIGVuZE9mTGluZTsKKyAgICBib29sIG1fcmVh
Y2hlZEVuZE9mTGluZSB7IGZhbHNlIH07CisgICAgSXRlcmF0b3IgbV9sYXN0QmVmb3JlRVQ7IC8v
IEJlZm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKKyAgICBib29sIG1fZW1wdHlS
dW4geyB0cnVlIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlbG9uZyB0byB0
aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFzc2VkCisgICAgLy8gaW50byBjcmVhdGVCaWRp
UnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KKyAgICBCaWRpUnVuTGlzdDxSdW4+IG1fcnVuczsK
KworICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+IG1fd2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZTsKKworICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNvdW50IHsgMCB9
OworICAgIEhhc2hNYXA8UnVuKiwgdW5zaWduZWQ+IG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFu
c2l0aW9uRm9ySXNvbGF0ZWRSdW47CisKK3ByaXZhdGU6CisgICAgdm9pZCByYWlzZUV4cGxpY2l0
RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJEaXJlY3Rpb24gdG8pOwor
ICAgIHZvaWQgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20p
OworICAgIHZvaWQgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwor
CisgICAgdm9pZCB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJEaXJl
Y3Rpb24pOworICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7CisgICAgdm9pZCBpbmNy
ZW1lbnRJbnRlcm5hbCgpIHsgbV9jdXJyZW50LmluY3JlbWVudCgpOyB9CisgICAgdm9pZCBhcHBl
bmRSdW5JbnRlcm5hbCgpOworICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFZlY3RvcjxCaWRpRW1iZWRkaW5nLCA4PiBt
X2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KK2NsYXNzIEJpZGlSZXNvbHZlciA6IHB1YmxpYyBC
aWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZlcjxJdGVyYXRvciwgUnVu
Pj4geworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlw
ZW5hbWUgSXNvbGF0ZVJ1bj4KK2NsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlIDogcHVibGlj
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyV2l0aElzb2xhdGU8
SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKK3B1YmxpYzoKKyAgICB+QmlkaVJlc29sdmVy
V2l0aElzb2xhdGUoKTsKKworICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKTsKKyAgICB2b2lk
IGFwcGVuZFJ1bkludGVybmFsKCk7CisgICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVy
bmFsKCkgY29uc3Q7CisgICAgVmVjdG9yPElzb2xhdGVSdW4+JiBpc29sYXRlZFJ1bnMoKSB7IHJl
dHVybiBtX2lzb2xhdGVkUnVuczsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxJc29sYXRlUnVu
PiBtX2lzb2xhdGVkUnVuczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBl
bmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+CitpbmxpbmUgQmlkaVJlc29sdmVyV2l0aElz
b2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVzb2x2ZXJXaXRoSXNvbGF0
ZSgpCit7CisgICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgcmVzb2x2ZXIgc2hvdWxkIGhhdmUgaGFu
ZGxlZCB0aGUgaXNvbGF0ZWQgcnVucy4KKyAgICBBU1NFUlQobV9pc29sYXRlZFJ1bnMuaXNFbXB0
eSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlw
ZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4s
IERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fZW1wdHlS
dW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBt
X3Nvci5vZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9lb3Iub2Zmc2V0
KCk7CisKKyAgICAgICAgaWYgKCFlbmRPZkxpbmUuYXRFbmQoKSAmJiBlbmRPZmZzZXQgPj0gZW5k
T2ZMaW5lLm9mZnNldCgpKSB7CisgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSB0cnVl
OworICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2ZMaW5lLm9mZnNldCgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKKyAgICAgICAgICAgIG1f
cnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxSdW4+KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgKyAx
LCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7CisKKyAgICAgICAgbV9lb3IuaW5jcmVtZW50KCk7
CisgICAgICAgIG1fc29yID0gbV9lb3I7CisgICAgfQorCisgICAgbV9kaXJlY3Rpb24gPSBVX09U
SEVSX05FVVRSQUw7CisgICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFMOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNz
Pjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSkK
K3sKKyAgICAvLyBJc29sYXRlZCBzcGFucyBjb21wdXRlIGJhc2UgZGlyZWN0aW9uYWxpdHkgZHVy
aW5nIHRoZWlyIG93biBVQkEgcnVuLgorICAgIC8vIERvIG5vdCBpbnNlcnQgZmFrZSBlbWJlZCBj
aGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4gaXNvbGF0ZWQgc3Bhbi4KKyAgICBBU1NFUlQoIWlu
SXNvbGF0ZSgpKTsKKworICAgIEFTU0VSVChkaXIgPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFU
IHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpciA9PSBVX0xFRlRfVE9f
UklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwgZGly
ID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSk7CisgICAgbV9jdXJyZW50RXhwbGljaXRFbWJl
ZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIsIHNvdXJjZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNz
Pjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpCit7CisgICAgQVNT
RVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7Cisg
ICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSworICAgICAg
ICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9VTkRBUllfTkVVVFJBTAorICAgICAgICAmJiBtX3N0
YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKKyAgICAgICAgJiYgbV9zdGF0
dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCisgICAgICAgICYmIG1fc3RhdHVz
Lmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIAorICAgICAgICAmJiBtX3N0YXR1cy5s
YXN0ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0
ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCk7CisgICAgaWYgKG1fZGlyZWN0aW9uID09IFVf
T1RIRVJfTkVVVFJBTCkKKyAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25n
ID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUg
RGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2
ZWRDbGFzcz46Omxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9t
KQoreworICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAg
Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBi
aWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRo
ZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0Cisg
ICAgICAgIGlmIChmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgLy8gYmlk
aS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAorICAgICAgICAgICAgaWYgKG1fc3Rh
dHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGlmIChtX3N0
YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
c3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBtX2RpcmVj
dGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklH
SFQpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0dXMuZW9yID09
IFVfQVJBQklDX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdI
VCkgeworICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgfQorICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAg
ICB9CisKKyAgICBhcHBlbmRSdW4oKTsKKyAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKKworICAgIC8v
IHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVyIGxldmVsIChy
dWxlIFgxMCkKKyAgICBzZXRMYXN0RGlyKGZyb20pOworICAgIHNldExhc3RTdHJvbmdEaXIoZnJv
bSk7CisgICAgbV9lb3IgPSBJdGVyYXRvcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNv
bHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBsaWNpdEVtYmVk
ZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKQoreworICAg
IGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tEaXJl
Y3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNvciAu
Li4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNv
ci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAgIGlm
ICh0byA9PSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBi
aWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0
cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9BUkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FS
QUJJQ19OVU1CRVI7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUICYmIGZyb20g
PT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAg
ICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgorICAg
ICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAmJiAobV9zdGF0
dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJR0hUX1RPX0xF
RlQpKQorICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFOX05VTUJFUiAm
JiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09IFVfUklH
SFRfVE9fTEVGVCkpIHsKKyAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIH0KKyAgICAgICAgbV9lb3IgPSBt
X2xhc3Q7CisgICAgfQorCisgICAgYXBwZW5kUnVuKCk7CisgICAgbV9lbXB0eVJ1biA9IHRydWU7
CisKKyAgICBzZXRMYXN0RGlyKHRvKTsKKyAgICBzZXRMYXN0U3Ryb25nRGlyKHRvKTsKKyAgICBt
X2VvciA9IEl0ZXJhdG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBl
bmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK2Jvb2wgQmlkaVJlc29sdmVyQmFzZTxJ
dGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZygpCit7
CisgICAgLy8gV2hlbiB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmluZyB0aGUgcGFy
ZW50IGNvbnRleHQgd2hpY2gKKyAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0aGUgaXNvbGF0
ZWQgY29udGVudCwgaW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCisgICAgLy8gV2Ugc2hvdWxk
IG5ldmVyIGFjY3J1ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92ZXIgaXNvbGF0
ZWQgY29udGVudC4KKyAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVudEV4cGxpY2l0
RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gZnJvbUxldmVsID0gY29u
dGV4dCgpLT5sZXZlbCgpOworICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gdG9Db250ZXh0ID0gY29u
dGV4dCgpOworCisgICAgZm9yIChhdXRvJiBlbWJlZGRpbmcgOiBtX2N1cnJlbnRFeHBsaWNpdEVt
YmVkZGluZ1NlcXVlbmNlKSB7CisgICAgICAgIGlmIChlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVf
UE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBhcmVudENv
bnRleHQgPSB0b0NvbnRleHQtPnBhcmVudCgpKQorICAgICAgICAgICAgICAgIHRvQ29udGV4dCA9
IHBhcmVudENvbnRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBVQ2hhckRpcmVj
dGlvbiBkaXJlY3Rpb24gPSAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRf
RU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJS
SURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIGJv
b2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVF9PVkVS
UklERSB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSB0b0NvbnRleHQtPmxldmVsKCk7Cisg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKKyAgICAgICAgICAg
ICAgICBsZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJFdmVuTGV2ZWwobGV2ZWwpOwor
ICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0ID0g
QmlkaUNvbnRleHQ6OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgZW1iZWRkaW5n
LnNvdXJjZSwgdG9Db250ZXh0LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8g
dG9MZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKKworICAgIGlmICh0b0xldmVsID4gZnJvbUxl
dmVsKQorICAgICAgICByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUgMiA/
IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCwgdG9MZXZlbCAlIDIgPyBVX1JJR0hU
X1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOworICAgIGVsc2UgaWYgKHRvTGV2ZWwgPCBmcm9t
TGV2ZWwpCisgICAgICAgIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9tTGV2ZWwgJSAy
ID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKKworICAgIHNldENvbnRleHQo
V1RGTW92ZSh0b0NvbnRleHQpKTsKKworICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2Vx
dWVuY2UuY2xlYXIoKTsKKworICAgIHJldHVybiBmcm9tTGV2ZWwgIT0gdG9MZXZlbDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZl
ZENsYXNzPgoraW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJp
dmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJEaXJl
Y3Rpb24gZGlyQ3VycmVudCkKK3sKKyAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKKyAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0
ICE9IFVfRVVST1BFQU5fTlVNQkVSKQorICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9IFVfRVVS
T1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRP
UjoKKyAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgY2FzZSBVX1dISVRFX1NQQUNF
X05FVVRSQUw6CisgICAgY2FzZSBVX09USEVSX05FVVRSQUw6CisgICAgICAgIHN3aXRjaCAobV9z
dGF0dXMubGFzdCkgeworICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgY2Fz
ZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoK
KyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgY2FzZSBVX0FSQUJJQ19O
VU1CRVI6CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9
IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFVf
RElSX05PTl9TUEFDSU5HX01BUks6CisgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hU
X0VNQkVERElORzoKKyAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToKKyAgICBjYXNl
IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKKyAgICBjYXNlIFVfUE9QX0RJUkVDVElPTkFMX0ZP
Uk1BVDoKKyAgICAgICAgLy8gaWdub3JlIHRoZXNlCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgor
aW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+
OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQoreworICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWxMb3cg
PSAxMjg7CisgICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOworICAgIGZvciAoUnVuKiBy
dW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkgeworICAgICAg
ICBsZXZlbEhpZ2ggPSBzdGQ6Om1heChydW4tPmxldmVsKCksIGxldmVsSGlnaCk7CisgICAgICAg
IGxldmVsTG93ID0gc3RkOjptaW4ocnVuLT5sZXZlbCgpLCBsZXZlbExvdyk7CisgICAgfQorCisg
ICAgLy8gVGhpcyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGlu
ZyB0byBCaWRpIHNwZWMpOgorICAgIC8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8j
TDIKKyAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3VuZCBpbiB0aGUgdGV4dCB0
byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCisgICAgLy8gcmV2ZXJzZSBhbnkg
Y29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2ZWwg
b3IgaGlnaGVyLgorCisgICAgLy8gUmV2ZXJzaW5nIGlzIG9ubHkgZG9uZSB1cCB0byB0aGUgbG93
ZXN0IG9kZCBsZXZlbC4KKyAgICBpZiAoIShsZXZlbExvdyAlIDIpKQorICAgICAgICBsZXZlbExv
dysrOworCisgICAgdW5zaWduZWQgY291bnQgPSBtX3J1bnMucnVuQ291bnQoKSAtIDE7CisKKyAg
ICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7CisgICAgICAgIHVuc2lnbmVkIGkgPSAw
OworICAgICAgICBSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOworICAgICAgICB3aGlsZSAo
aSA8IGNvdW50KSB7CisgICAgICAgICAgICBmb3IgKDtpIDwgY291bnQgJiYgcnVuICYmIHJ1bi0+
bGV2ZWwoKSA8IGxldmVsSGlnaDsgaSsrKQorICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4
dCgpOworICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOworICAgICAgICAgICAgZm9yICg7
aSA8PSBjb3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpID49IGxldmVsSGlnaDsgaSsrKQorICAg
ICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dCgpOworICAgICAgICAgICAgdW5zaWduZWQgZW5k
ID0gaSAtIDE7CisgICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoc3RhcnQsIGVuZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbGV2ZWxIaWdoLS07CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lk
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6Y3JlYXRlQmlk
aVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRl
IG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWspCit7CisgICAgQVNTRVJUKG1fZGlyZWN0aW9u
ID09IFVfT1RIRVJfTkVVVFJBTCk7CisKKyAgICBpZiAob3ZlcnJpZGUgIT0gTm9WaXN1YWxPdmVy
cmlkZSkgeworICAgICAgICBtX2VtcHR5UnVuID0gZmFsc2U7CisgICAgICAgIG1fc29yID0gbV9j
dXJyZW50OworICAgICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChtX2N1
cnJlbnQgIT0gZW5kICYmICFtX2N1cnJlbnQuYXRFbmQoKSkgeworICAgICAgICAgICAgbV9lb3Ig
PSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBpbmNyZW1lbnQoKTsKKyAgICAgICAgfQorICAgICAg
ICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRlID09IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgPyBV
X0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIGFwcGVuZFJ1bigpOwor
ICAgICAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1bigpKTsKKyAg
ICAgICAgaWYgKG92ZXJyaWRlID09IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUgJiYgbV9ydW5z
LnJ1bkNvdW50KCkpCisgICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoMCwgbV9ydW5zLnJ1
bkNvdW50KCkgLSAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZW1wdHlSdW4g
PSB0cnVlOworCisgICAgbV9lb3IgPSBJdGVyYXRvcigpOworCisgICAgbV9sYXN0ID0gbV9jdXJy
ZW50OworICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOworICAgIEJpZGlSZXNvbHZlckJhc2U8SXRl
cmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPiBzdGF0ZUF0RW5kOworCisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudDsKKyAgICAgICAgaWYgKHBhc3RF
bmQgJiYgKGhhcmRMaW5lQnJlYWsgfHwgbV9jdXJyZW50LmF0RW5kKCkpKSB7CisgICAgICAgICAg
ICBCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChoYXJkTGluZUJy
ZWFrKSB7CisgICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUgVW5pY29kZSBC
aWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAorICAgICAgICAgICAgICAgIC8vIFdpbklF
IGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyByZXNldCBiaWRpIHN0YXRl
CisgICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBiaWRpIGNvbnRyb2wgY2hh
cmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCisgICAgICAgICAgICAgICAgLy8gRE9NIG5vZGVz
IHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgc3RhdGVBdEVu
ZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRz
KCkpOworCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRlQXRFbmQuY29udGV4dCgp
LT5kaXIoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVvckRpcihkaXJDdXJyZW50
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIoZGlyQ3VycmVudCk7Cisg
ICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGlyKGRpckN1cnJlbnQpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYy0+cGFyZW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBk
aXJDdXJyZW50ID0gYy0+ZGlyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlvbigpOworICAgICAgICAg
ICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQorICAgICAgICAgICAgICAgICYmIGRpckN1cnJl
bnQgIT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORworICAgICAgICAgICAgICAgICYmIGRpckN1
cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORworICAgICAgICAgICAgICAgICYmIGRp
ckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAgICAgICAgICAgICAgJiYg
ZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKKyAgICAgICAgICAgICAgICAm
JiBkaXJDdXJyZW50ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkKKyAgICAgICAgICAgICAg
ICBkaXJDdXJyZW50ID0gY29udGV4dCgpLT5kaXIoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRp
ckN1cnJlbnQgPT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSykKKyAgICAgICAgICAgICAgICBkaXJD
dXJyZW50ID0gbV9zdGF0dXMubGFzdDsKKyAgICAgICAgfQorCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgICAgICAvLyBPdXIgV2luZG93cyBidWlsZCBoYXNuJ3QgdXBkYXRlZCBpdHMgaGVhZGVycyBm
cm9tIElDVSA2LjEsIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGVzZSBzeW1ib2xzLgorICAgICAgICBj
b25zdCBVQ2hhckRpcmVjdGlvbiBVX0ZJUlNUX1NUUk9OR19JU09MQVRFID0gc3RhdGljX2Nhc3Q8
VUNoYXJEaXJlY3Rpb24+KDE5KTsKKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9MRUZU
X1RPX1JJR0hUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjApOworICAg
ICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1JJR0hUX1RPX0xFRlRfSVNPTEFURSA9IHN0YXRp
Y19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMSk7CisgICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9u
IFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4o
MjIpOworI2VuZGlmCisgICAgICAgIC8vIFdlIGlnbm9yZSBhbGwgY2hhcmFjdGVyIGRpcmVjdGlv
bmFsaXR5IHdoaWxlIGluIHVuaWNvZGUtYmlkaTogaXNvbGF0ZSBzcGFucy4KKyAgICAgICAgLy8g
V2UnbGwgaGFuZGxlIG9yZGVyaW5nIHRoZSBpc29sYXRlZCBjaGFyYWN0ZXJzIGluIGEgc2Vjb25k
IHBhc3MuCisgICAgICAgIGlmIChpbklzb2xhdGUoKSB8fCBkaXJDdXJyZW50ID09IFVfRklSU1Rf
U1RST05HX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX0xFRlRfVE9fUklHSFRfSVNPTEFURSB8
fCBkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9JU09MQVRFIHx8IGRpckN1cnJlbnQgPT0g
VV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSkKKyAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX09U
SEVSX05FVVRSQUw7CisKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05F
VVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7CisgICAgICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewor
CisgICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChYMS1YOSBpbiB0aGUgQmlkaSBz
cGVjcykKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgICAgICBj
YXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19M
RUZUX09WRVJSSURFOgorICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKKyAg
ICAgICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6CisgICAgICAgICAgICBlbWJlZChk
aXJDdXJyZW50LCBGcm9tVW5pY29kZSk7CisgICAgICAgICAgICBjb21taXRFeHBsaWNpdEVtYmVk
ZGluZygpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gc3Ryb25nIHR5cGVzCisg
ICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1
cy5sYXN0KSB7CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAg
IGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVI6CisgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAgICAg
ICAgICBpZiAobV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5s
YXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVfTEVGVF9U
T19SSUdIVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJF
Ul9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNl
IFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBj
YXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09
IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5s
YXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNv
IGxldCdzIGNsb3NlIHRoYXQgcnVuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJh
bHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiwgd2hpY2ggaXMgUgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9BUkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1iZXJz
IGFyZSBhbHdheXMgb24gYSBoaWdoZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0
aGF0IHJ1bgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJF
UjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0KCktPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24s
IHdoaWNoIGlzIFIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRf
VE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBlbWJl
ZGRpbmcgZGlyCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09IFVf
UklHSFRfVE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xFRlRf
VE9fUklHSFQ7CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RPX1JJ
R0hUOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFz
dCkgeworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6Cisg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7
CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2UgVV9S
SUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1C
RVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAg
ICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01F
TlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Cisg
ICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9z
dGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBjb250ZXh0KCktPmRp
cigpID09IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdHVz
Lmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX1JJR0hU
X1RPX0xFRlQ7CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVudDsK
KyAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6CisKKyAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVf
UklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKKyAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IHN0cm9u
ZyB3YXMgQUwgY2hhbmdlIEVOIHRvIEFOCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1
cy5sYXN0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAgICAgICAgICAgIGNhc2UgVV9B
UkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAg
ICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBVX0JM
T0NLX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6
CisgICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAg
ICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0
YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBz
byB0aGUgbmV1dHJhbHMgc2hvdWxkIGJlIFIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGVybWluYXRlIHRoZSBFTiBydW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9F
VVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9
PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0
ZSB0aGUgQU4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RP
X0xFRlQgfHwgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGFuIFIgcnVuLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJN
SU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVn
aW4gYSBuZXcgRU4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RP
X0xFRlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgUiBydW4gdG8g
aW5jbHVkZSB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1f
c3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9y
ZUVUIDogbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJ
R0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OworICAgICAgICAgICAgICAgIG1fc3RhdHVz
LmVvciA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgIGlmIChtX2RpcmVjdGlv
biA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0g
VV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgor
ICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hU
KQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICBjYXNl
IFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVN
QkVSOgorICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgIGFw
cGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX0NP
TU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9BUkFCSUNfTlVNQkVSKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJf
U0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9S
OgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNl
IFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBj
YXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09
IFVfQVJBQklDX05VTUJFUgorICAgICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09
IFVfRVVST1BFQU5fTlVNQkVSICYmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9f
TEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkpCisgICAgICAgICAg
ICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0
dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBV
X1JJR0hUX1RPX0xFRlQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUg
cnVuIGJlZm9yZSB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OworICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRyYWxz
LgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkK
KyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09
IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKKyAg
ICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1fY3Vy
cmVudDsKKyAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAg
ICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAg
ICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgIGNhc2UgVV9D
T01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICBpZiAobV9zdGF0dXMu
bGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGRpckN1cnJlbnQg
PSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsK
KyAgICAgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAgICAg
fSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1Ip
CisgICAgICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBtX2VtcHR5UnVuID8gbV9lb3IgOiBt
X2xhc3Q7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBib3VuZGFyeSBuZXV0cmFs
cyBzaG91bGQgYmUgaWdub3JlZAorICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKKyAg
ICAgICAgICAgIGlmIChtX2VvciA9PSBtX2xhc3QpCisgICAgICAgICAgICAgICAgbV9lb3IgPSBt
X2N1cnJlbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIG5ldXRyYWxzCisg
ICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6CisgICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBkbyB3ZSBkbyB3aXRoIG5ld2xpbmUgYW5kIHBhcmFncmFwaCBzZXBhcmF0b3JzIHRoYXQgY29t
ZSB0byBoZXJlPworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NF
UEFSQVRPUjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcnVsZSBMMS4KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpZiAocGFzdEVuZCAmJiAobV9lb3IgPT0gbV9jdXJyZW50IHx8ICFuZWVkc0Nv
bnRpbnVlUGFzdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKCFtX3JlYWNoZWRFbmRPZkxpbmUp
IHsKKyAgICAgICAgICAgICAgICBtX2VvciA9IGVuZE9mTGluZTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG1fc3RhdHVzLmVvcikgeworICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJ
R0hUOgorICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAgICAgICAgICAg
ICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IG1fc3RhdHVzLmVvcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJl
Y3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9U
T19SSUdIVCA6IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
aGFuZGxlIG5ldXRyYWxzIGluIHRoaXMgY2FzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQ4MTcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9jdXJyZW50ID0gZW5kOworICAgICAgICAgICAgbV9zdGF0dXMgPSBz
dGF0ZUF0RW5kLm1fc3RhdHVzOworICAgICAgICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1fc29y
OyAKKyAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsKKyAgICAgICAgICAgIG1f
bGFzdCA9IHN0YXRlQXRFbmQubV9sYXN0OworICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5l
ID0gc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRPZkxpbmU7CisgICAgICAgICAgICBtX2xhc3RCZWZv
cmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQ7CisgICAgICAgICAgICBtX2VtcHR5UnVu
ID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX09U
SEVSX05FVVRSQUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHVw
ZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihkaXJDdXJyZW50KTsKKyAgICAgICAg
bV9sYXN0ID0gbV9jdXJyZW50OworCisgICAgICAgIGlmIChtX2VtcHR5UnVuKSB7CisgICAgICAg
ICAgICBtX3NvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGluY3JlbWVudCgpOworICAgICAgICBpZiAoIW1fY3VycmVu
dEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBib29s
IGNvbW1pdHRlZCA9IGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7CisgICAgICAgICAgICBpZiAo
Y29tbWl0dGVkICYmIHBhc3RFbmQpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnQgPSBlbmQ7
CisgICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBzdGF0ZUF0RW5kLm1fc3RhdHVzOworICAgICAg
ICAgICAgICAgIG1fc29yID0gc3RhdGVBdEVuZC5tX3NvcjsgCisgICAgICAgICAgICAgICAgbV9l
b3IgPSBzdGF0ZUF0RW5kLm1fZW9yOworICAgICAgICAgICAgICAgIG1fbGFzdCA9IHN0YXRlQXRF
bmQubV9sYXN0OworICAgICAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRF
bmQubV9yZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVUID0g
c3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVDsKKyAgICAgICAgICAgICAgICBtX2VtcHR5UnVuID0g
c3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9P
VEhFUl9ORVVUUkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFwYXN0RW5kICYmIChtX2N1cnJlbnQgPT0gZW5kIHx8IG1f
Y3VycmVudC5hdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKG1fZW1wdHlSdW4pCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc3RhdHVzID0gbV9zdGF0
dXM7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc29yID0gbV9zb3I7CisgICAgICAgICAgICBz
dGF0ZUF0RW5kLm1fZW9yID0gbV9lb3I7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fbGFzdCA9
IG1fbGFzdDsKKyAgICAgICAgICAgIHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lID0gbV9y
ZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVCA9
IG1fbGFzdEJlZm9yZUVUOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VtcHR5UnVuID0gbV9l
bXB0eVJ1bjsKKyAgICAgICAgICAgIGVuZE9mTGluZSA9IG1fbGFzdDsKKyAgICAgICAgICAgIHBh
c3RFbmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9ydW5zLnNldExvZ2ljYWxs
eUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7CisgICAgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7
CisgICAgZW5kT2ZMaW5lID0gSXRlcmF0b3IoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVz
b2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OnNldFdoaXRlc3BhY2VDb2xs
YXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuLCBzaXplX3QgdHJhbnNpdGlv
bikKK3sKKyAgICBBU1NFUlQoIW1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNv
bGF0ZWRSdW4uY29udGFpbnMoJnJ1bikpOworICAgIG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFu
c2l0aW9uRm9ySXNvbGF0ZWRSdW4uYWRkKCZydW4sIHRyYW5zaXRpb24pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+
Cit1bnNpZ25lZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46
OndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuKQor
eworICAgIHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVk
UnVuLnRha2UoJnJ1bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3RleHQvQmlkaVJ1bkxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWFiNjcwZTU5N2RmY2RjZTc3
NDhmZGIzOWEyNTgxM2M1YTllMTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHQgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIFBBTCB7CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+CitjbGFzcyBCaWRpUnVu
TGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxpc3QpOworcHVibGljOgor
ICAgIEJpZGlSdW5MaXN0KCkKKyAgICAgICAgOiBtX2xhc3RSdW4obnVsbHB0cikKKyAgICAgICAg
LCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKKyAgICAgICAgLCBtX3J1bkNvdW50KDApCisg
ICAgeworICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNvbHZlciBubyBsb25nZXIg
b3ducyB0aGUgQmlkaVJ1bkxpc3QsCisgICAgLy8gdGhlbiB+QmlkaVJ1bkxpc3Qgc2hvdWxkIGNh
bGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCisKKyAgICBSdW4qIGZpcnN0UnVuKCkgY29u
c3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQorICAgIFJ1biogbGFzdFJ1bigpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQorICAgIFJ1biogbG9naWNhbGx5TGFzdFJ1bigpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQorICAgIHVuc2lnbmVkIHJ1bkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQorCisgICAgdm9pZCBhcHBlbmRSdW4oc3RkOjp1
bmlxdWVfcHRyPFJ1bj4mJik7CisgICAgdm9pZCBwcmVwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxS
dW4+JiYpOworCisgICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7CisgICAgdm9pZCBtb3ZlUnVu
VG9CZWdpbm5pbmcoUnVuKik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCByZXZlcnNl
UnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICB2b2lkIHJlb3JkZXJSdW5z
RnJvbUxldmVscygpOworCisgICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0UnVuKFJ1biogcnVuKSB7
IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQorCisgICAgdm9pZCByZXBsYWNlUnVuV2l0aFJ1
bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpOworCitwcml2YXRl
OgorCisgICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQtbGlzdCwgd2hlcmUgdGhl
IGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQgYXJlIG9mIHR5cGUgc3Rk
Ojp1bmlxdWVfcHRyKS4KKyAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJlbG93IHBvaW50IGludG8g
dGhlIHNpbmdseS1saW5rZWQtbGlzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBtX2ZpcnN0
UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIFJ1biogbV9sYXN0UnVuOworICAgIFJ1
biogbV9sb2dpY2FsbHlMYXN0UnVuOworICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6YXBwZW5k
UnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQoreworICAgIGlmICghbV9maXJzdFJ1bikg
eworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOworICAgICAgICBtX2xhc3RSdW4g
PSBtX2ZpcnN0UnVuLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbGFzdFJ1bi0+c2V0
TmV4dChXVEZNb3ZlKHJ1bikpOworICAgICAgICBtX2xhc3RSdW4gPSBtX2xhc3RSdW4tPm5leHQo
KTsKKyAgICB9CisgICAgbV9ydW5Db3VudCsrOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgor
aW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiYmIHJ1bikKK3sKKyAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsKKworICAgIGlmICghbV9s
YXN0UnVuKQorICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7CisgICAgZWxzZQorICAgICAg
ICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAgbV9maXJzdFJ1biA9IFdU
Rk1vdmUocnVuKTsKKyAgICBtX3J1bkNvdW50Kys7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+
CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQoUnVuKiBydW4pCit7
CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVChtX2xhc3RSdW4pOworICAgIEFT
U0VSVChydW4tPm5leHQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICBS
dW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1
bikgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2
aW91cy0+bmV4dCgpOworICAgIH0KKworICAgIGlmICghcHJldmlvdXMpIHsKKyAgICAgICAgQVNT
RVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1
bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7CisgICAgICAgIG1fZmly
c3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOworICAgICAgICBtX2xhc3RSdW4t
PnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VOZXh0KCk7Cisg
ICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0KCkpOworICAgICAgICBt
X2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9CZWdp
bm5pbmcoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVCht
X2xhc3RSdW4pOworICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5nZXQoKSk7CisKKyAgICBS
dW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICBSdW4qIGN1cnJlbnQgPSBwcmV2
aW91cy0+bmV4dCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikgeworICAgICAgICBwcmV2
aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAg
IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzLT50YWtlTmV4
dCgpOworICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQoKSk7CisgICAgaWYgKHJ1
biA9PSBtX2xhc3RSdW4pCisgICAgICAgIG1fbGFzdFJ1biA9IHByZXZpb3VzOworCisgICAgdGFy
Z2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1fZmlyc3RSdW4gPSBXVEZN
b3ZlKHRhcmdldCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5MaXN0
PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1bkxpc3Q8UnVu
PiYgbmV3UnVucykKK3sKKyAgICBBU1NFUlQobmV3UnVucy5ydW5Db3VudCgpKTsKKyAgICBBU1NF
UlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKHRvUmVwbGFjZSk7CisKKyAgICBtX3J1bkNvdW50
ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRpbmcgdGhlIG5ldyBydW5z
IGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCisKKyAgICAvLyBGaXggdXAgYW55IHBvaW50ZXJzIHdo
aWNoIG1heSBlbmQgdXAgc3RhbGUuCisgICAgaWYgKG1fbGFzdFJ1biA9PSB0b1JlcGxhY2UpCisg
ICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOworICAgIGlmIChtX2xvZ2ljYWxs
eUxhc3RSdW4gPT0gdG9SZXBsYWNlKQorICAgICAgICBtX2xvZ2ljYWxseUxhc3RSdW4gPSBuZXdS
dW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKKworICAgIGlmIChtX2ZpcnN0UnVuLmdldCgpID09IHRv
UmVwbGFjZSkgeworICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dChtX2ZpcnN0UnVu
LT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUobmV3UnVucy5tX2Zp
cnN0UnVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGaW5kIHRoZSBydW4ganVzdCBiZWZv
cmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KKyAgICAgICAgUnVuKiBwcmV2aW91
c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgICAgIHdoaWxlIChwcmV2aW91c1J1bi0+bmV4
dCgpICE9IHRvUmVwbGFjZSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcHJldmlvdXNSdW4t
Pm5leHQoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5leHQoKTsKKyAgICAgICAg
cHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4pKTsKKyAgICAg
ICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtlTmV4dCgpKTsKKyAgICB9
CisKKyAgICBuZXdSdW5zLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lk
IEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKK3sKKyAgICBtX2ZpcnN0UnVuID0gbnVsbHB0cjsK
KyAgICBtX2xhc3RSdW4gPSBudWxscHRyOworICAgIG1fbG9naWNhbGx5TGFzdFJ1biA9IG51bGxw
dHI7CisgICAgbV9ydW5Db3VudCA9IDA7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lk
IEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbmQgPCBtX3J1bkNvdW50KTsK
KworICAgIC8vIEdldCB0aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBydW5zIHRvIHJl
dmVyc2UgYW5kIHB1dCBpdCBpbgorICAgIC8vIHxiZWZvcmVTdGFydHwuIHxjdXJyfCBzaG91bGQg
cG9pbnQgdG8gdGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgorICAgIFJ1biogY3VyciA9IG1fZmly
c3RSdW4uZ2V0KCk7CisgICAgUnVuKiBiZWZvcmVTdGFydCA9IG51bGxwdHI7CisgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgZm9yICg7IGkgPCBzdGFydDsgKytpKSB7CisgICAgICAgIGJlZm9yZVN0
YXJ0ID0gY3VycjsKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKKyAgICB9CisgICAgUnVu
KiBzdGFydFJ1biA9IGN1cnI7CisKKyAgICBmb3IgKDsgaSA8IGVuZDsgKytpKQorICAgICAgICBj
dXJyID0gY3Vyci0+bmV4dCgpOworCisgICAgaWYgKCFjdXJyLT5uZXh0KCkpCisgICAgICAgIG1f
bGFzdFJ1biA9IHN0YXJ0UnVuOworCisgICAgLy8gU3RhbmRhcmQgInNsaWRpbmcgd2luZG93IiBv
ZiAzIHBvaW50ZXJzCisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJldmlvdXMgPSBjdXJyLT50
YWtlTmV4dCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJlbnQgPSBiZWZvcmVTdGFy
dCA/IGJlZm9yZVN0YXJ0LT50YWtlTmV4dCgpIDogV1RGTW92ZShtX2ZpcnN0UnVuKTsKKyAgICB3
aGlsZSAoY3VycmVudCkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBuZXh0ID0gY3Vy
cmVudC0+dGFrZU5leHQoKTsKKyAgICAgICAgY3VycmVudC0+c2V0TmV4dChXVEZNb3ZlKHByZXZp
b3VzKSk7CisgICAgICAgIHByZXZpb3VzID0gV1RGTW92ZShjdXJyZW50KTsKKyAgICAgICAgY3Vy
cmVudCA9IFdURk1vdmUobmV4dCk7CisgICAgfQorCisgICAgaWYgKGJlZm9yZVN0YXJ0KQorICAg
ICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgZWxzZQor
ICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2aW91cyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0NoYXJhY3Rl
clByb3BlcnRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJQcm9w
ZXJ0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU1NDUyMDAzMWFiNGVmNjlmM2RlMjJhZjk5ZjMwY2JjY2I3
NDY4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFy
YWN0ZXJQcm9wZXJ0aWVzLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dW5p
Y29kZS91Y2hhci5oPgorCituYW1lc3BhY2UgUEFMIHsKKworc3RhdGljIGlubGluZSBib29sIGlz
RW1vamlHcm91cENhbmRpZGF0ZShVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyNkZWZpbmUgU1lNQk9M
U19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURfQSAyOTgKKyNpZiBVX0lDVV9WRVJTSU9OX01BSk9S
X05VTSA8IDY0CisjZGVmaW5lIFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRF
RF9BIFNZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EKKyNlbHNlCitzdGF0aWNfYXNz
ZXJ0KFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRFRF9BID09IFNZTUJPTFNf
QU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKHN0YXRp
Y19jYXN0PGludD4odWJsb2NrX2dldENvZGUoY2hhcmFjdGVyKSkpIHsKKyAgICBjYXNlIFVCTE9D
S19NSVNDRUxMQU5FT1VTX1NZTUJPTFM6CisgICAgY2FzZSBVQkxPQ0tfRElOR0JBVFM6CisgICAg
Y2FzZSBVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9QSUNUT0dSQVBIUzoKKyAgICBj
YXNlIFVCTE9DS19FTU9USUNPTlM6CisgICAgY2FzZSBVQkxPQ0tfVFJBTlNQT1JUX0FORF9NQVBf
U1lNQk9MUzoKKyAgICBjYXNlIFVCTE9DS19TVVBQTEVNRU5UQUxfU1lNQk9MU19BTkRfUElDVE9H
UkFQSFM6CisgICAgY2FzZSBVQkxPQ0tfU1lNQk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURf
QToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGlzRW1vamlGaXR6cGF0cmlja01v
ZGlmaWVyKFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIC8vIFUrMUYzRkIgLSBFTU9KSSBNT0RJ
RklFUiBGSVRaUEFUUklDSyBUWVBFLTEtMgorICAgIC8vIFUrMUYzRkMgLSBFTU9KSSBNT0RJRklF
UiBGSVRaUEFUUklDSyBUWVBFLTMKKyAgICAvLyBVKzFGM0ZEIC0gRU1PSkkgTU9ESUZJRVIgRklU
WlBBVFJJQ0sgVFlQRS00CisgICAgLy8gVSsxRjNGRSAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRS
SUNLIFRZUEUtNQorICAgIC8vIFUrMUYzRkYgLSBFTU9KSSBNT0RJRklFUiBGSVRaUEFUUklDSyBU
WVBFLTYKKworICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMHgxRjNGQiAmJiBjaGFyYWN0ZXIgPD0g
MHgxRjNGRjsKK30KKworaW5saW5lIGJvb2wgaXNWYXJpYXRpb25TZWxlY3RvcihVQ2hhcjMyIGNo
YXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID49IDB4RkUwMCAmJiBjaGFyYWN0ZXIg
PD0gMHhGRTBGOworfQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppS2V5Y2FwQmFzZShVQ2hhcjMyIGNo
YXJhY3RlcikKK3sKKyAgICByZXR1cm4gKGNoYXJhY3RlciA+PSAnMCcgJiYgY2hhcmFjdGVyIDw9
ICc5JykgfHwgY2hhcmFjdGVyID09ICcjJyB8fCBjaGFyYWN0ZXIgPT0gJyonOworfQorCitpbmxp
bmUgYm9vbCBpc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCit7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlciA+PSAweDFGMUU2ICYmIGNoYXJhY3RlciA8PSAweDFGMUZGOwor
fQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppV2l0aFByZXNlbnRhdGlvbkJ5RGVmYXVsdChVQ2hhcjMy
IGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gdV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIs
IFVDSEFSX0VNT0pJX1BSRVNFTlRBVElPTik7Cit9CisKK2lubGluZSBib29sIGlzRW1vamlNb2Rp
ZmllckJhc2UoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIHVfaGFzQmluYXJ5UHJv
cGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSV9NT0RJRklFUl9CQVNFKTsKK30KKworaW5saW5l
IGJvb2wgaXNEZWZhdWx0SWdub3JhYmxlQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyKQorewor
ICAgIHJldHVybiB1X2hhc0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfREVGQVVMVF9J
R05PUkFCTEVfQ09ERV9QT0lOVCk7Cit9CisKK2lubGluZSBib29sIGlzQ29udHJvbENoYXJhY3Rl
cihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gdV9nZXRJbnRQcm9wZXJ0eVZhbHVl
KGNoYXJhY3RlciwgVUNIQVJfR0VORVJBTF9DQVRFR09SWSkgPT0gVV9DT05UUk9MX0NIQVI7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJS
YW5nZS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0NoYXJhY3RlclJhbmdlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzAyM2IwMWJlN2I2MjY0YzNlMmIyNWVmNjhlM2MwZmNhODY4YmIzOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5o
CkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoRk9VTkRBVElPTikgJiYg
ZGVmaW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2UgeworICAgIHVp
bnQ2NF90IGxvY2F0aW9uIHsgMCB9OworICAgIHVpbnQ2NF90IGxlbmd0aCB7IDAgfTsKKworICAg
IENoYXJhY3RlclJhbmdlKCkgPSBkZWZhdWx0OworICAgIGNvbnN0ZXhwciBDaGFyYWN0ZXJSYW5n
ZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKTsKKworI2lmIFVTRShDRikKKyAg
ICBjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2UoQ0ZSYW5nZSk7CisgICAgY29uc3RleHByIG9wZXJh
dG9yIENGUmFuZ2UoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKEZPVU5EQVRJT04pICYmIGRl
ZmluZWQoX19PQkpDX18pCisgICAgY29uc3RleHByIENoYXJhY3RlclJhbmdlKE5TUmFuZ2UpOwor
ICAgIGNvbnN0ZXhwciBvcGVyYXRvciBOU1JhbmdlKCkgY29uc3Q7CisjZW5kaWYKK307CisKK2Nv
bnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24s
IHVpbnQ2NF90IGxlbmd0aCkKKyAgICA6IGxvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbGVuZ3Ro
KGxlbmd0aCkKK3sKK30KKworI2lmIFVTRShDRikKKworY29uc3RleHByIENoYXJhY3RlclJhbmdl
OjpDaGFyYWN0ZXJSYW5nZShDRlJhbmdlIHJhbmdlKQorICAgIDogQ2hhcmFjdGVyUmFuZ2UocmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkKK3sKKyAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24g
IT0ga0NGTm90Rm91bmQpOworfQorCitjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2U6Om9wZXJhdG9y
IENGUmFuZ2UoKSBjb25zdAoreworICAgIENGSW5kZXggbG9jYXRpb25DRiA9IGxvY2F0aW9uOwor
ICAgIENGSW5kZXggbGVuZ3RoQ0YgPSBsZW5ndGg7CisgICAgcmV0dXJuIHsgbG9jYXRpb25DRiwg
bGVuZ3RoQ0YgfTsKK30KKworI2VuZGlmCisKKyNpZiBVU0UoRk9VTkRBVElPTikgJiYgZGVmaW5l
ZChfX09CSkNfXykKKworY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0ZXJSYW5nZShO
U1JhbmdlIHJhbmdlKQorICAgIDogQ2hhcmFjdGVyUmFuZ2UgeyByYW5nZS5sb2NhdGlvbiwgcmFu
Z2UubGVuZ3RoIH0KK3sKKyAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCk7
Cit9CisKK2NvbnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6b3BlcmF0b3IgTlNSYW5nZSgpIGNvbnN0
Cit7CisgICAgTlNVSW50ZWdlciBsb2NhdGlvbk5TID0gbG9jYXRpb247CisgICAgTlNVSW50ZWdl
ciBsZW5ndGhOUyA9IGxlbmd0aDsKKyAgICByZXR1cm4geyBsb2NhdGlvbk5TLCBsZW5ndGhOUyB9
OworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOWVjZTE1OWJjMTYz
MTI5YTAwMjYyNzY0OTFmZjZjZjBhNDAzNDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApAQCAtMCwwICsxLDI3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisg
KiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRlVGlt
ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCisjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdGF0aWMgY29uc3QgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZSBsb3dlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0gPSB7CisgICAgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZVBlcmlvZCwgLy8gYQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJ
bnZhbGlkLCAvLyBiCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxvY2FsRGF5T2ZXZWVr
U3RhbmRBbG9uLCAvLyBjCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9udGgs
IC8vIGQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTG9jYWxEYXlPZldlZWssIC8vIGUK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gZgorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVNb2RpZmllZEp1bGlhbkRheSwgLy8gZworICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVIb3VyMTIsIC8vIGgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
SW52YWxpZCwgLy8gaQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBq
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNCwgLy8gaworICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBsCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZU1pbnV0ZSwgLy8gbQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAv
LyBuCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIG8KKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gcAorICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lLCAvLyBxCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUludmFsaWQsIC8vIHIKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kLCAv
LyBzCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHQKKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlRXh0ZW5kZWRZZWFyLCAvLyB1CisgICAgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZU5vbkxvY2F0aW9uWm9uZSwgLy8gdgorICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVXZWVrT2ZZZWFyLCAvLyB3CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIHgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhciwgLy8geQorICAg
IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVab25lLCAvLyB6Cit9OworCitzdGF0aWMgY29uc3Qg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSB1cHBlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0gPSB7
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5LCAvLyBBCisg
ICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIEIKKyAgICBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gQworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVEYXlPZlllYXIsIC8vIEQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZXZWVr
LCAvLyBFCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mV2Vla0luTW9udGgsIC8v
IEYKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXJhLCAvLyBHCisgICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUhvdXIyMywgLy8gSAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVJbnZhbGlkLCAvLyBJCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8v
IEoKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExLCAvLyBLCisgICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSwgLy8gTAorICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVNb250aCwgLy8gTQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJ
bnZhbGlkLCAvLyBOCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIE8K
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gUAorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXIsIC8vIFEKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSW52YWxpZCwgLy8gUgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFs
U2Vjb25kLCAvLyBTCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIFQK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gVQorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBWCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVdlZWtPZk1vbnRoLCAvLyBXCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFs
aWQsIC8vIFgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhck9mV2Vla09mWWVhciwg
Ly8gWQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVSRkM4MjJab25lLCAvLyBaCit9Owor
CitzdGF0aWMgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlw
ZShjb25zdCBVQ2hhciBjaCkKK3sKKyAgICBpZiAoaXNBU0NJSVVwcGVyKGNoKSkKKyAgICAgICAg
cmV0dXJuIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwW2NoIC0gJ0EnXTsKKworICAgIGlmIChpc0FT
Q0lJTG93ZXIoY2gpKQorICAgICAgICByZXR1cm4gbG93ZXJDYXNlVG9GaWVsZFR5cGVNYXBbY2gg
LSAnYSddOworCisgICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMaXRlcmFsOwor
fQorCitib29sIERhdGVUaW1lRm9ybWF0OjpwYXJzZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgVG9r
ZW5IYW5kbGVyJiB0b2tlbkhhbmRsZXIpCit7CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIFN0
YXRlSW5RdW90ZSwKKyAgICAgICAgU3RhdGVJblF1b3RlUXVvdGUsCisgICAgICAgIFN0YXRlTGl0
ZXJhbCwKKyAgICAgICAgU3RhdGVRdW90ZSwKKyAgICAgICAgU3RhdGVTeW1ib2wsCisgICAgfSBz
dGF0ZSA9IFN0YXRlTGl0ZXJhbDsKKworICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUgPSBGaWVsZFR5
cGVMaXRlcmFsOworICAgIFN0cmluZ0J1aWxkZXIgbGl0ZXJhbEJ1ZmZlcjsKKyAgICBpbnQgZmll
bGRDb3VudGVyID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHNv
dXJjZS5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBVQ2hhciBjaCA9IHNvdXJj
ZVtpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZUlu
UXVvdGU6CisgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVJblF1b3RlUXVvdGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5kKGNoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3RhdGVJblF1b3RlUXVvdGU6CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5k
KCdcJycpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVJblF1b3RlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWVsZFR5cGUgPSBt
YXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7CisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09
IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAgICAg
ICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZUxpdGVyYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
dG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTeW1i
b2w7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0YXRlTGl0ZXJhbDoKKyAg
ICAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZVF1b3RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmaWVsZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7CisgICAgICAgICAg
ICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVy
YWwpIHsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsaXRlcmFs
QnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0
ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGxpdGVyYWxC
dWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRDb3VudGVy
ID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTeW1ib2w7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFN0YXRlUXVvdGU6CisgICAgICAgICAgICBsaXRlcmFsQnVmZmVy
LmFwcGVuZChjaCk7CisgICAgICAgICAgICBzdGF0ZSA9IGNoID09ICdcJycgPyBTdGF0ZUxpdGVy
YWwgOiBTdGF0ZUluUXVvdGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0
YXRlU3ltYm9sOiB7CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUlu
dmFsaWQpOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRlcmFs
KTsKKyAgICAgICAgICAgIEFTU0VSVChsaXRlcmFsQnVmZmVyLmlzRW1wdHkoKSk7CisKKyAgICAg
ICAgICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUyID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gp
OworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZTIgPT0gRmllbGRUeXBlSW52YWxpZCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0g
ZmllbGRUeXBlMikgeworICAgICAgICAgICAgICAgICsrZmllbGRDb3VudGVyOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbkhhbmRsZXIu
dmlzaXRGaWVsZChmaWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisKKyAgICAgICAgICAgIGlmIChm
aWVsZFR5cGUyID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2gg
PT0gJ1wnJykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVF1b3RlOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVu
ZChjaCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIGZpZWxkVHlwZSA9IGZpZWxk
VHlwZTI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKKworICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlTGl0ZXJhbDoKKyAgICBjYXNlIFN0YXRlSW5RdW90
ZVF1b3RlOgorICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkKKyAgICAgICAgICAg
IHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFN0YXRlUXVvdGU6CisgICAgY2FzZSBTdGF0
ZUluUXVvdGU6CisgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKQorICAgICAgICAg
ICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIFN0YXRlU3ltYm9sOgorICAgICAgICBB
U1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUxpdGVyYWwpOworICAgICAgICBBU1NFUlQoIWxp
dGVyYWxCdWZmZXIubGVuZ3RoKCkpOworICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRGaWVsZChm
aWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgaXNBU0NJSUFscGhhYmV0T3JRdW90ZShVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gaXNB
U0NJSUFscGhhKGNoKSB8fCBjaCA9PSAnXCcnOworfQorCit2b2lkIERhdGVUaW1lRm9ybWF0Ojpx
dW90ZUFuZEFwcGVuZExpdGVyYWwoY29uc3QgU3RyaW5nJiBsaXRlcmFsLCBTdHJpbmdCdWlsZGVy
JiBidWZmZXIpCit7CisgICAgaWYgKGxpdGVyYWwubGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGxpdGVyYWwuZmluZChpc0FTQ0lJQWxwaGFiZXRPclF1b3RlKSA9PSBu
b3RGb3VuZCkgeworICAgICAgICBidWZmZXIuYXBwZW5kKGxpdGVyYWwpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGxpdGVyYWwuZmluZCgnXCcnKSA9PSBub3RGb3VuZCkgewor
ICAgICAgICBidWZmZXIuYXBwZW5kKCdcJycsIGxpdGVyYWwsICdcJycpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpdGVyYWwubGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBpZiAobGl0ZXJhbFtpXSA9PSAnXCcnKQorICAgICAgICAgICAg
YnVmZmVyLmFwcGVuZCgiJyciKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCdcJycsIFN0cmluZyB7IGxpdGVyYWwuc3Vic3RyaW5nKGkpIH0ucmVwbGFjZSgnXCcn
LCAiJyciKSwgJ1wnJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC90ZXh0L0RhdGVUaW1lRm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQwOTdjMGY4Zjc3OTUyM2U4YjEx
OTg0MzM1MzIxZGExMjg1NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9U
WVBFUykKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8g
RGF0ZVRpbWVGb3JtYXQgcGFyc2VzIGRhdGUgdGltZSBmb3JtYXQgZGVmaW5lZCBpbiBVbmljb2Rl
IFRlY2huaWNhbAorLy8gc3RhbmRhcmQgMzUsIExvY2FsZSBEYXRhIE1hcmt1cCBMYW5ndWFnZSAo
TERNTClbMV0uCisvLyBbMV0gTERNTCBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3Ry
MzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5zCitjbGFzcyBEYXRlVGltZUZvcm1hdCB7Citw
dWJsaWM6CisgICAgZW51bSBGaWVsZFR5cGUgeworICAgICAgICBGaWVsZFR5cGVJbnZhbGlkLAor
ICAgICAgICBGaWVsZFR5cGVMaXRlcmFsLAorCisgICAgICAgIC8vIEVyYTogQUQKKyAgICAgICAg
RmllbGRUeXBlRXJhID0gJ0cnLAorCisgICAgICAgIC8vIFllYXI6IDE5OTYKKyAgICAgICAgRmll
bGRUeXBlWWVhciA9ICd5JywKKyAgICAgICAgRmllbGRUeXBlWWVhck9mV2Vla09mWWVhciA9ICdZ
JywKKyAgICAgICAgRmllbGRUeXBlRXh0ZW5kZWRZZWFyID0gJ3UnLAorCisgICAgICAgIC8vIFF1
YXRlcjogUTIKKyAgICAgICAgRmllbGRUeXBlUXVhdGVyID0gJ1EnLAorICAgICAgICBGaWVsZFR5
cGVRdWF0ZXJTdGFuZEFsb25lID0gJ3EnLAorCisgICAgICAgIC8vIE1vbnRoOiBTZXB0ZW1iZXIK
KyAgICAgICAgRmllbGRUeXBlTW9udGggPSAnTScsCisgICAgICAgIEZpZWxkVHlwZU1vbnRoU3Rh
bmRBbG9uZSA9ICdMJywKKworICAgICAgICAvLyBXZWVrOiA0MgorICAgICAgICBGaWVsZFR5cGVX
ZWVrT2ZZZWFyID0gJ3cnLAorICAgICAgICBGaWVsZFR5cGVXZWVrT2ZNb250aCA9ICdXJywKKwor
ICAgICAgICAvLyBEYXk6IDEyCisgICAgICAgIEZpZWxkVHlwZURheU9mTW9udGggPSAnZCcsCisg
ICAgICAgIEZpZWxkVHlwZURheU9mWWVhciA9ICdEJywKKyAgICAgICAgRmllbGRUeXBlRGF5T2ZX
ZWVrSW5Nb250aCA9ICdGJywKKyAgICAgICAgRmllbGRUeXBlTW9kaWZpZWRKdWxpYW5EYXkgPSAn
ZycsCisKKyAgICAgICAgLy8gV2VlayBEYXk6IFR1ZXNkYXkKKyAgICAgICAgRmllbGRUeXBlRGF5
T2ZXZWVrID0gJ0UnLAorICAgICAgICBGaWVsZFR5cGVMb2NhbERheU9mV2VlayA9ICdlJywKKyAg
ICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFsb24gPSAnYycsCisKKyAgICAgICAg
Ly8gUGVyaW9kOiBBTSBvciBQTQorICAgICAgICBGaWVsZFR5cGVQZXJpb2QgPSAnYScsCisKKyAg
ICAgICAgLy8gSG91cjogNworICAgICAgICBGaWVsZFR5cGVIb3VyMTIgPSAnaCcsCisgICAgICAg
IEZpZWxkVHlwZUhvdXIyMyA9ICdIJywKKyAgICAgICAgRmllbGRUeXBlSG91cjExID0gJ0snLAor
ICAgICAgICBGaWVsZFR5cGVIb3VyMjQgPSAnaycsCisKKyAgICAgICAgLy8gTWludXRlOiA1OQor
ICAgICAgICBGaWVsZFR5cGVNaW51dGUgPSAnbScsCisKKyAgICAgICAgLy8gU2Vjb25kOiAxMgor
ICAgICAgICBGaWVsZFR5cGVTZWNvbmQgPSAncycsCisgICAgICAgIEZpZWxkVHlwZUZyYWN0aW9u
YWxTZWNvbmQgPSAnUycsCisgICAgICAgIEZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5ID0gJ0En
LAorCisgICAgICAgIC8vIFpvbmU6IFBEVAorICAgICAgICBGaWVsZFR5cGVab25lID0gJ3onLAor
ICAgICAgICBGaWVsZFR5cGVSRkM4MjJab25lID0gJ1onLAorICAgICAgICBGaWVsZFR5cGVOb25M
b2NhdGlvblpvbmUgPSAndicsCisgICAgfTsKKworICAgIGNsYXNzIFRva2VuSGFuZGxlciB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Ub2tlbkhhbmRsZXIoKSA9IGRlZmF1bHQ7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxkKEZpZWxkVHlwZSwgaW50IG51bWJlck9mUGF0
dGVybkNoYXJhY3RlcnMpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0TGl0ZXJhbChj
b25zdCBTdHJpbmcmKSA9IDA7CisgICAgfTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNj
ZWVkZWQsIGZhbHNlIGlmIGZhaWxlZC4KKyAgICBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBTdHJp
bmcmLCBUb2tlbkhhbmRsZXImKTsKKyAgICBzdGF0aWMgdm9pZCBxdW90ZUFuZEFwcGVuZExpdGVy
YWwoY29uc3QgU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
UEFMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0Zv
bnRSZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvRm9udFJlbmRl
cmluZ01vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTQxMjI0YWFmNmUwOGQ4NmM0ZDNjYzBjNGYxYzE2ZmE4
MjE0ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0Zv
bnRSZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KKworbmFtZXNwYWNlIFBBTCB7CisK
Ky8vIFRoaXMgc2V0dGluZyBpcyB1c2VkIHRvIHByb3ZpZGUgd2F5cyBvZiBzd2l0Y2hpbmcgYmV0
d2VlbiBtdWx0aXBsZSByZW5kZXJpbmcgbW9kZXMgdGhhdCBtYXkgaGF2ZSBkaWZmZXJlbnQKKy8v
IG1ldHJpY3MuIEl0IGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9u
IFdpbmRvd3MuCitlbnVtIGNsYXNzIEZvbnRSZW5kZXJpbmdNb2RlIDogdWludDhfdCB7CisgICAg
Tm9ybWFsLAorICAgIEFsdGVybmF0ZQorfTsKKworfQorCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRSZW5kZXJpbmdNb2RlPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgUEFMOjpGb250UmVuZGVyaW5nTW9k
ZSwKKyAgICAgICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsLAorICAgICAgICBQQUw6
OkZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvSHlwaGVuYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9IeXBoZW5hdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQwMzMwOTQ4NGY0ZjI1OTliNDdiYzJmODc4YzUxNjMzYWQ4ZDIxYjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvSHlwaGVuYXRpb24uaApAQCAtMCww
ICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx1bmljb2Rl
L3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBQQUwgewor
CitpbmxpbmUgc3RhdGljIGJvb2wgZW5vdWdoV2lkdGhGb3JIeXBoZW5hdGlvbihmbG9hdCBhdmFp
bGFibGVXaWR0aCwgZmxvYXQgZm9udFBpeGVsU2l6ZSkKK3sKKyAgICAvLyBJZiB0aGUgbWF4aW11
bSB3aWR0aCBhdmFpbGFibGUgZm9yIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBoeXBoZW4gaXMgc21h
bGwsIHRoZW4gaXQgaXMgdmVyeSB1bmxpa2VseQorICAgIC8vIHRoYXQgYW4gaHlwaGVuYXRpb24g
b3Bwb3J0dW5pdHkgZXhpc3RzLCBzbyBkbyBub3QgYm90aGVyIHRvIGxvb2sgZm9yIGl0LgorICAg
IHJldHVybiBhdmFpbGFibGVXaWR0aCA+IGZvbnRQaXhlbFNpemUgKiA1IC8gNDsKKworfQorYm9v
bCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CitzaXpl
X3QgbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXcsIHNpemVfdCBiZWZvcmVJbmRleCwgY29u
c3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CisKK30gLy8gbmFtZXNwYWNlIFBBTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mM2ZjZjI0ZDBkNWQyYzRlNjNiNjFmN2Y0NThlMzA3YjVhYTlhNWUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXVvdGVk
UHJpbnRhYmxlLmgiCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4
aW11bUxpbmVMZW5ndGggPSA3NjsKKworc3RhdGljIGNvbnN0IGNoYXIgY3JsZkxpbmVFbmRpbmdb
XSA9ICJcclxuIjsKKworc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGNv
bnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRleCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgaW5w
dXRMZW5ndGgpOworICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xuJykKKyAgICAgICAgcmV0dXJu
IDE7IC8vIFNpbmdsZSBMRi4KKworICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xyJykgeworICAg
ICAgICBpZiAoKGluZGV4ICsgMSkgPT0gaW5wdXRMZW5ndGggfHwgaW5wdXRbaW5kZXggKyAxXSAh
PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8vIFNpbmdsZSBDUiAoQ2xhc3NpYyBNYWMg
T1MpLgorICAgICAgICByZXR1cm4gMjsgLy8gQ1ItTEYuCisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQor
eworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW5wdXRMZW5ndGgpOworICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CisgICAgICAgIGJvb2wg
aXNMYXN0Q2hhcmFjdGVyID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKKyAgICAgICAgdWludDhf
dCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CisgICAgICAgIGJvb2wgcmVxdWlyZXNFbmNv
ZGluZyA9IGZhbHNlOworICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFyYWN0
ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCisgICAgICAgIGlmICgoY3VycmVudENoYXJhY3Rl
ciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJlbnRDaGFyYWN0ZXIgPT0g
Jz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCisgICAgICAgICAgICByZXF1aXJlc0Vu
Y29kaW5nID0gdHJ1ZTsKKworICAgICAgICAvLyBTcGFjZSBhbmQgdGFiIGNoYXJhY3RlcnMgaGF2
ZSB0byBiZSBlbmNvZGVkIGlmIHRoZXkgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgorICAg
ICAgICBpZiAoIXJlcXVpcmVzRW5jb2RpbmcgJiYgKGN1cnJlbnRDaGFyYWN0ZXIgPT0gJ1x0JyB8
fCBjdXJyZW50Q2hhcmFjdGVyID09ICcgJykgJiYgKGlzTGFzdENoYXJhY3RlciB8fCBsZW5ndGhP
ZkxpbmVFbmRpbmdBdEluZGV4KGlucHV0LCBpbnB1dExlbmd0aCwgaSArIDEpKSkKKyAgICAgICAg
ICAgIHJlcXVpcmVzRW5jb2RpbmcgPSB0cnVlOworCisgICAgICAgIC8vIEVuZCBvZiBsaW5lIHNo
b3VsZCBiZSBjb252ZXJ0ZWQgdG8gQ1ItTEYgc2VxdWVuY2VzLgorICAgICAgICBpZiAoIWlzTGFz
dENoYXJhY3RlcikgeworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZyA9IGxl
bmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoaW5wdXQsIGlucHV0TGVuZ3RoLCBpKTsKKyAgICAgICAg
ICAgIGlmIChsZW5ndGhPZkxpbmVFbmRpbmcpIHsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5k
KGNybGZMaW5lRW5kaW5nLCBzdHJsZW4oY3JsZkxpbmVFbmRpbmcpKTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50TGluZUxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgaSArPSAobGVuZ3RoT2ZM
aW5lRW5kaW5nIC0gMSk7IC8vIC0xIGJlY2F1c2Ugd2UnbGwgKysgaW4gdGhlIGZvcigpIGFib3Zl
LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgc2l6ZV90IGxlbmd0aE9mRW5jb2RlZENoYXJhY3RlciA9IDE7CisgICAgICAgIGlm
IChyZXF1aXJlc0VuY29kaW5nKQorICAgICAgICAgICAgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVy
ICs9IDI7CisgICAgICAgIGlmICghaXNMYXN0Q2hhcmFjdGVyKQorICAgICAgICAgICAgbGVuZ3Ro
T2ZFbmNvZGVkQ2hhcmFjdGVyICs9IDE7IC8vICsgMSBmb3IgdGhlID0gKHNvZnQgbGluZSBicmVh
aykuCisKKyAgICAgICAgLy8gSW5zZXJ0IGEgc29mdCBsaW5lIGJyZWFrIGlmIG5lY2Vzc2FyeS4K
KyAgICAgICAgaWYgKGN1cnJlbnRMaW5lTGVuZ3RoICsgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVy
ID4gbWF4aW11bUxpbmVMZW5ndGgpIHsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoJz0nKTsKKyAg
ICAgICAgICAgIG91dC5hcHBlbmQoY3JsZkxpbmVFbmRpbmcsIHN0cmxlbihjcmxmTGluZUVuZGlu
ZykpOworICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGggPSAwOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRmluYWxseSwgaW5zZXJ0IHRoZSBhY3R1YWwgY2hhcmFjdGVyKHMpLgorICAgICAg
ICBpZiAocmVxdWlyZXNFbmNvZGluZykgeworICAgICAgICAgICAgb3V0LmFwcGVuZCgnPScpOwor
ICAgICAgICAgICAgb3V0LmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjdXJyZW50
Q2hhcmFjdGVyKSk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhl
eERpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3Ro
ICs9IDM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGN1cnJlbnRD
aGFyYWN0ZXIpOworICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBvdXQ7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OworICAgIGlm
ICghZGF0YUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG91dDsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7CisgICAgICAgIGNoYXIgY3VycmVudENoYXJhY3Rl
ciA9IGRhdGFbaV07CisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICE9ICc9JykgeworICAg
ICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGFyZSBkZWFsaW5nIHdpdGggYSAnPXh4JyBz
ZXF1ZW5jZS4KKyAgICAgICAgaWYgKGRhdGFMZW5ndGggLSBpIDwgMykgeworICAgICAgICAgICAg
Ly8gVW5maW5pc2hlZCA9IHNlcXVlbmNlLCBhcHBlbmQgYXMgaXMuCisgICAgICAgICAgICBvdXQu
YXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgY2hhciB1cHBlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKKyAgICAgICAgY2hh
ciBsb3dlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKKyAgICAgICAgaWYgKHVwcGVyQ2hhcmFjdGVy
ID09ICdccicgJiYgbG93ZXJDaGFyYWN0ZXIgPT0gJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KHVwcGVyQ2hhcmFjdGVyKSB8fCAhaXNB
U0NJSUhleERpZ2l0KGxvd2VyQ2hhcmFjdGVyKSkgeworICAgICAgICAgICAgLy8gSW52YWxpZCBz
ZXF1ZW5jZSwgPSBmb2xsb3dlZCBieSBub24gaGV4IGRpZ2l0cywganVzdCBpbnNlcnQgdGhlIGNo
YXJhY3RlcnMgYXMgaXMuCisgICAgICAgICAgICBvdXQuYXBwZW5kKCc9Jyk7CisgICAgICAgICAg
ICBvdXQuYXBwZW5kKHVwcGVyQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQobG93
ZXJDaGFyYWN0ZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
b3V0LmFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVy
KSk7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9RdW90ZWRQcmludGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9RdW90ZWRQcmludGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjFiYTUzMDQxMTIxMzdj
ZDc3NWZhOTJiODFlNDAxMGQ3MzNhODZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKKworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNTQ2YzJiMzIyNDU4NzFhYWRkOWM3MTJjZWY0MDJhMjY1OWMxMDQyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAg
LTAsMCArMSwyNzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTZWdtZW50ZWRTdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KKworbmFtZXNwYWNlIFBBTCB7
CisKK2lubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjphcHBlbmRUbyhTdHJp
bmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAoreworICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5n
KHN0cmluZywgc3RyaW5nLmxlbmd0aCgpIC0gbGVuZ3RoLCBsZW5ndGgpOworfQorCitTZWdtZW50
ZWRTdHJpbmcmIFNlZ21lbnRlZFN0cmluZzo6b3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYmIG90
aGVyKQoreworICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUob3RoZXIubV9jdXJyZW50
U3Vic3RyaW5nKTsKKyAgICBtX290aGVyU3Vic3RyaW5ncyA9IFdURk1vdmUob3RoZXIubV9vdGhl
clN1YnN0cmluZ3MpOworCisgICAgbV9pc0Nsb3NlZCA9IG90aGVyLm1faXNDbG9zZWQ7CisKKyAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBvdGhlci5tX2N1cnJlbnRDaGFyYWN0ZXI7CisKKyAgICBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgPSBvdGhl
ci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmc7Cisg
ICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG90aGVy
Lm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7CisgICAgbV9j
dXJyZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CisKKyAgICBtX2Zhc3RQYXRoRmxhZ3Mg
PSBvdGhlci5tX2Zhc3RQYXRoRmxhZ3M7CisgICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGlu
ZU51bWJlckZ1bmN0aW9uID0gb3RoZXIubV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJl
ckZ1bmN0aW9uOworICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9IG90
aGVyLm1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbjsKKworICAgIG90aGVyLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3Vuc2lnbmVkIFNlZ21lbnRlZFN0cmlu
Zzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2N1cnJlbnRTdWJz
dHJpbmcubGVuZ3RoOworICAgIGZvciAoYXV0byYgc3Vic3RyaW5nIDogbV9vdGhlclN1YnN0cmlu
Z3MpCisgICAgICAgIGxlbmd0aCArPSBzdWJzdHJpbmcubGVuZ3RoOworICAgIHJldHVybiBsZW5n
dGg7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQor
eworICAgIGlmICghbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVO
dW1iZXJzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3Ry
aW5ncykKKyAgICAgICAgc3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7
CisgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKK30KKwordm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmNsZWFyKCkKK3sKKyAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsK
KyAgICBtX290aGVyU3Vic3RyaW5ncy5jbGVhcigpOworCisgICAgbV9pc0Nsb3NlZCA9IGZhbHNl
OworCisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gMDsKKworICAgIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyA9IDA7CisgICAgbV9udW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IDA7CisgICAgbV9jdXJyZW50TGlu
ZSA9IDA7CisKKyAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5n
KCk7Cit9CisKK2lubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kU3Vic3RyaW5nKFN1
YnN0cmluZyYmIHN1YnN0cmluZykKK3sKKyAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlm
ICghc3Vic3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRT
dWJzdHJpbmcubGVuZ3RoKQorICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RGTW92
ZShzdWJzdHJpbmcpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5udW1i
ZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOworICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcgPSBX
VEZNb3ZlKHN1YnN0cmluZyk7CisgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVu
dFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5j
dGlvblBvaW50ZXJzKCk7CisgICAgfQorfQorCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6cHVzaEJh
Y2soU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBhIHN1YnN0cmlu
ZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgorICAgIEFTU0VSVChzdHJpbmcubGVuZ3RoKCkpOworCisg
ICAgLy8gVGhlIG5ldyBzdWJzdHJpbmcgd2Ugd2lsbCBjcmVhdGUgd29uJ3QgaGF2ZSB0aGUgZG9O
b3RFeGNsdWRlTGluZU51bWJlcnMgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gVGhhdCB3YXMg
bG9zdCB3aGVuIHRoZSBjaGFyYWN0ZXJzIHdlcmUgY29uc3VtZWQgYmVmb3JlIHB1c2hpbmcgdGhl
bSBiYWNrLiBCdXQgdGhpcyBkb2VzCisgICAgLy8gbm90IG1hdHRlciwgYmVjYXVzZSBjbGllbnRz
IG5ldmVyIHVzZSB0aGlzIGZvciBuZXdsaW5lcy4gQ2F0Y2ggdGhhdCB3aXRoIHRoaXMgYXNzZXJ0
aW9uLgorICAgIEFTU0VSVCghc3RyaW5nLmNvbnRhaW5zKCdcbicpKTsKKworICAgIC8vIFRoZSBj
aGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgbXVzdCBiZSBwcmV2aW91c2x5IGNvbnN1bWVkIGNoYXJh
Y3RlcnMgZnJvbSB0aGlzIHNlZ21lbnRlZCBzdHJpbmcuCisgICAgQVNTRVJUKHN0cmluZy5sZW5n
dGgoKSA8PSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKKworICAgIG1fbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRTdWJz
dHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICBpZiAobV9jdXJyZW50U3Vi
c3RyaW5nLmxlbmd0aCkKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MucHJlcGVuZChXVEZNb3Zl
KG1fY3VycmVudFN1YnN0cmluZykpOworICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUo
c3RyaW5nKTsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRT
dWJzdHJpbmcgLT0gbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aDsKKyAgICBtX2N1cnJlbnRDaGFy
YWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOworICAgIHVwZGF0
ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpj
bG9zZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKKyAgICBtX2lzQ2xvc2VkID0gdHJ1
ZTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nIHsgc3RyaW5nLm1f
Y3VycmVudFN1YnN0cmluZyB9KTsKKyAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5t
X290aGVyU3Vic3RyaW5ncykKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKHN1YnN0
cmluZyk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU2VnbWVudGVkU3RyaW5n
JiYgc3RyaW5nKQoreworICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZy5tX2N1cnJl
bnRTdWJzdHJpbmcpKTsKKyAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290aGVy
U3Vic3RyaW5ncykKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKFdURk1vdmUoc3Vi
c3RyaW5nKSk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU3RyaW5nJiYgc3Ry
aW5nKQoreworICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCit2b2lk
IFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGFw
cGVuZFN1YnN0cmluZyhTdHJpbmcgeyBzdHJpbmcgfSk7Cit9CisKK1N0cmluZyBTZWdtZW50ZWRT
dHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAg
ICBtX2N1cnJlbnRTdWJzdHJpbmcuYXBwZW5kVG8ocmVzdWx0KTsKKyAgICBmb3IgKGF1dG8mIHN1
YnN0cmluZyA6IG1fb3RoZXJTdWJzdHJpbmdzKQorICAgICAgICBzdWJzdHJpbmcuYXBwZW5kVG8o
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCkKK3sKKyAgICBt
X2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rl
cjE2OworICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7Cit9CisKK3ZvaWQgU2VnbWVudGVk
U3RyaW5nOjphZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2KCkKK3sKKyAgICBBU1NFUlQobV9j
dXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKTsKKyAgICBwcm9jZXNzUG9z
c2libGVOZXdsaW5lKCk7CisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJyZW50U3Vi
c3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIxNjsKKyAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgp
OworfQorCitpbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hh
cmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpCit7CisgICAgQVNTRVJU
KG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSk7CisgICAgaWYgKG1fb3RoZXJTdWJzdHJp
bmdzLmlzRW1wdHkoKSkgeworICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsK
KyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gMDsKKyAgICAgICAgdXBkYXRlQWR2YW5jZUZ1
bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyAr
PSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICBt
X2N1cnJlbnRTdWJzdHJpbmcgPSBtX290aGVyU3Vic3RyaW5ncy50YWtlRmlyc3QoKTsKKyAgICAv
LyBJZiB3ZSd2ZSBwcmV2aW91c2x5IGNvbnN1bWVkIHNvbWUgY2hhcmFjdGVycyBvZiB0aGUgbm9u
LWN1cnJlbnQgc3RyaW5nLCB3ZSBub3cgYWNjb3VudCBmb3IgdGhvc2UKKyAgICAvLyBjaGFyYWN0
ZXJzIGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLCBub3QgYXMgcGFydCBvZiAicHJpb3Ig
dG8gY3VycmVudCBzdHJpbmcuIgorICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlv
clRvQ3VycmVudFN1YnN0cmluZyAtPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKTsKKyAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJp
bmcuY3VycmVudENoYXJhY3RlcigpOworICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJz
KCk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3Rl
clN1YnN0cmluZygpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0g
MSk7CisgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVy
cyk7CisgICAgcHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpOworICAgIGFkdmFuY2VQYXN0U2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOworfQorCit2b2lk
IFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5KCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVu
dFN1YnN0cmluZy5sZW5ndGgpOworICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5pc0VtcHR5
KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFjdGVyKTsKK30KKwordm9pZCBTZWdtZW50
ZWRTdHJpbmc6OnVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAx
KTsKKyAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOworICAgIG1fYWR2YW5jZVdpdGhv
dXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQ
YXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsKKyAg
ICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQorICAgICAg
ICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZzsKKyAgICBlbHNlCisgICAgICAg
IG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6
OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51
bWJlcjsKK30KKworT3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2N1
cnJlbnRMaW5lKTsKK30KKworT3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRD
b2x1bW4oKSBjb25zdAoreworICAgIHJldHVybiBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2Vk
SW50KG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgLSBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lKTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNl
dEN1cnJlbnRQb3NpdGlvbihPcmRpbmFsTnVtYmVyIGxpbmUsIE9yZGluYWxOdW1iZXIgY29sdW1u
QWZ0cmVQcm9sb2csIGludCBwcm9sb2dMZW5ndGgpCit7CisgICAgbV9jdXJyZW50TGluZSA9IGxp
bmUuemVyb0Jhc2VkSW50KCk7CisgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9y
VG9DdXJyZW50TGluZSA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgKyBwcm9sb2dMZW5n
dGggLSBjb2x1bW5BZnRyZVByb2xvZy56ZXJvQmFzZWRJbnQoKTsKK30KKworU2VnbWVudGVkU3Ry
aW5nOjpBZHZhbmNlUGFzdFJlc3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2xvd0Nh
c2UoY29uc3QgY2hhciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCit7
CisgICAgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aCA9IDEwOworICAgIEFTU0VSVCghc3Ry
Y2hyKGxpdGVyYWwsICdcbicpKTsKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihsaXRlcmFsKTsK
KyAgICBBU1NFUlQobGVuZ3RoIDw9IG1heExlbmd0aCk7CisgICAgaWYgKGxlbmd0aCA+IHRoaXMt
Pmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gTm90RW5vdWdoQ2hhcmFjdGVyczsKKyAgICBVQ2hh
ciBjb25zdW1lZENoYXJhY3RlcnNbbWF4TGVuZ3RoXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2N1cnJlbnRD
aGFyYWN0ZXI7CisgICAgICAgIGlmIChjaGFyYWN0ZXJNaXNtYXRjaChjaGFyYWN0ZXIsIGxpdGVy
YWxbaV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpIHsKKyAgICAgICAgICAgIGlmIChpKQor
ICAgICAgICAgICAgICAgIHB1c2hCYWNrKFN0cmluZyB7IGNvbnN1bWVkQ2hhcmFjdGVycywgaSB9
KTsKKyAgICAgICAgICAgIHJldHVybiBEaWROb3RNYXRjaDsKKyAgICAgICAgfQorICAgICAgICBh
ZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzW2ldID0g
Y2hhcmFjdGVyOworICAgIH0KKyAgICByZXR1cm4gRGlkTWF0Y2g7Cit9CisKK3ZvaWQgU2VnbWVu
dGVkU3RyaW5nOjp1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCkK
K3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgpOworICAgIEFTU0VSVCht
X290aGVyU3Vic3RyaW5ncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFj
dGVyKTsKKyAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOworICAgIG1fYWR2YW5jZVdp
dGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VFbXB0eTsKKyAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlRW1wdHk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTIzMDgxYTI5MTY1MGFj
NzU0YTU1NTE2M2ZiYWNkMmM4OTY5Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCkBAIC0wLDAgKzEsMzIzIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8gRklYTUU6IFRo
aXMgc2hvdWxkIG5vdCBzdGFydCB3aXRoICJrIi4KKy8vIEZJWE1FOiBUaGlzIGlzIGEgc2hhcmVk
IHRva2VuaXplciBjb25jZXB0LCBub3QgYSBTZWdtZW50ZWRTdHJpbmcgY29uY2VwdCwgYnV0IHRo
aXMgaXMgdGhlIG9ubHkgY29tbW9uIGhlYWRlciBmb3Igbm93LgorY29uc3RleHByIExDaGFyIGtF
bmRPZkZpbGVNYXJrZXIgPSAwOworCitjbGFzcyBTZWdtZW50ZWRTdHJpbmcgeworcHVibGljOgor
ICAgIFNlZ21lbnRlZFN0cmluZygpID0gZGVmYXVsdDsKKyAgICBTZWdtZW50ZWRTdHJpbmcoU3Ry
aW5nJiYpOworICAgIFNlZ21lbnRlZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworICAgIFNlZ21l
bnRlZFN0cmluZyhTZWdtZW50ZWRTdHJpbmcmJikgPSBkZWxldGU7CisgICAgU2VnbWVudGVkU3Ry
aW5nKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gZGVsZXRlOworCisgICAgU2VnbWVudGVkU3Ry
aW5nJiBvcGVyYXRvcj0oU2VnbWVudGVkU3RyaW5nJiYpOworICAgIFNlZ21lbnRlZFN0cmluZyYg
b3BlcmF0b3I9KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
Y2xlYXIoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIGFwcGVuZChTZWdtZW50ZWRT
dHJpbmcmJik7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CisKKyAg
ICB2b2lkIGFwcGVuZChTdHJpbmcmJik7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7
CisKKyAgICB2b2lkIHB1c2hCYWNrKFN0cmluZyYmKTsKKworICAgIHZvaWQgc2V0RXhjbHVkZUxp
bmVOdW1iZXJzKCk7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aDsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworCisg
ICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbG9zZWQ7IH0KKworICAgIHZv
aWQgYWR2YW5jZSgpOworICAgIHZvaWQgYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7IC8vIEZhc3Rl
ciB0aGFuIGNhbGxpbmcgYWR2YW5jZSB3aGVuIHdlIGtub3cgdGhlIGN1cnJlbnQgY2hhcmFjdGVy
IGlzIG5vdCBhIG5ld2xpbmUuCisgICAgdm9pZCBhZHZhbmNlUGFzdE5ld2xpbmUoKTsgLy8gRmFz
dGVyIHRoYW4gY2FsbGluZyBhZHZhbmNlIHdoZW4gd2Uga25vdyB0aGUgY3VycmVudCBjaGFyYWN0
ZXIgaXMgYSBuZXdsaW5lLgorCisgICAgZW51bSBBZHZhbmNlUGFzdFJlc3VsdCB7IERpZE5vdE1h
dGNoLCBEaWRNYXRjaCwgTm90RW5vdWdoQ2hhcmFjdGVycyB9OworICAgIHRlbXBsYXRlPHVuc2ln
bmVkIGxlbmd0aD4gQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxp
dGVyYWwpW2xlbmd0aF0pIHsgcmV0dXJuIGFkdmFuY2VQYXN0PGxlbmd0aCwgZmFsc2U+KGxpdGVy
YWwpOyB9CisgICAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBBZHZhbmNlUGFzdFJlc3VsdCBh
ZHZhbmNlUGFzdExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyICgmbGl0ZXJhbClb
bGVuZ3RoXSkgeyByZXR1cm4gYWR2YW5jZVBhc3Q8bGVuZ3RoLCB0cnVlPihsaXRlcmFsKTsgfQor
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdDsKKworICAg
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgVUNoYXIgY3VycmVudENoYXJhY3Rlcigp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQorCisgICAgT3JkaW5hbE51bWJl
ciBjdXJyZW50Q29sdW1uKCkgY29uc3Q7CisgICAgT3JkaW5hbE51bWJlciBjdXJyZW50TGluZSgp
IGNvbnN0OworCisgICAgLy8gU2V0cyB2YWx1ZSBvZiBsaW5lL2NvbHVtbiB2YXJpYWJsZXMuIENv
bHVtbiBpcyBzcGVjaWZpZWQgaW5kaXJlY3RseSBieSBhIHBhcmFtZXRlciBjb2x1bW5BZnRlclBy
b2xvZworICAgIC8vIHdoaWNoIGlzIGEgdmFsdWUgb2YgY29sdW1uIHRoYXQgd2Ugc2hvdWxkIGdl
dCBhZnRlciBhIHByb2xvZyAoZmlyc3QgcHJvbG9nTGVuZ3RoIGNoYXJhY3RlcnMpIGhhcyBiZWVu
IGNvbnN1bWVkLgorICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKE9yZGluYWxOdW1iZXIgbGlu
ZSwgT3JkaW5hbE51bWJlciBjb2x1bW5BZnRlclByb2xvZywgaW50IHByb2xvZ0xlbmd0aCk7CisK
K3ByaXZhdGU6CisgICAgc3RydWN0IFN1YnN0cmluZyB7CisgICAgICAgIFN1YnN0cmluZygpID0g
ZGVmYXVsdDsKKyAgICAgICAgU3Vic3RyaW5nKFN0cmluZyYmKTsKKworICAgICAgICBVQ2hhciBj
dXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7CisgICAgICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXJQ
cmVJbmNyZW1lbnQoKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGVuZFRvKFN0cmluZ0J1aWxkZXImKSBjb25z
dDsKKworICAgICAgICBTdHJpbmcgc3RyaW5nOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggeyAw
IH07CisgICAgICAgIGJvb2wgaXM4Qml0OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBj
b25zdCBMQ2hhciogY3VycmVudENoYXJhY3Rlcjg7CisgICAgICAgICAgICBjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcjE2OworICAgICAgICB9OworICAgICAgICBib29sIGRvTm90RXhjbHVk
ZUxpbmVOdW1iZXJzIHsgdHJ1ZSB9OworICAgIH07CisKKyAgICBlbnVtIEZhc3RQYXRoRmxhZ3Mg
eworICAgICAgICBOb0Zhc3RQYXRoID0gMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVycyA9IDEgPDwgMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2UgPSAxIDw8IDEs
CisgICAgfTsKKworICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5nKFN1YnN0cmluZyYmKTsKKworICAg
IHZvaWQgcHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpOworICAgIHZvaWQgc3RhcnROZXdMaW5lKCk7
CisKKyAgICB2b2lkIGFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7CisgICAgdm9p
ZCBhZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCk7CisgICAgdm9pZCBhZHZhbmNl
QW5kVXBkYXRlTGluZU51bWJlcjE2KCk7CisgICAgdm9pZCBhZHZhbmNlUGFzdFNpbmdsZUNoYXJh
Y3RlclN1YnN0cmluZ1dpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKKyAgICB2b2lkIGFkdmFu
Y2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgdm9pZCBhZHZhbmNlRW1wdHko
KTsKKworICAgIHZvaWQgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKKyAgICB2b2lk
IHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKKyAgICB2b2lk
IHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5n
KCk7CisKKyAgICB2b2lkIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJNaXNtYXRjaChD
aGFyYWN0ZXJUeXBlLCBjaGFyLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7CisgICAg
dGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZT4g
QWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xlbmd0
aF0pOworICAgIEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3QgY2hh
ciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOworCisgICAgU3Vic3Ry
aW5nIG1fY3VycmVudFN1YnN0cmluZzsKKyAgICBEZXF1ZTxTdWJzdHJpbmc+IG1fb3RoZXJTdWJz
dHJpbmdzOworCisgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKKworICAgIFVDaGFyIG1f
Y3VycmVudENoYXJhY3RlciB7IDAgfTsKKworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lIHsgMCB9OworICAg
IGludCBtX2N1cnJlbnRMaW5lIHsgMCB9OworCisgICAgdW5zaWduZWQgY2hhciBtX2Zhc3RQYXRo
RmxhZ3MgeyBOb0Zhc3RQYXRoIH07CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9hZHZh
bmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uKSgpIHsgJlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZUVtcHR5IH07CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9hZHZhbmNl
QW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpIHsgJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5j
ZUVtcHR5IH07Cit9OworCitpbmxpbmUgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OlN1YnN0
cmluZyhTdHJpbmcmJiBwYXNzZWRTdHJpbmcpCisgICAgOiBzdHJpbmcoV1RGTW92ZShwYXNzZWRT
dHJpbmcpKQorICAgICwgbGVuZ3RoKHN0cmluZy5sZW5ndGgoKSkKK3sKKyAgICBpZiAobGVuZ3Ro
KSB7CisgICAgICAgIGlzOEJpdCA9IHN0cmluZy5pbXBsKCktPmlzOEJpdCgpOworICAgICAgICBp
ZiAoaXM4Qml0KQorICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjggPSBzdHJpbmcuaW1wbCgp
LT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJyZW50Q2hhcmFj
dGVyMTYgPSBzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0ZXJz
Q29uc3VtZWQoKSBjb25zdAoreworICAgIHJldHVybiBzdHJpbmcubGVuZ3RoKCkgLSBsZW5ndGg7
Cit9CisKK0FMV0FZU19JTkxJTkUgVUNoYXIgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OmN1
cnJlbnRDaGFyYWN0ZXIoKSBjb25zdAoreworICAgIEFTU0VSVChsZW5ndGgpOworICAgIHJldHVy
biBpczhCaXQgPyAqY3VycmVudENoYXJhY3RlcjggOiAqY3VycmVudENoYXJhY3RlcjE2OworfQor
CitBTFdBWVNfSU5MSU5FIFVDaGFyIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpjdXJyZW50
Q2hhcmFjdGVyUHJlSW5jcmVtZW50KCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoKTsKKyAgICByZXR1
cm4gaXM4Qml0ID8gKisrY3VycmVudENoYXJhY3RlcjggOiAqKytjdXJyZW50Q2hhcmFjdGVyMTY7
Cit9CisKK2lubGluZSBTZWdtZW50ZWRTdHJpbmc6OlNlZ21lbnRlZFN0cmluZyhTdHJpbmcmJiBz
dHJpbmcpCisgICAgOiBtX2N1cnJlbnRTdWJzdHJpbmcoV1RGTW92ZShzdHJpbmcpKQoreworICAg
IGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIG1fY3VycmVudENoYXJh
Y3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVw
ZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7CisgICAgfQorfQorCitpbmxpbmUgU2VnbWVu
dGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgOiBT
ZWdtZW50ZWRTdHJpbmcoU3RyaW5nIHsgc3RyaW5nIH0pCit7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBTZWdtZW50ZWRTdHJpbmc6OmRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCkKK3sKKyAgICBB
U1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA+IDEpOworICAgIGlmIChVTkxJS0VMWSgt
LW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSkpCisgICAgICAgIHVwZGF0ZUFkdmFuY2VG
dW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5l
TnVtYmVyKCkKK3sKKyAgICBpZiAoTElLRUxZKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRBZHZh
bmNlKSkgeworICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJp
bmcuY3VycmVudENoYXJhY3Rlcjg7CisgICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZVdpdGhvdXRV
cGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbikoKTsKK30KKworaW5saW5lIHZvaWQgU2VnbWVudGVk
U3RyaW5nOjpzdGFydE5ld0xpbmUoKQoreworICAgICsrbV9jdXJyZW50TGluZTsKKyAgICBtX251
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKTsKK30KKworaW5saW5lIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpwcm9j
ZXNzUG9zc2libGVOZXdsaW5lKCkKK3sKKyAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID09ICdc
bicpCisgICAgICAgIHN0YXJ0TmV3TGluZSgpOworfQorCitpbmxpbmUgdm9pZCBTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2UoKQoreworICAgIGlmIChMSUtFTFkobV9mYXN0UGF0aEZsYWdzICYgVXNl
OEJpdEFkdmFuY2UpKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3Ro
ID4gMSk7CisgICAgICAgIGJvb2wgbGFzdENoYXJhY3Rlcldhc05ld2xpbmUgPSBtX2N1cnJlbnRD
aGFyYWN0ZXIgPT0gJ1xuJzsKKyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJy
ZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXI4OworICAgICAgICBib29sIGhhdmVPbmVDaGFy
YWN0ZXJMZWZ0ID0gLS1tX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDE7CisgICAgICAgIGlm
IChMSUtFTFkoIShsYXN0Q2hhcmFjdGVyV2FzTmV3bGluZSB8IGhhdmVPbmVDaGFyYWN0ZXJMZWZ0
KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyV2FzTmV3
bGluZSAmICEhKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRBZHZhbmNlQW5kVXBkYXRlTGluZU51
bWJlcnMpKQorICAgICAgICAgICAgc3RhcnROZXdMaW5lKCk7CisgICAgICAgIGlmIChoYXZlT25l
Q2hhcmFjdGVyTGVmdCkKKyAgICAgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJz
Rm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAodGhpcy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbikoKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROb25OZXds
aW5lKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50Q2hhcmFjdGVyICE9ICdcbicpOworICAgIGFk
dmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Cit9CisKK2lubGluZSB2b2lkIFNlZ21l
bnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROZXdsaW5lKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50
Q2hhcmFjdGVyID09ICdcbicpOworICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4g
MSkgeworICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1i
ZXJzKQorICAgICAgICAgICAgc3RhcnROZXdMaW5lKCk7CisgICAgICAgIG1fY3VycmVudENoYXJh
Y3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyUHJlSW5jcmVtZW50KCk7
CisgICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiko
KTsKK30KKworaW5saW5lIHVuc2lnbmVkIFNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgKyBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQUxXQVlTX0lOTElORSBib29sIFNlZ21lbnRlZFN0cmluZzo6Y2hhcmFjdGVyTWlzbWF0
Y2goQ2hhcmFjdGVyVHlwZSBhLCBjaGFyIGIsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KQoreworICAgIHJldHVybiBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UgPyAhaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbChhLCBiKSA6IGEgIT0gYjsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoSW5jbHVkaW5nVGVybWluYXRvciwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2U+IFNl
Z21lbnRlZFN0cmluZzo6QWR2YW5jZVBhc3RSZXN1bHQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNl
UGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClbbGVuZ3RoSW5jbHVkaW5nVGVybWluYXRvcl0pCit7
CisgICAgY29uc3RleHByIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aEluY2x1ZGluZ1Rlcm1pbmF0
b3IgLSAxOworICAgIEFTU0VSVCghbGl0ZXJhbFtsZW5ndGhdKTsKKyAgICBBU1NFUlQoIXN0cmNo
cihsaXRlcmFsLCAnXG4nKSk7CisgICAgaWYgKGxlbmd0aCArIDEgPCBtX2N1cnJlbnRTdWJzdHJp
bmcubGVuZ3RoKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuaXM4Qml0KSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyTWlzbWF0Y2gobV9jdXJyZW50U3Vic3RyaW5nLmN1cnJl
bnRDaGFyYWN0ZXI4W2ldLCBsaXRlcmFsW2ldLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlkTm90TWF0Y2g7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjggKz0gbGVuZ3Ro
OworICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKm1fY3VycmVudFN1YnN0cmluZy5j
dXJyZW50Q2hhcmFjdGVyODsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjaGFy
YWN0ZXJNaXNtYXRjaChtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2W2ldLCBs
aXRlcmFsW2ldLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRGlkTm90TWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1cnJl
bnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2ICs9IGxlbmd0aDsKKyAgICAgICAgICAgIG1f
Y3VycmVudENoYXJhY3RlciA9ICptX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2
OworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggLT0gbGVuZ3Ro
OworICAgICAgICByZXR1cm4gRGlkTWF0Y2g7CisgICAgfQorICAgIHJldHVybiBhZHZhbmNlUGFz
dFNsb3dDYXNlKGxpdGVyYWwsIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Cit9CisKK2lubGlu
ZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKQor
eworICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4gMSkgeworICAgICAgICBpZiAo
bV9jdXJyZW50U3Vic3RyaW5nLmlzOEJpdCkgeworICAgICAgICAgICAgbV9mYXN0UGF0aEZsYWdz
ID0gVXNlOEJpdEFkdmFuY2U7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzKQorICAgICAgICAgICAgICAgIG1fZmFzdFBhdGhGbGFncyB8
PSBVc2U4Qml0QWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJzOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7CisgICAg
ICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50
ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTY7CisgICAgICAgIGlm
IChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCisgICAgICAgICAg
ICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2OworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIHVw
ZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0YzYzYzYzNWJlM2Ez
MmI4MDE1NWFmYmJjMWNiY2JkNWQ5ZGFlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8gSW4gc29tZSBjaXJjdW1zdGFu
Y2VzIHdlIHdhbnQgdG8gc3RvcmUgYSBTdHJpbmcgYWxvbmcgd2l0aCB0aGUgVGV4dERpcmVjdGlv
bgorLy8gb2YgdGhlIFN0cmluZyBhcyBsZWFybmVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIFN0
cmluZy4gRm9yIGV4YW1wbGUsCisvLyBjb25zaWRlciBzdG9yaW5nIHRoZSB0aXRsZSBkZXJpdmVk
IGZyb20gPHRpdGxlIGRpcj0ncnRsJz5zb21lIHRpdGxlPC90aXRsZT4KKy8vIGluIHRoZSBoaXN0
b3J5LgorLy8KKy8vIE5vdGUgdGhhdCBpcyBleHBsaWNpdGx5ICpub3QqIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIHN0cmluZyBhcyBsZWFybmVkCisvLyBmcm9tIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBz
dHJpbmc7IGl0J3MgZXh0cmEgbWV0YWRhdGEgd2UgaGF2ZSBleHRlcm5hbAorLy8gdG8gdGhlIHN0
cmluZy4KKworc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb24geworICAgIFN0cmluZyBzdHJpbmc7
CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpMVFIgfTsKK307
CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYSwg
Y29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcgPT0g
Yi5zdHJpbmcgJiYgYS5kaXJlY3Rpb24gPT0gYi5kaXJlY3Rpb247Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYSwgY29uc3QgU3RyaW5nV2l0
aERpcmVjdGlvbiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgU3Ry
aW5nV2l0aERpcmVjdGlvbiB0cnVuY2F0ZUZyb21FbmQoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlv
biYgc3RyaW5nLCB1bnNpZ25lZCBtYXhMZW5ndGgpCit7CisgICAgcmV0dXJuIHsgc3RyaW5nLnN0
cmluZy5sZWZ0KG1heExlbmd0aCksIHN0cmluZy5kaXJlY3Rpb24gfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvU3VmZml4
VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1N1ZmZpeFRyZWUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NTZmY2UzOWVkNTFiODg5YTJiMjk0ZDY3MzI2NmUyYWEyODU1M2FkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1N1ZmZpeFRyZWUuaApAQCAtMCww
ICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBZGFtIEJhcnRoLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK2NsYXNzIFVuaWNvZGVDb2Rl
Ym9vayB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBjb2RlV29yZChVQ2hhciBjKSB7IHJldHVy
biBjOyB9CisgICAgZW51bSB7IENvZGVTaXplID0gMSA8PCA4ICogc2l6ZW9mKFVDaGFyKSB9Owor
fTsKKworY2xhc3MgQVNDSUlDb2RlYm9vayB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBjb2Rl
V29yZChVQ2hhciBjKSB7IHJldHVybiBjICYgKENvZGVTaXplIC0gMSk7IH0KKyAgICBlbnVtIHsg
Q29kZVNpemUgPSAxIDw8ICg4ICogc2l6ZW9mKGNoYXIpIC0gMSkgfTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvZGVib29rPgorY2xhc3MgU3VmZml4VHJlZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VmZml4VHJlZSkKK3B1Ymxp
YzoKKyAgICBTdWZmaXhUcmVlKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgZGVwdGgpCisg
ICAgICAgIDogbV9kZXB0aChkZXB0aCkKKyAgICAgICAgLCBtX2xlYWYodHJ1ZSkKKyAgICB7Cisg
ICAgICAgIGJ1aWxkKHRleHQpOworICAgIH0KKworICAgIGJvb2wgbWlnaHRDb250YWluKGNvbnN0
IFN0cmluZyYgcXVlcnkpCisgICAgeworICAgICAgICBOb2RlKiBjdXJyZW50ID0gJm1fcm9vdDsK
KyAgICAgICAgaW50IGxpbWl0ID0gc3RkOjptaW4obV9kZXB0aCwgcXVlcnkubGVuZ3RoKCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHsKKyAgICAgICAgICAgIGF1
dG8gaXQgPSBjdXJyZW50LT5maW5kKENvZGVib29rOjpjb2RlV29yZChxdWVyeVtpXSkpOworICAg
ICAgICAgICAgaWYgKGl0ID09IGN1cnJlbnQtPmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBpdC0+bm9kZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTm9kZSB7Cisg
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgTm9k
ZShib29sIGlzTGVhZiA9IGZhbHNlKQorICAgICAgICAgICAgOiBtX2lzTGVhZihpc0xlYWYpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5Ob2RlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICBh
dXRvKiBjaGlsZCA9IGVudHJ5Lm5vZGU7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkICYmICFj
aGlsZC0+bV9pc0xlYWYpCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjaGlsZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE5vZGUqJiBjaGlsZEF0KGludCBjb2RlV29y
ZCk7CisKKyAgICAgICAgYXV0byBmaW5kKGludCBjb2RlV29yZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4u
ZW5kKCksIFtjb2RlV29yZF0oYXV0byYgZW50cnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZW50cnkuY29kZVdvcmQgPT0gY29kZVdvcmQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9jaGlsZHJlbi5lbmQoKTsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgc3RydWN0IENoaWxkV2l0aENvZGVXb3JkIHsKKyAgICAgICAgICAg
IGludCBjb2RlV29yZDsKKyAgICAgICAgICAgIE5vZGUqIG5vZGU7CisgICAgICAgIH07CisKKyAg
ICAgICAgVmVjdG9yPENoaWxkV2l0aENvZGVXb3JkPiBtX2NoaWxkcmVuOworICAgICAgICBib29s
IG1faXNMZWFmOworICAgIH07CisKKyAgICB2b2lkIGJ1aWxkKGNvbnN0IFN0cmluZyYgdGV4dCkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgYmFzZSA9IDA7IGJhc2UgPCB0ZXh0Lmxlbmd0
aCgpOyArK2Jhc2UpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSAmbV9yb290OworICAg
ICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihiYXNlICsgbV9kZXB0aCwgdGV4dC5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7IGJhc2UgKyBv
ZmZzZXQgPCBsaW1pdDsgKytvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dCAhPSAmbV9sZWFmKTsKKyAgICAgICAgICAgICAgICBOb2RlKiYgY2hpbGQgPSBjdXJyZW50LT5j
aGlsZEF0KENvZGVib29rOjpjb2RlV29yZCh0ZXh0W2Jhc2UgKyBvZmZzZXRdKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBiYXNlICsg
b2Zmc2V0ICsgMSA9PSBsaW1pdCA/ICZtX2xlYWYgOiBuZXcgTm9kZSgpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBjaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIE5vZGUgbV9yb290OworICAgIHVuc2lnbmVkIG1fZGVwdGg7CisKKyAgICAvLyBJbnN0ZWFk
IG9mIGFsbG9jYXRpbmcgYSBmcmVzaCBlbXB0eSBsZWFmIG5vZGUgZm9yIGV2ZXIgbGVhZiBpbiB0
aGUgdHJlZQorICAgIC8vICh0aGVyZSBjYW4gYmUgYSBsb3Qgb2YgdGhlc2UpLCB3ZSBhbGlhcyBh
bGwgdGhlIGxlYXZlcyB0byB0aGlzICJzdGF0aWMiCisgICAgLy8gbGVhZiBub2RlLgorICAgIE5v
ZGUgbV9sZWFmOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZWJvb2s+CitpbmxpbmUgYXV0
byBTdWZmaXhUcmVlPENvZGVib29rPjo6Tm9kZTo6Y2hpbGRBdChpbnQgY29kZVdvcmQpIC0+IE5v
ZGUqJgoreworICAgIGF1dG8gaXQgPSBmaW5kKGNvZGVXb3JkKTsKKyAgICBpZiAoaXQgIT0gbV9j
aGlsZHJlbi5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5ub2RlOworICAgIG1fY2hpbGRyZW4u
YXBwZW5kKENoaWxkV2l0aENvZGVXb3JkIHsgY29kZVdvcmQsIG51bGxwdHIgfSk7CisgICAgcmV0
dXJuIG1fY2hpbGRyZW4ubGFzdCgpLm5vZGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2E2YmIwOTY4YmNjMTI5OWI1YzNjMGVjMDIwM2Q2ZWNlMWM3MTgzZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKQEAg
LTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEb21pbmlrIFLD
tnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKwordW5zaWduZWQgZW5kT2ZG
aXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyB0ZXh0KQoreworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKSB7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0ID0gaTsKKyAgICAgICAgVUNoYXIzMiBj
aDsKKyAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgbGVuZ3RoLCBjaCk7CisgICAgICAgIGlmICgh
cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoKSkKKyAgICAgICAgICAgIHJldHVybiBm
aXJzdDsKKyAgICB9CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc3RhcnRPZkxh
c3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcgdGV4dCkKK3sKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA+
IDA7ICkgeworICAgICAgICB1bnNpZ25lZCBsYXN0ID0gaTsKKyAgICAgICAgVUNoYXIzMiBjaDsK
KyAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2gpOworICAgICAgICBpZiAoIXJlcXVpcmVz
Q29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCisgICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisKK2ludCBmaW5k
TmV4dFdvcmRGcm9tSW5kZXgoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9y
d2FyZCkKK3sKKyAgICBVQnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0
KTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dp
bmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkg
eworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHBy
ZWNlZWRpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSAmJiB1X2lzYWxudW0o
dGV4dFtwb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisK
KyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCgpOworICAgIH0KKworICAgIHBv
c2l0aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICB3aGlsZSAocG9zaXRp
b24gIT0gVUJSS19ET05FKSB7CisgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhl
IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAg
aWYgKHBvc2l0aW9uICYmIHVfaXNhbG51bSh0ZXh0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICBy
ZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgcG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhpdCwg
cG9zaXRpb24pOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIGZpbmRXb3JkQm91
bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQoreworICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQpOwor
ICAgICplbmQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgIGlmICgqZW5kIDwg
MCkKKyAgICAgICAgKmVuZCA9IHVicmtfbGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdWJya19wcmV2
aW91cyhpdCk7Cit9CisKK3ZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQs
IGludCBwb3NpdGlvbiwgaW50KiBlbmQpCit7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dCk7CisgICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3Np
dGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsK
K30KKworI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKKworfSAvLyBuYW1lc3BhY2UgUEFMCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk4MmUxZjM4NDY3NzQ2MzRhZGU0ODU4ZDIwMjAwN2JmMWJmYzE1MDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaApAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworaW5saW5lIGJvb2wgcmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIC8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIG5lZWRlZCB3aGVuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2NTYgaXMgZml4ZWQuCisKKyAgICAvLyBXZSBj
YW4gZ2V0IHJpZCBvZiB0aGlzIGNvbnN0YW50IGlmIHdlIHJlcXVpcmUgYSBuZXdlciB2ZXJzaW9u
IG9mIHRoZSBJQ1UgaGVhZGVycy4KKyAgICBjb25zdCBpbnQgV0tfVV9MQl9DT05ESVRJT05BTF9K
QVBBTkVTRV9TVEFSVEVSID0gMzc7CisKKyAgICBpbnQgbGluZUJyZWFrID0gdV9nZXRJbnRQcm9w
ZXJ0eVZhbHVlKGNoYXJhY3RlciwgVUNIQVJfTElORV9CUkVBSyk7CisgICAgcmV0dXJuIGxpbmVC
cmVhayA9PSBVX0xCX0NPTVBMRVhfQ09OVEVYVCB8fCBsaW5lQnJlYWsgPT0gV0tfVV9MQl9DT05E
SVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSIHx8IGxpbmVCcmVhayA9PSBVX0xCX0lERU9HUkFQSElD
OworfQorCit1bnNpZ25lZCBlbmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3
KTsKK3Vuc2lnbmVkIHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3KTsK
Kwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIGludCBwb3NpdGlvbiwgaW50KiBz
dGFydCwgaW50KiBlbmQpOwordm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIGlu
dCBwb3NpdGlvbiwgaW50KiBlbmQpOworaW50IGZpbmROZXh0V29yZEZyb21JbmRleChTdHJpbmdW
aWV3LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCk7CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGYxYmQ2NzhjOTRmZDFhYTFi
YTI1OWU2MzcxYWRhZWNmODI5YjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L1RleHRDaGVja2luZy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVt
VHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0Q2hl
Y2tpbmdUeXBlIDogdWludDhfdCB7CisgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgPSAwLAor
ICAgIFNwZWxsaW5nICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAgIEdyYW1tYXIgICAgICAg
ICAgICAgICAgID0gMSA8PCAxLAorICAgIExpbmsgICAgICAgICAgICAgICAgICAgID0gMSA8PCAy
LAorICAgIFF1b3RlICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAgIERhc2ggICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA0LAorICAgIFJlcGxhY2VtZW50ICAgICAgICAgICAgID0gMSA8
PCA1LAorICAgIENvcnJlY3Rpb24gICAgICAgICAgICAgID0gMSA8PCA2LAorICAgIFNob3dDb3Jy
ZWN0aW9uUGFuZWwgICAgID0gMSA8PCA3LAorfTsKKworI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVk
ZWYgdWludDY0X3QgTlNUZXh0Q2hlY2tpbmdUeXBlczsKK1BBTF9FWFBPUlQgTlNUZXh0Q2hlY2tp
bmdUeXBlcyBuc1RleHRDaGVja2luZ1R5cGVzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPik7
CisjZW5kaWYKKworZW51bSBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB7CisgICAgVGV4dENoZWNr
aW5nUHJvY2Vzc0JhdGNoLAorICAgIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbAorfTsK
Kworc3RydWN0IEdyYW1tYXJEZXRhaWwgeworICAgIENoYXJhY3RlclJhbmdlIHJhbmdlOworICAg
IFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CisgICAgU3RyaW5nIHVzZXJEZXNjcmlwdGlvbjsKK307
CisKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQgeworICAgIFRleHRDaGVja2luZ1R5cGUgdHlw
ZTsKKyAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4g
ZGV0YWlsczsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7Cit9OworCitzdHJ1Y3QgVGV4dENoZWNr
aW5nR3Vlc3NlcyB7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKKyAgICBib29sIG1pc3Nw
ZWxsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgdW5ncmFtbWF0aWNhbCB7IGZhbHNlIH07Cit9Owor
CitlbnVtIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8VGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXJUeXBlPjsKKworY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdERhdGEg
eworcHVibGljOgorICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhKCkgPSBkZWZhdWx0OworICAg
IFRleHRDaGVja2luZ1JlcXVlc3REYXRhKHN0ZDo6b3B0aW9uYWw8VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXI+IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHBy
b2Nlc3NUeXBlKQorICAgICAgICA6IG1fdGV4dCB7IHRleHQgfQorICAgICAgICAsIG1faWRlbnRp
ZmllciB7IGlkZW50aWZpZXIgfQorICAgICAgICAsIG1fcHJvY2Vzc1R5cGUgeyBwcm9jZXNzVHlw
ZSB9CisgICAgICAgICwgbV9jaGVja2luZ1R5cGVzIHsgY2hlY2tpbmdUeXBlcyB9CisgICAgewor
ICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI+
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBT
dHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKyAgICBPcHRpb25TZXQ8VGV4
dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tpbmdU
eXBlczsgfQorICAgIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHByb2Nlc3NUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9jZXNzVHlwZTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX3RleHQ7
CisgICAgc3RkOjpvcHRpb25hbDxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gbV9pZGVu
dGlmaWVyOworICAgIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIG1fcHJvY2Vzc1R5cGUgeyBUZXh0
Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwgfTsKKyAgICBPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZT4gbV9jaGVja2luZ1R5cGVzOworfTsKKworY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPFRleHRDaGVja2luZ1JlcXVlc3Q+IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5UZXh0Q2hlY2tpbmdSZXF1ZXN0KCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBj
b25zdCBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgZGF0YSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlLAorICAgICAgICBQ
QUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzQmF0Y2gsCisg
ICAgICAgIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU6OlRleHRDaGVja2luZ1Byb2Nlc3NJ
bmNyZW1lbnRhbAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBB
TDo6VGV4dENoZWNraW5nVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZSwKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlOjpOb25lLAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLAorICAg
ICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIsCisgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nVHlwZTo6TGluaywKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSwK
KyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLAorICAgICAgICBQQUw6OlRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6
OkNvcnJlY3Rpb24sCisgICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rp
b25QYW5lbAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0RGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvVGV4dERpcmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlODZiYWFmMzE4OTVj
YjY2MDQ1NzRjMDJhYjcyMTBkN2QxMmVkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvVGV4dERpcmVjdGlvbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFBBTCB7CisKK2VudW0gY2xhc3MgVGV4
dERpcmVjdGlvbiA6IGJvb2wgeyBMVFIsIFJUTCB9OworCitpbmxpbmUgYm9vbCBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBkaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3RleHQvVGV4dEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNzNjN2QyODEwNWIyMmYyMTZlZmU1NzNm
ZTM0YzJlMGUzMjczMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
dGV4dC9UZXh0RmxhZ3MuaApAQCAtMCwwICsxLDgwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgeworICAg
IEF1dG9UZXh0UmVuZGVyaW5nLAorICAgIE9wdGltaXplU3BlZWQsCisgICAgT3B0aW1pemVMZWdp
YmlsaXR5LAorICAgIEdlb21ldHJpY1ByZWNpc2lvbgorfTsKKworZW51bSBjbGFzcyBGb250U21v
b3RoaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEF1dG9TbW9vdGhpbmcsCisgICAgTm9TbW9vdGhp
bmcsCisgICAgQW50aWFsaWFzZWQsCisgICAgU3VicGl4ZWxBbnRpYWxpYXNlZAorfTsKKworZW51
bSBjbGFzcyBGb250T3JpZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBIb3Jpem9udGFsLAorICAg
IFZlcnRpY2FsCit9OworCitlbnVtIGNsYXNzIE5vbkNKS0dseXBoT3JpZW50YXRpb24gOiB1aW50
OF90IHsKKyAgICBNaXhlZCwKKyAgICBVcHJpZ2h0Cit9OworCitlbnVtIEV4cGFuc2lvbkJlaGF2
aW9yRmxhZ3MgeworICAgIEZvcmJpZFJpZ2h0RXhwYW5zaW9uID0gMCA8PCAwLAorICAgIEFsbG93
UmlnaHRFeHBhbnNpb24gPSAxIDw8IDAsCisgICAgRm9yY2VSaWdodEV4cGFuc2lvbiA9IDIgPDwg
MCwKKyAgICBSaWdodEV4cGFuc2lvbk1hc2sgPSAzIDw8IDAsCisKKyAgICBGb3JiaWRMZWZ0RXhw
YW5zaW9uID0gMCA8PCAyLAorICAgIEFsbG93TGVmdEV4cGFuc2lvbiA9IDEgPDwgMiwKKyAgICBG
b3JjZUxlZnRFeHBhbnNpb24gPSAyIDw8IDIsCisgICAgTGVmdEV4cGFuc2lvbk1hc2sgPSAzIDw8
IDIsCisKKyAgICBEZWZhdWx0RXhwYW5zaW9uID0gQWxsb3dSaWdodEV4cGFuc2lvbiB8IEZvcmJp
ZExlZnRFeHBhbnNpb24sCit9OwordHlwZWRlZiB1bnNpZ25lZCBFeHBhbnNpb25CZWhhdmlvcjsK
KworZW51bSBGb250U3ludGhlc2lzVmFsdWVzIHsKKyAgICBGb250U3ludGhlc2lzTm9uZSA9IDB4
MCwKKyAgICBGb250U3ludGhlc2lzV2VpZ2h0ID0gMHgxLAorICAgIEZvbnRTeW50aGVzaXNTdHls
ZSA9IDB4MiwKKyAgICBGb250U3ludGhlc2lzU21hbGxDYXBzID0gMHg0Cit9OworLy8gRklYTUU6
IFVzZSBPcHRpb25TZXQuCit0eXBlZGVmIHVuc2lnbmVkIEZvbnRTeW50aGVzaXM7Citjb25zdCB1
bnNpZ25lZCBGb250U3ludGhlc2lzV2lkdGggPSAzOworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50
TGlnYXR1cmVzIDogdWludDhfdCB7IE5vcm1hbCwgWWVzLCBObyB9OworZW51bSBjbGFzcyBGb250
VmFyaWFudFBvc2l0aW9uIDogdWludDhfdCB7IE5vcm1hbCwgU3Vic2NyaXB0LCBTdXBlcnNjcmlw
dCB9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50Q2FwcyA6IHVpbnQ4X3QgeworICAgIE5vcm1h
bCwKKyAgICBTbWFsbCwKKyAgICBBbGxTbWFsbCwKKyAgICBQZXRpdGUsCisgICAgQWxsUGV0aXRl
LAorICAgIFVuaWNhc2UsCisgICAgVGl0bGluZworfTsKKworZW51bSBjbGFzcyBGb250VmFyaWFu
dE51bWVyaWNGaWd1cmUgOiB1aW50OF90IHsKKyAgICBOb3JtYWwsCisgICAgTGluaW5nTnVtYmVy
cywKKyAgICBPbGRTdHlsZU51bWJlcnMKK307CisKK2VudW0gY2xhc3MgRm9udFZhcmlhbnROdW1l
cmljU3BhY2luZyA6IHVpbnQ4X3QgeworICAgIE5vcm1hbCwKKyAgICBQcm9wb3J0aW9uYWxOdW1i
ZXJzLAorICAgIFRhYnVsYXJOdW1iZXJzCit9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50TnVt
ZXJpY0ZyYWN0aW9uIDogdWludDhfdCB7CisgICAgTm9ybWFsLAorICAgIERpYWdvbmFsRnJhY3Rp
b25zLAorICAgIFN0YWNrZWRGcmFjdGlvbnMKK307CisKK2VudW0gY2xhc3MgRm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbCA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OworZW51bSBjbGFzcyBGb250VmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybyA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OworZW51bSBjbGFz
cyBGb250VmFyaWFudEFsdGVybmF0ZXMgOiBib29sIHsgTm9ybWFsLCBIaXN0b3JpY2FsRm9ybXMg
fTsKKworZW51bSBjbGFzcyBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiB1aW50OF90IHsK
KyAgICBOb3JtYWwsCisgICAgSmlzNzgsCisgICAgSmlzODMsCisgICAgSmlzOTAsCisgICAgSmlz
MDQsCisgICAgU2ltcGxpZmllZCwKKyAgICBUcmFkaXRpb25hbAorfTsKKworZW51bSBjbGFzcyBG
b250VmFyaWFudEVhc3RBc2lhbldpZHRoIDogdWludDhfdCB7CisgICAgTm9ybWFsLAorICAgIEZ1
bGwsCisgICAgUHJvcG9ydGlvbmFsCit9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieSA6IHVpbnQ4X3QgeworICAgIE5vcm1hbCwKKyAgICBZZXMKK307CisKK3N0cnVjdCBG
b250VmFyaWFudFNldHRpbmdzIHsKKyAgICBGb250VmFyaWFudFNldHRpbmdzKCkKKyAgICAgICAg
OiBjb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKKyAgICAgICAg
LCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpCisg
ICAgICAgICwgaGlzdG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KQorICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpO
b3JtYWwpCisgICAgICAgICwgcG9zaXRpb24oRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsKQor
ICAgICAgICAsIGNhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCisgICAgICAgICwgbnVtZXJp
Y0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbCkKKyAgICAgICAgLCBudW1l
cmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpCisgICAgICAgICwg
bnVtZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpCisgICAg
ICAgICwgbnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsKQor
ICAgICAgICAsIG51bWVyaWNTbGFzaGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
bzo6Tm9ybWFsKQorICAgICAgICAsIGFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpO
b3JtYWwpCisgICAgICAgICwgZWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ6Ok5vcm1hbCkKKyAgICAgICAgLCBlYXN0QXNpYW5XaWR0aChGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoOjpOb3JtYWwpCisgICAgICAgICwgZWFzdEFzaWFuUnVieShGb250VmFyaWFudEVh
c3RBc2lhblJ1Ynk6Ok5vcm1hbCkKKyAgICB7CisgICAgfQorCisgICAgRm9udFZhcmlhbnRTZXR0
aW5ncygKKyAgICAgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVzLAorICAg
ICAgICBGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAg
ICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAorICAgICAgICBGb250
VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcywKKyAgICAgICAgRm9udFZhcmlh
bnRQb3NpdGlvbiBwb3NpdGlvbiwKKyAgICAgICAgRm9udFZhcmlhbnRDYXBzIGNhcHMsCisgICAg
ICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBudW1lcmljRmlndXJlLAorICAgICAgICBGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nIG51bWVyaWNTcGFjaW5nLAorICAgICAgICBGb250VmFyaWFu
dE51bWVyaWNGcmFjdGlvbiBudW1lcmljRnJhY3Rpb24sCisgICAgICAgIEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWwgbnVtZXJpY09yZGluYWwsCisgICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvIG51bWVyaWNTbGFzaGVkWmVybywKKyAgICAgICAgRm9udFZhcmlhbnRBbHRlcm5h
dGVzIGFsdGVybmF0ZXMsCisgICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCBlYXN0
QXNpYW5WYXJpYW50LAorICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIGVhc3RBc2lh
bldpZHRoLAorICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgZWFzdEFzaWFuUnVieSkK
KyAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVzKGNvbW1vbkxpZ2F0dXJlcykKKyAgICAgICAg
ICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKQorICAg
ICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVzKGhpc3RvcmljYWxMaWdhdHVyZXMpCisgICAg
ICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKGNvbnRleHR1YWxBbHRlcm5hdGVzKQorICAg
ICAgICAgICAgLCBwb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgICAgICwgY2FwcyhjYXBzKQor
ICAgICAgICAgICAgLCBudW1lcmljRmlndXJlKG51bWVyaWNGaWd1cmUpCisgICAgICAgICAgICAs
IG51bWVyaWNTcGFjaW5nKG51bWVyaWNTcGFjaW5nKQorICAgICAgICAgICAgLCBudW1lcmljRnJh
Y3Rpb24obnVtZXJpY0ZyYWN0aW9uKQorICAgICAgICAgICAgLCBudW1lcmljT3JkaW5hbChudW1l
cmljT3JkaW5hbCkKKyAgICAgICAgICAgICwgbnVtZXJpY1NsYXNoZWRaZXJvKG51bWVyaWNTbGFz
aGVkWmVybykKKyAgICAgICAgICAgICwgYWx0ZXJuYXRlcyhhbHRlcm5hdGVzKQorICAgICAgICAg
ICAgLCBlYXN0QXNpYW5WYXJpYW50KGVhc3RBc2lhblZhcmlhbnQpCisgICAgICAgICAgICAsIGVh
c3RBc2lhbldpZHRoKGVhc3RBc2lhbldpZHRoKQorICAgICAgICAgICAgLCBlYXN0QXNpYW5SdWJ5
KGVhc3RBc2lhblJ1YnkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNBbGxOb3JtYWwoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm9ybWFsCisgICAgICAgICAgICAmJiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
ID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKKyAgICAgICAgICAgICYmIGhpc3Rvcmlj
YWxMaWdhdHVyZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbAorICAgICAgICAgICAg
JiYgY29udGV4dHVhbEFsdGVybmF0ZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbAor
ICAgICAgICAgICAgJiYgcG9zaXRpb24gPT0gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBjYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsCisgICAgICAgICAg
ICAmJiBudW1lcmljRmlndXJlID09IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBudW1lcmljU3BhY2luZyA9PSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpOb3JtYWwKKyAgICAgICAgICAgICYmIG51bWVyaWNGcmFjdGlvbiA9PSBGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbjo6Tm9ybWFsCisgICAgICAgICAgICAmJiBudW1lcmljT3JkaW5hbCA9PSBG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwKKyAgICAgICAgICAgICYmIG51bWVyaWNT
bGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsCisgICAg
ICAgICAgICAmJiBhbHRlcm5hdGVzID09IEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBlYXN0QXNpYW5WYXJpYW50ID09IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6Tm9ybWFsCisgICAgICAgICAgICAmJiBlYXN0QXNpYW5XaWR0aCA9PSBGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWwKKyAgICAgICAgICAgICYmIGVhc3RBc2lhblJ1YnkgPT0g
Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBvdGhlci5jb21tb25MaWdhdHVyZXMKKyAg
ICAgICAgICAgICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPT0gb3RoZXIuZGlzY3JldGlvbmFy
eUxpZ2F0dXJlcworICAgICAgICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBvdGhlci5o
aXN0b3JpY2FsTGlnYXR1cmVzCisgICAgICAgICAgICAmJiBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9
PSBvdGhlci5jb250ZXh0dWFsQWx0ZXJuYXRlcworICAgICAgICAgICAgJiYgcG9zaXRpb24gPT0g
b3RoZXIucG9zaXRpb24KKyAgICAgICAgICAgICYmIGNhcHMgPT0gb3RoZXIuY2FwcworICAgICAg
ICAgICAgJiYgbnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5udW1lcmljRmlndXJlCisgICAgICAgICAg
ICAmJiBudW1lcmljU3BhY2luZyA9PSBvdGhlci5udW1lcmljU3BhY2luZworICAgICAgICAgICAg
JiYgbnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm51bWVyaWNGcmFjdGlvbgorICAgICAgICAgICAg
JiYgbnVtZXJpY09yZGluYWwgPT0gb3RoZXIubnVtZXJpY09yZGluYWwKKyAgICAgICAgICAgICYm
IG51bWVyaWNTbGFzaGVkWmVybyA9PSBvdGhlci5udW1lcmljU2xhc2hlZFplcm8KKyAgICAgICAg
ICAgICYmIGFsdGVybmF0ZXMgPT0gb3RoZXIuYWx0ZXJuYXRlcworICAgICAgICAgICAgJiYgZWFz
dEFzaWFuVmFyaWFudCA9PSBvdGhlci5lYXN0QXNpYW5WYXJpYW50CisgICAgICAgICAgICAmJiBl
YXN0QXNpYW5XaWR0aCA9PSBvdGhlci5lYXN0QXNpYW5XaWR0aAorICAgICAgICAgICAgJiYgZWFz
dEFzaWFuUnVieSA9PSBvdGhlci5lYXN0QXNpYW5SdWJ5OworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIHVuc2lnbmVkIHVuaXF1ZVZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29tbW9uTGlnYXR1
cmVzKSA8PCAyNgorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlzY3JldGlv
bmFyeUxpZ2F0dXJlcykgPDwgMjQKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGhpc3RvcmljYWxMaWdhdHVyZXMpIDw8IDIyCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjb250ZXh0dWFsQWx0ZXJuYXRlcykgPDwgMjAKKyAgICAgICAgICAgIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8PCAxOAorICAgICAgICAgICAgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oY2FwcykgPDwgMTUKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG51bWVyaWNGaWd1cmUpIDw8IDEzCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihudW1lcmljU3BhY2luZykgPDwgMTEKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG51bWVyaWNGcmFjdGlvbikgPDwgOQorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obnVtZXJpY09yZGluYWwpIDw8IDgKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG51bWVyaWNTbGFzaGVkWmVybykgPDwgNworICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oYWx0ZXJuYXRlcykgPDwgNgorICAgICAgICAgICAgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZWFzdEFzaWFuVmFyaWFudCkgPDwgMworICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZWFzdEFzaWFuV2lkdGgpIDw8IDEKKyAgICAgICAgICAgIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGVhc3RBc2lhblJ1YnkpIDw8IDA7CisgICAgfQorCisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0dGlu
Z3M+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICAvLyBGSVhNRTogdGhpcyB3b3VsZCBiZSBtdWNo
IG1vcmUgY29tcGFjdCB3aXRoIGJpdGZpZWxkcy4KKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBj
b21tb25MaWdhdHVyZXM7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlczsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzOwor
ICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOworICAgIEZvbnRW
YXJpYW50UG9zaXRpb24gcG9zaXRpb247CisgICAgRm9udFZhcmlhbnRDYXBzIGNhcHM7CisgICAg
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlIG51bWVyaWNGaWd1cmU7CisgICAgRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZyBudW1lcmljU3BhY2luZzsKKyAgICBGb250VmFyaWFudE51bWVyaWNGcmFj
dGlvbiBudW1lcmljRnJhY3Rpb247CisgICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCBudW1l
cmljT3JkaW5hbDsKKyAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBudW1lcmljU2xh
c2hlZFplcm87CisgICAgRm9udFZhcmlhbnRBbHRlcm5hdGVzIGFsdGVybmF0ZXM7CisgICAgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IGVhc3RBc2lhblZhcmlhbnQ7CisgICAgRm9udFZhcmlh
bnRFYXN0QXNpYW5XaWR0aCBlYXN0QXNpYW5XaWR0aDsKKyAgICBGb250VmFyaWFudEVhc3RBc2lh
blJ1YnkgZWFzdEFzaWFuUnVieTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZvbnRWYXJpYW50U2V0dGluZ3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVzOworICAgIGVuY29kZXIgPDwgZGlzY3JldGlv
bmFyeUxpZ2F0dXJlczsKKyAgICBlbmNvZGVyIDw8IGhpc3RvcmljYWxMaWdhdHVyZXM7CisgICAg
ZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAgICBlbmNvZGVyIDw8IHBvc2l0aW9u
OworICAgIGVuY29kZXIgPDwgY2FwczsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNGaWd1cmU7Cisg
ICAgZW5jb2RlciA8PCBudW1lcmljU3BhY2luZzsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNGcmFj
dGlvbjsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNPcmRpbmFsOworICAgIGVuY29kZXIgPDwgbnVt
ZXJpY1NsYXNoZWRaZXJvOworICAgIGVuY29kZXIgPDwgYWx0ZXJuYXRlczsKKyAgICBlbmNvZGVy
IDw8IGVhc3RBc2lhblZhcmlhbnQ7CisgICAgZW5jb2RlciA8PCBlYXN0QXNpYW5XaWR0aDsKKyAg
ICBlbmNvZGVyIDw8IGVhc3RBc2lhblJ1Ynk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0dGluZ3M+IEZvbnRWYXJpYW50U2V0dGluZ3M6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnRMaWdhdHVyZXM+IGNvbW1vbkxpZ2F0dXJlczsKKyAgICBkZWNvZGVyID4+IGNvbW1vbkxpZ2F0
dXJlczsKKyAgICBpZiAoIWNvbW1vbkxpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGRpc2NyZXRp
b25hcnlMaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwor
ICAgIGlmICghZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGhpc3Rvcmlj
YWxMaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBoaXN0b3JpY2FsTGlnYXR1cmVzOworICAgIGlm
ICghaGlzdG9yaWNhbExpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGNvbnRleHR1YWxBbHRlcm5h
dGVzOworICAgIGRlY29kZXIgPj4gY29udGV4dHVhbEFsdGVybmF0ZXM7CisgICAgaWYgKCFjb250
ZXh0dWFsQWx0ZXJuYXRlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRQb3NpdGlvbj4gcG9zaXRpb247CisgICAgZGVjb2RlciA+
PiBwb3NpdGlvbjsKKyAgICBpZiAoIXBvc2l0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudENhcHM+IGNhcHM7CisgICAgZGVj
b2RlciA+PiBjYXBzOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiBudW1lcmlj
RmlndXJlOworICAgIGRlY29kZXIgPj4gbnVtZXJpY0ZpZ3VyZTsKKyAgICBpZiAoIW51bWVyaWNG
aWd1cmUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IG51bWVyaWNTcGFjaW5nOworICAgIGRlY29kZXIg
Pj4gbnVtZXJpY1NwYWNpbmc7CisgICAgaWYgKCFudW1lcmljU3BhY2luZykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb24+IG51bWVyaWNGcmFjdGlvbjsKKyAgICBkZWNvZGVyID4+IG51bWVyaWNGcmFjdGlv
bjsKKyAgICBpZiAoIW51bWVyaWNGcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4gbnVtZXJp
Y09yZGluYWw7CisgICAgZGVjb2RlciA+PiBudW1lcmljT3JkaW5hbDsKKyAgICBpZiAoIW51bWVy
aWNPcmRpbmFsKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gbnVtZXJpY1NsYXNoZWRaZXJvOwor
ICAgIGRlY29kZXIgPj4gbnVtZXJpY1NsYXNoZWRaZXJvOworICAgIGlmICghbnVtZXJpY1NsYXNo
ZWRaZXJvKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxGb250VmFyaWFudEFsdGVybmF0ZXM+IGFsdGVybmF0ZXM7CisgICAgZGVjb2RlciA+PiBhbHRl
cm5hdGVzOworICAgIGlmICghYWx0ZXJuYXRlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiBlYXN0
QXNpYW5WYXJpYW50OworICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuVmFyaWFudDsKKyAgICBpZiAo
IWVhc3RBc2lhblZhcmlhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IGVhc3RBc2lhbldpZHRoOwor
ICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuV2lkdGg7CisgICAgaWYgKCFlYXN0QXNpYW5XaWR0aCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5PiBlYXN0QXNpYW5SdWJ5OworICAgIGRlY29kZXIgPj4gZWFzdEFz
aWFuUnVieTsKKyAgICBpZiAoIWVhc3RBc2lhblJ1YnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4geyB7CisgICAgICAgICpjb21tb25MaWdhdHVyZXMsCisgICAg
ICAgICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAgICAqaGlzdG9yaWNhbExpZ2F0dXJl
cywKKyAgICAgICAgKmNvbnRleHR1YWxBbHRlcm5hdGVzLAorICAgICAgICAqcG9zaXRpb24sCisg
ICAgICAgICpjYXBzLAorICAgICAgICAqbnVtZXJpY0ZpZ3VyZSwKKyAgICAgICAgKm51bWVyaWNT
cGFjaW5nLAorICAgICAgICAqbnVtZXJpY0ZyYWN0aW9uLAorICAgICAgICAqbnVtZXJpY09yZGlu
YWwsCisgICAgICAgICpudW1lcmljU2xhc2hlZFplcm8sCisgICAgICAgICphbHRlcm5hdGVzLAor
ICAgICAgICAqZWFzdEFzaWFuVmFyaWFudCwKKyAgICAgICAgKmVhc3RBc2lhbldpZHRoLAorICAg
ICAgICAqZWFzdEFzaWFuUnVieQorICAgIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50TGln
YXR1cmVzVmFsdWVzIHsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcygKKyAgICAgICAg
Rm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFu
dExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFudExp
Z2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFudExpZ2F0dXJl
cyBjb250ZXh0dWFsQWx0ZXJuYXRlcykKKyAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVzKGNv
bW1vbkxpZ2F0dXJlcykKKyAgICAgICAgICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhkaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzKQorICAgICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVzKGhp
c3RvcmljYWxMaWdhdHVyZXMpCisgICAgICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKGNv
bnRleHR1YWxBbHRlcm5hdGVzKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM+
IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb21tb25MaWdh
dHVyZXM7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsK
KyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzOworICAgIEZvbnRW
YXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOworfTsKKwordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVzOwor
ICAgIGVuY29kZXIgPDwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKKyAgICBlbmNvZGVyIDw8IGhp
c3RvcmljYWxMaWdhdHVyZXM7CisgICAgZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRlczsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRM
aWdhdHVyZXNWYWx1ZXM+IEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBj
b21tb25MaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBjb21tb25MaWdhdHVyZXM7CisgICAgaWYg
KCFjb21tb25MaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
OworICAgIGRlY29kZXIgPj4gZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKKyAgICBpZiAoIWRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBoaXN0b3JpY2FsTGlnYXR1cmVzOwor
ICAgIGRlY29kZXIgPj4gaGlzdG9yaWNhbExpZ2F0dXJlczsKKyAgICBpZiAoIWhpc3RvcmljYWxM
aWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBjb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAgICBkZWNv
ZGVyID4+IGNvbnRleHR1YWxBbHRlcm5hdGVzOworICAgIGlmICghY29udGV4dHVhbEFsdGVybmF0
ZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpjb21t
b25MaWdhdHVyZXMsICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLCAqaGlzdG9yaWNhbExpZ2F0dXJl
cywgKmNvbnRleHR1YWxBbHRlcm5hdGVzIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50TnVt
ZXJpY1ZhbHVlcyB7CisgICAgRm9udFZhcmlhbnROdW1lcmljVmFsdWVzKAorICAgICAgICBGb250
VmFyaWFudE51bWVyaWNGaWd1cmUgZmlndXJlLAorICAgICAgICBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nIHNwYWNpbmcsCisgICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZyYWN0
aW9uLAorICAgICAgICBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGluYWwsCisgICAgICAg
IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvKQorICAgICAgICAgICAg
OiBmaWd1cmUoZmlndXJlKQorICAgICAgICAgICAgLCBzcGFjaW5nKHNwYWNpbmcpCisgICAgICAg
ICAgICAsIGZyYWN0aW9uKGZyYWN0aW9uKQorICAgICAgICAgICAgLCBvcmRpbmFsKG9yZGluYWwp
CisgICAgICAgICAgICAsIHNsYXNoZWRaZXJvKHNsYXNoZWRaZXJvKQorICAgIHsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZh
cmlhbnROdW1lcmljVmFsdWVzPiBkZWNvZGUoRGVjb2RlciYpOworCisgICAgRm9udFZhcmlhbnRO
dW1lcmljRmlndXJlIGZpZ3VyZTsKKyAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNp
bmc7CisgICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb247CisgICAgRm9udFZh
cmlhbnROdW1lcmljT3JkaW5hbCBvcmRpbmFsOworICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvIHNsYXNoZWRaZXJvOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQg
Rm9udFZhcmlhbnROdW1lcmljVmFsdWVzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IGZpZ3VyZTsKKyAgICBlbmNvZGVyIDw8IHNwYWNpbmc7CisgICAg
ZW5jb2RlciA8PCBmcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IG9yZGluYWw7CisgICAgZW5jb2Rl
ciA8PCBzbGFzaGVkWmVybzsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljVmFsdWVzPiBGb250VmFyaWFudE51bWVyaWNWYWx1ZXM6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnROdW1lcmljRmlndXJlPiBmaWd1cmU7CisgICAgZGVjb2RlciA+PiBmaWd1cmU7CisgICAgaWYg
KCFmaWd1cmUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IHNwYWNpbmc7CisgICAgZGVjb2RlciA+PiBz
cGFjaW5nOworICAgIGlmICghc3BhY2luZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IGZyYWN0aW9u
OworICAgIGRlY29kZXIgPj4gZnJhY3Rpb247CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1l
cmljT3JkaW5hbD4gb3JkaW5hbDsKKyAgICBkZWNvZGVyID4+IG9yZGluYWw7CisgICAgaWYgKCFv
cmRpbmFsKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gc2xhc2hlZFplcm87CisgICAgZGVjb2Rl
ciA+PiBzbGFzaGVkWmVybzsKKyAgICBpZiAoIXNsYXNoZWRaZXJvKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqZmlndXJlLCAqc3BhY2luZywgKmZyYWN0
aW9uLCAqb3JkaW5hbCwgKnNsYXNoZWRaZXJvIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50
RWFzdEFzaWFuVmFsdWVzIHsKKyAgICBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcygKKyAgICAg
ICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQsCisgICAgICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGggd2lkdGgsCisgICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eSBydWJ5KQorICAgICAgICAgICAgOiB2YXJpYW50KHZhcmlhbnQpCisgICAgICAgICAgICAsIHdp
ZHRoKHdpZHRoKQorICAgICAgICAgICAgLCBydWJ5KHJ1YnkpCisgICAgeworICAgIH0KKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFu
dEVhc3RBc2lhblZhbHVlcz4gZGVjb2RlKERlY29kZXImKTsKKworICAgIEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudCB2YXJpYW50OworICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggd2lk
dGg7CisgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1Ynk7Cit9OworCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlczo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB2YXJpYW50OworICAgIGVu
Y29kZXIgPDwgd2lkdGg7CisgICAgZW5jb2RlciA8PCBydWJ5OworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcz4gRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2YXJpYW50OworICAg
IGRlY29kZXIgPj4gdmFyaWFudDsKKyAgICBpZiAoIXZhcmlhbnQpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lk
dGg+IHdpZHRoOworICAgIGRlY29kZXIgPj4gd2lkdGg7CisgICAgaWYgKCF3aWR0aCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRF
YXN0QXNpYW5SdWJ5PiBydWJ5OworICAgIGRlY29kZXIgPj4gcnVieTsKKyAgICBpZiAoIXJ1Ynkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICp2YXJpYW50
LCAqd2lkdGgsICpydWJ5IH0gfTsKK30KKworZW51bSBjbGFzcyBGb250V2lkdGhWYXJpYW50IDog
dWludDhfdCB7CisgICAgUmVndWxhcldpZHRoLAorICAgIEhhbGZXaWR0aCwKKyAgICBUaGlyZFdp
ZHRoLAorICAgIFF1YXJ0ZXJXaWR0aCwKKyAgICBMYXN0Rm9udFdpZHRoVmFyaWFudCA9IFF1YXJ0
ZXJXaWR0aAorfTsKKworY29uc3QgdW5zaWduZWQgRm9udFdpZHRoVmFyaWFudFdpZHRoID0gMjsK
KworQ09NUElMRV9BU1NFUlQoIShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFdpZHRoVmFyaWFu
dDo6TGFzdEZvbnRXaWR0aFZhcmlhbnQpID4+IEZvbnRXaWR0aFZhcmlhbnRXaWR0aCksIEZvbnRX
aWR0aFZhcmlhbnRXaWR0aF9pc19jb3JyZWN0KTsKKworZW51bSBjbGFzcyBGb250U21hbGxDYXBz
IDogdWludDhfdCB7CisgICAgT2ZmID0gMCwKKyAgICBPbiA9IDEKK307CisKK2VudW0gY2xhc3Mg
S2VybmluZyA6IHVpbnQ4X3QgeworICAgIEF1dG8sCisgICAgTm9ybWFsLAorICAgIE5vU2hpZnQK
K307CisKK2VudW0gY2xhc3MgRm9udE9wdGljYWxTaXppbmcgOiB1aW50OF90IHsKKyAgICBFbmFi
bGVkLAorICAgIERpc2FibGVkCit9OworCisvLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5
cG9ncmFwaHkvb3RzcGVjL2Z2YXIuaHRtI1ZBVAorZW51bSBjbGFzcyBGb250U3R5bGVBeGlzIDog
dWludDhfdCB7CisgICAgc2xudCwKKyAgICBpdGFsCit9OworCitlbnVtIGNsYXNzIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzCit9OworCit9CisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6VGV4
dFJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBB
TDo6VGV4dFJlbmRlcmluZ01vZGUsCisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1Rl
eHRSZW5kZXJpbmcsCisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVlZCwK
KyAgICBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHksCisgICAgUEFM
OjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uCisgICAgPjsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250U21vb3RoaW5nTW9kZT4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZSwK
KyAgICBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nLAorICAgIFBBTDo6Rm9u
dFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nLAorICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGU6
OkFudGlhbGlhc2VkLAorICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFs
aWFzZWQsCisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZworICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udE9yaWVudGF0aW9u
PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRPcmllbnRh
dGlvbiwKKyAgICBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwKKyAgICBQQUw6OkZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiwKKyAgICBQ
QUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkLAorICAgIFBBTDo6Tm9uQ0pLR2x5cGhP
cmllbnRhdGlvbjo6VXByaWdodAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMsCisgICAgUEFMOjpGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6
OlllcywKKyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObworICAgID47Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbj4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudFBvc2l0
aW9uLAorICAgIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsLAorICAgIFBBTDo6Rm9u
dFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0LAorICAgIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlv
bjo6U3VwZXJzY3JpcHQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxQQUw6OkZvbnRWYXJpYW50Q2Fwcz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CisgICAgUEFMOjpGb250VmFyaWFudENhcHMsCisgICAgUEFMOjpGb250VmFyaWFudENhcHM6Ok5v
cm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGwsCisgICAgUEFMOjpGb250VmFy
aWFudENhcHM6OkFsbFNtYWxsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGUsCisg
ICAgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50
Q2Fwczo6VW5pY2FzZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZworICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljRmlndXJlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZv
bnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3Vy
ZTo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1i
ZXJzLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnMK
KyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZywKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6
OlByb3BvcnRpb25hbE51bWJlcnMsCisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpUYWJ1bGFyTnVtYmVycworICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24sCisgICAg
UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zLAorICAgIFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnMKKyAgICA+OworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+
IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1h
bCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllcworICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xh
c2hlZFplcm8+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9u
dFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8sCisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFpl
cm86OlllcworICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6
Rm9udFZhcmlhbnRBbHRlcm5hdGVzPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcywKKyAgICBQQUw6OkZvbnRWYXJpYW50QWx0
ZXJuYXRlczo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3Jp
Y2FsRm9ybXMKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQsCisgICAgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6SmlzNzgsCisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ6OkppczgzLAorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5
MCwKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQsCisgICAgUEFM
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQsCisgICAgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsLAorICAgIFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aCwKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCwKKyAgICBQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGwsCisgICAgUEFMOjpGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynks
CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCwKKyAgICBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8UEFMOjpGb250V2lkdGhWYXJpYW50PiB7CisgICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQsCisgICAgUEFMOjpGb250
V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsCisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50OjpI
YWxmV2lkdGgsCisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoLAorICAgIFBB
TDo6Rm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250U21hbGxDYXBzPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRTbWFsbENhcHMsCisgICAgUEFMOjpGb250
U21hbGxDYXBzOjpPZmYsCisgICAgUEFMOjpGb250U21hbGxDYXBzOjpPbgorICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6S2VybmluZz4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpLZXJuaW5nLAorICAgIFBBTDo6S2Vybmlu
Zzo6QXV0bywKKyAgICBQQUw6Oktlcm5pbmc6Ok5vcm1hbCwKKyAgICBQQUw6Oktlcm5pbmc6Ok5v
U2hpZnQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZv
bnRPcHRpY2FsU2l6aW5nPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQ
QUw6OkZvbnRPcHRpY2FsU2l6aW5nLAorICAgIFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVuYWJs
ZWQsCisgICAgUEFMOjpGb250T3B0aWNhbFNpemluZzo6RGlzYWJsZWQKKyAgICA+OworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRTdHlsZUF4aXM+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFN0eWxlQXhpcywKKyAgICBQ
QUw6OkZvbnRTdHlsZUF4aXM6OnNsbnQsCisgICAgUEFMOjpGb250U3R5bGVBeGlzOjppdGFsCisg
ICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFM
OjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cywKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZv
bnRzOjpObywKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMKKyAgICA+Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvVW5pY29kZUJpZGkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9Vbmlj
b2RlQmlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmODE5OGVhMWIxNDY5ZWEyZjdiMWE0YmZmOWYyOWY5Njcw
MGU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5p
Y29kZUJpZGkuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBQQUwgeworCitl
bnVtIEVVbmljb2RlQmlkaSB7CisgICAgVUJOb3JtYWwsCisgICAgRW1iZWQsCisgICAgT3ZlcnJp
ZGUsCisgICAgSXNvbGF0ZSwKKyAgICBQbGFpbnRleHQsCisgICAgSXNvbGF0ZU92ZXJyaWRlLAor
fTsgCisKK2lubGluZSBib29sIGlzSXNvbGF0ZWQoY29uc3QgRVVuaWNvZGVCaWRpJiB1bmljb2Rl
QmlkaSkKK3sKKyAgICByZXR1cm4gdW5pY29kZUJpZGkgPT0gSXNvbGF0ZSB8fCB1bmljb2RlQmlk
aSA9PSBJc29sYXRlT3ZlcnJpZGUgfHwgdW5pY29kZUJpZGkgPT0gUGxhaW50ZXh0OworfQorCitp
bmxpbmUgYm9vbCBpc092ZXJyaWRlKEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3sKKyAgICBy
ZXR1cm4gdW5pY29kZUJpZGkgPT0gT3ZlcnJpZGUgfHwgdW5pY29kZUJpZGkgPT0gSXNvbGF0ZU92
ZXJyaWRlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQv
V3JpdGluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9Xcml0aW5nTW9kZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmYjdjZTc1ZTcyYjU5M2I1NTVkM2RkMGNjYjEwMjAyNjE4MGQxZGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvV3JpdGluZ01vZGUu
aApAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dERpcmVjdGlv
bi5oIgorI2luY2x1ZGUgPGFycmF5PgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBX
cml0aW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIFRvcFRvQm90dG9tID0gMCwgLy8gaG9yaXpvbnRh
bC10YgorICAgIEJvdHRvbVRvVG9wID0gMSwgLy8gaG9yaXpvbnRhbC1idAorICAgIExlZnRUb1Jp
Z2h0ID0gMiwgLy8gdmVydGljYWwtbHIKKyAgICBSaWdodFRvTGVmdCA9IDMsIC8vIHZlcnRpY2Fs
LXJsCit9OworCitjb25zdGV4cHIgdW5zaWduZWQgbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3cml0aW5nTW9kZSkgPDwgMSB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihkaXJlY3Rpb24pOworfQorCisvLyBEZWZpbmUgdGhlIHRleHQgZmxvdyBpbiB0
ZXJtcyBvZiB0aGUgd3JpdGluZyBtb2RlIGFuZCB0aGUgdGV4dCBkaXJlY3Rpb24uIFRoZSBmaXJz
dAorLy8gcGFydCBpcyB0aGUgbGluZSBncm93aW5nIGRpcmVjdGlvbiBhbmQgdGhlIHNlY29uZCBw
YXJ0IGlzIHRoZSBibG9jayBncm93aW5nIGRpcmVjdGlvbi4KK2VudW0gVGV4dEZsb3cgeworICAg
IElubGluZUVhc3RCbG9ja1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b20sIFRleHREaXJlY3Rpb246OkxUUiksCisgICAgSW5saW5lV2VzdEJsb2Nr
U291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSwg
VGV4dERpcmVjdGlvbjo6UlRMKSwKKyAgICBJbmxpbmVFYXN0QmxvY2tOb3J0aCA9IG1ha2VUZXh0
Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wLCBUZXh0RGlyZWN0aW9uOjpM
VFIpLAorICAgIElubGluZVdlc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihX
cml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRleHREaXJlY3Rpb246OlJUTCksCisgICAgSW5saW5l
U291dGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0
VG9SaWdodCwgVGV4dERpcmVjdGlvbjo6TFRSKSwKKyAgICBJbmxpbmVTb3V0aEJsb2NrV2VzdCA9
IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBUZXh0RGly
ZWN0aW9uOjpSVEwpLAorICAgIElubGluZU5vcnRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5p
dGFsaXplcihXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFRleHREaXJlY3Rpb246OkxUUiksCisg
ICAgSW5saW5lTm9ydGhCbG9ja1dlc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVjdGlvbjo6UlRMKQorfTsKKworY29uc3RleHByIGlu
bGluZSBUZXh0RmxvdyBtYWtlVGV4dEZsb3coV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Rmxvdz4o
bWFrZVRleHRGbG93SW5pdGFsaXplcih3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSk7Cit9CisKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBUZXh0Rmxvd1JldmVyc2VkTWFzayA9IDE7Citjb25zdGV4cHIgdW5z
aWduZWQgVGV4dEZsb3dGbGlwcGVkTWFzayA9IDI7Citjb25zdGV4cHIgdW5zaWduZWQgVGV4dEZs
b3dWZXJ0aWNhbE1hc2sgPSA0OworCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNSZXZlcnNlZFRl
eHRGbG93KFRleHRGbG93IHRleHRmbG93KQoreworICAgIHJldHVybiB0ZXh0ZmxvdyAmIFRleHRG
bG93UmV2ZXJzZWRNYXNrOworfQorCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNGbGlwcGVkVGV4
dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCit7CisgICAgcmV0dXJuIHRleHRmbG93ICYgVGV4dEZs
b3dGbGlwcGVkTWFzazsKK30KKworY29uc3RleHByIGlubGluZSBib29sIGlzVmVydGljYWxUZXh0
RmxvdyhUZXh0RmxvdyB0ZXh0ZmxvdykKK3sKKyAgICByZXR1cm4gdGV4dGZsb3cgJiBUZXh0Rmxv
d1ZlcnRpY2FsTWFzazsKK30KKworY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBlZExpbmVz
VGV4dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCit7CisgICAgcmV0dXJuIGlzRmxpcHBlZFRleHRG
bG93KHRleHRmbG93KSAhPSBpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpOworfQorCisvLyBM
aW5lcyBoYXZlIHZlcnRpY2FsIG9yaWVudGF0aW9uOyBtb2RlcyB2ZXJ0aWNhbC1sciBvciB2ZXJ0
aWNhbC1ybC4KK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzVmVydGljYWxUZXh0Rmxvdyht
YWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb246OkxUUikpOworfQorCisvLyBC
bG9jayBwcm9ncmVzc2lvbiBpbmNyZWFzZXMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byBu
b3JtYWw7IG1vZGVzIHZlcnRpY2FsLXJsIG9yIGhvcml6b250YWwtYnQuCitjb25zdGV4cHIgaW5s
aW5lIGJvb2wgaXNGbGlwcGVkV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7
CisgICAgcmV0dXJuIGlzRmxpcHBlZFRleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbjo6TFRSKSk7Cit9CisKKy8vIExpbmVzIGhhdmUgaG9yaXpvbnRhbCBvcmll
bnRhdGlvbjsgbW9kZXMgaG9yaXpvbnRhbC10YiBvciBob3Jpem9udGFsLWJ0LgorY29uc3RleHBy
IGlubGluZSBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQoreworICAgIHJldHVybiAhaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsK
K30KKworLy8gQm90dG9tIG9mIHRoZSBsaW5lIG9jY3VycyBlYXJsaWVyIGluIHRoZSBibG9jazsg
bW9kZXMgdmVydGljYWwtbHIgb3IgaG9yaXpvbnRhbC1idC4KK2NvbnN0ZXhwciBpbmxpbmUgYm9v
bCBpc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorewor
ICAgIHJldHVybiBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9k
ZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Cit9CisKK2VudW0gY2xhc3MgTG9naWNhbEJveFNpZGUg
OiB1aW50OF90IHsKKyAgICBCbG9ja1N0YXJ0LAorICAgIElubGluZUVuZCwKKyAgICBCbG9ja0Vu
ZCwKKyAgICBJbmxpbmVTdGFydAorfTsKKworZW51bSBjbGFzcyBCb3hTaWRlIDogdWludDhfdCB7
CisgICAgVG9wLAorICAgIFJpZ2h0LAorICAgIEJvdHRvbSwKKyAgICBMZWZ0Cit9OworCitlbnVt
IGNsYXNzIExvZ2ljYWxCb3hDb3JuZXIgOiB1aW50OF90IHsKKyAgICBTdGFydFN0YXJ0LAorICAg
IFN0YXJ0RW5kLAorICAgIEVuZFN0YXJ0LAorICAgIEVuZEVuZAorfTsKKworLy8gVGhlIG1hcHBp
bmcgaXMgd2l0aCB0aGUgZmlyc3Qgc3RhcnQvZW5kIGdpdmluZyB0aGUgYmxvY2sgYXhpcyBzaWRl
LAorLy8gYW5kIHRoZSBzZWNvbmQgdGhlIGlubGluZS1heGlzIHNpZGUsIGkuZS4gcGF0dGVybmVk
IGFzICdib3JkZXItYmxvY2staW5saW5lLXJhZGl1cycuCitlbnVtIGNsYXNzIEJveENvcm5lciA6
IHVpbnQ4X3QgeworICAgIFRvcExlZnQsCisgICAgVG9wUmlnaHQsCisgICAgQm90dG9tUmlnaHQs
CisgICAgQm90dG9tTGVmdAorfTsKKworZW51bSBjbGFzcyBMb2dpY2FsQm94QXhpcyA6IHVpbnQ4
X3QgeworICAgIElubGluZSwKKyAgICBCbG9jaworfTsKKworZW51bSBjbGFzcyBCb3hBeGlzIDog
dWludDhfdCB7CisgICAgSG9yaXpvbnRhbCwKKyAgICBWZXJ0aWNhbAorfTsKKworY29uc3RleHBy
IHN0ZDo6YXJyYXk8Qm94U2lkZSwgND4gYWxsQm94U2lkZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94
U2lkZTo6UmlnaHQsIEJveFNpZGU6OkJvdHRvbSwgQm94U2lkZTo6TGVmdCB9OworCitjb25zdGV4
cHIgaW5saW5lIGJvb2wgaXNIb3Jpem9udGFsUGh5c2ljYWxTaWRlKEJveFNpZGUgcGh5c2ljYWxT
aWRlKQoreworICAgIHJldHVybiBwaHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6TGVmdCB8fCBwaHlz
aWNhbFNpZGUgPT0gQm94U2lkZTo6UmlnaHQ7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lk
ZSBtaXJyb3JQaHlzaWNhbFNpZGUoQm94U2lkZSBwaHlzaWNhbFNpZGUpCit7CisgICAgLy8gdG9w
IDwtPiBib3R0b20gYW5kIGxlZnQgPC0+IHJpZ2h0IGNvbnZlcnNpb24KKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Qm94U2lkZT4oKHN0YXRpY19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIDIpICUg
NCk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSByb3RhdGVQaHlzaWNhbFNpZGUoQm94
U2lkZSBwaHlzaWNhbFNpZGUpCit7CisgICAgLy8gdG9wIDwtPiBsZWZ0IGFuZCByaWdodCA8LT4g
Ym90dG9tIGNvbnZlcnNpb24KKyAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFs
UGh5c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJveFNp
ZGU+KChzdGF0aWNfY2FzdDxpbnQ+KHBoeXNpY2FsU2lkZSkgKyAoaG9yaXpvbnRhbFNpZGUgPyAx
IDogMykpICUgNCk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lk
ZVRvUGh5c2ljYWxTaWRlKFRleHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94U2lkZSBsb2dpY2Fs
U2lkZSkKK3sKKyAgICBCb3hTaWRlIHBoeXNpY2FsU2lkZSA9IHN0YXRpY19jYXN0PEJveFNpZGU+
KGxvZ2ljYWxTaWRlKTsKKyAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFsUGh5
c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7CisKKyAgICBpZiAoaXNWZXJ0aWNhbFRleHRGbG93KHRl
eHRmbG93KSkKKyAgICAgICAgcGh5c2ljYWxTaWRlID0gcm90YXRlUGh5c2ljYWxTaWRlKHBoeXNp
Y2FsU2lkZSk7CisKKyAgICBpZiAoKGhvcml6b250YWxTaWRlICYmIGlzUmV2ZXJzZWRUZXh0Rmxv
dyh0ZXh0ZmxvdykpIHx8ICghaG9yaXpvbnRhbFNpZGUgJiYgaXNGbGlwcGVkVGV4dEZsb3codGV4
dGZsb3cpKSkKKyAgICAgICAgcGh5c2ljYWxTaWRlID0gbWlycm9yUGh5c2ljYWxTaWRlKHBoeXNp
Y2FsU2lkZSk7CisKKyAgICByZXR1cm4gcGh5c2ljYWxTaWRlOworfQorCitjb25zdGV4cHIgaW5s
aW5lIEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgTG9naWNhbEJveFNpZGUgbG9naWNhbFNpZGUpCit7CisgICAgLy8gU2V0IHRoZSBk
aXJlY3Rpb24gc3VjaCB0aGF0IHNpZGUgaXMgbWlycm9yZWQgaWYgaXNGbGlwcGVkV3JpdGluZ01v
ZGUoKSBpcyB0cnVlCisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBpc0ZsaXBwZWRXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9u
OjpMVFI7CisgICAgcmV0dXJuIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRG
bG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBsb2dpY2FsU2lkZSk7Cit9CisKK2NvbnN0ZXhw
ciBpbmxpbmUgQm94Q29ybmVyIG1hcExvZ2ljYWxDb3JuZXJUb1BoeXNpY2FsQ29ybmVyKFRleHRG
bG93IHRleHRmbG93LCBMb2dpY2FsQm94Q29ybmVyIGxvZ2ljYWxCb3hDb3JuZXIpCit7CisgICAg
Ym9vbCBpc0Jsb2NrU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6
OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94Q29ybmVyOjpTdGFy
dEVuZDsKKyAgICBib29sIGlzSW5saW5lU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2lj
YWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94
Q29ybmVyOjpFbmRTdGFydDsKKyAgICBpZiAoaXNCbG9ja1N0YXJ0ID09IGlzRmxpcHBlZFRleHRG
bG93KHRleHRmbG93KSkgeworICAgICAgICBpZiAoaXNJbmxpbmVTdGFydCA9PSBpc1JldmVyc2Vk
VGV4dEZsb3codGV4dGZsb3cpKQorICAgICAgICAgICAgcmV0dXJuIEJveENvcm5lcjo6Qm90dG9t
UmlnaHQ7CisgICAgfSBlbHNlIGlmIChpc0lubGluZVN0YXJ0ICE9IGlzUmV2ZXJzZWRUZXh0Rmxv
dyh0ZXh0ZmxvdykpCisgICAgICAgIHJldHVybiBCb3hDb3JuZXI6OlRvcExlZnQ7CisgICAgaWYg
KGlzQmxvY2tTdGFydCA9PSBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KHRleHRmbG93KSkKKyAgICAg
ICAgcmV0dXJuIEJveENvcm5lcjo6Qm90dG9tTGVmdDsKKyAgICByZXR1cm4gQm94Q29ybmVyOjpU
b3BSaWdodDsKK30KKworY29uc3RleHByIGlubGluZSBCb3hBeGlzIG1hcExvZ2ljYWxBeGlzVG9Q
aHlzaWNhbEF4aXMoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hBeGlzIGxvZ2ljYWxBeGlz
KQoreworICAgIGlmIChpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpKQorICAgICAgICByZXR1
cm4gbG9naWNhbEF4aXMgPT0gTG9naWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6OlZlcnRp
Y2FsIDogQm94QXhpczo6SG9yaXpvbnRhbDsKKyAgICByZXR1cm4gbG9naWNhbEF4aXMgPT0gTG9n
aWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6Okhvcml6b250YWwgOiBCb3hBeGlzOjpWZXJ0
aWNhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzMDc4OWQ5M2MwN2Iw
ZTdjMzAwNGE3M2U3NzQ4OGZkNmFjMjkyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcApAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgi
CisKKyNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RpbnlMUlVDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNV
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+CitjbGFzcyBUaW55TFJVQ2FjaGVQ
b2xpY3k8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4geworcHVibGljOgorICAg
IHN0YXRpYyBUaW55TFJVQ2FjaGU8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4m
IGNhY2hlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55TFJVQ2Fj
aGU8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4+IGNhY2hlOworICAgICAgICBy
ZXR1cm4gY2FjaGU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNLZXlOdWxsKGNvbnN0IEF0
b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gbG9jYWxl
SWRlbnRpZmllci5pc051bGwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGTG9j
YWxlUmVmPiBjcmVhdGVWYWx1ZUZvck51bGxLZXkoKQorICAgIHsKKyAgICAgICAgLy8gQ0YgaHlw
aGVuYXRpb24gZnVuY3Rpb25zIHVzZSBsb2NhbGUgKHJlZ2lvbmFsIGZvcm1hdHMpIGxhbmd1YWdl
LCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoIHByaW1hcnkgVUkgbGFuZ3VhZ2UsCisg
ICAgICAgIC8vIHNvIHdlIGNhbid0IHVzZSBkZWZhdWx0IGxvY2FsZSBoZXJlLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzE0ODk3NjY0Pi4KKyAgICAgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2Nh
bGUgPSBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlZmF1bHRM
YW5ndWFnZSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIENGU3Ry
aW5nSXNIeXBoZW5hdGlvbkF2YWlsYWJsZUZvckxvY2FsZShsb2NhbGUuZ2V0KCkpID8gbG9jYWxl
IDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBj
cmVhdGVWYWx1ZUZvcktleShjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBhZG9wdENGKENGTG9j
YWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGxvY2FsZUlkZW50aWZpZXIuc3RyaW5nKCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworCisgICAgICAgIHJldHVybiBDRlN0cmluZ0lzSHlw
aGVuYXRpb25BdmFpbGFibGVGb3JMb2NhbGUobG9jYWxlLmdldCgpKSA/IGxvY2FsZSA6IG51bGxw
dHI7CisgICAgfQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgY3JlYXRlS2V5Rm9yU3RvcmFnZShj
b25zdCBBdG9tU3RyaW5nJiBrZXkpIHsgcmV0dXJuIGtleTsgfQorfTsKK30KKworbmFtZXNwYWNl
IFBBTCB7CisKK2Jvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50
aWZpZXIpCit7CisgICAgcmV0dXJuIFRpbnlMUlVDYWNoZVBvbGljeTxBdG9tU3RyaW5nLCBSZXRh
aW5QdHI8Q0ZMb2NhbGVSZWY+Pjo6Y2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7Cit9CisK
K3NpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyB0ZXh0LCBzaXplX3QgYmVmb3Jl
SW5kZXgsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCit7CisgICAgUmV0YWlu
UHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBUaW55TFJVQ2FjaGVQb2xpY3k8QXRvbVN0cmluZywg
UmV0YWluUHRyPENGTG9jYWxlUmVmPj46OmNhY2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZpZXIpOwor
CisgICAgQ0ZPcHRpb25GbGFncyBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmllcyA9IDE7CisgICAg
Q0ZJbmRleCByZXN1bHQgPSBDRlN0cmluZ0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZvcmVJbmRl
eCh0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSwgYmVmb3JlSW5kZXgs
IENGUmFuZ2VNYWtlKDAsIHRleHQubGVuZ3RoKCkpLCBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmll
cywgbG9jYWxlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0ID09IGtDRk5vdEZv
dW5kID8gMCA6IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MTA2OGMzYzg4NGNiOWFiZjI0YWI4MTI3ZTVmMzBhZTMwNDJkMGRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpAQCAt
MCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRleHRCb3VuZGFy
aWVzLmgiCisKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQgPENvcmVGb3VuZGF0
aW9uL0NGU3RyaW5nVG9rZW5pemVyLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKyNpbXBvcnQgPHVuaWNvZGUvdWJyay5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgor
I2ltcG9ydCA8dW5pY29kZS91c3RyaW5nLmg+CisjaW1wb3J0IDx1bmljb2RlL3V0eXBlcy5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVmlldy5o
PgorI2ltcG9ydCA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KKyNpbXBvcnQgPHd0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaD4KKyNpbXBvcnQgPHd0Zi91bmljb2Rl
L0NoYXJhY3Rlck5hbWVzLmg+CisKK25hbWVzcGFjZSBQQUwgeworCisjaWYgIVVTRShBUFBLSVQp
CisKK3N0YXRpYyBib29sIGlzU2tpcENoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJu
IGMgPT0gMHhBMCB8fCBjID09ICdcbicgfHwgYyA9PSAnLicgfHwgYyA9PSAnLCcgfHwgYyA9PSAn
IScgIHx8IGMgPT0gJz8nIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IHVfaXNzcGFjZShjKTsK
K30KKworc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAg
ICByZXR1cm4gYyA9PSAweEEwIHx8IGMgPT0gJ1xuJyB8fCB1X2lzc3BhY2UoYyk7Cit9CisKK3N0
YXRpYyBib29sIGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIC8v
IEFtcGVyc2FuZCBpcyBhbiBleGNlcHRpb24gYWRkZWQgdG8gdHJlYXQgQVQmVCBhcyBhIHNpbmds
ZSB3b3JkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjIyNjQ+KS4KKyAgICByZXR1cm4gIUNGQ2hh
cmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5l
ZChrQ0ZDaGFyYWN0ZXJTZXRBbHBoYU51bWVyaWMpLCBjKSAmJiBjICE9ICcmJzsKK30KKworc3Rh
dGljIGJvb2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIHJldHVybiBDRkNo
YXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihDRkNoYXJhY3RlclNldEdldFByZWRlZmlu
ZWQoa0NGQ2hhcmFjdGVyU2V0U3ltYm9sKSwgYyk7Cit9CisKK3N0YXRpYyBib29sIGlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhlc2Ug
YXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNh
biBhcHBlYXIgd2l0aGluIHdvcmRzLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBj
aGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJy
ZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKK30KKworc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVm
IHRva2VuaXplckZvclN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCit7CisgICAgc3RhdGljIGF1dG8g
bG9jYWxlID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAgICAgICAgY29uc3QgY2hhciogbG9j
YWxJRCA9IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpOworICAgICAgICBhdXRvIGN1cnJlbnRM
b2NhbGVJRCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGxvY2FsSUQpLCBzdHJs
ZW4obG9jYWxJRCksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0b3JO
dWxsKSk7CisgICAgICAgIHJldHVybiBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGN1cnJlbnRMb2NhbGVJRC5nZXQoKSkpOworICAgIH0oKSk7CisKKyAgICBpZiAo
IWxvY2FsZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDRlJhbmdlIGVu
dGlyZVJhbmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSk7ICAgIAor
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1Rva2VuaXplclJl
Zj4+IHRva2VuaXplcjsKKyAgICBpZiAoIXRva2VuaXplci5nZXQoKSkKKyAgICAgICAgdG9rZW5p
emVyLmdldCgpID0gYWRvcHRDRihDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBzdHIsIGVudGlyZVJhbmdlLCBrQ0ZTdHJpbmdUb2tlbml6ZXJVbml0V29yZEJvdW5k
YXJ5LCBsb2NhbGUuZ2V0KCkuZ2V0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIENGU3RyaW5nVG9r
ZW5pemVyU2V0U3RyaW5nKHRva2VuaXplci5nZXQoKS5nZXQoKSwgc3RyLCBlbnRpcmVSYW5nZSk7
CisgICAgcmV0dXJuIHRva2VuaXplci5nZXQoKS5nZXQoKTsKK30KKworLy8gU2ltcGxlIGNhc2U6
IEEgd29yZCBpcyBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzIGRlbGltaXRlZCBieSBhIHNwZWNpYWwg
c2V0IG9mIHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgorc3RhdGljIHZvaWQgZmluZFNpbXBs
ZVdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwg
aW50KiBlbmQpCit7CisgICAgQVNTRVJUKHBvc2l0aW9uID49IDApOworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSk7CisKKyAgICB1bnNp
Z25lZCBzdGFydFBvcyA9IHBvc2l0aW9uOworICAgIHdoaWxlIChzdGFydFBvcyA+IDApIHsKKyAg
ICAgICAgaW50IGkgPSBzdGFydFBvczsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVT
dGFydFBvczsKKyAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVmb3JlU3Rh
cnRQb3MpOworICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJC
ZWZvcmVTdGFydFBvcykpIHsKKyAgICAgICAgICAgIEFTU0VSVChpID49IDApOworICAgICAgICAg
ICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIWlz
QW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3MpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckJlZm9y
ZUJlZm9yZVN0YXJ0UG9zOworICAgICAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFj
dGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpOworICAgICAgICAgICAgaWYgKGlzV29yZERlbGltaXRp
bmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFUxNl9CQUNLXzEodGV4dCwgMCwgc3RhcnRQ
b3MpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBlbmRQb3MgPSBwb3NpdGlvbjsKKyAgICB3
aGlsZSAoZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3Rl
cjsKKyAgICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJh
Y3Rlcik7CisgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBlbmRQb3M7CisgICAgICAgICAgICBVMTZfRldE
XzEodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8PSB0ZXh0
Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChpID09IHRleHQubGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyRW5kUG9z
OworICAgICAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSwgY2hhcmFjdGVy
QWZ0ZXJFbmRQb3MpOworICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFj
dGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
aXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRlckVuZFBvcykpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBv
cywgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgLy8gVGhlIHRleHQgbWF5IGNvbnNpc3Qg
b2YgYWxsIGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3IgYSBzZXJpZXMg
b2YgZW1vamkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCisgICAgLy8gbWFrZXMgbm8g
c2Vuc2UgKGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KCkgYmVoYXZp
b3IpLgorICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgdGV4dC5sZW5ndGgo
KSkgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgVTE2X0dFVCh0ZXh0LCAw
LCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChpc1N5bWJv
bENoYXJhY3RlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBv
cywgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgKnN0YXJ0ID0gc3RhcnRQb3M7CisgICAg
KmVuZCA9IGVuZFBvczsKK30KKworLy8gQ29tcGxleCBjYXNlOiB1c2UgQ0ZTdHJpbmdUb2tlbml6
ZXIgdG8gZmluZCB3b3JkIGJvdW5kYXJ5Lgorc3RhdGljIHZvaWQgZmluZENvbXBsZXhXb3JkQm91
bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2hhclN0cmluZyA9IHRleHQuY3JlYXRl
Q0ZTdHJpbmdXaXRob3V0Q29weWluZygpOworCisgICAgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYgdG9r
ZW5pemVyID0gdG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcuZ2V0KCkpOworICAgIGlmICgh
dG9rZW5pemVyKSB7CisgICAgICAgIC8vIEVycm9yIGNyZWF0aW5nIHRva2VuaXplciwgc28ganVz
dCB1c2Ugc2ltcGxlIGZ1bmN0aW9uLgorICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KHRl
eHQsIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IENGU3RyaW5nVG9rZW5pemVyVG9rZW5UeXBlIHRva2VuID0gQ0ZTdHJpbmdUb2tlbml6ZXJHb1Rv
VG9rZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOworICAgIGlmICh0b2tlbiA9PSBrQ0ZT
dHJpbmdUb2tlbml6ZXJUb2tlbk5vbmUpIHsKKyAgICAgICAgLy8gTm8gdG9rZW4gZm91bmQ6IHNl
bGVjdCBlbnRpcmUgYmxvY2suCisgICAgICAgIC8vIE5COiBJIG5ldmVyIGhpdCB0aGlzIHNlY3Rp
b24gaW4gYWxsIG15IHRlc3RpbmcuCisgICAgICAgICpzdGFydCA9IDA7CisgICAgICAgICplbmQg
PSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0ZSYW5nZSBy
ZXN1bHQgPSBDRlN0cmluZ1Rva2VuaXplckdldEN1cnJlbnRUb2tlblJhbmdlKHRva2VuaXplcik7
CisgICAgKnN0YXJ0ID0gcmVzdWx0LmxvY2F0aW9uOworICAgICplbmQgPSByZXN1bHQubG9jYXRp
b24gKyByZXN1bHQubGVuZ3RoOworfQorCisjZW5kaWYKKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5
KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sK
KyNpZiBVU0UoQVBQS0lUKQorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuY3JlYXRlTlNTdHJp
bmdXaXRob3V0Q29weWluZygpLmdldCgpXSk7CisgICAgTlNSYW5nZSByYW5nZSA9IFthdHRyaWJ1
dGVkU3RyaW5nIGRvdWJsZUNsaWNrQXRJbmRleDpzdGQ6Om1pbjx1bnNpZ25lZD4ocG9zaXRpb24s
IHRleHQubGVuZ3RoKCkgLSAxKV07CisgICAgKnN0YXJ0ID0gcmFuZ2UubG9jYXRpb247CisgICAg
KmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOworI2Vsc2UKKyAgICB1bnNpZ25l
ZCBwb3MgPSBwb3NpdGlvbjsKKyAgICBpZiAocG9zID09IHRleHQubGVuZ3RoKCkgJiYgcG9zKQor
ICAgICAgICAtLXBvczsKKworICAgIC8vIEZvciBjb21wbGV4IHRleHQgKFRoYWksIEphcGFuZXNl
LCBDaGluZXNlKSwgdmlzaWJsZV91bml0cyB3aWxsIHBhc3MgdGhlIHRleHQgaW4gYXMgYSAKKyAg
ICAvLyBzaW5nbGUgY29udGlndW91cyBydW4gb2YgY2hhcmFjdGVycywgcHJvdmlkaW5nIGFzIG11
Y2ggY29udGV4dCBhcyBpcyBwb3NzaWJsZS4KKyAgICAvLyBXZSBvbmx5IG5lZWQgb25lIGNoYXJh
Y3RlciB0byBkZXRlcm1pbmUgaWYgdGhlIHRleHQgaXMgY29tcGxleC4KKyAgICBVQ2hhcjMyIGNo
OworICAgIHVuc2lnbmVkIGkgPSBwb3M7CisgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5n
dGgoKSwgY2gpOworICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJv
dW5kYXJ5KGNoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGltcHJvdmVzIG91ciB3b3Jk
IGJvdW5kYXJ5IGJlaGF2aW9yLCBidXQgZG9lc24ndCBhY3R1YWxseSBnbyBmYXIgZW5vdWdoLgor
ICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODg1Mzk1MT4gVGFrZSBjb21wbGV4IHdvcmQgYm91
bmRhcnkgZmluZGluZyBwYXRoIHdoZW4gbmVjZXNzYXJ5CisgICAgaWYgKCFpc0NvbXBsZXgpIHsK
KyAgICAgICAgLy8gQ2hlY2sgYWdhaW4gZm9yIGNvbXBsZXggdGV4dCwgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBydW4uCisgICAgICAgIGkgPSAwOworICAgICAgICBVMTZfTkVYVCh0ZXh0LCBpLCB0ZXh0
Lmxlbmd0aCgpLCBjaCk7CisgICAgICAgIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZvcldv
cmRCb3VuZGFyeShjaCk7CisgICAgfQorCisgICAgaWYgKGlzQ29tcGxleCkKKyAgICAgICAgZmlu
ZENvbXBsZXhXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOworICAgIGVs
c2UKKyAgICAgICAgZmluZFNpbXBsZVdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgc3RhcnQs
IGVuZCk7CisKKyNkZWZpbmUgTE9HX1dPUkRfQlJFQUsgMAorI2lmIExPR19XT1JEX0JSRUFLCisg
ICAgYXV0byB1bmlTdHJpbmcgPSB0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKTsK
KyAgICBhdXRvIGZvdW5kV29yZCA9IHRleHQuc3Vic3RyaW5nKCpzdGFydCwgKmVuZCAtICpzdGFy
dCkuY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5TTG9nKEAiJXNfQlJFQUsg
JyVAJyAoJWQsJWQpIGluICclQCcgKCVwKSBhdCAlZCwgbGVuZ3RoPSVkIiwgaXNDb21wbGV4ID8g
IkNPTVBMRVgiIDogIlNJTVBMRSIsIGZvdW5kV29yZC5nZXQoKSwgKnN0YXJ0LCAqZW5kLCB1bmlT
dHJpbmcuZ2V0KCksIHVuaVN0cmluZy5nZXQoKSwgcG9zaXRpb24sIHRleHQubGVuZ3RoKCkpOwor
I2VuZGlmCisgICAgCisjZW5kaWYKK30KKwordm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmlu
Z1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKK3sKKyAgICBpbnQgc3RhcnQ7Cisg
ICAgZmluZFdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgJnN0YXJ0LCBlbmQpOworfQorCitp
bnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBi
b29sIGZvcndhcmQpCit7ICAgCisjaWYgVVNFKEFQUEtJVCkKKyAgICBTdHJpbmcgdGV4dFdpdGhv
dXRVbnBhaXJlZFN1cnJvZ2F0ZXM7CisgICAgaWYgKGhhc1VucGFpcmVkU3Vycm9nYXRlKHRleHQp
KSB7CisgICAgICAgIHRleHRXaXRob3V0VW5wYWlyZWRTdXJyb2dhdGVzID0gcmVwbGFjZVVucGFp
cmVkU3Vycm9nYXRlc1dpdGhSZXBsYWNlbWVudENoYXJhY3Rlcih0ZXh0LnRvU3RyaW5nV2l0aG91
dENvcHlpbmcoKSk7CisgICAgICAgIHRleHQgPSB0ZXh0V2l0aG91dFVucGFpcmVkU3Vycm9nYXRl
czsKKyAgICB9CisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5jcmVhdGVOU1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkuZ2V0KCldKTsKKyAgICByZXR1cm4gW2F0dHJpYnV0ZWRTdHJpbmcgbmV4dFdv
cmRGcm9tSW5kZXg6cG9zaXRpb24gZm9yd2FyZDpmb3J3YXJkXTsKKyNlbHNlCisgICAgLy8gVGhp
cyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBub24taVBob25lIHZl
cnNpb24sIGJ1dCBpdCB3b3JrcworICAgIC8vIGZvciB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQg
aXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJlIHdpbGwgYmUKKyAgICAvLyB0dW5l
ZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBrZXlib2Fy
ZCBhbmQgdGV4dCBlZGl0aW5nLgorICAgIGludCBwb3MgPSBwb3NpdGlvbjsKKyAgICBVQnJlYWtJ
dGVyYXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKKyAgICBpZiAoYm91
bmRhcnkpIHsKKyAgICAgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICBwb3MgPSB1YnJrX2ZvbGxvd2luZyhib3VuZGFyeSwgcG9zKTsKKyAgICAgICAg
ICAgICAgICBpZiAocG9zID09IFVCUktfRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgcG9zID0g
dGV4dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwb3MpIDwgdGV4dC5sZW5ndGgoKSAmJiAoIXBvcyB8fCAhaXNTa2lwQ2hhcmFjdGVyKHRleHRb
cG9zIC0gMV0pKSAmJiBpc1NraXBDaGFyYWN0ZXIodGV4dFtwb3NdKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcG9zID0gdWJya19wcmVjZWRp
bmcoYm91bmRhcnksIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBVQlJLX0RPTkUp
CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICB9IHdoaWxlIChwb3Mg
PiAwICYmIGlzU2tpcENoYXJhY3Rlcih0ZXh0W3Bvc10pICYmICFpc1doaXRlc3BhY2VDaGFyYWN0
ZXIodGV4dFtwb3MgLSAxXSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwb3M7Cisj
ZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiNjczNjg5ZTBi
MjkwMGY3ZjZmNTYyNTE1MDhmMThhMzE0MjNiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbQpAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXh0Q2hlY2tp
bmcuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitOU1RleHRDaGVja2luZ1R5cGVzIG5zVGV4dENo
ZWNraW5nVHlwZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHR5cGVzKQoreworICAgIE5T
VGV4dENoZWNraW5nVHlwZXMgbWFzayA9IDA7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRD
aGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKKyAgICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5
cGVTcGVsbGluZzsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3Jh
bW1hcikpCisgICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAgICBp
ZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpCisgICAgICAgIG1hc2sg
fD0gTlNUZXh0Q2hlY2tpbmdUeXBlTGluazsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENo
ZWNraW5nVHlwZTo6UXVvdGUpKQorICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZVF1
b3RlOworICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkKKyAg
ICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5cGVEYXNoOworICAgIGlmICh0eXBlcy5jb250
YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpCisgICAgICAgIG1hc2sgfD0gTlNU
ZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pKQorICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5n
VHlwZUNvcnJlY3Rpb247CisgICAgcmV0dXJuIG1hc2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBB
TAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA3YWY1ZWI0Nzc3
NDYxYjNlNGM3MmM1ZTczMWVjZGEwMTRmOTczODU5Li43NDRkY2MzYTVmM2QxNDAyMWJhMTJhYzAw
NTFkYzE3NWViMGY2YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjIzNiwxNCArMjIzNiw5IEBAIHBs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRl
bWVudC5jcHAKIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5jcHAK
IHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKLXBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwCi1wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcAogcGxhdGZvcm0vdGV4
dC9FbmNvZGluZ1RhYmxlcy5jcHAKIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5n
LmNwcAogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKLXBsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmNwcAotcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCi1wbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3Bw
CiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggM2Y1YjYyZjM3NjNmY2Y0YjJiODQw
NjYyZWRmYjM1MWZiYTEzN2FmNi4uM2E2YzA3ZmZlYzFjNmY4ZTMzOTc4YzU3ZTJhOWYwOWRiYmNj
Y2JlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01ODksMTIgKzU4OSw5IEBAIHBsYXRm
b3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbQogcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRp
bGl0aWVzLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVzcG9uc2UubW0KLXBs
YXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIHBsYXRmb3JtL3RleHQvY29jb2EvTG9j
YWxlQ29jb2EubW0KIHBsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCiBw
bGF0Zm9ybS90ZXh0L2lvcy9UZXh0RW5jb2RpbmdSZWdpc3RyeUlPUy5tbQotcGxhdGZvcm0vdGV4
dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0KLXBsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2luZ01h
Yy5tbQogcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KIHBsYXRm
b3JtL3hyL2NvY29hL1BsYXRmb3JtWFJDb2NvYS5tbQogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29j
b2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2MGU0Mjg4Mzk3NTY4ZDQ1MGQxMmYxODViOGY2ZmVhNjA2NjRlMTc4Li4yMmJm
MjdhZTY3NDUwMzE0OTFkZDVkMTU5ZjJlYTc0ZTZmZDlhODJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MzgsNyArNDM4LDYg
QEAKIAkJMTQyMDExQjcwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMDExQjUw
QTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MkI5N0NBMTMxMzg5NDMwMDhC
RUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M4MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDMyRTg0NzBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMyRTg0
NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0NzZBQTgxNURDNEJCMTAwMzA1REIyIC8q
IFdyaXRpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ3NkFBNzE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0
MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNr
RGF0YS5oICovOyB9OwogCQkxNDc3RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogQmFja0ZvcndhcmRD
YWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDc5RkFFRTEwOUFFMzc1MDBE
RUQ2NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ3OUZBRTYxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCAqLzsg
fTsKQEAgLTEwMjUsMTQgKzEwMjQsMTIgQEAKIAkJMzcyRDNFNTQyMTY1NzhBRTAwQzVFMDIxIC8q
IERhdGFVUkxEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEEwMDc4MjFCODIwRUM4MDAyQzVBNkUgLyogRGF0YVVSTERlY29kZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzJEM0U1NTIx
NjU3OEFFMDBDNUUwMjEgLyogU2NyaXB0TW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzg4Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyog
U2NyaXB0TW9kdWxlTG9hZGVyLmggKi87IH07CiAJCTM3MkQzRTU3MjE2NTc4QUUwMEM1RTAyMSAv
KiBOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTdEODQ2MjYxRkU4OTVGODAwQ0EzNjgyIC8qIE5hdmlnYXRvckNyZWRl
bnRpYWxzLmggKi87IH07Ci0JCTM3NUNEMjMyMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc1Q0Qy
MzExMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi87IH07CiAJCTM3NzRBQkE1MEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RF
OSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzkxOUMyNDBCN0QxODg2MDBBNTY5OTggLyogUG9z
aXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkzNzkyOTE3QTE5ODVFRjM5MDBG
NEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3OTI5MTc4MTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3
OTI5MTdFMTk4NzY3OEYwMEY0QjY2MSAvKiBDcmVkZW50aWFsQ29jb2EuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTI5MTdDMTk4NzY3OEYwMEY0QjY2
MSAvKiBDcmVkZW50aWFsQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkzNzk5MTk5NzEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3Jt
YXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTkx
OTk1MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovOyB9OwogCQkzNzk5MTlC
MjEyMDBERTUwMDBFQTA0MUMgLyogbGliei5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTkxOUIxMTIwMERFNTAwMEVBMDQxQyAvKiBsaWJ6
LmR5bGliICovOyB9OwotCQkzNzlFMzcxNzEzNzM2QTY2MDBCOUU5MTkgLyogUXVvdGVkUHJpbnRh
YmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzlF
MzcxNTEzNzM2QTY2MDBCOUU5MTkgLyogUXVvdGVkUHJpbnRhYmxlLmggKi87IH07CiAJCTM3OUU2
MUNBMTI2Q0E1QzQwMEI2M0U4RCAvKiBCYXNlQnV0dG9uSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzlFNjFDNjEyNkNBNUMzMDBCNjNF
OEQgLyogQmFzZUJ1dHRvbklucHV0VHlwZS5oICovOyB9OwogCQkzNzlFNjFDQzEyNkNBNUM0MDBC
NjNFOEQgLyogQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5RTYxQzgxMjZDQTVDMzAwQjYzRThEIC8qIEJhc2VD
aGVja2FibGVJbnB1dFR5cGUuaCAqLzsgfTsKIAkJMzdCQUFFNTgxOTgwRDFERDAwNURGRTcxIC8q
IFByb3RlY3Rpb25TcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzdCQUFFNTcxOTgwRDFERDAwNURGRTcxIC8qIFByb3RlY3Rpb25TcGFjZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzAxLDcg
KzEyOTgsNiBAQAogCQk0NEUzNDlGOTI0NkY0RTE5MDA2ODQ3OUMgLyogTGliV2ViUlRDRW51bVRy
YWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRF
MzQ5RjcyNDZGNERDNzAwNjg0NzlDIC8qIExpYldlYlJUQ0VudW1UcmFpdHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NTBDRUJGMTE1MDczQkJF
MDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJs
ZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0NTEyNTAyMzE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MTI1MDIxMTVEQ0Uz
N0QwMDJGODRFMiAvKiBTcGluQnV0dG9uRWxlbWVudC5oICovOyB9OwotCQk0NTNFQjYzNzE1OUM1
NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1M0VCNjM1MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGlt
ZUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQ1ODMwRDRFMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4MzBENEMxNjc5
QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2
IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmll
bGQuaCAqLzsgfTsKIAkJNDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNFMTU2RERF
OEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTI5OTksNyArMjk5NSw2IEBACiAJCTkzRjE5QjE3MDgyNDVFNTkw
MDFFOUFCQyAvKiBsaWJpY3Vjb3JlLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMUQzMUEwNTU4Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNv
cmUuZHlsaWIgKi87IH07CiAJCTkzRjFENUJCMTJENTMyQzQwMDgzMkJFQyAvKiBXZWJHTExvc2VD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0YxRDVCODEyRDUzMkM0MDA4MzJCRUMgLyogV2ViR0xMb3NlQ29udGV4dC5oICovOyB9OwogCQk5
M0YxRDVDMTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDVCRjEyRDUzMzU2MDA4
MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggKi87IH07Ci0JCTkzRjJDQzkzMjQyN0ZCOUMw
MDU4NTFEOCAvKiBDaGFyYWN0ZXJSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNGMkNDOTEyNDI3RkI5QTAwNTg1MUQ4IC8qIENoYXJhY3RlclJh
bmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTNGNkI4MUYyNTY3QTA4QzAwQTA4NDg4IC8qIFNwZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJj
ZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
RjZCODFDMjU2NzlGNzAwMEEwODQ4OCAvKiBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2VJ
bXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTNGNkI4MjIyNTY3QTY1NjAwQTA4NDg4IC8qIFNwZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGNkI4
MUIyNTY3OUY2RjAwQTA4NDg4IC8qIFNwZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJjZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjZGMUVF
MTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGNkYxRUIxMjdGNzBCMTAwNTVDQjA2IC8q
IFdlYkdMQ29udGV4dEV2ZW50LmggKi87IH07CkBAIC0zMTc2LDcgKzMxNzEsNiBAQAogCQk5N0JD
ODQ4NDEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDODQ4MjEyMzZGRDkzMDAwQzYx
NjEgLyogVGV4dERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTk3QkM4NDlCMTIzNzBBNEIwMDBD
NjE2MSAvKiBIVE1MSW5wdXRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3QkM4NDlBMTIzNzBBNEIwMDBDNjE2MSAvKiBIVE1MSW5wdXRTdHJl
YW0uaCAqLzsgfTsKIAkJOTdCQzg0QjQxMjM3MTE4MDAwMEM2MTYxIC8qIFRleHREb2N1bWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzg0QjIx
MjM3MTE4MDAwMEM2MTYxIC8qIFRleHREb2N1bWVudC5oICovOyB9OwotCQk5N0MwNzg1MDExNjVE
NUJFMDAzQTMyRUYgLyogU3VmZml4VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdDMDc4NEYxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUu
aCAqLzsgfTsKIAkJOTdDNDcxREMxMkY5MjVCRDAwODYzNTRCIC8qIENvbnRlbnRTZWN1cml0eVBv
bGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdD
NDcxREExMkY5MjVCRDAwODYzNTRCIC8qIENvbnRlbnRTZWN1cml0eVBvbGljeS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3RDJBRDA0MTRCODIz
QTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdEMkFEMDIxNEI4MjNBNjAwOTNERjMyIC8qIERPTVdp
bmRvd1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0RDRTIwMDEw
ODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzIxMSw3ICszMjA1LDYgQEAKIAkJOUI1
MzJFQTQxQkE5Mjg1NzAwMzhBODI3IC8qIFNsb3RBc3NpZ25tZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjUzMkVBMjFCQTkyODU3MDAzOEE4Mjcg
LyogU2xvdEFzc2lnbm1lbnQuaCAqLzsgfTsKIAkJOUI2OUQzQjUxQjk4RkZFOTAwRTM1MTJCIC8q
IEhUTUxTbG90RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUI2OUQzQjMxQjk4RkZFOTAwRTM1MTJCIC8qIEhUTUxTbG90RWxlbWVudC5oICov
OyB9OwogCQk5QjY5RDNCOTFCOTkxMDA3MDBFMzUxMkIgLyogSlNIVE1MU2xvdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNjlEM0I3MUI5
OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5oICovOyB9OwotCQk5QjZDNDE1MzEz
NDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2QzQxNTIxMzQ0OTQ5MDAwMDg1QjYyIC8q
IFN0cmluZ1dpdGhEaXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5QjcxNEUyMTFDOTExNjY5MDBBQzBFOTIgLyogRXZlbnRQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjcxNEUxRjFD
OTExNjY5MDBBQzBFOTIgLyogRXZlbnRQYXRoLmggKi87IH07CiAJCTlCNzQyNjA1MjM0QkU5NTYw
MERCNTJFOSAvKiBJZGxlUmVxdWVzdENhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Qjc0MjYwMzIzNEJFOTU2MDBEQjUyRTkgLyogSWRsZVJl
cXVlc3RDYWxsYmFjay5oICovOyB9OwogCQk5Qjc0MjYwQjIzNEJFQTZFMDBEQjUyRTkgLyogSWRs
ZURlYWRsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5Qjc0MjYwODIzNEJFQTZFMDBEQjUyRTkgLyogSWRsZURlYWRsaW5lLmggKi87IH07CkBAIC0z
NDkzLDcgKzM0ODYsNiBAQAogCQlBNjE0OEE3OTEyRTQxRTNCMDA0NEE3ODQgLyogSlNIVE1MS2V5
Z2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTYxNDhBNzcxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuaCAqLzsg
fTsKIAkJQTZEMTY5NjQxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDE2OTYzMTM0NkI0QzEwMDBF
Qjc3MCAvKiBTaGFkb3dSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTZENUE5OUQxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE2RDVBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQTcxNTFCRDgxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1
MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE1RTY1MzEzNEJCQkVDMDBE
OEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jl
c3NTaGFkb3dFbGVtZW50LmggKi87IH07CiAJCUE3MTg3NjBFMEIyQTEyMDEwMEExNkVDRSAvKiBE
cmFnQWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcyM0Y3N0IxNDg0Q0E0QzAw
OEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzIzRjc3QTE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZv
cm1FeHBvcnRNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzUxMSw3ICszNTAzLDYgQEAKIAkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5
IC8qIEltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc3OTc5MTQwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3Nzk3OTI5MEQ2QjlFNjQw
MDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc3OTc5MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmgg
Ki87IH07CiAJCUE3N0I0MUEwMTJFNjc1QTkwMDU0MzQzRCAvKiBUZXh0RXZlbnRJbnB1dFR5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0I0MTlG
MTJFNjc1QTkwMDU0MzQzRCAvKiBUZXh0RXZlbnRJbnB1dFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzdEMDAxMjEzM0IwQUVCMDBENjY1
OEMgLyogVGV4dENoZWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzdEMDAxMTEzM0IwQUVCMDBENjY1OEMgLyogVGV4dENoZWNraW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4RkUxM0Mx
MjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4RkUxM0ExMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxs
Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE3OUJBREEyMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5QkFEOUUxNjFFN0YzRjAwQzJF
NjUyIC8qIFJ1bGVGZWF0dXJlLmggKi87IH07CiAJCUE3OUJBREE0MTYxRTdGM0YwMEMyRTY1MiAv
KiBSdWxlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzlCQURBMDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovOyB9OwpAQCAtMzU5Nyw3
ICszNTg4LDYgQEAKIAkJQTg0RDgyQzExMUQzNDc0ODAwOTcyOTkwIC8qIFNjcmlwdGFibGVEb2N1
bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTg0RDgyQkYxMUQzNDc0ODAwOTcyOTkwIC8qIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5o
ICovOyB9OwogCQlBODRFQkQ4MzBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RUJEODEw
Q0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODUzMTIzRDExRDA0NzFCMDBENEQwNzcg
LyogRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODUzMTIzQzExRDA0NzFCMDBENEQwNzcgLyogRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQTg2M0UyMDExMzQzNDEyMDAwMjc0OTI2IC8qIFVuaWNvZGVCaWRp
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODYzRTIw
MDEzNDM0MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJpZGkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODY2MjlDRjA5REEyQjQ3MDA5NjMzQTUgLyog
SlNVSUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODY2MjlDOTA5REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50LmggKi87IH07CiAJCUE4NjYy
OUQxMDlEQTJCNDgwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U01vdXNlRXZlbnQuaCAqLzsgfTsKIAkJQTg2NjI5RDMwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5
Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTg2NjI5Q0QwOURBMkI0NzAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5oICovOyB9OwpA
QCAtMzYzOCw3ICszNjI4LDYgQEAKIAkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1h
cEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODlDQ0M1MzBGNDRFOTgxMDBCNURB
MTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OUNDQzUxMEY0NEU5ODEwMEI1REExMCAvKiBSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oICovOyB9OwogCQlBOEMyMjhBMTExRDU3MjJFMDBENUE3
RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMjI4OUYxMUQ1NzIyRTAwRDVBN0QzIC8qIERlY29k
ZWREYXRhRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKLQkJQThDNDAyOTMxMzQ4QjIyMjAwNjNGMUU1
IC8qIEJpZGlSdW5MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEM0MDI5MjEzNDhCMjIyMDA2M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBOEM0QTdGRDA5RDU2
MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNEE3RUIwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVs
ZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBOEM0QTgwNzA5RDU2MzI3MDAwM0FDOEQgLyogRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNEE3RjUwOUQ1NjMyNzAwMDNBQzhEIC8q
IEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlBOEM0QTgwQjA5RDU2MzI3MDAwM0FDOEQgLyogQXR0cmlidXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdGOTA5RDU2MzI3MDAwM0FD
OEQgLyogQXR0cmlidXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM4ODcsMTYgKzM4NzYsMTEgQEAKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQy
RjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmggKi87IH07CiAJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyQjFGNzE3MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQjFGNzE1MEQw
MENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCAqLzsgfTsKLQkJQjJDM0RB
MjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlk
aUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlCMkMzREEyNTBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGNDBEMDA2QzFEMDBF
RjZGMjYgLyogQmlkaVJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0Q5RkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyQzNEQTM0MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJD
M0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRDb2RlYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyQzNEQTNDMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNJQ1UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTBDMEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Q29kZWNJQ1UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCMkMzREEzRTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjTGF0
aW4xLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMz
REEwRTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjTGF0aW4xLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNDAwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExMDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVj
VXNlckRlZmluZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCMkMzREE0MjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEyMEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
RmxhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTE1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE0NzBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dEVuY29kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkMzREExNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNDkwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExOTBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dEVuY29kaW5nUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTUw
MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MTE0LDggKzQwOTgsNiBAQAogCQlCQzRBNTMz
MzI1NjA1OTgzMDAyOEM1OTIgLyogSFRNTFBhcnNlclNjcmlwdGluZ0ZsYWdQb2xpY3kuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNEE1MzMyMjU2MDU5
ODMwMDI4QzU5MiAvKiBIVE1MUGFyc2VyU2NyaXB0aW5nRmxhZ1BvbGljeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNEE1MzM1MjU2MDVBNTYw
MDI4QzU5MiAvKiBEYXRhRGV0ZWN0b3JUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzNDI1NjA1QTU2MDAyOEM1OTIgLyogRGF0YURldGVj
dG9yVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDNEE1MzM3MjU2MDVBRTEwMDI4QzU5MiAvKiBTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNEE1MzM2MjU2
MDVBRTEwMDI4QzU5MiAvKiBTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzRBNTMzOTI1NjA2Mzk4MDAyOEM1
OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNEE1MzM4MjU2MDYzOTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5n
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUJDNEE1MzNCMjU2MDY0RTEwMDI4QzU5MiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzQTI1NjA2NEUxMDAyOEM1
OTIgLyogVGV4dERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDNERERDk2MjczRDk0OTkwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVs
UGxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzREREQ4RjI3M0Q4NEU3MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbFBsYXllci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNERERDk3MjczRDk0
QTgwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzREREQ5MTI3M0Q4NEU3MDA2NjBFQkIg
LyogU2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNTExNTZFMTJCMTc0OUMwMEM5Njc1NCAvKiBTY3Jv
bGxBbmltYXRvck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNTExNTZEMTJCMTc0OUMwMEM5Njc1NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSAq
LzsgfTsKQEAgLTQzNTYsNyArNDMzOCw2IEBACiAJCUM1MTM3Q0YzMTFBNTgzNzgwMDRBREI5OSAv
KiBKU0RPTVN0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAq
LzsgfTsKIAkJQzUyMjdERjExQzNDNkRGMTAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjI3REVGMUMzQzZE
RDcwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzU0NDI3NEIxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0
cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzU1OTJGNzgxQTkyQUEyODAw
MUY4ODYyIC8qIENoYXJhY3RlclByb3BlcnRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTkyRjc3MUE5MkFBMjgwMDFGODg2MiAvKiBDaGFyYWN0
ZXJQcm9wZXJ0aWVzLmggKi87IH07CiAJCUM1NzJFRTFGMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lE
QkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovOyB9OwogCQlDNTg1QTY2
MzExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2NjExMUQ0RkFDNTAwNEMzRTRC
IC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlDNTg1QTY4MzExRDRGQjA4MDA0QzNFNEIgLyogSlNJREJEYXRh
YmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4
NUE2NkIxMUQ0RkIwNzAwNEMzRTRCIC8qIEpTSURCRGF0YWJhc2UuaCAqLzsgfTsKQEAgLTY0MzQs
NyArNjQxNSw2IEBACiAJCTBGREE3QzE1MTg4MzIyRUIwMEM5NTRCNSAvKiBKU1RvdWNoTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RvdWNoTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRBN0MxQzE4ODMyMkZDMDBDOTU0QjUgLyogSlNHZXN0
dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHZXN0
dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRBN0MxRDE4ODMy
MkZDMDBDOTU0QjUgLyogSlNHZXN0dXJlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNHZXN0dXJlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEZEQTdDMjAxODgzMkJDQzAwQzk1NEI1IC8qIERhdGVUaW1lRm9ybWF0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQTdDMjIxODgzMzBBOTAwQzk1NEI1IC8qIERyYWdJbWFn
ZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdJbWFn
ZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQTdDMjQxODgzMzMzMjAw
Qzk1NEI1IC8qIEpTV2ViS2l0UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdFBsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRB
N0MyNTE4ODMzMzMyMDBDOTU0QjUgLyogSlNXZWJLaXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0UGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjYxOCw3ICs2NTk4LDYgQEAKIAkJMTQyQjk3QzgxMzEzODk0MzAwOEJFRjRCIC8qIFRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQzMkU4NDYwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBX
cml0aW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0aW5nTW9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5
M0YgLyogSlNDYWxsYmFja0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNDYWxsYmFja0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OUUyODYx
MDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FsbGJhY2tEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhY2tGb3J3YXJkQ2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzExNSw2ICs3MDk0LDcgQEAK
IAkJMUM0RDBERDEyNEQ5RjBEQjAwM0Q3NDk4IC8qIEdseXBoQnVmZmVyTWVtYmVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHbHlwaEJ1ZmZlck1lbWJlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUM0REIwMjQyNzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNob3VsZExvY2FsaXplQXhpc05hbWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDNTBDNDk1MjJDODRGMjQwMEE2RTRCRSAvKiBXSExTTFN0YW5k
YXJkTGlicmFyeUZ1bmN0aW9uTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3RhbmRh
cmRMaWJyYXJ5RnVuY3Rpb25NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QzVDNTgyMzI3NTc4MDM3MDAzQjU0MEQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUM1RTFEQTYyNkY5NDlCOTAwRTA3QUYxIC8qIEZvbnRQYWxldHRl
VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRQYWxldHRlVmFsdWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBG
b250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM2OSw3ICs4MzQ5LDYgQEAKIAkJMzY2MkY5
ODQwNDdDRURCRTVERERBRkFBIC8qIFJlbmRlck1hdGhNTE1lbmNsb3NlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTE1lbmNsb3NlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxMTlBNzkyMENDQjYxMDAwMkM2REM5IC8qIFdl
YktpdFRhcmdldENvbmRpdGlvbmFscy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJn
ZXRDb25kaXRpb25hbHMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
MTdEN0U1MTdFQ0MzQTYwMDNDMjc2RCAvKiBleHRyYWN0LWxvY2FsaXphYmxlLXN0cmluZ3MucGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gImV4dHJhY3QtbG9jYWxpemFibGUtc3RyaW5ncy5wbCI7IHBhdGgg
PSAiU2NyaXB0cy9leHRyYWN0LWxvY2FsaXphYmxlLXN0cmluZ3MucGwiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25D
Ri5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlvbkNG
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVF
REIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VTZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUU2NUNE
MTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBGb250UmFuZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRSYW5nZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTgzODAsOSArODM1OSw3IEBACiAJCTM3MUY1M0U4MEQyNzA0Rjkw
MEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3MkFEQTM3MTk3RjQ3QjkwMEZDNTAxRSAvKiBQcm90ZWN0aW9uU3Bh
Y2VDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm90ZWN0aW9uU3Bh
Y2VDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzJBREEzOTE5N0Y2ODc2
MDBGQzUwMUUgLyogUHJvdGVjdGlvblNwYWNlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQcm90ZWN0aW9uU3BhY2VDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMzcyQzAwQzMxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3VuZGFy
aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3VuZGFy
aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcyQzAwRDgxMjk2MTlGODAw
NUM5NTc1IC8qIEZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbmRPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3NUNEMjMxMTE5
RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIeXBoZW5hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04Mzk1LDggKzgzNzIsNiBAQAogCQkzNzk5MTk5NDEyMDBEREY0MDBFQTA0MUMgLyogV09G
RkZpbGVGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV09G
RkZpbGVGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzk5MTk5NTEy
MDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV09GRkZpbGVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc5OTE5QjExMjAwREU1MDAwRUEwNDFDIC8qIGxpYnouZHlsaWIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGli
IjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VU
cmVlID0gIjxhYnNvbHV0ZT4iOyB9OwotCQkzNzlFMzcxNDEzNzM2QTY2MDBCOUU5MTkgLyogUXVv
dGVkUHJpbnRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1
b3RlZFByaW50YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3OUUzNzE1
MTM3MzZBNjYwMEI5RTkxOSAvKiBRdW90ZWRQcmludGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUXVvdGVkUHJpbnRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3OUU2MUM1MTI2Q0E1QzMwMEI2M0U4RCAvKiBCYXNlQnV0dG9uSW5wdXRUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VCdXR0b25JbnB1dFR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzlFNjFDNjEyNkNBNUMzMDBC
NjNFOEQgLyogQmFzZUJ1dHRvbklucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCYXNlQnV0dG9uSW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3OUU2MUM3MTI2Q0E1QzMwMEI2M0U4RCAvKiBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VDaGVja2FibGVJbnB1
dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTA3Miw3ICs5MDQ3LDYg
QEAKIAkJNDUxMjUwMjAxNURDRTM3RDAwMkY4NEUyIC8qIFNwaW5CdXR0b25FbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwaW5CdXR0b25FbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUxMjUwMjExNURDRTM3RDAwMkY4NEUy
IC8qIFNwaW5CdXR0b25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNwaW5CdXR0b25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MUE0
OUY4Rjg3MjZCRTA3MTUxOEJFMiAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJC
b3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVNPUHJvdGVjdGlv
blN5c3RlbVNwZWNpZmljSGVhZGVyQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDUzRUI2MzUxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVUaW1lRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ1ODMwRDRCMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29u
dHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvc2Ny
b2xsQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1ODMwRDRD
MTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdXRvc2Nyb2xsQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNo
RmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU2Vh
cmNoRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI3MzIsNyArMTI3
MDYsNiBAQAogCQk5M0YxRDVCOTEyRDUzMkM0MDA4MzJCRUMgLyogV2ViR0xMb3NlQ29udGV4dC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xMb3NlQ29udGV4dC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjFENUJFMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdM
TG9zZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTExvc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMUQ1
QkYxMkQ1MzM1NjAwODMyQkVDIC8qIEpTV2ViR0xMb3NlQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMTG9zZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTNGMkNDOTEyNDI3RkI5QTAwNTg1MUQ4IC8qIENoYXJhY3RlclJhbmdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoYXJhY3RlclJhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjZCODFCMjU2NzlGNkYwMEEwODQ4OCAvKiBT
cGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzRjZCODFDMjU2NzlGNzAwMEEwODQ4OCAvKiBTcGVlY2hSZWNvZ25p
dGlvbkNhcHR1cmVTb3VyY2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNwZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJjZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNGNkI4MUQyNTY3OUY3MDAwQTA4NDg4IC8qIFNwZWVjaFJlY29nbml0aW9u
Q2FwdHVyZVNvdXJjZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291cmNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzA5Niw3ICsxMzA2OSw2IEBACiAJCTk3QkM4NDlBMTIzNzBBNEIw
MDBDNjE2MSAvKiBIVE1MSW5wdXRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTElucHV0U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
QkM4NEIxMTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dERvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTdCQzg0QjIxMjM3MTE4MDAwMEM2MTYxIC8qIFRleHREb2N1bWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RG9jdW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTdDMDc4NEYxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZp
eFRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VmZml4VHJlZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0MxRjU1MjEyMjg1NUNCMDBFREU2MTUgLyog
SFRNTFN0YWNrSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MU3Rh
Y2tJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QzFGNTUyMTIyODU1Q0Iw
MEVERTYxNiAvKiBIVE1MVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SFRNTFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QzFGNTUyMTIyODU1
Q0IwMEVERTYxNyAvKiBBdG9tSFRNTFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF0b21IVE1MVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
MjE2LDcgKzEzMTg4LDYgQEAKIAkJOUI2OUQzQjcxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNs
b3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFNsb3RF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkJDOTYwMUI5NzU5NjYw
MDVBRTFGMCAvKiBKU1NoYWRvd1Jvb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTaGFkb3dSb290LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUI2QkM5NjExQjk3NTk2NjAwNUFFMUYwIC8qIEpTU2hhZG93Um9vdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1NoYWRvd1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOUI2QzQxNTIxMzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nV2l0aERpcmVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjcxNEUxRTFDOTExNjY5MDBBQzBFOTIg
LyogRXZlbnRQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2
ZW50UGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNzE0RTFGMUM5MTE2
NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXZlbnRQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNzQyNjAzMjM0
QkU5NTYwMERCNTJFOSAvKiBJZGxlUmVxdWVzdENhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElk
bGVSZXF1ZXN0Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNzcx
LDcgKzEzNzQyLDYgQEAKIAkJQTZEMTY5NjMxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93Um9vdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNkQ1QTk5QTE2MjlENkZGMDAyOTczMzAgLyogU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTZENUE5OUIxNjI5RDcwMDAwMjk3MzMwIC8qIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENo
ZWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNr
ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxNUU2NTAxMzRCQkJF
QzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzE1RTY1MTEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NT
aGFkb3dFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyZXNz
U2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE4NzYwRDBC
MkExMjAxMDBBMTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRHJhZ0FjdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
Nzk5LDcgKzEzNzY5LDYgQEAKIAkJQTc3OTc5MjQwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW1hZ2VEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3OTc5MjUwRDZCOUU2NDAwMzg1
MUI5IC8qIEpTSW1hZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW1hZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0I0MTlGMTJFNjc1
QTkwMDU0MzQzRCAvKiBUZXh0RXZlbnRJbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEV2ZW50SW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNraW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3ODQ5NDFBMEI1RkU1MDcwMDFFMjM3QSAvKiBEYXRhVHJhbnNmZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFUcmFuc2Zlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEZFMTM5MTIzNjZCMTAwMEFDRThE
MCAvKiBTcGVsbENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlbGxDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4RkUx
M0ExMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgZmlsZUVuY29kaW5n
ID0gNDsgcGF0aCA9IFNwZWxsQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTM5ODAsNyArMTM5NDksNiBAQAogCQlBODUzMTIzQzExRDA0NzFCMDBENEQwNzcgLyogRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgbmFtZSA9IFF1YXJ0ekNvcmUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFi
c29sdXRlPiI7IH07CiAJCUE4NUYyMjA4MTQzMDM3N0QwMDdDQzg4NCAvKiBKU1BvcFN0YXRlRXZl
bnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQb3BT
dGF0ZUV2ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTg2M0Uy
MDAxMzQzNDEyMDAwMjc0OTI2IC8qIFVuaWNvZGVCaWRpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuaWNvZGVCaWRpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVUlFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODY2MjlDQTA5REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VJRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01vdXNlRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MDYyLDcgKzE0MDMwLDYgQEAKIAkJQThDMjI4
MEQxMUQ0QTU5NzAwRDVBN0QzIC8qIERvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQThDMjI4OUYxMUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9j
dW1lbnRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2RlZERh
dGFEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEMyMjhB
MDExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThDNDAyOTIxMzQ4QjIyMjAwNjNG
MUU1IC8qIEJpZGlSdW5MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJp
ZGlSdW5MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzRBN0VCMDlENTYz
MjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHlsZWRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZWRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUUwOUQ1NjMyNzAwMDNBQzhEIC8qIE5vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3MDgsMTUgKzE0Njc1LDggQEAKIAkJQjJBRkZDNzUwRDAw
QTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVDb2NvYS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZGQzhDMEQwMEE1REYwMDMwMDc0RCAvKiBU
ZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBUZXh0Qm91bmRhcmllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMUY3
MTQwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMUY3MTUwRDAwQ0FBODAwNEFFQTY0IC8q
IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyQzNEOUYyMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmlkaUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlDb250ZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEOUY0MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRp
UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlSZXNvbHZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzRDlGRTBEMDA2QzFEMDBFRjZG
MjYgLyogU2VnbWVudGVkU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCMkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFy
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREEwOTBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dENvZGVjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
ZXh0Q29kZWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREEwQTBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0Q29kZWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMEIw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjSUNVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0NzI3LDcgKzE0Njg3LDYgQEAKIAkJQjJDM0RBMTAwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkMzREExMTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY1VURjE2LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRD
b2RlY1VURjE2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNV
VEYxNi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzREExNTBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dEZsYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0RmxhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTYwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVGV4dEVuY29kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJDM0RBMTcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTE4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdp
c3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxNTYsOCAr
MTUxMTUsNiBAQAogCQlCQzRBNTMzMjI1NjA1OTgzMDAyOEM1OTIgLyogSFRNTFBhcnNlclNjcmlw
dGluZ0ZsYWdQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBhcnNlclNjcmlwdGluZ0ZsYWdQ
b2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0QTUzMzQyNTYwNUE1NjAw
MjhDNTkyIC8qIERhdGFEZXRlY3RvclR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9y
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzRBNTMzNjI1NjA1QUUxMDAy
OEM1OTIgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VC
bG9ja2luZ1BvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzRBNTMzODI1
NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dFJlbmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM0QTUzM0Ey
NTYwNjRFMTAwMjhDNTkyIC8qIFRleHREaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERp
cmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzREREQ4QjI3M0Q4NEU3
MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbExvYWRlclVTRC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY2Vu
ZUtpdE1vZGVsTG9hZGVyVVNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNERE
RDhDMjczRDg0RTcwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsTG9hZGVyQ2xpZW50Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0REREOEQyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0
TW9kZWxQbGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY2VuZUtpdE1vZGVsUGxheWVy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2NTAsNyArMTU2MDcsNiBAQAog
CQlDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM1NDQyNzRBMTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01TdHJpbmdMaXN0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NU3RyaW5nTGlz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NTkyRjc3MUE5MkFBMjgwMDFG
ODg2MiAvKiBDaGFyYWN0ZXJQcm9wZXJ0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoYXJhY3RlclByb3BlcnRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzU1QzdCQTAxNzE4QUZCQTAwMTMyN0U0IC8qIFJlbmRlclRoZW1lSU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGhlbWVJT1MubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NzJFRTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lE
QkluZGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCSW5kZXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4NUE2NjAxMUQ0RkFDNTAwNEMzRTRCIC8q
IElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCQmluZGluZ1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNjIyNiw3ICsxNjE4Miw2IEBACiAJCUNFN0IyREIxMTU4NkFCQUQwMDk4QjNGQSAvKiBU
ZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNFN0IyREIyMTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFN0UxNzgyMUM4
M0E0OTEwMEFEMDZBRiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2guaDsgcGF0aCA9
IGNzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNFQTg0NzIwMjEyNjIyQUQwMDk0MDgwOSAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Q2hlY2tpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNFQkI4QzMxMjA3ODZEQ0IwMDAzOTU0NyAvKiBGZXRjaElkaW9tcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGZXRjaElkaW9tcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRUJCOEMzMjIwNzg2RENCMDAwMzk1NDcgLyogRmV0Y2hJZGlvbXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmV0Y2hJZGlvbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RUNBREZDMzE1Mzc3OEZGMDBFMzcwNjggLyogRGljdGF0aW9uQWx0ZXJuYXRpdmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGF0aW9uQWx0ZXJuYXRpdmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0OTEzLDcgKzI0ODY4LDYgQEAKIAkJCQk5MzMwOUQ4
QzA5OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovLAogCQkJCUY0
RDk4MTdFMjE5NUZCRjYwMDgyMzBGQyAvKiBDaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwICovLAog
CQkJCUY0RDk4MTdEMjE5NUZCRjYwMDgyMzBGQyAvKiBDaGFuZ2VMaXN0VHlwZUNvbW1hbmQuaCAq
LywKLQkJCQk5M0YyQ0M5MTI0MjdGQjlBMDA1ODUxRDggLyogQ2hhcmFjdGVyUmFuZ2UuaCAqLywK
IAkJCQk3QzNBOTFFNTFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5Lmgg
Ki8sCiAJCQkJOTMzMDlEOEQwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcCAqLywKIAkJCQk5MzMwOUQ4RTA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCAqLywKQEAgLTI4NzUyLDQ3ICsyODcwNiwyMCBAQAogCQkJcGF0aCA9IGdyYXBoaWNz
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQjJCMjY0NTkwRDAwQTc3RTAw
MEFDQzFEIC8qIGNmICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi8sCi0J
CQkpOwotCQkJcGF0aCA9IGNmOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJ
QjJDM0Q5RUMwRDAwNkMxRDAwRUY2RjI2IC8qIHRleHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUIyQjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAvKiBjZiAq
LywKIAkJCQkxQzE2NUU0RjIzRUNGNTVFMDBCMEZDRkIgLyogY29jb2EgKi8sCiAJCQkJQTUxNkU4
QjIxMzZFMDRDMDAwNzZDM0MwIC8qIGlvcyAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFEMDBFRjZG
MjYgLyogbWFjICovLAotCQkJCUIyQzNEOUYyMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4
dC5jcHAgKi8sCi0JCQkJQjJDM0Q5RjMwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0Lmgg
Ki8sCi0JCQkJQjJDM0Q5RjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlSZXNvbHZlci5oICovLAot
CQkJCUE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oICovLAotCQkJCUM1
NTkyRjc3MUE5MkFBMjgwMDFGODg2MiAvKiBDaGFyYWN0ZXJQcm9wZXJ0aWVzLmggKi8sCi0JCQkJ
MEZEQTdDMjAxODgzMkJDQzAwQzk1NEI1IC8qIERhdGVUaW1lRm9ybWF0LmNwcCAqLywKLQkJCQk0
NTNFQjYzNTE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLywKIAkJCQlDRUND
RkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi8sCiAJCQkJ
REZDNjEwQTIyNEZCMkE3QzAwNjI1NEM4IC8qIEVuY29kaW5nVGFibGVzLmNwcCAqLywKIAkJCQlE
RkM2MTBBNDI0RkIyQTdEMDA2MjU0QzggLyogRW5jb2RpbmdUYWJsZXMuaCAqLywKLQkJCQlCQzRB
NTMzODI1NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLywKLQkJCQkzNzVD
RDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAqLywKIAkJCQk3NjMzQTcyNTEz
RDhCMzNBMDA4NTAxQjYgLyogTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcCAqLywKIAkJCQk3NjMz
QTcyNDEzRDhCMzNBMDA4NTAxQjYgLyogTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmggKi8sCiAJCQkJ
RjU0NEY3ODYxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmNwcCAqLywKIAkJCQlG
NTQ0Rjc4NzE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCAqLywKLQkJCQkzNzlF
MzcxNDEzNzM2QTY2MDBCOUU5MTkgLyogUXVvdGVkUHJpbnRhYmxlLmNwcCAqLywKLQkJCQkzNzlF
MzcxNTEzNzM2QTY2MDBCOUU5MTkgLyogUXVvdGVkUHJpbnRhYmxlLmggKi8sCi0JCQkJQjJDM0Q5
RkUwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8sCi0JCQkJQjJDM0Q5
RkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovLAotCQkJCTlCNkM0MTUy
MTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8sCi0JCQkJOTdDMDc4
NEYxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUuaCAqLywKLQkJCQkzNzJDMDBDMzEyOTYx
MUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwICovLAotCQkJCUIyQzNEQTA0MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovLAotCQkJCUE3MTUxQkQ3MTJGMTU1OEYw
MDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovLAotCQkJCUE3N0QwMDExMTMzQjBBRUIw
MEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAqLywKKwkJCQkxQzVDNTgyMzI3NTc4MDM3MDAzQjU0
MEQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLywKIAkJCQlCMkMzREEwOTBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dENvZGVjLmNwcCAqLywKIAkJCQlCMkMzREEwQTBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dENvZGVjLmggKi8sCiAJCQkJMjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2Rl
Y0FTQ0lJRmFzdFBhdGguaCAqLywKQEAgLTI4ODEyLDE2ICsyODczOSwxMiBAQAogCQkJCUIyQzNE
QTEyMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5oICovLAogCQkJCTkzNDNDQjdG
MTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmNwcCAqLywKIAkJCQk5MzQzQ0I4MDEy
RjI1RTUxMDAzM0M1RUUgLyogVGV4dENvZGVjVVRGOC5oICovLAotCQkJCUJDNEE1MzNBMjU2MDY0
RTEwMDI4QzU5MiAvKiBUZXh0RGlyZWN0aW9uLmggKi8sCiAJCQkJQjJDM0RBMTYwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgKi8sCiAJCQkJQjJDM0RBMTcwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRFbmNvZGluZy5oICovLAogCQkJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAv
KiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovLAogCQkJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0
RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8sCiAJCQkJQjJDM0RBMTgwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCAqLywKIAkJCQlCMkMzREExOTBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCAqLywKLQkJCQlCMkMzREEx
NTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEZsYWdzLmggKi8sCi0JCQkJQTg2M0UyMDAxMzQzNDEy
MDAwMjc0OTI2IC8qIFVuaWNvZGVCaWRpLmggKi8sCi0JCQkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1
REIyIC8qIFdyaXRpbmdNb2RlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRleHQ7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjg4MjksOCArMjg3NTIsNiBAQAogCQlCMkMzRDlGOTBE
MDA2QzFEMDBFRjZGMjYgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlCMkFGRkM4QzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJpZXMu
bW0gKi8sCi0JCQkJQ0VBODQ3MjAyMTI2MjJBRDAwOTQwODA5IC8qIFRleHRDaGVja2luZ01hYy5t
bSAqLywKIAkJCQlBMUY1NURDNDFGNTREM0YwMDBFREI3NUYgLyogVGV4dEVuY29kaW5nUmVnaXN0
cnlNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTMzMjQyLDEwICszMzE2Myw3
IEBACiAJCQkJQkM5NDYyRDgxMDdBN0I0QzAwODU3MTkzIC8qIEJlZm9yZUxvYWRFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQUIyM0EzMjgwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUIzRDBBNDRFRkM3MDBGOTky
RTAgLyogQmVmb3JlVW5sb2FkRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyQzNEQTI0MEQw
MDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJDM0RB
MjUwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNFNzg5ODYxMTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCBpbiBIZWFkZXJzICovLAotCQkJ
CUE4QzQwMjkzMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkREODcxNEIyNjVGNDM2NjAwNUY5OTdDIC8qIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDhEMTJCMDI2RjcwMEMxQTM1OSAvKiBCaXF1
YWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDI1MTJCMDI2NzYwMEMxQTM1OSAvKiBCaXF1
YWREU1BLZXJuZWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzMzOTMsOCArMzMzMTEsNiBAQAogCQkJ
CUZEMzE1RkZGMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsTWVyZ2VyTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQzMTYwMDIxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5uZWxTcGxpdHRlck5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNkEwMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFy
YWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTU5MkY3ODFBOTJBQTI4MDAxRjg4NjIg
LyogQ2hhcmFjdGVyUHJvcGVydGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMkNDOTMyNDI3
RkI5QzAwNTg1MUQ4IC8qIENoYXJhY3RlclJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0I4
RkZEMTE2QUU3Rjk2MDAzODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEM0QzYxQTI3NDUyQTc5MDBBMDQwRTcg
LyogQ2hpbGRDaGFuZ2VJbnZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzM3OTAsNyAr
MzM3MDYsNiBAQAogCQkJCUU1RjA2QUU3MjRENDg0N0IwMEJCQzRGOCAvKiBEYXRlVGltZUZpZWxk
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTVGMDZBRjMyNEQ0QUFFNDAwQkJDNEY4IC8q
IERhdGVUaW1lRmllbGRFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTUxRDZBMUYyNEUx
RTI1NTAwODkxQ0ZBIC8qIERhdGVUaW1lRmllbGRzU3RhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjU1QjNEQkExMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lTG9jYWxJbnB1dFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU1RjA2QUVCMjRENDlCRjcwMEJCQzRGOCAvKiBEYXRl
VGltZU51bWVyaWNGaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU1RjA2QUVGMjRE
NEE2MzcwMEJCQzRGOCAvKiBEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM0MTgxLDcgKzM0MDk2LDYgQEAKIAkJCQkxQzVFMURBODI2Rjk0QjkwMDBFMDdB
RjEgLyogRm9udFBhbGV0dGVWYWx1ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MzIwRDZCMTIy
QTI0RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
NzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogRm9udFJhbmdlcy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQkM0QTUzMzkyNTYwNjM5ODAwMjhDNTkyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkFCMEFGNzFFNkIzQzZDMDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvbkFs
Z29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNkIwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQxOTA0MUYxQ0M2NDg2QjAwQzM1
RjVEIC8qIEZvbnRTZWxlY3RvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDQ1Nyw3ICsz
NDM3MSw2IEBACiAJCQkJMUFCNUVCRDIxOTRBNTBGMzAwNTlBQzcwIC8qIEhUVFBIZWFkZXJOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MTRBNzkxREE2NDI0MTAwNEFEMDZGIC8qIEhUVFBI
ZWFkZXJWYWx1ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjczMENFOTIzQTEwMDdFRjND
RCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzc1Q0QyMzIxMTlENDNDODAw
QTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RUJCODkzMzFDNzc3
ODI5MDBDNjVENDEgLyogSWNlQ2FuZGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2
RTBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzRjE0NTQw
QUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzYyNzks
NyArMzYxOTIsNiBAQAogCQkJCTgzQzFGNTk0MUVERjY5RDMwMDQxMEQyNyAvKiBRdWFsaWZpZWRO
YW1lQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNUUzMUY0MUUwQ0IwQjUwMDRCMzcxQyAv
KiBRdWlja0xvb2suaCBpbiBIZWFkZXJzICovLAogCQkJCTlCQUVFOTJDMjIzODhBN0QwMDQxNTdB
OSAvKiBRdWlya3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTM3OUUzNzE3MTM3MzZBNjYwMEI5RTkx
OSAvKiBRdW90ZWRQcmludGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVBNTc0RjI5MTMxREI5
NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3MjBE
MDBCRjIyMDA3MUI3ODIgLyogUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0Y5MjU0MzBGN0VGNUI4MDA3RTM3QzkgLyogUmFkaW9CdXR0b25Hcm91cHMuaCBp
biBIZWFkZXJzICovLApAQCAtMzY3MjMsNyArMzY2MzUsNiBAQAogCQkJCTFBRjdBRkM4MUE0OEE4
QkMwMEM4RTRFNyAvKiBTZWN1cml0eU9yaWdpblBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8q
IFNlZ21lbnRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAw
NTI0MTk5IC8qIFNlbGVjdGlvbkdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQwNUM4
OTE5MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9uR2VvbWV0cnlHYXRoZXJlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDQ2NUQ3QkQyNTM2RDA1RTAwMTY2NjZEIC8qIFNlbGVjdGlvblJhbmdlRGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjkyMCw3ICszNjgzMSw2IEBACiAJCQkJODFBQzZDMzYx
MzFDNTdEMzAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQ0E2ODBDNzFFNjc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKLQkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERp
cmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE0QjgyMDUxRDZERjBFNTAwNzdFQkUzIC8q
IFN0cnVjdHVyZWRDbG9uZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZGRUZCQzgyNkRENjdBMjAw
QjBDNDg4IC8qIFN0cnVjdHVyZWRTZXJpYWxpemVPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MUU2N0E4MzI1RDE2ODQ3MDA3QjBBNEMgLyogU1RVTk1lc3NhZ2VQYXJzaW5nLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2OTk1LDcgKzM2OTA1LDYgQEAKIAkJCQkxQThGNkIwMjBEQjUzMDA2MDAx
REI3OTQgLyogU3Vic3RpdHV0ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Nzc4QkQ4
MjFEQTQ4MDZDMDA5RTMwMDkgLyogU3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0IyRDgxNjBGOTkyMEQyMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTk3QzA3ODUwMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NzYyN0I5ODE0RkI1NDI0MDAyQ0RDQTEgLyogU3VwcGxlbWVudGFibGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTYyQzEyMTdEMTFBQjlFNzcwMDNDNDYyQyAvKiBTdXNwZW5k
YWJsZVRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3NDBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzcyMTYsMTEgKzM3MTI1LDggQEAK
IAkJCQk5MzMwOUUxNzA5OUU2NDkyMDA1NkU1ODEgLyogVGV4dEFmZmluaXR5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRTdCMkRCNTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU0RENFNjE4ODEwNTFEMDAzRUVEQkIgLyog
VGV4dEF1dG9TaXppbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyQzNEQTM0MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0MERGNTYyNkVC
NTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ3
RjVCMzI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTcxNTFCRDgxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzdEMDAxMjEzM0IwQUVCMDBENjY1OEMgLyogVGV4dENo
ZWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0RCRjhERTEyNzY5MTlDMDA2QjYwMDggLyog
VGV4dENoZWNraW5nSGVscGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEzQTBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dENvZGVjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkU5OEExMDEzMEE5
RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNzIzNCw3ICszNzE0MCw2IEBACiAJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyREUzMjUxQzMw
Qzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUM3M0E3MTUyMTg1NzU4NzAwNENDRUE1IC8qIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQzRBNTMzQjI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QTUzMjUyNTYwNTU1RjAwMjhDNTkyIC8qIFRl
eHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3QkM4NEI0MTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QkM4NDg0MTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMzcyNDQsNyArMzcxNDksNiBAQAogCQkJCTkzM0ExNDMwMEI3RDE4
ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0I0MUEwMTJF
Njc1QTkwMDU0MzQzRCAvKiBUZXh0RXZlbnRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NUIzREQ4MTI1MUYxMkQwMDNFRjI2OSAvKiBUZXh0RmllbGRJbnB1dFR5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RmxhZ3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA5RTE4MDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0R3JhbnVsYXJp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENEY5NkY2MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0
SW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDRGOTZGNzFBMUVDQzI0MDA5OEJGODgg
LyogVGV4dEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzMzOSw3ICszNzI0
Myw2IEBACiAJCQkJMkVDREJBRDgyMUQ4OTA2MzAwRjAwRUNEIC8qIFVuZG9JdGVtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRUNEQkFEMTIxRDg5MDM0MDBGMDBFQ0QgLyogVW5kb01hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTg2M0UyMDExMzQzNDEyMDAwMjc0OTI2IC8qIFVuaWNvZGVC
aWRpLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg4NjRFMTFCQkFGNTc0MDBFNTQwQzkgLyogVW5p
cXVlSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0E1MUJCREI3OTMwMEUy
Q0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxOThGN0E5MUJCREQzODUwMEUyQ0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3Njg1LDcgKzM3NTg4LDYgQEAKIAkJCQk5MzMwOUUyNDA5
OUU2NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNTMgLyogV3JpdGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQxMkMxQTM5ODAw
MDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NDc2QUE4
MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2
NTgyMDIwOUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgzMDc4NEIyMUM1MkVFMkMwMDEwNEQxRCAvKiBYTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDBCOTMxODgxM0JBOERCQTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCmluZGV4IDJiNmVhZjgxN2M2ZmUzYjlmNTA2MjRkNjFhOTNmOWM4MjhiZjk2ZmIuLjA3
MjJlOGY3MTQzYTk3ZjUzYTI1N2FjODZiZDZiMDUwYjI5YWM0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBA
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29w
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5o
IgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmg+CiAjaW5jbHVkZSAiVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KQEAgLTI3NTAsNyArMjc1MCw3IEBAIENoYXJhY3Rlck9mZnNldCBB
WE9iamVjdENhY2hlOjpuZXh0Qm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0
ZXJPZmZzCiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgdW5zaWduZWQgcHJl
Zml4TGVuZ3RoID0gMDsKICAgICAKLSAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5k
YXJ5KGNoYXJhY3RlckFmdGVyKGNoYXJhY3Rlck9mZnNldCkpKSB7CisgICAgaWYgKFBBTDo6cmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoYXJhY3RlckFmdGVyKGNoYXJhY3Rlck9mZnNl
dCkpKSB7CiAgICAgICAgIGF1dG8gYmFja3dhcmRzU2NhblJhbmdlID0gbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGJvdW5kYXJ5LT5kb2N1bWVudCgpKTsKICAgICAgICAgaWYgKCFzZXRS
YW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KGJhY2t3YXJkc1NjYW5SYW5nZSwgY2hh
cmFjdGVyT2Zmc2V0LCBmYWxzZSkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtMjgwNSw3
ICsyODA1LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRh
cnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAgICAgICAgZm9yIChUZXh0SXRl
cmF0b3IgZm9yd2FyZHNJdGVyYXRvcihmb3J3YXJkc1NjYW5SYW5nZSk7ICFmb3J3YXJkc0l0ZXJh
dG9yLmF0RW5kKCk7IGZvcndhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQogICAgICAgICAgICAgYXBw
ZW5kKHN0cmluZywgZm9yd2FyZHNJdGVyYXRvci50ZXh0KCkpOwogICAgICAgICBzdWZmaXhMZW5n
dGggPSBzdHJpbmcuc2l6ZSgpOwotICAgIH0gZWxzZSBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29y
ZEJvdW5kYXJ5KGNoYXJhY3RlckJlZm9yZShjaGFyYWN0ZXJPZmZzZXQpKSkgeworICAgIH0gZWxz
ZSBpZiAoUEFMOjpyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVyQmVmb3Jl
KGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm91bmRhcnktPmRvY3VtZW50KCkpOwogICAg
ICAgICBhdXRvIGFmdGVyQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZSgqYm91
bmRhcnkpOwogICAgICAgICBpZiAoIWFmdGVyQm91bmRhcnkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCAxMGJhOWY5
NzZkM2NkZjI2YzljY2EyYjdkMDhiMmIyNGMzNDE3ODJiLi5mNDdiZDY0ZTJkMjdlMmI5ODE5ZDQw
OTIwYTZjMDQ2MmUyYTA4ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTM2MSw4ICszNjEsOCBAQCBib29sIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKICAgICBib29sIGlzTWlz
c3BlbGxlZCA9IGZhbHNlOwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7Ci0gICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgICAgIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0
czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1
ZSgpLCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCByZXN1bHRzLCBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGlzTWlzc3Bl
bGxlZDsKQEAgLTM5Niw4ICszOTYsOCBAQCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbgogICAgIGlm
ICghdGV4dENoZWNrZXIpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBtaXNzcGVsbGluZ3M7Ci0gICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZywgbWlzc3BlbGxpbmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOworICAgIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZywgbWlzc3BlbGxpbmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogCiAgICAgLy8gRmluZCB0aGUgZmlyc3QgbWlzc3BlbGxpbmcgcGFzdCB0aGUg
c3RhcnQuCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9u
OjpOZXh0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBjNGUyNmExYjcyMmExODllOGMzMGE2
ZWYwNjYwMWFhODc3YmQ2ODlkLi44MWYyYTE2OGY5NzZiMjRlMzVkMTkwODA2ZDExODQzNmFlZTll
ZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTkxOCw3ICs5MTgsNyBAQCBQYXRoIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKIAogICAgICAgICAvLyBD
b21wdXRlIHRoZSBwYXRoIG9ubHkgaWYgdGhpcyBpcyB0aGUgbGFzdCBwYXJ0IG9mIGEgbGluZSBm
b2xsb3dlZCBieSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgIGNvbnN0
IGF1dG8mIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsKLSAgICAgICAgYm9vbCByaWdodFRv
TGVmdFRleHQgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAg
ICAgIGJvb2wgcmlnaHRUb0xlZnRUZXh0ID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEw7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgeFRvbGVyYW5jZSA9IDU7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgeVRvbGVyYW5jZSA9IDU7CiAgICAgICAgIGJvb2wg
bmVlZHNQYXRoID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CmluZGV4IGQ2OTQxZjgyZjEyMjk5ODlmOWVlMzQwNDA5MTI3YjQxN2Q0NGIzMzQuLjUwYzk3NTZi
MGEzMTRjOTZmMzU5OTI2ZWZiNzk1MWNlNGJiMTcyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCkBAIC05MzgsMTIgKzkzOCwxMiBAQCBzdGF0aWMgdm9pZCBBWEF0
dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsCiAgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+ZG9jdW1l
bnQoKS5lZGl0b3IoKS50ZXh0Q2hlY2tlcigpOwogICAgICAgICAKICAgICAgICAgLy8gY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGggaXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxl
bWVudGVkIGluIFdLMSBhbmQgV0syCi0gICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7Ci0gICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVja2VyLCB0ZXh0LCBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgcmVzdWx0cywgbm9kZS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZlY3RvcjxQQUw6OlRleHRD
aGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNo
ZWNrZXIsIHRleHQsIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIHJlc3VsdHMsIG5v
ZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAg
ICAKICAgICAgICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgY29uc3QgVGV4dENo
ZWNraW5nUmVzdWx0JiByZXN1bHQgPSByZXN1bHRzW2ldOworICAgICAgICAgICAgY29uc3QgUEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCA9IHJlc3VsdHNbaV07CiAgICAgICAgICAgICBB
WEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNz
cGVsbGVkVGV4dEF0dHJpYnV0ZSwgQFlFUywgTlNNYWtlUmFuZ2UocmVzdWx0LnJhbmdlLmxvY2F0
aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5yYW5nZS5sZW5ndGgpKTsKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5n
LCBOU0FjY2Vzc2liaWxpdHlNYXJrZWRNaXNzcGVsbGVkVGV4dEF0dHJpYnV0ZSwgQFlFUywgTlNN
YWtlUmFuZ2UocmVzdWx0LnJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5y
YW5nZS5sZW5ndGgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCmluZGV4IGQxNTE3NTgyNzQ4YjRmN2UzODQ1NTQyY2U5NDA0NzQ2NmQ3
ZWMzZGMuLjhlMDNlZjc1MjRjMzZiYTEwMDg1NzI1NzhmYjEzZWY3MGE4MGRkZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAt
MjE3NiwxMiArMjE3NiwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29t
cG9zaXRlT3BlcmF0aW9uKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20u
Zm9udEl0YWxpYygpICYmIHRvLmZvbnRJdGFsaWMoKSAmJiBmcm9tLmZvbnREZXNjcmlwdGlvbigp
LmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLmZvbnREZXNjcmlw
dGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50OworICAgICAgICBy
ZXR1cm4gZnJvbS5mb250SXRhbGljKCkgJiYgdG8uZm9udEl0YWxpYygpICYmIGZyb20uZm9udERl
c2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudCAm
JiB0by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gUEFMOjpGb250U3R5bGVB
eGlzOjpzbG50OwogICAgIH0KIAogICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Cisg
ICAgICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudDsK
ICAgICAgICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkKICAgICAgICAgICAgIGJsZW5kZWRTdHls
ZUF4aXMgPSAoY29udGV4dC5wcm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bykuZm9udERlc2NyaXB0
aW9uKCkuZm9udFN0eWxlQXhpcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDQ5YTMxNjU3ODI1OGIzNjg4MDUyNjg4
Y2FmZjZmMGY4ZmNiMmVjYmQuLjU2MmJmMTljZjUyYTRhN2VmODdlY2Y1ZDVjMmU4MmVjMDJhMWM5
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCkBAIC0xMTU5LDI3ICsxMTU5LDI3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHdp
bGxDaGFuZ2VQcm9wZXJ0eVZhbHVlKGNvbnN0IFdpbGxDaGFuZ2VEYXRhKiB3aWxsQ2hhbmdlRGF0
CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRMaWdhdHVy
ZXNWYWx1ZShDU1NWYWx1ZUxpc3QmIGxpc3QsIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZhbHVlLCBD
U1NWYWx1ZUlEIHllc1ZhbHVlLCBDU1NWYWx1ZUlEIG5vVmFsdWUpCitzdGF0aWMgaW5saW5lIHZv
aWQgYXBwZW5kTGlnYXR1cmVzVmFsdWUoQ1NTVmFsdWVMaXN0JiBsaXN0LCBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhbHVlLCBDU1NWYWx1ZUlEIHllc1ZhbHVlLCBDU1NWYWx1ZUlEIG5vVmFs
dWUpCiB7CiAgICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoK
ICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QuYXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKG5vVmFsdWUp
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5h
cHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoeWVz
VmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRMaWdhdHVyZXNQcm9wZXJ0
eVZhbHVlKEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbiwgRm9udFZhcmlhbnRMaWdhdHVyZXMg
ZGlzY3JldGlvbmFyeSwgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbCwgRm9udFZhcmlh
bnRMaWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBm
b250VmFyaWFudExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudExpZ2F0dXJl
cyBjb21tb24sIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeSwgUEFMOjpG
b250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsLCBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
IGNvbnRleHR1YWxBbHRlcm5hdGVzKQogewogICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKGNvbW1vbiA9PSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm8gJiYgZGlzY3JldGlvbmFyeSA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYg
aGlzdG9yaWNhbCA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYgY29udGV4dHVhbEFsdGVy
bmF0ZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vKQorICAgIGlmIChjb21tb24gPT0gUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYgZGlzY3JldGlvbmFyeSA9PSBQQUw6OkZvbnRW
YXJpYW50TGlnYXR1cmVzOjpObyAmJiBoaXN0b3JpY2FsID09IFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vICYmIGNvbnRleHR1YWxBbHRlcm5hdGVzID09IFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIGlmIChjb21tb24gPT0gRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbCAmJiBkaXNjcmV0aW9uYXJ5ID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWwgJiYgaGlzdG9yaWNhbCA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsICYmIGNvbnRl
eHR1YWxBbHRlcm5hdGVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpCisgICAgaWYg
KGNvbW1vbiA9PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgZGlzY3JldGlv
bmFyeSA9PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgaGlzdG9yaWNhbCA9
PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgY29udGV4dHVhbEFsdGVybmF0
ZXMgPT0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKQogICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAKICAg
ICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsK
QEAgLTExOTAsMTU2ICsxMTkwLDE1NiBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFu
dExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUoRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbQogICAgIHJl
dHVybiB2YWx1ZUxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50UG9z
aXRpb25Qcm9wZXJ0eVZhbHVlKEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24pCitzdGF0aWMg
UmVmPENTU1ZhbHVlPiBmb250VmFyaWFudFBvc2l0aW9uUHJvcGVydHlWYWx1ZShQQUw6OkZvbnRW
YXJpYW50UG9zaXRpb24gcG9zaXRpb24pCiB7CiAgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKTsKICAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBDU1NWYWx1
ZU5vcm1hbDsKICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudFBv
c2l0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1h
bDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3Jp
cHQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDoKICAgICAg
ICAgdmFsdWVJRCA9IENTU1ZhbHVlU3ViOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBv
c2l0aW9uOjpTdXBlcnNjcmlwdDoKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlU3VwZXI7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlh
bnRDYXBzUHJvcGVydHlWYWx1ZShGb250VmFyaWFudENhcHMgY2FwcykKK3N0YXRpYyBSZWY8Q1NT
VmFsdWU+IGZvbnRWYXJpYW50Q2Fwc1Byb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudENhcHMg
Y2FwcykKIHsKICAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpOwogICAgIENTU1ZhbHVlSUQgdmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgIHN3aXRj
aCAoY2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21h
bGw6CiAgICAgICAgIHZhbHVlSUQgPSBDU1NWYWx1ZVNtYWxsQ2FwczsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudENhcHM6OkFsbFNtYWxsOgogICAgICAgICB2YWx1ZUlEID0gQ1NTVmFsdWVBbGxTbWFs
bENhcHM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgogICAgICAgICB2YWx1ZUlE
ID0gQ1NTVmFsdWVQZXRpdGVDYXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBl
dGl0ZToKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlQWxsUGV0aXRlQ2FwczsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlVuaWNhc2U6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlVW5p
Y2FzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlRpdGxpbmc6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoKICAgICAgICAgdmFsdWVJ
RCA9IENTU1ZhbHVlVGl0bGluZ0NhcHM7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKIH0KIAotc3Rh
dGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnROdW1lcmljUHJvcGVydHlWYWx1ZShGb250VmFy
aWFudE51bWVyaWNGaWd1cmUgZmlndXJlLCBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNp
bmcsIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZyYWN0aW9uLCBGb250VmFyaWFudE51bWVy
aWNPcmRpbmFsIG9yZGluYWwsIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRa
ZXJvKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnROdW1lcmljUHJvcGVydHlWYWx1
ZShQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUsIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZyBzcGFjaW5nLCBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZy
YWN0aW9uLCBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCwgUEFMOjpGb250
VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBzbGFzaGVkWmVybykKIHsKICAgICBhdXRvJiBjc3NW
YWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGlmIChmaWd1cmUgPT0g
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWwgJiYgc3BhY2luZyA9PSBGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpOb3JtYWwgJiYgZnJhY3Rpb24gPT0gRm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb246Ok5vcm1hbCAmJiBvcmRpbmFsID09IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6
Ok5vcm1hbCAmJiBzbGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6
Tm9ybWFsKQorICAgIGlmIChmaWd1cmUgPT0gUEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6
Ok5vcm1hbCAmJiBzcGFjaW5nID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9y
bWFsICYmIGZyYWN0aW9uID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1h
bCAmJiBvcmRpbmFsID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsICYm
IHNsYXNoZWRaZXJvID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1h
bCkKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogCiAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgc3dpdGNoIChmaWd1cmUpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmU6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmluZ051bXMpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0
eWxlTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRT
dHlsZU51bWJlcnM6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPbGRzdHlsZU51bXMpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgc3dpdGNoIChzcGFjaW5nKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51
bWVyaWNTcGFjaW5nOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVy
aWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgogICAgICAgICB2YWx1ZUxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJvcG9y
dGlvbmFsTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVy
aWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRhYnVsYXJOdW1zKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoZnJhY3Rpb24pIHsKLSAgICBjYXNl
IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CiAgICAg
ICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVEaWFnb25hbEZyYWN0aW9ucykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25zOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczoKICAgICAgICAg
dmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVN0YWNrZWRGcmFjdGlvbnMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYg
KG9yZGluYWwgPT0gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzKQorICAgIGlmIChvcmRp
bmFsID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzKQogICAgICAgICB2YWx1
ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
T3JkaW5hbCkpOwotICAgIGlmIChzbGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybzo6WWVzKQorICAgIGlmIChzbGFzaGVkWmVybyA9PSBQQUw6OkZvbnRWYXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvOjpZZXMpCiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbGFzaGVkWmVybykpOwogCiAgICAg
cmV0dXJuIHZhbHVlTGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRB
bHRlcm5hdGVzUHJvcGVydHlWYWx1ZShGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcykK
K3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50QWx0ZXJuYXRlc1Byb3BlcnR5VmFsdWUo
UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcykKIHsKICAgICBhdXRvJiBjc3NW
YWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIENTU1ZhbHVlSUQgdmFs
dWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgIHN3aXRjaCAoYWx0ZXJuYXRlcykgewotICAgIGNh
c2UgRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50QWx0ZXJuYXRlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVl
SGlzdG9yaWNhbEZvcm1zOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7CiB9CiAKLXN0YXRpYyBSZWY8
Q1NTVmFsdWU+IGZvbnRWYXJpYW50RWFzdEFzaWFuUHJvcGVydHlWYWx1ZShGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQgdmFyaWFudCwgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB3aWR0aCwg
Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1YnkpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250
VmFyaWFudEVhc3RBc2lhblByb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQgdmFyaWFudCwgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIHdpZHRoLCBQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5KQogewogICAgIGF1dG8mIGNzc1ZhbHVlUG9v
bCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHZhcmlhbnQgPT0gRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwgJiYgd2lkdGggPT0gRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsICYmIHJ1YnkgPT0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpO
b3JtYWwpCisgICAgaWYgKHZhcmlhbnQgPT0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Ok5vcm1hbCAmJiB3aWR0aCA9PSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5v
cm1hbCAmJiBydWJ5ID09IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpCiAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9ybWFsKTsKIAogICAgIGF1dG8gdmFsdWVMaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwogICAgIHN3aXRjaCAodmFyaWFudCkgewotICAgIGNhc2UgRm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzNzg6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM3OCkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIHZhbHVl
TGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVK
aXM4MykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6SmlzOTA6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6
SmlzOTA6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXMwNCkpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmll
ZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVk
OgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlU2ltcGxpZmllZCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw6CiAgICAgICAgIHZhbHVlTGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUcmFk
aXRpb25hbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHdpZHRoKSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRnVsbFdpZHRoKSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJv
cG9ydGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9w
b3J0aW9uYWw6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQcm9wb3J0aW9uYWxXaWR0aCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBpZiAocnVieSA9PSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Olll
cykKKyAgICBpZiAocnVieSA9PSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzKQog
ICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlUnVieSkpOwogCiAgICAgcmV0dXJuIHZhbHVlTGlzdDsKQEAgLTE5NjYsNyAr
MTk2Niw3IEBAIFJlZjxDU1NGb250U3R5bGVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
Zm9udE5vbktleXdvcmRTdHlsZUZyb21TdHlsZVZhbHVlCiAgICAgcmV0dXJuIENTU0ZvbnRTdHls
ZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oaXRhbGljKSwgQ1NTVW5pdFR5cGU6OkNTU19ERUcpKTsK
IH0KIAotUmVmPENTU0ZvbnRTdHlsZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpmb250
U3R5bGVGcm9tU3R5bGVWYWx1ZShzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaXRh
bGljLCBGb250U3R5bGVBeGlzIGZvbnRTdHlsZUF4aXMpCitSZWY8Q1NTRm9udFN0eWxlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0ZDo6b3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBpdGFsaWMsIFBBTDo6Rm9udFN0eWxlQXhpcyBmb250
U3R5bGVBeGlzKQogewogICAgIGlmIChhdXRvIGtleXdvcmQgPSBmb250U3R5bGVLZXl3b3JkKGl0
YWxpYywgZm9udFN0eWxlQXhpcykpCiAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6
Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGtl
eXdvcmQudmFsdWUoKSkpOwpAQCAtMTk4NiwxNzggKzE5ODYsMTc4IEBAIHN0YXRpYyBSZWY8Q1NT
VmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAg
ICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAKICAg
ICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb21tb25MaWdhdHVyZXMo
KSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9D
b21tb25MaWdhdHVyZXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChz
dHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcygpKSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpZZXM6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAg
Y2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgbGlzdC0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudEhpc3RvcmljYWxMaWdhdHVy
ZXMoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dExpZ2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVz
KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcygpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRleHR1YWwpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9D
b250ZXh0dWFsKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkudmFyaWFudFBvc2l0aW9uKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50UG9zaXRpb246Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6
Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246OlN1
YnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0Ogog
ICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVTdWIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQ
b3NpdGlvbjo6U3VwZXJzY3JpcHQ6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN1cGVyKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCku
dmFyaWFudENhcHMoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAg
Y2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fw
czo6U21hbGw6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2FwcykpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbFNtYWxsQ2Fw
cykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZToKICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlUGV0aXRlQ2FwcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToK
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQWxsUGV0aXRlQ2FwcykpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpVbmljYXNlOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmljYXNlKSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRpdGxpbmdD
YXBzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGaWd1cmUoKSkgewotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y0ZpZ3VyZTo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5pbmdOdW1z
KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpP
bGRTdHlsZU51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6
T2xkU3R5bGVOdW1iZXJzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPbGRzdHlsZU51bXMpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250RGVzY3JpcHRpb24o
KS52YXJpYW50TnVtZXJpY1NwYWNpbmcoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmlj
U3BhY2luZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU3Bh
Y2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJv
cG9ydGlvbmFsTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51
bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVGFidWxh
ck51bXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250
RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCkpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CiAgICAgICAgIGxp
c3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZURpYWdvbmFsRnJhY3Rpb25zKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnM6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25zOgogICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTdGFja2VkRnJhY3Rpb25zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNPcmRp
bmFsKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOgogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgogICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVPcmRpbmFsKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXM6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXM6CiAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVNsYXNoZWRaZXJvKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5
bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudEFsdGVybmF0ZXMoKSkgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50QWx0
ZXJuYXRlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0
ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEFsdGVy
bmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSGlzdG9yaWNhbEZv
cm1zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERl
c2NyaXB0aW9uKCkudmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSkgewotICAgIGNhc2UgRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczc4KSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4
MzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzoKICAg
ICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlSmlzODMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
MDQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CiAg
ICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUppczA0KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ6CiAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVNpbXBsaWZpZWQpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUcmFkaXRpb25h
bCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNj
cmlwdGlvbigpLnZhcmlhbnRFYXN0QXNpYW5XaWR0aCgpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoOjpGdWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoOjpGdWxsOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGdWxsV2lkdGgpKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKICAg
ICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFz
aWFuUnVieSgpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOgogICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVSdWJ5KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIxNjcsMTUgKzIxNjcsMTUgQEAg
c3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQogCiBzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBpZiAoc3R5bGUuZm9udERlc2NyaXB0
aW9uKCkuZm9udFN5bnRoZXNpcygpID09IEZvbnRTeW50aGVzaXNOb25lKQorICAgIGlmIChzdHls
ZS5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgPT0gUEFMOjpGb250U3ludGhlc2lz
Tm9uZSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgaWYgKHN0eWxlLmZvbnREZXNjcmlwdGlv
bigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNXZWlnaHQpCisgICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIFBBTDo6Rm9udFN5bnRoZXNpc1dl
aWdodCkKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2VpZ2h0KSk7Ci0gICAgaWYgKHN0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkKKyAgICBp
ZiAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRoZXNpcygpICYgUEFMOjpGb250U3lu
dGhlc2lzU3R5bGUpCiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0eWxlKSk7Ci0gICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTbWFsbENh
cHMpCisgICAgaWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIFBB
TDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2FwcykKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU21hbGxDYXBz
KSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CkBAIC0yNjI4LDkgKzI2MjgsOSBAQCBzdGF0aWMgUmVm
PENTU0ZvbnRWYWx1ZT4gZm9udFNob3J0aGFuZFZhbHVlRm9yU2VsZWN0aW9uUHJvcGVydGllcyhj
b25zdCBGb250RGVzYwogICAgIGF1dG8gY29tcHV0ZWRGb250ID0gQ1NTRm9udFZhbHVlOjpjcmVh
dGUoKTsKIAogICAgIGF1dG8gdmFyaWFudENhcHMgPSBmb250RGVzY3JpcHRpb24udmFyaWFudENh
cHMoKTsKLSAgICBpZiAodmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbCkKKyAg
ICBpZiAodmFyaWFudENhcHMgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsKQogICAgICAg
ICBjb21wdXRlZEZvbnQtPnZhcmlhbnQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2Fwcyk7Ci0gICAgZWxzZSBpZiAodmFyaWFu
dENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCisgICAgZWxzZSBpZiAodmFyaWFudENh
cHMgPT0gUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbCkKICAgICAgICAgY29tcHV0ZWRGb250
LT52YXJpYW50ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb3JtYWwpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIENTU0ZvbnRWYWx1
ZTo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgKaW5kZXggZDI2MTQxNWNkN2E0OTcxMzAwYTA3ZDZkY2M4OGI4ODNmYTJkM2Q0
MC4uMDI5MWFjNmFmNTc0MzBhOTFmYWI5NjBjMmNiYzE4ZjQwOGVjOGFhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaApAQCAtMjMsNyAr
MjMsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlRGVmcy5oIgotI2lu
Y2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250Tm9uS2V5d29yZFN0cmV0Y2hGcm9tU3R5
bGVWYWx1ZShGb250U2VsZWN0aW9uVmFsdWUpOwogICAgIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZl
VmFsdWU+IGZvbnRTdHJldGNoRnJvbVN0eWxlVmFsdWUoRm9udFNlbGVjdGlvblZhbHVlKTsKICAg
ICBzdGF0aWMgUmVmPENTU0ZvbnRTdHlsZVZhbHVlPiBmb250Tm9uS2V5d29yZFN0eWxlRnJvbVN0
eWxlVmFsdWUoRm9udFNlbGVjdGlvblZhbHVlKTsKLSAgICBzdGF0aWMgUmVmPENTU0ZvbnRTdHls
ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGVWYWx1ZShzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rp
b25WYWx1ZT4sIEZvbnRTdHlsZUF4aXMpOworICAgIHN0YXRpYyBSZWY8Q1NTRm9udFN0eWxlVmFs
dWU+IGZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZh
bHVlPiwgUEFMOjpGb250U3R5bGVBeGlzKTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgc3R5bGVk
IGVsZW1lbnQgaXMgZWl0aGVyIHRoZSBlbGVtZW50IHBhc3NlZCBpbnRvCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmNwcAppbmRleCAxMzQ5NDhjYmZkYjc3ZDZjMjUyNzc2NDE0OTFlNzlmYTEzZWM4
MTVkLi5lZWM1YTg2ODEyNWMxMmYyNGYxYzhmNjFmY2ZmZWUyZmFjOTQzMDViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UoY29uc3QgU2V0dGluZ3M6OlZhbHVlcyogc2V0dGluZ3MsIFN0eWxlUnVsZUZvbnRG
YWNlKiBjcwogICAgICwgbV9tYXlCZVB1cmdlZCghd3JhcHBlcikKICAgICAsIG1fc2hvdWxkSWdu
b3JlRm9udExvYWRDb21wbGV0aW9ucyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+c2hvdWxkSWdub3Jl
Rm9udExvYWRDb21wbGV0aW9ucykKICAgICAsIG1fZm9udExvYWRUaW1pbmdPdmVycmlkZShzZXR0
aW5ncyA/IHNldHRpbmdzLT5mb250TG9hZFRpbWluZ092ZXJyaWRlIDogRm9udExvYWRUaW1pbmdP
dmVycmlkZTo6Tm9uZSkKLSAgICAsIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3Mg
JiYgIXNldHRpbmdzLT5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA/IEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzOjpObyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpCisgICAgLCBt
X2FsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzICYmICFzZXR0aW5ncy0+c2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMgPyBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyA6
IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcykKICAgICAsIG1fdGltZW91dFRpbWVy
KCp0aGlzLCAmQ1NTRm9udEZhY2U6OnRpbWVvdXRGaXJlZCkKIHsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmgKaW5kZXggNzg5OTNlZmVmNTdiNWU2Nzk5NmFkMWJkYWVmODc3MTdmYTE2MGRlOC4u
YjEzZTBiMmI0NTRkOGY1M2QyYTU1YjlmMDI4MTA0MzMwNzAwNjkwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmgKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotI2lu
Y2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxwYWwvdGV4
dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTE1NCw3ICsxNTQsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIHB1cmdlYWJsZSgpIGNvbnN0OwogCi0gICAgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93VXNlckluc3RhbGxlZEZvbnRzOyB9CisgICAgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dVc2VySW5z
dGFsbGVkRm9udHM7IH0KIAogICAgIHZvaWQgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCkBAIC0x
OTQsNyArMTk0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWF5QmVQdXJnZWQgeyB0cnVlIH07
CiAgICAgYm9vbCBtX3Nob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxldGlvbnMgeyBmYWxzZSB9Owog
ICAgIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGUgbV9mb250TG9hZFRpbWluZ092ZXJyaWRlIHsgRm9u
dExvYWRUaW1pbmdPdmVycmlkZTo6Tm9uZSB9OwotICAgIEFsbG93VXNlckluc3RhbGxlZEZvbnRz
IG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgeyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVz
IH07CisgICAgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxl
ZEZvbnRzIHsgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIH07CiAKICAgICBUaW1l
ciBtX3RpbWVvdXRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcApp
bmRleCBhNzZhYWNlOTc0NDRlMjNiNWFiMDNhZTVjMDQ5YTQ0ZDc0ZGZhZmFhLi44MGE0NWI0M2I1
NjMzMWEyOGFmMWY5NTNkNGVlYzc1YWY5ZTUyMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNldC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0OjplbnN1
cmVMb2NhbEZvbnRGYWNlc0ZvckZhbWlseVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBmYW1pbAog
CiAgICAgaWYgKCFtX293bmluZ0ZvbnRTZWxlY3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgPSBtX293bmluZ0ZvbnRTZWxlY3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5zZXR0aW5nc1ZhbHVlcygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID8g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpO
bzsKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzID0gbV9vd25pbmdGb250U2VsZWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2V0
dGluZ3NWYWx1ZXMoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA/IFBBTDo6QWxsb3dV
c2VySW5zdGFsbGVkRm9udHM6OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
OwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMgPSBt
X293bmluZ0ZvbnRTZWxlY3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5mb250Q2FjaGUo
KS5nZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoZmFtaWx5TmFtZSwgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpOwogICAgIGlmIChjYXBhYmlsaXRpZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFw
cGluZ3MuaAppbmRleCBjMzRmMzViMWM1MGIxOTU5Njc4YTQ3NWEyYmEzNTcyNjY3ODI3MzJiLi5m
YTg5NjdkZTU5MmQ4YmE0NDdkMDY5YjdkMTcxZDliZGU3ODdjOTUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKQEAgLTQwLDExICs0MCwxMSBA
QAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGVEZWZzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNpbmNsdWRlICJUZXh0Rmxh
Z3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlICJUaGVtZVR5
cGVzLmgiCiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKLSNpbmNsdWRlICJVbmljb2RlQmlkaS5o
IgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVW5pY29kZUJp
ZGkuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBAIC0yNjE1LDU4ICsy
NjE1LDU4IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBU
ZXh0VHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gVGV4dFRyYW5zZm9ybTo6Tm9uZTsKIH0K
IAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KEVVbmljb2RlQmlkaSBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U1ByaW1pdGl2ZVZhbHVlKFBBTDo6RVVuaWNvZGVCaWRpIGUpCiAgICAgOiBDU1NWYWx1ZShQcmlt
aXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NT
X1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFVCTm9ybWFsOgorICAgIGNh
c2UgUEFMOjpVQk5vcm1hbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW1iZWQ6CisgICAgY2FzZSBQQUw6OkVtYmVk
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUVtYmVkOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIE92ZXJyaWRlOgorICAgIGNhc2UgUEFMOjpPdmVycmlkZToKICAgICAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVCaWRpT3ZlcnJpZGU7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXNvbGF0ZToKKyAgICBjYXNlIFBBTDo6SXNvbGF0ZToKICAgICAgICAgbV92YWx1
ZS52YWx1ZUlEID0gQ1NTVmFsdWVJc29sYXRlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIElz
b2xhdGVPdmVycmlkZToKKyAgICBjYXNlIFBBTDo6SXNvbGF0ZU92ZXJyaWRlOgogICAgICAgICBt
X3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUlzb2xhdGVPdmVycmlkZTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQbGFpbnRleHQ6CisgICAgY2FzZSBQQUw6OlBsYWludGV4dDoKICAgICAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVQbGFpbnRleHQ7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVV
bmljb2RlQmlkaSgpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6
b3BlcmF0b3IgUEFMOjpFVW5pY29kZUJpZGkoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVl
SUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6Ci0gICAgICAgIHJldHVybiBVQk5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6
VUJOb3JtYWw7CiAgICAgY2FzZSBDU1NWYWx1ZUVtYmVkOgotICAgICAgICByZXR1cm4gRW1iZWQ7
CisgICAgICAgIHJldHVybiBQQUw6OkVtYmVkOwogICAgIGNhc2UgQ1NTVmFsdWVCaWRpT3ZlcnJp
ZGU6Ci0gICAgICAgIHJldHVybiBPdmVycmlkZTsKKyAgICAgICAgcmV0dXJuIFBBTDo6T3ZlcnJp
ZGU7CiAgICAgY2FzZSBDU1NWYWx1ZUlzb2xhdGU6CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdElz
b2xhdGU6Ci0gICAgICAgIHJldHVybiBJc29sYXRlOworICAgICAgICByZXR1cm4gUEFMOjpJc29s
YXRlOwogICAgIGNhc2UgQ1NTVmFsdWVJc29sYXRlT3ZlcnJpZGU6CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdElzb2xhdGVPdmVycmlkZToKLSAgICAgICAgcmV0dXJuIElzb2xhdGVPdmVycmlkZTsK
KyAgICAgICAgcmV0dXJuIFBBTDo6SXNvbGF0ZU92ZXJyaWRlOwogICAgIGNhc2UgQ1NTVmFsdWVQ
bGFpbnRleHQ6CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBsYWludGV4dDoKLSAgICAgICAgcmV0
dXJuIFBsYWludGV4dDsKKyAgICAgICAgcmV0dXJuIFBBTDo6UGxhaW50ZXh0OwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBVQk5vcm1hbDsKKyAgICByZXR1cm4gUEFMOjpVQk5vcm1hbDsKIH0KIAogdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFVzZXJE
cmFnIGUpCkBAIC0zMDE4LDU4ICszMDE4LDU4IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBPdmVyZmxvd1dyYXAoKSBjb25zdAogICAgIHJldHVybiBPdmVy
Zmxvd1dyYXA6Ok5vcm1hbDsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFRleHREaXJlY3Rpb24gZSkKK3RlbXBsYXRlPD4gaW5saW5l
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQQUw6OlRleHREaXJlY3Rpb24g
ZSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIHNldFByaW1pdGl2ZVVu
aXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQpOwogICAgIHN3aXRjaCAoZSkgewotICAg
IGNhc2UgVGV4dERpcmVjdGlvbjo6TFRSOgorICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFI6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTHRyOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OlJUTDoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVJ0bDsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1
ZTo6b3BlcmF0b3IgVGV4dERpcmVjdGlvbigpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpUZXh0RGlyZWN0aW9uKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoaXNWYWx1ZUlEKCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsK
ICAgICBjYXNlIENTU1ZhbHVlTHRyOgotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRS
OworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgY2FzZSBDU1NW
YWx1ZVJ0bDoKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0
dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0RGly
ZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoV3Jp
dGluZ01vZGUgZSkKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShQQUw6OldyaXRpbmdNb2RlIGUpCiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVD
bGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NTX1ZBTFVF
X0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUhvcml6b250YWxUYjsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpSaWdodFRvTGVmdDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVWZXJ0aWNh
bFJsOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoK
KyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICBtX3ZhbHVl
LnZhbHVlSUQgPSBDU1NWYWx1ZVZlcnRpY2FsTHI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90
dG9tVG9Ub3A6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlSG9yaXpvbnRhbEJ0
OwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBXcml0aW5nTW9kZSgpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpXcml0aW5nTW9kZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKIApAQCAtMzA3OSwyMSArMzA3OSwyMSBAQCB0ZW1w
bGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgV3JpdGluZ01vZGUoKSBj
b25zdAogICAgIGNhc2UgQ1NTVmFsdWVMclRiOgogICAgIGNhc2UgQ1NTVmFsdWVSbDoKICAgICBj
YXNlIENTU1ZhbHVlUmxUYjoKLSAgICAgICAgcmV0dXJuIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bTsKKyAgICAgICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogICAgIGNh
c2UgQ1NTVmFsdWVWZXJ0aWNhbFJsOgogICAgIGNhc2UgQ1NTVmFsdWVUYjoKICAgICBjYXNlIENT
U1ZhbHVlVGJSbDoKLSAgICAgICAgcmV0dXJuIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OwogICAgIGNhc2UgQ1NT
VmFsdWVWZXJ0aWNhbExyOgotICAgICAgICByZXR1cm4gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0
OworICAgICAgICByZXR1cm4gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ7CiAgICAgY2Fz
ZSBDU1NWYWx1ZUhvcml6b250YWxCdDoKLSAgICAgICAgcmV0dXJuIFdyaXRpbmdNb2RlOjpCb3R0
b21Ub1RvcDsKKyAgICAgICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207CisgICAgcmV0dXJu
IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVGV4dENvbWJpbmUgZSkKQEAgLTMz
OTUsMTggKzMzOTUsMTggQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFBvaW50ZXJFdmVudHMoKSBjb25zdAogICAgIHJldHVybiBQb2ludGVyRXZlbnRzOjpB
bGw7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRp
dmVWYWx1ZShLZXJuaW5nIGtlcm5pbmcpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpLZXJuaW5nIGtlcm5pbmcpCiAgICAgOiBDU1NW
YWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0
VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGtlcm5pbmcpIHsKLSAgICBjYXNlIEtl
cm5pbmc6OkF1dG86CisgICAgY2FzZSBQQUw6Oktlcm5pbmc6OkF1dG86CiAgICAgICAgIG1fdmFs
dWUudmFsdWVJRCA9IENTU1ZhbHVlQXV0bzsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgS2Vy
bmluZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpLZXJuaW5nOjpOb3JtYWw6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBLZXJuaW5nOjpOb1NoaWZ0OgorICAgIGNhc2UgUEFMOjpLZXJuaW5nOjpOb1NoaWZ0OgogICAg
ICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vbmU7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNDE1LDIzICszNDE1LDIzIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShLZXJuaW5nIGtlcm5pbmcpCiAgICAgbV92YWx1ZS52
YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRp
dmVWYWx1ZTo6b3BlcmF0b3IgS2VybmluZygpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpLZXJuaW5nKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNWYWx1ZUlEKCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBj
YXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgcmV0dXJuIEtlcm5pbmc6OkF1dG87CisgICAgICAg
IHJldHVybiBQQUw6Oktlcm5pbmc6OkF1dG87CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAg
ICAgICAgcmV0dXJuIEtlcm5pbmc6Ok5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6S2Vybmlu
Zzo6Tm9ybWFsOwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gS2Vybmlu
Zzo6Tm9TaGlmdDsKKyAgICAgICAgcmV0dXJuIFBBTDo6S2VybmluZzo6Tm9TaGlmdDsKICAgICBk
ZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gS2VybmluZzo6QXV0bzsKKyAgICByZXR1cm4gUEFMOjpLZXJuaW5nOjpB
dXRvOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoT2JqZWN0Rml0IGZpdCkKQEAgLTM0NzgsMjEgKzM0NzgsMjEgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIE9iamVjdEZpdCgpIGNvbnN0CiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nKQordGVtcGxhdGU8PiBpbmxpbmUg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBBTDo6Rm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0
UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNo
IChzbW9vdGhpbmcpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5n
OgorICAgIGNhc2UgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKICAgICAg
ICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgY2FzZSBQQUw6OkZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVOb25lOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6
QW50aWFsaWFzZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNl
ZDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBbnRpYWxpYXNlZDsKICAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFz
ZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2Vk
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFsaWFzZWQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTAxLDM2ICszNTAxLDM2IEBAIHRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpCiAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogfQog
Ci10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFNtb290
aGluZ01vZGUoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFBBTDo6Rm9udFNtb290aGluZ01vZGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1Zh
bHVlSUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NT
VmFsdWVBdXRvOgotICAgICAgICByZXR1cm4gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhp
bmc7CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5n
OwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gRm9udFNtb290aGluZ01v
ZGU6Ok5vU21vb3RoaW5nOworICAgICAgICByZXR1cm4gUEFMOjpGb250U21vb3RoaW5nTW9kZTo6
Tm9TbW9vdGhpbmc7CiAgICAgY2FzZSBDU1NWYWx1ZUFudGlhbGlhc2VkOgotICAgICAgICByZXR1
cm4gRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOworICAgICAgICByZXR1cm4gUEFMOjpG
b250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ7CiAgICAgY2FzZSBDU1NWYWx1ZVN1YnBpeGVs
QW50aWFsaWFzZWQ6Ci0gICAgICAgIHJldHVybiBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBp
eGVsQW50aWFsaWFzZWQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpB
dXRvU21vb3RoaW5nOworICAgIHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21v
b3RoaW5nOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJp
bWl0aXZlVmFsdWUoRm9udFNtYWxsQ2FwcyBzbWFsbENhcHMpCit0ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpGb250U21hbGxDYXBzIHNt
YWxsQ2FwcykKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIHNldFByaW1p
dGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQpOwogICAgIHN3aXRjaCAoc21h
bGxDYXBzKSB7Ci0gICAgY2FzZSBGb250U21hbGxDYXBzOjpPZmY6CisgICAgY2FzZSBQQUw6OkZv
bnRTbWFsbENhcHM6Ok9mZjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnRTbWFsbENhcHM6Ok9uOgorICAgIGNh
c2UgUEFMOjpGb250U21hbGxDYXBzOjpPbjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVTbWFsbENhcHM7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTM5LDYxICszNTM5
LDYxIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZShGb250U21hbGxDYXBzIHNtYWxsQ2FwcykKICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NW
YWx1ZU5vcm1hbDsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIEZvbnRTbWFsbENhcHMoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtYWxsQ2FwcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsdWVJRCgpKTsKIAogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAg
Y2FzZSBDU1NWYWx1ZVNtYWxsQ2FwczoKLSAgICAgICAgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9u
OworICAgICAgICByZXR1cm4gUEFMOjpGb250U21hbGxDYXBzOjpPbjsKICAgICBjYXNlIENTU1Zh
bHVlTm9ybWFsOgotICAgICAgICByZXR1cm4gRm9udFNtYWxsQ2Fwczo6T2ZmOworICAgICAgICBy
ZXR1cm4gUEFMOjpGb250U21hbGxDYXBzOjpPZmY7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGb250U21h
bGxDYXBzOjpPZmY7CisgICAgcmV0dXJuIFBBTDo6Rm9udFNtYWxsQ2Fwczo6T2ZmOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVGV4
dFJlbmRlcmluZ01vZGUgZSkKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShQQUw6OlRleHRSZW5kZXJpbmdNb2RlIGUpCiAgICAgOiBDU1NWYWx1
ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlw
ZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFRleHRSZW5kZXJp
bmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzoKKyAgICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01v
ZGU6OkF1dG9UZXh0UmVuZGVyaW5nOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1
ZUF1dG87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGlt
aXplU3BlZWQ6CisgICAgY2FzZSBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNwZWVk
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU9wdGltaXplU3BlZWQ7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0
eToKKyAgICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0eToK
ICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVPcHRpbWl6ZUxlZ2liaWxpdHk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6Okdlb21ldHJpY1ByZWNp
c2lvbjoKKyAgICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Okdlb21ldHJpY1ByZWNpc2lv
bjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVHZW9tZXRyaWNQcmVjaXNpb247
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFRleHRSZW5kZXJpbmdNb2RlKCkgY29uc3QKK3RlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OlRleHRSZW5kZXJpbmdNb2Rl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1ZUlEKCkpOwogCiAgICAgc3dpdGNoIChtX3Zh
bHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgcmV0dXJuIFRl
eHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzsKKyAgICAgICAgcmV0dXJuIFBBTDo6
VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOwogICAgIGNhc2UgQ1NTVmFsdWVP
cHRpbWl6ZVNwZWVkOgotICAgICAgICByZXR1cm4gVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXpl
U3BlZWQ7CisgICAgICAgIHJldHVybiBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNw
ZWVkOwogICAgIGNhc2UgQ1NTVmFsdWVPcHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgIHJldHVy
biBUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5OworICAgICAgICByZXR1cm4g
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5OwogICAgIGNhc2UgQ1NT
VmFsdWVHZW9tZXRyaWNQcmVjaXNpb246Ci0gICAgICAgIHJldHVybiBUZXh0UmVuZGVyaW5nTW9k
ZTo6R2VvbWV0cmljUHJlY2lzaW9uOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0UmVuZGVyaW5n
TW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0UmVuZGVy
aW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmc7CisgICAgcmV0dXJuIFBBTDo6VGV4dFJlbmRlcmlu
Z01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoSHlwaGVucyBoeXBoZW5zKQpAQCAtNTQ0NSwx
OCArNTQ0NSwxOCBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0
b3IgQXBwbGVQYXlCdXR0b25UeXBlKCkgY29uc3QKIH0KICNlbmRpZgogCi10ZW1wbGF0ZTw+IGlu
bGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udFZhcmlhbnRQb3Np
dGlvbiBwb3NpdGlvbikKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQ
cmltaXRpdmVWYWx1ZShQQUw6OkZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24pCiAgICAgOiBD
U1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NV
bml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
UG9zaXRpb246Ok5vcm1hbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2Ny
aXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3JpcHQ6CiAgICAg
ICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlU3ViOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVTdXBlcjsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU0NjUsNDcg
KzU0NjUsNDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1p
dGl2ZVZhbHVlKEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXQKICAgICB9CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFyaWFudFBvc2l0aW9u
KCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQ
QUw6OkZvbnRWYXJpYW50UG9zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQo
KSk7CiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOworICAgICAg
ICByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7CiAgICAgY2FzZSBDU1NW
YWx1ZVN1YjoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDsK
KyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0OwogICAg
IGNhc2UgQ1NTVmFsdWVTdXBlcjoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50UG9zaXRpb246
OlN1cGVyc2NyaXB0OworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpT
dXBlcnNjcmlwdDsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1h
bDsKKyAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250
VmFyaWFudENhcHMgY2FwcykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShQQUw6OkZvbnRWYXJpYW50Q2FwcyBjYXBzKQogICAgIDogQ1NTVmFs
dWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5
cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNoIChjYXBzKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6
CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50Q2Fwczo6U21hbGw6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlU21h
bGxDYXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlQWxsU21hbGxDYXBzOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dENhcHM6OlBldGl0ZToKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVQZXRpdGVD
YXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRl
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKICAgICAgICAgbV92
YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBbGxQZXRpdGVDYXBzOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpVbmljYXNlOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVVuaWNh
c2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CiAgICAgICAgIG1fdmFsdWUu
dmFsdWVJRCA9IENTU1ZhbHVlVGl0bGluZ0NhcHM7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CkBAIC01NTE0LDQwICs1NTE0LDQwIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFudENhcHMgY2FwcykKICAgICB9CiB9
CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFy
aWFudENhcHMoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFBBTDo6Rm9udFZhcmlhbnRDYXBzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1
ZUlEKCkpOwogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1
ZU5vcm1hbDoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOworICAgICAg
ICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDsKICAgICBjYXNlIENTU1ZhbHVl
U21hbGxDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpTbWFsbDsKKyAgICAg
ICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDsKICAgICBjYXNlIENTU1ZhbHVl
QWxsU21hbGxDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDsK
KyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDsKICAgICBjYXNl
IENTU1ZhbHVlUGV0aXRlQ2FwczoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50Q2Fwczo6UGV0
aXRlOworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZTsKICAgICBj
YXNlIENTU1ZhbHVlQWxsUGV0aXRlQ2FwczoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBl
dGl0ZTsKICAgICBjYXNlIENTU1ZhbHVlVW5pY2FzZToKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJp
YW50Q2Fwczo6VW5pY2FzZTsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpV
bmljYXNlOwogICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAgICAgcmV0dXJuIEZv
bnRWYXJpYW50Q2Fwczo6VGl0bGluZzsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRD
YXBzOjpUaXRsaW5nOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw7
CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWw7CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFu
dEFsdGVybmF0ZXMgYWx0ZXJuYXRlcykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHRlcm5h
dGVzKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0UHJpbWl0aXZl
VW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNoIChhbHRlcm5h
dGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CiAgICAgICAgIG1fdmFsdWUudmFs
dWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVIaXN0b3JpY2FsRm9ybXM7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBA
IC01NTU2LDMwICs1NTU2LDMwIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0CiAgICAgfQogfQog
Ci10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFZhcmlh
bnRBbHRlcm5hdGVzKCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsdWVJRCgpKTsKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNh
c2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHJldHVybiBGb250VmFyaWFudEFsdGVybmF0ZXM6
Ok5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3Jt
YWw7CiAgICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxGb3JtczoKLSAgICAgICAgcmV0dXJuIEZv
bnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOworICAgICAgICByZXR1cm4gUEFM
OjpGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOworICAgIHJldHVybiBQQUw6OkZvbnRW
YXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udE9wdGljYWxTaXppbmcgc2l6aW5nKQor
dGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBB
TDo6Rm9udE9wdGljYWxTaXppbmcgc2l6aW5nKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xh
c3MpCiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9J
RCk7CiAgICAgc3dpdGNoIChzaXppbmcpIHsKLSAgICBjYXNlIEZvbnRPcHRpY2FsU2l6aW5nOjpF
bmFibGVkOgorICAgIGNhc2UgUEFMOjpGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZDoKICAgICAg
ICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZDoKKyAgICBjYXNlIFBBTDo6Rm9udE9wdGlj
YWxTaXppbmc6OkRpc2FibGVkOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5v
bmU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC01NTg4LDE5ICs1NTg4LDE5IEBA
IHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShG
b250T3B0aWNhbFNpemluZyBzaXppbmcpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udE9wdGljYWxTaXppbmcoKSBjb25zdAordGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udE9wdGlj
YWxTaXppbmcoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAgICAgc3dpdGNo
IChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgcmV0
dXJuIEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkOworICAgICAgICByZXR1cm4gUEFMOjpGb250
T3B0aWNhbFNpemluZzo6RW5hYmxlZDsKICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAg
cmV0dXJuIEZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZDsKKyAgICAgICAgcmV0dXJuIFBBTDo6
Rm9udE9wdGljYWxTaXppbmc6OkRpc2FibGVkOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udE9wdGlj
YWxTaXppbmc6OkVuYWJsZWQ7CisgICAgcmV0dXJuIFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVu
YWJsZWQ7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShGb250TG9hZGluZ0JlaGF2aW9yIGJlaGF2aW9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHkuaAppbmRleCBiYjA3Zjc3ZWE2ZmY1ODdkMDQwZDc3MDlmMDMxMzc0OWI4MDNkNDg0Li4z
ZWRiNmE0MGM3Y2FlNWQ4ZWVkMWM5MjU3Y2VmMDI4Yjc1MTQwYTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHkuaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNp
bmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHdyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0KCk7CiAKLSAgICBzdGF0aWMgQ1NTUHJv
cGVydHlJRCByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBUZXh0
RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CisgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgcmVzb2x2
ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUEFMOjpUZXh0RGlyZWN0aW9u
LCBQQUw6OldyaXRpbmdNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBpc0luaGVyaXRlZFByb3BlcnR5
KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBhbGlhc2VzRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCk7CiAgICAgc3RhdGljIGJvb2wgaXNEaXJlY3Rpb25Bd2FyZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRG
b250RmFjZS5jcHAKaW5kZXggZTZhNmVjMWE1Y2JlZDlkNDI1ZmJkMTBlOWUwYmIwYjQyOWEwYmRl
My4uYTllZmQ4OGIxNjUxMzdhMDdkNmZjYTJlOGY3YTBlOTZjM2VhNzIzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0xMjYsOCArMTI2LDggQEAg
Rm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbmdlcyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIAogICAgICAgICBhdXRvIHNlbGVjdGlvbkNhcGFiaWxp
dGllcyA9ICpmYWNlLT5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7CiAKLSAgICAgICAgYm9v
bCBzeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlwdGlvbi5mb250U3ludGhlc2lzKCkgJiBGb250
U3ludGhlc2lzV2VpZ2h0KSAmJiAhaXNGb250V2VpZ2h0Qm9sZChzZWxlY3Rpb25DYXBhYmlsaXRp
ZXMud2VpZ2h0Lm1heGltdW0pICYmIGlzRm9udFdlaWdodEJvbGQoZGVzaXJlZFJlcXVlc3Qud2Vp
Z2h0KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAoZm9udERlc2NyaXB0aW9uLmZv
bnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkgJiYgIWlzSXRhbGljKHNlbGVjdGlv
bkNhcGFiaWxpdGllcy5zbG9wZS5tYXhpbXVtKSAmJiBpc0l0YWxpYyhkZXNpcmVkUmVxdWVzdC5z
bG9wZSk7CisgICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9IChmb250RGVzY3JpcHRpb24uZm9u
dFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAhaXNGb250V2VpZ2h0
Qm9sZChzZWxlY3Rpb25DYXBhYmlsaXRpZXMud2VpZ2h0Lm1heGltdW0pICYmIGlzRm9udFdlaWdo
dEJvbGQoZGVzaXJlZFJlcXVlc3Qud2VpZ2h0KTsKKyAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFs
aWMgPSAoZm9udERlc2NyaXB0aW9uLmZvbnRTeW50aGVzaXMoKSAmIFBBTDo6Rm9udFN5bnRoZXNp
c1N0eWxlKSAmJiAhaXNJdGFsaWMoc2VsZWN0aW9uQ2FwYWJpbGl0aWVzLnNsb3BlLm1heGltdW0p
ICYmIGlzSXRhbGljKGRlc2lyZWRSZXF1ZXN0LnNsb3BlKTsKIAogICAgICAgICAvLyBNZXRyaWNz
IHVzZWQgZm9yIGxheW91dCBjb21lIGZyb20gRm9udFJhbmdlczo6Zm9udEZvckZpcnN0UmFuZ2Uo
KSwgd2hpY2ggYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmb250IGlzIG5vbi1udWxsLgogICAgICAg
ICBhdXRvIGZvbnRBY2Nlc3NvciA9IENTU0ZvbnRBY2Nlc3Nvcjo6Y3JlYXRlKGZhY2UsIGZvbnRE
ZXNjcmlwdGlvbiwgZm9udFBhbGV0dGVWYWx1ZXMsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAppbmRleCBlZmZkNjA3YzM0NmY5YmNmYmM5YzI4
ODliZjgzMTY5NGRhMzQwMzA1Li42MzdhMDQ3OGIxYjIzZGIxZGNjZmFlNDk5YTc4YThlODFhOGJj
YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKQEAgLTI5OCw4ICsyOTgsOCBAQCBTdHJpbmcg
Rm9udEZhY2U6OnN0eWxlKCkgY29uc3QKICAgICBpZiAoIXN0eWxlV3JhcHBlZCkKICAgICAgICAg
cmV0dXJuICJub3JtYWwiX3M7CiAgICAgYXV0byBzdHlsZSA9IHN0eWxlV3JhcHBlZC52YWx1ZSgp
OwotICAgIGF1dG8gbWluaW11bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZy
b21TdHlsZVZhbHVlKHN0eWxlLm1pbmltdW0sIEZvbnRTdHlsZUF4aXM6Oml0YWwpOwotICAgIGF1
dG8gbWF4aW11bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZh
bHVlKHN0eWxlLm1heGltdW0sIEZvbnRTdHlsZUF4aXM6Oml0YWwpOworICAgIGF1dG8gbWluaW11
bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0eWxl
Lm1pbmltdW0sIFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbCk7CisgICAgYXV0byBtYXhpbXVtID0g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Zm9udFN0eWxlRnJvbVN0eWxlVmFsdWUoc3R5bGUubWF4
aW11bSwgUEFMOjpGb250U3R5bGVBeGlzOjppdGFsKTsKIAogICAgIGlmIChtaW5pbXVtLmdldCgp
LmVxdWFscyhtYXhpbXVtLmdldCgpKSkKICAgICAgICAgcmV0dXJuIG1pbmltdW0tPmNzc1RleHQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxp
bmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oCmlu
ZGV4IGZkODdjOTAwYjM2NTVmYWZlNzE5ZWZkMGNhZGM0MDNjNGQ3MjVjODQuLmEwMWUzODYzYjU1
N2E1YjgxOTdjNDg5MDdmMTM1Y2NmMzhkNjhjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaApAQCAtMTIxLDEyICsxMjEsMTIgQEAgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmb250U3RyZXRjaFZhbHVlKENTU1Zh
bHVlSUQgdmFsdWUpCiAgICAgfQogfQogCi1pbmxpbmUgc3RkOjpvcHRpb25hbDxDU1NWYWx1ZUlE
PiBmb250U3R5bGVLZXl3b3JkKHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBzdHls
ZSwgRm9udFN0eWxlQXhpcyBheGlzKQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8Q1NTVmFsdWVJRD4g
Zm9udFN0eWxlS2V5d29yZChzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gc3R5bGUs
IFBBTDo6Rm9udFN0eWxlQXhpcyBheGlzKQogewogICAgIGlmICghc3R5bGUgfHwgc3R5bGUudmFs
dWUoKSA9PSBub3JtYWxJdGFsaWNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgaWYgKHN0eWxlLnZhbHVlKCkgPT0gaXRhbGljVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIGF4aXMgPT0gRm9udFN0eWxlQXhpczo6aXRhbCA/IENTU1ZhbHVlSXRhbGljIDogQ1NTVmFs
dWVPYmxpcXVlOworICAgICAgICByZXR1cm4gYXhpcyA9PSBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0
YWwgPyBDU1NWYWx1ZUl0YWxpYyA6IENTU1ZhbHVlT2JsaXF1ZTsKICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuY3BwCmlu
ZGV4IDZkZTY5ZWVhOGJhZDgyMWJhYjljZmYyNmJmNjA2NTViZDViOTBjZTMuLjMxMWI5MDhmYzk1
MWU1MTliMjkxMDY2ZWEzYzNkZmQzZjkyZTM2MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250
VmFyaWFudEJ1aWxkZXIuY3BwCkBAIC0yOSw0MyArMjksNDMgQEAKICNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlUG9vbC5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1Rl
eHRGbGFncy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRWYXJpYW50TGlnYXR1cmVz
VmFsdWVzIGV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudExpZ2F0
dXJlcyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMg
Y29tbW9uID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyBkaXNjcmV0aW9uYXJ5ID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAg
ICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9
IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7CisgICAgUEFMOjpGb250VmFyaWFudExpZ2F0
dXJlcyBjb21tb24gPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7CisgICAgUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5ID0gUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsOworICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNh
bCA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gUEFMOjpGb250VmFyaWFudExpZ2F0
dXJlczo6Tm9ybWFsOwogCiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAg
ICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgp
KS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJl
czoKLSAgICAgICAgICAgICAgICBjb21tb24gPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87Cisg
ICAgICAgICAgICAgICAgY29tbW9uID0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm87CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGln
YXR1cmVzOgotICAgICAgICAgICAgICAgIGNvbW1vbiA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZ
ZXM7CisgICAgICAgICAgICAgICAgY29tbW9uID0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6
WWVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
RGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5ID0g
Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAgICAgICAgICAgICAgIGRpc2NyZXRpb25hcnkg
PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAg
ICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOworICAg
ICAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZ
ZXM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9I
aXN0b3JpY2FsTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGhpc3RvcmljYWwgPSBGb250VmFy
aWFudExpZ2F0dXJlczo6Tm87CisgICAgICAgICAgICAgICAgaGlzdG9yaWNhbCA9IFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgaGlz
dG9yaWNhbCA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7CisgICAgICAgICAgICAgICAgaGlz
dG9yaWNhbCA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb250ZXh0dWFsOgotICAgICAgICAg
ICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsK
KyAgICAgICAgICAgICAgICBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9IFBBTDo6Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OlllczsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb0NvbnRleHR1YWw6Ci0gICAgICAgICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0
ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87CisgICAgICAgICAgICAgICAgY29udGV4dHVh
bEFsdGVybmF0ZXMgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC03NywxMCArNzcsMTAgQEAgRm9udFZhcmlhbnRMaWdhdHVyZXNW
YWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgICAgIGNvbW1vbiA9IEZvbnRWYXJpYW50TGln
YXR1cmVzOjpObzsKLSAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm87Ci0gICAgICAgICAgICBoaXN0b3JpY2FsID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vOwotICAgICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0ZXMgPSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm87CisgICAgICAgICAgICBjb21tb24gPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
OjpObzsKKyAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpObzsKKyAgICAgICAgICAgIGhpc3RvcmljYWwgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpObzsKKyAgICAgICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gUEFMOjpGb250VmFy
aWFudExpZ2F0dXJlczo6Tm87CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODgsNDMgKzg4LDQzIEBAIEZv
bnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyhjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gRm9udFZh
cmlhbnRMaWdhdHVyZXNWYWx1ZXMoY29tbW9uLCBkaXNjcmV0aW9uYXJ5LCBoaXN0b3JpY2FsLCBj
b250ZXh0dWFsQWx0ZXJuYXRlcyk7CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVy
ZXNWYWx1ZXMoY29tbW9uLCBkaXNjcmV0aW9uYXJ5LCBoaXN0b3JpY2FsLCBjb250ZXh0dWFsQWx0
ZXJuYXRlcyk7CiB9CiAKLUZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlh
bnROdW1lcmljKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK1BBTDo6Rm9udFZhcmlhbnROdW1lcmlj
VmFsdWVzIGV4dHJhY3RGb250VmFyaWFudE51bWVyaWMoY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewotICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUgPSBGb250VmFyaWFudE51bWVy
aWNGaWd1cmU6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmcg
PSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb24gZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFs
OwotICAgIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWw6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBz
bGFzaGVkWmVybyA9IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw7CisgICAg
UEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmUgZmlndXJlID0gUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmU6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcg
c3BhY2luZyA9IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsOworICAgIFBB
TDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb24gPSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw7CisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRp
bmFsIG9yZGluYWwgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDsKKyAg
ICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvID0gUEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOwogCiAgICAgaWYgKGlzPENTU1Zh
bHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENT
U1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMaW5pbmdOdW1zOgotICAgICAgICAgICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50
TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczsKKyAgICAgICAgICAgICAgICBmaWd1cmUgPSBQ
QUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPbGRzdHlsZU51bXM6Ci0gICAg
ICAgICAgICAgICAgZmlndXJlID0gRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51
bWJlcnM7CisgICAgICAgICAgICAgICAgZmlndXJlID0gUEFMOjpGb250VmFyaWFudE51bWVyaWNG
aWd1cmU6Ok9sZFN0eWxlTnVtYmVyczsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxOdW1zOgotICAgICAgICAgICAgICAgIHNwYWNp
bmcgPSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOworICAg
ICAgICAgICAgICAgIHNwYWNpbmcgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlBy
b3BvcnRpb25hbE51bWJlcnM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlVGFidWxhck51bXM6Ci0gICAgICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOworICAgICAgICAgICAgICAgIHNw
YWNpbmcgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZURpYWdvbmFs
RnJhY3Rpb25zOgotICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gRm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOworICAgICAgICAgICAgICAgIGZyYWN0aW9uID0g
UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3RhY2tlZEZyYWN0
aW9uczoKLSAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uOjpTdGFja2VkRnJhY3Rpb25zOworICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gUEFMOjpG
b250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcmRpbmFsOgotICAgICAgICAg
ICAgICAgIG9yZGluYWwgPSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM7CisgICAgICAg
ICAgICAgICAgb3JkaW5hbCA9IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsYXNoZWRa
ZXJvOgotICAgICAgICAgICAgICAgIHNsYXNoZWRaZXJvID0gRm9udFZhcmlhbnROdW1lcmljU2xh
c2hlZFplcm86OlllczsKKyAgICAgICAgICAgICAgICBzbGFzaGVkWmVybyA9IFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljU2xhc2hlZFplcm86OlllczsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0xMzQsNDQgKzEzNCw0NCBAQCBGb250VmFyaWFudE51bWVyaWNWYWx1ZXMgZXh0cmFjdEZv
bnRWYXJpYW50TnVtZXJpYyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgfSBlbHNlIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogCi0g
ICAgcmV0dXJuIEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlcyhmaWd1cmUsIHNwYWNpbmcsIGZyYWN0
aW9uLCBvcmRpbmFsLCBzbGFzaGVkWmVybyk7CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljVmFsdWVzKGZpZ3VyZSwgc3BhY2luZywgZnJhY3Rpb24sIG9yZGluYWwsIHNsYXNoZWRa
ZXJvKTsKIH0KIAotRm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50
RWFzdEFzaWFuKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK1BBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5WYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudCA9IEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lk
dGggd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw7Ci0gICAgRm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5IHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1h
bDsKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50ID0gUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuV2lkdGggd2lkdGggPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5v
cm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5ID0gUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDsKIAogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+
KHZhbHVlKSkgewogICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KHZhbHVlKSkgewogICAgICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oaXRlbS5nZXQoKSkudmFsdWVJRCgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
SmlzNzg6Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6SmlzNzg7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50OjpKaXM3ODsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVKaXM4MzoKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0g
UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUppczkwOgotICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOworICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlSmlzMDQ6
Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6
SmlzMDQ7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50OjpKaXMwNDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVTaW1wbGlmaWVkOgotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ7CisgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRyYWRpdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRy
YWRpdGlvbmFsOworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlRnVsbFdpZHRoOgotICAgICAgICAgICAgICAgIHdpZHRoID0g
Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKKyAgICAgICAgICAgICAgICB3aWR0aCA9
IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxXaWR0aDoKLSAgICAg
ICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25h
bDsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aDo6UHJvcG9ydGlvbmFsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVJ1Ynk6Ci0gICAgICAgICAgICAgICAgcnVieSA9IEZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieTo6WWVzOworICAgICAgICAgICAgICAgIHJ1YnkgPSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6WWVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE4MSwxMCAr
MTgxLDEwIEBAIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudEVh
c3RBc2lhbihjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgfSBlbHNlIGlmIChpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogCi0gICAgcmV0dXJu
IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzKHZhcmlhbnQsIHdpZHRoLCBydWJ5KTsKKyAgICBy
ZXR1cm4gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcyh2YXJpYW50LCB3aWR0aCwgcnVi
eSk7CiB9CiAKLVJlZjxDU1NWYWx1ZT4gY29tcHV0ZUZvbnRWYXJpYW50KGNvbnN0IEZvbnRWYXJp
YW50U2V0dGluZ3MmIHZhcmlhbnRTZXR0aW5ncykKK1JlZjxDU1NWYWx1ZT4gY29tcHV0ZUZvbnRW
YXJpYW50KGNvbnN0IFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5ncyYgdmFyaWFudFNldHRpbmdzKQog
ewogICAgIGlmICh2YXJpYW50U2V0dGluZ3MuaXNBbGxOb3JtYWwoKSkKICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9ybWFsKTsKQEAgLTE5MiwxNzggKzE5MiwxNzggQEAgUmVmPENTU1ZhbHVlPiBjb21wdXRlRm9u
dFZhcmlhbnQoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgdmFyaWFudFNldHRpbmdzKQogICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKIAogICAg
IHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmNvbW1vbkxpZ2F0dXJlcykgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0
dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlcykpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29tbW9uTGln
YXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNl
dHRpbmdzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5n
ZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFu
dFNldHRpbmdzLmhpc3RvcmljYWxMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5n
ZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1
cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRp
bmdzLmNvbnRleHR1YWxBbHRlcm5hdGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJl
czo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAg
Y2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIGxpc3QuZ2V0KCku
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQ29udGV4dHVhbCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TGlnYXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgog
ICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29udGV4dHVhbCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5wb3NpdGlvbikgewotICAgIGNh
c2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dFBvc2l0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRQ
b3NpdGlvbjo6U3Vic2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpT
dWJzY3JpcHQ6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3ViKSk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgogICAgICAgICBsaXN0LmdldCgp
LmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVN1cGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFy
aWFudFNldHRpbmdzLmNhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dENhcHM6OlNtYWxsOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2FwcykpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQWxsU21hbGxDYXBzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpQZXRpdGU6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBldGl0ZUNhcHMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpBbGxQZXRpdGU6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsUGV0aXRlQ2Fw
cykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgogICAgICAgICBsaXN0Lmdl
dCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVVuaWNhc2UpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dENhcHM6OlRpdGxpbmc6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoK
ICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUaXRsaW5nQ2FwcykpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljRmlndXJlKSB7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CiAgICAgICAgIGxpc3Qu
Z2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTGluaW5nTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVyczoKICAgICAgICAgbGlzdC5nZXQo
KS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVPbGRzdHlsZU51bXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dp
dGNoICh2YXJpYW50U2V0dGluZ3MubnVtZXJpY1NwYWNpbmcpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZzo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6CiAgICAgICAgIGxpc3Qu
Z2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlUHJvcG9ydGlvbmFsTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAgICAgICAgbGlz
dC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVUYWJ1bGFyTnVtcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljRnJhY3Rpb24pIHsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CiAgICAgICAg
IGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlRGlhZ29uYWxGcmFjdGlvbnMpKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnM6
CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9ucykpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljT3JkaW5h
bCkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlT3JkaW5hbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlh
bnRTZXR0aW5ncy5udW1lcmljU2xhc2hlZFplcm8pIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljU2xhc2hlZFplcm86OlllczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU2xhc2hlZFplcm86OlllczoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbGFzaGVkWmVy
bykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5n
cy5hbHRlcm5hdGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUhpc3RvcmljYWxGb3JtcykpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5lYXN0QXNpYW5WYXJpYW50KSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODoKICAgICAgICAgbGlzdC5n
ZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVKaXM3OCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzODMpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczkw
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczkwKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVK
aXMwNCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6U2ltcGxpZmllZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpTaW1wbGlmaWVkOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNpbXBsaWZpZWQpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRy
YWRpdGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRy
YWRpdGlvbmFsOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRyYWRpdGlvbmFsKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lh
bldpZHRoKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgogICAgICAgICBsaXN0Lmdl
dCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUZ1bGxXaWR0aCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVByb3BvcnRpb25hbFdpZHRoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRj
aCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblJ1YnkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50
RWFzdEFzaWFuUnVieTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lh
blJ1Ynk6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblJ1Ynk6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZ
ZXM6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUnVieSkpOwogICAgICAgICBicmVhazsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRCdWlsZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRCdWlsZGVyLmgKaW5kZXggNjkxYTY5OWEz
ZDFhMjYxYjBiZWI4NjBiZGUzYmQxN2YzMTg0ZmE4Ni4uNDdjN2YwOWY5ZWU3NzBiOTExM2Q2ZmYw
OWQ4MjA2MTBmYjc1OTEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYXJp
YW50QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIu
aApAQCAtMjcsMTggKzI3LDIxIEBACiAKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTVmFsdWU7Ci1zdHJ1Y3QgRm9udFZhcmlhbnRTZXR0aW5n
czsKK25hbWVzcGFjZSBQQUwgewogc3RydWN0IEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzOwog
c3RydWN0IEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlczsKIHN0cnVjdCBGb250VmFyaWFudEVhc3RB
c2lhblZhbHVlczsKK3N0cnVjdCBGb250VmFyaWFudFNldHRpbmdzOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENTU1ZhbHVlOwogCi1Gb250VmFyaWFudExpZ2F0dXJlc1ZhbHVl
cyBleHRyYWN0Rm9udFZhcmlhbnRMaWdhdHVyZXMoY29uc3QgQ1NTVmFsdWUmKTsKLUZvbnRWYXJp
YW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKGNvbnN0IENTU1ZhbHVl
Jik7Ci1Gb250VmFyaWFudEVhc3RBc2lhblZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnRFYXN0QXNp
YW4oY29uc3QgQ1NTVmFsdWUmKTsKK1BBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXMgZXh0
cmFjdEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENTU1ZhbHVlJik7CitQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKGNvbnN0IENTU1ZhbHVl
Jik7CitQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudEVh
c3RBc2lhbihjb25zdCBDU1NWYWx1ZSYpOwogCi1SZWY8Q1NTVmFsdWU+IGNvbXB1dGVGb250VmFy
aWFudChjb25zdCBGb250VmFyaWFudFNldHRpbmdzJik7CitSZWY8Q1NTVmFsdWU+IGNvbXB1dGVG
b250VmFyaWFudChjb25zdCBQQUw6OkZvbnRWYXJpYW50U2V0dGluZ3MmKTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBs
IGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCmluZGV4IGY5NDE5MTc0ZjVhMDllNWQw
ZmE5ZmU1ZDZkZTZlYmFjNTA0MmJiODAuLmQzYmUzYmEyY2UzZGY1ZWYwYjY1YTZmZTA1NzA5MzI5
OGE3ODQ5N2EgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKQEAgLTcxNSw5ICs3MTUsOSBAQCBwcmlu
dCBHUEVSRiA8PCAiRU9GIjsKICAgICB9CiB9CiAKLUNTU1Byb3BlcnR5SUQgQ1NTUHJvcGVydHk6
OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorQ1NTUHJv
cGVydHlJRCBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBQQUw6Oldy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewotICAgIGNvbnN0IFRleHRGbG93JiB0ZXh0ZmxvdyA9
IG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsKKyAgICBjb25zdCBQQUw6OlRl
eHRGbG93JiB0ZXh0ZmxvdyA9IG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsK
ICAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKIEVPRgogCkBAIC03MjUsNyArNzI1LDcgQEAgZm9y
IG15ICRsb2dpY2FsUHJvcGVydHlHcm91cCAodmFsdWVzICVsb2dpY2FsUHJvcGVydHlHcm91cHMp
IHsKICAgICB3aGlsZSAobXkgKCRyZXNvbHZlciwgJG5hbWUpID0gZWFjaCAleyAkbG9naWNhbFBy
b3BlcnR5R3JvdXAtPnsibG9naWNhbCJ9IH0pIHsKICAgICAgICAgbXkgJGtpbmQgPSAkbG9naWNh
bFByb3BlcnR5R3JvdXAtPnsia2luZCJ9OwogICAgICAgICBteSAka2luZElkID0gbmFtZVRvSWQo
JGtpbmQpOwotICAgICAgICBteSAkcmVzb2x2ZXJFbnVtID0gIkxvZ2ljYWxCb3giIC4gJGtpbmRJ
ZCAuICI6OiIgLiBuYW1lVG9JZCgkcmVzb2x2ZXIpOworICAgICAgICBteSAkcmVzb2x2ZXJFbnVt
ID0gIlBBTDo6TG9naWNhbEJveCIgLiAka2luZElkIC4gIjo6IiAuIG5hbWVUb0lkKCRyZXNvbHZl
cik7CiAgICAgICAgIG15IEBwaHlzaWNhbHM7CiAgICAgICAgIGlmICgka2luZCBlcSAic2lkZSIp
IHsKICAgICAgICAgICAgIEBwaHlzaWNhbHMgPSAoInRvcCIsICJyaWdodCIsICJib3R0b20iLCAi
bGVmdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKaW5kZXggZmUzYTEyNzNi
N2NiZTVhNjRkYzIyYTQwZmYwMDFkNDkwMTdjZTUwOS4uZWQyZjcwZWVmYmMwNTcwNDQyN2RmNzI2
ODc4NTQzNWNhZjgzMjQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Lmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IDk4
MTAwMjUwMDU2N2EyZjM2Nzg1NWRlYmE1Y2NmYjE3M2M4YzBlZWEuLjllOTcxMjQ4OTkzMDFlNmU1
MjM3Yjg5OWY2MWZiYmRiYWNkZWRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC02OTUsOSArNjk1LDkgQEAgc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50RWFzdEFzaWFuKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAKICAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+IHZhcmlhbnQ7Ci0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRo
PiB3aWR0aDsKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4gcnVi
eTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2
YXJpYW50OworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRo
PiB3aWR0aDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
PiBydWJ5OwogICAgIAogICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAo
cmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQpAQCAtNzA5LDQ3ICs3MDksNDcgQEAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50RWFzdEFzaWFuKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgICAgICBjYXNlIENTU1ZhbHVlSmlzNzg6CiAgICAg
ICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4Owor
ICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpK
aXM3ODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlSmlzODM6CiAg
ICAgICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczgz
OworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpKaXM4MzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6
CiAgICAgICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okpp
czkwOworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM5MDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlSmlz
MDQ6CiAgICAgICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OkppczA0OworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpKaXMwNDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVl
U2ltcGxpZmllZDoKICAgICAgICAgICAgIGlmICh2YXJpYW50KQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6U2ltcGxpZmllZDsKKyAgICAgICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmllZDsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1ZhbHVlVHJhZGl0aW9uYWw6CiAgICAgICAgICAgICBpZiAodmFyaWFudCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHZhcmlhbnQgPSBG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOworICAgICAgICAgICAgdmFy
aWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpUcmFkaXRpb25hbDsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlRnVsbFdpZHRoOgogICAgICAg
ICAgICAgaWYgKHdpZHRoKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOworICAgICAgICAg
ICAgd2lkdGggPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgogICAg
ICAgICAgICAgaWYgKHdpZHRoKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWw7
CisgICAgICAgICAgICB3aWR0aCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJv
cG9ydGlvbmFsOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVSdWJ5
OgogICAgICAgICAgICAgaWYgKHJ1YnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM7CisgICAg
ICAgICAgICBydWJ5ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC03NTgsNDQgKzc1OCw0NCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
Rm9udFZhcmlhbnRFYXN0QXNpYW4oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgfQogCi0gICAgc3dpdGNo
ICh2YXJpYW50LnZhbHVlX29yKEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsKSkg
ewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgc3dp
dGNoICh2YXJpYW50LnZhbHVlX29yKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpO
b3JtYWwpKSB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9y
bWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
Nzg6CiAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzNzgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOgogICAgICAgICB2YWx1ZXMtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUppczgzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpKaXM5MDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpKaXM5MDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CiAgICAgICAgIHZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlSmlzMDQpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6U2ltcGxpZmllZDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTaW1wbGlmaWVk
KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpUcmFkaXRpb25hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpUcmFkaXRpb25hbDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUcmFkaXRpb25hbCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHdpZHRoLnZhbHVlX29yKEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6Ok5vcm1hbDoKKyAgICBzd2l0Y2ggKHdpZHRoLnZhbHVlX29yKFBBTDo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsKSkgeworICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6RnVsbDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGdWxsV2lkdGgpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0
aW9uYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRp
b25hbDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQcm9wb3J0aW9uYWxXaWR0aCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIHN3aXRjaCAocnVieS52YWx1ZV9vcihGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6Tm9ybWFsOgorICAgIHN3aXRjaCAocnVieS52YWx1ZV9vcihQQUw6OkZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsKSkgeworICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudEVhc3RBc2lhblJ1Ynk6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpZZXM6CiAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUnVieSkpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25E
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
RGF0YS5jcHAKaW5kZXggZGNhZWE4NjdkM2YzNjc3ZmI5MTJjZjNiNTg1OTZhMzIyMWJkZjQxNi4u
ZWJhZmUzZmFjNjNiOTcxYjkxOWU5MWZiNTBjYzEyZjFiZDYzZDFjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3Bw
CkBAIC0xMDAsMTUgKzEwMCwxNSBAQCBSZWN0RWRnZXM8Qm9yZGVyRWRnZT4gY2FsY3VsYXRlQm9y
ZGVyRWRnZXMoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCBwaXhlbAogICAgIH07CiB9
CiAKLXN0ZDo6cGFpcjxCb3hTaWRlLCBCb3hTaWRlPiBhZGphY2VudFNpZGVzRm9yU2lkZShCb3hT
aWRlIHNpZGUpCitzdGQ6OnBhaXI8UEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGU+IGFkamFjZW50
U2lkZXNGb3JTaWRlKFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIHN3aXRjaCAoc2lkZSkgewot
ICAgIGNhc2UgQm94U2lkZTo6VG9wOiByZXR1cm4geyBCb3hTaWRlOjpMZWZ0LCBCb3hTaWRlOjpS
aWdodCB9OwotICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOiByZXR1cm4geyBCb3hTaWRlOjpMZWZ0
LCBCb3hTaWRlOjpSaWdodCB9OwotICAgIGNhc2UgQm94U2lkZTo6TGVmdDogcmV0dXJuIHsgQm94
U2lkZTo6VG9wLCBCb3hTaWRlOjpCb3R0b20gfTsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OiBy
ZXR1cm4geyBCb3hTaWRlOjpUb3AsIEJveFNpZGU6OkJvdHRvbSB9OworICAgIGNhc2UgUEFMOjpC
b3hTaWRlOjpUb3A6IHJldHVybiB7IFBBTDo6Qm94U2lkZTo6TGVmdCwgUEFMOjpCb3hTaWRlOjpS
aWdodCB9OworICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206IHJldHVybiB7IFBBTDo6Qm94
U2lkZTo6TGVmdCwgUEFMOjpCb3hTaWRlOjpSaWdodCB9OworICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpMZWZ0OiByZXR1cm4geyBQQUw6OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpCb3R0b20g
fTsKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6IHJldHVybiB7IFBBTDo6Qm94U2lkZTo6
VG9wLCBQQUw6OkJveFNpZGU6OkJvdHRvbSB9OwogICAgIH0KLSAgICByZXR1cm4geyBCb3hTaWRl
OjpMZWZ0LCBCb3hTaWRlOjpSaWdodCB9OworICAgIHJldHVybiB7IFBBTDo6Qm94U2lkZTo6TGVm
dCwgUEFMOjpCb3hTaWRlOjpSaWdodCB9OwogfQogCiBCb3hEZWNvcmF0aW9uRGF0YTo6Qm94RGVj
b3JhdGlvbkRhdGEoKSA9IGRlZmF1bHQ7CkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBCb3hEZWNv
cmF0aW9uRGF0YTo6aGFzQm9yZGVyKCkgY29uc3QKICAgICBpZiAoaGFzQm9yZGVySW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVz
KSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGF1
dG8mIGVkZ2UgPSBtX2JvcmRlckVkZ2VzW3NpZGVdOwogICAgICAgICBpZiAoZWRnZS5zdHlsZSgp
ICE9IEJvcmRlclN0eWxlOjpOb25lICYmIGVkZ2Uud2lkdGgoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTM1LDcgKzEzNSw3IEBAIGJvb2wgQm94RGVjb3JhdGlvbkRhdGE6OmJvcmRl
ck9ic2N1cmVzQmFja2dyb3VuZCgpIGNvbnN0CiAgICAgLy8gQmFpbCBpZiB3ZSBoYXZlIGFueSBi
b3JkZXItaW1hZ2UgZm9yIG5vdy4gV2UgY291bGQgbG9vayBhdCB0aGUgaW1hZ2UgYWxwaGEgdG8g
aW1wcm92ZSB0aGlzLgogICAgIC8vIEZJWE1FOiBDaGVjayBib3JkZXItaW1hZ2UuCiAKLSAgICBm
b3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6
OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGlmICghbV9ib3JkZXJFZGdlcy5hdChzaWRlKS5vYnNj
dXJlc0JhY2tncm91bmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0x
NDUsMTAgKzE0NSwxMCBAQCBib29sIEJveERlY29yYXRpb25EYXRhOjpib3JkZXJPYnNjdXJlc0Jh
Y2tncm91bmQoKSBjb25zdAogCiBib29sIEJveERlY29yYXRpb25EYXRhOjpib3JkZXJPYnNjdXJl
c0JhY2tncm91bmRFZGdlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAogewot
ICAgIGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6
IFBBTDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgYXV0byYgY3VyckVkZ2UgPSBtX2JvcmRlckVk
Z2VzLmF0KHNpZGUpOwogICAgICAgICAvLyBGSVhNRTogZm9yIHZlcnRpY2FsIHRleHQKLSAgICAg
ICAgZmxvYXQgYXhpc1NjYWxlID0gKHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94
U2lkZTo6Qm90dG9tKSA/IGNvbnRleHRTY2FsZS5oZWlnaHQoKSA6IGNvbnRleHRTY2FsZS53aWR0
aCgpOworICAgICAgICBmbG9hdCBheGlzU2NhbGUgPSAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRv
cCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tKSA/IGNvbnRleHRTY2FsZS5oZWlnaHQo
KSA6IGNvbnRleHRTY2FsZS53aWR0aCgpOwogICAgICAgICBpZiAoIWN1cnJFZGdlLm9ic2N1cmVz
QmFja2dyb3VuZEVkZ2UoYXhpc1NjYWxlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uRGF0YS5oCmluZGV4IDEzYjMyODZmYzdlNjRlM2M3N2JhYzQyMmY1NGIyOWU4YjY5NmJh
ZWYuLjEzMTE0ZTk4NDExZTA2N2RkNTIwZjlmOWUwZDE5MzZlYTY4ZmYwYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5o
CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKIFJlY3RFZGdlczxCb3JkZXJFZGdlPiBjYWxj
dWxhdGVCb3JkZXJFZGdlcyhjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0IHBpeGVsU25hcHBpbmdG
YWN0b3IsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZUxv
Z2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsKIAotc3RkOjpwYWlyPEJveFNpZGUsIEJveFNpZGU+IGFk
amFjZW50U2lkZXNGb3JTaWRlKEJveFNpZGUpOworc3RkOjpwYWlyPFBBTDo6Qm94U2lkZSwgUEFM
OjpCb3hTaWRlPiBhZGphY2VudFNpZGVzRm9yU2lkZShQQUw6OkJveFNpZGUpOwogCiBpbmxpbmUg
UmVjdEVkZ2VzPGZsb2F0PiBib3JkZXJXaWR0aHMoY29uc3QgUmVjdEVkZ2VzPEJvcmRlckVkZ2U+
JiBlZGdlcykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IGJiMThhNjNhYjk5MGM0YWUzYmRj
YjkwMzI5YzMxNjlhYmI1ZmEyYTAuLjE1MjdjMGUzYjZmMDQzYzAyYjdhNmI3N2QxMjk2OTBiZGQ0
ZmVmMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtOTAsMjQgKzkwLDI0IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiAhZmlyc3RSYWRpdXMuaXNaZXJvKCkgfHwgIXNlY29uZFJhZGl1cy5p
c1plcm8oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUhhc1VubWF0Y2hl
ZENvbG9yc0F0Q29ybmVyKEJvcmRlclN0eWxlLCBCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lk
ZSk7Ci0gICAgc3RhdGljIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKEJveFNpZGUsIEJv
eFNpZGUgYWRqYWNlbnRTaWRlLCBCb3JkZXJTdHlsZSwgQm9yZGVyU3R5bGUgYWRqYWNlbnRTdHls
ZSk7Ci0gICAgc3RhdGljIEZsb2F0Um91bmRlZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJv
cmRlcihjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSk7Ci0gICAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihCb3JkZXJTdHlsZSwgQm94U2lk
ZSwgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUhhc1VubWF0Y2hlZENvbG9y
c0F0Q29ybmVyKEJvcmRlclN0eWxlLCBQQUw6OkJveFNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2Vu
dFNpZGUpOworICAgIHN0YXRpYyBib29sIGJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShQQUw6OkJv
eFNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUsIEJvcmRlclN0eWxlLCBCb3JkZXJTdHls
ZSBhZGphY2VudFN0eWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdCBjYWxjdWxhdGVB
ZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBQ
QUw6OkJveFNpZGUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3Io
Qm9yZGVyU3R5bGUsIFBBTDo6Qm94U2lkZSwgQ29sb3ImKTsKIAogICAgIEZsb2F0UmVjdCBib3Jk
ZXJJbm5lclJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNvbnN0IFBhaW50aW5nQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUsIEJveFNp
ZGUgYWRqYWNlbnRTaWRlKSBjb25zdDsKLSAgICBib29sIGNvbG9yTmVlZHNBbnRpQWxpYXNBdENv
cm5lcihCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3Q7Ci0gICAgYm9vbCB3aWxs
QmVPdmVyZHJhd24oQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0OwotICAgIGJv
b2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wg
YWxsb3dPdmVyZHJhdykgY29uc3Q7CisgICAgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKFBBTDo6
Qm94U2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3Q7CisgICAgYm9vbCBjb2xv
ck5lZWRzQW50aUFsaWFzQXRDb3JuZXIoUEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNl
bnRTaWRlKSBjb25zdDsKKyAgICBib29sIHdpbGxCZU92ZXJkcmF3bihQQUw6OkJveFNpZGUsIFBB
TDo6Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0OworICAgIGJvb2wgam9pblJlcXVpcmVzTWl0
cmUoUEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBib29sIGFsbG93T3Zl
cmRyYXcpIGNvbnN0OwogCi0gICAgdm9pZCBjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdD
b250ZXh0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlLCBib29sIGZpcnN0RWRnZU1hdGNoZXMs
IGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0OworICAgIHZvaWQgY2xpcEJvcmRlclNpZGVQ
b2x5Z29uKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9y
ZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgUEFMOjpCb3hTaWRlLCBi
b29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0OwogCi0g
ICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgQm94U2lkZSwgQ29sb3IsIEJvcmRlclN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwg
ZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJvb2wgYW50aWFsaWFzKSBjb25zdDsKLSAgICB2b2lkIGRy
YXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBib3Jk
ZXJSZWN0LCBjb25zdCBQYXRoJiBib3JkZXJQYXRoLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRy
YXdUaGlja25lc3MsIEJveFNpZGUsIENvbG9yLCBCb3JkZXJTdHlsZSkgY29uc3Q7CisgICAgdm9p
ZCBkcmF3TGluZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
UEFMOjpCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBm
bG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0OworICAgIHZvaWQgZHJh
d0JveFNpZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGJvcmRl
clJlY3QsIGNvbnN0IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJh
d1RoaWNrbmVzcywgUEFMOjpCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUpIGNvbnN0OwogCi0g
ICAgdm9pZCBwYWludE9uZUJvcmRlclNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9y
ZGVyLCBjb25zdCBGbG9hdFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlLCBjb25zdCBQYXRoKiwgYm9v
bCBhbnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdDsKKyAgICB2b2lk
IHBhaW50T25lQm9yZGVyU2lkZShQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNv
bnN0IEZsb2F0UmVjdCYgc2lkZVJlY3QsIFBBTDo6Qm94U2lkZSwgY29uc3QgUGF0aCosIGJvb2wg
YW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3Q7CiAgICAgdm9pZCBw
YWludEJvcmRlclNpZGVzKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IG91dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgRmxvYXRT
aXplIGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50LCBCb3hTaWRlU2V0LCBib29sIGFudGlhbGlh
cywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IgPSBudWxscHRyKSBjb25zdDsKICAgICB2b2lk
IHBhaW50VHJhbnNsdWNlbnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJC
b3JkZXIsIEZsb2F0U2l6ZSBpbm5lckJvcmRlckJsZWVkQWRqdXN0bWVudCwgQm94U2lkZVNldCwg
Ym9vbCBhbnRpYWxpYXMpIGNvbnN0OwogCkBAIC0xMjAsNyArMTIwLDcgQEAgcHJpdmF0ZToKIAog
Ly8gQm9yZGVyU3R5bGU6Ok91dHNldCBkYXJrZW5zIHRoZSBib3R0b20gYW5kIHJpZ2h0IChhbmQg
bWF5YmUgbGlnaHRlbnMgdGhlIHRvcCBhbmQgbGVmdCkKIC8vIEJvcmRlclN0eWxlOjpJbnNldCBk
YXJrZW5zIHRoZSB0b3AgYW5kIGxlZnQgKGFuZCBtYXliZSBsaWdodGVucyB0aGUgYm90dG9tIGFu
ZCByaWdodCkKLWJvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xv
cnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFj
ZW50U2lkZSkKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xv
cnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUpCiB7CiAgICAgLy8gVGhlc2Ugc3R5bGVzIG1hdGNoIGF0IHRoZSB0
b3AvbGVmdCBhbmQgYm90dG9tL3JpZ2h0LgogICAgIGlmIChzdHlsZSA9PSBCb3JkZXJTdHlsZTo6
SW5zZXQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBzdHlsZSA9PSBCb3JkZXJT
dHlsZTo6UmlkZ2UgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCkgewpAQCAtMTMzLDcg
KzEzMyw3IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xv
cnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEJvcmRlclBhaW50ZXI6OmNvbG9yc01hdGNoQXRDb3JuZXIoQm94U2lkZSBzaWRlLCBC
b3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3QKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6Y29sb3JzTWF0
Y2hBdENvcm5lcihQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSkg
Y29uc3QKIHsKICAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICBhdXRvJiBh
ZGphY2VudEVkZ2UgPSBtX2VkZ2VzLmF0KGFkamFjZW50U2lkZSk7CkBAIC0xNDcsNyArMTQ3LDcg
QEAgYm9vbCBCb3JkZXJQYWludGVyOjpjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUgc2lkZSwg
Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnMKICAgICByZXR1cm4gIWJvcmRlclN0eWxlSGFzVW5t
YXRjaGVkQ29sb3JzQXRDb3JuZXIoZWRnZS5zdHlsZSgpLCBzaWRlLCBhZGphY2VudFNpZGUpOwog
fQogCi1ib29sIEJvcmRlclBhaW50ZXI6OmNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcihCb3hT
aWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdAorYm9vbCBCb3JkZXJQYWludGVy
Ojpjb2xvck5lZWRzQW50aUFsaWFzQXRDb3JuZXIoUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0CiB7CiAgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQo
c2lkZSk7CiAgICAgYXV0byYgYWRqYWNlbnRFZGdlID0gbV9lZGdlcy5hdChhZGphY2VudFNpZGUp
OwpAQCAtMTY0LDcgKzE2NCw3IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6Y29sb3JOZWVkc0FudGlB
bGlhc0F0Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpCiAgICAgcmV0dXJu
IGJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIoZWRnZS5zdHlsZSgpLCBzaWRl
LCBhZGphY2VudFNpZGUpOwogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0ZUJvcmRl
clN0eWxlQ29sb3IoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQ29sb3ImIGNvbG9y
KQordm9pZCBCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKEJvcmRlclN0
eWxlIHN0eWxlLCBQQUw6OkJveFNpZGUgc2lkZSwgQ29sb3ImIGNvbG9yKQogewogICAgIEFTU0VS
VChzdHlsZSA9PSBCb3JkZXJTdHlsZTo6SW5zZXQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91
dHNldCk7CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0
ZUJvcmRlclN0eWxlQ29sb3IoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQwogCiAg
ICAgZW51bSBPcGVyYXRpb24geyBEYXJrZW4sIExpZ2h0ZW4gfTsKIAotICAgIE9wZXJhdGlvbiBv
cGVyYXRpb24gPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0
KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47Cisg
ICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNp
ZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0
KSA/IERhcmtlbiA6IExpZ2h0ZW47CiAKICAgICAvLyBIZXJlIHdlIHdpbGwgZGFya2VuIHRoZSBi
b3JkZXIgZGVjb3JhdGlvbiBjb2xvciB3aGVuIG5lZWRlZC4gVGhpcyB3aWxsIHlpZWxkIGEgc2lt
aWxhciBiZWhhdmlvciBhcyBpbiBGRi4KICAgICBpZiAob3BlcmF0aW9uID09IERhcmtlbikgewpA
QCAtMTg3LDExICsxODcsMTEgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVCb3JkZXJT
dHlsZUNvbG9yKEJvcmRlclN0eWxlIHN0eWxlLCBCb3hTaWRlIHNpZGUsIEMKIH0KIAogLy8gVGhp
cyBhc3N1bWVzIHRoYXQgd2UgZHJhdyBpbiBvcmRlcjogdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0
LgotYm9vbCBCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24oQm94U2lkZSBzaWRlLCBCb3hT
aWRlIGFkamFjZW50U2lkZSkgY29uc3QKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6d2lsbEJlT3ZlcmRy
YXduKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdAog
ewogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgotICAgIGNhc2Ug
Qm94U2lkZTo6Qm90dG9tOiB7CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6Qm90dG9tOiB7CiAgICAgICAgIGF1dG8mIGVkZ2UgPSBtX2VkZ2VzLmF0
KHNpZGUpOwogICAgICAgICBhdXRvJiBhZGphY2VudEVkZ2UgPSBtX2VkZ2VzLmF0KGFkamFjZW50
U2lkZSk7CiAKQEAgLTIwNiwxNSArMjA2LDE1IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6d2lsbEJl
T3ZlcmRyYXduKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0CiAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICBj
YXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgorICAgIGNh
c2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgLy8gVGhlc2UgZHJhdyBsYXN0LCBzbyBh
cmUgbmV2ZXIgb3ZlcmRyYXduLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBCb3JkZXJQYWludGVyOjpib3JkZXJTdHlsZXNSZXF1aXJl
TWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5
bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5bGUpCitib29sIEJvcmRlclBhaW50ZXI6OmJvcmRl
clN0eWxlc1JlcXVpcmVNaXRyZShQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFj
ZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5bGUpCiB7
CiAgICAgaWYgKHN0eWxlID09IEJvcmRlclN0eWxlOjpEb3VibGUgfHwgYWRqYWNlbnRTdHlsZSA9
PSBCb3JkZXJTdHlsZTo6RG91YmxlIHx8IGFkamFjZW50U3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdy
b292ZSB8fCBhZGphY2VudFN0eWxlID09IEJvcmRlclN0eWxlOjpSaWRnZSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMjgsNyArMjI4LDcgQEAgYm9vbCBCb3JkZXJQYWludGVyOjpib3JkZXJT
dHlsZXNSZXF1aXJlTWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwKICAg
ICByZXR1cm4gYm9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihzdHlsZSwgc2lk
ZSwgYWRqYWNlbnRTaWRlKTsKIH0KIAotRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVyOjpj
YWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVy
Qm9yZGVyLCBCb3hTaWRlIHNpZGUpCitGbG9hdFJvdW5kZWRSZWN0IEJvcmRlclBhaW50ZXI6OmNh
bGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJC
b3JkZXIsIFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIC8vIEV4cGFuZCB0aGUgaW5uZXIgYm9y
ZGVyIGFzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGEgcm91bmRlZCByZWN0IChpLmUuIHJhZGlpIGNv
bnRhaW5lZCB3aXRoaW4gZWFjaCBlZGdlKS4KICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbGllcyBv
biB0aGUgZmFjdCB3ZSBvbmx5IGdldCByYWRpaSBub3QgY29udGFpbmVkIHdpdGhpbiBlYWNoIGVk
Z2UgaWYgb25lIG9mIHRoZSByYWRpaQpAQCAtMjQwLDcgKzI0MCw3IEBAIEZsb2F0Um91bmRlZFJl
Y3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBGbG9h
dFJvdW5kZWRSCiAgICAgZmxvYXQgbWF4UmFkaWk7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAg
ICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAg
ICBvdmVyc2hvb3QgPSBuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSArIG5ld1JhZGlpLnRvcFJp
Z2h0KCkud2lkdGgoKSAtIG5ld1JlY3Qud2lkdGgoKTsKICAgICAgICAgaWYgKG92ZXJzaG9vdCA+
IDApIHsKICAgICAgICAgICAgIEFTU0VSVCghKG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpICYm
IG5ld1JhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSkpOwpAQCAtMjU1LDcgKzI1NSw3IEBAIEZsb2F0
Um91bmRlZFJlY3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihj
b25zdCBGbG9hdFJvdW5kZWRSCiAgICAgICAgICAgICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRp
aSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2Fz
ZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkuYm90
dG9tTGVmdCgpLndpZHRoKCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkgLSBuZXdS
ZWN0LndpZHRoKCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAgICBB
U1NFUlQoIShuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSAmJiBuZXdSYWRpaS5ib3R0b21S
aWdodCgpLndpZHRoKCkpKTsKQEAgLTI3Miw3ICsyNzIsNyBAQCBGbG9hdFJvdW5kZWRSZWN0IEJv
cmRlclBhaW50ZXI6OmNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29uc3QgRmxvYXRSb3Vu
ZGVkUgogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0
OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICBvdmVyc2hvb3QgPSBuZXdS
YWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKyBuZXdSYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkg
LSBuZXdSZWN0LmhlaWdodCgpOwogICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgewogICAgICAg
ICAgICAgQVNTRVJUKCEobmV3UmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICYmIG5ld1JhZGlpLmJv
dHRvbUxlZnQoKS5oZWlnaHQoKSkpOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIEZsb2F0Um91bmRlZFJl
Y3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBGbG9h
dFJvdW5kZWRSCiAgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG1heFJhZGlpKTsKICAgICAg
ICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hT
aWRlOjpSaWdodDoKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkudG9wUmlnaHQoKS5oZWln
aHQoKSArIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkgLSBuZXdSZWN0LmhlaWdodCgp
OwogICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgewogICAgICAgICAgICAgQVNTRVJUKCEobmV3
UmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdo
dCgpKSk7CkBAIC0zMDgsNyArMzA4LDcgQEAgRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVy
OjpjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFIKICAgICBy
ZXR1cm4gRmxvYXRSb3VuZGVkUmVjdCB7IG5ld1JlY3QsIG5ld1JhZGlpIH07CiB9CiAKLWJvb2wg
Qm9yZGVyUGFpbnRlcjo6am9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFk
amFjZW50U2lkZSwgYm9vbCBhbGxvd092ZXJkcmF3KSBjb25zdAorYm9vbCBCb3JkZXJQYWludGVy
Ojpqb2luUmVxdWlyZXNNaXRyZShQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFj
ZW50U2lkZSwgYm9vbCBhbGxvd092ZXJkcmF3KSBjb25zdAogewogICAgIGF1dG8mIGVkZ2UgPSBt
X2VkZ2VzLmF0KHNpZGUpOwogICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IG1fZWRnZXMuYXQoYWRq
YWNlbnRTaWRlKTsKQEAgLTMyOCw3ICszMjgsNyBAQCBib29sIEJvcmRlclBhaW50ZXI6OmpvaW5S
ZXF1aXJlc01pdHJlKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wgYQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGJvcmRlclJlY3QsIGNvbnN0IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxv
YXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUg
Ym9yZGVyU3R5bGUpIGNvbnN0Cit2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBh
dGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm9y
ZGVyUmVjdCwgY29uc3QgUGF0aCYgYm9yZGVyUGF0aCwgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBk
cmF3VGhpY2tuZXNzLCBQQUw6OkJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxl
IGJvcmRlclN0eWxlKSBjb25zdAogewogICAgIGlmICh0aGlja25lc3MgPD0gMCkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNp
ZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICBw
YWludGluZ0NvbnRleHQuY29udGV4dC5kcmF3UmVjdChib3JkZXJSZWN0KTsKIH0KIAotdm9pZCBC
b3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWlu
dGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSBzaWRlLCBib29sIGZpcnN0RWRn
ZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0Cit2b2lkIEJvcmRlclBhaW50
ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIGlubmVyQm9yZGVyLCBQQUw6OkJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRj
aGVzLCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKSBjb25zdAogewogICAgIGNvbnN0IEZsb2F0UmVj
dCYgb3V0ZXJSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgIGNvbnN0IEZsb2F0UmVjdCYg
aW5uZXJSZWN0ID0gaW5uZXJCb3JkZXIucmVjdCgpOwpAQCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQg
Qm9yZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFp
bnRpbmdDb250ZXh0LCBjb25zCiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7CiAgICAgcXVh
ZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOwogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNh
c2UgQm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKICAgICAgICAg
cXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CkBAIC01
MDIsNyArNTAyLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24o
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAgICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWlu
WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCksIHF1YWRbMl0pOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQm94U2lkZTo6
TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKQEAgLTUxNSw3ICs1MTUs
NyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0Nv
bnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAgICAgICAgZmluZEludGVyc2VjdGlv
bihvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCks
IGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwg
cXVhZFsyXSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206Cisg
ICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAgLTUyOCw3ICs1MjgsNyBAQCB2
b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRl
clJlY3QubWF4WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIGlubmVy
UmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwgcXVhZFsy
XSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKG91dGVy
UmVjdC5tYXhYTWluWUNvcm5lcigpKTsKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5u
ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChp
bm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAgICAgcXVhZFswXSwKICAgICAgICAgcXVhZFsxXSwKICAgICAg
ICAgcXVhZFsyXSwKLSAgICAgICAgc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hT
aWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkgOiBGbG9h
dFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSksCisgICAgICAgIHNpZGUgPT0gUEFMOjpC
b3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQo
cXVhZFszXS54KCksIHF1YWRbMl0ueSgpKSA6IEZsb2F0UG9pbnQocXVhZFsyXS54KCksIHF1YWRb
M10ueSgpKSwKICAgICAgICAgcXVhZFszXQogICAgIH07CiAgICAgYm9vbCB3YXNBbnRpYWxpYXNl
ZCA9IHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOwpAQCAtNTY2LDcg
KzU2Niw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50
aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zCiAKICAgICBWZWN0b3I8RmxvYXRQb2lu
dD4gc2Vjb25kUXVhZCA9IHsKICAgICAgICAgcXVhZFswXSwKLSAgICAgICAgc2lkZSA9PSBCb3hT
aWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbMF0u
eCgpLCBxdWFkWzFdLnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSks
CisgICAgICAgIHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNp
ZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQocXVhZFswXS54KCksIHF1YWRbMV0ueSgpKSA6IEZsb2F0
UG9pbnQocXVhZFsxXS54KCksIHF1YWRbMF0ueSgpKSwKICAgICAgICAgcXVhZFsxXSwKICAgICAg
ICAgcXVhZFsyXSwKICAgICAgICAgcXVhZFszXQpAQCAtNTc4LDcgKzU3OCw3IEBAIHZvaWQgQm9y
ZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFpbnRp
bmdDb250ZXh0LCBjb25zCiAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50
aWFsaWFzKHdhc0FudGlhbGlhc2VkKTsKIH0KIAotdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGlu
ZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVy
U3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBh
bnRpYWxpYXMpIGNvbnN0Cit2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQ
YWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBQ
QUw6OkJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxlIGJvcmRlclN0eWxlLCBm
bG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJvb2wgYW50aWFsaWFz
KSBjb25zdAogewogICAgIGF1dG8gZHJhd0JvcmRlclJlY3QgPSBbJl0oY29uc3QgRmxvYXRSZWN0
JiByZWN0KSB7CiAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKQEAgLTU4Niw3ICs1ODYsNyBA
QCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4
dC5kcmF3UmVjdChyZWN0KTsKICAgICB9OwogCi0gICAgYXV0byBkcmF3TGluZUZvciA9IFsmXShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIEJveFNpZGUgc2lkZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5
bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRqYWNlbnQpIHsKKyAgICBhdXRvIGRyYXdMaW5lRm9yID0g
WyZdKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIEJvcmRlclN0eWxl
IGJvcmRlclN0eWxlLCBjb25zdCBGbG9hdFNpemUmIGFkamFjZW50KSB7CiAgICAgICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKHBhaW50aW5nQ29udGV4dCwgcmVjdCwgc2lkZSwgY29sb3IsIGJvcmRlclN0eWxlLCBh
ZGphY2VudC53aWR0aCgpLCBhZGphY2VudC5oZWlnaHQoKSwgYW50aWFsaWFzKTsKQEAgLTYwMSw3
ICs2MDEsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgIGZsb2F0IHkyID0gcmVjdC5t
YXhZKCk7CiAgICAgZmxvYXQgdGhpY2tuZXNzOwogICAgIGZsb2F0IGxlbmd0aDsKLSAgICBpZiAo
c2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20pIHsKKyAgICBp
ZiAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90
dG9tKSB7CiAgICAgICAgIHRoaWNrbmVzcyA9IHkyIC0geTE7CiAgICAgICAgIGxlbmd0aCA9IHgy
IC0geDE7CiAgICAgfSBlbHNlIHsKQEAgLTY0MSwxOSArNjQxLDE5IEBAIHZvaWQgQm9yZGVyUGFp
bnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0
LCBjb25zdCBGCiAgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMoYW50aWFsaWFzKTsKIAogICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAg
ICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpUb3A6CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEsIGxlbmd0aCwg
ZWRnZS5vdXRlcldpZHRoKCkgfSk7CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4
MSwgeTIgLSBlZGdlLmlubmVyV2lkdGgoKSwgbGVuZ3RoLCBlZGdlLmlubmVyV2lkdGgoKSB9KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Qm90dG9t
OgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgICAg
ICBkcmF3Qm9yZGVyUmVjdCh7IHgxLCB5MiAtIGVkZ2Uub3V0ZXJXaWR0aCgpLCBsZW5ndGgsIGVk
Z2Uub3V0ZXJXaWR0aCgpIH0pOwogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHsgeDEs
IHkxLCBsZW5ndGgsIGVkZ2UuaW5uZXJXaWR0aCgpIH0pOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEs
IGVkZ2Uub3V0ZXJXaWR0aCgpLCBsZW5ndGggfSk7CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRl
clJlY3QoeyB4MiAtIGVkZ2UuaW5uZXJXaWR0aCgpLCB5MSwgZWRnZS5pbm5lcldpZHRoKCksIGxl
bmd0aCB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lk
ZTo6UmlnaHQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAg
ICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MiAtIGVkZ2Uub3V0ZXJXaWR0aCgpLCB5MSwgZWRn
ZS5vdXRlcldpZHRoKCksIGxlbmd0aCB9KTsKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVj
dCh7IHgxLCB5MSwgZWRnZS5pbm5lcldpZHRoKCksIGxlbmd0aCB9KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTY3NSwyOCArNjc1LDI4IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xp
bmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAK
ICAgICAgICAgICAgIEZsb2F0UmVjdCBwYWludEJvcmRlclJlY3Q7CiAgICAgICAgICAgICBzd2l0
Y2ggKHNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICAgICAg
Y2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNldDEsIHkx
LCAoeDIgLSBtaXRyZU9mZnNldDMpIC0gKHgxICsgbWl0cmVPZmZzZXQxKSwgdGhpcmRPZlRoaWNr
bmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihw
YWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFj
ZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwogCiAgICAgICAgICAgICAgICAgcGFp
bnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0
cmVPZmZzZXQyLCB5MiAtIHRoaXJkT2ZUaGlja25lc3MsICh4MiAtIG1pdHJlT2Zmc2V0NCkgLSAo
eDEgKyBtaXRyZU9mZnNldDIpLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3Ip
OwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9y
ZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJp
Z1RoaXJkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJveFNp
ZGU6OkxlZnQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAg
ICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJl
Y3QoeDEsIHkxICsgbWl0cmVPZmZzZXQxLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9m
ZnNldDMpIC0gKHkxICsgbWl0cmVPZmZzZXQxKSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAg
ICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxl
OjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkp
OwogCiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBp
eGVscyhMYXlvdXRSZWN0KHgyIC0gdGhpcmRPZlRoaWNrbmVzcywgeTEgKyBtaXRyZU9mZnNldDIs
IHRoaXJkT2ZUaGlja25lc3MsICh5MiAtIG1pdHJlT2Zmc2V0NCkgLSAoeTEgKyBtaXRyZU9mZnNl
dDIpKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBh
aW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNl
bnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAgIGNhc2UgUEFM
OjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQyLCB5MSwgKHgy
IC0gbWl0cmVPZmZzZXQ0KSAtICh4MSArIG1pdHJlT2Zmc2V0MiksIHRoaXJkT2ZUaGlja25lc3Mp
LCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRC
b3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFC
aWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIAogICAgICAgICAgICAgICAgIHBhaW50Qm9y
ZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJlT2Zm
c2V0MSwgeTIgLSB0aGlyZE9mVGhpY2tuZXNzLCAoeDIgLSBtaXRyZU9mZnNldDMpIC0gKHgxICsg
bWl0cmVPZmZzZXQxKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsKICAg
ICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0
eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGly
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpS
aWdodDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAg
ICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3Qo
eDEsIHkxICsgbWl0cmVPZmZzZXQyLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9mZnNl
dDQpIC0gKHkxICsgbWl0cmVPZmZzZXQyKSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
ICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpT
b2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwog
CkBAIC03MzAsMTYgKzczMCwxNiBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94
U2lkZShQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgICAgICBm
bG9hdCBvZmZzZXQzID0gMDsKICAgICAgICAgZmxvYXQgb2Zmc2V0NCA9IDA7CiAKLSAgICAgICAg
aWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMSA8IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gfHwgc2lkZSA9
PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSkKKyAgICAgICAgaWYgKCgo
c2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6TGVmdCkg
JiYgYWRqYWNlbnRXaWR0aDEgPCAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpCb3R0b20g
fHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQog
ICAgICAgICAgICAgb2Zmc2V0MSA9IGZsb29yVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMSAv
IDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6
OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkgfHwg
KChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApKQorICAgICAgICBpZiAoKChzaWRlID09IFBBTDo6Qm94U2lkZTo6
VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMiA8IDAp
IHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IFBBTDo6Qm94U2lk
ZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyID4gMCkpCiAgICAgICAgICAgICBvZmZzZXQyID0g
Y2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7
CiAKLSAgICAgICAgaWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRl
OjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0
b20gfHwgc2lkZSA9PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPCAwKSkKKyAg
ICAgICAgaWYgKCgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94
U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hT
aWRlOjpCb3R0b20gfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdp
ZHRoMSA8IDApKQogICAgICAgICAgICAgb2Zmc2V0MyA9IGZsb29yVG9EZXZpY2VQaXhlbChmYWJz
KGFkamFjZW50V2lkdGgxKSAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAo
KChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFj
ZW50V2lkdGgyID4gMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJv
eFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMiA8IDApKQorICAgICAgICBpZiAoKChzaWRl
ID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBz
aWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCiAgICAg
ICAgICAgICBvZmZzZXQ0ID0gY2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICAgICAgZmxvYXQgYWRqdXN0ZWRYID0gY2VpbFRvRGV2
aWNlUGl4ZWwoKHgxICsgeDIpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtNzUxLDE5ICs3
NTEsMTkgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJveFNpZGUoUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgeTIgPSByb3VuZFRvRGV2
aWNlUGl4ZWwoeTIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgICAgICBzd2l0Y2ggKHNpZGUp
IHsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpUb3A6CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSAr
IG9mZnNldDEsIHkxKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNldDIsIGFkanVzdGVkWSkpLCBzaWRl
LCBzMSwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKICAg
ICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgxICsgb2Zmc2V0Mywg
YWRqdXN0ZWRZKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNldDQsIHkyKSksIHNpZGUsIHMyLCBGbG9h
dFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFM
OjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoeDEsIHkxICsgb2Zmc2V0MSksIEZsb2F0UG9pbnQoYWRqdXN0ZWRYLCB5MiAtIG9mZnNl
dDIpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdIYWxmLCBhZGphY2VudDJCaWdI
YWxmKSk7CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludChhZGp1
c3RlZFgsIHkxICsgb2Zmc2V0MyksIEZsb2F0UG9pbnQoeDIsIHkyIC0gb2Zmc2V0NCkpLCBzaWRl
LCBzMiwgRmxvYXRTaXplKGFkamFjZW50MVNtYWxsSGFsZiwgYWRqYWNlbnQyU21hbGxIYWxmKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAg
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICBkcmF3TGluZUZvcihG
bG9hdFJlY3QoRmxvYXRQb2ludCh4MSArIG9mZnNldDEsIHkxKSwgRmxvYXRQb2ludCh4MiAtIG9m
ZnNldDIsIGFkanVzdGVkWSkpLCBzaWRlLCBzMiwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYs
IGFkamFjZW50MkJpZ0hhbGYpKTsKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChG
bG9hdFBvaW50KHgxICsgb2Zmc2V0MywgYWRqdXN0ZWRZKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNl
dDQsIHkyKSksIHNpZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2Vu
dDJTbWFsbEhhbGYpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6
OlJpZ2h0OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBk
cmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSwgeTEgKyBvZmZzZXQxKSwgRmxvYXRQ
b2ludChhZGp1c3RlZFgsIHkyIC0gb2Zmc2V0MikpLCBzaWRlLCBzMiwgRmxvYXRTaXplKGFkamFj
ZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKICAgICAgICAgICAgIGRyYXdMaW5lRm9y
KEZsb2F0UmVjdChGbG9hdFBvaW50KGFkanVzdGVkWCwgeTEgKyBvZmZzZXQzKSwgRmxvYXRQb2lu
dCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNpZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxI
YWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzk4LDI1
ICs3OTgsMjUgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJveFNpZGUoUGFpbnRp
bmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgVmVjdG9yPEZsb2F0
UG9pbnQ+IHF1YWQ7CiAgICAgICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAg
ICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9KTsKICAg
ICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFk
amFjZW50V2lkdGgxLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVu
ZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkyIH0pOwogICAg
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDIsIDApLCB5MSB9KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAg
ICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFk
amFjZW50V2lkdGgxLCAwKSwgeTEgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVu
ZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0pOwogICAg
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsg
eDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDIsIDApIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4
MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSB9KTsKICAgICAgICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGph
Y2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hT
aWRlOjpSaWdodDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFj
ZW50V2lkdGgxLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEs
IHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7CiAgICAgICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNl
bnRXaWR0aDIsIDApIH0pOwpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6
ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25z
dCBGCiAgICAgfQogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZShQ
YWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
b3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBG
bG9hdFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlIHNpZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGJvb2wg
YW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3QKK3ZvaWQgQm9yZGVy
UGFpbnRlcjo6cGFpbnRPbmVCb3JkZXJTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2lkZVJlY3QsIFBBTDo6Qm94
U2lkZSBzaWRlLCBjb25zdCBQYXRoKiBwYXRoLCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3Iq
IG92ZXJyaWRlQ29sb3IpIGNvbnN0CiB7CiAgICAgYXV0byYgZWRnZVRvUmVuZGVyID0gbV9lZGdl
cy5hdChzaWRlKTsKICAgICBBU1NFUlQoZWRnZVRvUmVuZGVyLndpZHRoRm9yUGFpbnRpbmcoKSk7
CkBAIC04OTMsNyArODkzLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVz
KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG8KICAgICBpZiAocmVu
ZGVyUmFkaWkpCiAgICAgICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRSZWN0KG91dGVyQm9yZGVy
KTsKIAotICAgIGF1dG8gcGFpbnRPbmVTaWRlID0gWyZdKEJveFNpZGUgc2lkZSkgeworICAgIGF1
dG8gcGFpbnRPbmVTaWRlID0gWyZdKFBBTDo6Qm94U2lkZSBzaWRlKSB7CiAgICAgICAgIGF1dG8m
IGVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOwogICAgICAgICBpZiAoIWVkZ2Uuc2hvdWxkUmVuZGVy
KCkgfHwgIWVkZ2VTZXQuY29udGFpbnMoZWRnZUZsYWdGb3JTaWRlKHNpZGUpKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTkwMywyMiArOTAzLDIyIEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFp
bnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxv
CiAgICAgICAgIEZsb2F0U2l6ZSBzZWNvbmRSYWRpdXM7CiAKICAgICAgICAgc3dpdGNoIChzaWRl
KSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lk
ZTo6VG9wOgogICAgICAgICAgICAgc2lkZVJlY3Quc2V0SGVpZ2h0KGVkZ2Uud2lkdGhGb3JQYWlu
dGluZygpICsgaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQuaGVpZ2h0KCkpOwogICAgICAgICAg
ICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKTsKICAgICAgICAg
ICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFhFZGdlVG8o
c2lkZVJlY3QubWF4WCgpIC0gZWRnZS53aWR0aEZvclBhaW50aW5nKCkgLSBpbm5lckJvcmRlckJs
ZWVkQWRqdXN0bWVudC53aWR0aCgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJC
b3JkZXIucmFkaWkoKS5ib3R0b21SaWdodCgpOwogICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0g
aW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90
dG9tOgogICAgICAgICAgICAgc2lkZVJlY3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAt
IGVkZ2Uud2lkdGhGb3JQYWludGluZygpIC0gaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQuaGVp
Z2h0KCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLmJv
dHRvbUxlZnQoKTsKICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlp
KCkuYm90dG9tUmlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNp
ZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAgICAg
c2lkZVJlY3Quc2V0V2lkdGgoZWRnZS53aWR0aEZvclBhaW50aW5nKCkgKyBpbm5lckJvcmRlckJs
ZWVkQWRqdXN0bWVudC53aWR0aCgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJC
b3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBp
bm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKTsKQEAgLTkyOSwxNyArOTI5LDE3IEBAIHZvaWQg
Qm9yZGVyUGFpbnRlcjo6cGFpbnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5n
Q29udGV4dCwgY29uc3QgRmxvCiAgICAgICAgIHBhaW50T25lQm9yZGVyU2lkZShwYWludGluZ0Nv
bnRleHQsIG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgc2lkZVJlY3QsIHNpZGUsIHVzZVBhdGgg
PyAmcm91bmRlZFBhdGggOiBudWxscHRyLCBhbnRpYWxpYXMsIG92ZXJyaWRlQ29sb3IpOwogICAg
IH07CiAKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6VG9wKTsKLSAgICBwYWludE9uZVNpZGUo
Qm94U2lkZTo6Qm90dG9tKTsKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6TGVmdCk7Ci0gICAg
cGFpbnRPbmVTaWRlKEJveFNpZGU6OlJpZ2h0KTsKKyAgICBwYWludE9uZVNpZGUoUEFMOjpCb3hT
aWRlOjpUb3ApOworICAgIHBhaW50T25lU2lkZShQQUw6OkJveFNpZGU6OkJvdHRvbSk7CisgICAg
cGFpbnRPbmVTaWRlKFBBTDo6Qm94U2lkZTo6TGVmdCk7CisgICAgcGFpbnRPbmVTaWRlKFBBTDo6
Qm94U2lkZTo6UmlnaHQpOwogfQogCiB2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50VHJhbnNsdWNl
bnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVy
Qm9yZGVyLCBGbG9hdFNpemUgaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQsIEJveFNpZGVTZXQg
ZWRnZXNUb0RyYXcsIGJvb2wgYW50aWFsaWFzKSBjb25zdAogewogICAgIC8vIHdpbGxCZU92ZXJk
cmF3biBhc3N1bWVzIHRoYXQgd2UgZHJhdyBpbiBvcmRlcjogdG9wLCBib3R0b20sIGxlZnQsIHJp
Z2h0LgotICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gQm94U2lkZSBlbnVtIG9yZGVyLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxCb3hTaWRlLCA0PiBwYWludE9yZGVyU2lk
ZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94U2lkZTo6Qm90dG9tLCBCb3hTaWRlOjpMZWZ0LCBCb3hT
aWRlOjpSaWdodCB9OworICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gUEFMOjpCb3hTaWRl
IGVudW0gb3JkZXIuCisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PFBBTDo6Qm94U2lk
ZSwgND4gcGFpbnRPcmRlclNpZGVzID0geyBQQUw6OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRl
OjpCb3R0b20sIFBBTDo6Qm94U2lkZTo6TGVmdCwgUEFMOjpCb3hTaWRlOjpSaWdodCB9OwogCiAg
ICAgd2hpbGUgKGVkZ2VzVG9EcmF3KSB7CiAgICAgICAgIC8vIEZpbmQgdW5kcmF3biBlZGdlcyBz
aGFyaW5nIGEgY29sb3IuCkBAIC0xMDAwLDEwICsxMDAwLDEwIEBAIHZvaWQgQm9yZGVyUGFpbnRl
cjo6cGFpbnRCb3JkZXJzKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KSBjb25zdAog
ICAgIGJvb2wgaGF2ZUFsbERvdWJsZUVkZ2VzID0gdHJ1ZTsKICAgICBpbnQgbnVtRWRnZXNWaXNp
YmxlID0gNDsKICAgICBib29sIGFsbEVkZ2VzU2hhcmVDb2xvciA9IHRydWU7Ci0gICAgc3RkOjpv
cHRpb25hbDxCb3hTaWRlPiBmaXJzdFZpc2libGVTaWRlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFM
OjpCb3hTaWRlPiBmaXJzdFZpc2libGVTaWRlOwogICAgIEJveFNpZGVTZXQgZWRnZXNUb0RyYXc7
CiAKLSAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNp
ZGUgOiBQQUw6OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGF1dG8mIGN1cnJFZGdlID0gbV9lZGdl
cy5hdChzaWRlKTsKIAogICAgICAgICBpZiAoY3VyckVkZ2Uuc2hvdWxkUmVuZGVyKCkpCkBAIC0x
MDUzLDI0ICsxMDUzLDI0IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRCb3JkZXJzKFBhaW50
aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIGF1dG8g
aW5uZXJUaGlyZFJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgpOwogICAgICAgICAgICAgICAgIGF1
dG8gb3V0ZXJUaGlyZFJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgpOwogCi0gICAgICAgICAgICAg
ICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgICAgICAgICAgICAgIGZvciAo
YXV0byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICAgICAgICAgICAgICBhdXRv
JiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3V0
ZXJXaWR0aCA9IGVkZ2Uub3V0ZXJXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBp
bm5lcldpZHRoID0gZWRnZS5pbm5lcldpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoc2lkZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlubmVyVGhpcmRSZWN0LnNoaWZ0WUVkZ2VUbyhpbm5lclRoaXJkUmVjdC55KCkgKyBp
bm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNoaWZ0
WUVkZ2VUbyhvdXRlclRoaXJkUmVjdC55KCkgKyBvdXRlcldpZHRoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5zZXRXaWR0aChpbm5lclRoaXJkUmVjdC53
aWR0aCgpIC0gaW5uZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlclRoaXJk
UmVjdC5zZXRXaWR0aChvdXRlclRoaXJkUmVjdC53aWR0aCgpIC0gb3V0ZXJXaWR0aCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0
b206CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5zZXRIZWlnaHQoaW5u
ZXJUaGlyZFJlY3QuaGVpZ2h0KCkgLSBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dGVyVGhpcmRSZWN0LnNldEhlaWdodChvdXRlclRoaXJkUmVjdC5oZWlnaHQoKSAtIG91
dGVyV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5z
aGlmdFhFZGdlVG8oaW5uZXJUaGlyZFJlY3QueCgpICsgaW5uZXJXaWR0aCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRlclRoaXJkUmVjdC5zaGlmdFhFZGdlVG8ob3V0ZXJUaGlyZFJlY3Qu
eCgpICsgb3V0ZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEx
MDgsMjEgKzExMDgsMjEgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlcnMoUGFpbnRp
bmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQpIGNvbnN0CiAgICAgICAgIGlmIChoYXZlQWxsU29s
aWRFZGdlcyAmJiBudW1FZGdlc1Zpc2libGUgIT0gNCAmJiAhbV9ib3JkZXJSZWN0LmlzUm91bmRl
ZCgpICYmIGhhdmVBbHBoYUNvbG9yKSB7CiAgICAgICAgICAgICBQYXRoIHBhdGg7CiAKLSAgICAg
ICAgICAgIGF1dG8gY2FsY3VsYXRlU2lkZVJlY3QgPSBbJl0oY29uc3QgQm9yZGVyRWRnZSYgZWRn
ZSwgQm94U2lkZSBzaWRlKSB7CisgICAgICAgICAgICBhdXRvIGNhbGN1bGF0ZVNpZGVSZWN0ID0g
WyZdKGNvbnN0IEJvcmRlckVkZ2UmIGVkZ2UsIFBBTDo6Qm94U2lkZSBzaWRlKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBzaWRlUmVjdCA9IG1fYm9yZGVyUmVjdC5yZWN0KCk7CiAgICAgICAgICAg
ICAgICAgYXV0byB3aWR0aCA9IGVkZ2Uud2lkdGhGb3JQYWludGluZygpOwogCiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpUb3A6
CisgICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAg
ICAgICAgc2lkZVJlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICAgICAgICAgIHNpZGVSZWN0
LnNoaWZ0WEVkZ2VUbyhzaWRlUmVjdC5tYXhYKCkgLSB3aWR0aCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgorICAgICAg
ICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgICAg
IHNpZGVSZWN0LnNoaWZ0WUVkZ2VUbyhzaWRlUmVjdC5tYXhZKCkgLSB3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoK
KyAgICAgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgICAg
ICAgICAgc2lkZVJlY3Quc2V0V2lkdGgod2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTMwLDcgKzExMzAsNyBAQCB2b2lkIEJvcmRlclBh
aW50ZXI6OnBhaW50Qm9yZGVycyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkgY29u
c3QKICAgICAgICAgICAgICAgICByZXR1cm4gc2lkZVJlY3Q7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gc2lkZSA6IFBBTDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgICAgICAgICBhdXRv
JiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICAgICAgICAgICAgICBpZiAoZWRnZS5zaG91
bGRSZW5kZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZGVSZWN0ID0gY2FsY3Vs
YXRlU2lkZVJlY3QoZWRnZSwgc2lkZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGVjb2Rl
ZERhdGFEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggN2IyYjQ1MDMxY2I1MDUzY2I2NDU2ZDhlYzY0
ZDhiY2M3ZTA2NGU2NS4uYzAwYjJjMzU1YmI0ODdiNWU3Mzc2YjdlMWQyYWMyZTYzM2UzZTgzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNw
cApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkRlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IGFjNGQ4NjEwNDVmYzI5NTJiNjkxOTg3ZGE3Y2VjZWY4MTczMDQ3
NjkuLmE0OTdlMDg5NDU0YTk1NzUwODAxZTlkNmE5ZDMzNzMwMTE1MjE1ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcApAQCAtMjE4LDcgKzIxOCw2IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5EYXRhLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNpbmNsdWRlICJT
ZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUg
IlNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ2xpZW50RGF0YS5oIgog
I2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJDb250YWluZXIuaCIKQEAgLTI3MSw2ICsyNzAsNyBAQAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENhbGxTdGFjay5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8Y3RpbWU+CisjaW5jbHVkZSA8cGFsL3RleHQv
U2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CkBAIC0x
NzIyLDcgKzE3MjIsNyBAQCBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgcmV0dXJuIGJ1aWxkZXIgPT0g
dGl0bGUgPyB0aXRsZSA6IGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
dXBkYXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCit2b2lkIERvY3Vt
ZW50Ojp1cGRhdGVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQog
ewogICAgIGlmIChtX3Jhd1RpdGxlID09IHRpdGxlKQogICAgICAgICByZXR1cm47CkBAIC0xNzUz
LDcgKzE3NTMsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQo
KQogICAgICAgICB1cGRhdGVUaXRsZShkb3duY2FzdDxIVE1MVGl0bGVFbGVtZW50PigqbV90aXRs
ZUVsZW1lbnQpLnRleHRXaXRoRGlyZWN0aW9uKCkpOwogICAgIGVsc2UgaWYgKGlzPFNWR1RpdGxl
RWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KSkgewogICAgICAgICAvLyBGSVhNRTogRG9lcyB0aGUg
U1ZHIHRpdGxlIGVsZW1lbnQgaGF2ZSBhIHRleHQgZGlyZWN0aW9uPwotICAgICAgICB1cGRhdGVU
aXRsZSh7IGRvd25jYXN0PFNWR1RpdGxlRWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KS50ZXh0Q29u
dGVudCgpLCBUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CisgICAgICAgIHVwZGF0ZVRpdGxlKHsgZG93
bmNhc3Q8U1ZHVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnRleHRDb250ZW50KCksIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogICAgIH0KIH0KIApAQCAtMzMwOCw3ICszMzA4LDcg
QEAgdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJZk5lZWRlZCgpCiAgICAg
bV9kaWRFbnF1ZXVlRmlyc3RDb250ZW50ZnVsUGFpbnQgPSB0cnVlOwogfQogCi1FeGNlcHRpb25P
cjx2b2lkPiBEb2N1bWVudDo6d3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9jdW1lbnQsIFNlZ21lbnRl
ZFN0cmluZyYmIHRleHQpCitFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6d3JpdGUoRG9jdW1l
bnQqIGVudHJ5RG9jdW1lbnQsIFBBTDo6U2VnbWVudGVkU3RyaW5nJiYgdGV4dCkKIHsKICAgICBp
ZiAobV9hY3RpdmVQYXJzZXJXYXNBYm9ydGVkKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMzM0
MSw3ICszMzQxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRG9jdW1lbnQ6OndyaXRlKERvY3VtZW50
KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8U3RyaW5nPiYmIHN0cmkKICAgICBpZiAoIWlzSFRNTERv
Y3VtZW50KCkgfHwgbV90aHJvd09uRHluYW1pY01hcmt1cEluc2VydGlvbkNvdW50KQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIFNlZ21lbnRl
ZFN0cmluZyB0ZXh0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIHRleHQ7CiAgICAgZm9yIChh
dXRvJiBzdHJpbmcgOiBzdHJpbmdzKQogICAgICAgICB0ZXh0LmFwcGVuZChXVEZNb3ZlKHN0cmlu
ZykpOwogCkBAIC0zMzUzLDcgKzMzNTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6
d3JpdGVsbihEb2N1bWVudCogZW50cnlEb2N1bWVudCwgVmVjdG9yPFN0cmluZz4mJiBzdAogICAg
IGlmICghaXNIVE1MRG9jdW1lbnQoKSB8fCBtX3Rocm93T25EeW5hbWljTWFya3VwSW5zZXJ0aW9u
Q291bnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
Ci0gICAgU2VnbWVudGVkU3RyaW5nIHRleHQ7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgdGV4
dDsKICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHN0cmluZ3MpCiAgICAgICAgIHRleHQuYXBwZW5k
KFdURk1vdmUoc3RyaW5nKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDI2N2NjNjM4MDI2
ZDNkNjQ5YzhmNGNkZTc0YzA1ODI2YzA2MjJiMi4uMmU4YTY3MjZiYjczNGI1ZWZhOTkyZjE1ODkx
M2IxYzUzODdjMDNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTQ5LDEzICs0OSwxMyBAQAog
I2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlN0cmluZ1dpdGhE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSAiVXNlckFjdGlvbkVsZW1lbnRT
ZXQuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlZpc2liaWxp
dHlTdGF0ZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBUZXh0U3RyZWFt
OwogfQogCiBuYW1lc3BhY2UgUEFMIHsKK2NsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFNl
c3Npb25JRDsKIH0KIApAQCAtMjA4LDcgKzIwOSw2IEBAIGNsYXNzIFNjcmlwdFJ1bm5lcjsKIGNs
YXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjsKIGNsYXNzIFNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlcjsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2VnbWVudGVkU3RyaW5nOwog
Y2xhc3MgU2VsZWN0b3JRdWVyeTsKIGNsYXNzIFNlbGVjdG9yUXVlcnlDYWNoZTsKIGNsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKQEAgLTY5MSw3ICs2OTEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNhbmNlbFBhcnNpbmcoKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHdyaXRlKERvY3Vt
ZW50KiBlbnRyeURvY3VtZW50LCBTZWdtZW50ZWRTdHJpbmcmJik7CisgICAgRXhjZXB0aW9uT3I8
dm9pZD4gd3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9jdW1lbnQsIFBBTDo6U2VnbWVudGVkU3RyaW5n
JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHdyaXRlKERvY3VtZW50
KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8U3RyaW5nPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25Pcjx2b2lkPiB3cml0ZWxuKERvY3VtZW50KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8
U3RyaW5nPiYmKTsKIApAQCAtOTU5LDcgKzk1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBVc2VkIGJ5
IERPTSBiaW5kaW5nczsgbm8gZGlyZWN0aW9uIGtub3duLgogICAgIGNvbnN0IFN0cmluZyYgdGl0
bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlLnN0cmluZzsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7Ci0gICAgY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYgdGl0bGVXaXRoRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAg
IGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGVXaXRoRGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV90aXRsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbVN0
cmluZyYgZGlyKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaXIoY29uc3Qg
QXRvbVN0cmluZyYpOwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAgcHJpdmF0ZToKICAgICBTZWNvbmRz
IGRvbVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoYm9vbCBoYXNSZWFjaGVkTWF4TmVzdGluZ0xldmVs
KSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgdXBkYXRlVGl0bGVGcm9tVGl0bGVFbGVtZW50KCk7
Ci0gICAgdm9pZCB1cGRhdGVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7CisgICAg
dm9pZCB1cGRhdGVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICB2
b2lkIHVwZGF0ZUJhc2VVUkwoKTsKIAogICAgIFdlYWtQdHI8SFRNTE1ldGFFbGVtZW50PiBkZXRl
cm1pbmVBY3RpdmVUaGVtZUNvbG9yTWV0YUVsZW1lbnQoKTsKQEAgLTE4NTQsOCArMTg1NCw4IEBA
IHByaXZhdGU6CiAgICAgQ29sb3IgbV9hY3RpdmVMaW5rQ29sb3I7CiAgICAgY29uc3Qgc3RkOjp1
bmlxdWVfcHRyPFZpc2l0ZWRMaW5rU3RhdGU+IG1fdmlzaXRlZExpbmtTdGF0ZTsKIAotICAgIFN0
cmluZ1dpdGhEaXJlY3Rpb24gbV90aXRsZTsKLSAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIG1fcmF3
VGl0bGU7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIG1fdGl0bGU7CisgICAgUEFMOjpT
dHJpbmdXaXRoRGlyZWN0aW9uIG1fcmF3VGl0bGU7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGl0
bGVFbGVtZW50OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFYT2JqZWN0Q2FjaGU+IG1fYXhPYmpl
Y3RDYWNoZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKaW5kZXggMjJiNDU2M2E3M2M1
ZTlkOTc3NjJjZGQxOTdmZjQ5NjQ2MTdjNTEzNS4uNDI5NWJiZDM1MWY3ZGYyNjQ0MTFkZjM0NTk4
MTAxMzZjY2I2OTliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKQEAgLTI4LDEw
ICsyOCwxMyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KIAorbmFtZXNwYWNlIFBBTCB7CitjbGFzcyBTZWdtZW50ZWRTdHJpbmc7Cit9CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnRXcml0ZXI7Ci1jbGFzcyBTZWdt
ZW50ZWRTdHJpbmc7CiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI7CiAKIGNsYXNzIERv
Y3VtZW50UGFyc2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRQYXJzZXI+IHsKQEAgLTQ0
LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgp
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIGluc2VydCBpcyB1c2VkIGJ5IGRvY3VtZW50Lndy
aXRlLgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0KFBBTDo6U2VnbWVudGVkU3RyaW5nJiYpID0gMDsKIAogICAg
IC8vIGFwcGVuZEJ5dGVzIGFuZCBmbHVzaCBhcmUgdXNlZCBieSBEb2N1bWVudFdyaXRlciAodGhl
IGxvYWRlcikuCiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEJ5dGVzKERvY3VtZW50V3JpdGVyJiwg
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCA5ODQyMWY0MzAwMzNiNzkyYzdlMjczNWU2MDUwMTUxNzIyYzBlMjYzLi42MDI1
NmI1OGNmODhjOThmMmRlZGQ3ZTU5YjliZGU4N2M3NDE0NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC04ODAsMTcgKzg4MCwxNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEJlaW5nRHJhZ2dlZChi
b29sIGZsYWcpCiAgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRCZWluZ0Ry
YWdnZWQoKnRoaXMsIGZsYWcpOwogfQogCi1pbmxpbmUgU2Nyb2xsQWxpZ25tZW50IHRvU2Nyb2xs
QWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9uKHN0ZDo6b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBv
c2l0aW9uPiBwb3NpdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGJvb2wgaXNMVFIpCitp
bmxpbmUgU2Nyb2xsQWxpZ25tZW50IHRvU2Nyb2xsQWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9u
KHN0ZDo6b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBvc2l0aW9uPiBwb3NpdGlvbiwgUEFMOjpXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgYm9vbCBpc0xUUikKIHsKICAgICBzd2l0Y2ggKHBvc2l0aW9u
LnZhbHVlX29yKFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6TmVhcmVzdCkpIHsKICAgICBjYXNlIFNj
cm9sbExvZ2ljYWxQb3NpdGlvbjo6U3RhcnQ6IHsKICAgICAgICAgc3dpdGNoICh3cml0aW5nTW9k
ZSkgewotICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKLSAgICAgICAgY2Fz
ZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6IHsKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcDogewogICAgICAgICAgICAgcmV0dXJuIGlzTFRSID8gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkxlZnRBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduUmlnaHRBbHdheXM7CiAgICAgICAg
IH0KLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2Ug
V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiB7CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQ6IHsKICAgICAgICAgICAgIHJldHVybiBpc0xUUiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQm90dG9tQWx3YXlzOwogICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC05MDIsMTIgKzkwMiwxMiBAQCBpbmxpbmUgU2Nyb2xsQWxp
Z25tZW50IHRvU2Nyb2xsQWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9uKHN0ZDo6b3B0aW9uYWw8
U2Nyb2xsTAogICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5
czsKICAgICBjYXNlIFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6RW5kOiB7CiAgICAgICAgIHN3aXRj
aCAod3JpdGluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206
Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiB7CisgICAgICAgIGNhc2Ug
UEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5n
TW9kZTo6Qm90dG9tVG9Ub3A6IHsKICAgICAgICAgICAgIHJldHVybiBpc0xUUiA/IFNjcm9sbEFs
aWdubWVudDo6YWxpZ25SaWdodEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25MZWZ0QWx3
YXlzOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0Ogot
ICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDogeworICAgICAgICBjYXNlIFBB
TDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OlJpZ2h0VG9MZWZ0OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNMVFIgPyBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQm90dG9tQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFsd2F5
czsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtOTIzLDE4ICs5MjMsMTggQEAgaW5s
aW5lIFNjcm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdubWVudEZvcklubGluZURpcmVjdGlvbihz
dGQ6Om9wdGlvbmFsPFNjcm9sbEwKICAgICB9CiB9CiAKLWlubGluZSBTY3JvbGxBbGlnbm1lbnQg
dG9TY3JvbGxBbGlnbm1lbnRGb3JCbG9ja0RpcmVjdGlvbihzdGQ6Om9wdGlvbmFsPFNjcm9sbExv
Z2ljYWxQb3NpdGlvbj4gcG9zaXRpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoraW5saW5l
IFNjcm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdubWVudEZvckJsb2NrRGlyZWN0aW9uKHN0ZDo6
b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBvc2l0aW9uPiBwb3NpdGlvbiwgUEFMOjpXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKIHsKICAgICBzd2l0Y2ggKHBvc2l0aW9uLnZhbHVlX29yKFNjcm9sbExv
Z2ljYWxQb3NpdGlvbjo6U3RhcnQpKSB7CiAgICAgY2FzZSBTY3JvbGxMb2dpY2FsUG9zaXRpb246
OlN0YXJ0OiB7CiAgICAgICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBX
cml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
VG9wVG9Cb3R0b206CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
cEFsd2F5czsKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgICAg
IGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAgICAgICAgICAgICByZXR1cm4g
U2Nyb2xsQWxpZ25tZW50OjphbGlnbkJvdHRvbUFsd2F5czsKLSAgICAgICAgY2FzZSBXcml0aW5n
TW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRv
UmlnaHQ6CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkxlZnRBbHdh
eXM7Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgICAgICBjYXNl
IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bEFsaWdubWVudDo6YWxpZ25SaWdodEFsd2F5czsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTQ1LDEzICs5NDUsMTMgQEAgaW5saW5lIFNj
cm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdubWVudEZvckJsb2NrRGlyZWN0aW9uKHN0ZDo6b3B0
aW9uYWw8U2Nyb2xsTG8KICAgICAgICAgcmV0dXJuIFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50
ZXJBbHdheXM7CiAgICAgY2FzZSBTY3JvbGxMb2dpY2FsUG9zaXRpb246OkVuZDogewogICAgICAg
ICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgogICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Cb3R0b21BbHdheXM7Ci0gICAg
ICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgICAgICBjYXNlIFBBTDo6V3Jp
dGluZ01vZGU6OkJvdHRvbVRvVG9wOgogICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub3BBbHdheXM7Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0
OgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICAg
ICAgcmV0dXJuIFNjcm9sbEFsaWdubWVudDo6YWxpZ25SaWdodEFsd2F5czsKLSAgICAgICAgY2Fz
ZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6UmlnaHRUb0xlZnQ6CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkxlZnRBbHdheXM7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDlhNTEyZWZlN2M5YzAxZWY4MjAx
MmNiNDNmOWI2MTE1NTg5NjdhMmEuLjk2YWQ2YzI5YzkwNGI1MDc1OTY4NjYyOTA1Y2M1MWVkODlj
MzFiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTIwMSw3ICsxMjAxLDcgQEAgc3Rh
dGljIFBvc2l0aW9uIHVwc3RyZWFtSWdub3JpbmdFZGl0aW5nQm91bmRhcmllcyhQb3NpdGlvbiBw
b3NpdGlvbikKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKLUlubGluZVJ1bkFuZE9mZnNldCBQ
b3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0
aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CitJbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246
OmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0eSBhZmZpbml0eSwgUEFMOjpUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgYXV0byBjYXJldE9mZnNldCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKIApAQCAtMTM3Nywx
MyArMTM3NywxMyBAQCBJbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbgogICAgIHJldHVybiB7IHJ1biwg
Y2FyZXRPZmZzZXQgfTsKIH0KIAotVGV4dERpcmVjdGlvbiBQb3NpdGlvbjo6cHJpbWFyeURpcmVj
dGlvbigpIGNvbnN0CitQQUw6OlRleHREaXJlY3Rpb24gUG9zaXRpb246OnByaW1hcnlEaXJlY3Rp
b24oKSBjb25zdAogewogICAgIGlmICghbV9hbmNob3JOb2RlIHx8ICFtX2FuY2hvck5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJl
dHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICBpZiAoYXV0byogYmxvY2tGbG93ID0g
bGluZWFnZU9mVHlwZTxSZW5kZXJCbG9ja0Zsb3c+KCptX2FuY2hvck5vZGUtPnJlbmRlcmVyKCkp
LmZpcnN0KCkpCiAgICAgICAgIHJldHVybiBibG9ja0Zsb3ctPnN0eWxlKCkuZGlyZWN0aW9uKCk7
Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICByZXR1cm4gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7CiB9CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCmluZGV4IDljOTk0YzA5NzhjNmE0ODdkN2UyMmJhMGJkNmUwYTQ4OGM1NGJjMWUuLmRk
Y2JjNzEzZTFjNjA4YTJlNzA4YzU1YzQxMjYwYzc4NjE3NTAxNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5oCkBAIC0xNzEsOSArMTcxLDkgQEAgcHVibGljOgogICAgIGJvb2wgcmVuZGVyc0luRGlmZmVy
ZW50UG9zaXRpb24oY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAogICAgIElubGluZVJ1bkFuZE9m
ZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkpIGNvbnN0OwotICAgIElubGluZVJ1bkFu
ZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFy
eURpcmVjdGlvbikgY29uc3Q7CisgICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSwgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0
OwogCi0gICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKCkgY29uc3Q7CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBwb3NpdGlvbnMgdGhhdCBleGlzdCBiZXR3ZWVuIHR3byBwb3NpdGlv
bnMuCiAgICAgc3RhdGljIHVuc2lnbmVkIHBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25zKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYXdE
YXRhRG9jdW1lbnRQYXJzZXIuaAppbmRleCBkZTM4OTkyMWFjNmRjMGUwMGNlNDY5OWI0NzY4YmJh
OGNlYWQ3YmQ5Li41MGE3MGU4NDc3OTJkMDg1OTgyMGU4YzBmNzdkMTk2NDdiMzg2MGQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmF3RGF0YURvY3VtZW50UGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Jhd0RhdGFEb2N1bWVudFBhcnNlci5oCkBAIC00OSw3ICs0OSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGFwcGVuZEJ5dGVzKHdyaXRlciwgbnVsbHB0ciwgMCk7CiAg
ICAgfQogCi0gICAgdm9pZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpIG92ZXJyaWRlCisgICAg
dm9pZCBpbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJikgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzOTc+OiBK
UyBjb2RlIGNhbiBhbHdheXMgY2FsbCBkb2N1bWVudC53cml0ZSwgd2UgbmVlZCB0byBoYW5kbGUg
aXQuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNDYyOGUxZmJl
OWM4OTc3NjNjZGJkMmU0NThmMTM4MWRiMzg1Mjg1NC4uZDYxZmZkNTlmM2RmOWJkZjRiZDY2M2E5
ZThjNWIwNDE2Yzg2ZTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0
YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9O
b3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwg
c3RkOjpudWxsb3B0KTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZywgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLCBhZGphY2Vu
dFdvcmRSYW5nZSwgc3RkOjpudWxsb3B0KTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtNTAzLDExICs1MDMsMTEgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZv
ckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBhZGRNYXJrZXIoKnByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFs
U3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVw
bGFjZWRCeVJlc3VsdChjb25zdCBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5n
VG9CZVJlcGxhY2VkKQogewogICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMo
KTsKICAgICBpZiAobWFya2Vycy5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKQorICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0g
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKQogICAgICAgICAgICAgcmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRp
dmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0g
bWFrZUJvdW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikK
ICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAq
dXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdl
KGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKKyAg
ICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyB1cGRhdGVk
UGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiwgKnVwZGF0ZWRQYXJhZ3JhcGhFbmRD
b250YWluaW5nQ29ycmVjdGlvbiB9LCBQQUw6OkNoYXJhY3RlclJhbmdlKGNvcnJlY3Rpb25PZmZz
ZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKIAogICAgIC8vIENoZWNrIHRv
IHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCiAgICAgaWYgKHBsYWluVGV4dChyZXBsYWNl
bWVudFJhbmdlKSAhPSBhbHRlcm5hdGl2ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggNzVhZDc5MDljMDA2YTFkNDMyMTBl
YmUwNzUwNDk3NWUzMTdhYjE1ZC4uYzlkMWMwN2VmMzE1MGNmM2Q1Nzg4NjM0ZDNkZGIyNDE3ZDAx
ODY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorbmFtZXNwYWNlIFBBTCB7CitzdHJ1Y3QgVGV4dENo
ZWNraW5nUmVzdWx0OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbXBvc2l0
ZUVkaXRDb21tYW5kOwpAQCAtNDUsNyArNDksNiBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwog
CiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmU7CiBzdHJ1Y3QgU2ltcGxlUmFuZ2U7Ci1zdHJ1
Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQog
Ly8gVGhlc2UgYmFja3NsYXNoZXMgYXJlIGZvciBtYWtpbmcgc3R5bGUgY2hlY2tlciBoYXBweS4K
QEAgLTk0LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oY29uc3Qg
U2ltcGxlUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZWRTdHJpbmcpOyB9KQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZh
bHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQgb3V0LgotICAgIGJv
b2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQmLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0
IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyBy
ZXR1cm4gdHJ1ZTsgfSk7CisgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNl
ZEJ5UmVzdWx0KGNvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVzdWx0JiwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURf
UEFSQU0oc3RyaW5nVG9CZVJlcGxhY2VkKTsgcmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFs
U3RyaW5nKTsgfSkKIAogICAgIGJvb2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4mLCBFdmVudCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5nZS5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5nZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3YTc0MDQ0MmNmY2Y1N2NkMGY1YmEzMmFhYjBhNjlmZDIyNzg0MWI1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q2hhcmFjdGVyUmFuZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2Vu
ZGlmCi0KLSNpZiBVU0UoRk9VTkRBVElPTikKLXR5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFu
Z2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQ2hhcmFjdGVyUmFu
Z2UgewotICAgIHVpbnQ2NF90IGxvY2F0aW9uIHsgMCB9OwotICAgIHVpbnQ2NF90IGxlbmd0aCB7
IDAgfTsKLQotICAgIENoYXJhY3RlclJhbmdlKCkgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhwciBD
aGFyYWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKTsKLQotI2lm
IFVTRShDRikKLSAgICBjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2UoQ0ZSYW5nZSk7Ci0gICAgY29u
c3RleHByIG9wZXJhdG9yIENGUmFuZ2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKEZPVU5E
QVRJT04pCi0gICAgY29uc3RleHByIENoYXJhY3RlclJhbmdlKE5TUmFuZ2UpOwotICAgIGNvbnN0
ZXhwciBvcGVyYXRvciBOU1JhbmdlKCkgY29uc3Q7Ci0jZW5kaWYKLX07Ci0KLWNvbnN0ZXhwciBD
aGFyYWN0ZXJSYW5nZTo6Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90
IGxlbmd0aCkKLSAgICA6IGxvY2F0aW9uKGxvY2F0aW9uKQotICAgICwgbGVuZ3RoKGxlbmd0aCkK
LXsKLX0KLQotI2lmIFVTRShDRikKLQotY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0
ZXJSYW5nZShDRlJhbmdlIHJhbmdlKQotICAgIDogQ2hhcmFjdGVyUmFuZ2UocmFuZ2UubG9jYXRp
b24sIHJhbmdlLmxlbmd0aCkKLXsKLSAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0ga0NGTm90
Rm91bmQpOwotfQotCi1jb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2U6Om9wZXJhdG9yIENGUmFuZ2Uo
KSBjb25zdAotewotICAgIENGSW5kZXggbG9jYXRpb25DRiA9IGxvY2F0aW9uOwotICAgIENGSW5k
ZXggbGVuZ3RoQ0YgPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHsgbG9jYXRpb25DRiwgbGVuZ3RoQ0Yg
fTsKLX0KLQotI2VuZGlmCi0KLSNpZiBVU0UoRk9VTkRBVElPTikgJiYgZGVmaW5lZChfX09CSkNf
XykKLQotY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0ZXJSYW5nZShOU1JhbmdlIHJh
bmdlKQotICAgIDogQ2hhcmFjdGVyUmFuZ2UgeyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3Ro
IH0KLXsKLSAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCk7Ci19Ci0KLWNv
bnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6b3BlcmF0b3IgTlNSYW5nZSgpIGNvbnN0Ci17Ci0gICAg
TlNVSW50ZWdlciBsb2NhdGlvbk5TID0gbG9jYXRpb247Ci0gICAgTlNVSW50ZWdlciBsZW5ndGhO
UyA9IGxlbmd0aDsKLSAgICByZXR1cm4geyBsb2NhdGlvbk5TLCBsZW5ndGhOUyB9OwotfQotCi0j
ZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZS5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0YXRpb25BbHRlcm5hdGl2ZS5oCmluZGV4IDYyY2NhMTJlMDVjYzJjNWI5ZjRhMzJmYmZk
M2NhMDRiYjc5YzI1NWYuLmU0YjU0YjMwMjFmNWVmMmQ3YmQ3NTliYWVlYTVjZDEwOWVmY2U5YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlLmgKQEAg
LTI1LDEzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNoYXJhY3RlclJh
bmdlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUmFuZ2UuaD4KICNpbmNsdWRlICJE
aWN0YXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IERpY3Rh
dGlvbkFsdGVybmF0aXZlIHsKLSAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBQQUw6OkNo
YXJhY3RlclJhbmdlIHJhbmdlOwogICAgIERpY3RhdGlvbkNvbnRleHQgY29udGV4dDsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IDk4MGRkZTg1MWYxMDcyM2Q3OGY2NjE5
ODQyNzMyNDhmN2EwZmE1YzQuLjQwOTkzYjM2OGMzNjg0ODhjNzk2NDQyNWVlMjNkNDJlNjlhMGQ0
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMzI1LDE0ICszMjUsMTQgQEAg
RWxlbWVudCogZW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlIHJ1bGUpCiAgICAgcmV0dXJuIGlzPEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpID8gZG93
bmNhc3Q8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgOiBudWxscHRyOwogfQogCi1UZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQor
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQogewogICAgIGF1dG8gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwb3NpdGlv
bi5jb250YWluZXJOb2RlKCkpOwogICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBUZXh0
RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsK
ICAgICBhdXRvIHJlbmRlcmVyID0gYmxvY2stPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJl
cikKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5kaXJl
Y3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCA5NmNlYzk3Y2Y3ZTNi
MTZjZTBmMWMwNWJlNzRkNzIwOGNjYzRkYWI5Li5jYWM2MWI1YjVjNDY0ZGFkOTAwNjJjOGM3MDBj
NThiYmYzNDM3ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtMTMzLDcgKzEzMyw3
IEBAIGJvb2wgaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mKTsKIHVuc2ln
bmVkIG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3Rlcyhjb25zdCBQb3NpdGlvbiYpOwogdm9pZCB1
cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKFBvc2l0aW9uJiwgTm9kZSYpOwogCi1XRUJDT1JF
X0VYUE9SVCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9z
aXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKGNvbnN0IFBvc2l0aW9uJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IFZpc2libGVQb3NpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDE3MjRjZjBl
NTBiYWE1YjliMjQxMzA0ODFlZTcyNGNiNzgyMDdhYTQuLmExNzU4ZDdkODM5OWU2ZDQ2OWQ4NmVh
NzQzNzFiNzRmZmY1NTI1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcyOCw3
ICs3MjgsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbAogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIHJhbmdlVG9DaGVjayA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9k
ZVRvQ2hlY2spOwotICAgIGlmIChhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3Jl
YXRlKHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzaygqbm9kZVRvQ2hlY2ssIHsgVGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgfSksIFRleHRDaGVj
a2luZ1Byb2Nlc3NCYXRjaCwgcmFuZ2VUb0NoZWNrLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVj
aykpCisgICAgaWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nLCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgfSksIFBBTDo6
VGV4dENoZWNraW5nUHJvY2Vzc0JhdGNoLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaywgcmFu
Z2VUb0NoZWNrKSkKICAgICAgICAgbV9zcGVsbENoZWNrZXItPnJlcXVlc3RDaGVja2luZ0Zvcihy
ZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCkBAIC0xOTI5LDkgKzE5MjksOSBAQCBXcml0
aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgfQogCiAgICAgc3dpdGNoIChyZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rp
b24oKSkgewotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6TFRSOgorICAgIGNhc2UgUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFI6CiAgICAgICAgIHJldHVybiBXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9S
aWdodDsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OlJUTDoKKyAgICBjYXNlIFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMOgogICAgICAgICByZXR1cm4gV3JpdGluZ0RpcmVjdGlvbjo6UmlnaHRUb0xl
ZnQ7CiAgICAgfQogICAgIApAQCAtMjQxOCw3ICsyNDE4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKSBjb25zdAog
ICAgIHJldHVybiBndWVzc2VzOwogfQogCi1UZXh0Q2hlY2tpbmdHdWVzc2VzIEVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoKQorUEFMOjpUZXh0Q2hlY2tpbmdHdWVz
c2VzIEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoKQogewogICAg
IGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgc3RkOjpvcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2U7CkBAIC0yNDg4LDggKzI0ODgsOCBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
d29yZFN0YXJ0LAogICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsKICAgICBPcHRpb25T
ZXQ8VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9uczsKICAgICBpZiAoaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9u
cy5hZGQoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpOwotICAgIGlmICghdGV4dENoZWNraW5n
T3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpCisgICAgICAgIHRl
eHRDaGVja2luZ09wdGlvbnMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpOwor
ICAgIGlmICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBhZGphY2VudFdvcmRz
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CkBA
IC0yNTAzLDEwICsyNTAzLDEwIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsCiAgICAgaWYgKHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwog
Ci0gICAgICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25z
OworICAgICAgICBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdP
cHRpb25zOwogCiAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcpOworICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CiAKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFD
RU1FTlQpCiAgICAgICAgIGlmIChkb1JlcGxhY2VtZW50CkBAIC0yNTE0LDE0ICsyNTE0LDE0IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsCiAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZCgpCiAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNEYXNo
U3Vic3RpdHV0aW9uRW5hYmxlZCgpCiAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAgICAgICAgICAgICAgICB8fCAodGV4dENoZWNraW5nT3B0
aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpKSkKLSAgICAgICAgICAgIHRleHRDaGVja2luZ09w
dGlvbnMuYWRkKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAg
ICB8fCAodGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkpKQor
ICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBl
OjpSZXBsYWNlbWVudCk7CiAjZW5kaWYKLSAgICAgICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25z
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSAmJiAhdGV4dENoZWNraW5nT3B0
aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpCisgICAgICAgIGlm
ICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNw
ZWxsaW5nKSAmJiAhdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlJlcGxhY2VtZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICAgICAgICAgIHRleHRDaGVj
a2luZ09wdGlvbnMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAKICAgICAg
ICAgYXV0byBzZW50ZW5jZVN0YXJ0ID0gc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCk7CiAgICAg
ICAgIGF1dG8gc2VudGVuY2VFbmQgPSBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCk7CkBAIC0yNjkw
LDcgKzI2OTAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2Vs
ZWN0aW9uLCBmYWxzZSk7CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tp
bmdPcHRpb25zLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5n
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50
UmFuZ2UsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCit2
b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRp
b25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxTaW1wbGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCiB7CiAgICAgaWYgKHBsYXRmb3Jt
RHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MDAsOCAr
MjcwMCw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0
IGJlIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCiAgICAgQVNTRVJUKCFt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCi0g
ICAgYm9vbCBzaG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7Ci0gICAgYm9vbCBzaG91bGRTaG93Q29ycmVjdGlv
blBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpT
aG93Q29ycmVjdGlvblBhbmVsKTsKKyAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENo
ZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwor
ICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsKTsKIAog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc2VsZWN0aW9ucyBhbHJlYWR5IGV4
cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KICAgICBpZiAoIWNsaWVudCgpIHx8ICFzcGVsbGlu
Z1JhbmdlIHx8IChzaG91bGRNYXJrR3JhbW1hciAmJiAhZ3JhbW1hclJhbmdlKSkKQEAgLTI3Mjcs
NyArMjcyNyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgYXV0byYgcGFyYWdyYXBo
UmFuZ2UgPSBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCk7CiAgICAgYXV0byYgY2hl
Y2tpbmdSYW5nZSA9IGFzeW5jaHJvbm91cyA/IHBhcmFncmFwaFJhbmdlIDogcmFuZ2VUb0NoZWNr
OwogICAgIGF1dG8mIHRleHRSZXBsYWNlbWVudFJhbmdlID0gYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSA/ICphdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlIDogcmFuZ2VUb0NoZWNrOwotICAgIGF1
dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBU
ZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGNoZWNraW5nUmFuZ2UsIHRleHRSZXBsYWNl
bWVudFJhbmdlLCBwYXJhZ3JhcGhSYW5nZSk7CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVj
a1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vz
c0luY3JlbWVudGFsLCBjaGVja2luZ1JhbmdlLCB0ZXh0UmVwbGFjZW1lbnRSYW5nZSwgcGFyYWdy
YXBoUmFuZ2UpOwogICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzM2
LDI0ICsyNzM2LDI0IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIFZl
Y3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVk
T3B0aW9ucywgcmVzdWx0cywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgbWFya0FuZFJlcGxhY2VGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpLCByZXN1bHRzKTsK
IH0KIAotc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVj
a2luZ1R5cGUgdHlwZSkKK3N0YXRpYyBib29sIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50VHlw
ZShQQUw6OlRleHRDaGVja2luZ1R5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIFRleHRDaGVja2luZ1R5cGU6Ok5vbmU6Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBl
OjpTcGVsbGluZzoKLSAgICBjYXNlIFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI6CisgICAgY2Fz
ZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6Ok5vbmU6CisgICAgY2FzZSBQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nOgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFy
OgogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5r
OgotICAgIGNhc2UgVGV4dENoZWNraW5nVHlwZTo6UXVvdGU6Ci0gICAgY2FzZSBUZXh0Q2hlY2tp
bmdUeXBlOjpEYXNoOgotICAgIGNhc2UgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ6Ci0g
ICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uOgotICAgIGNhc2UgVGV4dENoZWNr
aW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbDoKKyAgICBjYXNlIFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6TGluazoKKyAgICBjYXNlIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UXVvdGU6CisgICAg
Y2FzZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkRhc2g6CisgICAgY2FzZSBQQUw6OlRleHRDaGVj
a2luZ1R5cGU6OlJlcGxhY2VtZW50OgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uOgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlv
blBhbmVsOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yNzY1LDcgKzI3NjUsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9y
U3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbgogICAg
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFj
ZW1lbnQpLT5hcHBseSgpOwogfQogCi1zdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1By
ZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJh
Z3JhcGgsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UpCitzdGF0aWMg
dm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
VGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgUEFMOjpDaGFyYWN0ZXJSYW5n
ZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKIHsKICAgICBSZWYgc2NvcGVOb2RlID0gZG93bmNhc3Q8
Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBoLnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIo
KS5yb290Tm9kZSgpKTsKICAgICBhdXRvIHBhcmFncmFwaENoYXJhY3RlclJhbmdlID0gY2hhcmFj
dGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwg
cGFyYWdyYXBoLnBhcmFncmFwaFJhbmdlKCkpOwpAQCAtMjc4MSw3ICsyNzgxLDcgQEAgc3RhdGlj
IHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBo
KFRleHRDaGVja2luZ1BhcmEKICAgICBwYXJhZ3JhcGggPSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
c3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENoZWNraW5nUmFuZ2UsIG5ld1BhcmFncmFwaFJhbmdl
KTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0
cykKK3ZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0
cykKIHsKICAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwog
CkBAIC0yNzg5LDEyICsyNzg5LDEyIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihj
b25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgVGV4
dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChyZXF1ZXN0LmNoZWNraW5nUmFuZ2UoKSwgcmVx
dWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKCksIHJlcXVlc3QucGFyYWdyYXBoUmFuZ2Uo
KSk7CiAKICAgICAvLyBGSVhNRTogTWFyayB0aGlzIGNvbnN0IG9uY2UgTVNWQyBidWcgaXMgZml4
ZWQ6IDxodHRwczovL2RldmVsb3BlcmNvbW11bml0eS52aXN1YWxzdHVkaW8uY29tL2NvbnRlbnQv
cHJvYmxlbS8zMTY3MTMvbXN2Yy1jYW50LWNvbXBpbGUtd2Via2l0cy1vcHRpb25zZXRjb250YWlu
c2FueS5odG1sPi4KLSAgICBib29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCA9IHRleHRDaGVj
a2luZ09wdGlvbnMuY29udGFpbnNBbnkoeyBUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSwgVGV4dENo
ZWNraW5nVHlwZTo6RGFzaCwgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQgfSk7Ci0gICAg
Ym9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKLSAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0g
dGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsK
LSAgICBib29sIHNob3VsZE1hcmtMaW5rID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhU
ZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKTsKLSAgICBib29sIHNob3VsZFNob3dDb3JyZWN0aW9uUGFu
ZWwgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNob3dD
b3JyZWN0aW9uUGFuZWwpOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9uID0gc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCB8fCB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOworICAgIGJvb2wgc2hvdWxkUGVyZm9ybVJlcGxh
Y2VtZW50ID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWluc0FueSh7IFBBTDo6VGV4dENoZWNr
aW5nVHlwZTo6UXVvdGUsIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6RGFzaCwgUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpSZXBsYWNlbWVudCB9KTsKKyAgICBib29sIHNob3VsZE1hcmtTcGVsbGluZyA9
IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZyk7CisgICAgYm9vbCBzaG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICBib29sIHNob3Vs
ZE1hcmtMaW5rID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OkxpbmspOworICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRD
aGVja2luZ09wdGlvbnMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVj
dGlvblBhbmVsKTsKKyAgICBib29sIHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiA9IHNob3VsZFNo
b3dDb3JyZWN0aW9uUGFuZWwgfHwgdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOwogI2lmICFVU0UoQVVUT0NPUlJFQ1RJT05fUEFO
RUwpCiAgICAgQVNTRVJUKCFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKTsKICNlbmRpZgpAQCAt
MjgyMCw3ICsyODIwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGF1dG8gc3Bl
bGxpbmdSYW5nZUVuZE9mZnNldCA9IHBhcmFncmFwaC5jaGVja2luZ0VuZCgpICsgb2Zmc2V0RHVl
VG9SZXBsYWNlbWVudDsKLSAgICAgICAgVGV4dENoZWNraW5nVHlwZSByZXN1bHRUeXBlID0gcmVz
dWx0c1tpXS50eXBlOworICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGUgcmVzdWx0VHlwZSA9
IHJlc3VsdHNbaV0udHlwZTsKICAgICAgICAgYXV0byByZXN1bHRMb2NhdGlvbiA9IHJlc3VsdHNb
aV0ucmFuZ2UubG9jYXRpb24gKyBvZmZzZXREdWVUb1JlcGxhY2VtZW50OwogICAgICAgICBhdXRv
IHJlc3VsdExlbmd0aCA9IHJlc3VsdHNbaV0ucmFuZ2UubGVuZ3RoOwogICAgICAgICBhdXRvIHJl
c3VsdEVuZExvY2F0aW9uID0gcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGg7CkBAIC0yODM0
LDE0ICsyODM0LDE0IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVs
bENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgIC8vIDIuIFJl
c3VsdCBmYWxscyB3aXRoaW4gc3BlbGxpbmdSYW5nZS4KICAgICAgICAgLy8gMy4gVGhlIHdvcmQg
aW4gcXVlc3Rpb24gZG9lc24ndCBlbmQgYXQgYW4gYW1iaWd1b3VzIGJvdW5kYXJ5LiBGb3IgaW5z
dGFuY2UsIHdlIHdvdWxkIG5vdCBtYXJrCiAgICAgICAgIC8vICAgICJ3b3VsZG4nIiBhcyBtaXNz
cGVsbGVkIHJpZ2h0IGFmdGVyIGFwb3N0cm9waGUgaXMgdHlwZWQuCi0gICAgICAgIGlmIChzaG91
bGRNYXJrU3BlbGxpbmcgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0VHlw
ZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZworICAgICAgICBpZiAoc2hvdWxkTWFya1Nw
ZWxsaW5nICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3VsdFR5cGUgPT0gUEFM
OjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZwogICAgICAgICAgICAgJiYgcmVzdWx0TG9jYXRp
b24gPj0gcGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSAmJiByZXN1bHRFbmRMb2NhdGlvbiA8PSBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeSkg
ewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDApOwogICAgICAgICAgICAgYXV0
byBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHsgcmVzdWx0TG9jYXRpb24s
IHJlc3VsdExlbmd0aCB9KTsKICAgICAgICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMoeyByZXN1bHRMb2Nh
dGlvbiwgcmVzdWx0TGVuZ3RoIH0pKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dy
YW1tYXIgJiYgcmVzdWx0VHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgJiYg
cGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMoeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVu
Z3RoIH0pKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCk7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGRldGFpbCA6IHJlc3VsdHNbaV0uZGV0YWlscykgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChkZXRhaWwucmFuZ2UubGVuZ3RoID4gMCk7CkBAIC0yODU2LDcgKzI4NTYs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExl
bmd0aCA+IDApOwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCAm
JiAocmVzdWx0RW5kTG9jYXRpb24gPCBhdXRvbWF0aWNSZXBsYWNlbWVudEVuZExvY2F0aW9uCi0g
ICAgICAgICAgICAgICAgfHwgKHJlc3VsdFR5cGUgIT0gVGV4dENoZWNraW5nVHlwZTo6UmVwbGFj
ZW1lbnQgJiYgcmVzdWx0VHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkpCisg
ICAgICAgICAgICAgICAgfHwgKHJlc3VsdFR5cGUgIT0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpS
ZXBsYWNlbWVudCAmJiByZXN1bHRUeXBlICE9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAvLyBBcHBs
eSByZXBsYWNlbWVudCBpZjoKQEAgLTI4NjcsNyArMjg2Nyw3IEBAIHZvaWQgRWRpdG9yOjptYXJr
QW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVj
dG9yPFRlCiAgICAgICAgICAgICBhdXRvIHJhbmdlVG9SZXBsYWNlID0gcGFyYWdyYXBoLnN1YnJh
bmdlKHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgLy8g
QWRkaW5nIGxpbmtzIHNob3VsZCBiZSBkb25lIG9ubHkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhleSBh
cmUgdHlwZWQuCi0gICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
OjpMaW5rICYmIHNlbGVjdGlvbk9mZnNldCAhPSByZXN1bHRFbmRMb2NhdGlvbiArIDEpCisgICAg
ICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmsgJiYg
c2VsZWN0aW9uT2Zmc2V0ICE9IHJlc3VsdEVuZExvY2F0aW9uICsgMSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50
IHx8IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiB8fCBzaG91bGRNYXJrTGluaykgfHwgIWRvUmVw
bGFjZW1lbnQpCkBAIC0yODk0LDcgKzI4OTQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxh
Y2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgeworICAgICAgICAg
ICAgaWYgKHJlc3VsdFR5cGUgPT0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSB7CiAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9u
VG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKQEAgLTI5
MTcsNyArMjkxNyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVs
bENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdExvY2F0aW9uIDwgc2VsZWN0aW9uT2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25PZmZzZXQgKz0gcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1bHRMZW5ndGg7
CiAKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVw
bGFjZW1lbnRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZSh7IHJlc3VsdExvY2F0aW9uLCByZXBs
YWNlbWVudC5sZW5ndGgoKSB9KTsKICAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2U6OkFjY2VwdGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZSk7CiAK
QEAgLTI5NTgsNyArMjk1OCw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0
cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJl
c3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsICpzZWxlY3Rpb24pOwogICAgIFRleHRD
aGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0
UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7Ci0gICAgYXV0byBjaGFuZ2VkUmFuZ2Ug
PSBwYXJhZ3JhcGguc3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3Rh
cnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpKTsKKyAgICBhdXRvIGNoYW5nZWRSYW5nZSA9
IHBhcmFncmFwaC5zdWJyYW5nZShQQUw6OkNoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgYWRkTWFya2VyKGNoYW5n
ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CiAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlKTsKICNl
bHNlCkBAIC0yOTc4LDkgKzI5NzgsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlYwogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KCkgaXMgdHJpZ2dlcmVkIGJ5IHNlbGVjdGlvbiBjaGFuZ2UsIGluIHdoaWNoIGNhc2Ugd2UgY2hl
Y2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIsIGJ1dCBkb24ndCBhdXRvY29ycmVjdCBtaXNzcGVsbGlu
Z3MuCi0gICAgICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRp
b25zIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgfTsKKyAgICAgICAgT3B0aW9uU2V0PFBB
TDo6VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucyB7IFBBTDo6VGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcgfTsKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CisgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNw
ZWxsQ2hlY2tpbmdSYW5nZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CiAgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENo
ZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENoZWNraW5nUmFuZ2UsIGdy
YW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgICAgIHJldHVybjsKQEAg
LTMwMDEsNyArMzAwMSw3IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgaWYgKCFkb2N1
bWVudCgpLm1hcmtlcnMoKS5oYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVk
aXRpbmcoKSAmJiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VN
YXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKSkK
KyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c2hvdWxkUmVtb3ZlTWFya2Vy
c1Vwb25FZGl0aW5nKCkgJiYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3Vs
ZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUg
dGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdl
IHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mCkBAIC0zNjkyLDcgKzM2OTIsNyBA
QCBzdGF0aWMgVmVjdG9yPFNpbXBsZVJhbmdlPiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyB7
IHRleHQgfS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICB3aGlsZSAoc2Nhbm5lclBvc2l0
aW9uIDwgbGVuZ3RoICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjpmaW5kKCZjaGFyYWN0ZXJz
W3NjYW5uZXJQb3NpdGlvbl0sIGxlbmd0aCAtIHNjYW5uZXJQb3NpdGlvbiwgJnJlbGF0aXZlU3Rh
cnRQb3NpdGlvbiwgJnJlbGF0aXZlRW5kUG9zaXRpb24pKSB7CiAgICAgICAgIEFTU0VSVChzY2Fu
bmVyUG9zaXRpb24gKyByZWxhdGl2ZUVuZFBvc2l0aW9uIDw9IGxlbmd0aCk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQocmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCBDaGFyYWN0ZXJSYW5nZShz
Y2FubmVyUG9zaXRpb24gKyByZWxhdGl2ZVN0YXJ0UG9zaXRpb24sIHJlbGF0aXZlRW5kUG9zaXRp
b24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24pKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVz
b2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCBQQUw6OkNoYXJhY3RlclJhbmdlKHNjYW5uZXJQb3Np
dGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiwgcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0
aXZlU3RhcnRQb3NpdGlvbikpKTsKICAgICAgICAgc2Nhbm5lclBvc2l0aW9uICs9IHJlbGF0aXZl
RW5kUG9zaXRpb247CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODAzLDExICszODAz
LDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVj
a2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nKSkgeworICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENo
ZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpIHsKICAgICAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5n
ZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAg
ICByZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNo
b3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6Okdy
YW1tYXIpKSB7CisgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5z
aG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBzZW50ZW5jZVJhbmdlID0gbmV3
U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIHJl
bW92ZU1hcmtlcnMoKnNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAg
ICAgICAgfQpAQCAtMzg2OCw1MSArMzg2OCw1MSBAQCBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3Rh
cnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaQog
ICAgIHJldHVybiBmYWxzZTsKIH0gICAgICAgCiAKLU9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBl
PiBFZGl0b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290RWRp
dGFibGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0
aW9ucykKK09wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRl
eHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0YWJsZUVsZW1lbnQsIE9wdGlv
blNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMpCiB7CiAjaWYg
VVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBib29sIG9ubHlBbGxvd3NUZXh0UmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICBpZiAoUmVm
UHRyIGhvc3QgPSByb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hvc3QoKSkKICAgICAgICAgb25s
eUFsbG93c1RleHRSZXBsYWNlbWVudCA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpICYmIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpob3N0KS5pc1NwZWxsY2hlY2tEaXNhYmxlZEV4Y2Vw
dFRleHRSZXBsYWNlbWVudCgpOwogICAgIGlmIChvbmx5QWxsb3dzVGV4dFJlcGxhY2VtZW50KQot
ICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OworICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zID0g
dGV4dENoZWNraW5nT3B0aW9ucyAmIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyb290RWRpdGFibGVFbGVtZW50KTsKICNlbmRpZgog
Ci0gICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRh
aW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKLSAgICBib29sIHNob3VsZE1hcmtHcmFt
bWFyID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFt
bWFyKTsKKyAgICBib29sIHNob3VsZE1hcmtTcGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CisgICAgYm9vbCBzaG91
bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpHcmFtbWFyKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5z
KFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOwotICAgIGJvb2wgc2hvdWxk
Q2hlY2tGb3JDb3JyZWN0aW9uID0gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCB8fCB0ZXh0Q2hl
Y2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOworICAg
IGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29u
dGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsKTsKKyAgICBi
b29sIHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiA9IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwg
fHwgdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkNv
cnJlY3Rpb24pOwogI2VuZGlmCiAKLSAgICBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hl
Y2tpbmdUeXBlczsKKyAgICBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2lu
Z1R5cGVzOwogICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNraW5nVHlw
ZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKKyAgICAgICAgY2hlY2tpbmdUeXBl
cy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CiAgICAgaWYgKHNob3VsZE1h
cmtHcmFtbWFyKQotICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpH
cmFtbWFyKTsKKyAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBl
OjpHcmFtbWFyKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoc2hvdWxkQ2hl
Y2tGb3JDb3JyZWN0aW9uKQotICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdU
eXBlOjpDb3JyZWN0aW9uKTsKKyAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpDb3JyZWN0aW9uKTsKICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bCkKLSAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJl
Y3Rpb25QYW5lbCk7CisgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCk7CiAKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQ
TEFDRU1FTlQpCi0gICAgYm9vbCBzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgPSB0ZXh0Q2hlY2tp
bmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKKyAgICBi
b29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFp
bnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCk7CiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCkgewogICAgICAgICBpZiAoIW9ubHlBbGxvd3NUZXh0UmVwbGFjZW1l
bnQpIHsKICAgICAgICAgICAgIGlmIChpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkp
Ci0gICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6TGlu
ayk7CisgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlOjpMaW5rKTsKICAgICAgICAgICAgIGlmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2lu
Z1R5cGU6OlF1b3RlKTsKKyAgICAgICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OlF1b3RlKTsKICAgICAgICAgICAgIGlmIChpc0F1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQo
VGV4dENoZWNraW5nVHlwZTo6RGFzaCk7CisgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5h
ZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKTsKICAgICAgICAgICAgIGlmIChzaG91bGRN
YXJrU3BlbGxpbmcgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCi0g
ICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbik7CisgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpDb3JyZWN0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCi0gICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChU
ZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCk7CisgICAgICAgICAgICBjaGVja2luZ1R5cGVz
LmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKICAgICB9CiAjZW5kaWYK
ICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTM5NDYsNyArMzk0Niw3IEBAIHN0
ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdy
YXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpy
YW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3Vs
dCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JUZXh0
Q2hlY2tpbmdSZXN1bHQoY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29u
c3QKIHsKICAgICBpZiAoIXJlc3VsdC5yYW5nZS5sZW5ndGgpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CkBAIC00MjE3LDcgKzQyMTcsNyBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNo
bWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+Jgog
CiAjZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIAotdm9pZCBFZGl0b3I6Omhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0
ZSkKK3ZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShQQUw6OlRleHRDaGVja2lu
Z1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAppbmRleCAwMWZlMGI1ZTA0NGVmNjNmMjZhNzFiNDcyZWY5OGIxMWMy
MjhiOTFjLi4xNzc2YjI3ZjM0YjVkYWQ3MjQzZTVjZGQ4YTU4ZDUzNGIxYzAyN2VlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgotI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0
L1RleHRDaGVja2luZy5oPgogI2luY2x1ZGUgIlRleHRFdmVudElucHV0VHlwZS5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvckJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5o
IgpAQCAtNTEsNiArNTEsNyBAQCBPQkpDX0NMQVNTIE5TTXV0YWJsZURpY3Rpb25hcnk7CiAKIG5h
bWVzcGFjZSBQQUwgewogY2xhc3MgS2lsbFJpbmc7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0
OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MCw3ICs5MSw2IEBAIHN0cnVjdCBEaWN0
YXRpb25BbHRlcm5hdGl2ZTsKIHN0cnVjdCBGb250QXR0cmlidXRlczsKIHN0cnVjdCBQYXN0ZWJv
YXJkUGxhaW5UZXh0Owogc3RydWN0IFBhc3RlYm9hcmRVUkw7Ci1zdHJ1Y3QgVGV4dENoZWNraW5n
UmVzdWx0OwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIHN0cnVjdCBQcm9taXNl
ZEF0dGFjaG1lbnRJbmZvOwpAQCAtMzI1LDIwICszMjUsMjAgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBtaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1pc3NwZWxs
ZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tlZE5vZGUpIGNvbnN0OwogICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBjb25zdDsK
LSAgICBUZXh0Q2hlY2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsKCk7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsKCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1
c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2Rl
KikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwog
ICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpOyAvLyBSZXR1cm5zIGZpcnN0IG1pc3NwZWxsaW5nIHJhbmdlLgogICAg
IHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQg
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGdyYW1tYXJTZWxlY3Rpb24pOwotICAgIHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOworICAg
IHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmLCBjb25zdCBW
ZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
U3RyaW5nJik7CiAKICAgICBib29sIGlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX292ZXJ3cml0ZU1vZGVFbmFibGVkOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0
b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwogCi0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29u
c3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5nUmFuZ2UsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZ3JhbW1hclJhbmdlKTsKKyAgICB2b2lkIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFBBTDo6VGV4dENo
ZWNraW5nVHlwZT4sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1Jh
bmdlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1l
bnRSYW5nZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSk7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAog
I2VuZGlmCkBAIC01NTMsOSArNTUzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVz
dWx0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFBB
TDo6VGV4dENoZWNraW5nUmVzdWx0KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7Ci0g
ICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQo
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgUEFMOjpUZXh0Q2hlY2tp
bmdSZXN1bHQmKSBjb25zdDsKICAgICBib29sIGlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOyB9CiAKICAgICB2
b2lkIHNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oYm9vbCBiKSB7IG1faXNHZXR0aW5n
RGljdGlvbmFyeVBvcHVwSW5mbyA9IGI7IH0KQEAgLTU5Niw3ICs1OTYsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Ny
b2xsQWxpZ25tZW50JiA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgUmV2
ZWFsRXh0ZW50T3B0aW9uID0gRG9Ob3RSZXZlYWxFeHRlbnQpOwogICAgIHN0ZDo6b3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZyk7Ci0gICAgT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290RWRpdGFi
bGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4pOworICAgIE9wdGlvblNldDxQ
QUw6OlRleHRDaGVja2luZ1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBO
b2RlJiByb290RWRpdGFibGVFbGVtZW50LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBl
Pik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRv
ckJlaGF2aW9ycykgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggZGIxNjJhNGM1ODk4ZmUyZTk0Mjg5ZjBjOTY4NTAwMDM3NmEzZmIwYy4uYzYw
NWJjYjVlZGVlMDdlNzJkODgzY2Y0YWYzMWJkZjVkODdiMmMxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTY1NCwxMiArNjU0LDEyIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnRleHRXYXNSZXBsYWNlZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnCiAgICAgfQogfQogCi1UZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9u
OjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkKK1BBTDo6VGV4dERpcmVjdGlvbiBGcmFtZVNl
bGVjdGlvbjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpCiB7CiAgICAgcmV0dXJuIFdlYkNv
cmU6OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkpOwogfQog
Ci1UZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZlNlbGVjdGlvbigpCitQ
QUw6OlRleHREaXJlY3Rpb24gRnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKCkK
IHsKICAgICAvLyBHZXQgYm90IFZpc2libGVQb3NpdGlvbnMgZmlyc3QgYmVjYXVzZSB2aXNpYmxl
U3RhcnQoKSBhbmQgdmlzaWJsZUVuZCgpCiAgICAgLy8gY2FuIGNhdXNlIGxheW91dCwgd2hpY2gg
aGFzIHRoZSBwb3RlbnRpYWwgdG8gaW52YWxpZGF0ZSBsaW5lYm94ZXMuCkBAIC02OTMsNyArNjkz
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24gYWx0
ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3QKICAgICB9IGVsc2UgewogICAgICAgICBzd2l0
Y2ggKGRpcmVjdGlvbikgewogICAgICAgICBjYXNlIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQ6
Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsKQEAg
LTcwMiw3ICs3MDIsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0
ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdAogICAgICAgICAgICAgYmFz
ZUlzU3RhcnQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0
aW9uRGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2Vs
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgYmFz
ZUlzU3RhcnQgPSBmYWxzZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBiYXNl
SXNTdGFydCA9IHRydWU7CkBAIC03NzYsMjMgKzc3NiwyMyBAQCBWaXNpYmxlUG9zaXRpb24gRnJh
bWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eQogICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQg
YW5kIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgaXM6CiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nRm9y
d2FyZCBhbHdheXMgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseS4KICAgICAvLyBtb2RpZnlFeHRl
bmRpbmdSaWdodCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgZXhj
ZXB0IGZvciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCi0gICAgLy8gaXQgZXh0ZW5kcyBm
b3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFRleHREaXJlY3Rpb246
OkxUUiwKLSAgICAvLyBidXQgaXQgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVu
Y2xvc2luZyBibG9jayBpcyBUZXh0RGlyZWN0aW9uOjpSVEwuCisgICAgLy8gaXQgZXh0ZW5kcyBm
b3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSLAorICAgIC8vIGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0
aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLgogICAgIHN3aXRj
aCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3Jh
bnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4
dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gcG9zLm5leHQo
Q2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
b3MgPSBwb3MucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OgotICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bShwb3MpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3Np
dGlvbihwb3MpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRl
eHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4
dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
b3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7CkBAIC04MTAsNyArODEw
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdo
dChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxl
Y3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6
TFRSKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgIHJldHVy
biBwb3M7CiB9CiAKQEAgLTg1Myw3ICs4NTMsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQog
ICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUik7CisgICAgYWRqdXN0UG9zaXRp
b25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKTsKICAgICByZXR1cm4gcG9zOwogfQogCkBAIC04NjUsNyAr
ODY1LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdo
dChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGIKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAg
ICAgICBpZiAoaXNSYW5nZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rp
b24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZT
ZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBw
b3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKQEAg
LTk4OSwyMyArOTg5LDIzIEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
RXh0ZW5kaW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgLy8gVGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiBtb2RpZnlFeHRlbmRpbmdMZWZ0IGFuZCBtb2RpZnlFeHRlbmRpbmdC
YWNrd2FyZCBpczoKICAgICAvLyBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBhbHdheXMgZXh0ZW5k
cyBiYWNrd2FyZCBsb2dpY2FsbHkuCiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nTGVmdCBiZWhhdmVz
IHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGV4Y2VwdCBmb3IgZXh0ZW5kaW5n
IGNoYXJhY3RlciBvciB3b3JkLAotICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5
IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6TFRSLAotICAgIC8vIGJ1
dCBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMg
VGV4dERpcmVjdGlvbjo6UlRMLgorICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5
IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsCisgICAg
Ly8gYnV0IGl0IGV4dGVuZHMgZm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9j
ayBpcyBQQUw6OlRleHREaXJlY3Rpb246OlJUTC4KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7
CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgotICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHBvcy5uZXh0
KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
ZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAg
ICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0ocG9zKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVCb3VuZGFyeToKLSAgICAg
ICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIp
CisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChn
cmFudWxhcml0eSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCAhKGRp
cmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBh
ZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCAhKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikpOwogICAgIHJldHVybiBwb3M7CiB9
CiAgICAgICAgCkBAIC0xMDcwLDcgKzEwNzAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcgog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3Np
bmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikpOworICAgIGFkanVzdFBvc2l0aW9uRm9y
VXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSKSk7CiAgICAgcmV0dXJuIHBvczsKIH0KIApAQCAtMTA4Miw3ICsx
MDgyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm8KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAg
ICAgICBpZiAoaXNSYW5nZSgpKQotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2Vs
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgcG9z
ID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CkBAIC0x
MjA0LDcgKzEyMDQsNyBAQCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCBGcmFtZVNlbGVjdGlvbjo6
dGV4dFNlbGVjdGlvbkludGVudChFQWx0ZXJhdGlvbiBhbHRlciwgUwogICAgIGJvb2wgZmxpcCA9
IGZhbHNlOwogICAgIGlmIChhbHRlciA9PSBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUp
IHsKICAgICAgICAgaW50ZW50LnR5cGUgPSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25N
b3ZlOwotICAgICAgICBmbGlwID0gaXNSYW5nZSgpICYmIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkg
PT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICBmbGlwID0gaXNSYW5nZSgpICYmIGRpcmVj
dGlvbk9mU2VsZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgfSBlbHNl
CiAgICAgICAgIGludGVudC50eXBlID0gQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uRXh0
ZW5kOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTE0MzMsOCArMTQzMyw4IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1
bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4
dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRh
cnkoZ3JhbnVsYXJpdHkpKQogICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1c2VyVHJp
Z2dlcmVkKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCB8fCAodGV4dERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlv
bjo6UmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBkaXJl
Y3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpMZWZ0KSkKKyAgICAgICAgICAgIFBBTDo6VGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwor
ICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQg
fHwgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgZGlyZWN0aW9u
ID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMICYmIGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246Okxl
ZnQpKQogICAgICAgICAgICAgICAgIHNldEVuZChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0U3RhcnQocG9zaXRpb24sIHVzZXJU
cmlnZ2VyZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGVk
YWNiNjNjYmViZDNhM2U5M2QzZDBmMWY5NzM5ZWFiYWY3Zjc2NTIuLjAxZmNhMjlkNWY3OTM5Zjk2
NDYzOWIwZjJhNGM0NThjNDlmZjRhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgKQEAgLTI3MSw4ICsyNzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0U2VsZWN0
aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0
aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4sIEN1cnNvckFsaWduT25TY3JvbGwsIFRleHRHcmFu
dWxhcml0eSk7CiAKICAgICB2b2lkIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYsIGJv
b2wgYmFzZVJlbW92ZWQsIGJvb2wgZXh0ZW50UmVtb3ZlZCwgYm9vbCBzdGFydFJlbW92ZWQsIGJv
b2wgZW5kUmVtb3ZlZCk7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCk7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZlNlbGVjdGlvbigpOworICAgIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCk7CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlzR2V0U3RhcnQpIGNvbnN0OwogICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydEZvclBsYXRmb3JtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggNTkxMDVkOTM3ZTQ2OWYyZWRhMTkyZWIwYWNjYTgyNjhh
MmMzZTJmMC4uOThiOWMwNGY4NTgwOWIwODFhMjY3NDdhNTY0OTFiYjU3ZjEwZjViOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwZWxsQ2hlY2tSZXF1ZXN0OjpTcGVsbENoZWNrUmVxdWVz
dChjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGF1
dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5n
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gb3B0aW9u
cywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgdHlwZSkKK1NwZWxsQ2hlY2tSZXF1ZXN0OjpTcGVs
bENoZWNrUmVxdWVzdChjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2lt
cGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBw
YXJhZ3JhcGhSYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlPiBvcHRpb25zLCBQQUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUpCiAg
ICAgOiBtX2NoZWNraW5nUmFuZ2UoY2hlY2tpbmdSYW5nZSkKICAgICAsIG1fYXV0b21hdGljUmVw
bGFjZW1lbnRSYW5nZShhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKQogICAgICwgbV9wYXJhZ3Jh
cGhSYW5nZShwYXJhZ3JhcGhSYW5nZSkKQEAgLTU0LDcgKzU0LDcgQEAgU3BlbGxDaGVja1JlcXVl
c3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBj
b25zdCBTaW0KIAogU3BlbGxDaGVja1JlcXVlc3Q6On5TcGVsbENoZWNrUmVxdWVzdCgpID0gZGVm
YXVsdDsKIAotUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBTcGVsbENoZWNrUmVxdWVzdDo6Y3Jl
YXRlKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBvcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9j
ZXNzVHlwZSB0eXBlLCBjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2lt
cGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBw
YXJhZ3JhcGhSYW5nZSkKK1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gU3BlbGxDaGVja1JlcXVl
c3Q6OmNyZWF0ZShPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBvcHRpb25zLCBQQUw6
OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2lu
Z1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29u
c3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKQogewogICAgIFN0cmluZyB0ZXh0ID0gcGxh
aW5UZXh0KGNoZWNraW5nUmFuZ2UpOwogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKQEAgLTYyLDEy
ICs2MiwxMiBAQCBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IFNwZWxsQ2hlY2tSZXF1ZXN0Ojpj
cmVhdGUoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU3BlbGxDaGVja1JlcXVlc3QoY2hlY2tpbmdSYW5nZSwgYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSwgcGFyYWdyYXBoUmFuZ2UsIHRleHQsIG9wdGlvbnMsIHR5cGUpKTsKIH0KIAotY29uc3Qg
VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFNwZWxsQ2hlY2tSZXF1ZXN0OjpkYXRhKCkgY29uc3QK
K2NvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFNwZWxsQ2hlY2tSZXF1ZXN0Ojpk
YXRhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0RGF0YTsKIH0KIAotdm9pZCBTcGVs
bENoZWNrUmVxdWVzdDo6ZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiYgcmVzdWx0cykKK3ZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6OmRpZFN1Y2NlZWQoY29uc3QgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKICAgICBpZiAoIW1fY2hl
Y2tlcikKICAgICAgICAgcmV0dXJuOwpAQCAtODcsMTIgKzg3LDEyIEBAIHZvaWQgU3BlbGxDaGVj
a1JlcXVlc3Q6OmRpZENhbmNlbCgpCiAgICAgbV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotdm9p
ZCBTcGVsbENoZWNrUmVxdWVzdDo6c2V0Q2hlY2tlckFuZElkZW50aWZpZXIoU3BlbGxDaGVja2Vy
KiByZXF1ZXN0ZXIsIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCit2
b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpzZXRDaGVja2VyQW5kSWRlbnRpZmllcihTcGVsbENoZWNr
ZXIqIHJlcXVlc3RlciwgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlm
aWVyKQogewogICAgIEFTU0VSVCghbV9jaGVja2VyKTsKICAgICBBU1NFUlQoIW1fcmVxdWVzdERh
dGEuaWRlbnRpZmllcigpKTsKICAgICBtX2NoZWNrZXIgPSByZXF1ZXN0ZXI7Ci0gICAgbV9yZXF1
ZXN0RGF0YS5tX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIG1fcmVxdWVzdERhdGEgPSBQ
QUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhIHsgaWRlbnRpZmllciwgbV9yZXF1ZXN0RGF0YS50
ZXh0KCksIG1fcmVxdWVzdERhdGEuY2hlY2tpbmdUeXBlcygpLCBtX3JlcXVlc3REYXRhLnByb2Nl
c3NUeXBlKCkgfTsKIH0KIAogdm9pZCBTcGVsbENoZWNrUmVxdWVzdDo6cmVxdWVzdGVyRGVzdHJv
eWVkKCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNr
aW5nRm9yKFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKICAgICBBU1NFUlQoIXJlcXVlc3QtPmRhdGEoKS5pZGVudGlmaWVyKCkpOwotICAgIGF1dG8g
aWRlbnRpZmllciA9IFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwor
ICAgIGF1dG8gaWRlbnRpZmllciA9IFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI6
OmdlbmVyYXRlKCk7CiAKICAgICBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllciA9IGlkZW50aWZpZXI7
CiAgICAgcmVxdWVzdC0+c2V0Q2hlY2tlckFuZElkZW50aWZpZXIodGhpcywgaWRlbnRpZmllcik7
CkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFJl
ZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgIG1fcmVxdWVzdFF1ZXVlLmFwcGVu
ZChXVEZNb3ZlKHJlcXVlc3QpKTsKIH0KIAotdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRl
eHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFBB
TDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKICAgICBBU1NFUlQobV9wcm9j
ZXNzaW5nUmVxdWVzdCk7CiAgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmRhdGEoKS5p
ZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcik7CkBAIC0yMTYsMTQgKzIxNiwxNCBAQCB2b2lkIFNw
ZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRp
ZmllciwgY29uc3QgVmVjdAogICAgICAgICBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdC5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2Vl
ZChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVj
a1N1Y2NlZWQoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIFRl
eHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3REYXRhID0gbV9wcm9jZXNzaW5nUmVxdWVzdC0+
ZGF0YSgpOworICAgIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdERhdGEgPSBt
X3Byb2Nlc3NpbmdSZXF1ZXN0LT5kYXRhKCk7CiAgICAgaWYgKHJlcXVlc3REYXRhLmlkZW50aWZp
ZXIoKSA9PSBpZGVudGlmaWVyKSB7CiAgICAgICAgIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gbWFya2VyVHlwZXM7Ci0gICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2lu
Z1R5cGVzKCkuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKQorICAgICAgICBp
ZiAocmVxdWVzdERhdGEuY2hlY2tpbmdUeXBlcygpLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcpKQogICAgICAgICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCku
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpCisgICAgICAgIGlmIChyZXF1ZXN0
RGF0YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFt
bWFyKSkKICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1h
cik7CiAgICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVt
b3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5
cGVzKTsKQEAgLTIzMSw5ICsyMzEsOSBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgIGRp
ZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6ZGlk
Q2hlY2tDYW5jZWwoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllcikKK3Zv
aWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja0NhbmNlbChQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgZGlkQ2hlY2soaWRlbnRpZmllciwgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4oKSk7CisgICAgZGlkQ2hlY2soaWRlbnRpZmllciwgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggNDMzYjcxMmIwMjI2MzIx
MTVmODNhYTIyN2MwM2IyN2E0YzU0OTUxNC4uMWE2MDBkMjk1NzA2MzFkNTY4MTcxNTYwMWUwNzhm
OGQ2Y2ZiMDRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2ltcGxlUmFuZ2Uu
aCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0Q2hl
Y2tpbmcuaD4KICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCkBA
IC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNwZWxsQ2hlY2tlcjsK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogCi1jbGFzcyBTcGVsbENoZWNrUmVxdWVzdCBmaW5h
bCA6IHB1YmxpYyBUZXh0Q2hlY2tpbmdSZXF1ZXN0IHsKK2NsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0
IGZpbmFsIDogcHVibGljIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gY3JlYXRlKE9wdGlvblNldDxUZXh0Q2hl
Y2tpbmdUeXBlPiwgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBj
aGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKTsKKyAgICBzdGF0aWMgUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiBjcmVhdGUoT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlw
ZT4sIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVj
a2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKTsKICAgICB2aXJ0dWFsIH5TcGVsbENo
ZWNrUmVxdWVzdCgpOwogCiAgICAgY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX2NoZWNraW5nUmFuZ2U7IH0KQEAgLTQ3LDI0ICs0NywyNCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgU2ltcGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2U7IH0KICAgICBFbGVtZW50
KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWRpdGFibGVFbGVt
ZW50LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldENoZWNrZXJBbmRJZGVudGlmaWVyKFNwZWxsQ2hl
Y2tlciosIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKKyAgICB2b2lkIHNldENoZWNr
ZXJBbmRJZGVudGlmaWVyKFNwZWxsQ2hlY2tlciosIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElk
ZW50aWZpZXIpOwogICAgIHZvaWQgcmVxdWVzdGVyRGVzdHJveWVkKCk7CiAgICAgYm9vbCBpc1N0
YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXI7IH0KIAotICAgIGNvbnN0IFRleHRDaGVj
a2luZ1JlcXVlc3REYXRhJiBkYXRhKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgUEFMOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgZGF0YSgpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAg
IHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpIGZpbmFs
OworICAgIHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1
bHQ+JikgZmluYWw7CiAgICAgdm9pZCBkaWRDYW5jZWwoKSBmaW5hbDsKIAotICAgIFNwZWxsQ2hl
Y2tSZXF1ZXN0KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVS
YW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFn
cmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFRl
eHRDaGVja2luZ1Byb2Nlc3NUeXBlKTsKKyAgICBTcGVsbENoZWNrUmVxdWVzdChjb25zdCBTaW1w
bGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5nZSwgY29uc3QgU3Ry
aW5nJiwgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4sIFBBTDo6VGV4dENoZWNraW5n
UHJvY2Vzc1R5cGUpOwogCiAgICAgU3BlbGxDaGVja2VyKiBtX2NoZWNrZXIgeyBudWxscHRyIH07
CiAgICAgU2ltcGxlUmFuZ2UgbV9jaGVja2luZ1JhbmdlOwogICAgIFNpbXBsZVJhbmdlIG1fYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZTsKICAgICBTaW1wbGVSYW5nZSBtX3BhcmFncmFwaFJhbmdl
OwogICAgIFJlZlB0cjxFbGVtZW50PiBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQ7Ci0gICAgVGV4dENo
ZWNraW5nUmVxdWVzdERhdGEgbV9yZXF1ZXN0RGF0YTsKKyAgICBQQUw6OlRleHRDaGVja2luZ1Jl
cXVlc3REYXRhIG1fcmVxdWVzdERhdGE7CiB9OwogCiBjbGFzcyBTcGVsbENoZWNrZXIgewpAQCAt
ODAsOCArODAsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ0ZvcihSZWY8
U3BlbGxDaGVja1JlcXVlc3Q+JiYpOwogCi0gICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZp
ZXIgbGFzdFJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdElk
ZW50aWZpZXI7IH0KLSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UHJvY2Vz
c2VkSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7
IH0KKyAgICBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGxhc3RSZXF1ZXN0SWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOyB9CisgICAg
UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UHJvY2Vzc2VkSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7IH0KIAogcHJpdmF0
ZToKICAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoY29uc3QgU2ltcGxlUmFuZ2UmKSBj
b25zdDsKQEAgLTg5LDEzICs4OSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGltZXJGaXJlZFRv
UHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKTsKICAgICB2b2lkIGludm9rZVJlcXVlc3QoUmVmPFNwZWxs
Q2hlY2tSZXF1ZXN0PiYmKTsKICAgICB2b2lkIGVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENoZWNr
UmVxdWVzdD4mJik7Ci0gICAgdm9pZCBkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Ci0gICAgdm9p
ZCBkaWRDaGVja0NhbmNlbChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcik7Ci0gICAgdm9p
ZCBkaWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mKTsKKyAgICB2b2lkIGRpZENoZWNrU3VjY2VlZChQQUw6OlRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+Jik7CisgICAgdm9pZCBkaWRDaGVja0NhbmNlbChQQUw6OlRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENoZWNrKFBBTDo6VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mKTsKIAog
ICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwotICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlm
aWVyIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOwotICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVu
dGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBQQUw6OlRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CiAKICAg
ICBUaW1lciBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGEzYmM5NjlmYmU3MmE3Yjgw
YmRkNmZiNjkzYTY4ZTEwY2QzM2ZmMDguLmEwYjY5N2QyZmIyNjBlMTVhMTlkMTY1MzNmZDIzM2Y3
MThlOGVhZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgog
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L0NoYXJhY3RlclJhbmdlLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91YnJr
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRCcmVha0l0ZXJhdG9yLmg+CkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmICFVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogCi1zdGF0aWMgdm9pZCBmaW5k
R3JhbW1hdGljYWxFcnJvcnMoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0
ZXh0LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3N0YXRpYyB2b2lkIGZp
bmRHcmFtbWF0aWNhbEVycm9ycyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3
IHRleHQsIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBjaGVja0xvY2F0aW9uID0gMDsgY2hlY2tMb2NhdGlvbiA8IHRleHQubGVu
Z3RoKCk7ICkgewogICAgICAgICBpbnQgYmFkR3JhbW1hckxvY2F0aW9uID0gLTE7CkBAIC02MCw5
ICs2MSw5IEBAIHN0YXRpYyB2b2lkIGZpbmRHcmFtbWF0aWNhbEVycm9ycyhUZXh0Q2hlY2tlckNs
aWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlCiAgICAgICAgIEFTU0VSVChiYWRHcmFt
bWFyTGVuZ3RoID4gMCk7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFk
R3JhbW1hckxlbmd0aCkgPD0gdGV4dC5sZW5ndGgoKSAtIGNoZWNrTG9jYXRpb24gLSBiYWRHcmFt
bWFyTG9jYXRpb24pOwogCi0gICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCBiYWRHcmFtbWFyOwot
ICAgICAgICBiYWRHcmFtbWFyLnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwotICAg
ICAgICBiYWRHcmFtbWFyLnJhbmdlID0gQ2hhcmFjdGVyUmFuZ2UoY2hlY2tMb2NhdGlvbiArIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nUmVzdWx0IGJhZEdyYW1tYXI7CisgICAgICAgIGJhZEdyYW1tYXIudHlwZSA9IFBBTDo6
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKKyAgICAgICAgYmFkR3JhbW1hci5yYW5nZSA9IFBB
TDo6Q2hhcmFjdGVyUmFuZ2UoY2hlY2tMb2NhdGlvbiArIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFk
R3JhbW1hckxlbmd0aCk7CiAgICAgICAgIGJhZEdyYW1tYXIuZGV0YWlscyA9IFdURk1vdmUoYmFk
R3JhbW1hckRldGFpbHMpOwogICAgICAgICByZXN1bHRzLmFwcGVuZChiYWRHcmFtbWFyKTsKIApA
QCAtNzAsNyArNzEsNyBAQCBzdGF0aWMgdm9pZCBmaW5kR3JhbW1hdGljYWxFcnJvcnMoVGV4dENo
ZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBWZQogICAgIH0KIH0KIAotc3Rh
dGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJp
bmdWaWV3IHRleHQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQorc3RhdGlj
IHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdW
aWV3IHRleHQsIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7CiAg
ICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCk7CiAg
ICAgaWYgKCFpdGVyYXRvcikKQEAgLTkxLDkgKzkyLDkgQEAgc3RhdGljIHZvaWQgZmluZE1pc3Nw
ZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlY3Rv
cjwKICAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA+IDApOwogICAgICAgICAg
ICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB3b3Jk
TGVuZ3RoKTsKIAotICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nOwot
ICAgICAgICAgICAgbWlzc3BlbGxpbmcudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
OwotICAgICAgICAgICAgbWlzc3BlbGxpbmcucmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZSh3b3JkU3Rh
cnQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAg
ICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZzsKKyAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nLnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOworICAgICAgICAg
ICAgbWlzc3BlbGxpbmcucmFuZ2UgPSBQQUw6OkNoYXJhY3RlclJhbmdlKHdvcmRTdGFydCArIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nLnJlcGxhY2VtZW50ID0gY2xpZW50LmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1p
c3NwZWxsZWRXb3JkKHRleHQuc3Vic3RyaW5nKG1pc3NwZWxsaW5nLnJhbmdlLmxvY2F0aW9uLCBt
aXNzcGVsbGluZy5yYW5nZS5sZW5ndGgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CiAgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtaXNzcGVsbGluZyk7CiAgICAgICAgIH0KQEAgLTE1NSw3
ICsxNTYsNyBAQCBjb25zdCBTaW1wbGVSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpwYXJh
Z3JhcGhSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuICptX3BhcmFncmFwaFJhbmdlOwogfQogCi1T
aW1wbGVSYW5nZSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKENoYXJhY3RlclJhbmdl
IHJhbmdlKSBjb25zdAorU2ltcGxlUmFuZ2UgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5n
ZShQQUw6OkNoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAogewogICAgIHJldHVybiByZXNvbHZl
Q2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UoKSwgcmFuZ2UpOwogfQpAQCAtMjU4LDcgKzI1
OSw3IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kTWlzc3BlbGxlZFdvcmRzKE9wZXJh
dGlvbiBvcGVyYXRpb24pIGNvbnN0IC0+IHN0ZDo6CiAgICAgICAgIGlmICghKG1pc3NwZWxsaW5n
TG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2Nh
dGlvbiA8IHRleHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCAmJiBt
aXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9yYW5nZSwgQ2hhcmFjdGVyUmFuZ2UoY3VycmVudENodW5r
T2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpKTsKKyAgICAg
ICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2Us
IFBBTDo6Q2hhcmFjdGVyUmFuZ2UoY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpKTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uID09IE9w
ZXJhdGlvbjo6TWFya0FsbCkKICAgICAgICAgICAgIGFkZE1hcmtlcihtaXNzcGVsbGluZ1Jhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjk0LDcgKzI5NSw3IEBAIGF1dG8gVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBo
cmFzZShib29sIGNoZWNrCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBzdGQ6OnZhcmlhbnQ8
TWlzc3BlbGxlZFdvcmQsIFVuZ3JhbW1hdGljYWxQaHJhc2U+IGZpcnN0Rm91bmRJdGVtOwotICAg
IEdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbDsKKyAgICBQQUw6OkdyYW1tYXJEZXRhaWwgZ3Jh
bW1hckRldGFpbDsKIAogICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKICAgICBzdGQ6Om9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGVkV29yZFJhbmdlOwpAQCAtMzMyLDMxICszMzMsMzEg
QEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdy
YW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2sKICAgICAgICAgICAgICAgICB1aW50NjRfdCBncmFt
bWFyRGV0YWlsTG9jYXRpb24gPSAwOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyYW1tYXJE
ZXRhaWxJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICBPcHRpb25TZXQ8
VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcyB7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxs
aW5nIH07CisgICAgICAgICAgICAgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBy
ZXN1bHRzOworICAgICAgICAgICAgICAgIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+
IGNoZWNraW5nVHlwZXMgeyBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nIH07CiAgICAg
ICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hcikKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tp
bmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNraW5nVHlwZXMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAg
ICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwogICAgICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS5zdGFydC5kb2N1bWVu
dCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICAgICAgICAgICAgICBm
b3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nICYmIHJlc3VsdC5yYW5nZS5s
b2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LnJhbmdlLmxvY2F0aW9uICsg
cmVzdWx0LnJhbmdlLmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
ICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0
LnJhbmdlLmxvY2F0aW9uICsgcmVzdWx0LnJhbmdlLmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LnJhbmdlLmxlbmd0aCA+
IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdMb2NhdGlvbiA9IHJlc3VsdC5y
YW5nZS5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0g
cGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQucmFuZ2UubG9jYXRpb24sIHJlc3VsdC5y
YW5nZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRX
b3JkLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgcmVz
dWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiByZXN1bHQucmFuZ2UubG9j
YXRpb24gPCBjdXJyZW50RW5kT2Zmc2V0ICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIHJlc3Vs
dC5yYW5nZS5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIgJiYgcmVzdWx0LnJhbmdlLmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAm
JiByZXN1bHQucmFuZ2UubG9jYXRpb24gKyByZXN1bHQucmFuZ2UubGVuZ3RoID4gY3VycmVudFN0
YXJ0T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LnJhbmdl
Lmxlbmd0aCA+IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc3RvcCBh
ZnRlciB0aGUgZmlyc3QgZ3JhbW1hciByZXN1bHQsIHNpbmNlIHRoZXJlIG1pZ2h0IHN0aWxsIGJl
IGEgc3BlbGxpbmcgcmVzdWx0IGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBi
ZWdpbnMgYnV0IGJlZm9yZSB0aGUgZmlyc3QgZGV0YWlsIGluIGl0LCBidXQgd2UgY2FuIHN0b3Ag
aWYgd2UgZmluZCBhIHNlY29uZCBncmFtbWFyIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmb3VuZEdyYW1tYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0
LmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0LmRldGFpbHNbal07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVz
dWx0LmRldGFpbHNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFp
bC0+cmFuZ2UubGVuZ3RoID4gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24gPj0gY3VycmVudFN0
YXJ0T2Zmc2V0ICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+cmFuZ2UubG9jYXRp
b24gKyBkZXRhaWwtPnJhbmdlLmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYmICghZm91bmRH
cmFtbWFyIHx8IHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24g
PCBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdyYW1tYXJEZXRhaWxJbmRleCA9IGo7CkBAIC00MTEsMTQgKzQxMiwxNCBAQCBhdXRvIFRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQ
aHJhc2UoYm9vbCBjaGVjawogICAgIHJldHVybiBmaXJzdEZvdW5kSXRlbTsKIH0KIAotaW50IFRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbiBvcGVy
YXRpb24sIGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIHVpbnQ2
NF90IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2
NF90IGVuZE9mZnNldCkgY29uc3QKK2ludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRVbmdyYW1t
YXRpY2FsUGhyYXNlcyhPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8UEFMOjpHcmFt
bWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIHVpbnQ2NF90IGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2NF90IGVuZE9mZnNldCkgY29uc3QKIHsK
ICAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwg
cmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KICAgICAvLyBP
cHRpb25hbGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFu
Z2UuCiAgICAgdWludDY0X3QgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID0gMDsKICAgICBp
bnQgZWFybGllc3REZXRhaWxJbmRleCA9IC0xOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBncmFtbWFyRGV0YWlscy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBHcmFtbWFyRGV0
YWlsKiBkZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNbaV07CisgICAgICAgIGNvbnN0IFBBTDo6R3Jh
bW1hckRldGFpbCogZGV0YWlsID0gJmdyYW1tYXJEZXRhaWxzW2ldOwogICAgICAgICBBU1NFUlQo
ZGV0YWlsLT5yYW5nZS5sZW5ndGggPiAwKTsKICAgICAgICAgCiAgICAgICAgIHVpbnQ2NF90IGRl
dGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBk
ZXRhaWwtPnJhbmdlLmxvY2F0aW9uOwpAQCAtNDU2LDcgKzQ1Nyw3IEBAIGF1dG8gVGV4dENoZWNr
aW5nSGVscGVyOjpmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uIG9wZXJhdGlvbikg
Y29uc3QgLT4KICAgICAKICAgICAvLyBTdGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBw
YXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3Rh
cnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KICAgICBmb3IgKHVpbnQ2NF90IHN0YXJ0
T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQoKTsgKSB7Ci0g
ICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsKKyAgICAgICAgVmVj
dG9yPFBBTDo6R3JhbW1hckRldGFpbD4gZ3JhbW1hckRldGFpbHM7CiAgICAgICAgIGludCBiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKICAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VM
ZW5ndGggPSAwOwogICAgICAgICBtX2NsaWVudC50ZXh0Q2hlY2tlcigpLT5jaGVja0dyYW1tYXJP
ZlN0cmluZyhwYXJhZ3JhcGgudGV4dCgpLnN1YnN0cmluZyhzdGFydE9mZnNldCksIGdyYW1tYXJE
ZXRhaWxzLCAmYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCAmYmFkR3JhbW1hclBocmFzZUxlbmd0
aCk7CkBAIC00OTUsNyArNDk2LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dFVuZ3JhbW1hdGljYWxQaHJhc2UoKSBjb25zdCAtPiBVbmdyYW1tYXRpY2FsUGgKICAgICByZXR1
cm4gZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbjo6RmluZEZpcnN0KTsKIH0KIAot
VGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3QKK1BB
TDo6VGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3QK
IHsKICAgICBpZiAoIXVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKQEAgLTUxMSwxNyArNTEyLDE3IEBAIFRleHRDaGVja2luZ0d1ZXNzZXMgVGV4dENoZWNr
aW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQCiAgICAg
aWYgKHBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIE9wdGlvblNldDxUZXh0Q2hlY2tp
bmdUeXBlPiBjaGVja2luZ1R5cGVzIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgfTsKKyAg
ICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgT3B0aW9uU2V0
PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcyB7IFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcgfTsKICAgICBpZiAoY2hlY2tHcmFtbWFyKQotICAgICAgICBjaGVja2lu
Z1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICAgICAgY2hlY2tpbmdU
eXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CiAgICAgaWYgKGF1dG8gZnJhbWUgPSBtX3JhbmdlLnN0
YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9j
bGllbnQudGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywgcmVz
dWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3Vs
dHMpIHsKLSAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OlNwZWxs
aW5nICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQucmFuZ2UpKSB7Cisg
ICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
ICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQucmFuZ2UpKSB7CiAgICAg
ICAgICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJp
bmcoKS50b1N0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0
aCgpKTsKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CkBAIC01MzUsNyArNTM2
LDcgQEAgVGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFAKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGZvciAoYXV0byYgcmVzdWx0IDogcmVzdWx0cykgewotICAgICAgICBpZiAocmVzdWx0LnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVja2luZ1Jhbmdl
Q292ZXJlZEJ5KHJlc3VsdC5yYW5nZSkpIHsKKyAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFBB
TDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVja2luZ1Jhbmdl
Q292ZXJlZEJ5KHJlc3VsdC5yYW5nZSkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWls
IDogcmVzdWx0LmRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLnJhbmdl
Lmxlbmd0aCA+IDApOwogICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguY2hlY2tpbmdSYW5n
ZU1hdGNoZXMoeyByZXN1bHQucmFuZ2UubG9jYXRpb24gKyBkZXRhaWwucmFuZ2UubG9jYXRpb24s
IGRldGFpbC5yYW5nZS5sZW5ndGggfSkpIHsKQEAgLTU2NiwyMCArNTY3LDIwIEBAIGJvb2wgVGV4
dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKICAgICBy
ZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENo
ZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3Vs
dHMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit2b2lkIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4
dCwgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQog
ICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdU
eXBlcywgY3VycmVudFNlbGVjdGlvbik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
U2VsZWN0aW9uKTsKIAotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3NwZWxsaW5n
czsKLSAgICBpZiAoY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZykpCisgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBtaXNzcGVsbGluZ3M7
CisgICAgaWYgKGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZykpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0LCBtaXNzcGVs
bGluZ3MpOwogCiAgICAgLy8gTG9vayBmb3IgZ3JhbW1hdGljYWwgZXJyb3JzIHRoYXQgb2NjdXIg
YmVmb3JlIHRoZSBmaXJzdCBtaXNzcGVsbGluZy4KLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBncmFtbWF0aWNhbEVycm9yczsKLSAgICBpZiAoY2hlY2tpbmdUeXBlcy5jb250YWlucyhU
ZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgeworICAgIFZlY3RvcjxQQUw6OlRleHRDaGVja2lu
Z1Jlc3VsdD4gZ3JhbW1hdGljYWxFcnJvcnM7CisgICAgaWYgKGNoZWNraW5nVHlwZXMuY29udGFp
bnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICB1bnNpZ25lZCBn
cmFtbWFyQ2hlY2tMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogICAgICAgICBmb3IgKGF1dG8mIG1p
c3NwZWxsaW5nIDogbWlzc3BlbGxpbmdzKQogICAgICAgICAgICAgZ3JhbW1hckNoZWNrTGVuZ3Ro
ID0gc3RkOjptaW48dW5zaWduZWQ+KGdyYW1tYXJDaGVja0xlbmd0aCwgbWlzc3BlbGxpbmcucmFu
Z2UubG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmgKaW5kZXggZjU3ZTQ3NTcxYzFiNjE2ZTAwZDVlYWE5MDllZWI0MTUxMTNkYzNkZC4uMDBmMWU1
NzZjNGM2NmIwMzRhZDE3NDFjYmFmMmMwOWIzNWY4MmRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC0yMiw3ICsyMiwxMSBAQAogCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgotI2luY2x1ZGUgIlRl
eHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5oPgorCituYW1l
c3BhY2UgUEFMIHsKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7Cit9CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzIsNyArMzYsNiBAQCBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFRleHRD
aGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotc3RydWN0IFRleHRDaGVj
a2luZ1Jlc3VsdDsKIAogLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgY2xhc3MgdG8gaXRzIG93
biBoZWFkZXIuCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewpAQCAtNDEsNyArNDQsNyBA
QCBwdWJsaWM6CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoKGNvbnN0IFNpbXBsZVJhbmdlJiBj
aGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIHBhcmFncmFwaFJhbmdlKTsKIAog
ICAgIHVpbnQ2NF90IHJhbmdlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgU2ltcGxlUmFuZ2Ugc3VicmFu
Z2UoQ2hhcmFjdGVyUmFuZ2UpIGNvbnN0OworICAgIFNpbXBsZVJhbmdlIHN1YnJhbmdlKFBBTDo6
Q2hhcmFjdGVyUmFuZ2UpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHVpbnQ2NF90PiBvZmZzZXRU
byhjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgZXhwYW5kUmFuZ2VUb05leHRFbmQo
KTsKIApAQCAtNTcsOSArNjAsOSBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgYXV0b21hdGljUmVw
bGFjZW1lbnRTdGFydCgpIGNvbnN0OwogICAgIHVpbnQ2NF90IGF1dG9tYXRpY1JlcGxhY2VtZW50
TGVuZ3RoKCkgY29uc3Q7CiAKLSAgICBib29sIGNoZWNraW5nUmFuZ2VNYXRjaGVzKENoYXJhY3Rl
clJhbmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5sb2NhdGlvbiA9PSBjaGVja2luZ1N0
YXJ0KCkgJiYgcmFuZ2UubGVuZ3RoID09IGNoZWNraW5nTGVuZ3RoKCk7IH0KLSAgICBib29sIGlz
Q2hlY2tpbmdSYW5nZUNvdmVyZWRCeShDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1
cm4gcmFuZ2UubG9jYXRpb24gPD0gY2hlY2tpbmdTdGFydCgpICYmIHJhbmdlLmxvY2F0aW9uICsg
cmFuZ2UubGVuZ3RoID49IGNoZWNraW5nU3RhcnQoKSArIGNoZWNraW5nTGVuZ3RoKCk7IH0KLSAg
ICBib29sIGNoZWNraW5nUmFuZ2VDb3ZlcnMoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0IHsg
cmV0dXJuIHJhbmdlLmxvY2F0aW9uIDwgY2hlY2tpbmdFbmQoKSAmJiByYW5nZS5sb2NhdGlvbiAr
IHJhbmdlLmxlbmd0aCA+IGNoZWNraW5nU3RhcnQoKTsgfQorICAgIGJvb2wgY2hlY2tpbmdSYW5n
ZU1hdGNoZXMoUEFMOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2Uu
bG9jYXRpb24gPT0gY2hlY2tpbmdTdGFydCgpICYmIHJhbmdlLmxlbmd0aCA9PSBjaGVja2luZ0xl
bmd0aCgpOyB9CisgICAgYm9vbCBpc0NoZWNraW5nUmFuZ2VDb3ZlcmVkQnkoUEFMOjpDaGFyYWN0
ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2UubG9jYXRpb24gPD0gY2hlY2tpbmdT
dGFydCgpICYmIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoID49IGNoZWNraW5nU3RhcnQo
KSArIGNoZWNraW5nTGVuZ3RoKCk7IH0KKyAgICBib29sIGNoZWNraW5nUmFuZ2VDb3ZlcnMoUEFM
OjpDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2UubG9jYXRpb24gPCBj
aGVja2luZ0VuZCgpICYmIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoID4gY2hlY2tpbmdT
dGFydCgpOyB9CiAKICAgICBjb25zdCBTaW1wbGVSYW5nZSYgcGFyYWdyYXBoUmFuZ2UoKSBjb25z
dDsKIApAQCAtODksNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IFVuZ3JhbW1hdGljYWxQ
aHJhc2UgewogICAgICAgICBTdHJpbmcgcGhyYXNlOwogICAgICAgICB1aW50NjRfdCBvZmZzZXQg
eyAwIH07Ci0gICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOworICAgICAgICBQQUw6OkdyYW1t
YXJEZXRhaWwgZGV0YWlsOwogICAgIH07CiAKICAgICBNaXNzcGVsbGVkV29yZCBmaW5kRmlyc3RN
aXNzcGVsbGVkV29yZCgpIGNvbnN0OwpAQCAtOTksMjAgKzEwMiwyMCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFya0FsbE1pc3NwZWxsZWRXb3JkcygpIGNvbnN0
OyAvLyBSZXR1cm5zIHRoZSByYW5nZSBvZiB0aGUgZmlyc3QgbWlzc3BlbGxlZCB3b3JkLgogICAg
IHZvaWQgbWFya0FsbFVuZ3JhbW1hdGljYWxQaHJhc2VzKCkgY29uc3Q7CiAKLSAgICBUZXh0Q2hl
Y2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFz
ZShib29sIGNoZWNrR3JhbW1hcikgY29uc3Q7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdHdWVzc2Vz
IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNr
R3JhbW1hcikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBPcGVyYXRpb24gOiBi
b29sIHsgRmluZEZpcnN0LCBNYXJrQWxsIH07CiAgICAgc3RkOjpwYWlyPE1pc3NwZWxsZWRXb3Jk
LCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPj4gZmluZE1pc3NwZWxsZWRXb3JkcyhPcGVyYXRp
b24pIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBmaXJzdC4KICAgICBVbmdyYW1tYXRpY2FsUGhyYXNl
IGZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb24pIGNvbnN0OyAvLyBSZXR1cm5zIHRo
ZSBmaXJzdC4KICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKLSAg
ICBpbnQgZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbiwgY29uc3QgVmVjdG9yPEdy
YW1tYXJEZXRhaWw+JiwgdWludDY0X3QgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCB1aW50NjRf
dCBzdGFydE9mZnNldCwgdWludDY0X3QgZW5kT2Zmc2V0KSBjb25zdDsKKyAgICBpbnQgZmluZFVu
Z3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbiwgY29uc3QgVmVjdG9yPFBBTDo6R3JhbW1hckRl
dGFpbD4mLCB1aW50NjRfdCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIHVpbnQ2NF90IHN0YXJ0
T2Zmc2V0LCB1aW50NjRfdCBlbmRPZmZzZXQpIGNvbnN0OwogCiAgICAgRWRpdG9yQ2xpZW50JiBt
X2NsaWVudDsKICAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogfTsKIAotdm9pZCBjaGVja1RleHRP
ZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYsIFN0cmluZ1ZpZXcsIE9wdGlvblNldDxUZXh0
Q2hlY2tpbmdUeXBlPiwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKTsKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
VGV4dENoZWNrZXJDbGllbnQmLCBTdHJpbmdWaWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tp
bmdUeXBlPiwgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pOwogCiBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQoY29uc3QgRnJhbWUqKTsKIGJvb2wgcGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJs
ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBmYTBlMGJm
OWJiNWE2NTJjNDFmMjViM2YyNmMxYjQwNGI1NzNkNjZjLi4yN2EyYTU1MTcxMjZiMDNlZjBkNDll
YWY5NzI2YTY3ZjYwMmEwOTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0j
aW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0Qm91bmRh
cmllcy5oPgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUg
IlRleHRQbGFjZWhvbGRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
QEAgLTIwMjUsNyArMjAyNSw3IEBAIGlubGluZSB2b2lkIFNlYXJjaEJ1ZmZlcjo6cHJlcGVuZENv
bnRleHQoU3RyaW5nVmlldyB0ZXh0KQogICAgIHNpemVfdCB3b3JkQm91bmRhcnlDb250ZXh0U3Rh
cnQgPSB0ZXh0Lmxlbmd0aCgpOwogICAgIGlmICh3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpIHsK
ICAgICAgICAgVTE2X0JBQ0tfMSh0ZXh0LCAwLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOwot
ICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFy
eUNvbnRleHQodGV4dC5zdWJzdHJpbmcoMCwgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KSk7Cisg
ICAgICAgIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IFBBTDo6c3RhcnRPZkxhc3RXb3JkQm91
bmRhcnlDb250ZXh0KHRleHQuc3Vic3RyaW5nKDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCkp
OwogICAgIH0KIAogICAgIHNpemVfdCB1c2FibGVMZW5ndGggPSBzdGQ6Om1pbihtX2J1ZmZlci5j
YXBhY2l0eSgpIC0gbV9wcmVmaXhMZW5ndGgsIHRleHQubGVuZ3RoKCkgLSB3b3JkQm91bmRhcnlD
b250ZXh0U3RhcnQpOwpAQCAtMjExMyw3ICsyMTEzLDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVm
ZmVyOjppc1dvcmRFbmRNYXRjaChzaXplX3Qgc3RhcnQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiAK
ICAgICAvLyBTdGFydCBzZWFyY2hpbmcgYXQgdGhlIGVuZCBvZiBtYXRjaGVkIHNlYXJjaCwgc28g
dGhhdCBtdWx0aXBsZSB3b3JkIG1hdGNoZXMgc3VjY2VlZC4KICAgICBpbnQgZW5kV29yZDsKLSAg
ICBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5zaXplKCkpLCBzdGFydCArIGxlbmd0aCAtIDEsICZlbmRXb3JkKTsKKyAgICBQQUw6OmZpbmRF
bmRXb3JkQm91bmRhcnkoU3RyaW5nVmlldyhtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUo
KSksIHN0YXJ0ICsgbGVuZ3RoIC0gMSwgJmVuZFdvcmQpOwogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGVuZFdvcmQpID09IHN0YXJ0ICsgbGVuZ3RoOwogfQogCkBAIC0yMTY4LDcgKzIx
NjgsNyBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0Y2goc2l6ZV90
IHN0YXJ0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJj
aFN0YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CiAgICAgd2hpbGUgKHdvcmRCcmVha1NlYXJjaFN0YXJ0
ID4gc3RhcnQpCi0gICAgICAgIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0gZmluZE5leHRXb3JkRnJv
bUluZGV4KFN0cmluZ1ZpZXcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpLCB3b3Jk
QnJlYWtTZWFyY2hTdGFydCwgZmFsc2UgLyogYmFja3dhcmRzICovKTsKKyAgICAgICAgd29yZEJy
ZWFrU2VhcmNoU3RhcnQgPSBQQUw6OmZpbmROZXh0V29yZEZyb21JbmRleChTdHJpbmdWaWV3KG1f
YnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKSwgd29yZEJyZWFrU2VhcmNoU3RhcnQsIGZh
bHNlIC8qIGJhY2t3YXJkcyAqLyk7CiAgICAgcmV0dXJuIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID09
IHN0YXJ0OwogfQogCkBAIC0yMjExLDcgKzIyMTEsNyBAQCBuZXh0TWF0Y2g6CiAgICAgICAgICAg
ICAvLyBkZXRlcm1pbmluZyBpZiBpdCBpcyBhdCBhIHdvcmQgYm91bmRhcnkuCiAgICAgICAgICAg
ICB1bnNpZ25lZCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBtYXRjaFN0YXJ0OwogICAgICAg
ICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5kYXRhKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRT
dGFydCk7Ci0gICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFz
dFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyhtX2J1ZmZlci5kYXRhKCksIHdvcmRCb3Vu
ZGFyeUNvbnRleHRTdGFydCkpOworICAgICAgICAgICAgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0
ID0gUEFMOjpzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyhtX2J1ZmZl
ci5kYXRhKCksIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCkpOwogICAgICAgICAgICAgb3Zlcmxh
cCA9IHN0ZDo6bWluKHNpemUgLSAxLCBzdGQ6Om1heChvdmVybGFwLCBzaXplIC0gd29yZEJvdW5k
YXJ5Q29udGV4dFN0YXJ0KSk7CiAgICAgICAgIH0KICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRh
dGEoKSwgbV9idWZmZXIuZGF0YSgpICsgc2l6ZSAtIG92ZXJsYXAsIG92ZXJsYXAgKiBzaXplb2Yo
VUNoYXIpKTsKQEAgLTIzODAsNyArMjM4MCw3IEBAIGNvbnN0ZXhwciB1aW50NjRfdCBjbGFtcGVk
QWRkKHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIpCiAgICAgcmV0dXJuIHN1bSA+PSBhID8gc3VtIDog
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwogfQogCi1TaW1wbGVSYW5nZSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBDaGFyYWN0ZXJS
YW5nZSByYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIGJlaGF2aW9ycykKK1NpbXBsZVJhbmdl
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIFBBTDo6Q2hh
cmFjdGVyUmFuZ2UgcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9ycyBiZWhhdmlvcnMpCiB7CiAg
ICAgYXV0byByZXN1bHRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgcmFuZ2UubG9jYXRpb24gPyBzY29w
ZS5lbmQgOiBzY29wZS5zdGFydCwgKHJhbmdlLmxvY2F0aW9uIHx8IHJhbmdlLmxlbmd0aCkgPyBz
Y29wZS5lbmQgOiBzY29wZS5zdGFydCB9OwogICAgIGF1dG8gcmFuZ2VFbmQgPSBjbGFtcGVkQWRk
KHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwpAQCAtMjQ4NCw3ICsyNDg0LDcgQEAgc3Rh
dGljIGNvbnN0ZXhwciBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgZmluZEl0ZXJhdG9yT3B0aW9ucyhG
aW5kT3B0aW9ucyBvcHRpb25zKQogICAgIHJldHVybiBpdGVyYXRvck9wdGlvbnM7CiB9CiAKLXN0
YXRpYyB2b2lkIGZvckVhY2hNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBjb25zdCBGdW5jdGlvbjxib29sKENo
YXJhY3RlclJhbmdlKT4mIG1hdGNoKQorc3RhdGljIHZvaWQgZm9yRWFjaE1hdGNoKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlv
bnMsIGNvbnN0IEZ1bmN0aW9uPGJvb2woUEFMOjpDaGFyYWN0ZXJSYW5nZSk+JiBtYXRjaCkKIHsK
ICAgICBTZWFyY2hCdWZmZXIgYnVmZmVyKHRhcmdldCwgb3B0aW9ucyk7CiAgICAgaWYgKGJ1ZmZl
ci5uZWVkc01vcmVDb250ZXh0KCkpIHsKQEAgLTI1MTEsMTMgKzI1MTEsMTMgQEAgc3RhdGljIHZv
aWQgZm9yRWFjaE1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNpemVfdCBsYXN0Q2hh
cmFjdGVySW5CdWZmZXJPZmZzZXQgPSBmaW5kSXRlcmF0b3IuY2hhcmFjdGVyT2Zmc2V0KCk7CiAg
ICAgICAgICAgICBBU1NFUlQobGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0ID49IG1hdGNoU3Rh
cnRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKG1hdGNoKENoYXJhY3RlclJhbmdlKGxhc3RDaGFy
YWN0ZXJJbkJ1ZmZlck9mZnNldCAtIG1hdGNoU3RhcnRPZmZzZXQsIG5ld01hdGNoTGVuZ3RoKSkp
CisgICAgICAgICAgICBpZiAobWF0Y2goUEFMOjpDaGFyYWN0ZXJSYW5nZShsYXN0Q2hhcmFjdGVy
SW5CdWZmZXJPZmZzZXQgLSBtYXRjaFN0YXJ0T2Zmc2V0LCBuZXdNYXRjaExlbmd0aCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIFNpbXBs
ZVJhbmdlIHJhbmdlRm9yTWF0Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBGaW5kT3B0aW9u
cyBvcHRpb25zLCBDaGFyYWN0ZXJSYW5nZSBtYXRjaCkKK3N0YXRpYyBTaW1wbGVSYW5nZSByYW5n
ZUZvck1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywg
UEFMOjpDaGFyYWN0ZXJSYW5nZSBtYXRjaCkKIHsKICAgICBhdXRvIG5vTWF0Y2hSZXN1bHQgPSBb
Jl0gKCkgewogICAgICAgICBhdXRvJiBib3VuZGFyeSA9IG9wdGlvbnMuY29udGFpbnMoQmFja3dh
cmRzKSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOwpAQCAtMjU0Myw5ICsyNTQzLDkgQEAgc3Rh
dGljIFNpbXBsZVJhbmdlIHJhbmdlRm9yTWF0Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBG
aW5kT3B0aW9ucyBvcHRpb25zLAogCiBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1aW50NjRfdCB0YXJnZXRPZmZzZXQpCiB7Ci0gICAgQ2hhcmFjdGVyUmFuZ2Ug
Y2xvc2VzdE1hdGNoOworICAgIFBBTDo6Q2hhcmFjdGVyUmFuZ2UgY2xvc2VzdE1hdGNoOwogICAg
IHVpbnQ2NF90IGNsb3Nlc3RNYXRjaERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpOwotICAgIGZvckVhY2hNYXRjaChyYW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBb
Jl0gKENoYXJhY3RlclJhbmdlIG1hdGNoKSB7CisgICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJn
ZXQsIG9wdGlvbnMsIFsmXSAoUEFMOjpDaGFyYWN0ZXJSYW5nZSBtYXRjaCkgewogICAgICAgICBh
dXRvIGRpc3RhbmNlID0gW10gKHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIpIC0+IHVpbnQ2NF90IHsK
ICAgICAgICAgICAgIHJldHVybiBzdGQ6OmFicyhzdGF0aWNfY2FzdDxpbnQ2NF90PihhIC0gYikp
OwogICAgICAgICB9OwpAQCAtMjU2OCw4ICsyNTY4LDggQEAgU2ltcGxlUmFuZ2UgZmluZFBsYWlu
VGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5k
T3AKICAgICAvLyBXaGVuIHNlYXJjaGluZyBmb3J3YXJkIHN0b3Agc2luY2Ugd2Ugd2FudCB0aGUg
Zmlyc3QgbWF0Y2guCiAgICAgLy8gV2hlbiBzZWFyY2hpbmcgYmFja3dhcmQga2VlcCBnb2luZyBz
aW5jZSB3ZSB3YW50IHRoZSBsYXN0IG1hdGNoLgogICAgIGJvb2wgc3RvcEFmdGVyRmluZGluZ01h
dGNoID0gIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKTsKLSAgICBDaGFyYWN0ZXJSYW5nZSBs
YXN0TWF0Y2hGb3VuZDsKLSAgICBmb3JFYWNoTWF0Y2gocmFuZ2UsIHRhcmdldCwgb3B0aW9ucywg
WyZdIChDaGFyYWN0ZXJSYW5nZSBtYXRjaCkgeworICAgIFBBTDo6Q2hhcmFjdGVyUmFuZ2UgbGFz
dE1hdGNoRm91bmQ7CisgICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsm
XSAoUEFMOjpDaGFyYWN0ZXJSYW5nZSBtYXRjaCkgewogICAgICAgICBsYXN0TWF0Y2hGb3VuZCA9
IG1hdGNoOwogICAgICAgICByZXR1cm4gc3RvcEFmdGVyRmluZGluZ01hdGNoOwogICAgIH0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggYWI3N2Y0MjA2ZWJhMDQzNTJm
MGQ1MGZlMTIyYjE3ZWUxZTRiOGMxYi4uNzNiZDViNTBmYmRjNDQ3NDBlMGMzMmYyMTc1ZGMyZWE2
ZDc4ZTI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmFuZ2UuaCIKKyNp
bmNsdWRlIDxwYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5oPgogI2luY2x1ZGUgIkZpbmRPcHRpb25z
LmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJJbmxpbmVJdGVyYXRvclRleHRCb3guaCIKQEAgLTM5LDEwICszOSwxMCBAQCBjbGFz
cyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiAKIC8vIENoYXJhY3RlciByYW5nZXMgYmFzZWQgb24gY2hh
cmFjdGVycyBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgogV0VCQ09SRV9FWFBPUlQgdWludDY0X3Qg
Y2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMg
PSB7IH0pOwotQ2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3QgQm91bmRhcnlQb2lu
dCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9
KTsKLUNoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29w
ZSwgY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOworUEFM
OjpDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiBzdGFy
dCwgY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOworUEFM
OjpDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUs
IGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9KTsKIEJvdW5k
YXJ5UG9pbnQgcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29w
ZSwgdWludDY0X3QsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9IHsgfSk7Ci1XRUJDT1JFX0VYUE9S
VCBTaW1wbGVSYW5nZSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNj
b3BlLCBDaGFyYWN0ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9KTsKK1dFQkNP
UkVfRVhQT1JUIFNpbXBsZVJhbmdlIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYgc2NvcGUsIFBBTDo6Q2hhcmFjdGVyUmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9
IHsgfSk7CiAKIC8vIFRleHQgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBwbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlv
cnMgPSB7IH0sIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwpAQCAtMjkzLDEyICsyOTMs
MTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkTG9va0FoZWFkIHsgdHJ1ZSB9OwogfTsKIAot
aW5saW5lIENoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQm
IHN0YXJ0LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9ycyBi
ZWhhdmlvcnMpCitpbmxpbmUgUEFMOjpDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25z
dCBCb3VuZGFyeVBvaW50JiBzdGFydCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SXRl
cmF0b3JCZWhhdmlvcnMgYmVoYXZpb3JzKQogewogICAgIHJldHVybiB7IGNoYXJhY3RlckNvdW50
KHsgc3RhcnQsIHJhbmdlLnN0YXJ0IH0sIGJlaGF2aW9ycyksIGNoYXJhY3RlckNvdW50KHJhbmdl
LCBiZWhhdmlvcnMpIH07CiB9CiAKLWlubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4
dEl0ZXJhdG9yQmVoYXZpb3JzIGJlaGF2aW9ycykKK2lubGluZSBQQUw6OkNoYXJhY3RlclJhbmdl
IGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgYmVoYXZpb3JzKQogewogICAgIHJldHVy
biBjaGFyYWN0ZXJSYW5nZShzY29wZS5zdGFydCwgcmFuZ2UsIGJlaGF2aW9ycyk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggMmMzZTA3OGEzMmEy
ZmVmMjFkYTRmZWNmOWRkYWRiNzE0MmFlZjMzMy4uYWI5Njk1Y2Q0MzdmY2QzYjEzYmE3MTI4Mjhi
NjdmNjc2OTEzNDUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcApAQCAtMTIwLDE0ICsxMjAsMTQgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBQb3NpdGlv
bigpOwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7Ci0g
ICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJl
Y3Rpb24oKTsKIAogICAgIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9yZGVyQ2FjaGUgb3Jk
ZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gW3J1biwgb2Zmc2V0
XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwog
ICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3Np
dGlvbik7CisgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7
CiAKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogCkBAIC0xMzgs
NyArMTM4LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpIHsK
ICAgICAgICAgICAgICAgICBydW4udHJhdmVyc2VQcmV2aW91c09uTGluZSgpOwogICAgICAgICAg
ICAgICAgIGlmICghcnVuKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQo
KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBQb3NpdGlv
biBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QK
ICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0aGUgbGVmdC4KICAgICAgICAgICAgICAg
ICBhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFr
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1J1bikgewotICAgICAgICAgICAgICAg
ICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb25PbkxlZnQgPSBwcmltYXJ5RGly
ZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlk
YXRlKG1fZGVlcFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBydW5PbkxlZnQg
PSBwb3NpdGlvbk9uTGVmdC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURp
cmVjdGlvbikucnVuOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuT25MZWZ0ICYmIHJ1bk9u
TGVmdC0+bGluZSgpID09IHJ1bi0+bGluZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKCk7CkBAIC0xNzYsMTMgKzE3NiwxMyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9z
aXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIAogICAgICAgICAg
ICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewogICAgICAgICAg
ICAgICAgIGlmICghcHJldmlvdXNSdW4pIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dp
Y2FsU3RhcnQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUgorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxTdGFydCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIKICAgICAgICAgICAgICAgICAgICAgICAgID8gSW5saW5lSXRl
cmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCks
IG9yZGVyQ2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IElubGluZUl0ZXJhdG9yOjps
YXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2Fj
aGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFN0YXJ0KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBydW4gPSBsb2dpY2FsU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWlu
aW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9mZnNldCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJl
dE9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI0Myw3ICsyNDMsNyBAQCBQb3NpdGlvbiBWaXNp
YmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAg
ICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIg
PyBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWF4aW11bUNh
cmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMjg2LDE0ICsyODYsMTQgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZp
c3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwotICAg
IFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9IHAucHJpbWFyeURpcmVjdGlvbigpOwor
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0
aW9uKCk7CiAKICAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUxvZ2ljYWxPcmRlckNhY2hlIG9yZGVy
Q2FjaGU7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIFtydW4sIG9mZnNldF0g
PSBwLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKTsKICAg
ICAgICAgaWYgKCFydW4pCi0gICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRp
b24pOworICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlv
bikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwog
CiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKIApAQCAtMzA0LDcg
KzMwNCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgIGlmICghcmVuZGVyZXItPm5vZGUoKSkgewog
ICAgICAgICAgICAgICAgIHJ1bi50cmF2ZXJzZU5leHRPbkxpbmUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXJ1bikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVw
UG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsK
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBydW4tPmxlZnRtb3N0Q2FyZXRPZmZzZXQoKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMyw3ICszMjMsNyBAQCBQb3NpdGlvbiBWaXNp
YmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgLy8gT3ZlcnNob3QgdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAgICAgIGF1
dG8gbmV4dFJ1biA9IHJ1bi0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFuZXh0UnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBv
c2l0aW9uT25SaWdodCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8g
bmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgUG9zaXRpb24gcG9zaXRpb25PblJpZ2h0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVl
cFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3Np
dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcnVuT25SaWdodCA9IHBvc2l0aW9uT25S
aWdodC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbikucnVu
OwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuT25SaWdodCAmJiBydW5PblJpZ2h0LT5saW5l
KCkgPT0gcnVuLT5saW5lKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRp
b24oKTsKQEAgLTM0MiwxNCArMzQyLDE0IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmln
aHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIAogICAgICAgICAgICAgaWYgKHJ1
bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewogICAgICAgICAgICAgICAgIGlm
ICghbmV4dFJ1bikgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxFbmQgPSBwcmlt
YXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUgorICAgICAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxFbmQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSCiAgICAgICAgICAgICAgICAgICAgICAgICA/IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9u
TGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICA6IElubGluZUl0ZXJhdG9yOjpmaXJzdExlYWZPbkxpbmVJbkxv
Z2ljYWxPcmRlcldpdGhOb2RlKHJ1bi0+bGluZSgpLCBvcmRlckNhY2hlKTsKIAogICAgICAgICAg
ICAgICAgICAgICBpZiAobG9naWNhbEVuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcnVu
ID0gbG9naWNhbEVuZDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+
cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6
IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5t
YXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDEzLDcgKzQxMyw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgbGV2
ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0g
cHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1heGltdW1DYXJl
dE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcnVu
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjM2LDcgKzYzNiw3
IEBAIElubGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNl
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlubGluZVJ1bkFuZE9mZnNldCht
X2FmZmluaXR5KTsKIH0KIAotSW5saW5lUnVuQW5kT2Zmc2V0IFZpc2libGVQb3NpdGlvbjo6aW5s
aW5lUnVuQW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QKK0lu
bGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNldChQQUw6
OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gbV9k
ZWVwUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rp
b24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggYTky
Y2E4MWJjZWZlM2U0NzZjNGM1NDY2MGQ5NzIwODRlZWVjZmFjNi4uY2I5ODQzMDNiZGQxNWE1MWI0
ZGVkOTM1YzM5Zjc0YjM4NTM4YTY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkg
PyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkg
OiAwOyB9CiAKICAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KCkgY29u
c3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGluZVJ1bkFuZE9mZnNldChUZXh0RGlyZWN0
aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OworICAgIElubGluZVJ1bkFuZE9mZnNldCBpbmxp
bmVSdW5BbmRPZmZzZXQoUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0
OwogCiAgICAgc3RydWN0IExvY2FsQ2FyZXRSZWN0IHsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGM2ODJlODI4OTZh
MDVkMmE3ODQzMzg3NzNjYjMwZGNmZDUxYzI0NTAuLmVlNzdkYzcxMDE2ZmUyYWYwODBiYzkxYTUx
MmM1MTJiZmVkZTkzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHRCb3Vu
ZGFyaWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaD4KICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8dW5pY29kZS91YnJrLmg+CkBAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiB2aXN1YWxXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24KIAogICAgIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVGV4dERpcmVj
dGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBibG9ja0Rp
cmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkpOwogICAgIElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgcHJldmlv
dXNseVZpc2l0ZWRSdW47CiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnQgPSB2aXNpYmxlUG9z
aXRpb247CiAgICAgc3RkOjpvcHRpb25hbDxWaXNpYmxlUG9zaXRpb24+IHByZXZpb3VzUG9zaXRp
b247CkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3Jk
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24KIAogICAgICAg
ICBib29sIGlzV29yZEJyZWFrOwogICAgICAgICBib29sIGJveEhhc1NhbWVEaXJlY3Rpb25hbGl0
eUFzQmxvY2sgPSBydW4tPmRpcmVjdGlvbigpID09IGJsb2NrRGlyZWN0aW9uOwotICAgICAgICBi
b29sIG1vdmluZ0JhY2t3YXJkID0gKGRpcmVjdGlvbiA9PSBNb3ZlTGVmdCAmJiBydW4tPmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikgfHwgKGRpcmVjdGlvbiA9PSBNb3ZlUmlnaHQg
JiYgcnVuLT5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAgICBib29s
IG1vdmluZ0JhY2t3YXJkID0gKGRpcmVjdGlvbiA9PSBNb3ZlTGVmdCAmJiBydW4tPmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB8fCAoZGlyZWN0aW9uID09IE1vdmVSaWdo
dCAmJiBydW4tPmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKTsKICAgICAg
ICAgaWYgKChza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ICYmIGJveEhhc1NhbWVEaXJlY3Rpb25h
bGl0eUFzQmxvY2spCiAgICAgICAgICAgICB8fCAoIXNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQg
JiYgbW92aW5nQmFja3dhcmQpKSB7CiAgICAgICAgICAgICBib29sIGxvZ2ljYWxTdGFydEluUmVu
ZGVyZXIgPSBvZmZzZXRJblJ1biA9PSB0ZXh0UnVuLT5zdGFydCgpICYmIHByZXZpb3VzUnVuSW5E
aWZmZXJlbnRMaW5lOwpAQCAtMzk2LDggKzM5Niw4IEBAIFZpc2libGVQb3NpdGlvbiBsZWZ0V29y
ZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBib29sIHNr
CiAgICAgCiAgICAgLy8gRklYTUU6IEhvdyBzaG91bGQgd2UgaGFuZGxlIGEgbm9uLWVkaXRhYmxl
IHBvc2l0aW9uPwogICAgIGlmIChsZWZ0V29yZEJyZWFrLmlzTnVsbCgpICYmIGlzRWRpdGFibGVQ
b3NpdGlvbih2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpIHsKLSAgICAgICAgVGV4
dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBsZWZ0V29yZEJyZWFrID0g
YmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gc3RhcnRPZkVkaXRhYmxlQ29u
dGVudCh2aXNpYmxlUG9zaXRpb24pIDogZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0
aW9uKTsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Cisg
ICAgICAgIGxlZnRXb3JkQnJlYWsgPSBibG9ja0RpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiA/IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKSA6IGVuZE9m
RWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlvbik7CiAgICAgfQogICAgIHJldHVybiBsZWZ0
V29yZEJyZWFrOwogfQpAQCAtNDA5LDggKzQwOSw4IEBAIFZpc2libGVQb3NpdGlvbiByaWdodFdv
cmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgYm9vbCBz
CiAKICAgICAvLyBGSVhNRTogSG93IHNob3VsZCB3ZSBoYW5kbGUgYSBub24tZWRpdGFibGUgcG9z
aXRpb24/CiAgICAgaWYgKHJpZ2h0V29yZEJyZWFrLmlzTnVsbCgpICYmIGlzRWRpdGFibGVQb3Np
dGlvbih2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpIHsKLSAgICAgICAgVGV4dERp
cmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJs
ZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICByaWdodFdvcmRCcmVhayA9IGJs
b2NrRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IGVuZE9mRWRpdGFibGVDb250ZW50
KHZpc2libGVQb3NpdGlvbikgOiBzdGFydE9mRWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlv
bik7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlv
bk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAg
ICAgICByaWdodFdvcmRCcmVhayA9IGJsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSID8gZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKSA6IHN0YXJ0T2ZF
ZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIHJpZ2h0
V29yZEJyZWFrOwogfQpAQCAtNDQ5LDcgKzQ0OSw3IEBAIHVuc2lnbmVkIHN1ZmZpeExlbmd0aEZv
clJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFy
CiAgICAgVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoZm9yd2FyZHNTY2FuUmFuZ2UpOwog
ICAgIHdoaWxlICghZm9yd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIFN0cmluZ1Zp
ZXcgdGV4dCA9IGZvcndhcmRzSXRlcmF0b3IudGV4dCgpOwotICAgICAgICB1bnNpZ25lZCBpID0g
ZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dCk7CisgICAgICAgIHVuc2lnbmVkIGkg
PSBQQUw6OmVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KHRleHQpOwogICAgICAgICBhcHBl
bmQoc3RyaW5nLCB0ZXh0LnN1YnN0cmluZygwLCBpKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCAr
PSBpOwogICAgICAgICBpZiAoaSA8IHRleHQubGVuZ3RoKCkpCkBAIC00NjUsNyArNDY1LDcgQEAg
dW5zaWduZWQgcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGJhY2t3YXJk
c1NjYW5SYW5nZSwgVmVjdG9yPFVDaGEKICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJhY2t3YXJkc1NjYW5SYW5nZSk7CiAgICAgd2hpbGUgKCFi
YWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIFN0cmluZ1ZpZXcgdGV4dCA9IGJh
Y2t3YXJkc0l0ZXJhdG9yLnRleHQoKTsKLSAgICAgICAgaW50IGkgPSBzdGFydE9mTGFzdFdvcmRC
b3VuZGFyeUNvbnRleHQodGV4dCk7CisgICAgICAgIGludCBpID0gUEFMOjpzdGFydE9mTGFzdFdv
cmRCb3VuZGFyeUNvbnRleHQodGV4dCk7CiAgICAgICAgIHByZXBlbmQoc3RyaW5nLCB0ZXh0LnN1
YnN0cmluZyhpKSk7CiAgICAgICAgIHByZWZpeExlbmd0aCArPSB0ZXh0Lmxlbmd0aCgpIC0gaTsK
ICAgICAgICAgaWYgKGkgPiAwKQpAQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBC
b3VuZGFyCiAgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoKmZvcndh
cmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQoKTsgZm9yd2FyZHNJdGVyYXRv
ci5hZHZhbmNlKCkpCiAgICAgICAgICAgICBhcHBlbmQoc3RyaW5nLCBmb3J3YXJkc0l0ZXJhdG9y
LnRleHQoKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN0cmluZy5zaXplKCk7Ci0gICAgfSBl
bHNlIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkocG9zaXRpb24uY2hhcmFjdGVy
QmVmb3JlKCkpKSB7CisgICAgfSBlbHNlIGlmIChQQUw6OnJlcXVpcmVzQ29udGV4dEZvcldvcmRC
b3VuZGFyeShwb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpIHsKICAgICAgICAgYXV0byBmb3J3
YXJkc1NjYW5SYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWFyY2hSYW5nZS0+ZW5kLCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpib3VuZGFyeSkpOwogICAgICAgICBzdWZmaXhM
ZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsK
ICAgICB9CkBAIC01OTUsNyArNTk1LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91
bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmMKICAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAw
OwogCi0gICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjLmNoYXJhY3RlckFm
dGVyKCkpKSB7CisgICAgaWYgKFBBTDo6cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMu
Y2hhcmFjdGVyQWZ0ZXIoKSkpIHsKICAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoYm91bmRh
cnlEb2N1bWVudCksIGMpOwogICAgICAgICBpZiAoIWJhY2t3YXJkc1NjYW5SYW5nZSkKICAgICAg
ICAgICAgIHJldHVybiB7IH07CkBAIC02MzgsMTQgKzYzOCwxNCBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2Vh
cmNoRnVuYwogdW5zaWduZWQgc3RhcnRXb3JkQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNp
Z25lZCBvZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9y
ZUNvbnRleHQsIGJvb2wmIG5lZWRNb3JlQ29udGV4dCkKIHsKICAgICBBU1NFUlQob2Zmc2V0KTsK
LSAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmICFzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNv
bnRleHQodGV4dC5zdWJzdHJpbmcoMCwgb2Zmc2V0KSkpIHsKKyAgICBpZiAobWF5SGF2ZU1vcmVD
b250ZXh0ICYmICFQQUw6OnN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0LnN1YnN0
cmluZygwLCBvZmZzZXQpKSkgewogICAgICAgICBuZWVkTW9yZUNvbnRleHQgPSB0cnVlOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CiAgICAg
aW50IHN0YXJ0LCBlbmQ7CiAgICAgVTE2X0JBQ0tfMSh0ZXh0LCAwLCBvZmZzZXQpOwotICAgIGZp
bmRXb3JkQm91bmRhcnkodGV4dCwgb2Zmc2V0LCAmc3RhcnQsICZlbmQpOworICAgIFBBTDo6Zmlu
ZFdvcmRCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsICZzdGFydCwgJmVuZCk7CiAgICAgcmV0dXJuIHN0
YXJ0OwogfQogCkBAIC02NjksMTMgKzY2OSwxMyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZldv
cmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFV29yZFNpZGUgc2lkZSkKIHVuc2lnbmVkIGVu
ZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIHVuc2lnbmVkIG9mZnNldCwgQm91bmRhcnlT
ZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IG1heUhhdmVNb3JlQ29udGV4dCwgYm9vbCYgbmVlZE1v
cmVDb250ZXh0KQogewogICAgIEFTU0VSVChvZmZzZXQgPD0gdGV4dC5sZW5ndGgoKSk7Ci0gICAg
aWYgKG1heUhhdmVNb3JlQ29udGV4dCAmJiBlbmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dCh0
ZXh0LnN1YnN0cmluZyhvZmZzZXQpKSA9PSB0ZXh0Lmxlbmd0aCgpIC0gb2Zmc2V0KSB7CisgICAg
aWYgKG1heUhhdmVNb3JlQ29udGV4dCAmJiBQQUw6OmVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250
ZXh0KHRleHQuc3Vic3RyaW5nKG9mZnNldCkpID09IHRleHQubGVuZ3RoKCkgLSBvZmZzZXQpIHsK
ICAgICAgICAgbmVlZE1vcmVDb250ZXh0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRleHQubGVu
Z3RoKCk7CiAgICAgfQogICAgIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwogICAgIGludCBlbmQ7
Ci0gICAgZmluZEVuZFdvcmRCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsICZlbmQpOworICAgIFBBTDo6
ZmluZEVuZFdvcmRCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsICZlbmQpOwogICAgIHJldHVybiBlbmQ7
CiB9CiAKQEAgLTY5NywxMiArNjk3LDEyIEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZldvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFV29yZFNpZGUgc2lkZSkKIAogc3RhdGljIHVuc2lnbmVk
IHByZXZpb3VzV29yZFBvc2l0aW9uQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9yZUNvbnRl
eHQsIGJvb2wmIG5lZWRNb3JlQ29udGV4dCkKIHsKLSAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0
ICYmICFzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dC5zdWJzdHJpbmcoMCwgb2Zm
c2V0KSkpIHsKKyAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmICFQQUw6OnN0YXJ0T2ZMYXN0
V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0LnN1YnN0cmluZygwLCBvZmZzZXQpKSkgewogICAgICAg
ICBuZWVkTW9yZUNvbnRleHQgPSB0cnVlOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
bmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZpbmROZXh0V29yZEZyb21JbmRl
eCh0ZXh0LCBvZmZzZXQsIGZhbHNlKTsKKyAgICByZXR1cm4gUEFMOjpmaW5kTmV4dFdvcmRGcm9t
SW5kZXgodGV4dCwgb2Zmc2V0LCBmYWxzZSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c1dvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtNzEyLDEy
ICs3MTIsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZFBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAKIHN0YXRpYyB1bnNpZ25lZCBuZXh0V29yZFBvc2l0
aW9uQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5kYXJ5U2Vh
cmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9yZUNvbnRleHQsIGJvb2wmIG5lZWRNb3Jl
Q29udGV4dCkKIHsKLSAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmIGVuZE9mRmlyc3RXb3Jk
Qm91bmRhcnlDb250ZXh0KHRleHQuc3Vic3RyaW5nKG9mZnNldCkpID09IHRleHQubGVuZ3RoKCkg
LSBvZmZzZXQpIHsKKyAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmIFBBTDo6ZW5kT2ZGaXJz
dFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dC5zdWJzdHJpbmcob2Zmc2V0KSkgPT0gdGV4dC5sZW5n
dGgoKSAtIG9mZnNldCkgewogICAgICAgICBuZWVkTW9yZUNvbnRleHQgPSB0cnVlOwogICAgICAg
ICByZXR1cm4gdGV4dC5sZW5ndGgoKTsKICAgICB9CiAgICAgbmVlZE1vcmVDb250ZXh0ID0gZmFs
c2U7Ci0gICAgcmV0dXJuIGZpbmROZXh0V29yZEZyb21JbmRleCh0ZXh0LCBvZmZzZXQsIHRydWUp
OworICAgIHJldHVybiBQQUw6OmZpbmROZXh0V29yZEZyb21JbmRleCh0ZXh0LCBvZmZzZXQsIHRy
dWUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMTQ2NywxNCArMTQ2NywxNCBAQCBib29sIGlzRW5kT2ZF
ZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcCkKICAg
ICByZXR1cm4gcC5pc05vdE51bGwoKSAmJiBwLm5leHQoKS5pc051bGwoKTsKIH0KIAotVmlzaWJs
ZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpCitWaXNpYmxlUG9z
aXRpb24gbGVmdEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KQogewotICAgIHJl
dHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbG9naWNhbFN0YXJ0T2ZMaW5l
KGMsIHJlYWNoZWRCb3VuZGFyeSkgOiBsb2dpY2FsRW5kT2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFy
eSk7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IGxv
Z2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpIDogbG9naWNhbEVuZE9mTGluZShj
LCByZWFjaGVkQm91bmRhcnkpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBi
b29sKiByZWFjaGVkQm91bmRhcnkpCitWaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGlu
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wqIHJlYWNoZWRCb3VuZGFyeSkKIHsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5KSA6IGxv
Z2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpOworICAgIHJldHVybiBkaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBsb2dpY2FsRW5kT2ZMaW5lKGMsIHJlYWNo
ZWRCb3VuZGFyeSkgOiBsb2dpY2FsU3RhcnRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5KTsKIH0K
IAogc3RhdGljIGJvb2wgZGlyZWN0aW9uSXNEb3duc3RyZWFtKFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAppbmRleCBhNmRlNDIx
NTI2ZDQ2ZTI4MmZmNDA3NTRmNzA5Mzg2YmQ5MzMxMGYzLi4yZjk4MGEyNWI1YmIwYjU5YWMwYWVh
MjNmNzFlOWY0NjllZTBmN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgK
QEAgLTYzLDggKzYzLDggQEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0VuZE9mTGluZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKIFZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5ID0gbnVsbHB0cik7CiBW
aXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBi
b29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKTsKIGJvb2wgaXNMb2dpY2FsRW5kT2ZMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotVmlzaWJsZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVk
Qm91bmRhcnkpOwotVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiwgVGV4dERpcmVjdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KTsKK1Zp
c2libGVQb3NpdGlvbiBsZWZ0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
UEFMOjpUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOworVmlzaWJsZVBvc2l0
aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUEFMOjpUZXh0
RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOwogCiAvLyBwYXJhZ3JhcGhzIChwZXJo
YXBzIGEgbWlzbm9tZXIsIGNhbiBiZSBkaXZpZGVkIGJ5IGxpbmUgYnJlYWsgZWxlbWVudHMpCiBX
RUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0KaW5kZXggYzMyNzY4YTlhODEzZmViYWMyMGFjZjcyODVlZDU3ZjY3ZTllMmI5NC4u
ODYyOTMzMmI0YWQ0YjVhMTBkNDE5M2IwNTJhN2YyZWQzMDU1MGI2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtNTAxLDcgKzUwMSw3IEBA
IE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiBjb250ZXh0UmFuZ2UsIE9wCiAgICAgICAgICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+
IGZyYWdtZW50UmFuZ2VzOwogICAgICAgICAgICAgQ0ZJbmRleCBmcmFnbWVudEluZGV4ID0gcXVl
cnlSYW5nZS5zdGFydC5xdWVyeUluZGV4OwogICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXgg
PT0gcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkgewotICAgICAgICAgICAgICAgIENoYXJhY3Rl
clJhbmdlIGZyYWdtZW50UmFuZ2U7CisgICAgICAgICAgICAgICAgUEFMOjpDaGFyYWN0ZXJSYW5n
ZSBmcmFnbWVudFJhbmdlOwogICAgICAgICAgICAgICAgIGZyYWdtZW50UmFuZ2UubG9jYXRpb24g
PSBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldDsKICAgICAgICAgICAgICAgICBmcmFnbWVudFJhbmdl
Lmxlbmd0aCA9IHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldCAtIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0
OwogICAgICAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChyZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UoaXRlcmF0b3IucmFuZ2UoKSwgZnJhZ21lbnRSYW5nZSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDhjMDE4ZDg1Y2U0
ZmI2Mzg3ZmIwZTE5ZTliMzlmZjNhMTZlNGRlMmIuLmY1YTUwZWY4ODg2NDdmZWQ4YjExYzI3ZjE1
M2ZmYmE1MjY4ZjlhMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5k
VGltZUlucHV0VHlwZS5jcHAKQEAgLTY3LDQ2ICs2Nyw0NiBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogc3RhdGljIGNvbnN0IGludCBtc2VjUGVyTWludXRlID0gNjAgKiAxMDAwOwogc3Rh
dGljIGNvbnN0IGludCBtc2VjUGVyU2Vjb25kID0gMTAwMDsKIAotdm9pZCBCYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OkRhdGVUaW1lRm9ybWF0VmFsaWRhdG9yOjp2aXNpdEZpZWxkKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQpCit2b2lkIEJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZTo6RGF0ZVRpbWVGb3JtYXRWYWxpZGF0b3I6OnZpc2l0RmllbGQoUEFMOjpEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50KQogewogICAgIHN3aXRjaCAoZmllbGRU
eXBlKSB7Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjoKKyAgICBjYXNl
IFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXI6CiAgICAgICAgIG1fcmVzdWx0cy5h
ZGQoRGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzWWVhcik7CiAgICAgICAgIGJy
ZWFrOwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGg6Ci0gICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhTdGFuZEFsb25lOgorICAgIGNhc2UgUEFM
OjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVNb250aFN0YW5kQWxvbmU6CiAgICAgICAgIG1fcmVzdWx0cy5hZGQo
RGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzTW9udGgpOwogICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtPZlllYXI6CisgICAg
Y2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZZZWFyOgogICAgICAgICBt
X3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6Okhhc1dlZWspOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9m
TW9udGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1vbnRo
OgogICAgICAgICBtX3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6
Okhhc0RheSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlUGVyaW9kOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVy
aW9kOgogICAgICAgICBtX3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3Vs
dHM6Okhhc01lcmlkaWVtKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVIb3VyMTE6Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
SG91cjEyOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgor
ICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOgogICAgICAgICBt
X3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6Okhhc0hvdXIpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIy
MzoKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAgY2FzZSBQ
QUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgY2FzZSBQQUw6OkRhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CiAgICAgICAgIG1fcmVzdWx0cy5hZGQoRGF0ZVRp
bWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzSG91cik7CiAgICAgICAgIG1fcmVzdWx0cy5h
ZGQoRGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzTWVyaWRpZW0pOwogICAgICAg
ICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKKyAg
ICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKICAgICAgICAgbV9y
ZXN1bHRzLmFkZChEYXRlVGltZUZvcm1hdFZhbGlkYXRpb25SZXN1bHRzOjpIYXNNaW51dGUpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29u
ZDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoKICAgICAg
ICAgbV9yZXN1bHRzLmFkZChEYXRlVGltZUZvcm1hdFZhbGlkYXRpb25SZXN1bHRzOjpIYXNTZWNv
bmQpOwogICAgICAgICBicmVhazsKIApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlOjpEYXRlVGltZUZvcm1hdFZhbGlkYXRvcjo6dmlzaXRGaWVsZChEYXRl
VGltZUZvcm1hCiAKIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpEYXRlVGltZUZvcm1h
dFZhbGlkYXRvcjo6dmFsaWRhdGVGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3JtYXQsIGNvbnN0IEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZSYgaW5wdXRUeXBlKQogewotICAgIGlmICghRGF0ZVRpbWVG
b3JtYXQ6OnBhcnNlKGZvcm1hdCwgKnRoaXMpKQorICAgIGlmICghUEFMOjpEYXRlVGltZUZvcm1h
dDo6cGFyc2UoZm9ybWF0LCAqdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5wdXRUeXBlLmlzVmFsaWRGb3JtYXQobV9yZXN1bHRzKTsKIH0KQEAgLTU0NCw3ICs1NDQs
NyBAQCBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0dXBEYXRlVGltZUNob29zZXJQ
YXJhbWV0ZXJzKERhdGVUaW1lQ2hvb3NlclBhcgogICAgIHBhcmFtZXRlcnMuY3VycmVudFZhbHVl
ID0gZWxlbWVudC52YWx1ZSgpOwogCiAgICAgYXV0byogY29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQu
Y29tcHV0ZWRTdHlsZSgpOwotICAgIHBhcmFtZXRlcnMuaXNBbmNob3JFbGVtZW50UlRMID0gY29t
cHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgIHBhcmFt
ZXRlcnMuaXNBbmNob3JFbGVtZW50UlRMID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCkgPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgcGFyYW1ldGVycy51c2VEYXJrQXBwZWFyYW5j
ZSA9IGRvY3VtZW50LnVzZURhcmtBcHBlYXJhbmNlKGNvbXB1dGVkU3R5bGUpOwogCiAgICAgYXV0
byBkYXRlID0gcGFyc2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQudmFsdWUoKSkudmFsdWVfb3Io
RGF0ZUNvbXBvbmVudHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VE
YXRlQW5kVGltZUlucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaAppbmRleCBjNzI5YzkyMmFiMzhiYThkOTRkNDc0NDU3MzNhZGEzMGM1OTVl
Mjc2Li45NzA1YTRkNjg3NjQ4NmUyZmE3Mjg2MTIyMWVjYzM5NDVkNWMyYjU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJEYXRlVGltZUNob29zZXIuaCIKICNpbmNsdWRlICJEYXRlVGltZUNo
b29zZXJDbGllbnQuaCIKICNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5o
PgogI2luY2x1ZGUgIklucHV0VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApA
QCAtNzksMTEgKzc5LDExIEBAIHByb3RlY3RlZDoKICAgICBib29sIHZhbHVlTWlzc2luZyhjb25z
dCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBEYXRlVGltZUZv
cm1hdFZhbGlkYXRvciBmaW5hbCA6IHB1YmxpYyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVy
IHsKKyAgICBjbGFzcyBEYXRlVGltZUZvcm1hdFZhbGlkYXRvciBmaW5hbCA6IHB1YmxpYyBQQUw6
OkRhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgRGF0
ZVRpbWVGb3JtYXRWYWxpZGF0b3IoKSB7IH0KIAotICAgICAgICB2b2lkIHZpc2l0RmllbGQoRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KTsKKyAgICAgICAgdm9pZCB2aXNpdEZpZWxkKFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KTsKICAgICAgICAgdm9pZCB2aXNpdExp
dGVyYWwoY29uc3QgU3RyaW5nJikgeyB9CiAKICAgICAgICAgYm9vbCB2YWxpZGF0ZUZvcm1hdChj
b25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDc1MjMw
MTdiYTcyOTQwNTYzYjc1ZjQ2NmE2OGVkMWNjYjNkZWU4YmEuLmE3ODI2ZGZiOGYyYjE5MTIxZWRk
Y2E5MzE2Y2Y1ZjQyYWU0ZDEyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0
b3J5RG9jdW1lbnQuY3BwCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1
bWVudFBhcnNlcjo6YXBwZW5kKFJlZlB0cjxTdHJpbmdJbXBsPiYmIGlucHV0U291cmNlKQogICAg
IGJvb2wgZm91bmROZXdMaW5lID0gZmFsc2U7CiAKICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAg
ICBTZWdtZW50ZWRTdHJpbmcgc3RyaW5nIHsgU3RyaW5nIHsgV1RGTW92ZShpbnB1dFNvdXJjZSkg
fSB9OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIHN0cmluZyB7IFN0cmluZyB7IFdURk1vdmUo
aW5wdXRTb3VyY2UpIH0gfTsKICAgICB3aGlsZSAoIXN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgVUNoYXIgYyA9IHN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKaW5kZXggYTcxYTYzYjEwZDI1Nzg4MjkyMWQ3NTM5NDA2ODFjNjE2ZTJj
MzUzMy4uZjBhMjhiMTA5ZmIzMzdkMDkyMGJiYjk5NWYwYmE3ZmRmNDVjNDQyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTg5OCwxOCArODk4LDE4IEBAIGJvb2wgSFRNTEVs
ZW1lbnQ6Omhhc0RpcmVjdGlvbkF1dG8oKSBjb25zdAogICAgIHJldHVybiAoaGFzVGFnTmFtZShi
ZGlUYWcpICYmIGRpcmVjdGlvbi5pc051bGwoKSkgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZGlyZWN0aW9uLCAiYXV0byIpOwogfQogCi1UZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50
OjpkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbnN0
CitQQUw6OlRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJB
dXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3QKIHsKICAgICBpZiAoIShzZWxmT3JBbmNl
c3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSAmJiBoYXNEaXJlY3Rpb25BdXRvKCkpKSB7CiAgICAg
ICAgIGlzQXV0byA9IGZhbHNlOwotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOwor
ICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgfQogCiAgICAgaXNB
dXRvID0gdHJ1ZTsKICAgICByZXR1cm4gZGlyZWN0aW9uYWxpdHkoKTsKIH0KIAotVGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpIGNvbnN0CitQQUw6OlRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVj
dGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKSBjb25zdAogewog
ICAgIGlmIChpc1RleHRGaWVsZCgpKSB7CiAgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50JiB0ZXh0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihj
b25zdF9jYXN0PEhUTUxFbGVtZW50Jj4oKnRoaXMpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBUZXh0
RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0
aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgICAgICBVQ2hhckRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
ID0gdGV4dEVsZW1lbnQudmFsdWUoKS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigmaGFzU3Ryb25n
RGlyZWN0aW9uYWxpdHkpOwogICAgICAgICBpZiAoc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9k
ZSkKICAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlID0gaGFzU3Ryb25n
RGlyZWN0aW9uYWxpdHkgPyAmdGV4dEVsZW1lbnQgOiBudWxscHRyOwotICAgICAgICByZXR1cm4g
KHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/IFRleHREaXJlY3Rpb246OkxUUiA6
IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuICh0ZXh0RGlyZWN0aW9uID09IFVf
TEVGVF9UT19SSUdIVCkgPyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA6IFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMOwogICAgIH0KIAogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZmlyc3RDaGlsZCgp
OwpAQCAtOTQ0LDE0ICs5NDQsMTQgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0
aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGMKICAgICAgICAg
ICAgIGlmIChoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkgewogICAgICAgICAgICAgICAgIGlmIChz
dHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQogICAgICAgICAgICAgICAgICAgICAqc3Ryb25n
RGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSA9IG5vZGUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICh0ZXh0RGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCkgPyBUZXh0RGlyZWN0aW9uOjpM
VFIgOiBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgcmV0dXJuICh0ZXh0RGly
ZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCkgPyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA6IFBB
TDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCB0aGlzKTsKICAgICB9CiAgICAgaWYg
KHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpCiAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25h
bGl0eVRleHROb2RlID0gbnVsbHB0cjsKLSAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOwor
ICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKIH0KIAogdm9pZCBIVE1MRWxlbWVu
dDo6ZGlyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKQEAgLTk2OSw3
ICs5NjksNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVk
QWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudAogewogICAgIEFTU0VSVChzZWxmT3JB
bmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSk7CiAgICAgTm9kZSogc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZTsKLSAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rp
b25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CisgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxp
dHlUZXh0Tm9kZSk7CiAgICAgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShjaGlsZCwgZmFs
c2UpOwogICAgIGlmICghcmVuZGVyZXIoKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLmRpcmVjdGlv
bigpID09IHRleHREaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTk4NCw3ICs5ODQsNyBA
QCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGls
ZEF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudAogdm9pZCBIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkoKQogewogICAgIE5vZGUqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5
VGV4dE5vZGU7Ci0gICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uYWxp
dHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpOworICAgIFBBTDo6VGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uYWxpdHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4
dE5vZGUpOwogICAgIHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkodGhpcywgdHJ1ZSwgc3Ry
b25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSAhPSB0ZXh0RGlyZWN0aW9uKQogICAgICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKaW5kZXgg
Mjg2OTQyODFjMThmNTlhNjg2ZWNmNTEyZDY2ZjdkZjhiOThjNTcxYi4uZWU1ODJkYmIxMDBiZDdj
OGE2YzIxMjUzNWI3NWI0ZGUxNDIxNmUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaApA
QCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaXIo
Y29uc3QgQXRvbVN0cmluZyYpOwogCiAgICAgYm9vbCBoYXNEaXJlY3Rpb25BdXRvKCkgY29uc3Q7
Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShi
b29sJiBpc0F1dG8pIGNvbnN0OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25hbGl0
eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIGlzVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9p
ZCBhZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQo
RWxlbWVudCogY2hpbGQpOwogICAgIHZvaWQgYWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFm
dGVyQ2hpbGRyZW5DaGFuZ2VkKEVsZW1lbnQqIGJlZm9yZUNoYW5nZSwgQ2hpbGRDaGFuZ2U6OlR5
cGUpOwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVj
dGlvbmFsaXR5VGV4dE5vZGU9IDApIGNvbnN0OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZT0gMCkgY29uc3Q7
CiAKICAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZUV2ZW50SGFuZGxlck5hbWVNYXAoRXZlbnRIYW5k
bGVyTmFtZU1hcCYsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhYmxlW10sIHNpemVfdCB0
YWJsZVNpemUpOwogICAgIHN0YXRpYyBFdmVudEhhbmRsZXJOYW1lTWFwIGNyZWF0ZUV2ZW50SGFu
ZGxlck5hbWVNYXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5jcHAKaW5kZXggMTdjMWYzZTA1Yzk5YmQ2YWQ0YWRjZjY3OGQ4M2ZjYWI1
NzNmNThiZC4uMWU4OGEwZDIxZTVhOTE1MmY0MTIyODYzNjNiMGI2NmU5M2E5MDEyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAK
QEAgLTc2OCwxOCArNzY4LDE4IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
ZGlyZWN0aW9uRm9yRm9ybURhdGEoKSBjb25zdAogICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBsaW5lYWdlT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgICAgIGF1dG8m
IHZhbHVlID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIp
OwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAi
cnRsIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJsdHIiKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIHJldHVy
biBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImF1dG8iKSkgewogICAgICAgICAgICAgICAgIGJvb2wg
aXNBdXRvOwogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmRpcmVjdGlvbmFsaXR5SWZo
YXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSOwogICAgIH0oKTsKIAotICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6TFRSID8gImx0ciJfcyA6ICJydGwiX3M7CisgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9zOwogfQogCiBF
eGNlcHRpb25Pcjx2b2lkPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0TWF4TGVuZ3Ro
KGludCBtYXhMZW5ndGgpCkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6YWRqdXN0SW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVu
dFMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgdGV4dEJsb2NrU3R5
bGUuc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUik7CisgICAgICAgIHRleHRCbG9ja1N0
eWxlLnNldERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgfQogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAppbmRleCA0ZTk4NTE3
MGMyODM2ZTYyZjI0MmJkYTM4NDAxNDg1YWMwNzlkMTQ3Li45ZDkzYzE5ODc1MDM3YTE3M2E0YTVj
MjhkNDQ3NTEyODE1Zjg1MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
aXRsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHAKQEAgLTc5LDkgKzc5LDkgQEAgU3RyaW5nIEhUTUxUaXRsZUVsZW1lbnQ6OnRleHQoKSBj
b25zdAogICAgIHJldHVybiBUZXh0Tm9kZVRyYXZlcnNhbDo6Y2hpbGRUZXh0Q29udGVudCgqdGhp
cyk7CiB9CiAKLVN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRU
ZXh0V2l0aERpcmVjdGlvbigpCitQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxl
bWVudDo6Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpCiB7Ci0gICAgYXV0byBkaXJlY3Rpb24g
PSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgYXV0byBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUjsKICAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVk
U3R5bGUoKSkKICAgICAgICAgZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCk7
CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaAppbmRleCA4YzM3
YTg5YjEwOTY3ZjBlYjQ5NzE2MDZhN2VjMDQ1YmU2NzRiMGU0Li41YjhhMDEzMTRhODI1ZDQzZGNj
NDdiZWU5NGFmYjQ4OTQ1ZWVkMTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUaXRsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1l
bnQuaApAQCAtMjMsNyArMjMsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgotI2luY2x1ZGUgIlN0cmluZ1dpdGhEaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDxwYWwv
dGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHQoKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CiAK
LSAgICBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0ZXh0V2l0aERpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICBjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24m
IHRleHRXaXRoRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQogCiBwcml2YXRl
OgogICAgIEhUTUxUaXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7
CkBAIC00NCw5ICs0NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9y
KFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBmaW5hbDsKIAotICAgIFN0cmluZ1dpdGhEaXJlY3Rp
b24gY29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpOworICAgIFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiBjb21wdXRlZFRleHRXaXRoRGlyZWN0aW9uKCk7CiAKLSAgICBTdHJpbmdXaXRoRGlyZWN0
aW9uIG1fdGl0bGU7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIG1fdGl0bGU7CiB9Owog
CiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRnJh
Z21lbnRVUklQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUZyYWdtZW50VVJJ
UGFyc2VyLmNwcAppbmRleCA4OWE0MzIyMmU1Y2ZlOGMxZWQxZDNhNzI5OTM3NDIwMTQyZTE3Yzky
Li4xZTM1M2NkOTFlZDU2MjJiNWY0NmViYzM4NmViMmI0NjdkNDdkZTkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHAKQEAgLTMxLDkgKzMxLDkg
QEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAj
aW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
NGQ1OTUwZTBjYzJiY2NlNGFhMzJkYjI3ZGEzZDgwN2EwMTA5N2Q5NS4uODkzZTY0OGRiMTQwNzAx
OGM0MzY3YzExYmIyZjM1OGIwOWU5MmRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNTcsMjggKzE1
NywyOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRh
dGluZ1N0eWxlKGNvbnN0IFN0cmluZyYgbmV3Rm9udAogICAgIEFTU0VSVChzdGF0ZSgpLmZvbnQu
aXNQb3B1bGF0ZWQoKSk7CiB9CiAKLWlubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6dG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJl
bmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSkgY29uc3QKK2lubGluZSBQQUw6OlRleHREaXJlY3Rp
b24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlKSBjb25zdAogewogICAg
IGF1dG8qIHN0eWxlID0gY29tcHV0ZWRTdHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJ
bmhlcml0ID8gY2FudmFzKCkuZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkgOiBudWxscHRyOwogICAg
IGlmIChjb21wdXRlZFN0eWxlKQogICAgICAgICAqY29tcHV0ZWRTdHlsZSA9IHN0eWxlOwogICAg
IHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBEaXJlY3Rpb246OkluaGVyaXQ6Ci0gICAg
ICAgIHJldHVybiBzdHlsZSA/IHN0eWxlLT5kaXJlY3Rpb24oKSA6IFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICAgICAgcmV0dXJuIHN0eWxlID8gc3R5bGUtPmRpcmVjdGlvbigpIDogUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFI7CiAgICAgY2FzZSBEaXJlY3Rpb246OlJ0bDoKLSAgICAgICAgcmV0dXJu
IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6
UlRMOwogICAgIGNhc2UgRGlyZWN0aW9uOjpMdHI6Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0
aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiB9CiAKIENhbnZhc0RpcmVj
dGlvbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpcmVjdGlvbigpIGNvbnN0CiB7CiAgICAg
aWYgKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkKICAgICAgICAgY2Fu
dmFzKCkuZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRvVGV4
dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbikgPT0gVGV4dERpcmVjdGlvbjo6UlRMID8gQ2Fu
dmFzRGlyZWN0aW9uOjpSdGwgOiBDYW52YXNEaXJlY3Rpb246Okx0cjsKKyAgICByZXR1cm4gdG9U
ZXh0RGlyZWN0aW9uKHN0YXRlKCkuZGlyZWN0aW9uKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJU
TCA/IENhbnZhc0RpcmVjdGlvbjo6UnRsIDogQ2FudmFzRGlyZWN0aW9uOjpMdHI7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IGRvdWJsZSB4LCBkb3VibGUgeSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IG1heFdpZHRoKQpAQCAt
MjA3LDcgKzIwNyw3IEBAIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjptZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgY29uc3QgUmVuZGVyU3R5bGUq
IGNvbXB1dGVkU3R5bGU7CiAgICAgYXV0byBkaXJlY3Rpb24gPSB0b1RleHREaXJlY3Rpb24oc3Rh
dGUoKS5kaXJlY3Rpb24sICZjb21wdXRlZFN0eWxlKTsKICAgICBib29sIG92ZXJyaWRlID0gY29t
cHV0ZWRTdHlsZSAmJiBpc092ZXJyaWRlKGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpOwot
ICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4dCwgMCwgMCwgQWxsb3dSaWdodEV4cGFu
c2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgdHJ1ZSk7CisgICAgVGV4dFJ1biB0ZXh0UnVuKG5v
cm1hbGl6ZWRUZXh0LCAwLCAwLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIGRpcmVjdGlvbiwg
b3ZlcnJpZGUsIHRydWUpOwogICAgIHJldHVybiBtZWFzdXJlVGV4dEludGVybmFsKHRleHRSdW4p
OwogfQogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBkb3VibGUgeCwgZG8KICAgICBj
b25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZTsKICAgICBhdXRvIGRpcmVjdGlvbiA9IHRv
VGV4dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJv
b2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlICYmIGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+
dW5pY29kZUJpZGkoKSk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAw
LCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0cnVlKTsKKyAgICBU
ZXh0UnVuIHRleHRSdW4obm9ybWFsaXplZFRleHQsIDAsIDAsIFBBTDo6QWxsb3dSaWdodEV4cGFu
c2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgdHJ1ZSk7CiAgICAgZHJhd1RleHRVbmNoZWNrZWQo
dGV4dFJ1biwgeCwgeSwgZmlsbCwgbWF4V2lkdGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDZiNDhl
OGNjZjU4ODdmMTg5YjViYTY2ZGE1ZmIzN2UzNzYxMzQ0MTQuLjhkODQxZmZmODgxMGI1NTBkYjVk
N2JiZThjNGYxNDhjM2JiZGY1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC02NSw3ICs2NSw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGRyYXdGb2N1c0lmTmVlZGVkSW50ZXJuYWwoY29uc3QgUGF0aCYsIEVs
ZW1lbnQmKTsKIAotICAgIFRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OkRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRl
ZFN0eWxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvVGV4dERp
cmVjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpEaXJlY3Rpb24sIGNvbnN0IFJl
bmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2ZGVmZWI4MTJjMzcy
MmMzOGVhMmZjOGQwNzkxZmFlMjliMTYwZDZlLi5jYzRlYjk2ZmJmYjkyNzUwMGY0ZTViOTc5NWMw
MWVmZTdiMTJhZmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMzAxLDcgKzMwMSw3IEBA
IFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Zm9udFN0cmluZygp
IGNvbnN0CiAgICAgY29uc3QgYXV0byYgZm9udCA9IHRoaXMtPmZvbnQuZm9udERlc2NyaXB0aW9u
KCk7CiAKICAgICBhdXRvIGl0YWxpYyA9IGZvbnQuaXRhbGljKCkgPyAiaXRhbGljICIgOiAiIjsK
LSAgICBhdXRvIHNtYWxsQ2FwcyA9IGZvbnQudmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFudENh
cHM6OlNtYWxsID8gInNtYWxsLWNhcHMgIiA6ICIiOworICAgIGF1dG8gc21hbGxDYXBzID0gZm9u
dC52YXJpYW50Q2FwcygpID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbCA/ICJzbWFsbC1j
YXBzICIgOiAiIjsKICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmQoaXRhbGljLCBzbWFsbENhcHMs
IGZvbnQuY29tcHV0ZWRQaXhlbFNpemUoKSwgInB4Iik7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9udC5mYW1pbHlDb3VudCgpOyArK2kpIHsKQEAgLTIzOTgsOCArMjM5OCw4IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBkb3VibGUgeCwgZG91YmxlCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBu
b3JtYWxpemVkVGV4dCA9IG5vcm1hbGl6ZVNwYWNlcyh0ZXh0KTsKLSAgICBhdXRvIGRpcmVjdGlv
biA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBUZXh0RGlyZWN0aW9u
OjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6
ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVl
KTsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246
OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
OworICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4dCwgMCwgMCwgUEFMOjpBbGxvd1Jp
Z2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsKICAgICBkcmF3VGV4dFVuY2hl
Y2tlZCh0ZXh0UnVuLCB4LCB5LCBmaWxsLCBtYXhXaWR0aCk7CiB9CiAKQEAgLTI1MjAsOCArMjUy
MCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNr
ZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgZG91CiBSZWY8VGV4dE1ldHJpY3M+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0
ZXh0KQogewogICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IG5vcm1hbGl6ZVNwYWNlcyh0ZXh0
KTsKLSAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246
OlJ0bCkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgVGV4
dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBk
aXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOworICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4
dCwgMCwgMCwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVl
KTsKICAgICByZXR1cm4gbWVhc3VyZVRleHRJbnRlcm5hbCh0ZXh0UnVuKTsKIH0KIApAQCAtMjU1
NSw3ICsyNTU1LDcgQEAgUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjptZWFzdXJlVGV4dEludGVybmFsKGNvbnN0IFRleHRSdW4KICAgICByZXR1cm4gbWV0cmlj
czsKIH0KIAotRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0T2Zm
c2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK0Zsb2F0UG9pbnQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6dGV4dE9mZnNldChmbG9hdCB3aWR0aCwgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBhdXRvJiBmb250TWV0cmljcyA9IGZvbnRQ
cm94eSgpLT5mb250TWV0cmljcygpOwogICAgIEZsb2F0UG9pbnQgb2Zmc2V0OwpAQCAtMjU3Nyw3
ICsyNTc3LDcgQEAgRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0
T2Zmc2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uIGQKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgYm9vbCBpc1JUTCA9IGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7Cisg
ICAgYm9vbCBpc1JUTCA9IGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAg
ICBhdXRvIGFsaWduID0gc3RhdGUoKS50ZXh0QWxpZ247CiAgICAgaWYgKGFsaWduID09IFN0YXJ0
VGV4dEFsaWduKQogICAgICAgICBhbGlnbiA9IGlzUlRMID8gUmlnaHRUZXh0QWxpZ24gOiBMZWZ0
VGV4dEFsaWduOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IGQ0YWUwZTQxMGNjOTUzZTliNmE4N2U0
MjZjM2U5ZjNlZmYzNDI0NDYuLjgxODhhNzAzMzllNmM3MjhlYWI2NTM5YTRkOTYzZTk4MzZkM2Yy
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM5Niw3ICszOTYsNyBAQCBwcml2YXRlOgogICAg
IC8vIFRoZXJlZm9yZSwgYWxsIGZvbnQgb3BlcmF0aW9ucyBtdXN0IHBhc3MgdGhyb3VnaCB0aGUg
cHJveHkuCiAgICAgdmlydHVhbCBjb25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIHsgcmV0dXJu
IG51bGxwdHI7IH0KIAotICAgIEZsb2F0UG9pbnQgdGV4dE9mZnNldChmbG9hdCB3aWR0aCwgVGV4
dERpcmVjdGlvbik7CisgICAgRmxvYXRQb2ludCB0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBQQUw6
OlRleHREaXJlY3Rpb24pOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNYXhTYXZl
Q291bnQgPSAxMDI0ICogMTY7CiAgICAgVmVjdG9yPFN0YXRlLCAxPiBtX3N0YXRlU3RhY2s7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApp
bmRleCBiZWY0MmEyMWVlMmJmMjk1YjlmZTAyNTFjNGJkODlmYThlYjRkNzM3Li4wZjRlYzlmY2M2
Y2Y4NTZlNTlmZjgwMTc4NjY3YjI1YmNmNjY3NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTM2Nyw3ICszNjcsNyBAQCBi
b29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFzSW5zZXJ0aW9uUG9pbnQoKQogICAgIHJldHVybiBt
X2lucHV0Lmhhc0luc2VydGlvblBvaW50KCkgfHwgKHdhc0NyZWF0ZWRCeVNjcmlwdCgpICYmICFt
X2lucHV0LmhhdmVTZWVuRW5kT2ZGaWxlKCkpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6aW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYmIHNvdXJjZSkKK3ZvaWQgSFRNTERvY3VtZW50UGFy
c2VyOjppbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJiBzb3VyY2UpCiB7CiAgICAgaWYgKGlz
U3RvcHBlZCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDhiNGZhODQ1MmFkNzU2ZTI3NTNmNzVkMWVh
YjYzMjE3Y2ZjOGNhNWEuLmFhNTgwNDI3ZGM0ZmFmMjhmZDYyZjRkM2M3ZTY4ZmMzMzVjNTk5YWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5o
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBIVE1M
RG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50Jik7CiAKLSAgICB2b2lkIGluc2VydChTZWdtZW50
ZWRTdHJpbmcmJikgZmluYWw7CisgICAgdm9pZCBpbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcm
JikgZmluYWw7CiAgICAgdm9pZCBhcHBlbmQoUmVmUHRyPFN0cmluZ0ltcGw+JiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgYXBwZW5kU3luY2hyb25vdXNseShSZWZQdHI8U3RyaW5nSW1wbD4mJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmaW5pc2goKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKaW5kZXggYTg5ZmM2MGRjYjE1MmYzYzJm
ODlhNTEyMmY3OTRjNGYzZDkyY2VhMS4uNzEzN2Q2OTNmNmRmOWU0ZmJjOGQ2MTg2YTlmYWRlMGY1
MWExZDExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0
eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBh
cnNlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgYWNj
ZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RhdGljIGJvb2wgY29uc3Vt
ZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNv
ZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxs
b3dlZENoYXJhY3RlciwgVUNoYXImIGNjKQorICAgIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVu
dGl0eShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVk
RW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3RlciwgVUNoYXImIGNjKQogICAgIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25z
dW1lZENoYXJhY3RlcnM7CiAgICAgICAgIEhUTUxFbnRpdHlTZWFyY2ggZW50aXR5U2VhcmNoOwpA
QCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1ib29sIGNvbnN1bWVIVE1M
RW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50
aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlcikKK2Jvb2wgY29uc3VtZUhUTUxFbnRpdHkoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFj
dGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAgcmV0dXJuIGNv
bnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8SFRNTEVudGl0eVBhcnNlcj4oc291cmNlLCBkZWNvZGVk
RW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgKaW5k
ZXggN2Q3OTIyNGM2MTI4NzRlZGRkZmJiZGEyMmNhODM0ODA0Zjk5YjkxYS4uYWNiMmRkZTIyYjYx
MzI5YWU1NzVhZjYyOWQxMjM5M2ZjZDUxOWNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaApAQCAtMjYsMTEgKzI2LDExIEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8cGFsL3RleHQv
U2VnbWVudGVkU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBjb25zdW1l
SFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5
LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJh
Y3RlciA9ICdcMCcpOworYm9vbCBjb25zdW1lSFRNTEVudGl0eShQQUw6OlNlZ21lbnRlZFN0cmlu
ZyYsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3Rl
cnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7CiAKIC8vIFVzZWQg
YnkgdGhlIFhNTCBwYXJzZXIuICBOb3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBIVE1MIHBhcnNpbmcu
ICBVc2UgY29uc3VtZUhUTUxFbnRpdHkgaW5zdGVhZC4KIHNpemVfdCBkZWNvZGVOYW1lZEVudGl0
eVRvVUNoYXJBcnJheShjb25zdCBjaGFyKiwgVUNoYXIgcmVzdWx0WzRdKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKaW5kZXggOTJkOGJjMzUzOTk5MTRh
MjBhZTllNjRkMmEyMzlmYTc2MWUwNTc2Ny4uNmE4ZjY2ZWUyNTk0NjA5NThlZTY4ZGZmYWM4NmRk
ZTRkNTQzNTEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElu
cHV0U3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3Ry
ZWFtLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9PcmRpbmFsTnVtYmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU1LDEyICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYXBw
ZW5kVG9FbmQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQorICAgIHZvaWQgYXBwZW5kVG9FbmQo
UEFMOjpTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCiAgICAgewogICAgICAgICBtX2xhc3QtPmFw
cGVuZChXVEZNb3ZlKHN0cmluZykpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0QXRDdXJyZW50
SW5zZXJ0aW9uUG9pbnQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQorICAgIHZvaWQgaW5zZXJ0
QXRDdXJyZW50SW5zZXJ0aW9uUG9pbnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCiAg
ICAgewogICAgICAgICBtX2ZpcnN0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOwogICAgIH0KQEAg
LTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrRW5kT2ZGaWxlKCkKICAgICB7
Ci0gICAgICAgIG1fbGFzdC0+YXBwZW5kKFN0cmluZyB7ICZrRW5kT2ZGaWxlTWFya2VyLCAxIH0p
OworICAgICAgICBtX2xhc3QtPmFwcGVuZChTdHJpbmcgeyAmUEFMOjprRW5kT2ZGaWxlTWFya2Vy
LCAxIH0pOwogICAgICAgICBtX2xhc3QtPmNsb3NlKCk7CiAgICAgfQogCkBAIC04NiwxMCArODYs
MTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9sYXN0LT5pc0Nsb3NlZCgpOwogICAgIH0K
IAotICAgIFNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgpIHsgcmV0dXJuIG1fZmlyc3Q7IH0KLSAg
ICBjb25zdCBTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0
OyB9CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSB7IHJldHVybiBtX2ZpcnN0
OyB9CisgICAgY29uc3QgUEFMOjpTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0OyB9CiAKLSAgICB2b2lkIHNwbGl0SW50byhTZWdtZW50ZWRTdHJpbmcmIG5l
eHQpCisgICAgdm9pZCBzcGxpdEludG8oUEFMOjpTZWdtZW50ZWRTdHJpbmcmIG5leHQpCiAgICAg
ewogICAgICAgICBuZXh0ID0gV1RGTW92ZShtX2ZpcnN0KTsKICAgICAgICAgaWYgKG1fbGFzdCA9
PSAmbV9maXJzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAotICAgIHZvaWQgbWVyZ2VGcm9tKFNlZ21lbnRlZFN0cmluZyYgbmV4dCkKKyAgICB2b2lk
IG1lcmdlRnJvbShQQUw6OlNlZ21lbnRlZFN0cmluZyYgbmV4dCkKICAgICB7CiAgICAgICAgIG1f
Zmlyc3QuYXBwZW5kKG5leHQpOwogICAgICAgICBpZiAobV9sYXN0ID09ICZuZXh0KSB7CkBAIC0x
MTcsOCArMTE3LDggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTZWdtZW50ZWRT
dHJpbmcgbV9maXJzdDsKLSAgICBTZWdtZW50ZWRTdHJpbmcqIG1fbGFzdDsKKyAgICBQQUw6OlNl
Z21lbnRlZFN0cmluZyBtX2ZpcnN0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nKiBtX2xhc3Q7
CiB9OwogCiBjbGFzcyBJbnNlcnRpb25Qb2ludFJlY29yZCB7CkBAIC0xNDcsNyArMTQ3LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIEhUTUxJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsK
LSAgICBTZWdtZW50ZWRTdHJpbmcgbV9uZXh0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIG1f
bmV4dDsKICAgICBPcmRpbmFsTnVtYmVyIG1fbGluZTsKICAgICBPcmRpbmFsTnVtYmVyIG1fY29s
dW1uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmgKaW5kZXggOGQ3Yjg5ZmE1ZDY0Y2ZjNjQxNDkyMjdmMWNjMWNlZGI1ZGEyNWI3
ZS4uMzI4MmZiYWJjODBhNDNmYzg3OGIyNWQwNmQ3N2Q0NGQ3OWIxM2E3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKQEAgLTI2
LDggKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgot
I2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKIAogICAgIEhUTUxUb2tlbml6ZXIgbV90
b2tlbml6ZXI7CiAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbV9jb2RlYzsK
LSAgICBTZWdtZW50ZWRTdHJpbmcgbV9pbnB1dDsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBt
X2lucHV0OwogICAgIGJvb2wgbV9pbkhlYWRTZWN0aW9uIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9k
b25lQ2hlY2tpbmcgeyBmYWxzZSB9OwogICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5k
ZXggZmE5OWE2MGQ2YTI3OGRkOWQ4MmZmYmU5ZWUyOGE3NzEzNmQzMjAxNS4uZGY5OWQ1NWUwZTEw
ZjNiZWUyNzg0ZmJjYTY1YTlkMDQwZTU1YjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC00OTIsNyArNDkyLDcgQEAgSFRN
TFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIoY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmIG9wdGlvbnMsIGNvbnN0IFUKIHsKIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OmFw
cGVuZFRvRW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQordm9pZCBIVE1MUHJlbG9h
ZFNjYW5uZXI6OmFwcGVuZFRvRW5kKGNvbnN0IFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiB7CiAgICAgbV9zb3VyY2UuYXBwZW5kKHNvdXJjZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCmluZGV4IDM5YzcwNDhjYjE4ZTI0ZTRm
ZWMzYWZlNjJiNGQ5ZjU3NWNjMGYzNDguLjNjY2Y5YmRkYmNiZTlhY2I0ZmI0Nzg2M2Q2OTE2MDMy
M2M3ZWZmMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVs
b2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2Fk
U2Nhbm5lci5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NQcmVsb2FkU2Nhbm5l
ci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04NiwxMiArODYsMTIgQEAgY2xhc3MgSFRNTFByZWxvYWRTY2FubmVy
IHsKIHB1YmxpYzoKICAgICBIVE1MUHJlbG9hZFNjYW5uZXIoY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IDEu
MCk7CiAKLSAgICB2b2lkIGFwcGVuZFRvRW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOworICAg
IHZvaWQgYXBwZW5kVG9FbmQoY29uc3QgUEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKICAgICB2b2lk
IHNjYW4oSFRNTFJlc291cmNlUHJlbG9hZGVyJiwgRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToKICAg
ICBUb2tlblByZWxvYWRTY2FubmVyIG1fc2Nhbm5lcjsKLSAgICBTZWdtZW50ZWRTdHJpbmcgbV9z
b3VyY2U7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9zb3VyY2U7CiAgICAgSFRNTFRva2Vu
aXplciBtX3Rva2VuaXplcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTb3VyY2VUcmFja2VyLmNwcAppbmRleCAyMmRiYTkwYTU4MjBlNmQ3YTFmNzNmNTY5YmFk
NzMwMjYwMTM4MDIzLi40YTc1NTFmNDFlZmRiNjJjMDAxM2MxNWVmNzg3OTJhNWJmMmVhZDQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3Bw
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBIVE1MU291
cmNlVHJhY2tlcjo6c3RhcnRUb2tlbihTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRJbnB1dCwgSFRN
TFRva2VuaXplciYgdG9rZW5pemVyKQordm9pZCBIVE1MU291cmNlVHJhY2tlcjo6c3RhcnRUb2tl
bihQQUw6OlNlZ21lbnRlZFN0cmluZyYgY3VycmVudElucHV0LCBIVE1MVG9rZW5pemVyJiB0b2tl
bml6ZXIpCiB7CiAgICAgaWYgKCFtX3N0YXJ0ZWQpIHsKICAgICAgICAgaWYgKHRva2VuaXplci5u
dW1iZXJPZkJ1ZmZlcmVkQ2hhcmFjdGVycygpKQpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIEhUTUxT
b3VyY2VUcmFja2VyOjpzdGFydFRva2VuKFNlZ21lbnRlZFN0cmluZyYgY3VycmVudElucHV0LCBI
VE1MVG9rZW5pemVyJgogICAgIHRva2VuaXplci5zZXRUb2tlbkF0dHJpYnV0ZUJhc2VPZmZzZXQo
bV90b2tlblN0YXJ0KTsKIH0KIAotdm9pZCBIVE1MU291cmNlVHJhY2tlcjo6ZW5kVG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiBjdXJyZW50SW5wdXQsIEhUTUxUb2tlbml6ZXImIHRva2VuaXplcikKK3Zv
aWQgSFRNTFNvdXJjZVRyYWNrZXI6OmVuZFRva2VuKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBjdXJy
ZW50SW5wdXQsIEhUTUxUb2tlbml6ZXImIHRva2VuaXplcikKIHsKICAgICBBU1NFUlQobV9zdGFy
dGVkKTsKICAgICBtX3N0YXJ0ZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU291cmNlVHJhY2tlci5oCmluZGV4IDNhMjRjZjBmYzYxMDdkZTJmNTgxMTRiNjc2
YjYzMmJlNTYxNzkxYWYuLmM2NzVlNTAzMDBkNGEwNzY4MDEwNDFhYmQyODdiMTliNjM4ZTQzY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuaApA
QCAtMjYsNyArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNlZ21lbnRlZFN0
cmluZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM4LDggKzM4LDggQEAgY2xhc3MgSFRNTFNvdXJjZVRyYWNrZXIg
ewogcHVibGljOgogICAgIEhUTUxTb3VyY2VUcmFja2VyKCkgPSBkZWZhdWx0OwogCi0gICAgdm9p
ZCBzdGFydFRva2VuKFNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKLSAgICB2b2lk
IGVuZFRva2VuKFNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKKyAgICB2b2lkIHN0
YXJ0VG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmLCBIVE1MVG9rZW5pemVyJik7CisgICAgdm9p
ZCBlbmRUb2tlbihQQUw6OlNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKIAogICAg
IFN0cmluZyBzb3VyY2UoY29uc3QgSFRNTFRva2VuJik7CiAgICAgU3RyaW5nIHNvdXJjZShjb25z
dCBIVE1MVG9rZW4mLCB1bnNpZ25lZCBhdHRyaWJ1dGVTdGFydCwgdW5zaWduZWQgYXR0cmlidXRl
RW5kKTsKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Rva2VuU3Rh
cnQ7CiAgICAgdW5zaWduZWQgbV90b2tlbkVuZDsKIAotICAgIFNlZ21lbnRlZFN0cmluZyBtX3By
ZXZpb3VzU291cmNlOwotICAgIFNlZ21lbnRlZFN0cmluZyBtX2N1cnJlbnRTb3VyY2U7CisgICAg
UEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9wcmV2aW91c1NvdXJjZTsKKyAgICBQQUw6OlNlZ21lbnRl
ZFN0cmluZyBtX2N1cnJlbnRTb3VyY2U7CiAKICAgICBTdHJpbmcgbV9jYWNoZWRTb3VyY2VGb3JU
b2tlbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9r
ZW5pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3Bw
CmluZGV4IGQzZWJhNTE0NDVmMzJiNWYzNjBhMTI4NjRhZTcwMTRlZTY5N2VhMDguLmU3MmVhNTM5
NTFhMzBlMDY5YjM2YzA3NTVhMjg5MWMwM2NhMDQ4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIEhUTUxUb2tlbml6
ZXI6OkhUTUxUb2tlbml6ZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCiAKIGlu
bGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKFVDaGFyIGNoYXJh
Y3RlcikKIHsKLSAgICBBU1NFUlQoY2hhcmFjdGVyICE9IGtFbmRPZkZpbGVNYXJrZXIpOworICAg
IEFTU0VSVChjaGFyYWN0ZXIgIT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKTsKICAgICBBU1NFUlQo
aXNBU0NJSShjaGFyYWN0ZXIpKTsKICAgICBMQ2hhciBuYXJyb3dlZENoYXJhY3RlciA9IGNoYXJh
Y3RlcjsKICAgICBtX3Rva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKG5hcnJvd2VkQ2hhcmFjdGVyKTsK
QEAgLTg3LDExICs4NywxMSBAQCBpbmxpbmUgdm9pZCBIVE1MVG9rZW5pemVyOjpidWZmZXJBU0NJ
SUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCiAKIGlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6
OmJ1ZmZlckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCiB7Ci0gICAgQVNTRVJUKGNoYXJhY3Rl
ciAhPSBrRW5kT2ZGaWxlTWFya2VyKTsKKyAgICBBU1NFUlQoY2hhcmFjdGVyICE9IFBBTDo6a0Vu
ZE9mRmlsZU1hcmtlcik7CiAgICAgbV90b2tlbi5hcHBlbmRUb0NoYXJhY3RlcihjaGFyYWN0ZXIp
OwogfQogCi1pbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjplbWl0QW5kUmVzdW1lSW5EYXRhU3Rh
dGUoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCitpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjpl
bWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsK
ICAgICBzYXZlRW5kVGFnTmFtZUlmTmVlZGVkKCk7CiAgICAgbV9zdGF0ZSA9IERhdGFTdGF0ZTsK
QEAgLTEwNiw3ICsxMDYsNyBAQCBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjplbWl0QW5kUmVj
b25zdW1lSW5EYXRhU3RhdGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBI
VE1MVG9rZW5pemVyOjplbWl0RW5kT2ZGaWxlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQoraW5s
aW5lIGJvb2wgSFRNTFRva2VuaXplcjo6ZW1pdEVuZE9mRmlsZShQQUw6OlNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogewogICAgIG1fc3RhdGUgPSBEYXRhU3RhdGU7CiAgICAgaWYgKGhhdmVCdWZm
ZXJlZENoYXJhY3RlclRva2VuKCkpCkBAIC0xMjksNyArMTI5LDcgQEAgaW5saW5lIGJvb2wgSFRN
TFRva2VuaXplcjo6aGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSBjb25zdAogICAgIHJldHVy
biBtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNoYXJhY3RlcjsKIH0KIAotaW5saW5lIGJv
b2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
K2lubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoUEFMOjpTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKIHsKICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsK
ICAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpmbHVzaEJ1ZmZlcmVkRW5kVGFnKCkKICAgICBtX3RlbXBvcmFyeUJ1
ZmZlci5jbGVhcigpOwogfQogCi1ib29sIEhUTUxUb2tlbml6ZXI6OmNvbW1pdFRvUGFydGlhbEVu
ZFRhZyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVUNoYXIgY2hhcmFjdGVyLCBTdGF0ZSBzdGF0
ZSkKK2Jvb2wgSFRNTFRva2VuaXplcjo6Y29tbWl0VG9QYXJ0aWFsRW5kVGFnKFBBTDo6U2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIFVDaGFyIGNoYXJhY3RlciwgU3RhdGUgc3RhdGUpCiB7CiAgICAg
QVNTRVJUKHNvdXJjZS5jdXJyZW50Q2hhcmFjdGVyKCkgPT0gY2hhcmFjdGVyKTsKICAgICBhcHBl
bmRUb1RlbXBvcmFyeUJ1ZmZlcihjaGFyYWN0ZXIpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIGJvb2wg
SFRNTFRva2VuaXplcjo6Y29tbWl0VG9QYXJ0aWFsRW5kVGFnKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBVQ2hhciBjaGFyYWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEhUTUxUb2tl
bml6ZXI6OmNvbW1pdFRvQ29tcGxldGVFbmRUYWcoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiti
b29sIEhUTUxUb2tlbml6ZXI6OmNvbW1pdFRvQ29tcGxldGVFbmRUYWcoUEFMOjpTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKIHsKICAgICBBU1NFUlQoc291cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKSA9
PSAnPicpOwogICAgIGFwcGVuZFRvVGVtcG9yYXJ5QnVmZmVyKCc+Jyk7CkBAIC0xODksNyArMTg5
LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpjb21taXRUb0NvbXBsZXRlRW5kVGFnKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxUb2tlbml6
ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKK2Jvb2wgSFRNTFRva2Vu
aXplcjo6cHJvY2Vzc1Rva2VuKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAg
aWYgKCFtX2J1ZmZlcmVkRW5kVGFnTmFtZS5pc0VtcHR5KCkgJiYgIWluRW5kVGFnQnVmZmVyaW5n
U3RhdGUoKSkgewogICAgICAgICAvLyBXZSBhcmUgYmFjayBoZXJlIGFmdGVyIGVtaXR0aW5nIGEg
Y2hhcmFjdGVyIHRva2VuIHRoYXQgY2FtZSBqdXN0IGJlZm9yZSBhbiBlbmQgdGFnLgpAQCAtMjE3
LDcgKzIxNyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogICAgICAgICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKHRy
dWUpOwogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFRhZ09wZW5TdGF0
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7CiAgICAgICAgIGJ1ZmZlckNoYXJh
Y3RlcihjaGFyYWN0ZXIpOwogICAgICAgICBBRFZBTkNFX1RPKERhdGFTdGF0ZSk7CkBAIC0yMzQs
NyArMjM0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hh
cmFjdGVyUmVmZXJlbmNlSW5SQ0RBVEFTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
JzwnKQogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFJDREFUQUxlc3NU
aGFuU2lnblN0YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICBidWZmZXJDaGFyYWN0ZXIo
Y2hhcmFjdGVyKTsKICAgICAgICAgQURWQU5DRV9UTyhSQ0RBVEFTdGF0ZSk7CkBAIC0yNDksNyAr
MjQ5LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUoUkFXVEVYVFN0YXRlKQogICAgICAgICBpZiAoY2hh
cmFjdGVyID09ICc8JykKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhS
QVdURVhUTGVzc1RoYW5TaWduU3RhdGUpOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRP
ZkZpbGVNYXJrZXIpCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFy
a2VyKQogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIGJ1ZmZl
ckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICBBRFZBTkNFX1RPKFJBV1RFWFRTdGF0ZSk7
CkBAIC0yNTgsMTQgKzI1OCwxNCBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShTY3JpcHREYXRhU3RhdGUp
CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJzwnKQogICAgICAgICAgICAgQURWQU5DRV9QQVNU
X05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFMZXNzVGhhblNpZ25TdGF0ZSk7Ci0gICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpCiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0
YXRlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIEFEVkFO
Q0VfVE8oU2NyaXB0RGF0YVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RB
VEUoUExBSU5URVhUU3RhdGUpCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1h
cmtlcikKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpCiAg
ICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFj
dGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIEFEVkFOQ0VfVE8oUExBSU5URVhUU3RhdGUpOwpAQCAt
MzAyLDcgKzMwMiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAg
QURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPCcpOwogICAgICAgICAgICAg
YnVmZmVyQVNDSUlDaGFyYWN0ZXIoJy8nKTsKQEAgLTMyMSw3ICszMjEsNyBAQCBib29sIEhUTUxU
b2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAg
ICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgaWYg
KG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiBjaGFyYWN0ZXIgPT0gJzwnKQog
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwotICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC01
MTAsNyArNTEwLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPCcp
CiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oU2NyaXB0RGF0YUVzY2Fw
ZWRMZXNzVGhhblNpZ25TdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmls
ZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtl
cikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lO
KERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTUyNSw3ICs1MjUsNyBAQCBib29sIEhUTUxUb2tl
bml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgfQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc8JykKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9O
T05fTkVXTElORV9UTyhTY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAt
NTQ0LDcgKzU0NCw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoJz4nKTsK
ICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhU3RhdGUp
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikg
eworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0
ZSk7CiAgICAgICAgIH0KQEAgLTYzNSw3ICs2MzUsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnBy
b2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIGJ1ZmZlckFT
Q0lJQ2hhcmFjdGVyKCc8Jyk7CiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVf
VE8oU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZSk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAg
fQpAQCAtNjUyLDcgKzY1Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIo
JzwnKTsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRh
RG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAg
ICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC02NzMsNyAr
NjczLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPicpOwogICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAg
ICAgICAgfQpAQCAtNzE1LDcgKzcxNSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rv
a2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRS
ZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICBpZiAobV9vcHRpb25zLnVzZVByZUhU
TUw1UGFyc2VyUXVpcmtzICYmIGNoYXJhY3RlciA9PSAnPCcpCiAgICAgICAgICAgICByZXR1cm4g
ZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
a0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9m
RmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVD
T05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTczNyw3ICs3MzcsNyBAQCBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAg
ICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiBjaGFyYWN0ZXIgPT0g
JzwnKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9
CkBAIC03NTgsNyArNzU4LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUlu
RGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIGlmIChtX29wdGlvbnMudXNlUHJlSFRNTDVQYXJz
ZXJRdWlya3MgJiYgY2hhcmFjdGVyID09ICc8JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5k
UmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZG
aWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFy
a2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVf
SU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAtNzgyLDcgKzc4Miw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFT
dGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9m
RmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1h
cmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1F
X0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTgwMSw3ICs4MDEsNyBAQCBib29sIEhUTUxU
b2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAg
ICAgIG1fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnIic7CiAgICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1
ZVN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVN
YXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uZW5kQXR0
cmlidXRlKHNvdXJjZS5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKICAgICAgICAgICAg
IFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwpAQCAtODE5LDcgKzgxOSw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgbV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcJyc7CiAgICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1
ZVN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVN
YXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uZW5kQXR0
cmlidXRlKHNvdXJjZS5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKICAgICAgICAgICAg
IFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwpAQCAtODQxLDcgKzg0MSw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgbV90b2tlbi5lbmRBdHRyaWJ1dGUoc291cmNlLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
KCkpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2Up
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikg
eworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5lbmRBdHRyaWJ1dGUo
c291cmNlLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOwogICAgICAgICAgICAgUkVDT05T
VU1FX0lOKERhdGFTdGF0ZSk7CkBAIC04ODYsNyArODg2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVy
Ojpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1
cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIGlmIChtX29wdGlv
bnMudXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgY2hhcmFjdGVyID09ICc8JykKICAgICAgICAg
ICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKLSAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
UEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAg
ICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAtODk5LDcgKzg5
OSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRTZWxmQ2xvc2luZygpOwogICAgICAgICAg
ICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VF
cnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0K
QEAgLTkxNSw3ICs5MTUsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShDb250aW51ZUJvZ3VzQ29tbWVu
dFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+JykKICAgICAgICAgICAgIHJldHVy
biBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0Vu
ZE9mRmlsZU1hcmtlcikKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRh
U3RhdGUoKTsKICAgICAgICAgbV90b2tlbi5hcHBlbmRUb0NvbW1lbnQoY2hhcmFjdGVyKTsKICAg
ICAgICAgQURWQU5DRV9UTyhDb250aW51ZUJvZ3VzQ29tbWVudFN0YXRlKTsKQEAgLTkyNCwyMyAr
OTI0LDIzIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgIEJFR0lOX1NUQVRFKE1hcmt1cERlY2xhcmF0aW9uT3BlblN0YXRlKQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykgewogICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBzb3VyY2UuYWR2YW5jZVBhc3QoIi0tIik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNl
Z21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFM
OjpTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKSB7CiAgICAgICAgICAgICAgICAgbV90b2tlbi5i
ZWdpbkNvbW1lbnQoKTsKICAgICAgICAgICAgICAgICBTV0lUQ0hfVE8oQ29tbWVudFN0YXJ0U3Rh
dGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRT
dHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBB
TDo6U2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAg
IFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyLCAn
ZCcpKSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5hZHZhbmNlUGFzdExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSgiZG9jdHlwZSIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQ
QUw6OlNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAgICAgICAgICAgU1dJVENIX1RP
KERPQ1RZUEVTdGF0ZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmlu
Zzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpT
ZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgUkVU
VVJOX0lOX0NVUlJFTlRfU1RBVEUoaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09ICdbJyAmJiBzaG91bGRBbGxvd0NEQVRBKCkpIHsK
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLmFkdmFuY2VQYXN0KCJbQ0RBVEFbIik7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkK
ICAgICAgICAgICAgICAgICBTV0lUQ0hfVE8oQ0RBVEFTZWN0aW9uU3RhdGUpOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hD
aGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKGhhdmVC
dWZmZXJlZENoYXJhY3RlclRva2VuKCkpOwogICAgICAgICB9CiAgICAgICAgIHBhcnNlRXJyb3Io
KTsKQEAgLTk1NCw3ICs5NTQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3Rh
dGUoKTsKICAgICAgICAgfQpAQCAtOTY5LDcgKzk2OSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcGFyc2VF
cnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3Vy
Y2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtl
cikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewog
ICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNv
bnN1bWVJbkRhdGFTdGF0ZSgpOwogICAgICAgICB9CkBAIC05ODEsNyArOTgxLDcgQEAgYm9vbCBI
VE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAg
QkVHSU5fU1RBVEUoQ29tbWVudFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykK
ICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50RW5kRGFzaFN0
YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0
YVN0YXRlKCk7CiAgICAgICAgIH0KQEAgLTk5Miw3ICs5OTIsNyBAQCBib29sIEhUTUxUb2tlbml6
ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFU
RShDb21tZW50RW5kRGFzaFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykKICAg
ICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50RW5kU3RhdGUpOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUo
KTsKICAgICAgICAgfQpAQCAtMTAxMyw3ICsxMDEzLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2Vu
LmFwcGVuZFRvQ29tbWVudCgnLScpOwogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdM
SU5FX1RPKENvbW1lbnRFbmRTdGF0ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjpr
RW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAg
ICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CiAgICAgICAgIH0KQEAgLTEw
MzMsNyArMTAzMyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4n
KQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUo
KTsKICAgICAgICAgfQpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUoRE9D
VFlQRVN0YXRlKQogICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNoYXJhY3Rlcikp
CiAgICAgICAgICAgICBBRFZBTkNFX1RPKEJlZm9yZURPQ1RZUEVOYW1lU3RhdGUpOwotICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIG1fdG9rZW4uYmVnaW5ET0NUWVBFKCk7CiAgICAgICAgICAgICBtX3Rv
a2VuLnNldEZvcmNlUXVpcmtzKCk7CkBAIC0xMDY2LDcgKzEwNjYsNyBAQCBib29sIEhUTUxUb2tl
bml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAg
IG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVz
dW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtF
bmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAg
IG1fdG9rZW4uYmVnaW5ET0NUWVBFKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVp
cmtzKCk7CkBAIC0xMDgxLDcgKzEwODEsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NU
b2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0
ZXJET0NUWVBFTmFtZVN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPicpCiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7Ci0gICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFj
dGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigp
OwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0
dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTA5NSwyMiArMTA5NSwyMiBA
QCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSkKICAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0ZXJET0NUWVBFTmFtZVN0YXRlKTsKICAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSAnPicpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3Vt
ZUluRGF0YVN0YXRlKHNvdXJjZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmls
ZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtl
cikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRG
b3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFT
dGF0ZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KGNoYXJhY3RlciwgJ3AnKSkgewogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UuYWR2
YW5jZVBhc3RMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoInB1YmxpYyIpOwotICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQorICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBQQUw6OlNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAgICAgICAg
ICAgU1dJVENIX1RPKEFmdGVyRE9DVFlQRVB1YmxpY0tleXdvcmRTdGF0ZSk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENo
YXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgUkVUVVJOX0lOX0NVUlJFTlRfU1RBVEUoaGF2ZUJ1
ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbChjaGFyYWN0ZXIsICdzJykpIHsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gc291cmNlLmFkdmFuY2VQYXN0TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCJzeXN0ZW0iKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQog
ICAgICAgICAgICAgICAgIFNXSVRDSF9UTyhBZnRlckRPQ1RZUEVTeXN0ZW1LZXl3b3JkU3RhdGUp
OwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENo
YXJhY3RlcnMpCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVkU3RyaW5n
OjpOb3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5U
X1NUQVRFKGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCkpOwogICAgICAgICB9CiAgICAgICAg
IHBhcnNlRXJyb3IoKTsKQEAgLTExMzYsNyArMTEzNiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tl
bi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRh
dGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmls
ZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tl
bi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJ
bkRhdGFTdGF0ZSgpOwpAQCAtMTE2Miw3ICsxMTYyLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2Vu
LnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0
YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5k
T2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxl
TWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2Vu
LnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUlu
RGF0YVN0YXRlKCk7CkBAIC0xMTgwLDcgKzExODAsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnBy
b2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4u
c2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRh
U3RhdGUoc291cmNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRP
ZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVN
YXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4u
c2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5E
YXRhU3RhdGUoKTsKQEAgLTExOTcsNyArMTE5Nyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJv
Y2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5z
ZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFT
dGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9m
RmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1h
cmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5z
ZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRh
dGFTdGF0ZSgpOwpAQCAtMTIyMSw3ICsxMjIxLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9j
ZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLnNl
dFN5c3RlbUlkZW50aWZpZXJUb0VtcHR5U3RyaW5nKCk7CiAgICAgICAgICAgICBBRFZBTkNFX1BB
U1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVp
cmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7
CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uc2V0U3lzdGVtSWRl
bnRpZmllclRvRW1wdHlTdHJpbmcoKTsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVX
TElORV9UTyhET0NUWVBFU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKTsKICAgICAg
ICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAg
ICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEyNzIs
NyArMTI3Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAg
cGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTI5OCw3
ICsxMjk4LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CkBAIC0xMzE2LDcg
KzEzMTYsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEzMzMsNyAr
MTMzMyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAg
ICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBp
ZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFy
c2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAg
ICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTM0Nyw3ICsx
MzQ3LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgICAgICAgICBBRFZBTkNFX1RPKEFmdGVyRE9DVFlQRVN5c3RlbUlkZW50
aWZpZXJTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKQogICAgICAgICAgICAg
cmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwotICAgICAgICBpZiAoY2hh
cmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQ
QUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAg
ICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0
QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEzNTksNyArMTM1OSw3IEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgIEJF
R0lOX1NUQVRFKEJvZ3VzRE9DVFlQRVN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+
JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsK
LSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgICAgIHJldHVybiBl
bWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAgICAgICAgQURWQU5DRV9UTyhCb2d1c0RP
Q1RZUEVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIGJvb2wg
SFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAg
IEJFR0lOX1NUQVRFKENEQVRBU2VjdGlvblN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09
ICddJykKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDREFUQVNlY3Rp
b25SaWdodFNxdWFyZUJyYWNrZXRTdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVN
YXJrZXIpCiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVm
ZmVyQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIEFEVkFOQ0VfVE8oQ0RBVEFTZWN0aW9u
U3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2Vu
aXplci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oCmluZGV4
IDVkODE5MWY0NDg5NTQ0MjE1OGNmN2UyNTRhM2ExYzU2ODdhODA0NGMuLmM2NzJlODIyNGZkMzRk
NTM3N2YwZjU5ZWQzNGY4ZDkzOTkwOGVkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVG9rZW5pemVyLmgKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiSFRNTFRva2Vu
LmgiCiAjaW5jbHVkZSAiSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaCIKIAotbmFtZXNwYWNlIFdl
YkNvcmUgewotCituYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MVG9rZW5pemVyIHsKIHB1YmxpYzoKQEAg
LTQwLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgLy8gSWYgd2UgY2FuJ3QgcGFyc2UgYSB3aG9s
ZSB0b2tlbiwgdGhpcyByZXR1cm5zIG51bGwuCiAgICAgY2xhc3MgVG9rZW5QdHI7Ci0gICAgVG9r
ZW5QdHIgbmV4dFRva2VuKFNlZ21lbnRlZFN0cmluZyYpOworICAgIFRva2VuUHRyIG5leHRUb2tl
bihQQUw6OlNlZ21lbnRlZFN0cmluZyYpOwogCiAgICAgLy8gVXNlZCBieSBIVE1MU291cmNlVHJh
Y2tlci4KICAgICB2b2lkIHNldFRva2VuQXR0cmlidXRlQmFzZU9mZnNldCh1bnNpZ25lZCk7CkBA
IC0xNTUsMjIgKzE1NywyMiBAQCBwcml2YXRlOgogICAgICAgICBDREFUQVNlY3Rpb25Eb3VibGVS
aWdodFNxdWFyZUJyYWNrZXRTdGF0ZSwKICAgICB9OwogCi0gICAgYm9vbCBwcm9jZXNzVG9rZW4o
U2VnbWVudGVkU3RyaW5nJik7Ci0gICAgYm9vbCBwcm9jZXNzRW50aXR5KFNlZ21lbnRlZFN0cmlu
ZyYpOworICAgIGJvb2wgcHJvY2Vzc1Rva2VuKFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CisgICAg
Ym9vbCBwcm9jZXNzRW50aXR5KFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CiAKICAgICB2b2lkIHBh
cnNlRXJyb3IoKTsKIAogICAgIHZvaWQgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoVUNoYXIpOwogICAg
IHZvaWQgYnVmZmVyQ2hhcmFjdGVyKFVDaGFyKTsKIAotICAgIGJvb2wgZW1pdEFuZFJlc3VtZUlu
RGF0YVN0YXRlKFNlZ21lbnRlZFN0cmluZyYpOworICAgIGJvb2wgZW1pdEFuZFJlc3VtZUluRGF0
YVN0YXRlKFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CiAgICAgYm9vbCBlbWl0QW5kUmVjb25zdW1l
SW5EYXRhU3RhdGUoKTsKLSAgICBib29sIGVtaXRFbmRPZkZpbGUoU2VnbWVudGVkU3RyaW5nJik7
CisgICAgYm9vbCBlbWl0RW5kT2ZGaWxlKFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CiAKICAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB3ZSB3aWwgZW1pdCBhIGNoYXJhY3RlciB0b2tlbiBiZWZvcmUgZGVh
bGluZyB3aXRoIHRoZSBidWZmZXJlZCBlbmQgdGFnLgogICAgIHZvaWQgZmx1c2hCdWZmZXJlZEVu
ZFRhZygpOwotICAgIGJvb2wgY29tbWl0VG9QYXJ0aWFsRW5kVGFnKFNlZ21lbnRlZFN0cmluZyYs
IFVDaGFyLCBTdGF0ZSk7Ci0gICAgYm9vbCBjb21taXRUb0NvbXBsZXRlRW5kVGFnKFNlZ21lbnRl
ZFN0cmluZyYpOworICAgIGJvb2wgY29tbWl0VG9QYXJ0aWFsRW5kVGFnKFBBTDo6U2VnbWVudGVk
U3RyaW5nJiwgVUNoYXIsIFN0YXRlKTsKKyAgICBib29sIGNvbW1pdFRvQ29tcGxldGVFbmRUYWco
UEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKIAogICAgIHZvaWQgYXBwZW5kVG9UZW1wb3JhcnlCdWZm
ZXIoVUNoYXIpOwogICAgIGJvb2wgdGVtcG9yYXJ5QnVmZmVySXMoY29uc3QgY2hhciopOwpAQCAt
Mjc5LDcgKzI4MSw3IEBAIGlubGluZSBIVE1MVG9rZW4qIEhUTUxUb2tlbml6ZXI6OlRva2VuUHRy
OjpvcGVyYXRvci0+KCkgY29uc3QKICAgICByZXR1cm4gbV90b2tlbjsKIH0KIAotaW5saW5lIEhU
TUxUb2tlbml6ZXI6OlRva2VuUHRyIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKK2lubGluZSBIVE1MVG9rZW5pemVyOjpUb2tlblB0ciBIVE1MVG9rZW5p
emVyOjpuZXh0VG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICByZXR1
cm4gVG9rZW5QdHIocHJvY2Vzc1Rva2VuKHNvdXJjZSkgPyAmbV90b2tlbiA6IG51bGxwdHIpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVw
cm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0lucHV0U3RyZWFtUHJlcHJv
Y2Vzc29yLmgKaW5kZXggMzYxZjY1MzAxNWQxYWNhMzdhY2U3ZjdlMjJhNmZmMmRjZTkwOGY2Yi4u
MTAwNjdhZThkN2JjZTFmMGMyNzQ4NjI4ZWNmZDZhNTUxNWVhM2E4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9JbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5oCkBAIC0y
Nyw3ICsyNyw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCisjaW5jbHVkZSA8cGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYs
NyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHdlIHN1Y2NlZWRlZCBp
biBwZWVraW5nIGF0IHRoZSBuZXh0IGNoYXJhY3Rlci4KICAgICAvLyBUaGUgb25seSB3YXkgd2Ug
Y2FuIGZhaWwgdG8gcGVlayBpcyBpZiB0aGVyZSBhcmUgbm8gbW9yZQogICAgIC8vIGNoYXJhY3Rl
cnMgaW4gfHNvdXJjZXwgKGFmdGVyIGNvbGxhcHNpbmcgXHJcbiwgZXRjKS4KLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgcGVlayhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENo
YXJhY3RlcnMgPSBmYWxzZSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGVlayhQQUw6OlNlZ21l
bnRlZFN0cmluZyYgc291cmNlLCBib29sIHNraXBOdWxsQ2hhcmFjdGVycyA9IGZhbHNlKQogICAg
IHsKICAgICAgICAgaWYgKFVOTElLRUxZKHNvdXJjZS5pc0VtcHR5KCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjcsMTkgKzY3LDE5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgY2hhcmFjdGVycyBpbiB8c291cmNlfCBh
ZnRlciBhZHZhbmNpbmcuCi0gICAgQUxXQVlTX0lOTElORSBib29sIGFkdmFuY2UoU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIGJvb2wgc2tpcE51bGxDaGFyYWN0ZXJzID0gZmFsc2UpCisgICAgQUxX
QVlTX0lOTElORSBib29sIGFkdmFuY2UoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9v
bCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIHNvdXJjZS5hZHZh
bmNlKCk7CiAgICAgICAgIHJldHVybiBwZWVrKHNvdXJjZSwgc2tpcE51bGxDaGFyYWN0ZXJzKTsK
ICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGFkdmFuY2VQYXN0Tm9uTmV3bGluZShTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgYWR2YW5jZVBhc3ROb25OZXdsaW5lKFBBTDo6U2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIGJvb2wgc2tpcE51bGxDaGFyYWN0ZXJzID0gZmFsc2UpCiAgICAgewog
ICAgICAgICBzb3VyY2UuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CiAgICAgICAgIHJldHVybiBw
ZWVrKHNvdXJjZSwgc2tpcE51bGxDaGFyYWN0ZXJzKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBwcm9jZXNzTmV4dElucHV0Q2hhcmFjdGVyKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBi
b29sIHNraXBOdWxsQ2hhcmFjdGVycykKKyAgICBib29sIHByb2Nlc3NOZXh0SW5wdXRDaGFyYWN0
ZXIoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMp
CiAgICAgewogICAgIFByb2Nlc3NBZ2FpbjoKICAgICAgICAgQVNTRVJUKG1fbmV4dElucHV0Q2hh
cmFjdGVyID09IHNvdXJjZS5jdXJyZW50Q2hhcmFjdGVyKCkpOwpAQCAtMTA5LDcgKzEwOSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyBib29s
IGlzQXRFbmRPZkZpbGUoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCisgICAgc3RhdGljIGJvb2wg
aXNBdEVuZE9mRmlsZShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHNvdXJjZS5pc0Nsb3NlZCgpICYmIHNvdXJjZS5sZW5ndGgoKSA9PSAxOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5jcHAKaW5kZXggMTM3NzE1Y2YzNjczZjI2MmFmNThkMjRhM2Q2NWZjZWRiZTJhODU3ZS4uODcy
NDdjZDgxZmU0YTM0MWI1ZTY4MzExMDVlYTA2ZmIxZGUwNjNkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTMyLDEyICsz
MiwxMiBAQAogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRGF0ZVRpbWVG
aWVsZEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZHNTdGF0ZS5oIgotI2luY2x1
ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCiAjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTG9jYWxl
LmgiCiAjaW5jbHVkZSAiU2hhZG93UHNldWRvSWRzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L0RhdGVUaW1lRm9ybWF0Lmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTQ3
LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKERhdGVUaW1lRWRpdEVsZW1lbnQpOwogCi1jbGFzcyBEYXRlVGltZUVkaXRC
dWlsZGVyIGZpbmFsIDogcHJpdmF0ZSBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKK2Ns
YXNzIERhdGVUaW1lRWRpdEJ1aWxkZXIgZmluYWwgOiBwcml2YXRlIFBBTDo6RGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0
QnVpbGRlcik7CiAKIHB1YmxpYzoKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIC8vIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zOgotICAgIHZv
aWQgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlLCBpbnQpOworICAgIHZvaWQg
dmlzaXRGaWVsZChQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCk7CiAgICAgdm9p
ZCB2aXNpdExpdGVyYWwoY29uc3QgU3RyaW5nJik7CiAKICAgICBEYXRlVGltZUVkaXRFbGVtZW50
JiBtX2VkaXRFbGVtZW50OwpAQCAtNzMsNTEgKzczLDUxIEBAIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OkRhdGVUaW1lRWRpdEJ1aWxkZXIoRGF0ZVRpbWVFZGl0RWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
RGF0CiBib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYgZm9ybWF0
U3RyaW5nKQogewogICAgIG1fZWRpdEVsZW1lbnQucmVzZXRGaWVsZHMoKTsKLSAgICByZXR1cm4g
RGF0ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1hdFN0cmluZywgKnRoaXMpOworICAgIHJldHVybiBQ
QUw6OkRhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0aGlzKTsKIH0KIAotdm9p
ZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGUgZmllbGRUeXBlLCBpbnQgY291bnQpCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0
RmllbGQoUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50IGNvdW50
KQogewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fZWRpdEVsZW1lbnQuZG9jdW1lbnQoKTsK
IAogICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlRGF5T2ZNb250aDogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlRGF5T2ZNb250aDogewogICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1l
RGF5RmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZy
YWN0aW9uYWxTZWNvbmQ6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUZyYWN0aW9uYWxTZWNvbmQ6IHsKICAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRl
VGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1l
bnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUhvdXIxMTogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSG91cjExOiB7CiAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIDAsIDExKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVIb3VyMTI6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIx
MjogewogICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50LCAxLCAxMikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjIz
OiB7CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6IHsKICAg
ICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMjMpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNDogeworICAg
IGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OiB7CiAgICAgICAgIG1f
ZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQsIG1fZWRpdEVsZW1lbnQsIDEsIDI0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNaW51dGU6IHsKKyAgICBjYXNlIFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZTogewogICAgICAgICBtX2VkaXRFbGVt
ZW50LmFkZEZpZWxkKERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQs
IG1fZWRpdEVsZW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoOgotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZU1vbnRoU3RhbmRBbG9uZTogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlTW9udGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVN
b250aFN0YW5kQWxvbmU6IHsKICAgICAgICAgY29uc3RleHByIGludCBjb3VudEZvckFiYnJldmlh
dGVkTW9udGggPSAzOwogICAgICAgICBjb25zdGV4cHIgaW50IGNvdW50Rm9yRnVsbE1vbnRoID0g
NDsKICAgICAgICAgY29uc3RleHByIGludCBjb3VudEZvck5hcnJvd01vbnRoID0gNTsKQEAgLTEy
NSwxMiArMTI1LDEyIEBAIHZvaWQgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZChEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50IGNvCiAgICAgICAgIHN3aXRjaCAo
Y291bnQpIHsKICAgICAgICAgY2FzZSBjb3VudEZvck5hcnJvd01vbnRoOgogICAgICAgICBjYXNl
IGNvdW50Rm9yQWJicmV2aWF0ZWRNb250aDogewotICAgICAgICAgICAgYXV0byBmaWVsZCA9IERh
dGVUaW1lU3ltYm9saWNNb250aEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRF
bGVtZW50LCBmaWVsZFR5cGUgPT0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoID8gbV9w
YXJhbWV0ZXJzLmxvY2FsZS5zaG9ydE1vbnRoTGFiZWxzKCkgOiBtX3BhcmFtZXRlcnMubG9jYWxl
LnNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkpOworICAgICAgICAgICAgYXV0byBmaWVsZCA9
IERhdGVUaW1lU3ltYm9saWNNb250aEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2Vk
aXRFbGVtZW50LCBmaWVsZFR5cGUgPT0gUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9u
dGggPyBtX3BhcmFtZXRlcnMubG9jYWxlLnNob3J0TW9udGhMYWJlbHMoKSA6IG1fcGFyYW1ldGVy
cy5sb2NhbGUuc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKSk7CiAgICAgICAgICAgICBtX2Vk
aXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBjYXNlIGNvdW50Rm9yRnVsbE1vbnRoOiB7Ci0gICAgICAgICAgICBhdXRvIGZp
ZWxkID0gRGF0ZVRpbWVTeW1ib2xpY01vbnRoRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQs
IG1fZWRpdEVsZW1lbnQsIGZpZWxkVHlwZSA9PSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9u
dGggPyBtX3BhcmFtZXRlcnMubG9jYWxlLm1vbnRoTGFiZWxzKCkgOiBtX3BhcmFtZXRlcnMubG9j
YWxlLnN0YW5kQWxvbmVNb250aExhYmVscygpKTsKKyAgICAgICAgICAgIGF1dG8gZmllbGQgPSBE
YXRlVGltZVN5bWJvbGljTW9udGhGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0
RWxlbWVudCwgZmllbGRUeXBlID09IFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRo
ID8gbV9wYXJhbWV0ZXJzLmxvY2FsZS5tb250aExhYmVscygpIDogbV9wYXJhbWV0ZXJzLmxvY2Fs
ZS5zdGFuZEFsb25lTW9udGhMYWJlbHMoKSk7CiAgICAgICAgICAgICBtX2VkaXRFbGVtZW50LmFk
ZEZpZWxkKGZpZWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTQwLDIy
ICsxNDAsMjIgQEAgdm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQgY28KICAgICAgICAgfQogICAgIH0KIAot
ICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDogeworICAgIGNhc2UgUEFM
OjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9kOiB7CiAgICAgICAgIG1fZWRpdEVsZW1l
bnQuYWRkRmllbGQoRGF0ZVRpbWVNZXJpZGllbUZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
LCBtX2VkaXRFbGVtZW50LCBtX3BhcmFtZXRlcnMubG9jYWxlLnRpbWVBTVBNTGFiZWxzKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVNlY29uZDogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vj
b25kOiB7CiAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVTZWNvbmRGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCkpOwogCiAgICAgICAgIGlm
IChtX3BhcmFtZXRlcnMuc2hvdWxkSGF2ZU1pbGxpc2Vjb25kRmllbGQpIHsKICAgICAgICAgICAg
IHZpc2l0TGl0ZXJhbChtX3BhcmFtZXRlcnMubG9jYWxlLmxvY2FsaXplZERlY2ltYWxTZXBhcmF0
b3IoKSk7Ci0gICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVG
cmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgICAgIHZpc2l0RmllbGQoUEFMOjpEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZCwgMyk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVll
YXI6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXI6IHsKICAg
ICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZVllYXJGaWVsZEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAK
aW5kZXggYzMwNzcwN2YzYTcyNGQ2MjA4MDMzNjA4MmNjOGRlNTg3NWE3MGI5Zi4uNGZkNjI2YWZl
OGE3ZWUxZjkyNTBmZjBlZGE2ODc1ZGFmNWM2NDdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0xNjksMTIgKzE2OSwxMiBA
QCB2b2lkIFJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBhdXRvJiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAg
ICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKICAgICBt
dXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbGV4RGlyZWN0aW9u
OjpDb2x1bW4gOiBGbGV4RGlyZWN0aW9uOjpSb3cpOwotICAgIFRleHREaXJlY3Rpb24gb2xkVGV4
dERpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IG9sZFRleHREaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOwogICAgIGlmIChpc1ZlcnRp
Y2FsKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXb3JrIGFyb3VuZCByb3VuZGluZyBpc3N1ZXMgaW4g
UlRMIHZlcnRpY2FsIHNsaWRlcnMuIFdlIHdhbnQgdGhlbSB0bwogICAgICAgICAvLyByZW5kZXIg
aWRlbnRpY2FsbHkgdG8gTFRSIHZlcnRpY2FsIHNsaWRlcnMuIFdlIGNhbiByZW1vdmUgdGhpcyB3
b3JrIGFyb3VuZCB3aGVuCiAgICAgICAgIC8vIHN1YnBpeGVsIHJlbmRlcmluZyBpcyBlbmFibGVk
IG9uIGFsbCBwb3J0cy4KLSAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0RGlyZWN0aW9uKFRleHRE
aXJlY3Rpb246OkxUUik7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihQQUw6
OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgfQogCiAgICAgUmVuZGVyQm94KiB0aHVtYiA9IGlu
cHV0LnNsaWRlclRodW1iRWxlbWVudCgpID8gaW5wdXQuc2xpZGVyVGh1bWJFbGVtZW50KCktPnJl
bmRlckJveCgpIDogbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDViOWEyZDM5MjA0NzkxMGU3
OTUyZjNlNjMyOTJkNzdhOGY5ZmIxZmMuLjYxMTBmNDk2MzI3NmZjMTFhYjAzZmY1N2RkYzllOWRj
NjUyNGEzNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6b3B0aW9u
YWw8U3R5bGU6OkVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShjCiAgICAgbmV3U3R5bGUtPnNldEZsZXhHcm93KDEpOwogICAgIG5ld1N0eWxl
LT5zZXRNaW5XaWR0aChMZW5ndGggeyAwLCBMZW5ndGhUeXBlOjpGaXhlZCB9KTsgLy8gTmVlZGVk
IGZvciBjb3JyZWN0IHNocmlua2luZy4KICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShEaXNwbGF5
VHlwZTo6QmxvY2spOwotICAgIG5ld1N0eWxlLT5zZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbjo6
TFRSKTsKKyAgICBuZXdTdHlsZS0+c2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KTsKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBzaGFkb3cgRE9NIHRvIGJlIGVkaXRhYmxlLCBz
byB3ZSBzZXQgdGhpcyBibG9jayB0byByZWFkLW9ubHkgaW4gY2FzZSB0aGUgaW5wdXQgaXRzZWxm
IGlzIGVkaXRhYmxlLgogICAgIG5ld1N0eWxlLT5zZXRVc2VyTW9kaWZ5KFVzZXJNb2RpZnk6OlJl
YWRPbmx5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJl
ZExpbmVSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQnVmZmVyZWRMaW5lUmVh
ZGVyLmgKaW5kZXggOTMzNGFlNzNlZmU5YjMyOWE5OGZmZGZjODhkMjJlZTIyMGQ0NDVlNi4uNzkw
MTM1ZjM2YTdjZjJmNTIyNGY5NWIwMjY2NmU4NDY5YzY2NWU2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5oCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8
cGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoK
ICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV4dExpbmUoKTsKIAogcHJpdmF0ZToKLSAgICBT
ZWdtZW50ZWRTdHJpbmcgbV9idWZmZXI7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9idWZm
ZXI7CiAgICAgU3RyaW5nQnVpbGRlciBtX2xpbmVCdWZmZXI7CiAgICAgYm9vbCBtX2VuZE9mU3Ry
ZWFtIHsgZmFsc2UgfTsKICAgICBib29sIG1fbWF5YmVTa2lwTEYgeyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCmluZGV4IGFhNjE1N2Ni
YjNjZDIwZGFjZWNmYmMxYWY0OTY2MGM0NTI1NWUxOTcuLjQ1MDkzMTRhMDJhOTgwYWQyODBmODhk
MDg4OGZiNjc4YTRiZGFhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUVG9rZW5pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFRva2VuaXplci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgaW5saW5lIGJvb2wgZW1pdFRva2VuKFdl
YlZUVFRva2VuJiByZXN1bHRUb2tlbiwgY29uc3QgV2ViVlRUVG9rZW4mIHRva2VuKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBhZHZhbmNlQW5kRW1pdFRva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBXZWJWVFRUb2tlbiYgcmVzdWx0VG9rZW4sIGNvbnN0IFdlYlZUVFRv
a2VuJiB0b2tlbikKK2lubGluZSBib29sIGFkdmFuY2VBbmRFbWl0VG9rZW4oUEFMOjpTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSwgV2ViVlRUVG9rZW4mIHJlc3VsdFRva2VuLCBjb25zdCBXZWJWVFRU
b2tlbiYgdG9rZW4pCiB7CiAgICAgc291cmNlLmFkdmFuY2UoKTsKICAgICByZXR1cm4gZW1pdFRv
a2VuKHJlc3VsdFRva2VuLCB0b2tlbik7CkBAIC03OCw3ICs3OCw3IEBAIFdlYlZUVFRva2VuaXpl
cjo6V2ViVlRUVG9rZW5pemVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7CiAgICAgLy8gQXBwZW5k
IGFuIEVPRiBtYXJrZXIgYW5kIGNsb3NlIHRoZSBpbnB1dCAic3RyZWFtIi4KICAgICBBU1NFUlQo
IW1faW5wdXQuaXNDbG9zZWQoKSk7Ci0gICAgbV9pbnB1dC5hcHBlbmQoU3RyaW5nIHsgJmtFbmRP
ZkZpbGVNYXJrZXIsIDEgfSk7CisgICAgbV9pbnB1dC5hcHBlbmQoU3RyaW5nIHsgJlBBTDo6a0Vu
ZE9mRmlsZU1hcmtlciwgMSB9KTsKICAgICBtX2lucHV0LmNsb3NlKCk7CiB9CiAKQEAgLTg4LDcg
Kzg4LDcgQEAgYm9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihXZWJWVFRUb2tlbiYgdG9r
ZW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVDaGFyIGNoYXJhY3RlciA9IG1fcHJl
cHJvY2Vzc29yLm5leHRJbnB1dENoYXJhY3RlcigpOwotICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikgeworICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFy
a2VyKSB7CiAgICAgICAgIG1fcHJlcHJvY2Vzc29yLmFkdmFuY2UobV9pbnB1dCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTAsNyArMTEwLDcgQEAgRGF0YVN0YXRlOgogICAg
ICAgICAgICAgLy8gKE9uIHRoZSBuZXh0IGNhbGwgdG8gbmV4dFRva2VuIHdlIHdpbGwgc2VlICc8
JyBhZ2FpbiwgYnV0IHRha2UgdGhlIG90aGVyIGJyYW5jaCBpbiB0aGlzIGlmIGluc3RlYWQuKQog
ICAgICAgICAgICAgcmV0dXJuIGVtaXRUb2tlbih0b2tlbiwgV2ViVlRUVG9rZW46OlN0cmluZ1Rv
a2VuKHJlc3VsdC50b1N0cmluZygpKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNoYXJh
Y3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IFBB
TDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4o
bV9pbnB1dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpTdHJpbmdUb2tlbihyZXN1bHQudG9TdHJpbmco
KSkpOwogICAgIGVsc2UgewogICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7CkBAIC0x
NDMsNyArMTQzLDcgQEAgRXNjYXBlU3RhdGU6CiAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0g
JzwnKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIGVt
aXRUb2tlbih0b2tlbiwgV2ViVlRUVG9rZW46OlN0cmluZ1Rva2VuKHJlc3VsdC50b1N0cmluZygp
KSk7Ci0gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAg
IH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAg
ICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBhZHZhbmNlQW5kRW1pdFRv
a2VuKG1faW5wdXQsIHRva2VuLCBXZWJWVFRUb2tlbjo6U3RyaW5nVG9rZW4ocmVzdWx0LnRvU3Ry
aW5nKCkpKTsKICAgICB9IGVsc2UgewpAQCAtMTcwLDcgKzE3MCw3IEBAIFRhZ1N0YXRlOgogICAg
IH0gZWxzZSBpZiAoaXNBU0NJSURpZ2l0KGNoYXJhY3RlcikpIHsKICAgICAgICAgcmVzdWx0LmFw
cGVuZChjaGFyYWN0ZXIpOwogICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUaW1lc3RhbXBUYWdT
dGF0ZSk7Ci0gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJhY3RlciA9PSBr
RW5kT2ZGaWxlTWFya2VyKSB7CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNo
YXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgQVNTRVJUKHJlc3Vs
dC5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gYWR2YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0
LCB0b2tlbiwgV2ViVlRUVG9rZW46OlN0YXJ0VGFnKHJlc3VsdC50b1N0cmluZygpKSk7CiAgICAg
fSBlbHNlIHsKQEAgLTE4Myw3ICsxODMsNyBAQCBTdGFydFRhZ1N0YXRlOgogICAgICAgICBXRUJW
VFRfQURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7CiAgICAgZWxzZSBpZiAoY2hh
cmFjdGVyID09ICcuJykKICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdDbGFzc1N0
YXRlKTsKLSAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJhY3RlciA9PSBrRW5k
T2ZGaWxlTWFya2VyKQorICAgIGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVy
ID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0
VG9rZW4obV9pbnB1dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpTdGFydFRhZyhyZXN1bHQudG9TdHJp
bmcoKSkpOwogICAgIGVsc2UgewogICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7CkBA
IC0xOTksNyArMTk5LDcgQEAgU3RhcnRUYWdDbGFzc1N0YXRlOgogICAgICAgICBhZGROZXdDbGFz
cyhjbGFzc2VzLCBidWZmZXIpOwogICAgICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgICAgV0VC
VlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdDbGFzc1N0YXRlKTsKLSAgICB9IGVsc2UgaWYgKGNoYXJh
Y3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICB9IGVs
c2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1h
cmtlcikgewogICAgICAgICBhZGROZXdDbGFzcyhjbGFzc2VzLCBidWZmZXIpOwogICAgICAgICBi
dWZmZXIuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1
dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpTdGFydFRhZyhyZXN1bHQudG9TdHJpbmcoKSwgY2xhc3Nl
cy50b0F0b21TdHJpbmcoKSkpOwpAQCAtMjA5LDE5ICsyMDksMTkgQEAgU3RhcnRUYWdDbGFzc1N0
YXRlOgogICAgIH0KIAogU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGU6Ci0gICAgaWYgKGNoYXJhY3Rl
ciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpCisgICAgaWYgKGNoYXJh
Y3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1dCwgdG9rZW4sIFdlYlZUVFRva2Vu
OjpTdGFydFRhZyhyZXN1bHQudG9TdHJpbmcoKSwgY2xhc3Nlcy50b0F0b21TdHJpbmcoKSwgYnVm
ZmVyLnRvQXRvbVN0cmluZygpKSk7CiAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXIpOwogICAg
IFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKIAogRW5kVGFnU3Rh
dGU6Ci0gICAgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVN
YXJrZXIpCisgICAgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBBTDo6a0Vu
ZE9mRmlsZU1hcmtlcikKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1
dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpFbmRUYWcocmVzdWx0LnRvU3RyaW5nKCkpKTsKICAgICBy
ZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRW5kVGFnU3Rh
dGUpOwogCiBUaW1lc3RhbXBUYWdTdGF0ZToKLSAgICBpZiAoY2hhcmFjdGVyID09ICc+JyB8fCBj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKKyAgICBpZiAoY2hhcmFjdGVyID09ICc+JyB8
fCBjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKQogICAgICAgICByZXR1cm4gYWR2
YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0LCB0b2tlbiwgV2ViVlRUVG9rZW46OlRpbWVzdGFtcFRh
ZyhyZXN1bHQudG9TdHJpbmcoKSkpOwogICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyKTsKICAg
ICBXRUJWVFRfQURWQU5DRV9UTyhUaW1lc3RhbXBUYWdTdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuaAppbmRleCAxMDM3NjdlZTNiODFjNmY3YjVjMzBi
MTkzN2E1N2FkNDhiYTBiNzIzLi5kY2Q2YjhjODViMDZhYmFkN2QwZWM5MzVjMjFmYTQ1MjhkMTY4
YmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXpl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIG5ldmVyU2tpcE51bGxDaGFy
YWN0ZXJzKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKLSAgICBTZWdtZW50ZWRTdHJp
bmcgbV9pbnB1dDsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBtX2lucHV0OwogICAgIElucHV0
U3RyZWFtUHJlcHJvY2Vzc29yPFdlYlZUVFRva2VuaXplcj4gbV9wcmVwcm9jZXNzb3I7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggMjlhMDA2ZmMzMTRlM2QxMTkyNGY2
MGI4NzFiODJlMDYyOGI3MmViZi4uMWIxNWVjNTliN2EwY2VhOWI4MWM4MmUxMWRhNzMyYTJkY2Q3
MGQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMTA4Myw3ICsxMDgzLDcg
QEAgTGF5b3V0U2l6ZSBGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlv
bk9mZnNldChjb25zdCBCb3gmIGxheW91dEIKICAgICByZXR1cm4geyBsZWZ0UG9zaXRpb25PZmZz
ZXQsIHRvcFBvc2l0aW9uT2Zmc2V0IH07CiB9CiAKLWlubGluZSBzdGF0aWMgV3JpdGluZ01vZGUg
dXNlZFdyaXRpbmdNb2RlKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoraW5saW5lIHN0YXRpYyBQQUw6
OldyaXRpbmdNb2RlIHVzZWRXcml0aW5nTW9kZShjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXdyaXRpbmctbW9kZXMtNC8jbG9naWNhbC1k
aXJlY3Rpb24tbGF5b3V0CiAgICAgLy8gRmxvdy1yZWxhdGl2ZSBkaXJlY3Rpb25zIGFyZSBjYWxj
dWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrIG9mIHRoZSBib3guCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJl
YWtlci5jcHAKaW5kZXggOGU5NTViZjczMDI3MGNkNjVlZWI5M2JjZTkwM2I0NmMwNWIyYjY2My4u
MjBhOTQ0MDg4YTYwMTBiZGIwOTk5ZTFjNTM5ODAxNTJhOTY3NDc5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVu
dEJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0h5cGhl
bmF0aW9uLmg+CiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgogI2luY2x1ZGUgIklubGluZVRleHRJ
dGVtLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCkBAIC00NTAsNyArNDUwLDcg
QEAgc3RkOjpvcHRpb25hbDxJbmxpbmVDb250ZW50QnJlYWtlcjo6UGFydGlhbFJ1bj4gSW5saW5l
Q29udGVudEJyZWFrZXI6OnRyeUJyZWFraW4KICAgICAgICAgICAgIGF1dG8gaHlwaGVuV2lkdGgg
PSBJbmxpbmVMYXlvdXRVbml0IHsgZm9udENhc2NhZGUud2lkdGgoVGV4dFJ1biB7IFN0cmluZ1Zp
ZXcgeyBzdHlsZS5oeXBoZW5TdHJpbmcoKSB9IH0pIH07CiAgICAgICAgICAgICBpZiAoY2FuZGlk
YXRlVGV4dFJ1bi5pc092ZXJmbG93aW5nUnVuKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhdmFp
bGFibGVXaWR0aEV4Y2x1ZGluZ0h5cGhlbiA9IGF2YWlsYWJsZVdpZHRoIC0gaHlwaGVuV2lkdGg7
Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlwaGVuIDw9IDAg
fHwgIWVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24oYXZhaWxhYmxlV2lkdGhFeGNsdWRpbmdIeXBo
ZW4sIGZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlV2lkdGhFeGNsdWRpbmdIeXBoZW4gPD0gMCB8fCAhUEFMOjplbm91Z2hXaWR0aEZvckh5cGhl
bmF0aW9uKGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlwaGVuLCBmb250Q2FzY2FkZS5waXhlbFNp
emUoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAg
bGVmdFNpZGVMZW5ndGggPSBUZXh0VXRpbDo6YnJlYWtXb3JkKGlubGluZVRleHRJdGVtLCBmb250
Q2FzY2FkZSwgY2FuZGlkYXRlUnVuLmxvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlV2lkdGhFeGNsdWRp
bmdIeXBoZW4sIGNhbmRpZGF0ZVRleHRSdW4ubG9naWNhbExlZnQpLmxlbmd0aDsKICAgICAgICAg
ICAgIH0KQEAgLTQ1OCw3ICs0NTgsNyBAQCBzdGQ6Om9wdGlvbmFsPElubGluZUNvbnRlbnRCcmVh
a2VyOjpQYXJ0aWFsUnVuPiBJbmxpbmVDb250ZW50QnJlYWtlcjo6dHJ5QnJlYWtpbgogICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAvLyBBZGp1c3QgYmVmb3JlIGluZGV4
IHRvIGFjY29tbW9kYXRlIHRoZSBsaW1pdC1hZnRlciB2YWx1ZSAoaXQncyB0aGUgbGFzdCBwb3Rl
bnRpYWwgaHlwaGVuIGxvY2F0aW9uIGluIHRoaXMgcnVuKS4KICAgICAgICAgICAgIGF1dG8gaHlw
aGVuQmVmb3JlID0gc3RkOjptaW4obGVmdFNpZGVMZW5ndGgsIHJ1bkxlbmd0aCAtIGxpbWl0QWZ0
ZXIpICsgMTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0aW9uID0gbGFzdEh5cGhl
bkxvY2F0aW9uKFN0cmluZ1ZpZXcoaW5saW5lVGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRl
bnQoKSkuc3Vic3RyaW5nKGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLmxl
bmd0aCgpKSwgaHlwaGVuQmVmb3JlLCBzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0aW9uID0gUEFMOjpsYXN0SHlwaGVuTG9jYXRpb24oU3Ry
aW5nVmlldyhpbmxpbmVUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCkuY29udGVudCgpKS5zdWJzdHJp
bmcoaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpLCBoeXBo
ZW5CZWZvcmUsIHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpOwogICAgICAgICAgICAgaWYgKCFoeXBo
ZW5Mb2NhdGlvbiB8fCBoeXBoZW5Mb2NhdGlvbiA8IGxpbWl0QmVmb3JlKQogICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAvLyBoeXBoZW5Mb2NhdGlvbiBpcyByZWxhdGl2
ZSB0byB0aGUgc3RhcnQgb2YgdGhpcyBJbmxpbmVJdGVtVGV4dC4KQEAgLTY0OSw3ICs2NDksNyBA
QCBPcHRpb25TZXQ8SW5saW5lQ29udGVudEJyZWFrZXI6OldvcmRCcmVha1J1bGU+IElubGluZUNv
bnRlbnRCcmVha2VyOjp3b3JkQnJlYWtCZQogICAgICAgICByZXR1cm4geyBXb3JkQnJlYWtSdWxl
OjpBdEFyYml0cmFyeVBvc2l0aW9uV2l0aGluV29yZHMgfTsKIAogICAgIGF1dG8gaW5jbHVkZUh5
cGhlbmF0aW9uSWZBbGxvd2VkID0gWyZdKHN0ZDo6b3B0aW9uYWw8SW5saW5lQ29udGVudEJyZWFr
ZXI6OldvcmRCcmVha1J1bGU+IHdvcmRCcmVha1J1bGUpIC0+IE9wdGlvblNldDxJbmxpbmVDb250
ZW50QnJlYWtlcjo6V29yZEJyZWFrUnVsZT4gewotICAgICAgICBhdXRvIGh5cGhlbmF0aW9uSXNB
bGxvd2VkID0gIW5faHlwaGVuYXRpb25Jc0Rpc2FibGVkICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBI
eXBoZW5zOjpBdXRvICYmIGNhbkh5cGhlbmF0ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKKyAg
ICAgICAgYXV0byBoeXBoZW5hdGlvbklzQWxsb3dlZCA9ICFuX2h5cGhlbmF0aW9uSXNEaXNhYmxl
ZCAmJiBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBQQUw6OmNhbkh5cGhlbmF0
ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKICAgICAgICAgaWYgKGh5cGhlbmF0aW9uSXNBbGxv
d2VkKSB7CiAgICAgICAgICAgICBpZiAod29yZEJyZWFrUnVsZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4geyAqd29yZEJyZWFrUnVsZSwgV29yZEJyZWFrUnVsZTo6QXRIeXBoZW5hdGlvbk9wcG9y
dHVuaXRpZXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVJdGVtc0J1aWxkZXIuY3BwCmlu
ZGV4IDQxZjFiMmY0NTVjOWRiODJiMWU1NzMxMDZhYmQ0Y2MzMTkwZjJjY2YuLjc4ZGY5ZTVkMGQ2
ODY2MjBhZGM2NTM1MDczOGVjNzIyN2NjNDhiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lSXRlbXNCdWlsZGVyLmNwcApAQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBidWlsZEJpZGlQYXJhZ3JhcGgoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCAgU3Ry
aW5nQnVpCiAgICAgICAgIGVsc2UgaWYgKGlubGluZUl0ZW0uaXNJbmxpbmVCb3hTdGFydCgpIHx8
IGlubGluZUl0ZW0uaXNJbmxpbmVCb3hFbmQoKSkgewogICAgICAgICAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy13cml0aW5nLW1vZGVzLyN1bmljb2RlLWJpZGkKICAgICAgICAg
ICAgIGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwotICAgICAgICAgICAgYXV0byBp
bml0aWF0ZXNDb250cm9sQ2hhcmFjdGVyID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6
TG9naWNhbCAmJiBzdHlsZS51bmljb2RlQmlkaSgpICE9IEVVbmljb2RlQmlkaTo6VUJOb3JtYWw7
CisgICAgICAgICAgICBhdXRvIGluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIgPSBzdHlsZS5ydGxP
cmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gUEFM
OjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsOwogICAgICAgICAgICAgaWYgKCFpbml0aWF0ZXNDb250
cm9sQ2hhcmFjdGVyKSB7CiAgICAgICAgICAgICAgICAgLy8gT3BhcXVlIGl0ZW1zIGRvIG5vdCBo
YXZlIHBvc2l0aW9uIGluIHRoZSBiaWRpIHBhcmFncmFwaC4gVGhleSBpbmhlcml0IHRoZWlyIGJp
ZGkgbGV2ZWwgZnJvbSB0aGUgbmV4dCBpbmxpbmUgaXRlbS4KICAgICAgICAgICAgICAgICBpbmxp
bmVJdGVtT2Zmc2V0TGlzdC51bmNoZWNrZWRBcHBlbmQoeyB9KTsKQEAgLTIwMiwyNCArMjAyLDI0
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEJpZGlQYXJhZ3JhcGgoY29uc3QgSW5saW5lSXRl
bXMmIGlubGluZUl0ZW1zLCAgU3RyaW5nQnVpCiAgICAgICAgICAgICBpbmxpbmVJdGVtT2Zmc2V0
TGlzdC51bmNoZWNrZWRBcHBlbmQoeyBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5sZW5ndGgoKSB9
KTsKICAgICAgICAgICAgIGF1dG8gaXNFbnRlcmluZ0JpZGkgPSBpbmxpbmVJdGVtLmlzSW5saW5l
Qm94U3RhcnQoKTsKICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUudW5pY29kZUJpZGkoKSkgewot
ICAgICAgICAgICAgY2FzZSBFVW5pY29kZUJpZGk6OlVCTm9ybWFsOgorICAgICAgICAgICAgY2Fz
ZSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw6CiAgICAgICAgICAgICAgICAgLy8gVGhlIGJv
eCBkb2VzIG5vdCBvcGVuIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZW1iZWRkaW5nIHdpdGggcmVz
cGVjdCB0byB0aGUgYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0uCiAgICAgICAgICAgICAgICAgLy8g
Rm9yIGlubGluZSBib3hlcywgaW1wbGljaXQgcmVvcmRlcmluZyB3b3JrcyBhY3Jvc3MgYm94IGJv
dW5kYXJpZXMuCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVVbmljb2RlQmlkaTo6RW1iZWQ6Cisg
ICAgICAgICAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZDoKICAgICAgICAgICAgICAg
ICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAoc3R5bGUu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVmdFRvUmlnaHRFbWJlZCA6IHJpZ2h0VG9MZWZ0
RW1iZWQpIDogcG9wRGlyZWN0aW9uYWxGb3JtYXR0aW5nKTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpPdmVycmlkZToKKyAgICAgICAgICAg
IGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Ok92ZXJyaWRlOgogICAgICAgICAgICAgICAgIHBhcmFn
cmFwaENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChzdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBsZWZ0VG9SaWdodE92ZXJyaWRlIDogcmlnaHRUb0xlZnRPdmVy
cmlkZSkgOiBwb3BEaXJlY3Rpb25hbEZvcm1hdHRpbmcpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFVW5pY29kZUJpZGk6Oklzb2xhdGU6CisgICAgICAgICAgICBj
YXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlOgogICAgICAgICAgICAgICAgIHBhcmFncmFw
aENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChzdHlsZS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBsZWZ0VG9SaWdodElzb2xhdGUgOiByaWdodFRvTGVmdElzb2xhdGUp
IDogcG9wRGlyZWN0aW9uYWxJc29sYXRlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ6CisgICAgICAgICAgICBjYXNlIFBB
TDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ6CiAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29u
dGVudEJ1aWxkZXIuYXBwZW5kKGlzRW50ZXJpbmdCaWRpID8gZmlyc3RTdHJvbmdJc29sYXRlIDog
cG9wRGlyZWN0aW9uYWxJc29sYXRlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGU6CisgICAgICAgICAgICBjYXNl
IFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGU6CiAgICAgICAgICAgICAgICAgaWYg
KGlzRW50ZXJpbmdCaWRpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENvbnRlbnRC
dWlsZGVyLmFwcGVuZChmaXJzdFN0cm9uZ0lzb2xhdGUpOwogICAgICAgICAgICAgICAgICAgICBw
YXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gbGVmdFRvUmlnaHRPdmVycmlkZSA6IHJpZ2h0VG9MZWZ0T3ZlcnJpZGUpOwpAQCAtMjYz
LDcgKzI2Myw3IEBAIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpicmVha0FuZENvbXB1dGVCaWRp
TGV2ZWxzKElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKICAgICB9KTsKIAogICAgIFVCaURpTGV2
ZWwgcm9vdEJpZGlMZXZlbCA9IFVCSURJX0RFRkFVTFRfTFRSOwotICAgIGJvb2wgdXNlSGV1cmlz
dGljQmFzZURpcmVjdGlvbiA9IHJvb3QoKS5zdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gRVVuaWNv
ZGVCaWRpOjpQbGFpbnRleHQ7CisgICAgYm9vbCB1c2VIZXVyaXN0aWNCYXNlRGlyZWN0aW9uID0g
cm9vdCgpLnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50
ZXh0OwogICAgIGlmICghdXNlSGV1cmlzdGljQmFzZURpcmVjdGlvbikKICAgICAgICAgcm9vdEJp
ZGlMZXZlbCA9IHJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFVCSURJ
X0xUUiA6IFVCSURJX1JUTDsKIApAQCAtNDc1LDE0ICs0NzUsMTQgQEAgdm9pZCBJbmxpbmVJdGVt
c0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0YXJ0KGNvbnN0IEJveCYgaW5saW5lQm94LCBJbmxp
bmVJdGVtcyYKIHsKICAgICBpbmxpbmVJdGVtcy5hcHBlbmQoeyBpbmxpbmVCb3gsIElubGluZUl0
ZW06OlR5cGU6OklubGluZUJveFN0YXJ0IH0pOwogICAgIGF1dG8mIHN0eWxlID0gaW5saW5lQm94
LnN0eWxlKCk7Ci0gICAgbV9oYXNTZWVuQmlkaUNvbnRlbnQgPSBtX2hhc1NlZW5CaWRpQ29udGVu
dCB8fCAoc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6TG9naWNhbCAmJiBzdHlsZS51bmlj
b2RlQmlkaSgpICE9IEVVbmljb2RlQmlkaTo6VUJOb3JtYWwpOyAKKyAgICBtX2hhc1NlZW5CaWRp
Q29udGVudCA9IG1faGFzU2VlbkJpZGlDb250ZW50IHx8IChzdHlsZS5ydGxPcmRlcmluZygpID09
IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gUEFMOjpFVW5pY29kZUJp
ZGk6OlVCTm9ybWFsKTsgCiB9CiAKIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpoYW5kbGVJbmxp
bmVCb3hFbmQoY29uc3QgQm94JiBpbmxpbmVCb3gsIElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykK
IHsKICAgICBpbmxpbmVJdGVtcy5hcHBlbmQoeyBpbmxpbmVCb3gsIElubGluZUl0ZW06OlR5cGU6
OklubGluZUJveEVuZCB9KTsKICAgICAvLyBJbmxpbmUgYm94IGVuZCBpdGVtIGl0c2VsZiBjYW4g
bm90IHRyaWdnZXIgYmlkaSBjb250ZW50LgotICAgIEFTU0VSVChoYXNTZWVuQmlkaUNvbnRlbnQo
KSB8fCBpbmxpbmVCb3guc3R5bGUoKS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwgfHwg
aW5saW5lQm94LnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBFVW5pY29kZUJpZGk6OlVCTm9ybWFs
KTsKKyAgICBBU1NFUlQoaGFzU2VlbkJpZGlDb250ZW50KCkgfHwgaW5saW5lQm94LnN0eWxlKCku
cnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsIHx8IGlubGluZUJveC5zdHlsZSgpLnVuaWNv
ZGVCaWRpKCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsKIH0KIAogdm9pZCBJbmxp
bmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUxldmVsQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuY3BwCmlu
ZGV4IDI3MWNlNjRiNjNjM2NhMzA3YzBjMWUyNzVkOGY3ZjU0MDM4M2FhMTQuLjBiNTI0YWJkZDZi
NWRmYzJhNDUxNzIwZWNhNmVkY2FiZWMxZDJjNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUu
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIgogI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBMaW5lOjphcHBseVJ1
bkV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGhvcml6b250YWxBdmFpbGFibGVTcGFjZSkKICAg
ICAvLyBDb2xsZWN0IGFuZCBkaXN0cmlidXRlIHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdGllcy4K
ICAgICBzaXplX3QgbGluZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSAwOwogICAgIFZlY3Rvcjxz
aXplX3Q+IHJ1bnNFeHBhbnNpb25PcHBvcnR1bml0aWVzKG1fcnVucy5zaXplKCkpOwotICAgIFZl
Y3RvcjxFeHBhbnNpb25CZWhhdmlvcj4gcnVuc0V4cGFuc2lvbkJlaGF2aW9ycyhtX3J1bnMuc2l6
ZSgpKTsKKyAgICBWZWN0b3I8UEFMOjpFeHBhbnNpb25CZWhhdmlvcj4gcnVuc0V4cGFuc2lvbkJl
aGF2aW9ycyhtX3J1bnMuc2l6ZSgpKTsKICAgICBhdXRvIGxhc3RSdW5JbmRleFdpdGhDb250ZW50
ID0gc3RkOjpvcHRpb25hbDxzaXplX3Q+IHsgfTsKIAogICAgIC8vIExpbmUgc3RhcnQgYmVoYXZl
cyBhcyBpZiB3ZSBoYWQgYW4gZXhwYW5zaW9uIGhlcmUgKGkuZS4gZmlzdCBydW5zIHNob3VsZCBu
b3Qgc3RhcnQgd2l0aCBhbGxvd2luZyBsZWZ0IGV4cGFuc2lvbikuCkBAIC0xMTQsMTUgKzExNCwx
NSBAQCB2b2lkIExpbmU6OmFwcGx5UnVuRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgaG9yaXpv
bnRhbEF2YWlsYWJsZVNwYWNlKQogICAgIGF1dG8gaGFuZ2luZ1RyYWlsaW5nQ29udGVudExlbmd0
aCA9IG1faGFuZ2luZ1RyYWlsaW5nQ29udGVudC5sZW5ndGgoKTsKICAgICBmb3IgKHNpemVfdCBy
dW5JbmRleCA9IDA7IHJ1bkluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytydW5JbmRleCkgewogICAg
ICAgICBhdXRvJiBydW4gPSBtX3J1bnNbcnVuSW5kZXhdOwotICAgICAgICBpbnQgZXhwYW5zaW9u
QmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uOworICAgICAgICBpbnQgZXhwYW5zaW9uQmVoYXZp
b3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb247CiAgICAgICAgIHNpemVfdCBleHBhbnNpb25PcHBv
cnR1bml0aWVzSW5SdW4gPSAwOwogCiAgICAgICAgIC8vIEZJWE1FOiBDaGVjayB3aHkgd2UgZG9u
J3QgYXBwbHkgZXhwYW5zaW9uIHdoZW4gd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWQuCiAgICAgICAg
IGlmIChydW4uaXNUZXh0KCkgJiYgKCFUZXh0VXRpbDo6c2hvdWxkUHJlc2VydmVTcGFjZXNBbmRU
YWJzKHJ1bi5sYXlvdXRCb3goKSkgfHwgaGFuZ2luZ1RyYWlsaW5nQ29udGVudExlbmd0aCkpIHsK
ICAgICAgICAgICAgIGlmIChydW4uaGFzVGV4dENvbWJpbmUoKSkKLSAgICAgICAgICAgICAgICBl
eHBhbnNpb25CZWhhdmlvciA9IEZvcmJpZExlZnRFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFu
c2lvbjsKKyAgICAgICAgICAgICAgICBleHBhbnNpb25CZWhhdmlvciA9IFBBTDo6Rm9yYmlkTGVm
dEV4cGFuc2lvbiB8IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBleHBhbnNpb25CZWhhdmlvciA9IChydW5Jc0FmdGVyRXhwYW5z
aW9uID8gRm9yYmlkTGVmdEV4cGFuc2lvbiA6IEFsbG93TGVmdEV4cGFuc2lvbikgfCBBbGxvd1Jp
Z2h0RXhwYW5zaW9uOworICAgICAgICAgICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yID0gKHJ1bklz
QWZ0ZXJFeHBhbnNpb24gPyBQQUw6OkZvcmJpZExlZnRFeHBhbnNpb24gOiBQQUw6OkFsbG93TGVm
dEV4cGFuc2lvbikgfCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb247CiAgICAgICAgICAgICAgICAg
YXV0byYgdGV4dENvbnRlbnQgPSAqcnVuLnRleHRDb250ZW50KCk7CiAgICAgICAgICAgICAgICAg
Ly8gVHJhaWxpbmcgaGFuZ2luZyB3aGl0ZXNwYWNlIHNlcXVlbmNlIGlzIGlnbm9yZWQgd2hlbiBj
b21wdXRpbmcgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzLgogICAgICAgICAgICAgICAgIGF1
dG8gaGFuZ2luZ1RyYWlsaW5nQ29udGVudEluQ3VycmVudFJ1biA9IHN0ZDo6bWluKHRleHRDb250
ZW50Lmxlbmd0aCwgaGFuZ2luZ1RyYWlsaW5nQ29udGVudExlbmd0aCk7CkBAIC0xNDMsOCArMTQz
LDggQEAgdm9pZCBMaW5lOjphcHBseVJ1bkV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGhvcml6
b250YWxBdmFpbGFibGVTcGFjZSkKICAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4n
cyB0cmFpbGluZyBleHBhbnNpb24uCiAgICAgaWYgKGxhc3RSdW5JbmRleFdpdGhDb250ZW50ICYm
IHJ1bnNFeHBhbnNpb25PcHBvcnR1bml0aWVzWypsYXN0UnVuSW5kZXhXaXRoQ29udGVudF0pIHsK
ICAgICAgICAgLy8gVHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUg
Zm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9u
ID0gcnVuc0V4cGFuc2lvbkJlaGF2aW9yc1sqbGFzdFJ1bkluZGV4V2l0aENvbnRlbnRdICYgTGVm
dEV4cGFuc2lvbk1hc2s7Ci0gICAgICAgIHJ1bnNFeHBhbnNpb25CZWhhdmlvcnNbKmxhc3RSdW5J
bmRleFdpdGhDb250ZW50XSA9IGxlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lv
bjsKKyAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9uID0gcnVuc0V4cGFuc2lvbkJlaGF2aW9y
c1sqbGFzdFJ1bkluZGV4V2l0aENvbnRlbnRdICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzazsKKyAg
ICAgICAgcnVuc0V4cGFuc2lvbkJlaGF2aW9yc1sqbGFzdFJ1bkluZGV4V2l0aENvbnRlbnRdID0g
bGVhZGluZ0V4cGFuc2lvbiB8IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAgICAgICAgIGlm
IChydW5Jc0FmdGVyRXhwYW5zaW9uKSB7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXN0IHJ1
biBoYXMgYW4gYWZ0ZXIgZXhwYW5zaW9uIChlLmcuIENKSyBpZGVvZ3JhcGgpIHdlIG5lZWQgdG8g
cmVtb3ZlIHRoaXMgdHJhaWxpbmcgZXhwYW5zaW9uIG9wcG9ydHVuaXR5LgogICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFib3V0IHRyYWlsaW5nIGNvbGxhcHNpYmxlIHdoaXRl
c3BhY2UgYXMgYXQgdGhpcyBwb2ludCB3ZSB0cmltbWVkIHRoZW0gYWxsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGlu
ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lTGluZS5oCmluZGV4IGQ0MDdiOTQ1NzgzYzEwNDE5NTg3OTI2ZGRiODNlNzVlNGNkMWMxODMu
LmRiYjYwNjUyNDdjY2M3ZDk4OTJjOThjMDkzN2ZlNjc2MmE5NmI5ZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVMaW5lLmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIElubGluZUxh
eW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAKICAgICAgICAgYm9vbCBzaG91bGRUcmFpbGluZ1doaXRl
c3BhY2VIYW5nKCkgY29uc3Q7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gaW5saW5lRGlyZWN0aW9u
KCkgY29uc3Q7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24oKSBj
b25zdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3Q7CiAg
ICAgICAgIGJvb2wgaGFzVGV4dENvbWJpbmUoKSBjb25zdDsKIApAQCAtMTU2LDcgKzE1Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgSW5saW5lRGlzcGxheTo6Qm94OjpFeHBhbnNpb24gbV9leHBhbnNp
b247CiAgICAgICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgICAgICBib29sIHNob3VsZFRyYWls
aW5nV2hpdGVzcGFjZUhhbmcgeyBmYWxzZSB9OwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBp
bmxpbmVEaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpSVEwgfTsKKyAgICAgICAgICAgIFBBTDo6
VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24geyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCB9
OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nIHsgMCB9OwogICAg
ICAgICAgICAgYm9vbCBoYXNUZXh0Q29tYmluZSB7IGZhbHNlIH07CiAgICAgICAgIH07CkBAIC0y
NzAsNyArMjcwLDcgQEAgaW5saW5lIGJvb2wgTGluZTo6UnVuOjpzaG91bGRUcmFpbGluZ1doaXRl
c3BhY2VIYW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHlsZS5zaG91bGRUcmFpbGluZ1doaXRl
c3BhY2VIYW5nOwogfQogCi1pbmxpbmUgVGV4dERpcmVjdGlvbiBMaW5lOjpSdW46OmlubGluZURp
cmVjdGlvbigpIGNvbnN0CitpbmxpbmUgUEFMOjpUZXh0RGlyZWN0aW9uIExpbmU6OlJ1bjo6aW5s
aW5lRGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHlsZS5pbmxpbmVEaXJlY3Rp
b247CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5o
CmluZGV4IDZmNDRhOGJlMGQyYTA1NDA1NDMxOGQ1OGNiNDljMWYwMmI2ZDM1MDQuLmMzZmExYjM3
YTg2Zjg3NzY5MWU5NmFiNzk3ZmUxYzRkNmQwZGEzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxh
eUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNs
dWRlICJJbmxpbmVSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiVGV4
dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSA8dW5p
Y29kZS91YmlkaS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTE0LDcgKzEx
NCw3IEBAIHN0cnVjdCBCb3ggewogICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dD4mIHRleHQo
KSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KIAogICAgIHN0cnVjdCBFeHBhbnNpb24gewotICAg
ICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IERlZmF1bHRFeHBhbnNpb24gfTsKKyAg
ICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IFBBTDo6RGVmYXVsdEV4cGFu
c2lvbiB9OwogICAgICAgICBMYXlvdXQ6OklubGluZUxheW91dFVuaXQgaG9yaXpvbnRhbEV4cGFu
c2lvbiB7IDAgfTsKICAgICB9OwogICAgIEV4cGFuc2lvbiBleHBhbnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2V4cGFuc2lvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dC9UZXh0VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRVdGlsLmNwcAppbmRl
eCA2NzFmZWVhMjBhZWExMzg2NDQxM2YzYzA0NzNiZDE0OTZmODBmZDQ5Li5lZDMxZGFkOWUyMDYw
NmI4ZmUzNzA3ZDQ5MDI4ODhiNTkxMzdhNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRVdGlsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRV
dGlsLmNwcApAQCAtMTM0LDggKzEzNCw4IEBAIFRleHRVdGlsOjpGYWxsYmFja0ZvbnRMaXN0IFRl
eHRVdGlsOjpmYWxsYmFja0ZvbnRzRm9yUnVuKGNvbnN0IExpbmU6OlJ1biYgcnVuLCBjCiAKICAg
ICBhdXRvIHRleHQgPSAqcnVuLnRleHRDb250ZW50KCk7CiAgICAgaWYgKHRleHQubmVlZHNIeXBo
ZW4pCi0gICAgICAgIGNvbGxlY3RGYWxsYmFja0ZvbnRzKFRleHRSdW4geyBTdHJpbmdWaWV3KHN0
eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpKSwgeyB9LCB7IH0sIERlZmF1bHRFeHBhbnNpb24s
IHN0eWxlLmRpcmVjdGlvbigpIH0pOwotICAgIGNvbGxlY3RGYWxsYmFja0ZvbnRzKFRleHRSdW4g
eyBTdHJpbmdWaWV3KGlubGluZVRleHRCb3guY29udGVudCgpKS5zdWJzdHJpbmcodGV4dC5zdGFy
dCwgdGV4dC5sZW5ndGgpLCB7IH0sIHsgfSwgRGVmYXVsdEV4cGFuc2lvbiwgc3R5bGUuZGlyZWN0
aW9uKCkgfSk7CisgICAgICAgIGNvbGxlY3RGYWxsYmFja0ZvbnRzKFRleHRSdW4geyBTdHJpbmdW
aWV3KHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpKSwgeyB9LCB7IH0sIFBBTDo6RGVmYXVs
dEV4cGFuc2lvbiwgc3R5bGUuZGlyZWN0aW9uKCkgfSk7CisgICAgY29sbGVjdEZhbGxiYWNrRm9u
dHMoVGV4dFJ1biB7IFN0cmluZ1ZpZXcoaW5saW5lVGV4dEJveC5jb250ZW50KCkpLnN1YnN0cmlu
Zyh0ZXh0LnN0YXJ0LCB0ZXh0Lmxlbmd0aCksIHsgfSwgeyB9LCBQQUw6OkRlZmF1bHRFeHBhbnNp
b24sIHN0eWxlLmRpcmVjdGlvbigpIH0pOwogICAgIHJldHVybiBmYWxsYmFja0ZvbnRzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRl
cmF0b3JCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveC5oCmluZGV4IDgxM2Y1YjBlNjU5MDM0MTNmZjQ2MmU0OWUxZjg5Mzc4MTg2MzZjN2Uu
LjYyZDFmYTk5OWZjNjk1NDAwNGU1M2U0NmVlODIwNjRiMGNiZjNiYmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCkBA
IC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByaWdodG1vc3RDYXJldE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heGltdW1DYXJl
dE9mZnNldCgpIDogbWluaW11bUNhcmV0T2Zmc2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIGNoYXIg
YmlkaUxldmVsKCkgY29uc3Q7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0
aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OlRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIGJv
b2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAKICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBh
dGguaAppbmRleCBlN2VmNmRiYTNhOWQ3MDc4Mzc3NDljZTc4MDI4MjljZmFkMDVjOWE0Li44M2Iz
Y2Q1MDkxZGU2MGZmNDEyZTc5NDRkOTA5YmRmOGRhNTgxNTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94
TW9kZXJuUGF0aC5oCkBAIC0yNTUsNyArMjU1LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVu
dC0+bGluZUZvckJveChib3goKSk7IH0KIAogICAgIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRl
eHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcigpKTsgfQot
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkg
JSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUg
MiA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0K
IAogICAgIFJlZlB0cjxjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudD4gbV9p
bmxpbmVDb250ZW50OwogICAgIHNpemVfdCBtX2JveEluZGV4IHsgMCB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yVGV4dEJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0
Qm94LmNwcAppbmRleCAyNjBjZDk5OGQ1MmQyYWFmNGQ5MjU1MmYwYzJlNmQyMmE2MTQ3ODAwLi4w
NmVmNjRjY2MyYTBiMGY4ZWJlNGJlM2M0OGQ2YWM1ZjAwMTM0ZDE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0
Qm94LmNwcApAQCAtNzcsNyArNzcsNyBAQCBmbG9hdCBUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNl
dCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwog
CiAgICAgYXV0byBbc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0gPSBbJl0gewotICAgICAgICBpZiAo
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpw
YWlyIHsgc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KSwgbGVuZ3RoKCkgfTsKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpciB7IDB1LCBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQp
IH07CiAgICAgfSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwCmluZGV4IDJhMmQ2ZTcz
YmIwNTU2ZTY1Y2YyOThlMTUzZTE3MmY1YTg2NjU5MzQuLjY4Yjc5OGIzYjhmMmI5ODI3NTcxNzMw
NjMwYjc4YTY1ZWI2ODQ0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAKQEAgLTQz
OCw5ICs0MzgsOSBAQCBzdGF0aWMgT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNvbj4gY2FuVXNlRm9y
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBJbmNsdQogICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKICAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNOb3RMVFIsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b20pCisgICAgaWYgKHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gUEFM
OjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCiAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICBpZiAoc3R5bGUudW5pY29kZUJpZGkoKSAhPSBVQk5vcm1hbCkKKyAgICBpZiAoc3R5
bGUudW5pY29kZUJpZGkoKSAhPSBQQUw6OlVCTm9ybWFsKQogICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaSwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS5ydGxPcmRlcmluZygpICE9IE9yZGVyOjpM
b2dpY2FsKQogICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNS
VExPcmRlcmluZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggYzNkODQ1MGY3MWMyYzM3M2QyYWYxY2NjZmIyMTVh
ZDgxYmY4MGQwYi4uOTI5OTcyZjM5ZDY2Njk4Y2I0MWFiNGMzMzMxMmExZDg4NWMwNjkwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC0xODIxLDcgKzE4MjEs
NyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRDdXN0b21IZWFkZXJGaWVsZHMoVmVjdG9yPEN1
c3RvbUhlYWRlckZpZWxkcz4mJiBmaWVsZHMpCiAgICAgbV9jdXN0b21IZWFkZXJGaWVsZHMgPSBX
VEZNb3ZlKGZpZWxkcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKGNvbnN0
IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0VGl0
bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICBpZiAobV9w
YWdlVGl0bGUgPT0gdGl0bGUpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmgKaW5kZXggZmJmNTQ1YzQ2MGU0ZTQ4OWQ4N2IyNWMwZTg1ZWNjY2E0Y2Jm
M2M4Ny4uMjBlZTdjNmIxOTc5ZjY5NDZiNDMzODhlZGUzMmI5NzQ2YTIzYzg5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKQEAgLTQ4LDEwICs0OCwxMCBAQAogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EYXRhLmgiCi0jaW5jbHVkZSAiU3RyaW5nV2l0aERpcmVjdGlvbi5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc3BhdGNoT25sb2FkRXZlbnRzKCk7CiAgICAgYm9vbCB3YXNPbmxvYWREaXNwYXRjaGVk
KCkgeyByZXR1cm4gbV93YXNPbmxvYWREaXNwYXRjaGVkOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0xvYWRpbmdJbkFQSVNlbnNlKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICBj
b25zdCBTdHJpbmcmIG92ZXJyaWRlRW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRl
RW5jb2Rpbmc7IH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGxhc3RDaGVja2VkUmVxdWVzdCgpICB7
IHJldHVybiBtX2xhc3RDaGVja2VkUmVxdWVzdDsgfQogCiAgICAgdm9pZCBzdG9wUmVjb3JkaW5n
UmVzcG9uc2VzKCk7Ci0gICAgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhZ2VUaXRsZTsgfQorICAgIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VUaXRsZTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgVVJMIHVybEZvckhpc3RvcnkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHVybEZvckhpc3RvcnlSZWZsZWN0c0ZhaWx1cmUoKSBjb25zdDsKQEAgLTU3NSw3ICs1NzUs
NyBAQCBwcml2YXRlOgogICAgIC8vIGFuZCBzaG91bGQgYmUgbWVyZ2VkLgogICAgIGJvb2wgbV93
YXNPbmxvYWREaXNwYXRjaGVkIHsgZmFsc2UgfTsKIAotICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24g
bV9wYWdlVGl0bGU7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIG1fcGFnZVRpdGxlOwog
CiAgICAgU3RyaW5nIG1fb3ZlcnJpZGVFbmNvZGluZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudFdyaXRlci5jcHAKaW5kZXggYjA0NmVmMGRlMjA0OGVmZDQzMTk3MDI2MjJiOTZhN2Rm
MmZlYWZhNy4uYTFiYTk0ODc0MmYwNmQzMTdmOWRlZjFjYmJiODQxZjk1MzBjYzgxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCkBAIC00OCwxMCArNDgsMTAgQEAK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luUG9s
aWN5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRT
dHJpbmcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbmtEb2N1bWVudC5o
IgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggM2EwNjRiYzcy
MzFhMzYwMGNjODNkYzU4YTlhMmU3ZmYyZWU5NmIzNS4uNjVkMDAzNjgxNjExN2JhZTgzNDk4MTM2
YjA3ZjRlYTIyMGVjZjQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAK
QEAgLTI3OCw3ICsyNzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSBmaW5hbCB7IH0KICAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRh
KGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0
b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9CiAgICAgdm9pZCByZXF1ZXN0Q2Fu
ZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwgeyB9Ci0g
ICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFRleHRDaGVja2lu
Z1Jlc3VsdCkgZmluYWwgeyB9CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhT
b2Z0U3BhY2VzKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0KSBmaW5hbCB7IH0KIAogICAgIHZvaWQg
cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYpIGZpbmFsOwogICAgIHZvaWQgcmVnaXN0ZXJSZWRv
U3RlcChVbmRvU3RlcCYpIGZpbmFsOwpAQCAtMzUwLDcgKzM1MCw3IEBAIHByaXZhdGU6CiAKICAg
ICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSBmaW5hbCB7IHJldHVybiAmbV90ZXh0
Q2hlY2tlckNsaWVudDsgfQogCi0gICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFBBTDo6R3JhbW1hckRldGFpbCYpIGZpbmFsIHsgfQogICAgIHZvaWQgdXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KICAgICB2b2lk
IHNob3dTcGVsbGluZ1VJKGJvb2wpIGZpbmFsIHsgfQogICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hv
d2luZygpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zNjEsMTkgKzM2MSwxOSBAQCBwcml2
YXRlOgogICAgIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICBjbGFzcyBFbXB0eVRleHRDaGVja2VyQ2xpZW50IGZpbmFsIDogcHVibGlj
IFRleHRDaGVja2VyQ2xpZW50IHsKLSAgICAgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRl
ckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CisgICAgICAgIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rp
b24oUEFMOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgICAgIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5h
bCB7IH0KICAgICAgICAgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CiAg
ICAgICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCosIGludCop
IGZpbmFsIHsgfQogICAgICAgICBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgICAg
IHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikgZmluYWwgeyB9CisgICAgICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZT
dHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQq
KSBmaW5hbCB7IH0KIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgICAgIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcs
IE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGZp
bmFsIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KKyAgICAgICAgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdW
aWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpIGZpbmFsIHsgcmV0dXJuIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4oKTsg
fQogI2VuZGlmCiAKICAgICAgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4m
KSBmaW5hbCB7IH0KLSAgICAgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hl
Y2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsOworICAgICAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKSBmaW5hbDsKICAgICB9OwogCiAgICAgRW1wdHlUZXh0Q2hl
Y2tlckNsaWVudCBtX3RleHRDaGVja2VyQ2xpZW50OwpAQCAtNzY3LDcgKzc2Nyw3IEBAIHZvaWQg
RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgp
CiB7CiB9CiAKLXZvaWQgRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZl
VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpCit2b2lkIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYpCiB7CiB9CiAKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lkIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ6OnVwZGF0ZUNhY2hlZERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyJikKIHsKIH0K
IAotdm9pZCBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRo
RGlyZWN0aW9uJiwgY29uc3QgVVJMJikKK3ZvaWQgRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6c2V0
VGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikKIHsKIH0K
IApAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZW5k
SDJQaW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEUKICAgICBjb21w
bGV0aW9uSGFuZGxlcihtYWtlVW5leHBlY3RlZChpbnRlcm5hbEVycm9yKHVybCkpKTsKIH0KIAot
dm9pZCBFbXB0eUVkaXRvckNsaWVudDo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKQordm9pZCBFbXB0eUVkaXRvckNsaWVudDo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApp
bmRleCA1MjI2MTg3MzFkNzU2ZWE0YmY4Yjk2ZGYwMDQzNWY4MzU1OGVlOTFhLi45NzU4Y2UxZTJk
MWRkNTI1YWRiYjY1NDYzYmVhMzMwY2M1NjI3ODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCkBAIC0xMjMsOSArMTIzLDkgQEAgY2xhc3MgRW1wdHlDaHJvbWVDbGllbnQgOiBw
dWJsaWMgQ2hyb21lQ2xpZW50IHsKICAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUm
LCBjb25zdCBJbnRTaXplJikgY29uc3QgZmluYWwgeyB9CiAgICAgdm9pZCBpbnRyaW5zaWNDb250
ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSBjb25zdCBmaW5hbCB7IH0KIAotICAgIHZv
aWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVk
LCBjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSBmaW5hbCB7IH0KKyAgICB2b2lkIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCwgY29uc3Qg
U3RyaW5nJiwgUEFMOjpUZXh0RGlyZWN0aW9uKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgcHJpbnQo
RnJhbWUmLCBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWwgeyB9CisgICAgdm9pZCBw
cmludChGcmFtZSYsIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFsIHsgfQog
CiAgICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUmLCBjb25zdCBTdHJpbmcmLCBE
YXRhYmFzZURldGFpbHMpIGZpbmFsIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlGcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5RnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCAyMjY5OWM5YzUxODMyYTVhYThjODlhYmFiMmZm
YzdlMDk4NWJmYzAwLi40NjMwNDI4MTgwYTkwZjg5NDBhMjJmMWYwZTgyODBmMmJkY2U5MjNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlGcmFtZUxvYWRlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUZyYW1lTG9hZGVyQ2xpZW50LmgKQEAg
LTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRGlkUG9wU3RhdGVXaXRo
aW5QYWdlKCkgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIGZpbmFsOwogICAg
IHZvaWQgZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpIGZpbmFsOwotICAgIHZvaWQg
ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRo
RGlyZWN0aW9uJikgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoc3RkOjpv
cHRpb25hbDxIYXNJbnNlY3VyZUNvbnRlbnQ+LCBzdGQ6Om9wdGlvbmFsPFVzZWRMZWdhY3lUTFM+
KSBmaW5hbDsKICAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBS
ZXNvdXJjZUVycm9yJiwgV2lsbENvbnRpbnVlTG9hZGluZykgZmluYWw7CiAgICAgdm9pZCBkaXNw
YXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbDsKQEAgLTE1MCw3ICsx
NTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVu
dCgpIGZpbmFsOwogCiAgICAgdm9pZCB1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihEb2N1bWVu
dExvYWRlciYpIGZpbmFsOwotICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYsIGNvbnN0IFVSTCYpIGZpbmFsOworICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgUEFMOjpT
dHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikgZmluYWw7CiAKICAgICBTdHJpbmcgdXNl
ckFnZW50KGNvbnN0IFVSTCYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAppbmRleCA1NjYxMDgzODA1NjY0ZTAxMTlmMTFmZmMzMmVhN2UxOTI3ZmM2
NTdiLi5kMmE5OTM3YzYyZjE2ZTg2MGMzMTUwNjM4NGNhNzgwYmE2OWI1NGEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTExNiw3ICsxMTYsNiBAQAogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJTZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLmgiCkBAIC0xMjksNiArMTI4LDcgQEAK
ICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2Vy
LmgiCiAjaW5jbHVkZSA8ZG9tL1NjcmlwdERpc2FsbG93ZWRTY29wZS5oPgorI2luY2x1ZGUgPHBh
bC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxl
ci5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDRmZDYzN2E5MDE0YTVkNDFh
MjI2ZWU0NTkxN2I2YjNlOWE3OTBlYmIuLjg1YjMwYTdkNGNiMjE5MDAxMjc4ZDNiZGQ0Mzg4OGZi
MDJkMmQ1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBA
IC02NSw2ICs2NSwxMCBAQCBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNW
aWV3OwogI2VuZGlmCiAKK25hbWVzcGFjZSBQQUwgeworc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rp
b247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2U7CkBAIC0xMDYsOCArMTEwLDYgQEAgZW51bSBjbGFzcyBMb2NrQmFja0ZvcndhcmRMaXN0
IDogYm9vbDsKIGVudW0gY2xhc3MgUG9saWN5RGVjaXNpb25Nb2RlOwogZW51bSBjbGFzcyBVc2Vk
TGVnYWN5VExTIDogYm9vbDsKIAotc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb247Ci0KIHR5cGVk
ZWYgRnVuY3Rpb248dm9pZCAoUG9saWN5QWN0aW9uLCBQb2xpY3lDaGVja0lkZW50aWZpZXIpPiBG
cmFtZVBvbGljeUZ1bmN0aW9uOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBGcmFtZUxvYWRlckNs
aWVudCB7CkBAIC0xNzMsNyArMTc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaFdpbGxDbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZl
SWNvbigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25z
dCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZFJlY2VpdmVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZChzdGQ6Om9wdGlvbmFsPEhhc0luc2Vj
dXJlQ29udGVudD4sIHN0ZDo6b3B0aW9uYWw8VXNlZExlZ2FjeVRMUz4pID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJy
b3ImLCBXaWxsQ29udGludWVMb2FkaW5nKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKQEAgLTI2Nyw3ICsyNjksNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1l
bnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZERvY3VtZW50TG9hZGVyKERvY3VtZW50
TG9hZGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRo
RGlyZWN0aW9uJiwgY29uc3QgVVJMJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShj
b25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKSA9IDA7CiAKICAgICB2
aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgVVJMJikgY29uc3QgPSAwOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCBiM2FjZjA2YjQ5YTgy
YjJhNGEwOWMxMzVjMDllZjgwM2VhMDdkZDMyLi4wNmE4ZTdlMDMyZTk2OGEzM2E5NTYyYWRjMDc5
YWVhZjM1YThjMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxl
ci5jcHAKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJv
bGxlcjo6c2V0Q3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0pCiAgICAgbV9jdXJyZW50SXRl
bSA9ICZpdGVtOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJvbGxlcjo6c2V0
Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKK3ZvaWQg
RnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJyZW50SXRlbVRpdGxlKGNvbnN0
IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
aWdub3JlcyB0aGUgdGl0bGUncyBkaXJlY3Rpb24uCiAgICAgaWYgKG1fY3VycmVudEl0ZW0pCkBA
IC02NTgsNyArNjU4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6SGlzdG9yeUNvbnRyb2xsZXI6Omlu
aXRpYWxpemVJdGVtKEhpc3RvcnlJdGVtJiBpdGVtKQogICAgIGlmIChvcmlnaW5hbFVSTC5pc0Vt
cHR5KCkpCiAgICAgICAgIG9yaWdpbmFsVVJMID0gYWJvdXRCbGFua1VSTCgpOwogICAgIAotICAg
IFN0cmluZ1dpdGhEaXJlY3Rpb24gdGl0bGUgPSBkb2N1bWVudExvYWRlci0+dGl0bGUoKTsKKyAg
ICBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gdGl0bGUgPSBkb2N1bWVudExvYWRlci0+dGl0bGUo
KTsKIAogICAgIGl0ZW0uc2V0VVJMKHVybCk7CiAgICAgaXRlbS5zZXRUYXJnZXQobV9mcmFtZS50
cmVlKCkudW5pcXVlTmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9I
aXN0b3J5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmgKaW5kZXggMTAzN2RmOThlYzQxNTU0YmZiMWRiNjJiODk2ODJkODM3ZmE2NTYzNy4uMGY5
ZGE2ZjRkMDI2NzQ0MTgwMWMwY2JmZjhlYTJhMmE5ZTg1ODM2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKQEAgLTMxLDYgKzMxLDEwIEBACiAKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogCituYW1lc3BhY2UgUEFMIHsKK3N0cnVjdCBTdHJpbmdXaXRoRGly
ZWN0aW9uOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwpAQCAtMzks
OCArNDMsNiBAQCBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGVudW0gY2xhc3MgU2hv
dWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkIDogdWludDhfdDsKIAotc3RydWN0IFN0cmluZ1dpdGhE
aXJlY3Rpb247Ci0KIGNsYXNzIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJvbGxlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSGlzdG9yeUNvbnRyb2xsZXIpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwpAQCAtNzMsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICBIaXN0b3J5SXRl
bSogY3VycmVudEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJdGVtLmdldCgpOyB9CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDdXJyZW50SXRlbShIaXN0b3J5SXRlbSYpOwotICAg
IHZvaWQgc2V0Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7Cisg
ICAgdm9pZCBzZXRDdXJyZW50SXRlbVRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlv
biYpOwogICAgIGJvb2wgY3VycmVudEl0ZW1TaG91bGRCZVJlcGxhY2VkKCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlQ3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKaW5kZXggY2ViZGM1NTdmMTNm
YzRhZmQ4Mjc1Mjk3NzRhZmQ4ZWM0YmVmNDIxMC4uNTQ4YTdhMzdjZjVjNzU1OTJiOTk0MDM3ZjMy
OGJkYTJmZTFkMmYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5o
CkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IGMxM2Y2Y2Y5ZDZlMTc4N2VhNjA1ODlmZTQ2YTJlMTc3ZDkzNzQ4MWQuLjg4ZGEw
ODdkNzMxM2E5NjljYzE0ODRlOGUzMmRjOWRkMDk4ZjY4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKQEAgLTM0MCwxNCArMzQwLDE0IEBAIHZvaWQgQ2hyb21lOjptb3VzZURpZE1vdmVPdmVyRWxl
bWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmCiAgICAgICAg
IG1fcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQu
YWJzb2x1dGVMaW5rVVJMKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogCiAgICAgU3RyaW5nIHRvb2xU
aXA7Ci0gICAgVGV4dERpcmVjdGlvbiB0b29sVGlwRGlyZWN0aW9uOworICAgIFBBTDo6VGV4dERp
cmVjdGlvbiB0b29sVGlwRGlyZWN0aW9uOwogICAgIGdldFRvb2xUaXAocmVzdWx0LCB0b29sVGlw
LCB0b29sVGlwRGlyZWN0aW9uKTsKICAgICBtX2NsaWVudC5tb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MsIHRvb2xUaXAsIHRvb2xUaXBEaXJlY3Rpb24pOwogCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChtX3Bh
Z2UsIHJlc3VsdCwgbW9kaWZpZXJGbGFncyk7CiB9CiAKLXZvaWQgQ2hyb21lOjpnZXRUb29sVGlw
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0
aW9uJiB0b29sVGlwRGlyZWN0aW9uKQordm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbiYg
dG9vbFRpcERpcmVjdGlvbikKIHsKICAgICAvLyBGaXJzdCBwcmlvcml0eSBpcyBhIHBvdGVudGlh
bCB0b29sVGlwIHJlcHJlc2VudGluZyBhIHNwZWxsaW5nIG9yIGdyYW1tYXIgZXJyb3IKICAgICB0
b29sVGlwID0gcmVzdWx0LnNwZWxsaW5nVG9vbFRpcCh0b29sVGlwRGlyZWN0aW9uKTsKQEAgLTM2
NCw3ICszNjQsNyBAQCB2b2lkIENocm9tZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdAogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZvcm0tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9vbFRpcERpcmVjdGlvbiA9IGZvcm0tPnJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9vbFRpcERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3QKICAgICAgICAgICAg
IC8vIEZJWE1FOiBOZWVkIHRvIHBhc3MgdGhpcyBVUkwgdGhyb3VnaCB1c2VyVmlzaWJsZVN0cmlu
ZyBvbmNlIHRoYXQncyBpbiBXZWJDb3JlCiAgICAgICAgICAgICB0b29sVGlwID0gcmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpLnN0cmluZygpOwogICAgICAgICAgICAgLy8gVVJMIGFsd2F5cyBkaXNw
bGF5IGFzIExUUi4KLSAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9u
OjpMVFI7CisgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIENocm9t
ZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRp
cCwgVGV4dERpcmVjdAogICAgICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBkb24ndCB1
c2UgdGV4dCBkaXJlY3Rpb24gaW5mb3JtYXRpb24gZm9yCiAgICAgICAgICAgICAgICAgLy8gQ2hy
b21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudC4gV2UnbGwgd29yayBvbiB0b29sdGlw
IHRleHQKICAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb24gZHVyaW5nIGJpZGkgY2xlYW51cCBp
biBmb3JtIGlucHV0cy4KLSAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gVGV4dERp
cmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCmluZGV4IDM3MjE4MmZlYzYyMGZlZDlkZmU3M2RhODkyMjQ2YWY5MTNjNTUzM2Uu
LjkzOTNlNzg1MmZlNzU2NWJlOTk0NjkzOGEzZTA1OTNkMGIxZTEzMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaApAQCAtMjAyLDcgKzIwMiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBub3Rp
ZnlQb3B1cE9wZW5pbmdPYnNlcnZlcnMoKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0VG9vbFRpcChj
b25zdCBIaXRUZXN0UmVzdWx0JiwgU3RyaW5nJiwgVGV4dERpcmVjdGlvbiYpOworICAgIHZvaWQg
Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiwgU3RyaW5nJiwgUEFMOjpUZXh0RGlyZWN0
aW9uJik7CiAKICAgICBQYWdlJiBtX3BhZ2U7CiAgICAgQ2hyb21lQ2xpZW50JiBtX2NsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDM1ZDI5MGEyODE0MmUyNzBiODE0N2E2
NTE0ODI2OGI0ODVlNmM1NjMuLjJhZTI0ZDU0NzY4MjIyNWI2Mzg4MDA3MTY3NDI0MzVmMDgwNDA1
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMjQwLDkgKzI0MCw5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VC
ZUJ1dHRvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24p
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1
Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50JiwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxh
Z3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5z
aWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBQQUw6OlRleHREaXJl
Y3Rpb24pID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBwcmludChGcmFtZSYsIGNvbnN0IFN0cmlu
Z1dpdGhEaXJlY3Rpb24mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lJiwgY29u
c3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgPSAwOwogCiAgICAgdmlydHVhbCBDb2xvciB1
bmRlcmxheUNvbG9yKCkgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
ZGl0b3JDbGllbnQuaAppbmRleCA4MjM3NGU3MjYyYzcwZWE5ZGZlNGQ2NGYyNWFiMTM1YWE2MDMz
M2NmLi5iYTdmODNiZDI0NDgyMDUyNDhmOTIxMzFhNzRmNWJmOGZlYTk5NTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI5LDExICsyOSwxNSBAQAogI2luY2x1ZGUgIkVkaXRv
ckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgog
I2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgotI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5oPgogI2luY2x1ZGUgIlVuZG9TdGVwLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVz
cGFjZSBQQUwgeworc3RydWN0IEdyYW1tYXJEZXRhaWw7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogZW51bSBjbGFzcyBET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIDogdWludDhfdDsKQEAgLTQ5
LDcgKzUzLDYgQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBzdHJ1Y3QgR2FwUmVjdHM7Ci1zdHJ1Y3QgR3JhbW1hckRldGFpbDsKIHN0cnVjdCBT
aW1wbGVSYW5nZTsKIAogY2xhc3MgRWRpdG9yQ2xpZW50IHsKQEAgLTk5LDcgKzEwMiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywg
VmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdp
dGhTb2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoUEFMOjpUZXh0Q2hlY2tpbmdSZXN1
bHQpIHsgfQogCiAgICAgdmlydHVhbCBET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RET01Q
YXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpID0gMDsKIApAQCAtMTc2
LDcgKzE3OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRl
eHRDaGVja2VyKCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFBBTDo6R3JhbW1hckRldGFpbCYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGZmOTgyNTcxMjdhY2I5YmQyNDkzMmJjYmM5YmM3Y2I4YWIxMjAw
ZGIuLjliOTE3MjYxMTc2MWE1MGVhZTBhNzE5OTRjNjU5NGU0MWQxMDFjYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE2NSwxNCArMTY1LDE0IEBAIFBhZ2luYXRpb246Ok1vZGUg
cGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAg
ICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKIAogICAgIGJvb2wgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUgPSBzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOwotICAgIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOworICAgIFBBTDo6
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwogCiAgICAgLy8g
cGFnZWQteCBhbHdheXMgY29ycmVzcG9uZHMgdG8gTGVmdFRvUmlnaHRQYWdpbmF0ZWQgb3IgUmln
aHRUb0xlZnRQYWdpbmF0ZWQuIElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8vIGlzIGhvcml6b250
YWwsIHRoZW4gd2UgdXNlIFRleHREaXJlY3Rpb24gdG8gY2hvb3NlIGJldHdlZW4gdGhvc2Ugb3B0
aW9ucy4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgdmVydGljYWwsIHRoZW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgdmVydGljYWxpdHkgZGljdGF0ZXMgdGhlIGNob2ljZS4KICAgICBpZiAo
b3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlBhZ2VkWCkgewotICAgICAgICBpZiAoKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlICYmIHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB8fCB3
cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgIGlmICgoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgJiYgdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUikgfHwgd3JpdGluZ01vZGUgPT0gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQp
CiAgICAgICAgICAgICByZXR1cm4gUGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ7CiAg
ICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsKICAgICB9CkBA
IC0xODAsNyArMTgwLDcgQEAgUGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9kZUZvclJlbmRl
clN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAvLyBwYWdlZC15IGFsd2F5cyBj
b3JyZXNwb25kcyB0byBUb3BUb0JvdHRvbVBhZ2luYXRlZCBvciBCb3R0b21Ub1RvcFBhZ2luYXRl
ZC4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgaG9yaXpvbnRhbCwgdGhlbiB0aGUgZGly
ZWN0aW9uIG9mIHRoZSBob3Jpem9udGFsaXR5IGRpY3RhdGVzIHRoZSBjaG9pY2UuIElmIHRoZSBX
cml0aW5nTW9kZQogICAgIC8vIGlzIHZlcnRpY2FsLCB0aGVuIHdlIHVzZSBUZXh0RGlyZWN0aW9u
IHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIG9wdGlvbnMuIAotICAgIGlmICh3cml0aW5nTW9kZSA9
PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSAm
JiB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkpCisgICAgaWYgKHdyaXRpbmdN
b2RlID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8ICghaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUgJiYgdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkpCiAg
ICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2luYXRlZDsKICAgICByZXR1
cm4gUGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDU5N2I2NzIzNjU3OGM5ODk1MmE2
YmM3NzQ0ZGFiYjJjNjM0NmVjZjIuLjA2ZjllMDYyMGViZWNiMGZmMmMzMzllNGJmOWFmZWE1OTg4
ZWMxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3Bw
CkBAIC0xNDYsOSArMTQ2LDkgQEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6On5JbnRlcnNlY3Rpb25P
YnNlcnZlcigpCiBTdHJpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJvb3RNYXJnaW4oKSBjb25z
dAogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBmb3IgKGF1dG8gc2lk
ZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVz
KSB7CiAgICAgICAgIGF1dG8mIGxlbmd0aCA9IG1fcm9vdE1hcmdpbi5hdChzaWRlKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobGVuZ3RoLmludFZhbHVlKCksIGxlbmd0aC5pc1BlcmNl
bnQoKSA/ICIlIiA6ICJweCIsIHNpZGUgIT0gQm94U2lkZTo6TGVmdCA/ICIgIiA6ICIiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobGVuZ3RoLmludFZhbHVlKCksIGxlbmd0aC5pc1Bl
cmNlbnQoKSA/ICIlIiA6ICJweCIsIHNpZGUgIT0gUEFMOjpCb3hTaWRlOjpMZWZ0ID8gIiAiIDog
IiIpOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKaW5kZXggNTcwNmFkODYyOGZiOWJiMmM0OTg2NTM1YzYzMmQ5ZDJkYWM5MTNl
Zi4uMTEwOTE4YWI2YTBkNWQ1MGY2MzI3OGU3OTJmMTlmYjhhZTlmMDJhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCkBAIC04NjYsNyArODY2LDcgQEAgdW5zaWduZWQgUGFnZTo6Y291bnRGaW5kTWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWcKIAogc3Ry
dWN0IEZpbmRSZXBsYWNlbWVudFJhbmdlIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9v
dDsKLSAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBQQUw6OkNoYXJhY3RlclJhbmdlIHJh
bmdlOwogfTsKIAogc3RhdGljIHZvaWQgcmVwbGFjZVJhbmdlcyhQYWdlJiBwYWdlLCBjb25zdCBW
ZWN0b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+JiByYW5nZXMsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRUZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1s
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCmluZGV4IDJhZTcwY2IxZGE4NGU4
Y2FkM2VjY2MwYzlmZmVmNDM2ZjhlODlmNjAuLmRmMzlhYWE1ZWI1YTI0ZGUxOTQ4MDExNGNiNDdl
OTc0NWRmNWI2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFt
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwKQEAgLTE2NywxMCArMTY3
LDEwIEBAIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGU6CiAKIEZvbnRSZW5kZXJpbmdNb2RlOgogICB0
eXBlOiB1aW50MzJfdAotICByZWZpbmVkVHlwZTogRm9udFJlbmRlcmluZ01vZGUKKyAgcmVmaW5l
ZFR5cGU6IFBBTDo6Rm9udFJlbmRlcmluZ01vZGUKICAgZGVmYXVsdFZhbHVlOgogICAgIFdlYkNv
cmU6Ci0gICAgICBkZWZhdWx0OiBGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsCisgICAgICBkZWZh
dWx0OiBQQUw6OkZvbnRSZW5kZXJpbmdNb2RlOjpOb3JtYWwKIAogRm9yY2VDb21wb3NpdGluZ01v
ZGU6CiAgIHR5cGU6IGJvb2wKQEAgLTUxNiw3ICs1MTYsNyBAQCBTeXN0ZW1MYXlvdXREaXJlY3Rp
b246CiAgIHJlZmluZWRUeXBlOiBUZXh0RGlyZWN0aW9uCiAgIGRlZmF1bHRWYWx1ZToKICAgICBX
ZWJDb3JlOgotICAgICAgZGVmYXVsdDogVGV4dERpcmVjdGlvbjo6TFRSCisgICAgICBkZWZhdWx0
OiBQQUw6OlRleHREaXJlY3Rpb246OkxUUgogCiBUZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVy
cmlkZUhlaWdodDoKICAgdHlwZTogdWludDMyX3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3NCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5o
CmluZGV4IGRmN2I4ZDVmNzM5ZTBlMDFlN2EzMWFkYmE4ZmUxYzY0YTQxNjE2MzYuLjE1Y2JjOTVj
YzYxZjM1NzYxMDVjNmZiY2FiMWY0OGQxOTYxMjVlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
c0Jhc2UuaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvclR5cGUu
aCIKICNpbmNsdWRlICJGb250R2VuZXJpY0ZhbWlsaWVzLmgiCiAjaW5jbHVkZSAiRm9udExvYWRU
aW1pbmdPdmVycmlkZS5oIgotI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVk
ZSAiRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWVGbGF0dGVuaW5n
LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlclNjcmlwdGluZ0ZsYWdQb2xpY3kuaCIKQEAgLTQwLDEx
ICszOSwxMiBAQAogI2luY2x1ZGUgIlBERkltYWdlQ2FjaGluZ1BvbGljeS5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNs
dWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvblN1Ym1lbnVJbmNs
dXNpb25CZWhhdmlvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVXNlckludGVy
ZmFjZURpcmVjdGlvblBvbGljeS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1J1bnRpbWVG
bGFncy5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L0ZvbnRSZW5kZXJpbmdNb2RlLmg+CisjaW5jbHVk
ZSA8cGFsL3RleHQvVGV4dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXNjcmlwdC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwCmluZGV4IDY4YzU3NjMwOThhODY5NzZiMWRjYTU4ZTMzN2MwYWQ3NjUxNzc4
MzMuLjdlOGFjYjM5MTQyNmI2MjkxYWJkMWVmN2YxZDc4M2RhODRkYjVmYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmNwcApAQCAtMjY3LDE3ICsyNjcsMTcgQEAgc3RhdGljIExheW91dFVuaXQgY29tcHV0ZVNjcm9s
bFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbmkKICAgICB9
CiB9CiAKLXN0YXRpYyBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gYXhlc0ZsaXBwZWRGb3JXcml0aW5n
TW9kZUFuZERpcmVjdGlvbihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uKQorc3RhdGljIHN0ZDo6cGFpcjxib29sLCBib29sPiBheGVzRmxpcHBlZEZv
cldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uKFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBB
TDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQogewogICAgIC8vIHRleHQtZGlyZWN0aW9u
IGZsaXBzIHRoZSBpbmxpbmUgYXhpcyBhbmQgd3JpdGluZy1tb2RlIGNhbiBmbGlwIHRoZSBibG9j
ayBheGlzLiBXaGV0aGVyIG9yCiAgICAgLy8gbm90IHRoZSB3cml0aW5nLW1vZGUgaXMgdmVydGlj
YWwgZGV0ZXJtaW5lcyB0aGUgcGh5c2ljYWwgb3JpZW50YXRpb24gb2YgdGhlIGJsb2NrIGFuZCBp
bmxpbmUgYXhlcy4KICAgICBib29sIGhhc1ZlcnRpY2FsV3JpdGluZ01vZGUgPSBpc1ZlcnRpY2Fs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwogICAgIGJvb2wgYmxvY2tBeGlzRmxpcHBlZCA9IGlz
RmxpcHBlZFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKLSAgICBib29sIGlubGluZUF4aXNGbGlw
cGVkID0gdGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpbmxp
bmVBeGlzRmxpcHBlZCA9IHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGhhc1ZlcnRpY2FsV3JpdGluZ01vZGUgPyBibG9j
a0F4aXNGbGlwcGVkIDogaW5saW5lQXhpc0ZsaXBwZWQsIGhhc1ZlcnRpY2FsV3JpdGluZ01vZGUg
PyBpbmxpbmVBeGlzRmxpcHBlZCA6IGJsb2NrQXhpc0ZsaXBwZWQpOwogfQogCi12b2lkIHVwZGF0
ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0
eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3Jk
ZXJCb3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbikKK3ZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5n
RWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5
b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBQQUw6OldyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKIHsKICAg
ICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFNuYXBU
eXBlKCk7CiAgICAgY29uc3QgYXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucyA9IHNj
cm9sbGluZ0VsZW1lbnRCb3gudmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgKaW5kZXggN2E5NGJhODRiOGFhYzUzMWFjNGFkOTQzNmEyZDgwYmJkYjMwYTVkOC4u
YTIzNjNkNmU5MTVmNGM3ZjU0M2NkNGYzY2RjMjU2YWQxM2M0MmEyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKQEAg
LTk3LDcgKzk3LDcgQEAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2YKIC8vIFVwZGF0ZSB0aGUgc25h
cCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRlckJveCBv
ZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCiAvLyB3aGljaCBkZWZpbmVz
IHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3
aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCiAvLyB0aGUgc2Nyb2xsaW5nIGNvbnRh
aW5lcidzIGJvcmRlciBib3guCi12b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFy
ZWEoU2Nyb2xsYWJsZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gs
IGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmll
d3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUsIFRleHREaXJlY3Rp
b24pOwordm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVB
cmVhJiwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJT
dHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9y
ZGVyQm94Q29vcmRpbmF0ZXMsIFBBTDo6V3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbik7
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiB0cywgU25hcE9mZnNldDxUPiBvZmZzZXQpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCmluZGV4IDJkZTY1YzIyZjli
N2Y5NDBlMWViY2ZmYmM0NWVjZDYwNmE0OTljODQuLmQ1YTE0MWYxN2IzNzhhZDFhMzlhM2ZkMzI0
YjljMzc5ZmZlM2E2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWUuY3BwCkBAIC02NTYsNyArNjU2LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlOjpz
ZXRNYWluRnJhbWVDYW5SdWJiZXJCYW5kKFJlY3RFZGdlczxib29sPiBjYW5SdWJiZXJCYW5kKQog
ICAgIG1fc3dpcGVTdGF0ZS5jYW5SdWJiZXJCYW5kID0gY2FuUnViYmVyQmFuZDsKIH0KIAotYm9v
bCBTY3JvbGxpbmdUcmVlOjptYWluRnJhbWVDYW5SdWJiZXJCYW5kT25TaWRlKEJveFNpZGUgc2lk
ZSkKK2Jvb2wgU2Nyb2xsaW5nVHJlZTo6bWFpbkZyYW1lQ2FuUnViYmVyQmFuZE9uU2lkZShQQUw6
OkJveFNpZGUgc2lkZSkKIHsKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zd2lwZVN0YXRlTG9jayB9
OwogICAgIHJldHVybiBtX3N3aXBlU3RhdGUuY2FuUnViYmVyQmFuZC5hdChzaWRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAppbmRleCBjY2QyMjcx
M2I5ODIyOGFlNjAwMTgzZDMwOTQ0ZThhOTJiYjI0M2M1Li44MDk2ODY3YTI5NGY2YTUyNjM4N2M0
OGI4YjhhMjMzOTBhZDQ4YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZS5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2Fu
IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuIFdpbGwgdXBkYXRlIHdoYXQgZWRnZXMgYWxsb3cg
cnViYmVyLWJhbmRpbmcuCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNYWluRnJhbWVDYW5S
dWJiZXJCYW5kKFJlY3RFZGdlczxib29sPik7Ci0gICAgYm9vbCBtYWluRnJhbWVDYW5SdWJiZXJC
YW5kT25TaWRlKEJveFNpZGUpOworICAgIGJvb2wgbWFpbkZyYW1lQ2FuUnViYmVyQmFuZE9uU2lk
ZShQQUw6OkJveFNpZGUpOwogCiAgICAgYm9vbCBpc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xs
KCkgY29uc3QgeyByZXR1cm4gbV9pc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsOyB9CiAgICAg
dm9pZCBzZXRJc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsKGJvb2wgaXNIYW5kbGluZ1Byb2dy
YW1tYXRpY1Njcm9sbCkgeyBtX2lzSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGwgPSBpc0hhbmRs
aW5nUHJvZ3JhbW1hdGljU2Nyb2xsOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVNYWMuaAppbmRleCAzNjdkZjAyYzg0ZWYwYWFjNTliNGNlYTlkN2QwMDg1MmU1
NWUyMTc1Li5iZjU5ZmNkMmJmZDQ0M2JiYTY1NDdkZjJjNDUzMmJjNWFkYTkyOTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgKQEAgLTgxLDEzICs4
MSwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgZmluYWw7CiAgICAgYm9vbCBhbGxvd3NWZXJ0
aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgZmluYWw7CiAg
ICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Bpbm5l
ZE9uU2lkZShCb3hTaWRlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUGlubmVkT25TaWRlKFBB
TDo6Qm94U2lkZSkgY29uc3QgZmluYWw7CiAKICAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBpbm5l
ZFN0YXRlKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5n
KCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpIGNvbnN0
IGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kT25TaWRlKEJveFNpZGUpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNpZGUpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CiAgICAgdm9p
ZCBkaWRTdG9wUnViYmVyQmFuZEFuaW1hdGlvbigpIGZpbmFsOwogICAgIHZvaWQgcnViYmVyQmFu
ZGluZ1N0YXRlQ2hhbmdlZChib29sKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5kZXggYmYwMTMyZDJkNjQ4MTZmZmFlMTIzMTRmN2I4
MTIyMDQxYTE5YzM2MC4uODExMzA2NmJhNDllY2E0MzI2ZDlkOGRhMzM5MGFiMGM5MDRmYWZlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KQEAg
LTE0NSwyNCArMTQ1LDI0IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYzo6c2Nyb2xsUG9zaXRpb25Jc05vdFJ1YmJlcmJhbmRpbmdFZGdlCiAgICAgYXV0byBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAgICBh
dXRvIG1heGltdW1TY3JvbGxQb3NpdGlvbiA9IHRoaXMtPm1heGltdW1TY3JvbGxQb3NpdGlvbigp
OwogCi0gICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBz
aWRlIDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICBpZiAoIXJ1YmJlcmJhbmRpbmdFZGdl
c1tzaWRlXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRjaCAoc2lkZSkg
ewotICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6
OlRvcDoKICAgICAgICAgICAgIGlmICh0YXJnZXRQb3NpdGlvbi55KCkgIT0gbWluaW11bVNjcm9s
bFBvc2l0aW9uLnkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICBjYXNlIFBBTDo6
Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBpZiAodGFyZ2V0UG9zaXRpb24ueCgpICE9IG1h
eGltdW1TY3JvbGxQb3NpdGlvbi54KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICBpZiAodGFyZ2V0UG9zaXRp
b24ueSgpICE9IG1heGltdW1TY3JvbGxQb3NpdGlvbi55KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0
OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgIGlmICh0YXJn
ZXRQb3NpdGlvbi54KCkgIT0gbWluaW11bVNjcm9sbFBvc2l0aW9uLngoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjc0LDIyICsyNzQsMjIg
QEAgSW50U2l6ZSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzdHJldGNo
QW1vdW50KCkgY29uc3QKICAgICByZXR1cm4gc3RyZXRjaDsKIH0KIAotYm9vbCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bpbm5lZE9uU2lkZShCb3hTaWRlIHNpZGUp
IGNvbnN0Citib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmlzUGlu
bmVkT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lkZSkg
ewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAg
ICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFBvc2l0aW9uKCkueSgpIDw9IG1p
bmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICBpZiAoIWFsbG93c1ZlcnRpY2Fs
U2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGN1
cnJlbnRTY3JvbGxQb3NpdGlvbigpLnkoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7
Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0Ogog
ICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFBvc2l0aW9uKCkueCgpIDw9
IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0Ogor
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9u
dGFsU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IGN1cnJlbnRTY3JvbGxQb3NpdGlvbigpLngoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCk7CkBAIC0zMTIsMTcgKzMxMiwxNyBAQCBib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKICAgICByZXR1cm4g
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6YWxsb3dzVmVydGljYWxTY3JvbGxp
bmcoKTsKIH0KIAotYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpz
aG91bGRSdWJiZXJCYW5kT25TaWRlKEJveFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6
OkJveFNpZGUgc2lkZSkgY29uc3QKIHsKICAgICBpZiAoc2Nyb2xsaW5nTm9kZSgpLmlzUm9vdE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ1RyZWUoKS5tYWluRnJhbWVDYW5SdWJiZXJC
YW5kT25TaWRlKHNpZGUpOwogCiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBCb3hTaWRl
OjpUb3A6Ci0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6
OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICByZXR1cm4gYWxs
b3dzVmVydGljYWxTY3JvbGxpbmcoKTsKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6Ci0gICAgY2Fz
ZSBCb3hTaWRlOjpSaWdodDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgIHJldHVybiBhbGxvd3NIb3Jpem9udGFsU2Ny
b2xsaW5nKCk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdJbWFnZS5jcHAKaW5kZXggNmRmZTBkZDNlYTRkYTNhMWY1ZjBmNmM3OWQ2ZDFhM2JmMDBjMzE1
OS4uMmIwNTc0ZWIwMmVmZTUyMTM4NWJlY2NjZjg4YjcyNzliY2ZkY2RlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYp
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JMaW5rKEVsZW1lbnQmLCBVUkwmLCBjb25zdCBTdHJpbmcmLCBUZXh0SW5kaWNhdG9yRGF0YSYs
IEZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JMaW5rKEVsZW1lbnQmLCBVUkwmLCBjb25zdCBTdHJpbmcmLCBUZXh0SW5kaWNhdG9yRGF0YSYs
IFBBTDo6Rm9udFJlbmRlcmluZ01vZGUsIGZsb2F0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCmluZGV4
IDI0NjU0NDA5M2VlZTBmZTM2Y2M5YzMxYTc4ZTdhYmMzMGM0YTkwMjMuLmFmZTIzYjBmYTY5ZTEy
NDM3NDU2MGMzZjgyNjM0NzE5Mjc4NGFkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFn
ZS5oCkBAIC0yNiwxMiArMjYsMTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCi0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNp
bmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvRm9udFJlbmRlcmlu
Z01vZGUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKQEAgLTkxLDcgKzkxLDcgQEAgV0VCQ09SRV9FWFBPUlQgRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSYsIFRleHRJbmRpY2F0b3JEYXQKIFdFQkNPUkVf
RVhQT1JUIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYsIGNvbnN0
IFNpbXBsZVJhbmdlJiwgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGZhbHNlKTsKIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0LCBQYXRoJik7CiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9ySW1hZ2UoRnJh
bWUmLCBOb2RlJiwgSW50UmVjdCYgaW1hZ2VSZWN0LCBJbnRSZWN0JiBlbGVtZW50UmVjdCk7Ci1E
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiwgVVJMJiwgY29uc3Qg
U3RyaW5nJiBsYWJlbCwgVGV4dEluZGljYXRvckRhdGEmLCBGb250UmVuZGVyaW5nTW9kZSwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpOworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxp
bmsoRWxlbWVudCYsIFVSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwsIFRleHRJbmRpY2F0b3JEYXRh
JiwgUEFMOjpGb250UmVuZGVyaW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwogdm9p
ZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKTsKIAogSW50UG9pbnQgZHJhZ09mZnNldEZv
ckxpbmtEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAKaW5kZXggYmQ2NTlhZjM3MjA5
YjdmNmY5YWY0YWRjNGNmMGFhMDg1Yzc4ZGEzZi4uYmI2ZTNhZDI0YWRhYjY0NDhhNzMwOGMxNWI2
YTIyOTQ5YzljNDI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRl
IDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1
LDIwICs2NSwyMCBAQCBSZWN0RWRnZXM8Ym9vbD4gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6
c2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tUG9zaXRpb24oRmxvYQogICAgIHJldHVybiBlZGdlczsK
IH0KIAotc3RhdGljIEJveFNpZGUgYm94U2lkZUZvckRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uKQorc3RhdGljIFBBTDo6Qm94U2lkZSBib3hTaWRlRm9yRGlyZWN0aW9uKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBj
YXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA6Ci0gICAgICAgIHJldHVybiBCb3hTaWRlOjpU
b3A7CisgICAgICAgIHJldHVybiBQQUw6OkJveFNpZGU6OlRvcDsKICAgICBjYXNlIFNjcm9sbERp
cmVjdGlvbjo6U2Nyb2xsRG93bjoKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJvdHRvbTsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogICAgIGNhc2UgU2Nyb2xsRGlyZWN0
aW9uOjpTY3JvbGxMZWZ0OgotICAgICAgICByZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAgICAgICAg
cmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Ny
b2xsUmlnaHQ6Ci0gICAgICAgIHJldHVybiBCb3hTaWRlOjpSaWdodDsKKyAgICAgICAgcmV0dXJu
IFBBTDo6Qm94U2lkZTo6UmlnaHQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBCb3hTaWRlOjpUb3A7CisgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOwog
fQogCiBzdGF0aWMgRmxvYXRTaXplIHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aEJveC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmgKaW5k
ZXggYzA0N2E4OTllZjMzNThkMWYzZGU2MmI4YmRjODYxNDEwMzAzZmI0Ni4uNTQ2YWIxMTFmZmUz
OTUxZDA5ZWE0ZjYwN2RiMzdjMjhhNjNiMWQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGVuZ3RoQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
Qm94LmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUg
IlJlY3RFZGdlcy5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvV3JpdGluZ01vZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaAppbmRleCBkYmRmM2M3NGIxOTVhNTk2YmY0OTQzMmZh
ZTliMzIwZjBiNDMwM2I1Li42ZGVjYTQ5NjU2MjkwODk1YTY2ODM0Nzg0YTI4ODQyMzlmZjExZTA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgKQEAgLTQ1LDcgKzQ1
LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGJvb2wgdmlzaWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0Rl
ZmF1bHRBcHBlYXJhbmNlLCBMZW5ndGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlw
ZSBiYWNrZ3JvdW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51
VHlwZSBtZW51VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9w
dXBNZW51U2l6ZU5vcm1hbCkKKyAgICBQb3B1cE1lbnVTdHlsZShjb25zdCBDb2xvciYgZm9yZWdy
b3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBi
b29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5j
ZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBi
b29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3Jv
dW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51
VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6
ZU5vcm1hbCkKICAgICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAg
ICAsIG1fYmFja2dyb3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQp
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGlzcGxheU5vbmUoKSBjb25z
dCB7IHJldHVybiBtX2lzRGlzcGxheU5vbmU7IH0KICAgICBib29sIGhhc0RlZmF1bHRBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0QXBwZWFyYW5jZTsgfQogICAgIExlbmd0
aCB0ZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0SW5kZW50OyB9Ci0gICAgVGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RGlyZWN0aW9uOyB9
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X3RleHREaXJlY3Rpb247IH0KICAgICBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlOyB9CiAgICAgQmFja2dyb3Vu
ZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3Jv
dW5kQ29sb3JUeXBlOyB9CiAgICAgUG9wdXBNZW51VHlwZSBtZW51VHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVudVR5cGU7IH0KQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNEaXNwbGF5Tm9uZTsKICAgICBib29sIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7CiAgICAgTGVu
Z3RoIG1fdGV4dEluZGVudDsKLSAgICBUZXh0RGlyZWN0aW9uIG1fdGV4dERpcmVjdGlvbjsKKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gbV90ZXh0RGlyZWN0aW9uOwogICAgIGJvb2wgbV9oYXNUZXh0
RGlyZWN0aW9uT3ZlcnJpZGU7CiAgICAgQmFja2dyb3VuZENvbG9yVHlwZSBtX2JhY2tncm91bmRD
b2xvclR5cGU7CiAgICAgUG9wdXBNZW51VHlwZSBtX21lbnVUeXBlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9SZWN0RWRnZXMuaAppbmRleCAwZTEyMzAxOTMzNjM1NGQ3Y2VmMjdkMWZkZjdhNzMyMzYwNTE5
ZmFhLi5kMWUzNmEwMjkwYTRkYzhiYmUxNTEyZGNhNjRiYmNjZDMyMGY1NWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWN0RWRnZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9SZWN0RWRnZXMuaApAQCAtMjUsMTggKzI1LDE4IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKICNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRl
IDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ZW51bSBjbGFzcyBCb3hTaWRlRmxhZyA6IHVpbnQ4X3QgewotICAgIFRvcCAgICAgPSAxIDw8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihCb3hTaWRlOjpUb3ApLAotICAgIFJpZ2h0ICAgPSAxIDw8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihCb3hTaWRlOjpSaWdodCksCi0gICAgQm90dG9tICA9IDEgPDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJveFNpZGU6OkJvdHRvbSksCi0gICAgTGVmdCAgICA9IDEg
PDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJveFNpZGU6OkxlZnQpCisgICAgVG9wICAgICA9IDEg
PDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Qm94U2lkZTo6VG9wKSwKKyAgICBSaWdodCAg
ID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpCb3hTaWRlOjpSaWdodCksCisgICAg
Qm90dG9tICA9IDEgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Qm94U2lkZTo6Qm90dG9t
KSwKKyAgICBMZWZ0ICAgID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpCb3hTaWRl
OjpMZWZ0KQogfTsKIAogdXNpbmcgQm94U2lkZVNldCA9IE9wdGlvblNldDxCb3hTaWRlRmxhZz47
CkBAIC01Myw0MCArNTMsNDAgQEAgcHVibGljOgogICAgICAgICA6IG1fc2lkZXMoeyB7IHN0ZDo6
Zm9yd2FyZDxUPih0b3ApLCBzdGQ6OmZvcndhcmQ8VD4ocmlnaHQpLCBzdGQ6OmZvcndhcmQ8VD4o
Ym90dG9tKSwgc3RkOjpmb3J3YXJkPFQ+KGxlZnQpIH0gfSkKICAgICB7IH0KIAotICAgIFQmIGF0
KEJveFNpZGUgc2lkZSkgeyByZXR1cm4gbV9zaWRlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZGUp
XTsgfQotICAgIFQmIG9wZXJhdG9yW10oQm94U2lkZSBzaWRlKSB7IHJldHVybiBtX3NpZGVzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lkZSldOyB9Ci0gICAgVCYgdG9wKCkgeyByZXR1cm4gYXQoQm94
U2lkZTo6VG9wKTsgfQotICAgIFQmIHJpZ2h0KCkgeyByZXR1cm4gYXQoQm94U2lkZTo6UmlnaHQp
OyB9Ci0gICAgVCYgYm90dG9tKCkgeyByZXR1cm4gYXQoQm94U2lkZTo6Qm90dG9tKTsgfQotICAg
IFQmIGxlZnQoKSB7IHJldHVybiBhdChCb3hTaWRlOjpMZWZ0KTsgfQotCi0gICAgY29uc3QgVCYg
YXQoQm94U2lkZSBzaWRlKSBjb25zdCB7IHJldHVybiBtX3NpZGVzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lkZSldOyB9Ci0gICAgY29uc3QgVCYgb3BlcmF0b3JbXShCb3hTaWRlIHNpZGUpIGNvbnN0
IHsgcmV0dXJuIG1fc2lkZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KLSAgICBjb25z
dCBUJiB0b3AoKSBjb25zdCB7IHJldHVybiBhdChCb3hTaWRlOjpUb3ApOyB9Ci0gICAgY29uc3Qg
VCYgcmlnaHQoKSBjb25zdCB7IHJldHVybiBhdChCb3hTaWRlOjpSaWdodCk7IH0KLSAgICBjb25z
dCBUJiBib3R0b20oKSBjb25zdCB7IHJldHVybiBhdChCb3hTaWRlOjpCb3R0b20pOyB9Ci0gICAg
Y29uc3QgVCYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIGF0KEJveFNpZGU6OkxlZnQpOyB9Ci0KLSAg
ICB2b2lkIHNldEF0KEJveFNpZGUgc2lkZSwgY29uc3QgVCYgdikgeyBhdChzaWRlKSA9IHY7IH0K
LSAgICB2b2lkIHNldFRvcChjb25zdCBUJiB0b3ApIHsgc2V0QXQoQm94U2lkZTo6VG9wLCB0b3Ap
OyB9Ci0gICAgdm9pZCBzZXRSaWdodChjb25zdCBUJiByaWdodCkgeyBzZXRBdChCb3hTaWRlOjpS
aWdodCwgcmlnaHQpOyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oY29uc3QgVCYgYm90dG9tKSB7IHNl
dEF0KEJveFNpZGU6OkJvdHRvbSwgYm90dG9tKTsgfQotICAgIHZvaWQgc2V0TGVmdChjb25zdCBU
JiBsZWZ0KSB7IHNldEF0KEJveFNpZGU6OkxlZnQsIGxlZnQpOyB9Ci0KLSAgICBUJiBiZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUod3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0KSk7IH0KLSAg
ICBUJiBhZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGU6OkJsb2NrRW5k
KSk7IH0KLSAgICBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxT
aWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBM
b2dpY2FsQm94U2lkZTo6SW5saW5lU3RhcnQpKTsgfQotICAgIFQmIGVuZChXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIp
IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdy
aXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KLQot
ICAgIGNvbnN0IFQmIGJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1
cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJv
eFNpZGU6OkJsb2NrU3RhcnQpKTsgfQotICAgIGNvbnN0IFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRl
KHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZTo6QmxvY2tFbmQpKTsgfQotICAgIGNvbnN0IFQm
IHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IFRleHREaXJlY3Rpb246OkxUUikgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1Bo
eXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxC
b3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9Ci0gICAgY29uc3QgVCYgZW5kKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUikg
Y29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZs
b3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsg
fQotCi0gICAgdm9pZCBzZXRCZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgeyB0aGlzLT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9Ci0gICAgdm9p
ZCBzZXRBZnRlcihjb25zdCBUJiBhZnRlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhp
cy0+YWZ0ZXIod3JpdGluZ01vZGUpID0gYWZ0ZXI7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGNvbnN0
IFQmIHN0YXJ0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+c3RhcnQod3JpdGluZ01vZGUsIGRpcmVj
dGlvbikgPSBzdGFydDsgfQotICAgIHZvaWQgc2V0RW5kKGNvbnN0IFQmIGVuZCwgV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6
TFRSKSB7IHRoaXMtPmVuZCh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSA9IGVuZDsgfQorICAgIFQm
IGF0KFBBTDo6Qm94U2lkZSBzaWRlKSB7IHJldHVybiBtX3NpZGVzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lkZSldOyB9CisgICAgVCYgb3BlcmF0b3JbXShQQUw6OkJveFNpZGUgc2lkZSkgeyByZXR1
cm4gbV9zaWRlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZGUpXTsgfQorICAgIFQmIHRvcCgpIHsg
cmV0dXJuIGF0KFBBTDo6Qm94U2lkZTo6VG9wKTsgfQorICAgIFQmIHJpZ2h0KCkgeyByZXR1cm4g
YXQoUEFMOjpCb3hTaWRlOjpSaWdodCk7IH0KKyAgICBUJiBib3R0b20oKSB7IHJldHVybiBhdChQ
QUw6OkJveFNpZGU6OkJvdHRvbSk7IH0KKyAgICBUJiBsZWZ0KCkgeyByZXR1cm4gYXQoUEFMOjpC
b3hTaWRlOjpMZWZ0KTsgfQorCisgICAgY29uc3QgVCYgYXQoUEFMOjpCb3hTaWRlIHNpZGUpIGNv
bnN0IHsgcmV0dXJuIG1fc2lkZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KKyAgICBj
b25zdCBUJiBvcGVyYXRvcltdKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdCB7IHJldHVybiBtX3Np
ZGVzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lkZSldOyB9CisgICAgY29uc3QgVCYgdG9wKCkgY29u
c3QgeyByZXR1cm4gYXQoUEFMOjpCb3hTaWRlOjpUb3ApOyB9CisgICAgY29uc3QgVCYgcmlnaHQo
KSBjb25zdCB7IHJldHVybiBhdChQQUw6OkJveFNpZGU6OlJpZ2h0KTsgfQorICAgIGNvbnN0IFQm
IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGF0KFBBTDo6Qm94U2lkZTo6Qm90dG9tKTsgfQorICAg
IGNvbnN0IFQmIGxlZnQoKSBjb25zdCB7IHJldHVybiBhdChQQUw6OkJveFNpZGU6OkxlZnQpOyB9
CisKKyAgICB2b2lkIHNldEF0KFBBTDo6Qm94U2lkZSBzaWRlLCBjb25zdCBUJiB2KSB7IGF0KHNp
ZGUpID0gdjsgfQorICAgIHZvaWQgc2V0VG9wKGNvbnN0IFQmIHRvcCkgeyBzZXRBdChQQUw6OkJv
eFNpZGU6OlRvcCwgdG9wKTsgfQorICAgIHZvaWQgc2V0UmlnaHQoY29uc3QgVCYgcmlnaHQpIHsg
c2V0QXQoUEFMOjpCb3hTaWRlOjpSaWdodCwgcmlnaHQpOyB9CisgICAgdm9pZCBzZXRCb3R0b20o
Y29uc3QgVCYgYm90dG9tKSB7IHNldEF0KFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBib3R0b20pOyB9
CisgICAgdm9pZCBzZXRMZWZ0KGNvbnN0IFQmIGxlZnQpIHsgc2V0QXQoUEFMOjpCb3hTaWRlOjpM
ZWZ0LCBsZWZ0KTsgfQorCisgICAgVCYgYmVmb3JlKFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUs
IFBBTDo6TG9naWNhbEJveFNpZGU6OkJsb2NrU3RhcnQpKTsgfQorICAgIFQmIGFmdGVyKFBBTDo6
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUod3JpdGluZ01vZGUsIFBBTDo6TG9naWNhbEJveFNpZGU6OkJsb2NrRW5kKSk7IH0K
KyAgICBUJiBzdGFydChQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJl
Y3Rpb24pLCBQQUw6OkxvZ2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9CisgICAgVCYgZW5k
KFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVU
b1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIFBBTDo6
TG9naWNhbEJveFNpZGU6OklubGluZUVuZCkpOyB9CisKKyAgICBjb25zdCBUJiBiZWZvcmUoUEFM
OjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNp
ZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6QmxvY2tT
dGFydCkpOyB9CisgICAgY29uc3QgVCYgYWZ0ZXIoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5n
TW9kZSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6QmxvY2tFbmQpKTsgfQorICAgIGNvbnN0IFQmIHN0
YXJ0KFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgY29uc3QgeyByZXR1cm4gYXQobWFwTG9n
aWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlv
biksIFBBTDo6TG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0KSk7IH0KKyAgICBjb25zdCBUJiBl
bmQoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dp
Y2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9u
KSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KKworICAgIHZvaWQgc2V0QmVm
b3JlKGNvbnN0IFQmIGJlZm9yZSwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyB0aGlz
LT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9CisgICAgdm9pZCBzZXRBZnRlcihjb25z
dCBUJiBhZnRlciwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyB0aGlzLT5hZnRlcih3
cml0aW5nTW9kZSkgPSBhZnRlcjsgfQorICAgIHZvaWQgc2V0U3RhcnQoY29uc3QgVCYgc3RhcnQs
IFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyB0aGlzLT5zdGFydCh3cml0aW5nTW9kZSwg
ZGlyZWN0aW9uKSA9IHN0YXJ0OyB9CisgICAgdm9pZCBzZXRFbmQoY29uc3QgVCYgZW5kLCBQQUw6
OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+ZW5kKHdyaXRpbmdNb2RlLCBkaXJlY3Rp
b24pID0gZW5kOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVjdEVkZ2VzJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9zaWRlcyA9PSBvdGhlci5tX3NpZGVzOyB9CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFJlY3RFZGdlcyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2lkZXMg
IT0gb3RoZXIubV9zaWRlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwCmluZGV4IGI3YzE3NjIyNThjYmRjNTQ3NmQ3ZGNhMGFjOTE1NzVhOTQ1YWViMjguLjQ2
NWY5NDk1NmJmZTgyZDQ5MTYyZDc0YzliYWY1OGFkZGJjNjUxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBSZWN0RWRn
ZXM8Ym9vbD4gU2Nyb2xsQW5pbWF0b3I6OmVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZWRnZVBpbm5lZFN0YXRlKCk7CiB9CiAKLWJvb2wgU2Nyb2xs
QW5pbWF0b3I6OmlzUGlubmVkT25TaWRlKEJveFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xs
QW5pbWF0b3I6OmlzUGlubmVkT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAogewogICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmlzUGlubmVkT25TaWRlKHNpZGUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZDUyMWVhM2EzNjNhYWViMDFl
ODdlMjMyZjhmM2NjMjEzM2Y4N2MxMy4uZjdjMDY3ZTk5NDllZGFmZWE3YzYxNzNhZjhhNzliZDY2
OThlMmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0x
NTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICNpZiBIQVZFKFJVQkJFUl9CQU5ESU5HKQogICAgIElu
dFNpemUgc3RyZXRjaEFtb3VudCgpIGNvbnN0IGZpbmFsOwogICAgIFJlY3RFZGdlczxib29sPiBl
ZGdlUGlubmVkU3RhdGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUGlubmVkT25TaWRlKEJv
eFNpZGUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQaW5uZWRPblNpZGUoUEFMOjpCb3hTaWRl
KSBjb25zdCBmaW5hbDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDdiY2NlYmY4MGVjZTc4MTQ3MDJm
YjUxNTFlNGY5NTk1ZDcxZjk5OTIuLmQ5MzBhY2ZjYTBkMDkyMmU2Y2E4MDc3MjAxYzhhODc5Mzk1
MDc3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAg
LTU3NCwyMiArNTc0LDIyIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRvUG9zdFRodW1iTW92ZVNu
YXBwaW5nKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogICAgIHNjcm9sbEFuaW1h
dG9yLT5zY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihwb3NpdGlvbik7CiB9CiAKLWJvb2wg
U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkT25TaWRlKEJveFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wg
U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAog
ewogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgIGNhc2Ug
UEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTY3JvbGxpbmco
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRp
b24oKS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOwotICAgIGNhc2UgQm94U2lk
ZTo6Qm90dG9tOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgIGlmICgh
YWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS55KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpOwotICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6
TGVmdDoKICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueCgpIDw9
IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0Ogor
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9u
dGFsU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IHNjcm9sbFBvc2l0aW9uKCkueCgpID49IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKQEAg
LTc3OSwyMyArNzc5LDIzIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxiYXJW
YWx1ZUFuZE92ZXJoYW5nKGZsb2F0IGN1cnJlbnRQb3NpdGlvbiwgZmxvCiAgICAgfQogfQogCi1z
dGQ6Om9wdGlvbmFsPEJveFNpZGU+IFNjcm9sbGFibGVBcmVhOjp0YXJnZXRTaWRlRm9yU2Nyb2xs
RGVsdGEoRmxvYXRTaXplIGRlbHRhLCBTY3JvbGxFdmVudEF4aXMgYXhpcykKK3N0ZDo6b3B0aW9u
YWw8UEFMOjpCb3hTaWRlPiBTY3JvbGxhYmxlQXJlYTo6dGFyZ2V0U2lkZUZvclNjcm9sbERlbHRh
KEZsb2F0U2l6ZSBkZWx0YSwgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCiB7CiAgICAgc3dpdGNoIChh
eGlzKSB7CiAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6CiAgICAgICAgIGlm
IChkZWx0YS53aWR0aCgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpMZWZ0Owor
ICAgICAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKIAogICAgICAgICBpZiAoZGVs
dGEud2lkdGgoKSA+IDApCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6UmlnaHQ7CisgICAg
ICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpSaWdodDsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWw6CiAgICAgICAgIGlmIChkZWx0YS5oZWln
aHQoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOworICAgICAgICAgICAg
cmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOwogCiAgICAgICAgIGlmIChkZWx0YS5oZWlnaHQoKSA+
IDApCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6Qm90dG9tOworICAgICAgICAgICAgcmV0
dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IGFiNzQ1YzRiYmE5ZjIzZTE4
YWJhM2NmMTM2ZTNlOTE1MzEwYjkwNTEuLmMzZGViMDk1YzcyZTMwMTE2NmU1MWY2ZjQ2YTk5ZTQ5
NzdlNTVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAt
MzM3LDEwICszMzcsMTAgQEAgcHVibGljOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgc3RhdGlj
IHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZCBvciB0aGUgc2Ny
b2xsaW5nIHRocmVhZC4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjb21wdXRlU2Ny
b2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhmbG9hdCBjdXJyZW50UG9zaXRpb24sIGZsb2F0IHRvdGFs
U2l6ZSwgZmxvYXQgdmlzaWJsZVNpemUsIGZsb2F0JiBkb3VibGVWYWx1ZSwgZmxvYXQmIG92ZXJo
YW5nQW1vdW50KTsKIAotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJveFNpZGU+IHRhcmdldFNp
ZGVGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUsIFNjcm9sbEV2ZW50QXhpcyk7CisgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiB0YXJnZXRTaWRlRm9yU2Nyb2xsRGVsdGEoRmxv
YXRTaXplLCBTY3JvbGxFdmVudEF4aXMpOwogCiAgICAgLy8gIlBpbm5lZCIgbWVhbnMgc2Nyb2xs
ZWQgYXQgb3IgYmV5b25kIHRoZSBlZGdlLgotICAgIGJvb2wgaXNQaW5uZWRPblNpZGUoQm94U2lk
ZSkgY29uc3Q7CisgICAgYm9vbCBpc1Bpbm5lZE9uU2lkZShQQUw6OkJveFNpZGUpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFJlY3RFZGdlczxib29sPiBlZGdlUGlubmVkU3RhdGUoKSBjb25z
dDsKIAogICAgIC8vIFRydWUgaWYgc2Nyb2xsaW5nIGhhcHBlbnMgYnkgbW92aW5nIGNvbXBvc2l0
aW5nIGxheWVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlci5oCmluZGV4IGM3YTNhMmY4NWVhMGVkNWE3YzZhOTRiZTFiZjM1NzI4
YjE4Yzg4ZjMuLmEzZTk0ODlkYjRjMzNkNTUyZDlhNmExYTQ5N2JiMGNhYTgxZTUwZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXIuaApAQCAtOTUsMTAgKzk1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFNpemUgc3Ry
ZXRjaEFtb3VudCgpIGNvbnN0ID0gMDsKIAogICAgIC8vICJQaW5uZWQiIG1lYW5zIHNjcm9sbGVk
IGF0IG9yIGJleW9uZCB0aGUgZWRnZS4KLSAgICB2aXJ0dWFsIGJvb2wgaXNQaW5uZWRPblNpZGUo
Qm94U2lkZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1Bpbm5lZE9uU2lkZShQQUw6
OkJveFNpZGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlY3RFZGdlczxib29sPiBlZGdlUGlu
bmVkU3RhdGUoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFu
ZE9uU2lkZShCb3hTaWRlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJl
ckJhbmRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbFN0YXJ0UnViYmVyQmFuZEFuaW1hdGlvbigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRT
dG9wUnViYmVyQmFuZEFuaW1hdGlvbigpIHsgfQpAQCAtMjExLDcgKzIxMSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB3aWxsU3RhcnRSdWJiZXJCYW5kQW5pbWF0aW9uKCk7CiAgICAgdm9pZCBkaWRT
dG9wUnViYmVyQmFuZEFuaW1hdGlvbigpOwogCi0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kT25T
aWRlKEJveFNpZGUpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6
OkJveFNpZGUpIGNvbnN0OwogICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFs
KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKICAgICB2b2lk
IHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQppbmRleCBlMzhk
YWY4ODVhMzY0N2MwMGZjNDk5YjA1NGYwZGJkZTk0MzkzN2JhLi40MmYwNGVjMzc2YjAxZmM0ODQ0
YmE2NTExZTM3OWQ2MjJlZmRiZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQpAQCAtMjkwLDcgKzI5MCw3IEBAIExpbmtJbWFnZUxheW91
dDo6TGlua0ltYWdlTGF5b3V0KFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlU3RyaW5nKQog
ICAgIGJvdW5kaW5nUmVjdC5zZXRIZWlnaHQoKHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdSZWN0
LmhlaWdodCgpIC8gMikgKiAyKSk7CiB9CiAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBU
ZXh0SW5kaWNhdG9yRGF0YSYsIEZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcikKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGVsZW1l
bnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNhdG9yRGF0YSYsIFBB
TDo6Rm9udFJlbmRlcmluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIExp
bmtJbWFnZUxheW91dCBsYXlvdXQodXJsLCB0aXRsZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggMGQ5NzEzNmQwYTY0MzMyMDVhZGVjMzU4YWE5MmM0YTliMDY5YjNhNC4uZGE5
ODJhMDhjNjZhYjkwNDkzOGNiNWNkZDFkZmYzMmYxNGMwNjdmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dC5jcHAKQEAgLTM3OCw3ICszNzgsNyBAQCBGbG9hdFNpemUgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0CiAg
ICAgcmV0dXJuIHNpemU7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKICAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVt
R2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZv
bnRTbW9vdGhpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAppbmRleCA0YzdmNDhhNmNm
MDQ3YzMzOTJlZWVkMmYyYzdhOGY1OGFiODUyMWNkLi4wMDgzNWExMDQxZDgzNzdhNjRkNWY0ZGFm
OTZiZWI1M2FhMTg1Y2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjgsNyArMTI4
LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZy
b20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIFBBTDo6Rm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7CiAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZDFjNTM3NDky
OWE2Y2JjMzhiZTBhY2UzNmM3Y2U2Y2Y4YTAwMmJhYS4uZmFmMTE4MTMwYjViM2IzNDk0Y2I4MTJi
Mjc2ZDFmMzQ3Mjk2ZjBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgi
CiAKLSNpbmNsdWRlICJDaGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQv
Q2hhcmFjdGVyUHJvcGVydGllcy5oPgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKQEAgLTEwNSw3ICsxMDUs
NyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVu
aXR5KCkKICAgICBpZiAoIW1fZXhwYW5zaW9uKQogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5ID0gMDsKICAgICBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVu
LnRleHQoKSwgbV9ydW4ubHRyKCkgPyBUZXh0RGlyZWN0aW9uOjpMVFIgOiBUZXh0RGlyZWN0aW9u
OjpSVEwsIG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkpLmZpcnN0OworICAgICAgICB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9y
KCkpLmZpcnN0OwogCiAgICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKICAg
ICAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwpAQCAtMjc2LDkgKzI3Niw5
IEBAIHN0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIENvbnN1bWUgbWFya3MuCi0gICAgYm9vbCBzYXdFbW9qaUdyb3VwQ2FuZGlkYXRlID0gaXNF
bW9qaUdyb3VwQ2FuZGlkYXRlKGJhc2VDaGFyYWN0ZXIpOworICAgIGJvb2wgc2F3RW1vamlHcm91
cENhbmRpZGF0ZSA9IFBBTDo6aXNFbW9qaUdyb3VwQ2FuZGlkYXRlKGJhc2VDaGFyYWN0ZXIpOwog
ICAgIGJvb2wgc2F3Sm9pbmVyID0gZmFsc2U7Ci0gICAgYm9vbCBzYXdSZWdpb25hbEluZGljYXRv
ciA9IGlzRW1vamlSZWdpb25hbEluZGljYXRvcihiYXNlQ2hhcmFjdGVyKTsKKyAgICBib29sIHNh
d1JlZ2lvbmFsSW5kaWNhdG9yID0gUEFMOjppc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IoYmFzZUNo
YXJhY3Rlcik7CiAgICAgd2hpbGUgKGl0ZXJhdG9yIDwgZW5kKSB7CiAgICAgICAgIFVDaGFyMzIg
bmV4dENoYXJhY3RlcjsKICAgICAgICAgdW5zaWduZWQgbWFya0xlbmd0aCA9IDA7CkBAIC0yODYs
MTUgKzI4NiwxNSBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQnlDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciomIGl0ZXJhdG9yLCBjb25zdCBVQwogICAgICAgICBBU1NFUlQoZW5k
ID49IGl0ZXJhdG9yKTsKICAgICAgICAgVTE2X05FWFQoaXRlcmF0b3IsIG1hcmtMZW5ndGgsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihlbmQgLSBpdGVyYXRvciksIG5leHRDaGFyYWN0ZXIpOwogCi0g
ICAgICAgIGlmIChpc1ZhcmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IGlzRW1vamlG
aXR6cGF0cmlja01vZGlmaWVyKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICBpZiAoUEFMOjppc1Zh
cmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IFBBTDo6aXNFbW9qaUZpdHpwYXRyaWNr
TW9kaWZpZXIobmV4dENoYXJhY3RlcikpCiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRy
dWU7CiAKLSAgICAgICAgaWYgKHNhd1JlZ2lvbmFsSW5kaWNhdG9yICYmIGlzRW1vamlSZWdpb25h
bEluZGljYXRvcihuZXh0Q2hhcmFjdGVyKSkgeworICAgICAgICBpZiAoc2F3UmVnaW9uYWxJbmRp
Y2F0b3IgJiYgUEFMOjppc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IobmV4dENoYXJhY3RlcikpIHsK
ICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgICAgIHNhd1JlZ2lv
bmFsSW5kaWNhdG9yID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2F3Sm9pbmVy
ICYmIGlzRW1vamlHcm91cENhbmRpZGF0ZShuZXh0Q2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKHNh
d0pvaW5lciAmJiBQQUw6OmlzRW1vamlHcm91cENhbmRpZGF0ZShuZXh0Q2hhcmFjdGVyKSkKICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKIAogICAgICAgICBzYXdKb2luZXIgPSBm
YWxzZTsKQEAgLTMyNiw3ICszMjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8VUNo
YXIzMj4gY2FwaXRhbGl6ZWQoVUNoYXIzMiBiYXNlQ2hhcmFjdGVyKQogICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFN5bnRoZXNpemUoYm9vbCBkb250U3lu
dGhlc2l6ZVNtYWxsQ2FwcywgY29uc3QgRm9udCogbmV4dEZvbnQsIFVDaGFyMzIgYmFzZUNoYXJh
Y3Rlciwgc3RkOjpvcHRpb25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZEJhc2UsIEZvbnRWYXJpYW50
Q2FwcyBmb250VmFyaWFudENhcHMsIGJvb2wgZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZykK
K3N0YXRpYyBib29sIHNob3VsZFN5bnRoZXNpemUoYm9vbCBkb250U3ludGhlc2l6ZVNtYWxsQ2Fw
cywgY29uc3QgRm9udCogbmV4dEZvbnQsIFVDaGFyMzIgYmFzZUNoYXJhY3Rlciwgc3RkOjpvcHRp
b25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZEJhc2UsIFBBTDo6Rm9udFZhcmlhbnRDYXBzIGZvbnRW
YXJpYW50Q2FwcywgYm9vbCBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nKQogewogICAgIGlm
IChkb250U3ludGhlc2l6ZVNtYWxsQ2FwcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzU1
LDkgKzM1NSw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRl
eHRSdW5zKCkKICAgICAgICAgY3AgPSBtX3J1bi5jaGFyYWN0ZXJzMTYoKTsKIAogICAgIGF1dG8g
Zm9udFZhcmlhbnRDYXBzID0gbV9mb250LmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDYXBzKCk7
Ci0gICAgYm9vbCBkb250U3ludGhlc2l6ZVNtYWxsQ2FwcyA9ICFzdGF0aWNfY2FzdDxib29sPiht
X2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRoZXNpcygpICYgRm9udFN5bnRoZXNpc1Nt
YWxsQ2Fwcyk7Ci0gICAgYm9vbCBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nID0gZm9udFZh
cmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGwgfHwgZm9udFZhcmlhbnRDYXBz
ID09IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOwotICAgIGJvb2wgZW5nYWdlU21hbGxDYXBz
UHJvY2Vzc2luZyA9IGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgfHwgZm9udFZhcmlhbnRD
YXBzID09IEZvbnRWYXJpYW50Q2Fwczo6U21hbGwgfHwgZm9udFZhcmlhbnRDYXBzID09IEZvbnRW
YXJpYW50Q2Fwczo6UGV0aXRlOworICAgIGJvb2wgZG9udFN5bnRoZXNpemVTbWFsbENhcHMgPSAh
c3RhdGljX2Nhc3Q8Ym9vbD4obV9mb250LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMo
KSAmIFBBTDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2Fwcyk7CisgICAgYm9vbCBlbmdhZ2VBbGxTbWFs
bENhcHNQcm9jZXNzaW5nID0gZm9udFZhcmlhbnRDYXBzID09IFBBTDo6Rm9udFZhcmlhbnRDYXBz
OjpBbGxTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OkFs
bFBldGl0ZTsKKyAgICBib29sIGVuZ2FnZVNtYWxsQ2Fwc1Byb2Nlc3NpbmcgPSBlbmdhZ2VBbGxT
bWFsbENhcHNQcm9jZXNzaW5nIHx8IGZvbnRWYXJpYW50Q2FwcyA9PSBQQUw6OkZvbnRWYXJpYW50
Q2Fwczo6U21hbGwgfHwgZm9udFZhcmlhbnRDYXBzID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQ
ZXRpdGU7CiAKICAgICBpZiAoZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBlbmdhZ2VT
bWFsbENhcHNQcm9jZXNzaW5nKQogICAgICAgICBtX3NtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobV9l
bmQpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgc3RhdGljIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwg
Ym9vbD4gZXhwYW5zaW9uTG9jYXRpb24oYm9vbCBpZGVvZ3JhcGgsIGJvb2wgdHJlYXQKIAogdm9p
ZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkKIHsKLSAg
ICBib29sIGFmdGVyRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0
RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVmdEV4cGFuc2lvbjsKKyAgICBib29sIGFmdGVyRXhw
YW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25N
YXNrKSA9PSBQQUw6OkZvcmJpZExlZnRFeHBhbnNpb247CiAgICAgc2l6ZV90IHJ1bkNvdW50ID0g
bV9jb21wbGV4VGV4dFJ1bnMuc2l6ZSgpOwogICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gKG1f
Zm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5nKCkgfHwgbV9leHBhbnNp
b24pICYmICFtX3J1bi5zcGFjaW5nRGlzYWJsZWQoKTsKLSAgICBib29sIHJ1bkZvcmNlc0xlZnRF
eHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNr
KSA9PSBGb3JjZUxlZnRFeHBhbnNpb247Ci0gICAgYm9vbCBydW5Gb3JjZXNSaWdodEV4cGFuc2lv
biA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUmlnaHRFeHBhbnNpb25NYXNrKSA9PSBG
b3JjZVJpZ2h0RXhwYW5zaW9uOwotICAgIGJvb2wgcnVuRm9yYmlkc0xlZnRFeHBhbnNpb24gPSAo
bV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRM
ZWZ0RXhwYW5zaW9uOwotICAgIGJvb2wgcnVuRm9yYmlkc1JpZ2h0RXhwYW5zaW9uID0gKG1fcnVu
LmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBSaWdodEV4cGFuc2lvbk1hc2spID09IEZvcmJpZFJpZ2h0
RXhwYW5zaW9uOworICAgIGJvb2wgcnVuRm9yY2VzTGVmdEV4cGFuc2lvbiA9IChtX3J1bi5leHBh
bnNpb25CZWhhdmlvcigpICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JjZUxl
ZnRFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JjZXNSaWdodEV4cGFuc2lvbiA9IChtX3J1bi5l
eHBhbnNpb25CZWhhdmlvcigpICYgUEFMOjpSaWdodEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9y
Y2VSaWdodEV4cGFuc2lvbjsKKyAgICBib29sIHJ1bkZvcmJpZHNMZWZ0RXhwYW5zaW9uID0gKG1f
cnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQQUw6
OkZvcmJpZExlZnRFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JiaWRzUmlnaHRFeHBhbnNpb24g
PSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSA9
PSBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uOwogCiAgICAgLy8gV2UgYXJlIGl0ZXJhdGluZyBp
biBnbHlwaCBvcmRlciwgbm90IHN0cmluZyBvcmRlci4gQ29tcGFyZSB0aGlzIHRvIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2VJbnRlcm5hbCgpCiAgICAgZm9yIChzaXplX3QgcnVuSW5kZXggPSAwOyBy
dW5JbmRleCA8IHJ1bkNvdW50OyArK3J1bkluZGV4KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDFkMGU4Nzkw
ZGEzNWMwODFhODBiZWYxYjFlNzFhM2I3ZDlmNTEzN2MuLmVhMzI3NTEzZjUzYTcyMThlMThhNzU2
MzliZDQ1YWFlZjI3YmIzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQ
YXR0ZXJuLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4
dEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjaWYgVVNFKENPUkVfVEVY
VCkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRGVyaXZlRm9udEZy
b21Db250ZXh0IDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBleHBsaWNpdCBEcmF3R2x5cGhzUmVj
b3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObywgRGVyaXZlRm9udEZyb21Db250ZXh0ID0gRGVyaXZlRm9udEZyb21D
b250ZXh0OjpObyk7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9kZSk7CiAKICNpZiBV
U0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05hdGl2ZVRleHQo
Q1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBsaW5lUmVjdCk7
CkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIHZvaWQgcG9wdWxhdGVJbnRl
cm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBh
cmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2
b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYsIFBBTDo6Rm9udFNtb290aGlu
Z01vZGUpOwogICAgIHZvaWQgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKIAogICAgIHZvaWQg
dXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVy
biogPSBudWxscHRyKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKLSAgICBGb250U21vb3Ro
aW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGlu
ZyB9OworICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgUEFMOjpG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAogICAgIHN0cnVjdCBTdGF0ZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDE3YjM1MmY4OTc0MjcyOThmNWRkMGI4
ZGZiOTY5MDc4Nzk1ZDMzN2MuLmZjYTlhNDIyODVjYzUzMDRmN2Q0M2JlODM4ODA2YzcwZDk3Mzk1
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKLSNpbmNsdWRlICJD
aGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVy
dGllcy5oPgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtOTksNyArOTksNyBAQCBG
b250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgT3JpZ2luIG9y
aWdpbiwgSW50ZXJzdGl0aWFsIGludAogICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7CiAgICAgcGxh
dGZvcm1DaGFyV2lkdGhJbml0KCk7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAg
IGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsICYmIG9yaWVudGF0aW9uRmFsbGJhY2sgPT0gT3JpZW50YXRpb25GYWxsYmFjazo6Tm8pIHsK
KyAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRp
b246OlZlcnRpY2FsICYmIG9yaWVudGF0aW9uRmFsbGJhY2sgPT0gT3JpZW50YXRpb25GYWxsYmFj
azo6Tm8pIHsKICAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBmb250Q2FjaGVGb3JWZXJ0aWNhbERh
dGEgPyBmb250Q2FjaGVGb3JWZXJ0aWNhbERhdGEtPnZlcnRpY2FsRGF0YShwbGF0Zm9ybURhdGEp
IDogRm9udENhY2hlOjpzaW5nbGV0b24oKS52ZXJ0aWNhbERhdGEocGxhdGZvcm1EYXRhKTsKICAg
ICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVy
dGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKICAgICB9CkBAIC00NTIsNyArNDUyLDcg
QEAgY29uc3QgRm9udCYgRm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0
CiB7CiAgICAgRGVyaXZlZEZvbnRzJiBkZXJpdmVkRm9udERhdGEgPSBlbnN1cmVEZXJpdmVkRm9u
dERhdGEoKTsKICAgICBpZiAoIWRlcml2ZWRGb250RGF0YS52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRp
b25Gb250KSB7Ci0gICAgICAgIGF1dG8gdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSA9IEZvbnRQ
bGF0Zm9ybURhdGE6OmNsb25lV2l0aE9yaWVudGF0aW9uKG1fcGxhdGZvcm1EYXRhLCBGb250T3Jp
ZW50YXRpb246Okhvcml6b250YWwpOworICAgICAgICBhdXRvIHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEgPSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihtX3BsYXRmb3Jt
RGF0YSwgUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwpOwogICAgICAgICBkZXJpdmVk
Rm9udERhdGEudmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCA9IGNyZWF0ZSh2ZXJ0aWNhbFJp
Z2h0UGxhdGZvcm1EYXRhLCBvcmlnaW4oKSwgSW50ZXJzdGl0aWFsOjpObywgVmlzaWJpbGl0eTo6
VmlzaWJsZSwgT3JpZW50YXRpb25GYWxsYmFjazo6WWVzKTsKICAgICB9CiAgICAgQVNTRVJUKGRl
cml2ZWRGb250RGF0YS52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250ICE9IHRoaXMpOwpAQCAt
NTU3LDcgKzU1Nyw3IEBAIFJlZlB0cjxGb250PiBGb250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hCiB9CiAKICNpZiAhVVNFKENP
UkVfVEVYVCkKLUdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcm
LCBTdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uKSBjb25zdAorR2x5cGhCdWZmZXJBZHZhbmNlIEZv
bnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9v
bCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlv
bikgY29uc3QKIHsKICAgICByZXR1cm4gbWFrZUdseXBoQnVmZmVyQWR2YW5jZSgpOwogfQpAQCAt
NjQzLDEzICs2NDMsMTMgQEAgdm9pZCBGb250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCi1ib29sIEZv
bnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRD
YXBzIGZvbnRWYXJpYW50Q2FwcywgVUNoYXIzMikgY29uc3QKK2Jvb2wgRm9udDo6dmFyaWFudENh
cHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhQQUw6OkZvbnRWYXJpYW50Q2FwcyBmb250
VmFyaWFudENhcHMsIFVDaGFyMzIpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChmb250VmFyaWFudENh
cHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0g
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRDYXBzOjpTbWFsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgpAQCAtNjg5LDcgKzY4OSw3IEBAIGJvb2wgRm9udDo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsCiAgICAgICAgIGF1dG8gY29kZVBvaW50ID0gKml0OwogICAgICAgICArK2l0
OwogCi0gICAgICAgIGlmIChpdCAhPSBlbmQgJiYgaXNWYXJpYXRpb25TZWxlY3RvcigqaXQpKSB7
CisgICAgICAgIGlmIChpdCAhPSBlbmQgJiYgUEFMOjppc1ZhcmlhdGlvblNlbGVjdG9yKCppdCkp
IHsKICAgICAgICAgICAgIGlmICghcGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChjb2RlUG9pbnQs
ICppdCkpIHsKICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIGNoYXJhY3RlcnMgaW5kaXZpZHVh
bGx5LgogICAgICAgICAgICAgICAgIGlmICghc3VwcG9ydHNDb2RlUG9pbnQoY29kZVBvaW50KSB8
fCAhc3VwcG9ydHNDb2RlUG9pbnQoKml0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCA5ZmM0ZWE4MmViYmM3N2VhZDkwMTA4NTQzODA4MjllMTViYmFiNmY0Li43
ZmI4MDA5MzE5ZDNhMWY0NDAzMzIxNWIyYWEyMjMxZjY3ZjNmMjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gY29uc3RfY2FzdDxGb250Kj4odGhpcyk7CiAgICAgfQogCi0gICAgYm9vbCB2
YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2Fwcywg
VUNoYXIzMikgY29uc3Q7CisgICAgYm9vbCB2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9y
U3ludGhlc2lzKFBBTDo6Rm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyKSBjb25zdDsKIAogICAgIGNv
bnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdDsKICAgICBjb25z
dCBGb250JiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CkBAIC0xODUsNyArMTg1LDcg
QEAgcHVibGljOgogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGdldENGU3RyaW5nQXR0cmlidXRlcyhib29sIGVuYWJs
ZUtlcm5pbmcsIEZvbnRPcmllbnRhdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlKSBjb25z
dDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMo
Ym9vbCBlbmFibGVLZXJuaW5nLCBQQUw6OkZvbnRPcmllbnRhdGlvbiwgY29uc3QgQXRvbVN0cmlu
ZyYgbG9jYWxlKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5
U21hbGxDYXBzKCkgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRC
eUFsbFNtYWxsQ2FwcygpIGNvbnN0OwogICAgIGNvbnN0IEJpdFZlY3RvciYgZ2x5cGhzU3VwcG9y
dGVkQnlQZXRpdGVDYXBzKCkgY29uc3Q7CkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKLSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWdu
ZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJl
c1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0
RGlyZWN0aW9uKSBjb25zdDsKKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFuc2Zvcm1z
KEdseXBoQnVmZmVyJiwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVn
aW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHRE
aXJlY3Rpb24pIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhl
IGdseXBocyBhcmUgT1QtU1ZHIGdseXBocy4KICAgICBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4g
ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCB1bnNpZ25lZCBjb3VudCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmlu
ZGV4IDllYzU0ZjYzYjNhYmNlOWQwM2VhNjYwZWZmMTVkYTM5OTYyMzUyMDIuLmM1M2Q2MjI0YjI3
ZTQwZjBiYjQxNzk0NjlkODRjOTUxNmVmNGM5OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xNzYsNyArMTc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgdW5zaWduZWQgZmlyc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24u
c2NyaXB0KCkpIDw8IDE1CiAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNj
cmlwdGlvbi5zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZygpKSA8PCAxNAogICAgICAg
ICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMoKSkgPDwgMTMKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRlc2NyaXB0aW9uLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50KSA8
PCAxMgorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uZm9u
dFN0eWxlQXhpcygpID09IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudCkgPDwgMTIKICAgICAgICAg
ICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLm9wdGljYWxTaXppbmcoKSkg
PDwgMTEKICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnRl
eHRSZW5kZXJpbmdNb2RlKCkpIDw8IDkKICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRlc2NyaXB0aW9uLmZvbnRTeW50aGVzaXMoKSkgPDwgNgpAQCAtMzEyLDcgKzMxMiw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3Rv
ciBjYW4gaGF2ZSBhIHVuaWZpZWQgbm90aW9uIG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZv
bnQtZmFjZS4KICAgICAvLyBJdCBjb21lcyBpbnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBm
b250LWZhY2Ugd2hpY2ggc2hhcmVzIGEgZmFtaWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9u
dC4KLSAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyk7CisgICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgUEFMOjpBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4g
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBGb250Q3JlYXRpb25Db250ZXh0JiA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
PSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggNmMxZDM0NzNkNTc1MThhYjgzMTgy
MjhhOTA0NzhjNzJiZWFhNDc4MC4uZDc1NTdlNWUxYzMwZWY2MDRhZjI5NGRkNzk5OTU2ZTkyMjEy
YTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAKLSNpbmNsdWRlICJDaGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5j
bHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oPgogI2luY2x1ZGUgIkNvbXBsZXhU
ZXh0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0zMDEsNyArMzAxLDcgQEAgZmxvYXQgRm9udENhc2Nh
ZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxi
YWNrRm9udHMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdW
aWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAogewogICAg
IGlmICh0ZXh0LmlzTnVsbCgpIHx8IHRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTMzOSw3ICszMzksNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
KFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aQogR2x5cGhEYXRhIEZv
bnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwg
Rm9udFZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFy
aWFudCkgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBG
b250VmFyaWFudENhcHM6OlNtYWxsKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi52
YXJpYW50Q2FwcygpID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbCkgewogICAgICAgICAg
ICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJD
ICE9IGMpIHsKICAgICAgICAgICAgICAgICBjID0gdXBwZXJDOwpAQCAtNzI2LDkgKzcyNiw5IEBA
IEZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVyCiAgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNo
YXJhY3RlciA8PSAweDFGMUZGKQogICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUGF0aDo6Q29t
cGxleDsKIAotICAgICAgICAgICAgaWYgKGlzRW1vamlGaXR6cGF0cmlja01vZGlmaWVyKHN1cHBs
ZW1lbnRhcnlDaGFyYWN0ZXIpKQorICAgICAgICAgICAgaWYgKFBBTDo6aXNFbW9qaUZpdHpwYXRy
aWNrTW9kaWZpZXIoc3VwcGxlbWVudGFyeUNoYXJhY3RlcikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIENvZGVQYXRoOjpDb21wbGV4OwotICAgICAgICAgICAgaWYgKGlzRW1vamlHcm91cENhbmRp
ZGF0ZShzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgaWYgKFBBTDo6aXNF
bW9qaUdyb3VwQ2FuZGlkYXRlKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIpKSB7CiAgICAgICAgICAg
ICAgICAgcHJldmlvdXNDaGFyYWN0ZXJJc0Vtb2ppR3JvdXBDYW5kaWRhdGUgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtOTYzLDE1ICs5NjMsMTUg
QEAgYm9vbCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCiAg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQorc3RkOjpwYWlyPHVuc2ln
bmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBBTDo6VGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ip
CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9
IChleHBhbnNpb25CZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhw
YW5zaW9uOwotICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0RXhwYW5zaW9uTWFzaykg
PT0gRm9yY2VMZWZ0RXhwYW5zaW9uKSB7CisgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4
cGFuc2lvbkJlaGF2aW9yICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JiaWRM
ZWZ0RXhwYW5zaW9uOworICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBh
bnNpb25NYXNrKSA9PSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbikgewogICAgICAgICArK2NvdW50
OwogICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGRpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ld
KSkgewogICAgICAgICAgICAgICAgIGNvdW50Kys7CkBAIC05ODgsMTAgKzk4OCwxMCBAQCBzdGQ6
OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoY29uc3QgTAogICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4
cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVJpZ2h0RXhwYW5z
aW9uKSB7CisgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAm
IFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmNlUmlnaHRFeHBhbnNpb24pIHsK
ICAgICAgICAgKytjb3VudDsKICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAg
fSBlbHNlIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFJpZ2h0
RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkUmlnaHRFeHBhbnNpb24pIHsKKyAgICB9IGVsc2UgaWYg
KGlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgUEFMOjpSaWdodEV4cGFu
c2lvbk1hc2spID09IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb24pIHsKICAgICAgICAgQVNTRVJU
KGNvdW50KTsKICAgICAgICAgLS1jb3VudDsKICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZh
bHNlOwpAQCAtOTk5LDE2ICs5OTksMTYgQEAgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IEwKICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoY291bnQsIGlzQWZ0ZXJFeHBhbnNpb24pOwogfQogCi1zdGQ6
OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KQorc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uQmVoYXZpb3IpCiB7CiAgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dy
YXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwotICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IChleHBhbnNpb25C
ZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhwYW5zaW9uOwotICAg
IGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0RXhwYW5zaW9uTWFzaykgPT0gRm9yY2VMZWZ0
RXhwYW5zaW9uKSB7CisgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4cGFuc2lvbkJlaGF2
aW9yICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9u
OworICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9
PSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbikgewogICAgICAgICArK2NvdW50OwogICAgICAgICBp
c0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOwogICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CkBAIC0xMDUxLDEwICsxMDUxLDEw
IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVCiAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uICYm
IChleHBhbnNpb25CZWhhdmlvciAmIFJpZ2h0RXhwYW5zaW9uTWFzaykgPT0gRm9yY2VSaWdodEV4
cGFuc2lvbikgeworICAgIGlmICghaXNBZnRlckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZp
b3IgJiBQQUw6OlJpZ2h0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9u
KSB7CiAgICAgICAgICsrY291bnQ7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwot
ICAgIH0gZWxzZSBpZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZpb3IgJiBS
aWdodEV4cGFuc2lvbk1hc2spID09IEZvcmJpZFJpZ2h0RXhwYW5zaW9uKSB7CisgICAgfSBlbHNl
IGlmIChpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFBBTDo6UmlnaHRF
eHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uKSB7CiAgICAgICAgIEFT
U0VSVChjb3VudCk7CiAgICAgICAgIC0tY291bnQ7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24g
PSBmYWxzZTsKQEAgLTEwNjIsNyArMTA2Miw3IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4g
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVCiAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvdW50LCBpc0FmdGVyRXhwYW5zaW9uKTsKIH0KIAot
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3N0ZDo6cGFpcjx1bnNpZ25lZCwg
Ym9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldyBz
dHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBQQUw6OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQogewogICAgIC8vIEZvciBlYWNoIGNoYXJhY3Rlciwg
aXRlcmF0aW5nIGZyb20gbGVmdCB0byByaWdodDoKICAgICAvLyAgIElmIGl0IGlzIHJlY29nbml6
ZWQgYXMgYSBzcGFjZSwgaW5zZXJ0IGFuIG9wcG9ydHVuaXR5IGFmdGVyIGl0CkBAIC0xMDczLDEz
ICsxMDczLDEzIEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldyBzdHJpCiAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJp
bmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGV4cGFuc2lvbkJlaGF2aW9yKTsKIH0KIAotYm9v
bCBGb250Q2FzY2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5n
VmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRDYXNjYWRlOjpsZWZ0RXhw
YW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIGlmICghc3RyaW5nVmlldy5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIzMiBpbml0aWFsQ2hhcmFjdGVyOwotICAgIGlmIChk
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUikgewogICAgICAgICBpbml0aWFsQ2hhcmFjdGVyID0gc3Ry
aW5nVmlld1swXTsKICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGluaXRpYWxDaGFyYWN0ZXIpICYm
IHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19UUkFJTChzdHJpbmdWaWV3WzFdKSkK
ICAgICAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoaW5p
dGlhbENoYXJhY3Rlciwgc3RyaW5nVmlld1sxXSk7CkBAIC0xMDkyLDEzICsxMDkyLDEzIEBAIGJv
b2wgRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24KICAgICByZXR1cm4gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQoKSAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGluaXRpYWxDaGFyYWN0
ZXIpOwogfQogCi1ib29sIEZvbnRDYXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0
cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRD
YXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAoIXN0cmluZ1ZpZXcubGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVDaGFyMzIgZmluYWxDaGFyYWN0
ZXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAo
ZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZpbmFsQ2hh
cmFjdGVyID0gc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMV07CiAgICAgICAgIGlm
IChVMTZfSVNfVFJBSUwoZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAx
ICYmIFUxNl9JU19MRUFEKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdKSkKICAg
ICAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKHN0cmluZ1Zp
ZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdLCBmaW5hbENoYXJhY3Rlcik7CkBAIC0xMzU4LDcg
KzEzNTgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBHbHlwaEJ1ZmZlciYgZwogCiBpbmxpbmUgc3RhdGljIGZsb2F0
IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250JiBmb250RGF0YSwgR2x5cGggZ2x5cGgp
CiB7Ci0gICAgaWYgKGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSB7CisgICAgaWYgKGZvbnREYXRhLnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsK
ICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnREYXRhLmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgcmV0dXJuIGJvdW5kcy54KCkgKyBib3VuZHMud2lkdGgoKSAvIDI7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5k
ZXggNmFmNTgxMmQ4YTcyMmI4ZmRiZDM5MzgxYmQ2NDgzMjc2OWU0ZmEzYS4uODliNzRkMGNhMzZk
MThjOGU2ODliOThiNTJhZjk0Y2FjNjNiN2ZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmLCBmbG9hdCBsZXR0ZXJTcGFjaW5nID0g
MCwgZmxvYXQgd29yZFNwYWNpbmcgPSAwKTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9u
bHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250
LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
LCBGb250U21vb3RoaW5nTW9kZSA9IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSA9IFBBTDo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9v
dGhpbmcpOwogCiAgICAgRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBGb250Q2FzY2FkZSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJik7CkBA
IC0xMjQsMTQgKzEyNCwxNCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIEN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJZkZvbnROb3RS
ZWFkeSB9OwogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20g
PSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCwgQ3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICBz
dGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIHN0
YXRpYyB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKTsKICAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBjb25zdDsK
IAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGlu
ZUV4dGVudHMpIGNvbnN0OwogCiAgICAgZmxvYXQgd2lkdGhPZlRleHRSYW5nZShjb25zdCBUZXh0
UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgZmxvYXQqIG91dFdpZHRoQmVmb3JlUmFuZ2UgPSBudWxscHRyLCBm
bG9hdCogb3V0V2lkdGhBZnRlclJhbmdlID0gbnVsbHB0cikgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBmbG9hdCB3
aWR0aEZvclNpbXBsZVRleHQoU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uID0gVGV4dERp
cmVjdGlvbjo6TFRSKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvclNpbXBsZVRleHQoU3RyaW5n
VmlldyB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikg
Y29uc3Q7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dExheW91dCwgVGV4dExheW91dERlbGV0
ZXI+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0JiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UpIGNvbnN0OwogICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0JiwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cyA9IDApOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBpbnQgb2Zmc2V0Rm9y
UG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdDsKICAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNv
bnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tID0g
MCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0g
ICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnZh
cmlhbnRDYXBzKCkgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbDsgfQorICAgIGJvb2wgaXNTbWFs
bENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi52YXJpYW50Q2FwcygpID09
IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDsgfQogCiAgICAgZmxvYXQgd29yZFNwYWNpbmco
KSBjb25zdCB7IHJldHVybiBtX3dvcmRTcGFjaW5nOyB9CiAgICAgZmxvYXQgbGV0dGVyU3BhY2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNw
YWNpbmcgPSBzOyB9CiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKICAgICAKLSAgICBG
b250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpOyB9CisgICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpOyB9CiAKICAgICBib29sIGVuYWJsZUtlcm5pbmcoKSBjb25zdCB7IHJldHVybiBtX2Vu
YWJsZUtlcm5pbmc7IH0KICAgICBib29sIHJlcXVpcmVzU2hhcGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcmVxdWlyZXNTaGFwaW5nOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHVibGljOgogICAgIC8v
IEEgc3RkOjpudWxsb3B0IHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgImZvbnQtc3R5bGU6IG5vcm1h
bCIuCiAgICAgc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CiAgICAgRm9udFNlbGVjdGlv
blZhbHVlIHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndlaWdodCgp
OyB9Ci0gICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKTsgfQorICAgIFBBTDo6Rm9udFdpZHRoVmFy
aWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53aWR0
aFZhcmlhbnQoKTsgfQogCiAgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIApAQCAtMTg1LDEyICsxODUsMTIgQEAg
cHVibGljOgogCiAgICAgLy8gUmV0dXJucyAodGhlIG51bWJlciBvZiBvcHBvcnR1bml0aWVzLCB3
aGV0aGVyIHRoZSBsYXN0IGV4cGFuc2lvbiBpcyBhIHRyYWlsaW5nIGV4cGFuc2lvbikKICAgICAv
LyBJZiB0aGVyZSBhcmUgbm8gb3Bwb3J0dW5pdGllcywgdGhlIGJvb2wgd2lsbCBiZSB0cnVlIGlm
ZiB3ZSBhcmUgZm9yYmlkZGluZyBsZWFkaW5nIGV4cGFuc2lvbnMuCi0gICAgc3RhdGljIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJpbmdWaWV3
LCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3RhdGljIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJpbmdWaWV3LCBQ
QUw6OlRleHREaXJlY3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAgLy8gV2hl
dGhlciBvciBub3QgdGhlcmUgaXMgYW4gZXhwYW5zaW9uIG9wcG9ydHVuaXR5IGp1c3QgYmVmb3Jl
IHRoZSBmaXJzdCBjaGFyYWN0ZXIKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB0YWtl
IGEgaXNBZnRlckV4cGFuc2lvbiBmbGFnOyB0aGlzIGFzc3VtZXMgdGhhdCBpc0FmdGVyRXhwYW5z
aW9uIGlzIGZhbHNlCi0gICAgc3RhdGljIGJvb2wgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0
cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24pOwotICAgIHN0YXRpYyBib29sIHJpZ2h0RXhwYW5zaW9u
T3Bwb3J0dW5pdHkoU3RyaW5nVmlldywgVGV4dERpcmVjdGlvbik7CisgICAgc3RhdGljIGJvb2wg
bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbik7
CisgICAgc3RhdGljIGJvb2wgcmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3LCBQ
QUw6OlRleHREaXJlY3Rpb24pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0
U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29s
IHNob3VsZFVzZVNtb290aGluZygpOwpAQCAtMjM3LDggKzIzNyw4IEBAIHByaXZhdGU6CiAgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0
IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICB2b2lkIGFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCi0g
ICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBFeHBhbnNpb25CZWhhdmlvcik7Ci0gICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9v
bD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3RhdGlj
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVy
bmFsKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQQUw6OlRleHREaXJlY3Rpb24sIFBB
TDo6RXhwYW5zaW9uQmVoYXZpb3IpOworICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgUEFMOjpUZXh0RGlyZWN0aW9uLCBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yKTsK
IAogICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3MgQ29t
cGxleFRleHRDb250cm9sbGVyOwpAQCAtMjg3LDkgKzI4Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBhZHZhbmNlZFRleHRSZW5kZXJpbmdNb2RlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8g
dGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnREZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgp
OwotICAgICAgICBpZiAodGV4dFJlbmRlcmluZ01vZGUgPT0gVGV4dFJlbmRlcmluZ01vZGU6Okdl
b21ldHJpY1ByZWNpc2lvbiB8fCB0ZXh0UmVuZGVyaW5nTW9kZSA9PSBUZXh0UmVuZGVyaW5nTW9k
ZTo6T3B0aW1pemVMZWdpYmlsaXR5KQorICAgICAgICBpZiAodGV4dFJlbmRlcmluZ01vZGUgPT0g
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uIHx8IHRleHRSZW5kZXJp
bmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0eSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAodGV4dFJlbmRlcmluZ01vZGUgPT0g
VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQpCisgICAgICAgIGlmICh0ZXh0UmVuZGVy
aW5nTW9kZSA9PSBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNwZWVkKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoRlJFRVRZUEUp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzAxLDkgKzMwMSw5IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBjb21wdXRlRW5hYmxlS2VybmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvIGtl
cm5pbmcgPSBtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCk7Ci0gICAgICAgIGlmIChrZXJuaW5n
ID09IEtlcm5pbmc6Ok5vcm1hbCkKKyAgICAgICAgaWYgKGtlcm5pbmcgPT0gUEFMOjpLZXJuaW5n
OjpOb3JtYWwpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGtlcm5pbmcg
PT0gS2VybmluZzo6Tm9TaGlmdCkKKyAgICAgICAgaWYgKGtlcm5pbmcgPT0gUEFMOjpLZXJuaW5n
OjpOb1NoaWZ0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gYWR2
YW5jZWRUZXh0UmVuZGVyaW5nTW9kZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKaW5k
ZXggNjcwY2Q5MjRiODBkMWI0NzU2N2Q2MDRkMjFlM2JmNDNiNzY2MGIzYy4uMmUwMDVjOWUyNTcz
ODE0ZWNiMDM0ZmJkZGIxYjFmMTc2ZGRkY2MwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKQEAg
LTUzLDkgKzUzLDkgQEAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24pID09IHNpemVvZihTYW1lU2l6ZUFzRm9udENhc2NhZGVEZXMKIAogRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbigpCiAgICAgOiBtX2lzQWJzb2x1dGVTaXpl
KGZhbHNlKQotICAgICwgbV9rZXJuaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihLZXJuaW5nOjpB
dXRvKSkKKyAgICAsIG1fa2VybmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpLZXJuaW5n
OjpBdXRvKSkKICAgICAsIG1fa2V5d29yZFNpemUoMCkKLSAgICAsIG1fZm9udFNtb290aGluZyhz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcpKQor
ICAgICwgbV9mb250U21vb3RoaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRTbW9v
dGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nKSkKICAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNl
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDA4YmQ5MDY2OTQ3OWIyZDYyZjk5YjliNjc4
NGExNWUxZDUyZGMyMzQuLmRiMzBkZTRlODY5Nzc2ZjIxYmQ4MDFjZDU5ODNkNTI4M2Y5YWU2Yzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIC8vIG9u
bHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGZvbnQgZmFt
aWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKICAgICBib29sIHVzZUZpeGVkRGVm
YXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgpID09IDEgJiYgZmlyc3RGYW1p
bHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KIAotICAgIEtlcm5pbmcga2VybmluZygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KKyAgICBQQUw6Oktl
cm5pbmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6S2VybmluZz4o
bV9rZXJuaW5nKTsgfQogICAgIHVuc2lnbmVkIGtleXdvcmRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9rZXl3b3JkU2l6ZTsgfQogICAgIENTU1ZhbHVlSUQga2V5d29yZFNpemVBc0lkZW50aWZpZXIo
KSBjb25zdAogICAgIHsKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aWRlbnRpZmllciA9PSBDU1NWYWx1ZUludmFsaWQgfHwgKGlkZW50aWZpZXIgPj0gQ1NTVmFsdWVY
eFNtYWxsICYmIGlkZW50aWZpZXIgPD0gQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSkpOwogICAgICAg
ICByZXR1cm4gaWRlbnRpZmllcjsKICAgICB9Ci0gICAgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTbW9vdGhpbmdNb2RlPiht
X2ZvbnRTbW9vdGhpbmcpOyB9CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZSBmb250U21vb3Ro
aW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250U21vb3RoaW5nTW9kZT4o
bV9mb250U21vb3RoaW5nKTsgfQogICAgIGJvb2wgaXNTcGVjaWZpZWRGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1NwZWNpZmllZEZvbnQ7IH0KIAogICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1f
ZmFtaWxpZXNbMF0gPSBmYW1pbHk7IH0KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RmFtaWxpZXMoY29uc3QgUmVmQ291bnRlZEFycmF5PEF0b21TdHJpbmc+JiBmYW1pbGll
cykgeyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0KICAgICB2b2lkIHNldFNwZWNpZmllZFNpemUo
ZmxvYXQgcykgeyBtX3NwZWNpZmllZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KICAgICB2b2lk
IHNldElzQWJzb2x1dGVTaXplKGJvb2wgcykgeyBtX2lzQWJzb2x1dGVTaXplID0gczsgfQotICAg
IHZvaWQgc2V0S2VybmluZyhLZXJuaW5nIGtlcm5pbmcpIHsgbV9rZXJuaW5nID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGtlcm5pbmcpOyB9CisgICAgdm9pZCBzZXRLZXJuaW5nKFBBTDo6S2Vybmlu
ZyBrZXJuaW5nKSB7IG1fa2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsg
fQogICAgIHZvaWQgc2V0S2V5d29yZFNpemUodW5zaWduZWQgc2l6ZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChzaXplIDw9IDgpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAg
c3RhdGljX2Fzc2VydChDU1NWYWx1ZVdlYmtpdFh4eExhcmdlIC0gQ1NTVmFsdWVYeFNtYWxsICsg
MSA9PSA4LCAiTWF4aW11bSBrZXl3b3JkIHNpemUgc2hvdWxkIGJlIDguIik7CiAgICAgICAgIHNl
dEtleXdvcmRTaXplKGlkZW50aWZpZXIgPyBpZGVudGlmaWVyIC0gQ1NTVmFsdWVYeFNtYWxsICsg
MSA6IDApOwogICAgIH0KLSAgICB2b2lkIHNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
bW9vdGhpbmcpOyB9CisgICAgdm9pZCBzZXRGb250U21vb3RoaW5nKFBBTDo6Rm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzbW9vdGhpbmcpOyB9CiAgICAgdm9pZCBzZXRJc1NwZWNpZmllZEZvbnQoYm9vbCBpc1NwZWNp
ZmllZEZvbnQpIHsgbV9pc1NwZWNpZmllZEZvbnQgPSBpc1NwZWNpZmllZEZvbnQ7IH0KIAogI2lm
IEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCkBAIC0xMjAsMTggKzEyMCwxOCBAQCBwdWJsaWM6CiAK
ICAgICAvLyBJbml0aWFsIHZhbHVlcyBmb3IgZm9udCBwcm9wZXJ0aWVzLgogICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaW5pdGlhbEl0YWxpYygpIHsgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0YXRpYyBGb250U3R5bGVBeGlzIGluaXRpYWxGb250U3R5
bGVBeGlzKCkgeyByZXR1cm4gRm9udFN0eWxlQXhpczo6c2xudDsgfQorICAgIHN0YXRpYyBQQUw6
OkZvbnRTdHlsZUF4aXMgaW5pdGlhbEZvbnRTdHlsZUF4aXMoKSB7IHJldHVybiBQQUw6OkZvbnRT
dHlsZUF4aXM6OnNsbnQ7IH0KICAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxX
ZWlnaHQoKSB7IHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOyB9CiAgICAgc3RhdGljIEZvbnRT
ZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3RyZXRjaCgpIHsgcmV0dXJuIG5vcm1hbFN0cmV0Y2hWYWx1
ZSgpOyB9Ci0gICAgc3RhdGljIEZvbnRTbWFsbENhcHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0
dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsgfQotICAgIHN0YXRpYyBLZXJuaW5nIGluaXRpYWxLZXJu
aW5nKCkgeyByZXR1cm4gS2VybmluZzo6QXV0bzsgfQotICAgIHN0YXRpYyBGb250U21vb3RoaW5n
TW9kZSBpbml0aWFsRm9udFNtb290aGluZygpIHsgcmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpB
dXRvU21vb3RoaW5nOyB9Ci0gICAgc3RhdGljIFRleHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0
UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRl
cmluZzsgfQotICAgIHN0YXRpYyBGb250U3ludGhlc2lzIGluaXRpYWxGb250U3ludGhlc2lzKCkg
eyByZXR1cm4gRm9udFN5bnRoZXNpc1dlaWdodCB8IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRT
eW50aGVzaXNTbWFsbENhcHM7IH0KLSAgICBzdGF0aWMgRm9udFZhcmlhbnRQb3NpdGlvbiBpbml0
aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFs
OyB9Ci0gICAgc3RhdGljIEZvbnRWYXJpYW50Q2FwcyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJl
dHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsgfQotICAgIHN0YXRpYyBGb250VmFyaWFudEFs
dGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRBbHRlcm5hdGVzKCkgeyByZXR1cm4gRm9udFZhcmlhbnRB
bHRlcm5hdGVzOjpOb3JtYWw7IH0KLSAgICBzdGF0aWMgRm9udE9wdGljYWxTaXppbmcgaW5pdGlh
bE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZDsgfQor
ICAgIHN0YXRpYyBQQUw6OkZvbnRTbWFsbENhcHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0dXJu
IFBBTDo6Rm9udFNtYWxsQ2Fwczo6T2ZmOyB9CisgICAgc3RhdGljIFBBTDo6S2VybmluZyBpbml0
aWFsS2VybmluZygpIHsgcmV0dXJuIFBBTDo6S2VybmluZzo6QXV0bzsgfQorICAgIHN0YXRpYyBQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlIGluaXRpYWxGb250U21vb3RoaW5nKCkgeyByZXR1cm4gUEFM
OjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzsgfQorICAgIHN0YXRpYyBQQUw6OlRl
eHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFBBTDo6
VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOyB9CisgICAgc3RhdGljIFBBTDo6
Rm9udFN5bnRoZXNpcyBpbml0aWFsRm9udFN5bnRoZXNpcygpIHsgcmV0dXJuIFBBTDo6Rm9udFN5
bnRoZXNpc1dlaWdodCB8IFBBTDo6Rm9udFN5bnRoZXNpc1N0eWxlIHwgUEFMOjpGb250U3ludGhl
c2lzU21hbGxDYXBzOyB9CisgICAgc3RhdGljIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbiBpbml0
aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpO
b3JtYWw7IH0KKyAgICBzdGF0aWMgUEFMOjpGb250VmFyaWFudENhcHMgaW5pdGlhbFZhcmlhbnRD
YXBzKCkgeyByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDsgfQorICAgIHN0YXRp
YyBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcyBpbml0aWFsVmFyaWFudEFsdGVybmF0ZXMoKSB7
IHJldHVybiBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOyB9CisgICAgc3RhdGlj
IFBBTDo6Rm9udE9wdGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBQ
QUw6OkZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkOyB9CiAgICAgc3RhdGljIGNvbnN0IEF0b21T
dHJpbmcmIGluaXRpYWxTcGVjaWZpZWRMb2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9CiAg
ICAgc3RhdGljIEZvbnRQYWxldHRlIGluaXRpYWxGb250UGFsZXR0ZSgpIHsgcmV0dXJuIHsgRm9u
dFBhbGV0dGU6OlR5cGU6Ok5vcm1hbCwgbnVsbEF0b20oKSB9OyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXgg
YTI0MmQzNjVmODlkYmE5YzdkYWQ4MGY2OTg3Y2I0NWRmY2Y0YWRlOC4uZWQwM2YyOWZiZmUzYTQ5
ZWEwYTczYTg0NTE3MDYxY2Y1OWI5MWRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTI5NCwxMCArMjk0LDEw
IEBAIHN0YXRpYyBib29sIHNob3VsZElnbm9yZVJvdGF0aW9uKFVDaGFyMzIgY2hhcmFjdGVyKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25D
SktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pL
R2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3QgR2x5cGhEYXRhJiBkYXRhKQorc3Rh
dGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRh
dGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgUEFMOjpOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBjb25zdCBHbHlwaERhdGEmIGRhdGEpCiB7CiAgICAgYm9vbCBzeW50aGV0aWNPYmxp
cXVlID0gZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCk7Ci0gICAg
aWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfHwgc2hv
dWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgeworICAgIGlmIChvcmllbnRhdGlvbiA9PSBQ
QUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRp
b24oY2hhcmFjdGVyKSkgewogICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZv
bnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKICAgICAgICAgLy8gSWYgdGhlIGdseXBocyBhcmUgdGhlIHNhbWUsIHRoZW4gd2Uga25v
dyB3ZSBjYW4ganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGggcm90YXRlZCB2ZXJ0aWNhbGx5
CiAgICAgICAgIC8vIHRvIGJlIHVwcmlnaHQuIEZvciBzeW50aGV0aWMgb2JsaXF1ZSwgaG93ZXZl
ciwgd2Ugd2lsbCBhbHdheXMgcmV0dXJuIHRoZSB1cHJpZ2h0RGF0YSB0byBlbnN1cmUKQEAgLTMx
MCw3ICszMTAsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3Rl
cldpdGhHbHlwaE9yaWVudGF0aW9uKFVDaGFyMzIgY2hhcmFjdAogICAgICAgICAvLyBnbHlwaCwg
c28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRh
bCBnbHlwaC4KICAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdXByaWdodERhdGE7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PSBOb25DSktHbHlw
aE9yaWVudGF0aW9uOjpNaXhlZCkgeworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gUEFM
OjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCkgewogICAgICAgICBHbHlwaERhdGEgdmVy
dGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQo
KS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBhIGJha2VkLWluIHJvdGF0ZWQgZ2x5cGgsIHdlIHdpbGwgdXNlIGl0IHVubGVzcyBzeW50
aGV0aWNPYmxpcXVlIGlzIHNldC4gSWYKQEAgLTM1OCw3ICszNTgsNyBAQCBHbHlwaERhdGEgRm9u
dENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0
ZXIsIGNvbnN0CiAgICAgaWYgKHN5c3RlbUZhbGxiYWNrU2hvdWxkQmVJbnZpc2libGUpCiAgICAg
ICAgIHN5c3RlbUZhbGxiYWNrRm9udCA9IGNvbnN0X2Nhc3Q8Rm9udCo+KCZzeXN0ZW1GYWxsYmFj
a0ZvbnQtPmludmlzaWJsZUZvbnQoKSk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwg
JiYgIXN5c3RlbUZhbGxiYWNrRm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKQorICAgIGlmIChzeXN0ZW1GYWxs
YmFja0ZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50
YXRpb246OlZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhz
KCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkKICAg
ICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7CiAKICAgICBHbHlwaERhdGEg
ZmFsbGJhY2tHbHlwaERhdGE7CkBAIC0zNjcsNyArMzY3LDcgQEAgR2x5cGhEYXRhIEZvbnRDYXNj
YWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgY2hhcmFjdGVyLCBj
b25zdAogICAgIGVsc2UKICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFj
a0ZvbnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGNoYXJhY3Rlcik7CiAKLSAgICBpZiAoZmFsbGJhY2tHbHlwaERhdGEuZm9udCAmJiBm
YWxsYmFja0dseXBoRGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPmlzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgeworICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5mb250
ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5m
b250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAgICAgICAgaWYgKHZhcmlhbnQg
PT0gTm9ybWFsVmFyaWFudCAmJiAhRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
Y2hhcmFjdGVyKSkKICAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9y
Tm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oY2hhcmFjdGVyLCBkZXNjcmlwdGlv
bi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CkBA
IC00MjcsNyArNDI3LDcgQEAgR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZv
clZhcmlhbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXMKICAgICAgICAgICAgIGRh
dGEuZm9udCA9ICZkYXRhLmZvbnQtPmludmlzaWJsZUZvbnQoKTsKIAogICAgICAgICBpZiAodmFy
aWFudCA9PSBOb3JtYWxWYXJpYW50KSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYg
IWRhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7CisgICAgICAgICAgICBp
ZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKGNoYXJhY3RlcikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjaGFyYWN0ZXIsIGRlc2Ny
aXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7CiAKQEAgLTQ4Miw3ICs0ODIs
NyBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBpZiAoIWZvbnQgfHwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQorICAgIGlmICghZm9udCB8fCBmb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoZGVzaXJlZFZpc2liaWxp
dHkgPT0gRmFsbGJhY2tWaXNpYmlsaXR5OjpJbnZpc2libGUgJiYgZm9udC0+dmlzaWJpbGl0eSgp
ID09IEZvbnQ6OlZpc2liaWxpdHk6OlZpc2libGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAppbmRleCA3YjQ3YmZkMTUzOGNm
OWUzNjk5MzQ2NTU0NzkxMTBiZDhjZjAwODM5Li40ZDA0YWQxZDMyNGNiZTNhNTJhZDA2OGJjMjI5
Y2Y1NTlkMTlmOGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAKQEAgLTM5LDMxICszOSwzMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigpCiAgICAgOiBtX2ZvbnRQ
YWxldHRlKHsgRm9udFBhbGV0dGU6OlR5cGU6Ok5vcm1hbCwgbnVsbEF0b20oKSB9KQogICAgICwg
bV9mb250U2VsZWN0aW9uUmVxdWVzdCB7IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxX
ZWlnaHQoKSwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFN0cmV0Y2goKSwgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEl0YWxpYygpIH0KLSAgICAsIG1fb3JpZW50YXRpb24o
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkpCi0gICAg
LCBtX25vbkNKS0dseXBoT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vbkNKS0ds
eXBoT3JpZW50YXRpb246Ok1peGVkKSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KHN0YXRpY19jYXN0
PHVuc2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQotICAgICwgbV9yZW5k
ZXJpbmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFs
KSkKLSAgICAsIG1fdGV4dFJlbmRlcmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVGV4dFJlbmRl
cmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKSkKKyAgICAsIG1fb3JpZW50YXRpb24oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSkKKyAgICAs
IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpOb25D
SktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCkpCisgICAgLCBtX3dpZHRoVmFyaWFudChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUEFMOjpGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQorICAg
ICwgbV9yZW5kZXJpbmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRSZW5kZXJp
bmdNb2RlOjpOb3JtYWwpKQorICAgICwgbV90ZXh0UmVuZGVyaW5nKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZykpCiAgICAgLCBt
X3NjcmlwdChVU0NSSVBUX0NPTU1PTikKLSAgICAsIG1fZm9udFN5bnRoZXNpcyhGb250U3ludGhl
c2lzV2VpZ2h0IHwgRm9udFN5bnRoZXNpc1N0eWxlIHwgRm9udFN5bnRoZXNpc1NtYWxsQ2FwcykK
LSAgICAsIG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1
cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50UG9zaXRpb24oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRDYXBzKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudENhcHM6Ok5vcm1hbCkpCi0gICAgLCBtX3Zh
cmlhbnROdW1lcmljRmlndXJlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVy
aWNGaWd1cmU6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnROdW1lcmljU3BhY2luZyhzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsKSkKLSAgICAs
IG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnROdW1lcmljT3JkaW5h
bChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFs
KSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbCkpCi0gICAgLCBtX3Zhcmlh
bnRBbHRlcm5hdGVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudEFsdGVybmF0ZXM6
Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCkpCi0gICAgLCBtX3Zh
cmlhbnRFYXN0QXNpYW5XaWR0aChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lhblJ1Ynkoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsKSkKLSAgICAs
IG1fb3B0aWNhbFNpemluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9wdGljYWxTaXppbmc6
OkVuYWJsZWQpKQotICAgICwgbV9mb250U3R5bGVBeGlzKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmluaXRpYWxGb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6aXRhbCkKLSAgICAsIG1f
c2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFsbG93
VXNlckluc3RhbGxlZEZvbnRzOjpObykpCisgICAgLCBtX2ZvbnRTeW50aGVzaXMoUEFMOjpGb250
U3ludGhlc2lzV2VpZ2h0IHwgUEFMOjpGb250U3ludGhlc2lzU3R5bGUgfCBQQUw6OkZvbnRTeW50
aGVzaXNTbWFsbENhcHMpCisgICAgLCBtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCisgICAgLCBt
X3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6
OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50SGlzdG9yaWNh
bExpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudExpZ2F0dXJl
czo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQorICAgICwg
bV92YXJpYW50UG9zaXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnRQ
b3NpdGlvbjo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENhcHMoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJp
Y0ZpZ3VyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1
cmU6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnROdW1lcmljU3BhY2luZyhzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpKQorICAgICwg
bV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY09y
ZGluYWwoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bDo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsKSkK
KyAgICAsIG1fdmFyaWFudEFsdGVybmF0ZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RWFzdEFzaWFuVmFy
aWFudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpKQorICAgICwg
bV92YXJpYW50RWFzdEFzaWFuUnVieShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFy
aWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpCisgICAgLCBtX29wdGljYWxTaXppbmcoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVuYWJsZWQpKQorICAgICwg
bV9mb250U3R5bGVBeGlzKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxGb250U3R5bGVB
eGlzKCkgPT0gUEFMOjpGb250U3R5bGVBeGlzOjppdGFsKQorICAgICwgbV9zaG91bGRBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpBbGxvd1VzZXJJbnN0
YWxsZWRGb250czo6Tm8pKQogICAgICwgbV9zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2lu
ZyhmYWxzZSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnREZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmgKaW5kZXggNjgxOWEyMWE1ZWEwZTNjMmJkYjYwMzhkYTYyNzEyMzQz
NjJhMDI0NS4uNjkyYjRiYjc2OWVjNGZjOGVmMjA0OWNkYmQxOWRhMmIyOTgwNTIyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgK
QEAgLTI1LDExICsyNSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb250UGFsZXR0
ZS5oIgotI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVj
dGlvbkFsZ29yaXRobS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1
ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0ZvbnRSZW5k
ZXJpbmdNb2RlLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIApAQCAtNTAsMzQgKzUwLDM0IEBAIHB1YmxpYzoKICAgICBGb250U2Vs
ZWN0aW9uVmFsdWUgc3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVl
c3Qud2lkdGg7IH0KICAgICBGb250U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQ7IH0KICAgICBGb250U2VsZWN0aW9uUmVx
dWVzdCBmb250U2VsZWN0aW9uUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlv
blJlcXVlc3Q7IH0KLSAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmluZ01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7
IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJpbmdNb2RlPihtX3RleHRSZW5kZXJpbmcpOyB9Cisg
ICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250UmVuZGVyaW5nTW9kZT4obV9yZW5kZXJpbmdNb2RlKTsgfQor
ICAgIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxQQUw6OlRleHRSZW5kZXJpbmdNb2RlPihtX3RleHRSZW5kZXJpbmcp
OyB9CiAgICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQogICAgIGNvbnN0IEF0b21TdHJpbmcmIGNvbXB1dGVk
TG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0gLy8gVGhpcyBpcyB3aGF0IHlvdSBz
aG91bGQgYmUgdXNpbmcgZm9yIHRoaW5ncyBsaWtlIHRleHQgc2hhcGluZyBhbmQgZm9udCBmYWxs
YmFjawogICAgIGNvbnN0IEF0b21TdHJpbmcmIHNwZWNpZmllZExvY2FsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY2lmaWVkTG9jYWxlOyB9IC8vIFRoaXMgaXMgd2hhdCB5b3Ugc2hvdWxkIGJlIHVz
aW5nIGZvciB3ZWItZXhwb3NlZCB0aGluZ3MgbGlrZSAtd2Via2l0LWxvY2FsZQogCi0gICAgRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9u
dE9yaWVudGF0aW9uPihtX29yaWVudGF0aW9uKTsgfQotICAgIE5vbkNKS0dseXBoT3JpZW50YXRp
b24gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5v
bkNKS0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KLSAgICBG
b250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRXaWR0aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIFBBTDo6Rm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250
T3JpZW50YXRpb24+KG1fb3JpZW50YXRpb24pOyB9CisgICAgUEFMOjpOb25DSktHbHlwaE9yaWVu
dGF0aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7
IH0KKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0K
ICAgICBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVTZXR0aW5nczsgfQogICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0
aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhdGlvblNldHRp
bmdzOyB9Ci0gICAgRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQotICAgIEZvbnRW
YXJpYW50TGlnYXR1cmVzIHZhcmlhbnRDb21tb25MaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29tbW9uTGlnYXR1cmVz
KTsgfQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1f
dmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk7IH0K
LSAgICBGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50
Q29udGV4dHVhbEFsdGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudFBvc2l0aW9u
PihtX3ZhcmlhbnRQb3NpdGlvbik7IH0KLSAgICBGb250VmFyaWFudENhcHMgdmFyaWFudENhcHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENh
cHMpOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnROdW1lcmljRmlndXJl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiht
X3ZhcmlhbnROdW1lcmljRmlndXJlKTsgfQotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcg
dmFyaWFudE51bWVyaWNTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZh
cmlhbnROdW1lcmljU3BhY2luZz4obV92YXJpYW50TnVtZXJpY1NwYWNpbmcpOyB9Ci0gICAgRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb24gdmFyaWFudE51bWVyaWNGcmFjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uPihtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24pOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCB2YXJpYW50
TnVtZXJpY09yZGluYWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51
bWVyaWNPcmRpbmFsPihtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCk7IH0KLSAgICBGb250VmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+KG1fdmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyk7IH0KLSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFu
dEFsdGVybmF0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEFsdGVy
bmF0ZXM+KG1fdmFyaWFudEFsdGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50IHZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PihtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
KTsgfQotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lhbldpZHRo
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4o
bV92YXJpYW50RWFzdEFzaWFuV2lkdGgpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
IHZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5PihtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KTsgfQotICAgIEZvbnRW
YXJpYW50U2V0dGluZ3MgdmFyaWFudFNldHRpbmdzKCkgY29uc3QKKyAgICBQQUw6OkZvbnRTeW50
aGVzaXMgZm9udFN5bnRoZXNpcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9u
dFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXMgdmFyaWFudENvbW1vbkxpZ2F0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyk7IH0K
KyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudExpZ2F0dXJl
cz4obV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyk7IH0KKyAgICBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50SGlzdG9yaWNh
bExpZ2F0dXJlcyk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnRDb250
ZXh0dWFsQWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKTsgfQorICAgIFBB
TDo6Rm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50UG9zaXRpb24+KG1fdmFyaWFudFBvc2l0aW9uKTsg
fQorICAgIFBBTDo6Rm9udFZhcmlhbnRDYXBzIHZhcmlhbnRDYXBzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENhcHMpOyB9CisgICAg
UEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmUgdmFyaWFudE51bWVyaWNGaWd1cmUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZT4obV92
YXJpYW50TnVtZXJpY0ZpZ3VyZSk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNp
bmcgdmFyaWFudE51bWVyaWNTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFM
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPihtX3ZhcmlhbnROdW1lcmljU3BhY2luZyk7IH0K
KyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlhbnROdW1lcmljRnJhY3Rp
b24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uPihtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24pOyB9CisgICAgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNPcmRpbmFsIHZhcmlhbnROdW1lcmljT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4obV92YXJpYW50TnVtZXJp
Y09yZGluYWwpOyB9CisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyB2YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4obV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJv
KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzIHZhcmlhbnRBbHRlcm5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM+KG1f
dmFyaWFudEFsdGVybmF0ZXMpOyB9CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4obV92YXJpYW50RWFzdEFzaWFuVmFyaWFu
dCk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lh
bldpZHRoKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoPihtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aCk7IH0KKyAgICBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuUnVieSB2YXJpYW50RWFzdEFzaWFuUnVieSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5PihtX3ZhcmlhbnRFYXN0QXNp
YW5SdWJ5KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5ncyB2YXJpYW50U2V0dGluZ3Mo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHsgdmFyaWFudENvbW1vbkxpZ2F0dXJlcygp
LAogICAgICAgICAgICAgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSwKQEAgLTk1LDkg
Kzk1LDkgQEAgcHVibGljOgogICAgICAgICAgICAgdmFyaWFudEVhc3RBc2lhbldpZHRoKCksCiAg
ICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuUnVieSgpIH07CiAgICAgfQotICAgIEZvbnRPcHRp
Y2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250
T3B0aWNhbFNpemluZz4obV9vcHRpY2FsU2l6aW5nKTsgfQotICAgIEZvbnRTdHlsZUF4aXMgZm9u
dFN0eWxlQXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0eWxlQXhpcyA/IEZvbnRTdHlsZUF4
aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50OyB9Ci0gICAgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyk7IH0KKyAgICBQQUw6OkZvbnRPcHRpY2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRPcHRpY2FsU2l6aW5nPihtX29wdGlj
YWxTaXppbmcpOyB9CisgICAgUEFMOjpGb250U3R5bGVBeGlzIGZvbnRTdHlsZUF4aXMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRTdHlsZUF4aXMgPyBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0YWwgOiBQ
QUw6OkZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZv
bnRzIHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7IH0KICAgICBib29sIHNob3VsZERpc2FibGVMaWdhdHVyZXNGb3JTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZzsgfQog
ICAgIEZvbnRQYWxldHRlIGZvbnRQYWxldHRlKCkgY29uc3QgeyByZXR1cm4gbV9mb250UGFsZXR0
ZTsgfQogCkBAIC0xMDYsMzMgKzEwNiwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdHJldGNo
KEZvbnRTZWxlY3Rpb25WYWx1ZSBzdHJldGNoKSB7IG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2lk
dGggPSBzdHJldGNoOyB9CiAgICAgdm9pZCBzZXRJc0l0YWxpYyhib29sIGlzSXRhbGljKSB7IHNl
dEl0YWxpYyhpc0l0YWxpYyA/IHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB7IGl0
YWxpY1ZhbHVlKCkgfSA6IHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB7IH0pOyB9
CiAgICAgdm9pZCBzZXRXZWlnaHQoRm9udFNlbGVjdGlvblZhbHVlIHdlaWdodCkgeyBtX2ZvbnRT
ZWxlY3Rpb25SZXF1ZXN0LndlaWdodCA9IHdlaWdodDsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5n
TW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtb2RlKTsgfQotICAgIHZvaWQgc2V0VGV4dFJlbmRlcmluZ01vZGUoVGV4
dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7IG1fdGV4dFJlbmRlcmluZyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihyZW5kZXJpbmcpOyB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvcmllbnRhdGlvbik7IH0KLSAgICB2b2lkIHNldE5vbkNKS0dseXBoT3JpZW50YXRpb24o
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX25vbkNKS0dseXBoT3JpZW50
YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZW50YXRpb24pOyB9Ci0gICAgdm9pZCBz
ZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpIHsgbV93aWR0aFZh
cmlhbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od2lkdGhWYXJpYW50KTsgfSAvLyBNYWtlIHN1
cmUgbmV3IGNhbGxlcnMgb2YgdGhpcyBzeW5jIHdpdGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JU
ZXh0Q29tYmluZSgpIQorICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShQQUw6OkZvbnRSZW5kZXJp
bmdNb2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1v
ZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9kZShQQUw6OlRleHRSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZykgeyBtX3RleHRSZW5kZXJpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmVuZGVyaW5nKTsgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oUEFMOjpGb250T3JpZW50YXRp
b24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihv
cmllbnRhdGlvbik7IH0KKyAgICB2b2lkIHNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oUEFMOjpO
b25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRh
dGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcmllbnRhdGlvbik7IH0KKyAgICB2b2lkIHNl
dFdpZHRoVmFyaWFudChQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KSB7IG1fd2lk
dGhWYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdpZHRoVmFyaWFudCk7IH0gLy8gTWFr
ZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRoaXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6Omlz
Rm9yVGV4dENvbWJpbmUoKSEKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNwZWNpZmllZExv
Y2FsZShjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBzZXRGZWF0dXJlU2V0dGluZ3MoRm9u
dEZlYXR1cmVTZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fZmVhdHVyZVNldHRpbmdzID0gV1RGTW92
ZShzZXR0aW5ncyk7IH0KICAgICB2b2lkIHNldFZhcmlhdGlvblNldHRpbmdzKEZvbnRWYXJpYXRp
b25TZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fdmFyaWF0aW9uU2V0dGluZ3MgPSBXVEZNb3ZlKHNl
dHRpbmdzKTsgfQotICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzIGZvbnRT
eW50aGVzaXMpIHsgbV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQotICAgIHZvaWQg
c2V0VmFyaWFudENvbW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7
IG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlh
bnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50SGlz
dG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFu
dEhpc3RvcmljYWxMaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0K
LSAgICB2b2lkIHNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0
dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50UG9zaXRpb24oRm9u
dFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50KSB7IG1fdmFyaWFudFBvc2l0aW9uID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50Q2FwcyhGb250VmFy
aWFudENhcHMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDYXBzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShGb250VmFyaWFu
dE51bWVyaWNGaWd1cmUgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRmlndXJlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1Nw
YWNpbmcoRm9udFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVy
aWNTcGFjaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBz
ZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlh
bnQpIHsgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZh
cmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbCB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNPcmRpbmFsID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvKEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
Ci0gICAgdm9pZCBzZXRWYXJpYW50QWx0ZXJuYXRlcyhGb250VmFyaWFudEFsdGVybmF0ZXMgdmFy
aWFudCkgeyBtX3ZhcmlhbnRBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlh
bnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQgdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50RWFzdEFz
aWFuV2lkdGgoRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1fdmFyaWFudEVh
c3RBc2lhbldpZHRoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9p
ZCBzZXRWYXJpYW50RWFzdEFzaWFuUnVieShGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFu
dCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlh
bnQpOyB9Ci0gICAgdm9pZCBzZXRPcHRpY2FsU2l6aW5nKEZvbnRPcHRpY2FsU2l6aW5nIHNpemlu
ZykgeyBtX29wdGljYWxTaXppbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6aW5nKTsgfQot
ICAgIHZvaWQgc2V0Rm9udFN0eWxlQXhpcyhGb250U3R5bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5
bGVBeGlzID0gYXhpcyA9PSBGb250U3R5bGVBeGlzOjppdGFsOyB9Ci0gICAgdm9pZCBzZXRTaG91
bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyhBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cykgeyBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsg
fQorICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhQQUw6OkZvbnRTeW50aGVzaXMgZm9udFN5bnRo
ZXNpcykgeyBtX2ZvbnRTeW50aGVzaXMgPSBmb250U3ludGhlc2lzOyB9CisgICAgdm9pZCBzZXRW
YXJpYW50Q29tbW9uTGlnYXR1cmVzKFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkg
eyBtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFu
dCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJp
YW50SGlzdG9yaWNhbExpZ2F0dXJlcyhQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnQp
IHsgbV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKFBBTDo6
Rm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFy
aWFudFBvc2l0aW9uKFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50KSB7IG1fdmFyaWFu
dFBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBz
ZXRWYXJpYW50Q2FwcyhQQUw6OkZvbnRWYXJpYW50Q2FwcyB2YXJpYW50KSB7IG1fdmFyaWFudENh
cHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNldFZhcmlh
bnROdW1lcmljRmlndXJlKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnQpIHsg
bV92YXJpYW50TnVtZXJpY0ZpZ3VyZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsg
fQorICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gdmFyaWFudCkgeyBtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2
b2lkIHNldFZhcmlhbnROdW1lcmljT3JkaW5hbChQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGlu
YWwgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhQ
QUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRWYXJpYW50QWx0ZXJuYXRlcyhQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcyB2YXJp
YW50KSB7IG1fdmFyaWFudEFsdGVybmF0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFu
dCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudEVh
c3RBc2lhbldpZHRoKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1f
dmFyaWFudEVhc3RBc2lhbldpZHRoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
CisgICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuUnVieShQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieSB2YXJpYW50KSB7IG1fdmFyaWFudEVhc3RBc2lhblJ1YnkgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNldE9wdGljYWxTaXppbmcoUEFMOjpGb250
T3B0aWNhbFNpemluZyBzaXppbmcpIHsgbV9vcHRpY2FsU2l6aW5nID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHNpemluZyk7IH0KKyAgICB2b2lkIHNldEZvbnRTdHlsZUF4aXMoUEFMOjpGb250U3R5
bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5bGVBeGlzID0gYXhpcyA9PSBQQUw6OkZvbnRTdHlsZUF4
aXM6Oml0YWw7IH0KKyAgICB2b2lkIHNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKFBB
TDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
IHsgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7IH0KICAgICB2b2lkIHNldFNob3VsZERp
c2FibGVMaWdhdHVyZXNGb3JTcGFjaW5nKGJvb2wgc2hvdWxkRGlzYWJsZUxpZ2F0dXJlc0ZvclNw
YWNpbmcpIHsgbV9zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZyA9IHNob3VsZERpc2Fi
bGVMaWdhdHVyZXNGb3JTcGFjaW5nOyB9CiAgICAgdm9pZCBzZXRGb250UGFsZXR0ZShGb250UGFs
ZXR0ZSBmb250UGFsZXR0ZSkgeyBtX2ZvbnRQYWxldHRlID0gZm9udFBhbGV0dGU7IH0KIApAQCAt
MTU1LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgRm9udFNlbGVjdGlvblJlcXVlc3QgbV9mb250
U2VsZWN0aW9uUmVxdWVzdDsKICAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7IDAgfTsgLy8gQ29t
cHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXplIGFuZCB0aGUgem9v
bSBmYWN0b3IuCiAgICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6IDE7IC8vIEZvbnRPcmllbnRh
dGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9uIGEgaG9yaXpvbnRhbCBsaW5l
IG9yIGEgdmVydGljYWwgbGluZS4KLSAgICB1bnNpZ25lZCBtX25vbkNKS0dseXBoT3JpZW50YXRp
b24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25seSB1c2VkIGJ5IHZlcnRpY2Fs
IHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24gZm9yIG5vbi1pZGVvZ3Jh
cGggZ2x5cGhzLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA6IDE7IC8v
IFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiAtIE9ubHkgdXNlZCBieSB2ZXJ0aWNhbCB0ZXh0
LiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IG9yaWVudGF0aW9uIGZvciBub24taWRlb2dyYXBoIGds
eXBocy4KICAgICB1bnNpZ25lZCBtX3dpZHRoVmFyaWFudCA6IDI7IC8vIEZvbnRXaWR0aFZhcmlh
bnQKICAgICB1bnNpZ25lZCBtX3JlbmRlcmluZ01vZGUgOiAxOyAvLyBVc2VkIHRvIHN3aXRjaCBi
ZXR3ZWVuIENHIGFuZCBHREkgdGV4dCBvbiBXaW5kb3dzLgogICAgIHVuc2lnbmVkIG1fdGV4dFJl
bmRlcmluZyA6IDI7IC8vIFRleHRSZW5kZXJpbmdNb2RlCkBAIC0yOTQsMTIyICsyOTQsMTIyIEBA
IHN0ZDo6b3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBGb250RGVzY3JpcHRpb246OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29tcHV0ZWRTaXplKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250T3JpZW50YXRpb24+IG9yaWVu
dGF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250T3JpZW50YXRpb24+IG9yaWVudGF0
aW9uOwogICAgIGRlY29kZXIgPj4gb3JpZW50YXRpb247CiAgICAgaWYgKCFvcmllbnRhdGlvbikK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Tm9uQ0pL
R2x5cGhPcmllbnRhdGlvbj4gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbjsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbjsK
ICAgICBkZWNvZGVyID4+IG5vbkNKS0dseXBoT3JpZW50YXRpb247CiAgICAgaWYgKCFub25DSktH
bHlwaE9yaWVudGF0aW9uKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxGb250V2lkdGhWYXJpYW50PiB3aWR0aFZhcmlhbnQ7CisgICAgc3RkOjpvcHRp
b25hbDxQQUw6OkZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRoVmFyaWFudDsKICAgICBkZWNvZGVyID4+
IHdpZHRoVmFyaWFudDsKICAgICBpZiAoIXdpZHRoVmFyaWFudCkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFJlbmRlcmluZ01vZGU+IHJlbmRl
cmluZ01vZGU7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRSZW5kZXJpbmdNb2RlPiByZW5k
ZXJpbmdNb2RlOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5nTW9kZTsKICAgICBpZiAoIXJlbmRl
cmluZ01vZGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlv
bmFsPFRleHRSZW5kZXJpbmdNb2RlPiB0ZXh0UmVuZGVyaW5nTW9kZTsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBBTDo6VGV4dFJlbmRlcmluZ01vZGU+IHRleHRSZW5kZXJpbmdNb2RlOwogICAgIGRlY29k
ZXIgPj4gdGV4dFJlbmRlcmluZ01vZGU7CiAgICAgaWYgKCF0ZXh0UmVuZGVyaW5nTW9kZSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFN5bnRo
ZXNpcz4gZm9udFN5bnRoZXNpczsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFN5bnRoZXNp
cz4gZm9udFN5bnRoZXNpczsKICAgICBkZWNvZGVyID4+IGZvbnRTeW50aGVzaXM7CiAgICAgaWYg
KCFmb250U3ludGhlc2lzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gdmFyaWFudENvbW1vbkxpZ2F0dXJlczsK
KyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHZhcmlhbnRDb21t
b25MaWdhdHVyZXM7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50Q29tbW9uTGlnYXR1cmVzOwogICAg
IGlmICghdmFyaWFudENvbW1vbkxpZ2F0dXJlcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHZhcmlhbnREaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudExp
Z2F0dXJlcz4gdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXM7CiAgICAgZGVjb2RlciA+PiB2
YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKICAgICBpZiAoIXZhcmlhbnREaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXM7
CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzPiB2YXJpYW50SGlz
dG9yaWNhbExpZ2F0dXJlczsKICAgICBkZWNvZGVyID4+IHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1
cmVzOwogICAgIGlmICghdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVz
PiB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXM7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZv
bnRWYXJpYW50TGlnYXR1cmVzPiB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXM7CiAgICAgZGVj
b2RlciA+PiB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXM7CiAgICAgaWYgKCF2YXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50UG9zaXRpb24+IHZhcmlhbnRQb3NpdGlvbjsKKyAgICBz
dGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbj4gdmFyaWFudFBvc2l0aW9uOwog
ICAgIGRlY29kZXIgPj4gdmFyaWFudFBvc2l0aW9uOwogICAgIGlmICghdmFyaWFudFBvc2l0aW9u
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250
VmFyaWFudENhcHM+IHZhcmlhbnRDYXBzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFy
aWFudENhcHM+IHZhcmlhbnRDYXBzOwogICAgIGRlY29kZXIgPj4gdmFyaWFudENhcHM7CiAgICAg
aWYgKCF2YXJpYW50Q2FwcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiB2YXJpYW50TnVtZXJpY0ZpZ3Vy
ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiB2YXJp
YW50TnVtZXJpY0ZpZ3VyZTsKICAgICBkZWNvZGVyID4+IHZhcmlhbnROdW1lcmljRmlndXJlOwog
ICAgIGlmICghdmFyaWFudE51bWVyaWNGaWd1cmUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IHZhcmlh
bnROdW1lcmljU3BhY2luZzsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZz4gdmFyaWFudE51bWVyaWNTcGFjaW5nOwogICAgIGRlY29kZXIgPj4gdmFyaWFu
dE51bWVyaWNTcGFjaW5nOwogICAgIGlmICghdmFyaWFudE51bWVyaWNTcGFjaW5nKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbj4gdmFyaWFudE51bWVyaWNGcmFjdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFs
PFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IHZhcmlhbnROdW1lcmljRnJhY3Rpb247
CiAgICAgZGVjb2RlciA+PiB2YXJpYW50TnVtZXJpY0ZyYWN0aW9uOwogICAgIGlmICghdmFyaWFu
dE51bWVyaWNGcmFjdGlvbikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4gdmFyaWFudE51bWVyaWNPcmRp
bmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPiB2
YXJpYW50TnVtZXJpY09yZGluYWw7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50TnVtZXJpY09yZGlu
YWw7CiAgICAgaWYgKCF2YXJpYW50TnVtZXJpY09yZGluYWwpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRa
ZXJvPiB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzsK
ICAgICBkZWNvZGVyID4+IHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm87CiAgICAgaWYgKCF2YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEFsdGVybmF0ZXM+IHZhcmlhbnRBbHRlcm5hdGVz
OworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM+IHZhcmlhbnRB
bHRlcm5hdGVzOwogICAgIGRlY29kZXIgPj4gdmFyaWFudEFsdGVybmF0ZXM7CiAgICAgaWYgKCF2
YXJpYW50QWx0ZXJuYXRlcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2YXJpYW50RWFzdEFzaWFu
VmFyaWFudDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50PiB2YXJpYW50RWFzdEFzaWFuVmFyaWFudDsKICAgICBkZWNvZGVyID4+IHZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50OwogICAgIGlmICghdmFyaWFudEVhc3RBc2lhblZhcmlhbnQpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFz
dEFzaWFuV2lkdGg+IHZhcmlhbnRFYXN0QXNpYW5XaWR0aDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4gdmFyaWFudEVhc3RBc2lhbldpZHRoOwogICAg
IGRlY29kZXIgPj4gdmFyaWFudEVhc3RBc2lhbldpZHRoOwogICAgIGlmICghdmFyaWFudEVhc3RB
c2lhbldpZHRoKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRp
b25hbDxGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHZhcmlhbnRFYXN0QXNpYW5SdWJ5OworICAg
IHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHZhcmlhbnRFYXN0
QXNpYW5SdWJ5OwogICAgIGRlY29kZXIgPj4gdmFyaWFudEVhc3RBc2lhblJ1Ynk7CiAgICAgaWYg
KCF2YXJpYW50RWFzdEFzaWFuUnVieSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgIHN0ZDo6b3B0aW9uYWw8Rm9udE9wdGljYWxTaXppbmc+IG9wdGljYWxTaXppbmc7CisgICAg
c3RkOjpvcHRpb25hbDxQQUw6OkZvbnRPcHRpY2FsU2l6aW5nPiBvcHRpY2FsU2l6aW5nOwogICAg
IGRlY29kZXIgPj4gb3B0aWNhbFNpemluZzsKICAgICBpZiAoIW9wdGljYWxTaXppbmcpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRTdHlsZUF4
aXM+IGZvbnRTdHlsZUF4aXM7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRTdHlsZUF4aXM+
IGZvbnRTdHlsZUF4aXM7CiAgICAgZGVjb2RlciA+PiBmb250U3R5bGVBeGlzOwogICAgIGlmICgh
Zm9udFN0eWxlQXhpcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6
b3B0aW9uYWw8QWxsb3dVc2VySW5zdGFsbGVkRm9udHM+IHNob3VsZEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4g
c2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7CiAgICAgZGVjb2RlciA+PiBzaG91bGRBbGxv
d1VzZXJJbnN0YWxsZWRGb250czsKICAgICBpZiAoIXNob3VsZEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCA0OTRiMDQ3
YTQ1YTg0ZTQzOTRmNWFmMzJkMGU1OWM2ZTgzMDI2ZTNjLi5kOTVhMzkzOGRiODg2NmMzZmFhNGQ4
MDYwOGEyMzIzYjBhOWJhMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMzksNyArMzksNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxWYWx1ZVR5
cGU+IG1ha2VPcHRpb25hbAogICAgIHJldHVybiAqcG9pbnRlcjsKIH0KIAotRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lk
dGhWYXJpYW50IHdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01v
ZGUsIGNvbnN0IENyZWF0aW9uRGF0YSogY3JlYXRpb25EYXRhKQorRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljT2JsaXF1ZSwgUEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFBBTDo6Rm9u
dFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJl
bmRlcmluZ01vZGUsIGNvbnN0IENyZWF0aW9uRGF0YSogY3JlYXRpb25EYXRhKQogICAgIDogbV9z
aXplKHNpemUpCiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQogICAgICwgbV93aWR0
aFZhcmlhbnQod2lkdGhWYXJpYW50KQpAQCAtNTEsNyArNTEsNyBAQCBGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aQogfQogCiAjaWYgIVVTRShGUkVFVFlQRSkKLUZvbnRQbGF0Zm9ybURhdGEgRm9udFBs
YXRmb3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
c291cmNlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCitGb250UGxhdGZvcm1EYXRhIEZv
bnRQbGF0Zm9ybURhdGE6OmNsb25lV2l0aE9yaWVudGF0aW9uKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHNvdXJjZSwgUEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAgRm9u
dFBsYXRmb3JtRGF0YSBjb3B5KHNvdXJjZSk7CiAgICAgY29weS5tX29yaWVudGF0aW9uID0gb3Jp
ZW50YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKaW5kZXggMzBkZmFhMmQyZjg1YTlmN2NkYTIwMDgyOWRlMTk5YjE0ZTg0
YjIxOS4uYWRjYTJkYTY0ZWUwMTc4ODU5Mjc0YmY2M2ZjNzc1ZWFiY2QxZTliNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApA
QCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNs
dWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMDks
MTAgKzEwOSwxMCBAQCBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoKTsKIAotICAgIEZvbnRQ
bGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiA9IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwg
Rm9udFdpZHRoVmFyaWFudCA9IEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCwgVGV4dFJl
bmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcsIGNvbnN0
IENyZWF0aW9uRGF0YSogPSBudWxscHRyKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBQQUw6OkZvbnRP
cmllbnRhdGlvbiA9IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBQQUw6OkZvbnRX
aWR0aFZhcmlhbnQgPSBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCwgUEFMOjpU
ZXh0UmVuZGVyaW5nTW9kZSA9IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVy
aW5nLCBjb25zdCBDcmVhdGlvbkRhdGEqID0gbnVsbHB0cik7CiAKICNpZiBVU0UoQ09SRV9URVhU
KQotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoUmV0YWluUHRyPENURm9udFJl
Zj4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2UsIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhv
cml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lk
dGgsIFRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVy
aW5nLCBjb25zdCBDcmVhdGlvbkRhdGEqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQg
Rm9udFBsYXRmb3JtRGF0YShSZXRhaW5QdHI8Q1RGb250UmVmPiYmLCBmbG9hdCBzaXplLCBib29s
IHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIFBB
TDo6Rm9udE9yaWVudGF0aW9uID0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwsIFBB
TDo6Rm9udFdpZHRoVmFyaWFudCA9IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRo
LCBQQUw6OlRleHRSZW5kZXJpbmdNb2RlID0gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1Rl
eHRSZW5kZXJpbmcsIGNvbnN0IENyZWF0aW9uRGF0YSogPSBudWxscHRyKTsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQpAQCAtMTI5LDEwICsxMjksMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoRlJFRVRZUEUpCi0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2Vf
dCosIFJlZlB0cjxGY1BhdHRlcm4+JiYsIGZsb2F0IHNpemUsIGJvb2wgZml4ZWRXaWR0aCwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbik7
CisgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCosIFJlZlB0cjxGY1BhdHRl
cm4+JiYsIGZsb2F0IHNpemUsIGJvb2wgZml4ZWRXaWR0aCwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIFBBTDo6Rm9udE9yaWVudGF0aW9uKTsKICNlbmRpZgogCi0g
ICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgY2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYsIEZvbnRPcmllbnRhdGlvbik7CisgICAgc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGEgY2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIFBBTDo6
Rm9udE9yaWVudGF0aW9uKTsKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhT
eW50aGV0aWNPYmxpcXVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sKTsKICAgICBzdGF0
aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
LCBmbG9hdCk7CiAKQEAgLTE3NCwxMCArMTc0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN5bnRo
ZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KICAgICBib29sIHN5
bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KICAg
ICBib29sIGlzQ29sb3JCaXRtYXBGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbG9yQml0bWFw
Rm9udDsgfQotICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZW50YXRpb247IH0KLSAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGhWYXJpYW50OyB9Ci0gICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4
dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHRSZW5kZXJpbmdNb2RlOyB9Ci0g
ICAgYm9vbCBpc0ZvclRleHRDb21iaW5lKCkgY29uc3QgeyByZXR1cm4gd2lkdGhWYXJpYW50KCkg
IT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOyB9IC8vIEtlZXAgaW4gc3luYyB3aXRo
IGNhbGxlcnMgb2YgRm9udERlc2NyaXB0aW9uOjpzZXRXaWR0aFZhcmlhbnQoKS4KKyAgICBQQUw6
OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRp
b247IH0KKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aFZhcmlhbnQ7IH0KKyAgICBQQUw6OlRleHRSZW5kZXJpbmdNb2RlIHRleHRS
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UmVuZGVyaW5nTW9kZTsgfQorICAg
IGJvb2wgaXNGb3JUZXh0Q29tYmluZSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoVmFyaWFudCgpICE9
IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOyB9IC8vIEtlZXAgaW4gc3luYyB3
aXRoIGNhbGxlcnMgb2YgRm9udERlc2NyaXB0aW9uOjpzZXRXaWR0aFZhcmlhbnQoKS4KIAogICAg
IFN0cmluZyBmYW1pbHlOYW1lKCkgY29uc3Q7CiAgICAgVmVjdG9yPEZvbnRWYXJpYXRpb25BeGlz
PiB2YXJpYXRpb25BeGVzKFNob3VsZExvY2FsaXplQXhpc05hbWVzKSBjb25zdDsKQEAgLTI4NCw5
ICsyODQsOSBAQCBwcml2YXRlOgogCiAgICAgZmxvYXQgbV9zaXplIHsgMCB9OwogCi0gICAgRm9u
dE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBGb250T3JpZW50YXRpb246Okhvcml6b250YWwg
fTsKLSAgICBGb250V2lkdGhWYXJpYW50IG1fd2lkdGhWYXJpYW50IHsgRm9udFdpZHRoVmFyaWFu
dDo6UmVndWxhcldpZHRoIH07Ci0gICAgVGV4dFJlbmRlcmluZ01vZGUgbV90ZXh0UmVuZGVyaW5n
TW9kZSB7IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyB9OworICAgIFBBTDo6
Rm9udE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCB9OworICAgIFBBTDo6Rm9udFdpZHRoVmFyaWFudCBtX3dpZHRoVmFyaWFudCB7IFBB
TDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoIH07CisgICAgUEFMOjpUZXh0UmVuZGVy
aW5nTW9kZSBtX3RleHRSZW5kZXJpbmdNb2RlIHsgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0
b1RleHRSZW5kZXJpbmcgfTsKIAogICAgIC8vIFRoaXMgaXMgY29uY2VwdHVhbGx5IGNvbnN0LCBi
dXQgd2UgY2FuJ3QgbWFrZSBpdCBhY3R1YWxseSBjb25zdCwKICAgICAvLyBiZWNhdXNlIEZvbnRQ
bGF0Zm9ybURhdGEgaXMgdXNlZCBhcyBhIGtleSBpbiBhIEhhc2hNYXAuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGht
LmgKaW5kZXggNGQ1YjgwYTExMWMzYTNiMzM0MmNjM2ZhYmM5MDI5MTM2OGE5NzI4Ny4uMTcxN2U4
MzViMDg2NWMxZjkwZmUwZDhlY2YyYWIxM2FiMmY5ODY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApA
QCAtMjUsOCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlRleHRGbGFncy5o
IgogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4K
ICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggZTM3YjcxNTU3MTQwNjBiZmViN2FkYjAx
ODlmYWJlZGY3OWYxNjgxNC4uZjBiNzRjNTRhMmNlZTA2YjAzNTRkNjRiMmYxNTQxNDdjNTIwNWRi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZp
bHRlckltYWdlLmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTA5LDcgKzUwOSw3IEBAIEZs
b2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1
biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUEFMOjpG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKICAgICBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2lu
dCwgZm9udFNtb290aGluZ01vZGUpOwogfQpAQCAtNTIxLDI0ICs1MjEsMjQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBUZXh0UnVuJgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbikKIHsKLSAgICBCaWRpUmVzb2x2ZXI8VGV4dEJveEl0ZXJhdG9yLCBCaWRp
Q2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7Ci0gICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhC
aWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwor
ICAgIFBBTDo6QmlkaVJlc29sdmVyPFRleHRCb3hJdGVyYXRvciwgUEFMOjpCaWRpQ2hhcmFjdGVy
UnVuPiBiaWRpUmVzb2x2ZXI7CisgICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJpZGlT
dGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSk7CiAgICAg
YmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhUZXh0Qm94SXRl
cmF0b3IoJnJ1biwgMCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIHNob3VsZCBi
ZSByZXZlcnNlZC4gV2Ugc2hvdWxkIHBhc3MgQmlkaVJ1bkxpc3QKICAgICAvLyB0byBCaWRpUmVz
b2x2ZXIgaW4gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgotICAgIEJpZGlSdW5MaXN0PEJpZGlDaGFy
YWN0ZXJSdW4+JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5ydW5zKCk7CisgICAgUEFMOjpCaWRp
UnVuTGlzdDxQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5y
dW5zKCk7CiAgICAgYmlkaVJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShUZXh0Qm94SXRl
cmF0b3IoJnJ1biwgcnVuLmxlbmd0aCgpKSk7CiAKICAgICBpZiAoIWJpZGlSdW5zLnJ1bkNvdW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UG9pbnQgY3VyclBvaW50ID0gcG9pbnQ7
Ci0gICAgQmlkaUNoYXJhY3RlclJ1biogYmlkaVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7Cisg
ICAgUEFMOjpCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsK
ICAgICB3aGlsZSAoYmlkaVJ1bikgewogICAgICAgICBUZXh0UnVuIHN1YnJ1biA9IHJ1bi5zdWJS
dW4oYmlkaVJ1bi0+c3RhcnQoKSwgYmlkaVJ1bi0+c3RvcCgpIC0gYmlkaVJ1bi0+c3RhcnQoKSk7
CiAgICAgICAgIGJvb2wgaXNSVEwgPSBiaWRpUnVuLT5sZXZlbCgpICUgMjsKLSAgICAgICAgc3Vi
cnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rp
b246OkxUUik7CisgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb24oaXNSVEwgPyBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKTsKICAgICAgICAgc3VicnVu
LnNldERpcmVjdGlvbmFsT3ZlcnJpZGUoYmlkaVJ1bi0+ZGlyT3ZlcnJpZGUoZmFsc2UpKTsKIAog
ICAgICAgICBhdXRvIGFkdmFuY2UgPSBmb250LmRyYXdUZXh0KCp0aGlzLCBzdWJydW4sIGN1cnJQ
b2ludCwgMCwgc3RkOjpudWxsb3B0LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRl
eCAzZDhkM2E3MTI1M2UzNjMwZjhkOTVjZGRkNDA5NmJiNjQyMjg5YmY5Li5mNjc0NzMwMTQ3MWM0
YTAzOGZiNTgwMzk5ZDJkMzg2NDFlNTk0NzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNDc5LDExICs0NzksMTEgQEAg
cHVibGljOgogICAgIC8vIFRleHQKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNt
b290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgUEFMOjpGb250
U21vb3RoaW5nTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAotICAgIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNt
b290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCisgICAgdmlydHVhbCB2b2lkIGRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQogICAgIHsKICAgICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNz
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNz
Q29udGV4dC5oCmluZGV4IDljODczNmUxNTQ0MWZiNjI4ZTc3MDY1OGY1NzYyODQ4YjZhZmQzOTgu
LjEwN2ExZGFmMDRmNjFjOWZlZWQ4YjkzYWJhNGMxYmNkNGViZmM1NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRTaXplIGRyYXdUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7
IHJldHVybiB7IH07IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgUEFMOjpGb250
U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CiAKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0
ZDo6bnVsbG9wdCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBmaW5hbCB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4NjUx
YzVmZWE0NjZhNC4uMDU5MTVjZDA0YWNjZjM0MjljYTFhNzBlNTBmYzc0OTJmNjM0M2RjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5j
cHAKQEAgLTQ5NSw3ICs0OTUsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3RGcm9tUG9seWdvbihjb25zdCBGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24mCiB9CiAKIFBhdGgg
UGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyRGF0YSwK
LSAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorICAgIGZsb2F0IG91
dGxpbmVPZmZzZXQsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFBBTDo6V3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIEFTU0VSVChi
b3JkZXJEYXRhLmhhc0JvcmRlclJhZGl1cygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCmluZGV4IDUwMDA0MWEyZDY0MThjODA0NzVi
MTc1NjE0NzY4ZmNiZmE2NDNlMjQuLjRhMmM5ZWY5NDQ1MWE4NmI0YjFlODgwNTllODBmN2NhMGI3
MjliZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhV
dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgUGF0aFV0aWxpdGllc19oCiAKICNp
bmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwv
dGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFBhdGggcGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBW
ZWN0b3I8UGF0aD4gcGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgcmFkaXVzKTsKIAotICAgIHN0YXRpYyBQYXRoIHBhdGhXaXRo
U2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGNv
bnN0IEJvcmRlckRhdGEmLCBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGlyZWN0aW9uLCBXcml0
aW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHN0YXRpYyBQYXRoIHBhdGhX
aXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGNvbnN0IEJvcmRlckRhdGEmLCBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBQQUw6OlRleHREaXJlY3Rp
b24sIFBBTDo6V3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAppbmRleCAxZDQ3ZDY1
ZDY4MjQ2MjZlMTU5Mjg4MDBmNDY5N2MyNzZjYjI3NjM0Li5lODU1YWNhOGE5Mzc4ZDZlZDA1NTdl
MjYzNDNhMzA1ZWFlNWRkMzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UZXh0UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dFJ1bi5oCkBAIC0yNSw4ICsyNSw4IEBACiAjZGVmaW5lIFRleHRSdW5faAogCiAjaW5jbHVk
ZSAiVGFiU2l6ZS5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgotI2luY2x1ZGUgIldyaXRpbmdN
b2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CisjaW5jbHVkZSA8cGFsL3Rl
eHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IEdseXBoRGF0YTsKIGNs
YXNzIFRleHRSdW4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGV4cGxpY2l0IFRleHRSdW4oY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxv
YXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBE
ZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246
OkxUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2Nh
bkZvckNvZGVQYXRoID0gdHJ1ZSkKKyAgICBleHBsaWNpdCBUZXh0UnVuKGNvbnN0IFN0cmluZyYg
dGV4dCwgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIFBBTDo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24sIFBBTDo6
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiwgYm9vbCBk
aXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRo
ID0gdHJ1ZSkKICAgICAgICAgOiBtX3RleHQodGV4dCkKICAgICAgICAgLCBtX3RhYlNpemUoMCkK
ICAgICAgICAgLCBtX3hwb3MoeHBvcykKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoIW1fdGV4dC5pc051bGwoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgVGV4dFJ1
bihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24g
PSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNp
b24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRp
cmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgg
PSB0cnVlKQorICAgIGV4cGxpY2l0IFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBmbG9h
dCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFs
T3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQog
ICAgICAgICA6IFRleHRSdW4oc3RyaW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIHhw
b3MsIGV4cGFuc2lvbiwgZXhwYW5zaW9uQmVoYXZpb3IsIGRpcmVjdGlvbiwgZGlyZWN0aW9uYWxP
dmVycmlkZSwgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKQogICAgIHsKICAgICB9CkBAIC0xMDEs
MTYgKzEwMSwxNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1f
eHBvczsgfQogICAgIHZvaWQgc2V0WFBvcyhmbG9hdCB4UG9zKSB7IG1feHBvcyA9IHhQb3M7IH0K
ICAgICBmbG9hdCBleHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbjsgfQotICAg
IEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9l
eHBhbnNpb25CZWhhdmlvcjsgfQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pOyB9Ci0gICAg
Ym9vbCBydGwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2Rp
cmVjdGlvbikgPT0gVGV4dERpcmVjdGlvbjo6UlRMOyB9Ci0gICAgYm9vbCBsdHIoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbikgPT0gVGV4dERp
cmVjdGlvbjo6TFRSOyB9CisgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhh
dmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uQmVoYXZpb3I7IH0KKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpU
ZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7IH0KKyAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMOyB9CisgICAgYm9vbCBsdHIoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxQQUw6OlRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUjsgfQogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsgfQogICAgIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNv
ZGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGg7IH0KICAg
ICBib29sIHNwYWNpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZVNwYWNpbmc7
IH0KIAogICAgIHZvaWQgZGlzYWJsZVNwYWNpbmcoKSB7IG1fZGlzYWJsZVNwYWNpbmcgPSB0cnVl
OyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9k
aXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsgfQorICAgIHZvaWQg
c2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsgfQogICAgIHZvaWQgc2V0RGlyZWN0
aW9uYWxPdmVycmlkZShib29sIG92ZXJyaWRlKSB7IG1fZGlyZWN0aW9uYWxPdmVycmlkZSA9IG92
ZXJyaWRlOyB9CiAgICAgdm9pZCBzZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoYm9vbCBzY2Fu
KSB7IG1fY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gc2NhbjsgfQogICAgIFN0cmluZ1ZpZXcg
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCBjOGI1NmVhZjJkNjU5N2M4
NWZlNzc4YTQ2MDFjOGVjYjQzZGI4Mzg0Li41NjdkYzM3ZTRmNWNiZWViZjg4YjdiZTQ3YTcwOWU3
NjRiMWRlMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRp
ZXMuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmg+CiAjaW5jbHVk
ZSAiQ29tcG9zZWRDaGFyYWN0ZXJDbHVzdGVyVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCkBAIC00MSw3ICs0MSw3IEBAIFdpZHRoSXRl
cmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNlCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMo
ZmFsbGJhY2tGb250cykKICAgICAsIG1fZXhwYW5zaW9uKHJ1bi5leHBhbnNpb24oKSkKLSAgICAs
IG1faXNBZnRlckV4cGFuc2lvbigocnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhwYW5z
aW9uTWFzaykgPT0gRm9yYmlkTGVmdEV4cGFuc2lvbikKKyAgICAsIG1faXNBZnRlckV4cGFuc2lv
bigocnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQ
QUw6OkZvcmJpZExlZnRFeHBhbnNpb24pCiAgICAgLCBtX2FjY291bnRGb3JHbHlwaEJvdW5kcyhh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMpCiAgICAgLCBtX2VuYWJsZUtlcm5pbmcoZm9udC5lbmFibGVL
ZXJuaW5nKCkpCiAgICAgLCBtX3JlcXVpcmVzU2hhcGluZyhmb250LnJlcXVpcmVzU2hhcGluZygp
KQpAQCAtNTIsNyArNTIsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZQogICAgIGlmICghbV9l
eHBhbnNpb24pCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwogICAgIGVs
c2UgewotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENh
c2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIo
KSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRleHREaXJlY3Rpb246OlJUTCwgcnVuLmV4cGFuc2lv
bkJlaGF2aW9yKCkpLmZpcnN0OworICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4
dCgpLCBtX3J1bi5sdHIoKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEwsIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKIAogICAgICAgICBp
ZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiAgICAgICAgICAgICBtX2V4cGFuc2lvblBl
ck9wcG9ydHVuaXR5ID0gMDsKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgV2lkdGhJdGVyYXRv
cjo6YXBwbHlJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEdseXBoQnVm
ZmVyQWR2CiAKICAgICBBU1NFUlQobGFzdEdseXBoQ291bnQgfHwgKCF3aWR0aChtX2xlZnRvdmVy
SW5pdGlhbEFkdmFuY2UpICYmICFoZWlnaHQobV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlKSkpOwog
Ci0gICAgaWYgKG1fcnVuLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBsYXN0
R2x5cGhDb3VudCkgeworICAgIGlmIChtX3J1bi5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTCAmJiBsYXN0R2x5cGhDb3VudCkgewogICAgICAgICBhdXRvJiB2aXN1YWxseUxh
c3RBZHZhbmNlID0gKmdseXBoQnVmZmVyLmFkdmFuY2VzKGxhc3RHbHlwaENvdW50KTsKICAgICAg
ICAgZXhwYW5kV2l0aEluaXRpYWxBZHZhbmNlKHZpc3VhbGx5TGFzdEFkdmFuY2UsIG1fbGVmdG92
ZXJJbml0aWFsQWR2YW5jZSk7CiAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSB3aWR0aChtX2xl
ZnRvdmVySW5pdGlhbEFkdmFuY2UpOwogICAgICAgICBtX2xlZnRvdmVySW5pdGlhbEFkdmFuY2Ug
PSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7CiAgICAgfQogCi0gICAgaWYgKG1fcnVuLmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgIG1fbGVmdG92ZXJJbml0aWFsQWR2
YW5jZSA9IGluaXRpYWxBZHZhbmNlOwogICAgIGVsc2UgewogICAgICAgICBpZiAobGFzdEdseXBo
Q291bnQpIHsKQEAgLTI4MSw3ICsyODEsNyBAQCBpbmxpbmUgdm9pZCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoQnVmZgogICAg
ICAgICB1bnNpZ25lZCBhZHZhbmNlTGVuZ3RoID0gY2x1c3Rlckxlbmd0aDsKICAgICAgICAgaWYg
KGN1cnJlbnRDaGFyYWN0ZXJJbmRleCArIGFkdmFuY2VMZW5ndGggPT0gbV9ydW4ubGVuZ3RoKCkp
CiAgICAgICAgICAgICBtX2xhc3RDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRDaGFyYWN0ZXJJbmRl
eDsKLSAgICAgICAgYm9vbCBjaGFyYWN0ZXJNdXN0RHJhd1NvbWV0aGluZyA9ICFpc0RlZmF1bHRJ
Z25vcmFibGVDb2RlUG9pbnQoY2hhcmFjdGVyKTsKKyAgICAgICAgYm9vbCBjaGFyYWN0ZXJNdXN0
RHJhd1NvbWV0aGluZyA9ICFQQUw6OmlzRGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludChjaGFyYWN0
ZXIpOwogI2lmIFVTRShGUkVFVFlQRSkKICAgICAgICAgLy8gRnJlZXR5cGUgYmFzZWQgcG9ydHMg
b25seSBvdmVycmlkZSB0aGUgY2hhcmFjdGVycyB3aXRoIERlZmF1bHRfSWdub3JhYmxlIHVuaWNv
ZGUgcHJvcGVydHkgd2hlbiB0aGUgZm9udAogICAgICAgICAvLyBkb2Vzbid0IHN1cHBvcnQgdGhl
IGNvZGUgcG9pbnQuIFdlIHNob3VsZCBpZ25vcmUgdGhlbSBhdCB0aGlzIHBvaW50IHRvIGVuc3Vy
ZSB0aGV5IGFyZSBub3QgZGlzcGxheWVkLgpAQCAtMzg1LDEwICszODUsMTAgQEAgYXV0byBXaWR0
aEl0ZXJhdG9yOjpjYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBHbHlwaEJ1ZmYKICAgICAgICAgICAgIGlmICghbV9ydW4ubHRyKCkpCiAgICAgICAgICAg
ICAgICAgc3RkOjpzd2FwKGlzTGVmdG1vc3RDaGFyYWN0ZXIsIGlzUmlnaHRtb3N0Q2hhcmFjdGVy
KTsKIAotICAgICAgICAgICAgYm9vbCBmb3JjZUxlZnRFeHBhbnNpb24gPSBpc0xlZnRtb3N0Q2hh
cmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2sp
ID09IEZvcmNlTGVmdEV4cGFuc2lvbjsKLSAgICAgICAgICAgIGJvb2wgZm9yY2VSaWdodEV4cGFu
c2lvbiA9IGlzUmlnaHRtb3N0Q2hhcmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigp
ICYgUmlnaHRFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVJpZ2h0RXhwYW5zaW9uOwotICAgICAgICAg
ICAgYm9vbCBmb3JiaWRMZWZ0RXhwYW5zaW9uID0gaXNMZWZ0bW9zdENoYXJhY3RlciAmJiAobV9y
dW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0
RXhwYW5zaW9uOwotICAgICAgICAgICAgYm9vbCBmb3JiaWRSaWdodEV4cGFuc2lvbiA9IGlzUmln
aHRtb3N0Q2hhcmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUmlnaHRFeHBh
bnNpb25NYXNrKSA9PSBGb3JiaWRSaWdodEV4cGFuc2lvbjsKKyAgICAgICAgICAgIGJvb2wgZm9y
Y2VMZWZ0RXhwYW5zaW9uID0gaXNMZWZ0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhwYW5zaW9u
QmVoYXZpb3IoKSAmIFBBTDo6TGVmdEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yY2VMZWZ0RXhw
YW5zaW9uOworICAgICAgICAgICAgYm9vbCBmb3JjZVJpZ2h0RXhwYW5zaW9uID0gaXNSaWdodG1v
c3RDaGFyYWN0ZXIgJiYgKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OlJpZ2h0RXhw
YW5zaW9uTWFzaykgPT0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOworICAgICAgICAgICAgYm9v
bCBmb3JiaWRMZWZ0RXhwYW5zaW9uID0gaXNMZWZ0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhw
YW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6TGVmdEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yYmlk
TGVmdEV4cGFuc2lvbjsKKyAgICAgICAgICAgIGJvb2wgZm9yYmlkUmlnaHRFeHBhbnNpb24gPSBp
c1JpZ2h0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6
UmlnaHRFeHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uOwogCiAgICAg
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udENh
c2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAgICAgICAg
ICAgICBib29sIGlzSWRlb2dyYXBoID0gZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCmluZGV4IDE3Mjc0YmZjMzQ5ZDQzOWRiMzI2NzdmMWFlZWE2ZjI1YTViYTc2M2EuLjlh
YzM2NWQ0NTdiMTM2YWU1MmNlOTFiMzFhYWQyM2RjOTdjYmJkNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKQEAgLTc5LDE4ICs3OSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kT3Bl
blR5cGVGZWF0dXJlKENGTXV0YWJsZUFycmF5UmVmIGZlYXR1cmVzLCBjb25zdCBGb250RgogdHlw
ZWRlZiBIYXNoTWFwPEZvbnRUYWcsIGludCwgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFy
YWN0ZXJUYWdIYXNoVHJhaXRzPiBGZWF0dXJlc01hcDsKIHR5cGVkZWYgSGFzaE1hcDxGb250VGFn
LCBmbG9hdCwgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoVHJhaXRz
PiBWYXJpYXRpb25zTWFwOwogCi1zdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0
aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiB2YXJpYW50U2V0dGlu
Z3MpCitzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50
cyhjb25zdCBQQUw6OkZvbnRWYXJpYW50U2V0dGluZ3MmIHZhcmlhbnRTZXR0aW5ncykKIHsKICAg
ICBGZWF0dXJlc01hcCByZXN1bHQ7CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5jb21t
b25MaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRh
ZygibGlnYSIpLCAxKTsKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiY2xpZyIp
LCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgcmVzdWx0
LmFkZChmb250RmVhdHVyZVRhZygibGlnYSIpLCAwKTsKICAgICAgICAgcmVzdWx0LmFkZChmb250
RmVhdHVyZVRhZygiY2xpZyIpLCAwKTsKICAgICAgICAgYnJlYWs7CkBAIC05OSwxMiArOTksMTIg
QEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMo
Y29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRT
ZXR0aW5ncy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIHJlc3Vs
dC5hZGQoZm9udEZlYXR1cmVUYWcoImRsaWciKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm86CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImRsaWciKSwg
MCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xMTIsMTIgKzExMiwxMiBAQCBz
dGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25z
dCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRp
bmdzLmhpc3RvcmljYWxMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVz
OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChm
b250RmVhdHVyZVRhZygiaGxpZyIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
OjpObzoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiaGxpZyIpLCAwKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTEyNSwxMiArMTI1LDEyIEBAIHN0YXRpYyBG
ZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRW
YXJpYW50U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuY29u
dGV4dHVhbEFsdGVybmF0ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVh
dHVyZVRhZygiY2FsdCIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoK
ICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiY2FsdCIpLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTEzOCwxMiArMTM4LDEyIEBAIHN0YXRpYyBGZWF0dXJl
c01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50
U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MucG9zaXRpb24p
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQ
b3NpdGlvbjo6U3Vic2NyaXB0OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJz
dWJzIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246
OlN1cGVyc2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNj
cmlwdDoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygic3VwcyIpLCAxKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTE1MSwyNCArMTUxLDI0IEBAIHN0YXRpYyBG
ZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRW
YXJpYW50U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuY2Fw
cykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGw6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImMyc2MiKSwgMSk7CiAgICAg
ICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKICAgICAgICAgcmVzdWx0LmFkZChmb250
RmVhdHVyZVRhZygic21jcCIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQ
ZXRpdGU6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImMycGMiKSwgMSk7CiAg
ICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgogICAgICAgICByZXN1bHQuYWRk
KGZvbnRGZWF0dXJlVGFnKCJwY2FwIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpV
bmljYXNlOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJ1bmljIiksIDEpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgogICAgICAgICByZXN1bHQuYWRkKGZv
bnRGZWF0dXJlVGFnKCJ0aXRsIiksIDEpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpA
QCAtMTc2LDEyICsxNzYsMTIgQEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0
dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljRmlndXJlKSB7Ci0gICAgY2FzZSBGb250
VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljRmlndXJlOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZl
YXR1cmVUYWcoImxudW0iKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgogICAgICAgICByZXN1bHQuYWRkKGZv
bnRGZWF0dXJlVGFnKCJvbnVtIiksIDEpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpA
QCAtMTg5LDEyICsxODksMTIgQEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0
dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljU3BhY2luZykgewotICAgIGNhc2UgRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKICAgICAgICAg
cmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygicG51bSIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM6CiAgICAg
ICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInRudW0iKSwgMSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CkBAIC0yMDIsMTIgKzIwMiwxMiBAQCBzdGF0aWMgRmVhdHVyZXNNYXAg
Y29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRp
bmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNGcmFjdGlv
bikgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbDoKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlv
bnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZy
YWN0aW9uczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiZnJhYyIpLCAxKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3Rh
Y2tlZEZyYWN0aW9uczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246
OlN0YWNrZWRGcmFjdGlvbnM6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImFm
cmMiKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yMTUsOSArMjE1LDkg
QEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMo
Y29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRT
ZXR0aW5ncy5udW1lcmljT3JkaW5hbCkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3Jk
aW5hbDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpO
b3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bDo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6CiAg
ICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoIm9yZG4iKSwgMSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yMjUsOSArMjI1LDkgQEAgc3RhdGljIEZlYXR1cmVzTWFw
IGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0
aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljU2xhc2hl
ZFplcm8pIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw6CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Olll
czoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86OlllczoKICAg
ICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiemVybyIpLCAxKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKQEAgLTIzNSw5ICsyMzUsOSBAQCBzdGF0aWMgRmVhdHVyZXNNYXAg
Y29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRp
bmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmFsdGVybmF0ZXMpIHsK
LSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6CiAgICAgICAgIHJlc3VsdC5hZGQo
Zm9udEZlYXR1cmVUYWcoImhpc3QiKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CkBAIC0yNDUsMjQgKzI0NSwyNCBAQCBzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVT
ZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAog
ICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblZhcmlhbnQpIHsKLSAgICBjYXNl
IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRG
ZWF0dXJlVGFnKCJqcDc4IiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWco
ImpwODMiKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50OjpKaXM5MDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM5MDoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygianA5MCIpLCAx
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OkppczA0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0
OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJqcDA0IiksIDEpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmll
ZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVk
OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJzbXBsIiksIDEpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9u
YWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9u
YWw6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInRyYWQiKSwgMSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTIgKzI3MCwxMiBAQCBzdGF0aWMgRmVh
dHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFy
aWFudFNldHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RB
c2lhbldpZHRoKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgogICAgICAgICByZXN1
bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJmd2lkIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOgogICAgICAgICByZXN1
bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJwd2lkIiksIDEpOwogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgpAQCAtMjgzLDkgKzI4Myw5IEBAIHN0YXRpYyBGZWF0dXJlc01hcCBjb21wdXRlRmVh
dHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmCiAgICAg
fQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuUnVieSkgewotICAgIGNh
c2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVh
c3RBc2lhblJ1Ynk6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygicnVi
eSIpLCAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTUzOCw4ICs1MzgsOCBA
QCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmln
aW5hbEZvbnQsIGNvbnN0IEZvbnREZXNjcgogICAgIGF1dG8gZm9udFNlbGVjdGlvblJlcXVlc3Qg
PSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICBhdXRvIGZvbnRT
dHlsZUF4aXMgPSBmb250RGVzY3JpcHRpb24uZm9udFN0eWxlQXhpcygpOwogCi0gICAgYm9vbCBm
b3JjZU9wdGljYWxTaXppbmdPbiA9IGZvbnRPcHRpY2FsU2l6aW5nID09IEZvbnRPcHRpY2FsU2l6
aW5nOjpFbmFibGVkICYmIGZvbnRUeXBlLnZhcmlhdGlvblR5cGUgPT0gRm9udFR5cGU6OlZhcmlh
dGlvblR5cGU6OlRydWVUeXBlR1ggJiYgZGVmYXVsdFZhbHVlcy5jb250YWlucyh7eydvJywgJ3An
LCAncycsICd6J319KTsKLSAgICBib29sIGZvcmNlVmFyaWF0aW9ucyA9IGRlZmF1bHRWYWx1ZXMu
Y29udGFpbnMoe3sndycsICdnJywgJ2gnLCAndCd9fSkgfHwgZGVmYXVsdFZhbHVlcy5jb250YWlu
cyh7eyd3JywgJ2QnLCAndCcsICdoJ319KSB8fCAoZm9udFN0eWxlQXhpcyA9PSBGb250U3R5bGVB
eGlzOjppdGFsICYmIGRlZmF1bHRWYWx1ZXMuY29udGFpbnMoe3snaScsICd0JywgJ2EnLCAnbCd9
fSkpIHx8IChmb250U3R5bGVBeGlzID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgZGVmYXVsdFZh
bHVlcy5jb250YWlucyh7eydzJywgJ2wnLCAnbicsICd0J319KSk7CisgICAgYm9vbCBmb3JjZU9w
dGljYWxTaXppbmdPbiA9IGZvbnRPcHRpY2FsU2l6aW5nID09IFBBTDo6Rm9udE9wdGljYWxTaXpp
bmc6OkVuYWJsZWQgJiYgZm9udFR5cGUudmFyaWF0aW9uVHlwZSA9PSBGb250VHlwZTo6VmFyaWF0
aW9uVHlwZTo6VHJ1ZVR5cGVHWCAmJiBkZWZhdWx0VmFsdWVzLmNvbnRhaW5zKHsgeyAnbycsICdw
JywgJ3MnLCAneicgfSB9KTsKKyAgICBib29sIGZvcmNlVmFyaWF0aW9ucyA9IGRlZmF1bHRWYWx1
ZXMuY29udGFpbnMoeyB7ICd3JywgJ2cnLCAnaCcsICd0JyB9IH0pIHx8IGRlZmF1bHRWYWx1ZXMu
Y29udGFpbnMoeyB7ICd3JywgJ2QnLCAndCcsICdoJyB9IH0pIHx8IChmb250U3R5bGVBeGlzID09
IFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbCAmJiBkZWZhdWx0VmFsdWVzLmNvbnRhaW5zKHsgeyAn
aScsICd0JywgJ2EnLCAnbCcgfSB9KSkgfHwgKGZvbnRTdHlsZUF4aXMgPT0gUEFMOjpGb250U3R5
bGVBeGlzOjpzbG50ICYmIGRlZmF1bHRWYWx1ZXMuY29udGFpbnMoeyB7ICdzJywgJ2wnLCAnbics
ICd0JyB9IH0pKTsKICAgICBjb25zdCBhdXRvJiB2YXJpYXRpb25zID0gZm9udERlc2NyaXB0aW9u
LnZhcmlhdGlvblNldHRpbmdzKCk7CiAKICAgICBjb25zdCBhdXRvJiBmZWF0dXJlcyA9IGZvbnRE
ZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKTsKQEAgLTU1MSw5ICs1NTEsOSBAQCBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZvbnQs
IGNvbnN0IEZvbnREZXNjcgogICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgZm9udFR5cGUu
dHJhY2tpbmdUeXBlID09IEZvbnRUeXBlOjpUcmFja2luZ1R5cGU6Ok1hbnVhbCBoZXJlLCBidXQg
aW4gb3JkZXIgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBz
eXN0ZW0sIHdlIGRvbid0LgogICAgIGJvb2wgbm9Gb250RmVhdHVyZVNldHRpbmdzID0gZmVhdHVy
ZXMuaXNFbXB0eSgpOwogICAgIGJvb2wgbm9Gb250VmFyaWF0aW9uU2V0dGluZ3MgPSAhZm9yY2VW
YXJpYXRpb25zICYmIHZhcmlhdGlvbnMuaXNFbXB0eSgpOwotICAgIGJvb2wgdGV4dFJlbmRlcmlu
Z01vZGVJc0F1dG8gPSB0ZXh0UmVuZGVyaW5nTW9kZSA9PSBUZXh0UmVuZGVyaW5nTW9kZTo6QXV0
b1RleHRSZW5kZXJpbmc7CisgICAgYm9vbCB0ZXh0UmVuZGVyaW5nTW9kZUlzQXV0byA9IHRleHRS
ZW5kZXJpbmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5n
OwogICAgIGJvb2wgdmFyaWFudFNldHRpbmdzSXNOb3JtYWwgPSB2YXJpYW50U2V0dGluZ3MuaXNB
bGxOb3JtYWwoKTsKLSAgICBib29sIGRvbnROZWVkVG9BcHBseU9wdGljYWxTaXppbmcgPSBmb250
T3B0aWNhbFNpemluZyA9PSBGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCAmJiAhZm9yY2VPcHRp
Y2FsU2l6aW5nT247CisgICAgYm9vbCBkb250TmVlZFRvQXBwbHlPcHRpY2FsU2l6aW5nID0gZm9u
dE9wdGljYWxTaXppbmcgPT0gUEFMOjpGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCAmJiAhZm9y
Y2VPcHRpY2FsU2l6aW5nT247CiAgICAgYm9vbCBmb250RmFjZURvZXNudFNwZWNpZnlGZWF0dXJl
cyA9ICFmb250Q3JlYXRpb25Db250ZXh0LmZvbnRGYWNlRmVhdHVyZXMoKSB8fCBmb250Q3JlYXRp
b25Db250ZXh0LmZvbnRGYWNlRmVhdHVyZXMoKS0+aXNFbXB0eSgpOwogICAgIGlmIChub0ZvbnRG
ZWF0dXJlU2V0dGluZ3MgJiYgbm9Gb250VmFyaWF0aW9uU2V0dGluZ3MgJiYgdGV4dFJlbmRlcmlu
Z01vZGVJc0F1dG8gJiYgdmFyaWFudFNldHRpbmdzSXNOb3JtYWwgJiYgZG9udE5lZWRUb0FwcGx5
T3B0aWNhbFNpemluZyAmJiBmb250RmFjZURvZXNudFNwZWNpZnlGZWF0dXJlcyAmJiAhc2hvdWxk
RGlzYWJsZUxpZ2F0dXJlc0ZvclNwYWNpbmcgJiYgZG9udE5lZWRUb0FwcGx5Rm9udFBhbGV0dGVz
KSB7CiAjaWYgSEFWRShDVEZPTlRDUkVBVEVGT1JDSEFSQUNURVJTV0lUSExBTkdVQUdFQU5ET1BU
SU9OKQpAQCAtNjEzLDcgKzYxMyw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0
Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgICAg
IH0KICAgICAgICAgYXBwbHlWYXJpYXRpb24oe3sndycsICdnJywgJ2gnLCAndCd9fSwgd2VpZ2h0
KTsKICAgICAgICAgYXBwbHlWYXJpYXRpb24oe3sndycsICdkJywgJ3QnLCAnaCd9fSwgd2lkdGgp
OwotICAgICAgICBpZiAoZm9udFN0eWxlQXhpcyA9PSBGb250U3R5bGVBeGlzOjppdGFsKQorICAg
ICAgICBpZiAoZm9udFN0eWxlQXhpcyA9PSBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0YWwpCiAgICAg
ICAgICAgICBhcHBseVZhcmlhdGlvbih7eydpJywgJ3QnLCAnYScsICdsJ319LCAxKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYXBwbHlWYXJpYXRpb24oe3sncycsICdsJywgJ24nLCAndCd9
fSwgc2xvcGUpOwpAQCAtNjM2LDcgKzYzNiw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBh
cmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAg
ICAgICAgIGFwcGx5RmVhdHVyZShuZXdGZWF0dXJlLmtleSwgbmV3RmVhdHVyZS52YWx1ZSk7CiAK
ICAgICAvLyBTdGVwIDExOiBPdGhlciBwcm9wZXJ0aWVzCi0gICAgaWYgKHRleHRSZW5kZXJpbmdN
b2RlID09IFRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNwZWVkKSB7CisgICAgaWYgKHRleHRS
ZW5kZXJpbmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQpIHsK
ICAgICAgICAgYXBwbHlGZWF0dXJlKGZvbnRGZWF0dXJlVGFnKCJsaWdhIiksIDApOwogICAgICAg
ICBhcHBseUZlYXR1cmUoZm9udEZlYXR1cmVUYWcoImNsaWciKSwgMCk7CiAgICAgICAgIGFwcGx5
RmVhdHVyZShmb250RmVhdHVyZVRhZygiZGxpZyIpLCAwKTsKQEAgLTY5MSw3ICs2OTEsNyBAQCBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5h
bEZvbnQsIGNvbnN0IEZvbnREZXNjcgogCiAgICAgLy8gU3RlcCA5OiBmb250LW9wdGljYWwtc2l6
aW5nCiAgICAgLy8gRklYTUU6IEFwcGx5IHRoaXMgYmVmb3JlIGZvbnQtdmFyaWF0aW9uLXNldHRp
bmdzCi0gICAgaWYgKGZvcmNlT3B0aWNhbFNpemluZ09uIHx8IHRleHRSZW5kZXJpbmdNb2RlID09
IFRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHkpIHsKKyAgICBpZiAoZm9yY2VP
cHRpY2FsU2l6aW5nT24gfHwgdGV4dFJlbmRlcmluZ01vZGUgPT0gUEFMOjpUZXh0UmVuZGVyaW5n
TW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5KSB7CiAjaWYgSEFWRShDT1JFVEVYVF9BVVRPX09QVElD
QUxfU0laSU5HKQogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgp
LCBrQ1RGb250T3B0aWNhbFNpemVBdHRyaWJ1dGUsIENGU1RSKCJhdXRvIikpOwogI2Vsc2UKQEAg
LTY5OSw3ICs2OTksNyBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250
KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIGNvbnN0IEZvbnREZXNjcgogICAgICAgICBhdXRvIHNp
emVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckNHRmxvYXRUeXBlLCAmc2l6ZSkpOwogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1
ZShhdHRyaWJ1dGVzLmdldCgpLCBrQ1RGb250T3B0aWNhbFNpemVBdHRyaWJ1dGUsIHNpemVOdW1i
ZXIuZ2V0KCkpOwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChmb250T3B0aWNhbFNpemluZyA9PSBG
b250T3B0aWNhbFNpemluZzo6RGlzYWJsZWQpIHsKKyAgICB9IGVsc2UgaWYgKGZvbnRPcHRpY2Fs
U2l6aW5nID09IFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkRpc2FibGVkKSB7CiAjaWYgSEFWRShD
T1JFVEVYVF9BVVRPX09QVElDQUxfU0laSU5HKQogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1
ZShhdHRyaWJ1dGVzLmdldCgpLCBrQ1RGb250T3B0aWNhbFNpemVBdHRyaWJ1dGUsIENGU1RSKCJu
b25lIikpOwogI2VuZGlmCkBAIC04MzcsOCArODM3LDggQEAgU3ludGhlc2lzUGFpciBjb21wdXRl
TmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiBmb250LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGYKICAgICAgICAgICAgIGFjdHVhbFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZv
bnQpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNTeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlw
dGlvbi5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAoZGVzaXJlZFRy
YWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0
Qm9sZCk7Ci0gICAgYm9vbCBuZWVkc1N5bnRoZXRpY09ibGlxdWUgPSAoZm9udERlc2NyaXB0aW9u
LmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkgJiYgKGRlc2lyZWRUcmFpdHMg
JiBrQ1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0SXRh
bGljKTsKKyAgICBib29sIG5lZWRzU3ludGhldGljQm9sZCA9IChmb250RGVzY3JpcHRpb24uZm9u
dFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAoZGVzaXJlZFRyYWl0
cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0Qm9s
ZCk7CisgICAgYm9vbCBuZWVkc1N5bnRoZXRpY09ibGlxdWUgPSAoZm9udERlc2NyaXB0aW9uLmZv
bnRTeW50aGVzaXMoKSAmIFBBTDo6Rm9udFN5bnRoZXNpc1N0eWxlKSAmJiAoZGVzaXJlZFRyYWl0
cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOwogCiAgICAgcmV0dXJuIFN5bnRoZXNpc1BhaXIobmVlZHNTeW50aGV0aWNCb2xkLCBu
ZWVkc1N5bnRoZXRpY09ibGlxdWUpOwogfQpAQCAtODYyLDEzICs4NjIsMTMgQEAgY2xhc3MgRm9u
dERhdGFiYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgRm9udERhdGFiYXNlJiBzaW5nbGV0b25B
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpCiAgICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Rm9udERhdGFiYXNlPiBkYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFzZT4gZGF0YWJh
c2UoUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzKTsKICAgICAgICAgcmV0dXJuIGRh
dGFiYXNlOwogICAgIH0KIAogICAgIHN0YXRpYyBGb250RGF0YWJhc2UmIHNpbmdsZXRvbkRpc2Fs
bG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxGb250RGF0YWJhc2U+IGRhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpO
byk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGF0YWJhc2U+IGRhdGFiYXNl
KFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKICAgICAgICAgcmV0dXJuIGRhdGFi
YXNlOwogICAgIH0KIApAQCAtODc4LDE0ICs4NzgsMTQgQEAgcHVibGljOgogICAgIHN0cnVjdCBJ
bnN0YWxsZWRGb250IHsKICAgICAgICAgSW5zdGFsbGVkRm9udCgpID0gZGVmYXVsdDsKIAotICAg
ICAgICBJbnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIEFs
bG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorICAgICAgICBJ
bnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIFBBTDo6QWxs
b3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiAgICAgICAgICAg
ICA6IGZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yKQogICAgICAgICAgICAgLCBjYXBhYmls
aXRpZXMoY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IpKQogICAg
ICAgICB7CiAjaWYgSEFWRShDVEZPTlRDUkVBVEVGT1JDSEFSQUNURVJTV0lUSExBTkdVQUdFQU5E
T1BUSU9OKQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKICNlbHNlCi0gICAgICAgICAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgIT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICAgICAgaWYgKGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzICE9IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
CiAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5n
ZXQoKSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtOTkxLDcgKzk5MSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFz
ZT47CiAKLSAgICBGb250RGF0YWJhc2UoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpCisgICAgRm9udERhdGFiYXNlKFBBTDo6QWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiAgICAgICAgIDogbV9hbGxvd1VzZXJJbnN0
YWxsZWRGb250cyhhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKICAgICB7CiAgICAgfQpAQCAtOTk5
LDcgKzk5OSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlw
dG9yc0xvY2s7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxJbnN0YWxsZWRG
b250RmFtaWx5Pj4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMgV1RGX0dVQVJERURfQllf
TE9DSyhtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2spOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBJbnN0YWxsZWRGb250PiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnM7Ci0g
ICAgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250czsKKyAg
ICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHM7
CiB9OwogCiAvLyBCZWNhdXNlIHRoaXMgc3RydWN0IGhvbGRzIGludGVybWVkaWF0ZSB2YWx1ZXMg
d2hpY2ggbWF5IGJlIGluIHRoZSBjb21wcmVzc2VkIC0xIC0gMSBHWCByYW5nZSwgd2UgZG9uJ3Qg
d2FudCB0byB1c2UgdGhlIHJlbGF0aXZlbHkgbGFyZ2UKQEAgLTExNjgsOSArMTE2OCw5IEBAIHN0
YXRpYyBjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChj
b25zdCBGb250RGF0YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRG
b250c1tpbmRleF07CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250
Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6Omdl
dEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlOYW1lLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogewotICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRv
bkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRp
c2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisgICAgYXV0byYgZm9udERhdGFiYXNlID0g
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
IDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
OwogICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1p
bHkoZmFtaWx5TmFtZS5zdHJpbmcoKSk7CiAgICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKQEAgLTExOTgsNyArMTE5OCw3IEBAIHN0YXRpYyBib29sIGlzRG90UHJl
Zml4ZWRGb3JiaWRkZW5Gb250KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICAgICAgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250
cm91bmRlZCIpOwogfQogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRo
RmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVx
dWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwg
ZmxvYXQgc2l6ZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7
CiAgICAgaWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6
ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKQEAgLTEyMDksNyArMTIwOSw3IEBA
IHN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBGb250U2VsCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKICAg
ICB9CiAKLSAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25B
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNh
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOworICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFs
bG93VXNlckluc3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Olll
cyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6
IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsK
ICAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9y
RmFtaWx5KGZhbWlseS5zdHJpbmcoKSk7CiAgICAgaWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBh
Y2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktp
dCwgd2UgY2xhaW0gdG8gYWxzbwpAQCAtMTI1OSw3ICsxMjU5LDcgQEAgc3RhdGljIHZvaWQgaW52
YWxpZGF0ZUZvbnRDYWNoZSgpCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorc3RhdGljIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2l6ZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKIHsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6ZWZmZWN0aXZlRmFtaWx5QXQoKSBpbiBGb250RGVzY3JpcHRpb25Db2NvYS5jcHAKICAgICBz
dGQ6Om9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMzg3LDcgKzEz
ODcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIGlmICghZm9udCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKCkgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgIGlm
IChmb250RGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA9PSBQQUw6
OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykKICAgICAgICAgbV9zZWVuRmFtaWxpZXNGb3JQ
cmV3YXJtaW5nLmFkZChGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGZh
bWlseSkpOwogCiAgICAgYXV0byBbc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZV0gPSBj
b21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9s
ZE9ibGlxdWVQYWlyKCk7CkBAIC0xNDMxLDIxICsxNDMxLDIxIEBAIHN0YXRpYyBib29sIGlzVXNl
ckluc3RhbGxlZEZvbnQoQ1RGb250UmVmIGZvbnQpCiAjZW5kaWYKIAogI2lmIEhBVkUoQ1RGT05U
Q1JFQVRFRk9SQ0hBUkFDVEVSU1dJVEhMQU5HVUFHRUFORE9QVElPTikKLXN0YXRpYyBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYgZm9udCwgQ0ZT
dHJpbmdSZWYgbG9jYWxlU3RyaW5nLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
K3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyhDVEZv
bnRSZWYgZm9udCwgQ0ZTdHJpbmdSZWYgbG9jYWxlU3RyaW5nLCBQQUw6OkFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIENGSW5kZXggY292ZXJlZExlbmd0aCA9IDA7Ci0g
ICAgYXV0byBmYWxsYmFja09wdGlvbiA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93
VXNlckluc3RhbGxlZEZvbnRzOjpObyA/IGtDVEZvbnRGYWxsYmFja09wdGlvblN5c3RlbSA6IGtD
VEZvbnRGYWxsYmFja09wdGlvbkRlZmF1bHQ7CisgICAgYXV0byBmYWxsYmFja09wdGlvbiA9IGFs
bG93VXNlckluc3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
ID8ga0NURm9udEZhbGxiYWNrT3B0aW9uU3lzdGVtIDoga0NURm9udEZhbGxiYWNrT3B0aW9uRGVm
YXVsdDsKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzV2l0aExh
bmd1YWdlQW5kT3B0aW9uKGZvbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGNo
YXJhY3RlcnMpLCBsZW5ndGgsIGxvY2FsZVN0cmluZywgZmFsbGJhY2tPcHRpb24sICZjb3ZlcmVk
TGVuZ3RoKSk7CiB9CiAjZWxzZQotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZv
bnRGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBmb250LCBDRlN0cmluZ1JlZiBsb2NhbGVTdHJpbmcs
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JDaGFy
YWN0ZXJzKENURm9udFJlZiBmb250LCBDRlN0cmluZ1JlZiBsb2NhbGVTdHJpbmcsIFBBTDo6QWxs
b3dVc2VySW5zdGFsbGVkRm9udHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0gMDsKICAgICByZXR1cm4gYWRv
cHRDRihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdlKGZvbnQsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgsIGxvY2FsZVN0cmlu
ZywgJmNvdmVyZWRMZW5ndGgpKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgUmV0YWluUHRyPENURm9u
dFJlZj4gbG9va3VwRmFsbGJhY2tGb250KENURm9udFJlZiBmb250LCBGb250U2VsZWN0aW9uVmFs
dWUgZm9udFdlaWdodCwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBsb29rdXBGYWxs
YmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRTZWxlY3Rpb25WYWx1ZSBmb250V2VpZ2h0LCBj
b25zdCBBdG9tU3RyaW5nJiBsb2NhbGUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+IDApOwogCkBAIC0xNDU5LDcgKzE0NTksNyBA
QCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gbG9va3VwRmFsbGJhY2tGb250KENURm9udFJl
ZiBmb250LCBGb250U2VsZWN0aW9uVmFsdQogI2VuZGlmCiAKICAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZUZvbnRGb3JDaGFyYWN0ZXJzKGZvbnQsIGxvY2FsZVN0cmluZy5nZXQoKSwgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMsIGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgQVNTRVJUKCFpc1VzZXJJ
bnN0YWxsZWRGb250KHJlc3VsdC5nZXQoKSkgfHwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Olllcyk7CisgICAgQVNTRVJUKCFpc1VzZXJJbnN0YWxs
ZWRGb250KHJlc3VsdC5nZXQoKSkgfHwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpB
bGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgLy8gQ2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHdvbid0IGluY2x1ZGUgbXVsdGlwbGUg
Y29kZSBwb2ludHMuICJMZW5ndGgiIGlzIHRvIGtub3cgaG93IG1hbnkgY29kZSB1bml0cwpAQCAt
MTU1OCw5ICsxNTU4LDkgQEAgc3RkOjpvcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogfQogCi12b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQordm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9u
dHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBQQUw6OkFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewotICAgIGlmIChhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pIHsKKyAgICBpZiAo
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
Tm8pIHsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcywga0NURm9udFVz
ZXJJbnN0YWxsZWRBdHRyaWJ1dGUsIGtDRkJvb2xlYW5GYWxzZSk7CiAgICAgICAgIENURm9udEZh
bGxiYWNrT3B0aW9uIGZhbGxiYWNrT3B0aW9uID0ga0NURm9udEZhbGxiYWNrT3B0aW9uU3lzdGVt
OwogICAgICAgICBhdXRvIGZhbGxiYWNrT3B0aW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmZmFsbGJhY2tP
cHRpb24pKTsKQEAgLTE1NjgsNyArMTU2OCw3IEBAIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3Rh
bGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VyCiAg
ICAgfQogfQogCi1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9u
dHMoQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvciwgQ0dGbG9hdCBzaXplLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1JldGFpblB0cjxD
VEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVm
IGZvbnREZXNjcmlwdG9yLCBDR0Zsb2F0IHNpemUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKICAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5n
ZXQoKSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAgUmV0
YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udERlc2Ny
aXB0b3JSZWYgZm9udERlc2NyaXAKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRo
Rm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IsIHNpemUsIG51bGxwdHIpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIGlzRm9udE1hdGNoaW5nVXNlckluc3RhbGxlZEZvbnRGYWxsYmFjayhD
VEZvbnRSZWYgZm9udCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGb250TWF0Y2hpbmdVc2VySW5zdGFsbGVkRm9u
dEZhbGxiYWNrKENURm9udFJlZiBmb250LCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGJvb2wgd2lsbEZhbGxiYWNrVG9TeXN0ZW1P
bmx5ID0gZmFsc2U7CiAgICAgaWYgKGF1dG8gZm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlUmVm
ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShm
b250LCBrQ1RGb250RmFsbGJhY2tPcHRpb25BdHRyaWJ1dGUpKSkpIHsKQEAgLTE1ODgsMTEgKzE1
ODgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzRm9udE1hdGNoaW5nVXNlckluc3RhbGxlZEZv
bnRGYWxsYmFjayhDVEZvbnRSZWYgZm9udCwgQWxsb3cKICAgICAgICAgd2lsbEZhbGxiYWNrVG9T
eXN0ZW1Pbmx5ID0gZm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlID09IGtDVEZvbnRGYWxsYmFj
a09wdGlvblN5c3RlbTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZEZhbGxiYWNrVG9TeXN0ZW1P
bmx5ID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
Ok5vOworICAgIGJvb2wgc2hvdWxkRmFsbGJhY2tUb1N5c3RlbU9ubHkgPSBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cyA9PSBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObzsKICAgICByZXR1
cm4gd2lsbEZhbGxiYWNrVG9TeXN0ZW1Pbmx5ID09IHNob3VsZEZhbGxiYWNrVG9TeXN0ZW1Pbmx5
OwogfQogCi1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMo
Q1RGb250UmVmIGZvbnQsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKQorUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRz
KENURm9udFJlZiBmb250LCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQogewogICAgIGlmIChpc0ZvbnRNYXRjaGluZ1VzZXJJbnN0YWxsZWRGb250
RmFsbGJhY2soZm9udCwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKQogICAgICAgICByZXR1cm4g
Zm9udDsKQEAgLTE2MDYsMTggKzE2MDYsMTggQEAgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRl
Rm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udFJlZiBmb250LCBBbGxvd1VzZXJJbnN0YWwKICAg
ICByZXR1cm4gZm9udDsKIH0KIAotdm9pZCBhZGRBdHRyaWJ1dGVzRm9yV2ViRm9udHMoQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKK3ZvaWQgYWRkQXR0cmlidXRlc0ZvcldlYkZvbnRzKENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKLSAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKSB7CisgICAgaWYgKGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKSB7CiAg
ICAgICAgIENURm9udEZhbGxiYWNrT3B0aW9uIGZhbGxiYWNrT3B0aW9uID0ga0NURm9udEZhbGxi
YWNrT3B0aW9uU3lzdGVtOwogICAgICAgICBhdXRvIGZhbGxiYWNrT3B0aW9uTnVtYmVyID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50NjRU
eXBlLCAmZmFsbGJhY2tPcHRpb24pKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0
cmlidXRlcywga0NURm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlLCBmYWxsYmFja09wdGlvbk51
bWJlci5nZXQoKSk7CiAgICAgfQogfQogCi1SZXRhaW5QdHI8Q0ZTZXRSZWY+IGluc3RhbGxlZEZv
bnRNYW5kYXRvcnlBdHRyaWJ1dGVzKEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQorUmV0YWluUHRyPENGU2V0UmVmPiBpbnN0YWxsZWRGb250TWFuZGF0b3J5
QXR0cmlidXRlcyhQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKQogewotICAgIGlmIChhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250czo6Tm8pIHsKKyAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0g
UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pIHsKICAgICAgICAgQ0ZUeXBlUmVmIG1h
bmRhdG9yeUF0dHJpYnV0ZXNWYWx1ZXNbXSA9IHsga0NURm9udEZhbWlseU5hbWVBdHRyaWJ1dGUs
IGtDVEZvbnRQb3N0U2NyaXB0TmFtZUF0dHJpYnV0ZSwga0NURm9udEVuYWJsZWRBdHRyaWJ1dGUs
IGtDVEZvbnRVc2VySW5zdGFsbGVkQXR0cmlidXRlLCBrQ1RGb250RmFsbGJhY2tPcHRpb25BdHRy
aWJ1dGUgfTsKICAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZTZXRDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgbWFuZGF0b3J5QXR0cmlidXRlc1ZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChtYW5k
YXRvcnlBdHRyaWJ1dGVzVmFsdWVzKSwgJmtDRlR5cGVTZXRDYWxsQmFja3MpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuaAppbmRleCAwMDM1YWJhMWQzZjQ0OWUyZTRmYTc2NTMxZjBjNDA4OTA1
Zjg1ZDk2Li5mNTBkM2NlMjg2MGVhYjk5MjZlNzlmOGNiMGVkYmZjNTdiNDU5ZWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmgKQEAgLTY1LDEzICs2NSwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRh
ZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVy
VAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRDcmVhdGlvbkNvbnRleHQmLCBib29sIGFw
cGx5V2VpZ2h0V2lkdGhTbG9wZVZhcmlhdGlvbnMgPSB0cnVlKTsKIGVudW0gY2xhc3MgU2hvdWxk
Q29tcHV0ZVBoeXNpY2FsVHJhaXRzIDogYm9vbCB7IE5vLCBZZXMgfTsKIFN5bnRoZXNpc1BhaXIg
Y29tcHV0ZU5lY2Vzc2FyeVN5bnRoZXNpcyhDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA9IFNob3VsZENvbXB1dGVQaHlzaWNhbFRy
YWl0czo6Tm8sIGJvb2wgaXNQbGF0Zm9ybUZvbnQgPSBmYWxzZSk7Ci1SZXRhaW5QdHI8Q1RGb250
UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKK1JldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZSwgZmxv
YXQgc2l6ZSk7CiBGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnRE
ZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYpOwotdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5z
dGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyk7Ci1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFs
bGVkRm9udHMoQ1RGb250RGVzY3JpcHRvclJlZiwgQ0dGbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7Ci1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVk
Rm9udHMoQ1RGb250UmVmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci12b2lkIGFkZEF0dHJp
YnV0ZXNGb3JXZWJGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKLVJldGFpblB0cjxDRlNldFJlZj4gaW5zdGFsbGVkRm9udE1h
bmRhdG9yeUF0dHJpYnV0ZXMoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwordm9pZCBhZGRBdHRy
aWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVz
LCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKK1JldGFpblB0cjxDVEZvbnRSZWY+IGNy
ZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNp
emUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworUmV0YWluUHRyPENURm9udFJlZj4g
Y3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udFJlZiwgUEFMOjpBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7Cit2b2lkIGFkZEF0dHJpYnV0ZXNGb3JXZWJGb250cyhDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworUmV0
YWluUHRyPENGU2V0UmVmPiBpbnN0YWxsZWRGb250TWFuZGF0b3J5QXR0cmlidXRlcyhQQUw6OkFs
bG93VXNlckluc3RhbGxlZEZvbnRzKTsKIAogVmFyaWF0aW9uRGVmYXVsdHNNYXAgZGVmYXVsdFZh
cmlhdGlvblZhbHVlcyhDVEZvbnRSZWYsIFNob3VsZExvY2FsaXplQXhpc05hbWVzKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNj
cmlwdGlvbkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAppbmRleCA1YTRlY2U2OTI4MWE3ZjY2MWMyNTNmZjc5
NTY1NjcxNzc5OThjZGEwLi5iYmFkYjJjOGI4YzE3ODU0MTA4NjNiY2ZhOWQ3OWZlNDY4NjMyMTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
RGVzY3JpcHRpb25Db2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHN0YXRp
YyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTeXN0ZW1Gb250S2luZD4gbWF0Y2hTeXN0ZW1Gb250VXNl
KGNvbnN0IEF0b21TdHJpbmcmCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGlj
IGlubGluZSBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+PiBzeXN0ZW1Gb250
Q2FzY2FkZUxpc3QoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRv
bVN0cmluZyYgY3NzRmFtaWx5LCBTeXN0ZW1Gb250S2luZCBzeXN0ZW1Gb250S2luZCwgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgaW5saW5l
IFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZvbnRDYXNjYWRl
TGlzdChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5n
JiBjc3NGYW1pbHksIFN5c3RlbUZvbnRLaW5kIHN5c3RlbUZvbnRLaW5kLCBQQUw6OkFsbG93VXNl
ckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIHJldHVybiBT
eXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6c2luZ2xldG9uKCkuY2FzY2FkZUxpc3QoZGVzY3Jp
cHRpb24sIGNzc0ZhbWlseSwgc3lzdGVtRm9udEtpbmQsIGFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcAppbmRleCBmM2U2
ZmJjODgyYTBjMmQ1MTViOGU4ZjYxZjY5YzFkMmUzYmUyMzk3Li42ZTJkMDAxNzk1MTRhOWI5NzIx
NjRhMDQ0YTZlZDJiZjEyN2MwNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29y
ZVRleHQuY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBTeXN0ZW1Gb250RGF0YWJhc2VDb3Jl
VGV4dDo6Y2xlYXIoKQogICAgIG1fbW9ub3NwYWNlRmFtaWxpZXMuY2xlYXIoKTsKIH0KIAotUmV0
YWluUHRyPENURm9udFJlZj4gU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OmNyZWF0ZUZvbnRC
eUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhhdmlvcihDVEZvbnRSZWYg
Zm9udCwgQ0dGbG9hdCB3ZWlnaHQsIENHRmxvYXQgd2lkdGgsIGJvb2wgaXRhbGljLCBmbG9hdCBz
aXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cywgQ0ZT
dHJpbmdSZWYgZGVzaWduKQorUmV0YWluUHRyPENURm9udFJlZj4gU3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQ6OmNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJh
Y2tCZWhhdmlvcihDVEZvbnRSZWYgZm9udCwgQ0dGbG9hdCB3ZWlnaHQsIENHRmxvYXQgd2lkdGgs
IGJvb2wgaXRhbGljLCBmbG9hdCBzaXplLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzLCBDRlN0cmluZ1JlZiBkZXNpZ24pCiB7CiAgICAgYXV0byB3
ZWlnaHROdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckNHRmxvYXRUeXBlLCAmd2VpZ2h0KSk7CiAgICAgYXV0byB3aWR0aE51bWJlciA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyQ0dG
bG9hdFR5cGUsICZ3aWR0aCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHN0YXRpYyBDR0Zsb2F0IG1h
cFdpZHRoKEZvbnRTZWxlY3Rpb25WYWx1ZSB3aWR0aCkKICAgICByZXR1cm4gcGllY2V3aXNlUG9p
bnRzW3N0ZDo6c2l6ZShwaWVjZXdpc2VQb2ludHMpIC0gMV0ub3V0cHV0OwogfQogCi1TeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIFN5c3RlbUZvbnREYXRh
YmFzZUNvcmVUZXh0OjpzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBTeXN0ZW1Gb250S2lu
ZCBzeXN0ZW1Gb250S2luZCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCitTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0
ZXJzIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lLCBTeXN0ZW1Gb250S2luZCBzeXN0ZW1Gb250S2luZCwgUEFMOjpBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBDYXNjYWRlTGlzdFBhcmFt
ZXRlcnMgcmVzdWx0OwogICAgIHJlc3VsdC5sb2NhbGUgPSBkZXNjcmlwdGlvbi5jb21wdXRlZExv
Y2FsZSgpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpD
YXNjYWRlTGlzdFBhcmFtZXRlcnMgU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OnN5CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
Pj4gU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OmNhc2NhZGVMaXN0KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGNzc0ZhbWlseSwgU3lzdGVt
Rm9udEtpbmQgc3lzdGVtRm9udEtpbmQsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4g
U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OmNhc2NhZGVMaXN0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGNzc0ZhbWlseSwgU3lzdGVtRm9u
dEtpbmQgc3lzdGVtRm9udEtpbmQsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJuIGNhc2NhZGVMaXN0KHN5c3RlbUZvbnRQ
YXJhbWV0ZXJzKGRlc2NyaXB0aW9uLCBjc3NGYW1pbHksIHN5c3RlbUZvbnRLaW5kLCBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyksIHN5c3RlbUZvbnRLaW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250
RGF0YWJhc2VDb3JlVGV4dC5oCmluZGV4IDlhZDFlMGNjNDUwZjBlYWE4Mjk4MTczNTU5NzgwMGFj
MDgwNDk2ZDQuLjI5YWJmNjM5ZjczMDkzOTVmZTI0OWRhNWJmNjQwNzhjYTNmMDMwZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnRE
YXRhYmFzZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaApAQCAtODYsMTMgKzg2LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgQ0dGbG9hdCB3ZWlnaHQgeyAwIH07CiAgICAgICAgIENHRmxvYXQgd2lk
dGggeyAwIH07CiAgICAgICAgIGZsb2F0IHNpemUgeyAwIH07Ci0gICAgICAgIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzIHsgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6Ok5vIH07CisgICAgICAgIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgeyBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyB9Owog
ICAgICAgICBib29sIGl0YWxpYyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIHN0YXRpYyBTeXN0
ZW1Gb250RGF0YWJhc2VDb3JlVGV4dCYgc2luZ2xldG9uKCk7CiAKLSAgICBWZWN0b3I8UmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+PiBjYXNjYWRlTGlzdChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9tU3RyaW5nJiBjc3NGYW1pbHksIFN5c3RlbUZvbnRLaW5kLCBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9y
UmVmPj4gY2FzY2FkZUxpc3QoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmlu
ZyYgY3NzRmFtaWx5LCBTeXN0ZW1Gb250S2luZCwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7CiAKICAgICBTdHJpbmcgc2VyaWZGYW1pbHkoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwogICAg
IFN0cmluZyBzYW5zU2VyaWZGYW1pbHkoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwpAQCAtMTExLDEw
ICsxMTEsMTAgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVTeXN0
ZW1EZXNpZ25Gb250KFN5c3RlbUZvbnRLaW5kLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMm
KTsKICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVUZXh0U3R5bGVGb250KGNvbnN0IENh
c2NhZGVMaXN0UGFyYW1ldGVycyYpOwogCi0gICAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+
IGNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhhdmlv
cihDVEZvbnRSZWYsIENHRmxvYXQgd2VpZ2h0LCBDR0Zsb2F0IHdpZHRoLCBib29sIGl0YWxpYywg
ZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIENGU3RyaW5nUmVmIGRlc2lnbiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250QnlB
cHBseWluZ1dlaWdodFdpZHRoSXRhbGljc0FuZEZhbGxiYWNrQmVoYXZpb3IoQ1RGb250UmVmLCBD
R0Zsb2F0IHdlaWdodCwgQ0dGbG9hdCB3aWR0aCwgYm9vbCBpdGFsaWMsIGZsb2F0IHNpemUsIFBB
TDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIENGU3RyaW5nUmVmIGRlc2lnbiA9IG51bGxwdHIp
OwogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gcmVtb3ZlQ2FzY2Fk
ZUxpc3QoQ1RGb250RGVzY3JpcHRvclJlZik7CiAgICAgc3RhdGljIFZlY3RvcjxSZXRhaW5QdHI8
Q1RGb250RGVzY3JpcHRvclJlZj4+IGNvbXB1dGVDYXNjYWRlTGlzdChDVEZvbnRSZWYsIENGU3Ry
aW5nUmVmIGxvY2FsZSk7Ci0gICAgc3RhdGljIENhc2NhZGVMaXN0UGFyYW1ldGVycyBzeXN0ZW1G
b250UGFyYW1ldGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lLCBTeXN0ZW1Gb250S2luZCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAg
IHN0YXRpYyBDYXNjYWRlTGlzdFBhcmFtZXRlcnMgc3lzdGVtRm9udFBhcmFtZXRlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSwgU3lzdGVtRm9u
dEtpbmQsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCiAgICAgSGFzaE1hcDxDYXNj
YWRlTGlzdFBhcmFtZXRlcnMsIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+
LCBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Okhhc2gsIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDYXNj
YWRlTGlzdFBhcmFtZXRlcnM+PiBtX3N5c3RlbUZvbnRDYWNoZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGQ0M2JlNjkzMWNhZjExZWFlODBi
NTgwY2NiMmQ5NWEwOTIwNTliNDYuLjY2NGY5MjU5NDA5MjQ0NWU0YWYxYjc1NzUzMmIwMmQ0MWNm
NTViMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAK
QEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRl
cm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbgogICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9k
ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0
KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBm
b250LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgQVNTRVJU
KENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRT
bW9vdGhpbmdNCiAgICAgbV9zbW9vdGhpbmdNb2RlID0gc21vb3RoaW5nTW9kZTsKIAogICAgIG1f
b3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZvbnQpOwotICAg
IGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCkKKyAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKICAgICAgICAgbV9vcmlnaW5hbFRleHRN
YXRyaXggPSBjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0
cml4KTsKIAogICAgIGF1dG8mIGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuc3RhdGUoKTsKQEAgLTMz
OSw3ICszMzksNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhD
R1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgIC8vIGBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBoc2Agd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgb3JpZ2luYWwgYWR2YW5j
ZXMgZnJvbSB0aGUgcmVzdWx0aW5nCiAgICAgLy8gcG9zaXRpb25zIGJ5IGludmVydGluZyB0aGUg
b3BlcmF0aW9ucyBhcHBsaWVkIHRvIHRoZSBvcmlnaW5hbCBhZHZhbmNlcy4KICAgICBhdXRvIHRl
eHRNYXRyaXggPSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKLSAgICBpZiAoZm9udC0+cGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAg
aWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50
YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgIC8vIEtlZXAgdGhpcyBpbiBzeW5jIGFzIHRoZSBp
bnZlcnNlIG9mIGBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnNgLgogICAgICAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMjkxNz4gKGBEcmF3R2x5cGhzUmVj
b3JkZXJgIHNob3VsZCBiZSBhYmxlIHRvIHJlY29yZCtyZXBsYXkgdmVydGljYWwgdGV4dCkKICAg
ICB9CkBAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIEdseXBoc0FuZEFkdmFuY2VzIGZpbHRlck91
dE9UU1ZHR2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBQQUw6
OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1
Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsKICAgICAgICAgbV9v
d25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJlZiBmb250LCBDR0Zs
b2F0IGZvbnRTaXplLCBDVExpbmUKICAgICBtX293bmVyLnRyYW5zbGF0ZShsaW5lUmVjdC5vcmln
aW4ueCwgbGluZVJlY3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CiAgICAgbV9v
d25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRl
eHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNt
b290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIHByZXBhcmVJbnRlcm5hbENv
bnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgUEFM
OjpGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CiAgICAgQ0dDb250ZXh0
U2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwg
MCk7CiAgICAgQ1RMaW5lRHJhdyhsaW5lLCBtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkxNGFlMzVmMmFi
OGVkMmUuLjU5NDE0MmM4Mjc2MWEwOWI1MzczZmJjZDFkNjgxYzUwMzVhMGI1ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRl
Q29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK0Zv
bnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKICAgICA6IG1fZm9udHMo
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAs
IG1fZW5hYmxlS2VybmluZyhjb21wdXRlRW5hYmxlS2VybmluZygpKQogICAgICwgbV9yZXF1aXJl
c1NoYXBpbmcoY29tcHV0ZVJlcXVpcmVzU2hhcGluZygpKQpAQCAtNzAsNyArNzAsNyBAQCBBZmZp
bmVUcmFuc2Zvcm0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGNvbnN0IEZvbnQmIGZvbnQpCiAg
ICAgcmVzdWx0LnNldEQoLXJlc3VsdC5kKCkpOwogICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhl
dGljT2JsaXF1ZSgpKSB7CiAgICAgICAgIGZsb2F0IG9ibGlxdWVTa2V3ID0gdGFuZihkZWcycmFk
KEZvbnRDYXNjYWRlOjpzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSkpOwotICAgICAgICBpZiAocGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewor
ICAgICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50
YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgICAgICBpZiAoZm9udC5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQWZmaW5lVHJhbnNmb3JtKDEs
IG9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSAqIHJlc3VsdDsKICAgICAgICAgICAgIGVsc2UKQEAg
LTkwLDcgKzkwLDcgQEAgQWZmaW5lVHJhbnNmb3JtIGNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeChj
b25zdCBGb250JiBmb250KQogCiBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0ZVZlcnRpY2FsVGV4dE1h
dHJpeChjb25zdCBGb250JiBmb250LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHByZXZpb3VzVGV4
dE1hdHJpeCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGZvbnQsIGZvbnQucGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGZvbnQsIGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgIC8vIFRoZSB0cmFuc2xhdGlvbiBoZXJlICgi
ZSIgYW5kICJmIiBmaWVsZHMpIGFyZSBpcnJlbGV2YW50LCBiZWNhdXNlCiAgICAgLy8gdGhpcyBt
YXRyaXggaXMgaW52ZXJ0ZWQgaW4gZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25z
IHRvIHBsYWNlIHRoZSBnbHlwaHMgaW4gdGhlIENUTSdzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAg
IC8vIEFsbCB3ZSdyZSB0cnlpbmcgdG8gZG8gaGVyZSBpcyByb3RhdGUgdGhlIHRleHQgbWF0cml4
IHNvIGdseXBocyBhcHBlYXIgdmlzdWFsbHkgdXByaWdodC4KQEAgLTE1OSw3ICsxNTksNyBAQCBz
dGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGb250JiBmb250LCBDRwogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxh
dGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKICAgICBWZWN0b3I8Q0dQb2ludCwgMjU2
PiBwb3NpdGlvbnMoY291bnQpOwotICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmll
bnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewogICAgICAgICBT
Y29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9u
dCwgdGV4dE1hdHJpeCksIGNvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4g
dHJhbnNsYXRpb25zKGNvdW50KTsKQEAgLTE4OCw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCBzZXRD
R0ZvbnRSZW5kZXJpbmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBDR0NvbnRl
eHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVsUXVh
bnRpemF0aW9uKTsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIFBBTDo6Rm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBjb25zdCBhdXRvJiBwbGF0Zm9ybURhdGEgPSBmb250
LnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTIwNSwx
NyArMjA1LDE3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA9IHRydWU7CiAKICAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCi0g
ICAgICAgIHNtb290aGluZ01vZGUgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7Cisg
ICAgICAgIHNtb290aGluZ01vZGUgPSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGlu
ZzsKIAogICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgewotICAgIGNhc2UgRm9udFNtb290aGlu
Z01vZGU6OkFudGlhbGlhc2VkOgorICAgIGNhc2UgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QW50
aWFsaWFzZWQ6CiAgICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6Ci0gICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKKyAgICBjYXNlIFBBTDo6
Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9v
dGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgogICAgICAgICBzaG91bGRBbnRpYWxpYXMg
PSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Nt
b290aGluZzoKKyAgICBjYXNlIFBBTDo6Rm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgog
ICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKICAgICAgICAgc2hvdWxkU21vb3RoRm9u
dHMgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CkBAIC0zMjIsMTEgKzMyMiwxMSBAQCBjb25zdCBG
b250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZQogICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYg
YmFzZUNoYXJhY3RlciA8PSAweDA2ZmYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICNlbmRpZgotICAgICAgICBpZiAoZm9udC0+cGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7
CisgICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewogICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dy
YXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikpIHsKICAgICAgICAgICAgICAgICBpZiAoIWZvbnQt
Pmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+
YnJva2VuSWRlb2dyYXBoRm9udCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZvbnREZXNj
cmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlv
bjo6TWl4ZWQpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9u
Q0pLR2x5cGhPcmllbnRhdGlvbigpID09IFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4
ZWQpIHsKICAgICAgICAgICAgICAgICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZv
bnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKICAgICAgICAgICAgICAgICBHbHlw
aCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3Rl
cihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBo
ID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAppbmRl
eCAzNmRkNzBjYjVhNmQyNGVkYzk3MjgwYTc2NDE0N2Q1ODU5YzQyZDU3Li40ZTJkMzc3ZTdkODQx
OTViMWZjNWMxZWMwNjYwMGQ1MzEyZjAxMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKQEAgLTIw
NSw3ICsyMDUsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgfQogI2VuZGlmCiAg
ICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgIGlmIChw
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAgICAgICBtX2hhc1ZlcnRp
Y2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgp
KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBG
b250OjpwbGF0Zm9ybUluaXQoKQogCiAgICAgQ0dGbG9hdCB4SGVpZ2h0ID0gMDsKICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkgeworICAgICAgICBpZiAo
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCkgewogICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAi
eCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxp
bmUsIGFuZCB3ZSBuZWVkIHRoZQogICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8g
b25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBi
YXNlbGluZS4KICAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVyKCd4
Jyk7CkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQo
KQogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9CiAKLWJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBw
b3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBz
LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0
c0NoYXJhY3RlckZvclN5bnRoZXNpcyhQQUw6OkZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENh
cHMsIFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogI2lmIChQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCiAgICAgR2x5cGggZ2x5cGggPSBn
bHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwpAQCAtMjc5LDE5ICsyNzksMTkgQEAgYm9vbCBG
b250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50
Q2FwcyBmb250VmFyaWFudEMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoIChm
b250VmFyaWFudENhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6IHsKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewogICAgICAgICBhdXRvJiBzdXBw
b3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwogICAgICAgICByZXR1cm4gc3Vw
cG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwogICAgIH0KLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50Q2Fwczo6UGV0aXRlOiB7CiAgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBv
cnRlZEJ5UGV0aXRlQ2FwcygpOwogICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwogICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6QWxsU21hbGw6IHsKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFs
bDogewogICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxs
Q2FwcygpOwogICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBv
cnRlZC5nZXQoZ2x5cGgpOwogICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0
aXRlOiB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOiB7CiAgICAg
ICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpOwog
ICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQo
Z2x5cGgpOwogICAgIH0KQEAgLTMwMywxMCArMzAzLDEwIEBAIGJvb2wgRm9udDo6dmFyaWFudENh
cHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlh
bnRDCiAgICAgVU5VU0VEX1BBUkFNKGNoYXJhY3Rlcik7CiAKICAgICBzd2l0Y2ggKGZvbnRWYXJp
YW50Q2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFs
bDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlBl
dGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFy
aWFudC1jYXBzIHZhbHVlcyBsaXN0ZWQgYWJvdmUuCkBAIC00MDQsNyArNDA0LDcgQEAgY29uc3Qg
Qml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKSBjb25zdAog
fQogI2VuZGlmCiAKLXN0YXRpYyBSZWZQdHI8Rm9udD4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoQ1RG
b250UmVmIGZvbnQsIGZsb2F0IHNpemUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgQ1RG
b250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cywgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgRm9udFdpZHRoVmFyaWFudCBmb250V2lkdGhWYXJpYW50LCBUZXh0UmVu
ZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YTo6Q3Jl
YXRpb25EYXRhKiBjcmVhdGlvbkRhdGEpCitzdGF0aWMgUmVmUHRyPEZvbnQ+IGNyZWF0ZURlcml2
YXRpdmVGb250KENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBQQUw6OkZvbnRPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cywgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgUEFMOjpGb250V2lkdGhWYXJpYW50IGZv
bnRXaWR0aFZhcmlhbnQsIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUs
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0aW9uRGF0YSogY3JlYXRpb25EYXRhKQogewog
ICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NzYsNyArNTc2LDcg
QEAgZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKIAogICAgIGlmIChwbGF0Zm9ybURhdGEo
KS5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWw7CisgICAgICAgIGJvb2wg
aG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3Jp
ZW50YXRpb246Okhvcml6b250YWw7CiAgICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uID0gaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250
T3JpZW50YXRpb25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7CiAjaWYg
VVNFKENURk9OVEdFVEFEVkFOQ0VTX1dPUktBUk9VTkQpCiAgICAgICAgIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHls
ZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJl
ZDsKQEAgLTU5Myw3ICs1OTMsNyBAQCBmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiAKICNlbmRpZgogCi1HbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6
YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5u
aW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxl
S2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0CitHbHlw
aEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3Ry
aW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0
IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbikgY29uc3QKIHsKICAgICBVTlVTRURfUEFSQU0ocmVxdWlyZXNTaGFwaW5n
KTsKIApAQCAtNjI0LDcgKzYyNCw3IEBAIEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpCiAgICAgLy8g
RklYTUU6IEVuYWJsZSBrZXJuaW5nIGZvciBzaW5nbGUgZ2x5cGhzIHdoZW4gcmRhcjovLzgyMTk1
NDA1IGlzIGZpeGVkCiAgICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hh
cGVXaXRoQ2x1c3RlckNvbXBvc2l0aW9uCiAgICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgJiYgbnVt
YmVyT2ZJbnB1dEdseXBocyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkKLSAgICAgICAg
fCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdo
dFRvTGVmdCA6IDApOworICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4
OyArK2kpCiAgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlw
aEluZGV4KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKQEAgLTcyMSw3ICs3MjEsNyBAQCBH
bHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgdW5zaWduZWQgYmVnaQogICAgIC8vIE9uIHRoZSBvdGhlciBoYW5kLCBDVEZvbnRT
aGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZlciBpbiBsb2dpY2FsIG9yZGVyIGJ1dCByZXR1
cm5zIGl0IGluIHBoeXNpY2FsCiAgICAgLy8gb3JkZXIsIHdoaWNoIG1lYW5zIHRoZSBzZWNvbmQg
cmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3RpbGwgbmVlZHMgdG8gZXhlY3V0ZSB3aGVuCiAg
ICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBiZWluZyB1c2VkLgotICAgIGlmICh0ZXh0RGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdp
bm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4
KTsKIAogICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9IChlbmFibGVLZXJuaW5n
ID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8IGtDVEZvbnRUcmFuc2Zv
cm1BcHBseVNoYXBpbmc7CkBAIC03MzEsNyArNzMxLDcgQEAgR2x5cGhCdWZmZXJBZHZhbmNlIEZv
bnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGJl
Z2kKICNlbmRpZgogCiAgICAgLy8gU2VlIHRoZSBjb21tZW50IGFib3ZlIGluIHRoaXMgZnVuY3Rp
b24gd2hlcmUgdGhlIG90aGVyIGNhbGwgdG8gcmV2ZXJzZSgpIGlzLgotICAgIGlmICh0ZXh0RGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdp
bm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4
KTsKIAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKQEAgLTc3OSw3ICs3NzksNyBAQCBGbG9h
dFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsK
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CiAgICAgQ0dSZWN0IGlnbm9yZWRSZWN0ID0geyB9
OwotICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsID8ga0NURm9udE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RG
b250T3JpZW50YXRpb25Ib3Jpem9udGFsLCAmZ2x5cGgsICZpZ25vcmVkUmVjdCwgMSk7CisgICAg
Ym91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsIDoga0NURm9u
dE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAmaWdub3JlZFJlY3QsIDEpOwogICAgIGJv
dW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7CiAgICAgYm91bmRpbmdCb3guc2V0
V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRQ
bGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCmluZGV4IDU5ZDIxNjY3OWQy
ZmU0YzgwYzY5YWFhNzFmMzkyMWQ2MjU3YWFjOWEuLjgyZTdiNzQ2YTMwNTU2MzA1NGYwMjZkNzY5
NWQ1MzAzMDYyZWY0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0
LmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoUmV0YWluUHRyPENURm9udFJlZj4mJiBmb250LCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwg
VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUsIGNvbnN0IENyZWF0aW9uRGF0YSog
Y3JlYXRpb25EYXRhKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShSZXRhaW5Q
dHI8Q1RGb250UmVmPiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgUEFM
OjpGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZSB0
ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgQ3JlYXRpb25EYXRhKiBjcmVhdGlvbkRhdGEpCiAgICAg
OiBGb250UGxhdGZvcm1EYXRhKHNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUs
IG9yaWVudGF0aW9uLCB3aWR0aFZhcmlhbnQsIHRleHRSZW5kZXJpbmdNb2RlLCBjcmVhdGlvbkRh
dGEpCiB7CiAgICAgQVNTRVJUX0FSRyhmb250LCBmb250KTsKQEAgLTczLDE5ICs3MywxOSBAQCBD
VEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAogfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi1pbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVh
dHVyZVNlbGVjdG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKK2lubGluZSBpbnQgbWFwRm9u
dFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IoUEFMOjpGb250V2lkdGhWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgY2FzZSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGg6CisgICAgY2FzZSBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3Vs
YXJXaWR0aDoKICAgICAgICAgcmV0dXJuIGtQcm9wb3J0aW9uYWxUZXh0U2VsZWN0b3I7CiAKLSAg
ICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aDoKKyAgICBjYXNlIFBBTDo6Rm9udFdp
ZHRoVmFyaWFudDo6SGFsZldpZHRoOgogICAgICAgICByZXR1cm4ga0hhbGZXaWR0aFRleHRTZWxl
Y3RvcjsKIAotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKKyAgICBjYXNl
IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKICAgICAgICAgcmV0dXJuIGtUaGly
ZFdpZHRoVGV4dFNlbGVjdG9yOwogCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpRdWFydGVy
V2lkdGg6CisgICAgY2FzZSBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aDoKICAg
ICAgICAgcmV0dXJuIGtRdWFydGVyV2lkdGhUZXh0U2VsZWN0b3I7CiAgICAgfQogCkBAIC0xMTks
NyArMTE5LDcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAg
ICAgQVNTRVJUKG1fZm9udCk7CiAgICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNv
cHlXaXRoQXR0cmlidXRlcyhtX2ZvbnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRv
TGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpKSk7CiAKLSAgICBpZiAobV93
aWR0aFZhcmlhbnQgIT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7CisgICAgaWYg
KG1fd2lkdGhWYXJpYW50ICE9IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7
CiAgICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0ga1RleHRTcGFjaW5nVHlwZTsKICAgICAg
ICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0
dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOwogICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKG1fY3RGb250LmdldCgpKSk7CkBAIC0xNjcsNyArMTY3LDcgQEAgU3RyaW5nIEZvbnRQ
bGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbWFrZVN0cmluZyhm
b250RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAogICAgICAgICAobV9zeW50aGV0aWNCb2xkID8g
IiBzeW50aGV0aWMgYm9sZCIgOiAiIiksCiAgICAgICAgIChtX3N5bnRoZXRpY09ibGlxdWUgPyAi
IHN5bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKLSAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24iIDogIiIpKTsK
KyAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2Fs
ID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIgOiAiIikpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA3MmZjNmQxYTczNDQ2MTQyNWYwY2U1Njdm
NmI4MGMwNDcyMmMwYWExLi5lYzgzOWJmMmJkZTNmZGEyNDk2YjlkY2I2MDk4MjQ2ODZiNWU2NDUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0yOTksNyArMjk5LDcg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVu
ZENsaXBUb0RyYXdpbmdDb21tYW5kcyYgaXQKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdHbHlw
aHM6OkRyYXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZvbnRJZGVudGlmaWVy
LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVm
ZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCitEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBm
b250SWRlbnRpZmllciwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiBnbHlwaHMsIFZl
Y3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiBhZHZhbmNlcywgY29uc3QgRmxvYXRSZWN0
JiBib3VuZHMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCiAgICAgOiBtX2ZvbnRJZGVudGlmaWVyKGZvbnRJZGVudGlm
aWVyKQogICAgICwgbV9nbHlwaHMoV1RGTW92ZShnbHlwaHMpKQogICAgICwgbV9hZHZhbmNlcyhX
VEZNb3ZlKGFkdmFuY2VzKSkKQEAgLTMwOSw3ICszMDksNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5
cGhzKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBmb250SWRlbnRpZmllciwgVmVjdG9yPEds
eXBoQgogewogfQogCi1EcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQorRHJhd0dseXBoczo6RHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBv
aW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQog
ICAgIDogbV9mb250SWRlbnRpZmllcihmb250LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
KQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fc21vb3RoaW5nTW9k
ZShzbW9vdGhpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggZTE0
YTQyOTkzYTBmMmFmZGIyZjRiMTZhMGFhYmY5NWVlMTRkYjM3ZS4uNmRhN2UzMjhkZjZhNjY2ODgx
Zjc1MjZhNmZkMjE0M2MyY2I4YWNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CkBAIC05MjYsOCArOTI2LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEcmF3R2x5cGhzPiBkZWNvZGUoRGVjb2RlciYpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNP
UkVfRVhQT1JUIERyYXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+
JiYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21v
b3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQ
b2ludCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNtb290aGluZ01vZGUpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250JikgY29uc3Q7
CiAKQEAgLTk0Miw3ICs5NDIsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFk
dmFuY2UsIDE2PiBtX2FkdmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKICAgICBGbG9h
dFBvaW50IG1fbG9jYWxBbmNob3I7Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdN
b2RlOworICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlOwogfTsKIAog
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTk4Nyw3ICs5ODcsNyBAQCBzdGQ6Om9wdGlvbmFs
PERyYXdHbHlwaHM+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlm
ICghbG9jYWxBbmNob3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPEZvbnRTbW9vdGhpbmdNb2RlPiBzbW9vdGhpbmdNb2RlOworICAgIHN0ZDo6b3B0
aW9uYWw8UEFMOjpGb250U21vb3RoaW5nTW9kZT4gc21vb3RoaW5nTW9kZTsKICAgICBkZWNvZGVy
ID4+IHNtb290aGluZ01vZGU7CiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CmluZGV4IDJmZDQzZjk5YWUzNTRhZGFkNzNiZDg1ZjE0ZmY1ZWMwYmU0ZmQ5ODQuLjBkNTRlNWIx
Nzc4N2M2NzY1YzkzZDk5ZmY1MWQyZDI1ZTg2YWQ5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTE0NCwxMiArMTQ0LDEyIEBAIHZvaWQgUmVjb3JkZXI6
OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKICAgICByZWNvcmRTZXRNaXRlckxpbWl0
KG1pdGVyTGltaXQpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBz
dGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBSZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQogewogICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdN
b2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwogICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZv
bnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDlhNDAxNDM2
N2RiMWVmNDNiOGE1OWU1MGUzZDQ3MTBmOTNlMDNlYmYuLjYzOGVlZDIwMjdhZTA5M2FhZjY2NjA3
MmI3ZGJmZDg5MWNkMTc5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
aApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5saW5lUGF0
aERhdGEuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0
RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtODgsNyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9k
ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKQEAgLTIyNCw4ICsyMjQsOCBAQCBwcml2YXRlOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggYTVlMmQzYjIwOTg1ZTNlZjk0MWEzMjM1NzU2ZTI4
MGVhY2Q1MTYzYy4uMjUxYjA4NjMwYjM0ZmIyMTE4ZWM3MmFiMTE4YTA2Y2Q0OGJjOWQ2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC0yMDgs
NyArMjA4LDcgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEVuZENsaXBUb0RyYXdpbmdDb21t
YW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogICAgIGFwcGVuZDxFbmRDbGlwVG9E
cmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUp
Cit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSBtb2RlKQogewogICAgIGFwcGVuZDxEcmF3R2x5cGhzPihm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCAzZTZkMDkwMjY5
MDQ2ZjFiMTI0YTM5YzFlMTIxMTAwYjMyNzI2MGM1Li41YmM5M2ViMzk3MDYxMTM1YzkyYjUwMjQw
YTg1MTZmMzQzYjYwZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEJlZ2luQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRFbmRDbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3
R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5j
aG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdJ
bWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3
TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKaW5kZXggYmQxMTNiYjZjMjczMWZhMTlhZGRlZmQzM2E5OWQ0NmJiNGExZjRhMi4uZTc1MGZl
YTM1MDE0ODhiMTY4NjNlZmJkYmMwYzFhNDJlODFlNzZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcApAQCAtNDQsOCArNDQsOCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJgogICAg
IEFTU0VSVChtb2RpZmllZEZvbnREZXNjcmlwdG9yKTsKIAogICAgIGludCBzaXplID0gZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uID0gZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCk7Ci0gICAgRm9udFdpZHRoVmFy
aWFudCB3aWR0aFZhcmlhbnQgPSBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7CisgICAg
UEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKTsKKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50ID0gZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpOwogICAgIGF1dG8gZm9udCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKG1vZGlmaWVkRm9udERlc2NyaXB0b3IuZ2V0KCksIHNp
emUsIG51bGxwdHIpKTsKICAgICBmb250ID0gcHJlcGFyZVBsYXRmb3JtRm9udChmb250LmdldCgp
LCBmb250RGVzY3JpcHRpb24sIGZvbnRDcmVhdGlvbkNvbnRleHQpOwogICAgIEFTU0VSVChmb250
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCmluZGV4IDcxOGI5YmQzMTVlY2M2NzA3ODljNjVj
YmFhYTAzNDkyOTc1ZTcyZDMuLjBlMTdkM2Y2NzA4OTE4MzMxMmIxYjI2MDQ5NGFmM2E4YjVkNWVm
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMjIsOCArMjIsOCBAQAogI2RlZmlu
ZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKIAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkJh
c2UuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCBmYWFiNmUxNGYwMjdh
NDQ0YmQ2ZGUyNzEyZTY2OTU0YTc2NTVkZDFiLi45YWFiYmFiY2IyZTg5MzA4MmQxNGE2ZGVlYTc0
N2ZiOWYyMDkwNDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC0zMiw3ICsz
Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gRm9udDo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKGJvb2wgZW5hYmxlS2VybmluZywgRm9udE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUpIGNvbnN0CitS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBGb250OjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoYm9v
bCBlbmFibGVLZXJuaW5nLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxlKSBjb25zdAogewogICAgIENGVHlwZVJlZiBrZXlzWzVdOwogICAg
IENGVHlwZVJlZiB2YWx1ZXNbNV07CkBAIC02OSw3ICs2OSw3IEBAIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IEZvbnQ6OmdldENGU3RyaW5nQXR0cmlidXRlcyhib29sIGVuYWJsZUtlcm5pbmcs
IEZvbnRPCiAgICAgICAgICsrY291bnQ7CiAgICAgfQogCi0gICAgaWYgKG9yaWVudGF0aW9uID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gUEFM
OjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgIGtleXNbY291bnRdID0ga0NU
VmVydGljYWxGb3Jtc0F0dHJpYnV0ZU5hbWU7CiAgICAgICAgIHZhbHVlc1tjb3VudF0gPSBrQ0ZC
b29sZWFuVHJ1ZTsKICAgICAgICAgKytjb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvRHJhZ0ltYWdlSU9TLm1tCmluZGV4IGVhMmU4NjEzNDM1YWFkZmI4YTM4OGMwYzZlNWZlYWU1
YWJmMWI0N2UuLmQwNWU3ZmYyZmYzM2U1YjkyZmZiODBlNTgyNzM0NmZhMzAzOTI3OWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHN0YXRpYyBGb250Q2FzY2FkZSBjYXNjYWRlRm9yU3lzdGVtRm9udChDR0Zsb2F0IHNp
emUpCiAgICAgcmV0dXJuIEZvbnRDYXNjYWRlKEZvbnRQbGF0Zm9ybURhdGEoYWRvcHRDRihDVEZv
bnRDcmVhdGVXaXRoTmFtZSgoQ0ZTdHJpbmdSZWYpZm9udC5mb250TmFtZSwgZm9udC5wb2ludFNp
emUsIG5pbCkpLCBmb250LnBvaW50U2l6ZSkpOwogfQogCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yTGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2F0b3JEYXRhLCBGb250UmVuZGVyaW5n
TW9kZSwgZmxvYXQpCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50
JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFRleHRJbmRpY2F0
b3JEYXRhJiBpbmRpY2F0b3JEYXRhLCBQQUw6OkZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKIHsK
ICAgICAvLyBGSVhNRTogTW9zdCBvZiB0aGlzIGNhbiBnbyBhd2F5IG9uY2Ugd2UgY2FuIHVzZSBV
SVVSTERyYWdQcmV2aWV3VmlldyB1bmNvbmRpdGlvbmFsbHkuCiAgICAgc3RhdGljIGNvbnN0IENH
RmxvYXQgZHJhZ0ltYWdlUGFkZGluZyA9IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHAKaW5kZXggM2RkOTdjMTNlZDc0ZDBhMjdiNmIz
ZjExODdjZGU4YTQwN2NjMWMzNC4uY2ExZTc3NGM3MWQ4OGZhNWE2NDljYzIzNjIzOTcxYWRkYzMy
MDA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdl
b21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2Vv
bWV0cnkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFNlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25H
ZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlCiB9CiAK
IC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBh
dXhpbGxhcnkgc3RydWN0LgotU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVoYXZpb3Is
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZLCBp
bnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBib29s
IGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLCBib29s
IGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlUZXh0LCBp
bnQgcGFnZU51bWJlcikKK1NlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25z
dCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIGJlaGF2aW9yLCBQ
QUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZ
LCBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBi
b29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLCBi
b29sIGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlUZXh0
LCBpbnQgcGFnZU51bWJlcikKICAgICA6IG1fcXVhZChxdWFkKQogICAgICwgbV9iZWhhdmlvcihi
ZWhhdmlvcikKICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmgKaW5kZXggYzhhNGIxZWE4YTEyODY3
NDQxNzg1NmEyYzBjNWI4NDdmOTRhZTY3MC4uOTVhNGJhNzRhOGUxMDQ2OTM5NDAxNTQ2OTEyNWQy
MTVlYjk0OWFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVj
dGlvbkdlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlv
bkdlb21ldHJ5LmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgogI2luY2x1ZGUg
PG9wdGlvbmFsPgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgU2VsZWN0aW9uR2VvbWV0cnko
Y29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IsIGJvb2wgaXNIb3Jp
em9udGFsLCBpbnQgY29sdW1uTnVtYmVyKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92
ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgotICAgIFNl
bGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2
aW9yLCBUZXh0RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wsIGJvb2wsIGJvb2ws
IGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7CisgICAgU2VsZWN0aW9uR2VvbWV0
cnkoY29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IsIFBBTDo6VGV4
dERpcmVjdGlvbiwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBib29sLCBib29sLCBi
b29sLCBib29sLCBib29sLCBib29sLCBpbnQpOwogICAgIFNlbGVjdGlvbkdlb21ldHJ5KCkgPSBk
ZWZhdWx0OwogICAgIH5TZWxlY3Rpb25HZW9tZXRyeSgpID0gZGVmYXVsdDsKIApAQCAtNTYsNyAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2lz
SG9yaXpvbnRhbCA/IHJlY3QoKS55KCkgOiByZWN0KCkueCgpOyB9CiAgICAgaW50IGxvZ2ljYWxI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IHJlY3QoKS5oZWlnaHQoKSA6
IHJlY3QoKS53aWR0aCgpOyB9CiAKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgaW50IG1pblgoKSBjb25zdCB7
IHJldHVybiBtX21pblg7IH0KICAgICBpbnQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WDsg
fQogICAgIGludCBtYXhZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhZOyB9CkBAIC03Nyw3ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExvZ2ljYWxUb3AoaW50KTsKICAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHQoaW50KTsKIAotICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CisgICAgdm9pZCBzZXREaXJl
Y3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVj
dGlvbjsgfQogICAgIHZvaWQgc2V0TWluWChpbnQgbWluWCkgeyBtX21pblggPSBtaW5YOyB9CiAg
ICAgdm9pZCBzZXRNYXhYKGludCBtYXhYKSB7IG1fbWF4WCA9IG1heFg7IH0KICAgICB2b2lkIHNl
dE1heFkoaW50IG1heFkpIHsgbV9tYXhZID0gbWF4WTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZsb2F0UXVhZCBtX3F1YWQ7CiAgICAgU2VsZWN0aW9uUmVuZGVy
aW5nQmVoYXZpb3IgbV9iZWhhdmlvciB7IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpDb2Fs
ZXNjZUJvdW5kaW5nUmVjdHMgfTsKLSAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uIHsgVGV4
dERpcmVjdGlvbjo6TFRSIH07CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uIHsg
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfTsKICAgICBpbnQgbV9taW5YIHsgMCB9OwogICAgIGlu
dCBtX21heFggeyAwIH07CiAgICAgaW50IG1fbWF4WSB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKaW5kZXggM2Q2YWE4MjE5MWVlYmIy
MDU1NWVmZTAzYTMxZGJiODVlMjdmNzliMC4uMTE3YzA5NDgzMTcxNTEzZDFjYjY0NjQ4ZTcwZTA0
MTBmOGM4NDE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlckNsaWVudC4KICAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNo
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgYWxs
b3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZp
bmFsOwotICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShCb3hTaWRlKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIHNob3VsZFJ1YmJlckJhbmRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdCBm
aW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCA1M2E0MDc1M2RiNzQ3YzVh
YzRiMWY3YjIxYTlhZDVjMWZmNDVhODM2Li5lOTI2NTFhZjE2Y2ZjMzc4YzQyNzE4YjFjMmZkZDlm
N2IxYjk4NTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tCkBAIC0xODcsNyArMTg3LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZFJ1
YmJlckJhbmRPblNpZGUoQm94U2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNo
b3VsZFJ1YmJlckJhbmRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQppbmRleCA4MDBjYzUxMTA3NWFhYjAyMDhlODk2NzM1
YTNlOWJkMWUzMDIyODExLi5jMThiNmM2NzZmNzAzNDBlNjcxNzMzNWZjMjhhYTZlNDQ0MzJhYmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLm1tCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIEZsb2F0U2l6
ZSBkZWx0YUFsaWduZWRUb0RvbWluYW50QXhpcyhGbG9hdFNpemUgZGVsdGEpCiAgICAgcmV0dXJu
IGRlbHRhQWxpZ25lZFRvQXhpcyhkZWx0YSwgZG9taW5hbnRBeGlzKTsKIH0KIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8Qm94U2lkZT4gYWZmZWN0ZWRTaWRlT25Eb21pbmFudEF4aXMoRmxvYXRTaXpl
IGRlbHRhKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiBhZmZlY3RlZFNpZGVP
bkRvbWluYW50QXhpcyhGbG9hdFNpemUgZGVsdGEpCiB7CiAgICAgYXV0byBkb21pbmFudEF4aXMg
PSBkb21pbmFudEF4aXNGYXZvcmluZ1ZlcnRpY2FsKGRlbHRhKTsKICAgICByZXR1cm4gU2Nyb2xs
YWJsZUFyZWE6OnRhcmdldFNpZGVGb3JTY3JvbGxEZWx0YShkZWx0YSwgZG9taW5hbnRBeGlzKTsK
QEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFy
dFJ1YmJlckJhbmRBbmltYXRpb25JZk5lY2Vzc2FyeSgpCiAgICAgc3RhcnRSdWJiZXJCYW5kQW5p
bWF0aW9uKGNvbnRyYWluZWRPZmZzZXQsIGluaXRpYWxWZWxvY2l0eSwgc3RyZXRjaEFtb3VudCk7
CiB9CiAKLWJvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRP
blNpZGUoQm94U2lkZSBzaWRlKSBjb25zdAorYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6c2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNpZGUgc2lkZSkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9jbGllbnQuc2hvdWxkUnViYmVyQmFuZE9uU2lkZShzaWRlKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ1Y2QxMGJmMzQ4NjJjOGVlZWEyYjg0MWM3NWM3ZmRkYTk2ZjlkZmYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmlkaUNvbnRleHQu
aCIKLQotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
U2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVT
aXplQXNCaWRpQ29udGV4dD4gewotICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OwotICAgIHZv
aWQqIHBhcmVudDsKLX07Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4dCkgPT0g
c2l6ZW9mKFNhbWVTaXplQXNCaWRpQ29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9zdGF5X3Nt
YWxsKTsKLQotaW5saW5lIEJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxl
dmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRp
bmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQotICAgIDogbV9sZXZlbChsZXZl
bCkKLSAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fb3ZlcnJpZGUob3ZlcnJp
ZGUpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3BhcmVudChwYXJlbnQpCi17Ci19
Ci0KLWlubGluZSBSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNhY2hlZCh1
bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJp
ZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rpb24sIG92
ZXJyaWRlLCBzb3VyY2UsIHBhcmVudCkpOwotfQotCi1SZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250
ZXh0OjpjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9u
LCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQq
IHBhcmVudCkKLXsKLSAgICBBU1NFUlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBVX1JJR0hU
X1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpKTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAg
IHJldHVybiBjcmVhdGVVbmNhY2hlZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNl
LCBwYXJlbnQpOwotCi0gICAgQVNTRVJUKGxldmVsIDw9IDEpOwotICAgIGlmICghbGV2ZWwpIHsK
LSAgICAgICAgaWYgKCFvdmVycmlkZSkgewotICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IGx0ckNvbnRleHQ7Ci0gICAgICAgICAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgbHRyQ29udGV4dE9uY2VGbGFnOwotICAgICAgICAgICAgc3RkOjpjYWxs
X29uY2UobHRyQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7Ci0gICAgICAgICAgICAgICAgbHRyQ29u
dGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFsc2UsIEZy
b21TdHlsZU9yRE9NLCAwKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuICps
dHJDb250ZXh0LmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKLSAgICAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOwotICAgICAgICBz
dGQ6OmNhbGxfb25jZShsdHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgewotICAgICAg
ICAgICAgbHRyT3ZlcnJpZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZU
X1RPX1JJR0hULCB0cnVlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm4gKmx0ck92ZXJyaWRlQ29udGV4dC5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW92
ZXJyaWRlKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRl
eHQ+PiBydGxDb250ZXh0OwotICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsQ29udGV4
dE9uY2VGbGFnOwotICAgICAgICBzdGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZsYWcsIFsm
XSgpIHsKLSAgICAgICAgICAgIHJ0bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgxLCBV
X1JJR0hUX1RPX0xFRlQsIGZhbHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm4gKnJ0bENvbnRleHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4dDsKLSAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7Ci0gICAg
c3RkOjpjYWxsX29uY2UocnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKLSAgICAg
ICAgcnRsT3ZlcnJpZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9U
T19MRUZULCB0cnVlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICpy
dGxPdmVycmlkZUNvbnRleHQuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmPEJpZGlDb250
ZXh0PiBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29udGV4dCwg
QmlkaUNvbnRleHQqIHBhcmVudCkKLXsKLSAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50ID8gcGFy
ZW50LT5sZXZlbCgpIDogMDsKLSAgICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hUX1RPX0xF
RlQpCi0gICAgICAgIG5ld0xldmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZlbCk7Ci0g
ICAgZWxzZSBpZiAocGFyZW50KQotICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxl
dmVsKG5ld0xldmVsKTsKLSAgICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdMZXZlbCwg
Y29udGV4dC5kaXIoKSwgY29udGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgpLCBwYXJl
bnQpOwotfQotCi0vLyBUaGUgQmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFibGUgLS0g
dGhleSdyZSByZS11c2VkIGZvciByZS1sYXlvdXQgYWZ0ZXIKLS8vIERPTSBtb2RpZmljYXRpb24v
ZWRpdGluZyAtLSBzbyB3ZSBjb3B5IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMsIGFuZAot
Ly8gcmVjYWxjdWxhdGUgdGhlaXIgbGV2ZWxzLgotUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4
dDo6Y29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQotewotICAgIFZl
Y3RvcjxCaWRpQ29udGV4dCosIDY0PiBjb250ZXh0czsKLSAgICBmb3IgKGF1dG8qIGFuY2VzdG9y
ID0gdGhpczsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7Ci0gICAg
ICAgIGlmIChhbmNlc3Rvci0+c291cmNlKCkgIT0gRnJvbVVuaWNvZGUpCi0gICAgICAgICAgICBj
b250ZXh0cy5hcHBlbmQoYW5jZXN0b3IpOwotICAgIH0KLSAgICBBU1NFUlQoY29udGV4dHMuc2l6
ZSgpKTsKLSAgICBhdXRvIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZl
bCgqY29udGV4dHMubGFzdCgpLCBudWxscHRyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb250
ZXh0cy5zaXplKCkgLSAxOyBpOyAtLWkpCi0gICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4
dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0cigpKTsK
LSAgICByZXR1cm4gdG9wQ29udGV4dDsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlD
b250ZXh0JiBjMSwgY29uc3QgQmlkaUNvbnRleHQmIGMyKQotewotICAgIGlmICgmYzEgPT0gJmMy
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5sZXZlbCgp
IHx8IGMxLm92ZXJyaWRlKCkgIT0gYzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBjMi5kaXIo
KSB8fCBjMS5zb3VyY2UoKSAhPSBjMi5zb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghYzEucGFyZW50KCkpCi0gICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7Ci0gICAg
cmV0dXJuIGMyLnBhcmVudCgpICYmICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4ZDkwOWVlYTkxYjYx
OWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1l
bnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsK
LQotLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBC
aWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0
ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZh
bHNlLCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBw
YXJlbnQgPSBudWxscHRyKTsKLQotICAgIEJpZGlDb250ZXh0KiBwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7
IHJldHVybiBtX2xldmVsOyB9Ci0gICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsgfQotICAgIGJvb2wg
b3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlOyB9Ci0gICAgQmlkaUVtYmVkZGlu
Z1NvdXJjZSBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpRW1iZWRkaW5n
U291cmNlPihtX3NvdXJjZSk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxCaWRpQ29udGV4
dD4gY29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKTsKLQotcHJpdmF0
ZToKLSAgICBCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwg
Ym9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCk7
Ci0KLSAgICBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGVVbmNhY2hlZCh1bnNpZ25lZCBj
aGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1Nv
dXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCk7Ci0KLSAgICB1bnNpZ25lZCBtX2xldmVsIDogNjsg
Ly8gVGhlIG1heGltaXVtIGJpZGkgbGV2ZWwgaXMgNjI6IGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cnRzL3RyOS8jRXhwbGljaXRfTGV2ZWxzX2FuZF9EaXJlY3Rpb25zCi0gICAgdW5zaWduZWQgbV9k
aXJlY3Rpb24gOiA1OyAvLyBEaXJlY3Rpb24KLSAgICB1bnNpZ25lZCBtX292ZXJyaWRlIDogMTsK
LSAgICB1bnNpZ25lZCBtX3NvdXJjZSA6IDE7IC8vIEJpZGlFbWJlZGRpbmdTb3VyY2UKLSAgICBS
ZWZQdHI8QmlkaUNvbnRleHQ+IG1fcGFyZW50OwotfTsKLQotaW5saW5lIHVuc2lnbmVkIGNoYXIg
bmV4dEdyZWF0ZXJPZGRMZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQotewotICAgIHJldHVybiAo
bGV2ZWwgKyAxKSB8IDE7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyRXZl
bkxldmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpCi17Ci0gICAgcmV0dXJuIChsZXZlbCArIDIpICYg
fjE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4dCYsIGNvbnN0IEJpZGlD
b250ZXh0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
OWQ5ZTQ2ZTA4NjU2OGRjOTA3YWI1ODRkYzQyNjY4NTcwNWZkY2YwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQmlkaVJlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJCaWRpQ29udGV4dC5oIgotI2luY2x1ZGUgIkJpZGlSdW5M
aXN0LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yPiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlIHsKLXB1
YmxpYzoKLSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNpdGlvbnMuY2xl
YXIoKTsKLSAgICAgICAgbV9jdXJyZW50VHJhbnNpdGlvbiA9IDA7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgc3RhcnRJZ25vcmluZ1NwYWNlcyhjb25zdCBJdGVyYXRvciYgdHJhbnNpdGlvbikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghKG1fdHJhbnNpdGlvbnMuc2l6ZSgpICUgMikpOwotICAgICAg
ICBtX3RyYW5zaXRpb25zLmFwcGVuZCh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0
b3BJZ25vcmluZ1NwYWNlcyhjb25zdCBJdGVyYXRvciYgdHJhbnNpdGlvbikKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3RyYW5zaXRpb25zLnNpemUoKSAlIDIpOwotICAgICAgICBtX3RyYW5zaXRp
b25zLmFwcGVuZCh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBXaGVuIGlnbm9yaW5nIHNw
YWNlcywgdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBuZWVkIGxpbmUg
Ym94ZXMgc3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9yCi0gICAgLy8gaGFyZCBsaW5lIGJyZWFrcyB0
byBlbnN1cmUgdGhhdCB0aGV5J3JlIG5vdCBpZ25vcmVkLgotICAgIHZvaWQgZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLSAgICB7Ci0gICAg
ICAgIEl0ZXJhdG9yIHRyYW5zaXRpb24oMCwgJnJlbmRlcmVyLCAwKTsKLSAgICAgICAgc3RvcEln
bm9yaW5nU3BhY2VzKHRyYW5zaXRpb24pOwotICAgICAgICBzdGFydElnbm9yaW5nU3BhY2VzKHRy
YW5zaXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVf
dCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1l
bnQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygp
IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KLSAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQotICAgIHNpemVfdCBjdXJyZW50
VHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2
b2lkIHNldEN1cnJlbnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1
cnJlbnRUcmFuc2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2b2lkIGluY3JlbWVu
dEN1cnJlbnRUcmFuc2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2b2lk
IGRlY3JlbWVudE51bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5z
aXRpb25zLnNpemUoKSAtIDEpOyB9Ci0gICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQotcHJpdmF0ZToKLSAgICBWZWN0
b3I8SXRlcmF0b3I+IG1fdHJhbnNpdGlvbnM7Ci0gICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRp
b24geyAwIH07Ci19OwotCi0vLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0
eXBpY2FsbHkgdGhlIGVuZCBvZiBhIGxpbmUpIGNhbgotLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVz
ZWQgdG8gcmVzdGFydCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KLXN0cnVjdCBC
aWRpU3RhdHVzIHsKLSAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OwotCi0gICAgLy8gQ3JlYXRl
cyBhIEJpZGlTdGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBk
ZWZhdWx0IGRpcmVjdGlvbi4KLSAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBo
YXMgdHdvIHBvc3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMg
YXQgbGVhc3QgMTkuCi0gICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9v
bCBpc092ZXJyaWRlKQotICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gVV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUKQotICAgICAgICAsIGxhc3RT
dHJvbmcoZW9yKQotICAgICAgICAsIGxhc3QoZW9yKQotICAgICAgICAsIGNvbnRleHQoQmlkaUNv
bnRleHQ6OmNyZWF0ZShkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMCA6IDEsIGVv
ciwgaXNPdmVycmlkZSkpCi0gICAgewotICAgIH0KLQotICAgIEJpZGlTdGF0dXMoVUNoYXJEaXJl
Y3Rpb24gZW9yLCBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlvbiBsYXN0
LCBSZWZQdHI8QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKLSAgICAgICAgOiBlb3IoZW9yKQotICAg
ICAgICAsIGxhc3RTdHJvbmcobGFzdFN0cm9uZykKLSAgICAgICAgLCBsYXN0KGxhc3QpCi0gICAg
ICAgICwgY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBVQ2hh
ckRpcmVjdGlvbiBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKLSAgICBVQ2hhckRpcmVjdGlvbiBs
YXN0U3Ryb25nIHsgVV9PVEhFUl9ORVVUUkFMIH07Ci0gICAgVUNoYXJEaXJlY3Rpb24gbGFzdCB7
IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4dDsKLX07
Ci0KLXN0cnVjdCBCaWRpRW1iZWRkaW5nIHsKLSAgICBCaWRpRW1iZWRkaW5nKFVDaGFyRGlyZWN0
aW9uIGRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCi0gICAgICAgIDogZGly
ZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBzb3VyY2Uoc291cmNlKQotICAgIHsKLSAgICB9
Ci0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgQmlkaUVtYmVkZGluZ1NvdXJj
ZSBzb3VyY2U7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlTdGF0dXMm
IHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCi17Ci0gICAgcmV0dXJuIHN0YXR1
czEuZW9yID09IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0dXMyLmxhc3QgJiYg
c3RhdHVzMS5sYXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAqKHN0YXR1czEuY29u
dGV4dCkgPT0gKihzdGF0dXMyLmNvbnRleHQpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCi17
Ci0gICAgcmV0dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKLX0KLQotc3RydWN0IEJpZGlDaGFy
YWN0ZXJSdW4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEJp
ZGlDaGFyYWN0ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIEJpZGlDb250ZXh0
KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pCi0gICAgICAgIDogbV9zdGFydChz
dGFydCkKLSAgICAgICAgLCBtX3N0b3Aoc3RvcCkKLSAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRl
eHQtPm92ZXJyaWRlKCkpCi0gICAgewotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJf
TkVVVFJBTCkKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOwotCi0gICAg
ICAgIG1fbGV2ZWwgPSBjb250ZXh0LT5sZXZlbCgpOwotCi0gICAgICAgIC8vIGFkZCBsZXZlbCBv
ZiBydW4gKGNhc2VzIEkxICYgSTIpCi0gICAgICAgIGlmIChtX2xldmVsICUgMikgewotICAgICAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVf
QVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAg
ICAgICAgICAgbV9sZXZlbCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAgICAgbV9sZXZlbCsrOwot
ICAgICAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJl
Y3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAgICAgICAgICAgbV9sZXZlbCArPSAy
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQotICAgIHsKLSAg
ICAgICAgLy8gRGVsZXRlIHRoZSBsaW5rZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0
cnVjdG9yIHJlY3Vyc2lvbi4KLSAgICAgICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOwot
ICAgICAgICB3aGlsZSAobmV4dCkKLSAgICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1f
bmV4dCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0OyB9Ci0gICAgdW5zaWduZWQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQotICAg
IHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9Ci0gICAgYm9v
bCByZXZlcnNlZChib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYg
IXZpc3VhbGx5T3JkZXJlZDsgfQotICAgIGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9y
ZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJpZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9Ci0KLSAgICBC
aWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4g
V1RGTW92ZShtX25leHQpOyB9Ci0gICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRp
Q2hhcmFjdGVyUnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQotCi1wcml2
YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7Ci0KLXB1
YmxpYzoKLSAgICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIG1fc3RvcDsKLSAgICB1
bnNpZ25lZCBjaGFyIG1fbGV2ZWw7Ci0gICAgYm9vbCBtX292ZXJyaWRlIDogMTsKLSAgICBib29s
IG1faGFzSHlwaGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEg
bGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2Jq
ZWN0IG9uIDY0LWJpdC4KLX07Ci0KLWVudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgewotICAg
IE5vVmlzdWFsT3ZlcnJpZGUsCi0gICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKLSAgICBW
aXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlCi19OwotCi0vLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0
J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KLS8vIGh0dHA6
Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNl
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKLXB1YmxpYzoK
LSAgICBjb25zdCBJdGVyYXRvciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7
IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVy
YXRvciYgcG9zaXRpb24pIHsgbV9jdXJyZW50ID0gcG9zaXRpb247IH0KLSAgICB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRD
b3VudCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOwotICAgICAgICBtX25l
c3RlZElzb2xhdGVDb3VudCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7Ci0gICAgfQotCi0gICAgdm9p
ZCBpbmNyZW1lbnQoKSB7IHN0YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1l
bnRJbnRlcm5hbCgpOyB9Ci0KLSAgICBCaWRpQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdHVzLmNvbnRleHQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldENvbnRleHQoUmVmUHRy
PEJpZGlDb250ZXh0PiYmIGNvbnRleHQpIHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29u
dGV4dCk7IH0KLQotICAgIHZvaWQgc2V0TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7
IG1fc3RhdHVzLmxhc3QgPSBsYXN0RGlyOyB9Ci0gICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVD
aGFyRGlyZWN0aW9uIGxhc3RTdHJvbmdEaXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RT
dHJvbmdEaXI7IH0KLSAgICB2b2lkIHNldEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsg
bV9zdGF0dXMuZW9yID0gZW9yRGlyOyB9Ci0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25z
dCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9u
IGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQotCi0gICAgY29uc3QgQmlk
aVN0YXR1cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KLSAgICB2b2lkIHNl
dFN0YXR1cyhCaWRpU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQotCi0gICAg
V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGUoKSB7IHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KLQotICAgIC8v
IFRoZSBjdXJyZW50IGFsZ29yaXRobSBoYW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUgbGF5ZXIg
b2YgbmVzdGluZyBhdCBhIHRpbWUuCi0gICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVhY2ggaXNv
bGF0ZWQgc3Bhbiwgd2Ugd2lsbCB3YWxrIGludG8gKGFuZCBpZ25vcmUpIGFsbAotICAgIC8vIGNo
aWxkIGlzb2xhdGVkIHNwYW5zLgotICAgIHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25lc3RlZElz
b2xhdGVDb3VudCsrOyB9Ci0gICAgdm9pZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1fbmVzdGVk
SXNvbGF0ZUNvdW50ID49IDEpOyBtX25lc3RlZElzb2xhdGVDb3VudC0tOyB9Ci0gICAgYm9vbCBp
bklzb2xhdGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQotCi0gICAg
dm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSk7Ci0gICAgYm9v
bCBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwotCi0gICAgdm9pZCBjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBOb1Zp
c3VhbE92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7Ci0KLSAgICBCaWRpUnVu
TGlzdDxSdW4+JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyB1c2VkIHRvIGJlIHBhcnQgb2YgZGVsZXRlUnVucygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9s
YXRpb24uCi0gICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgotICAg
IHZvaWQgbWFya0N1cnJlbnRSdW5FbXB0eSgpIHsgbV9lbXB0eVJ1biA9IHRydWU7IH0KLQotICAg
IHZvaWQgc2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVu
Jiwgc2l6ZV90KTsKLSAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25G
b3JJc29sYXRlZFJ1bihSdW4mKTsKLQotcHJvdGVjdGVkOgotICAgIEJpZGlSZXNvbHZlckJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2
ZXJzIHN1YmNsYXNzaW5nIHRoaXMgbWV0aG9kLCB3ZSBzaG91bGQKLSAgICAvLyBwYXNzIGluIHNv
bWUgc29ydCBvZiBUcmFpdHMgb2JqZWN0IHdoaWNoIGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBm
b3IgYXBwZW5kaW5nLgotICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVk
Q2xhc3MmPigqdGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQotICAgIGJvb2wgbmVlZHNDb250
aW51ZVBhc3RFbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xh
c3MmPigqdGhpcykubmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpOyB9Ci0KLSAgICBJdGVy
YXRvciBtX2N1cnJlbnQ7Ci0gICAgLy8gc29yIGFuZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFu
ZCAiZW5kIG9mIHJ1biIgcmVzcGVjdGl2ZWx5IGFuZCBjb3JyZXBvbmQKLSAgICAvLyB0byBhYnJl
dmlhdGlvbnMgdXNlZCBpbiBVQkEgc3BlYzogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5
LyNCRDcKLSAgICBJdGVyYXRvciBtX3NvcjsgLy8gUG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0
ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgotICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8g
dGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KLSAgICBJdGVyYXRvciBtX2xh
c3Q7Ci0gICAgQmlkaVN0YXR1cyBtX3N0YXR1czsKLSAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVj
dGlvbiB7IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIEl0ZXJhdG9yIGVuZE9mTGluZTsKLSAgICBi
b29sIG1fcmVhY2hlZEVuZE9mTGluZSB7IGZhbHNlIH07Ci0gICAgSXRlcmF0b3IgbV9sYXN0QmVm
b3JlRVQ7IC8vIEJlZm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKLSAgICBib29s
IG1fZW1wdHlSdW4geyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJl
bG9uZyB0byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFzc2VkCi0gICAgLy8gaW50byBj
cmVhdGVCaWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KLSAgICBCaWRpUnVuTGlzdDxSdW4+
IG1fcnVuczsKLQotICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+IG1fd2hp
dGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLQotICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNv
dW50IHsgMCB9OwotICAgIEhhc2hNYXA8UnVuKiwgdW5zaWduZWQ+IG1fd2hpdGVzcGFjZUNvbGxh
cHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW47Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCByYWlz
ZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJEaXJlY3Rp
b24gdG8pOwotICAgIHZvaWQgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0
aW9uIGZyb20pOwotICAgIHZvaWQgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdM
ZXZlbCgpOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24o
VUNoYXJEaXJlY3Rpb24pOwotICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7Ci0gICAg
dm9pZCBpbmNyZW1lbnRJbnRlcm5hbCgpIHsgbV9jdXJyZW50LmluY3JlbWVudCgpOyB9Ci0gICAg
dm9pZCBhcHBlbmRSdW5JbnRlcm5hbCgpOwotICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJ
bnRlcm5hbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFZlY3RvcjxCaWRpRW1iZWRk
aW5nLCA4PiBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KLWNsYXNzIEJpZGlSZXNvbHZlciA6
IHB1YmxpYyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZlcjxJdGVy
YXRvciwgUnVuPj4gewotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgSXNvbGF0ZVJ1bj4KLWNsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRl
IDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyV2l0
aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKLXB1YmxpYzoKLSAgICB+Qmlk
aVJlc29sdmVyV2l0aElzb2xhdGUoKTsKLQotICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKTsK
LSAgICB2b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7Ci0gICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFz
dEVuZEludGVybmFsKCkgY29uc3Q7Ci0gICAgVmVjdG9yPElzb2xhdGVSdW4+JiBpc29sYXRlZFJ1
bnMoKSB7IHJldHVybiBtX2lzb2xhdGVkUnVuczsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxJ
c29sYXRlUnVuPiBtX2lzb2xhdGVkUnVuczsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+Ci1pbmxpbmUgQmlkaVJlc29s
dmVyV2l0aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVzb2x2ZXJX
aXRoSXNvbGF0ZSgpCi17Ci0gICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgcmVzb2x2ZXIgc2hvdWxk
IGhhdmUgaGFuZGxlZCB0aGUgaXNvbGF0ZWQgcnVucy4KLSAgICBBU1NFUlQobV9pc29sYXRlZFJ1
bnMuaXNFbXB0eSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJh
dG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKLXsKLSAgICBpZiAo
IW1fZW1wdHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSBtX3Nvci5vZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9l
b3Iub2Zmc2V0KCk7Ci0KLSAgICAgICAgaWYgKCFlbmRPZkxpbmUuYXRFbmQoKSAmJiBlbmRPZmZz
ZXQgPj0gZW5kT2ZMaW5lLm9mZnNldCgpKSB7Ci0gICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxp
bmUgPSB0cnVlOwotICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2ZMaW5lLm9mZnNldCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKLSAgICAg
ICAgICAgIG1fcnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxSdW4+KHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQgKyAxLCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7Ci0KLSAgICAgICAgbV9lb3IuaW5j
cmVtZW50KCk7Ci0gICAgICAgIG1fc29yID0gbV9lb3I7Ci0gICAgfQotCi0gICAgbV9kaXJlY3Rp
b24gPSBVX09USEVSX05FVVRSQUw7Ci0gICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFM
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFt
ZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVy
aXZlZENsYXNzPjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRkaW5nU291cmNl
IHNvdXJjZSkKLXsKLSAgICAvLyBJc29sYXRlZCBzcGFucyBjb21wdXRlIGJhc2UgZGlyZWN0aW9u
YWxpdHkgZHVyaW5nIHRoZWlyIG93biBVQkEgcnVuLgotICAgIC8vIERvIG5vdCBpbnNlcnQgZmFr
ZSBlbWJlZCBjaGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4gaXNvbGF0ZWQgc3Bhbi4KLSAgICBB
U1NFUlQoIWluSXNvbGF0ZSgpKTsKLQotICAgIEFTU0VSVChkaXIgPT0gVV9QT1BfRElSRUNUSU9O
QUxfRk9STUFUIHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpciA9PSBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJ
TkcgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSk7Ci0gICAgbV9jdXJyZW50RXhw
bGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIsIHNvdXJjZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFt
ZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVy
aXZlZENsYXNzPjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpCi17
Ci0gICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRF
bmQoKSk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFS
SwotICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9VTkRBUllfTkVVVFJBTAotICAgICAg
ICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKLSAgICAgICAg
JiYgbV9zdGF0dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCi0gICAgICAgICYm
IG1fc3RhdHVzLmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIAotICAgICAgICAmJiBt
X3N0YXR1cy5sYXN0ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQotICAgICAgICAmJiBtX3N0
YXR1cy5sYXN0ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCk7Ci0gICAgaWYgKG1fZGlyZWN0
aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5s
YXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRf
VE9fTEVGVDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwg
dHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBS
dW4sIERlcml2ZWRDbGFzcz46Omxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVj
dGlvbiBmcm9tKQotewotICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsK
LSAgICAgICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwotICAg
ICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8g
YXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlk
aS5sYXN0Ci0gICAgICAgIGlmIChmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAg
ICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAotICAgICAgICAgICAg
aWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKLSAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAg
ICAgICBtX2RpcmVjdGlvbiA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0
dXMuZW9yID09IFVfQVJBQklDX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVG
VF9UT19SSUdIVCkgewotICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgfQotICAgICAgICBtX2VvciA9IG1f
bGFzdDsKLSAgICB9Ci0KLSAgICBhcHBlbmRSdW4oKTsKLSAgICBtX2VtcHR5UnVuID0gdHJ1ZTsK
LQotICAgIC8vIHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVy
IGxldmVsIChydWxlIFgxMCkKLSAgICBzZXRMYXN0RGlyKGZyb20pOwotICAgIHNldExhc3RTdHJv
bmdEaXIoZnJvbSk7Ci0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lk
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBs
aWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRv
KQotewotICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKLSAgICAgICAg
Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwotICAgICAgICAvLyBi
aWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRo
ZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0Ci0g
ICAgICAgIGlmICh0byA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgIC8vIGJpZGku
c29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKLSAgICAgICAgICAgIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0
dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0
YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hU
ICYmIGZyb20gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05V
TUJFUgotICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAm
JiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJ
R0hUX1RPX0xFRlQpKQotICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFO
X05VTUJFUiAmJiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9t
ID09IFVfUklHSFRfVE9fTEVGVCkpIHsKLSAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9lb3IgPSBtX2xhc3Q7Ci0gICAgfQotCi0gICAgYXBwZW5kUnVuKCk7Ci0gICAgbV9lbXB0eVJ1
biA9IHRydWU7Ci0KLSAgICBzZXRMYXN0RGlyKHRvKTsKLSAgICBzZXRMYXN0U3Ryb25nRGlyKHRv
KTsKLSAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLWJvb2wgQmlkaVJlc29s
dmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVk
ZGluZygpCi17Ci0gICAgLy8gV2hlbiB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmlu
ZyB0aGUgcGFyZW50IGNvbnRleHQgd2hpY2gKLSAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0
aGUgaXNvbGF0ZWQgY29udGVudCwgaW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCi0gICAgLy8g
V2Ugc2hvdWxkIG5ldmVyIGFjY3J1ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92
ZXIgaXNvbGF0ZWQgY29udGVudC4KLSAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVu
dEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKTsKLQotICAgIGF1dG8gZnJvbUxl
dmVsID0gY29udGV4dCgpLT5sZXZlbCgpOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gdG9Db250
ZXh0ID0gY29udGV4dCgpOwotCi0gICAgZm9yIChhdXRvJiBlbWJlZGRpbmcgOiBtX2N1cnJlbnRF
eHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlKSB7Ci0gICAgICAgIGlmIChlbWJlZGRpbmcuZGlyZWN0
aW9uID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkgewotICAgICAgICAgICAgaWYgKGF1dG8q
IHBhcmVudENvbnRleHQgPSB0b0NvbnRleHQtPnBhcmVudCgpKQotICAgICAgICAgICAgICAgIHRv
Q29udGV4dCA9IHBhcmVudENvbnRleHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hU
X1RPX0xFRlRfRU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUX09WRVJSSURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsKLSAgICAg
ICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfTEVGVF9UT19S
SUdIVF9PVkVSUklERSB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9P
VkVSUklERTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSB0b0NvbnRleHQtPmxl
dmVsKCk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKLSAg
ICAgICAgICAgICAgICBsZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobGV2ZWwpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJFdmVuTGV2ZWwo
bGV2ZWwpOwotICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCi0gICAgICAgICAgICAgICAgdG9D
b250ZXh0ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwg
ZW1iZWRkaW5nLnNvdXJjZSwgdG9Db250ZXh0LmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGF1dG8gdG9MZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKLQotICAgIGlmICh0b0xldmVs
ID4gZnJvbUxldmVsKQotICAgICAgICByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxl
dmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCwgdG9MZXZlbCAlIDIg
PyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOwotICAgIGVsc2UgaWYgKHRvTGV2
ZWwgPCBmcm9tTGV2ZWwpCi0gICAgICAgIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9t
TGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKLQotICAgIHNl
dENvbnRleHQoV1RGTW92ZSh0b0NvbnRleHQpKTsKLQotICAgIG1fY3VycmVudEV4cGxpY2l0RW1i
ZWRkaW5nU2VxdWVuY2UuY2xlYXIoKTsKLQotICAgIHJldHVybiBmcm9tTGV2ZWwgIT0gdG9MZXZl
bDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBEZXJpdmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24o
VUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudCkKLXsKLSAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsK
LSAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgIGlmIChtX3N0
YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgbV9zdGF0dXMubGFz
dCA9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgIGNhc2UgVV9DT01NT05fTlVNQkVS
X1NFUEFSQVRPUjoKLSAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgY2FzZSBVX1dI
SVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgIHN3
aXRjaCAobV9zdGF0dXMubGFzdCkgewotICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKLSAg
ICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKLSAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgY2FzZSBV
X0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9zdGF0
dXMubGFzdCA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFVfRElSX05PTl9TUEFDSU5HX01BUks6Ci0gICAgY2FzZSBVX0JPVU5EQVJZX05FVVRS
QUw6Ci0gICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgotICAgIGNhc2UgVV9MRUZU
X1RPX1JJR0hUX0VNQkVERElORzoKLSAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToK
LSAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKLSAgICBjYXNlIFVfUE9QX0RJUkVD
VElPTkFMX0ZPUk1BVDoKLSAgICAgICAgLy8gaWdub3JlIHRoZXNlCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OwotICAgIH0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZl
ZENsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJp
dmVkQ2xhc3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQotewotICAgIHVuc2lnbmVkIGNoYXIg
bGV2ZWxMb3cgPSAxMjg7Ci0gICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOwotICAgIGZv
ciAoUnVuKiBydW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkg
ewotICAgICAgICBsZXZlbEhpZ2ggPSBzdGQ6Om1heChydW4tPmxldmVsKCksIGxldmVsSGlnaCk7
Ci0gICAgICAgIGxldmVsTG93ID0gc3RkOjptaW4ocnVuLT5sZXZlbCgpLCBsZXZlbExvdyk7Ci0g
ICAgfQotCi0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwy
IGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgotICAgIC8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cnRzL3RyOS8jTDIKLSAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3VuZCBpbiB0
aGUgdGV4dCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCi0gICAgLy8gcmV2
ZXJzZSBhbnkgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRo
YXQgbGV2ZWwgb3IgaGlnaGVyLgotCi0gICAgLy8gUmV2ZXJzaW5nIGlzIG9ubHkgZG9uZSB1cCB0
byB0aGUgbG93ZXN0IG9kZCBsZXZlbC4KLSAgICBpZiAoIShsZXZlbExvdyAlIDIpKQotICAgICAg
ICBsZXZlbExvdysrOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBtX3J1bnMucnVuQ291bnQoKSAt
IDE7Ci0KLSAgICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7Ci0gICAgICAgIHVuc2ln
bmVkIGkgPSAwOwotICAgICAgICBSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOwotICAgICAg
ICB3aGlsZSAoaSA8IGNvdW50KSB7Ci0gICAgICAgICAgICBmb3IgKDtpIDwgY291bnQgJiYgcnVu
ICYmIHJ1bi0+bGV2ZWwoKSA8IGxldmVsSGlnaDsgaSsrKQotICAgICAgICAgICAgICAgIHJ1biA9
IHJ1bi0+bmV4dCgpOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOwotICAgICAgICAg
ICAgZm9yICg7aSA8PSBjb3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpID49IGxldmVsSGlnaDsg
aSsrKQotICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dCgpOwotICAgICAgICAgICAgdW5z
aWduZWQgZW5kID0gaSAtIDE7Ci0gICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoc3RhcnQs
IGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbGV2ZWxIaWdoLS07Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xh
c3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6
Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlv
bk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWspCi17Ci0gICAgQVNTRVJUKG1f
ZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCk7Ci0KLSAgICBpZiAob3ZlcnJpZGUgIT0gTm9W
aXN1YWxPdmVycmlkZSkgewotICAgICAgICBtX2VtcHR5UnVuID0gZmFsc2U7Ci0gICAgICAgIG1f
c29yID0gbV9jdXJyZW50OwotICAgICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci0gICAgICAgIHdo
aWxlIChtX2N1cnJlbnQgIT0gZW5kICYmICFtX2N1cnJlbnQuYXRFbmQoKSkgewotICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBpbmNyZW1lbnQoKTsKLSAgICAgICAg
fQotICAgICAgICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRlID09IFZpc3VhbExlZnRUb1JpZ2h0T3Zl
cnJpZGUgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgIGFwcGVu
ZFJ1bigpOwotICAgICAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1
bigpKTsKLSAgICAgICAgaWYgKG92ZXJyaWRlID09IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUg
JiYgbV9ydW5zLnJ1bkNvdW50KCkpCi0gICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoMCwg
bV9ydW5zLnJ1bkNvdW50KCkgLSAxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
ZW1wdHlSdW4gPSB0cnVlOwotCi0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotCi0gICAgbV9sYXN0
ID0gbV9jdXJyZW50OwotICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOwotICAgIEJpZGlSZXNvbHZl
ckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPiBzdGF0ZUF0RW5kOwotCi0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudDsKLSAgICAgICAg
aWYgKHBhc3RFbmQgJiYgKGhhcmRMaW5lQnJlYWsgfHwgbV9jdXJyZW50LmF0RW5kKCkpKSB7Ci0g
ICAgICAgICAgICBCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKLSAgICAgICAgICAgIGlmICho
YXJkTGluZUJyZWFrKSB7Ci0gICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUg
VW5pY29kZSBCaWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAotICAgICAgICAgICAgICAg
IC8vIFdpbklFIGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyByZXNldCBi
aWRpIHN0YXRlCi0gICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBiaWRpIGNv
bnRyb2wgY2hhcmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCi0gICAgICAgICAgICAgICAgLy8g
RE9NIG5vZGVzIHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5Ci0gICAgICAgICAgICAgICAg
c3RhdGVBdEVuZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGlu
Z0NvbnRleHRzKCkpOwotCi0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRlQXRFbmQu
Y29udGV4dCgpLT5kaXIoKTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVvckRpcihk
aXJDdXJyZW50KTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIoZGlyQ3Vy
cmVudCk7Ci0gICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGlyKGRpckN1
cnJlbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYy0+
cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKLSAgICAgICAg
ICAgICAgICBkaXJDdXJyZW50ID0gYy0+ZGlyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlvbigpOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQotICAgICAgICAgICAgICAgICAg
ICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKLSAgICAgICAgICAg
ICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCi0gICAg
ICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURF
Ci0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX09W
RVJSSURFCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9QT1BfRElSRUNU
SU9OQUxfRk9STUFUKQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBjb250ZXh0KCktPmRp
cigpOwotICAgICAgICAgICAgZWxzZSBpZiAoZGlyQ3VycmVudCA9PSBVX0RJUl9OT05fU1BBQ0lO
R19NQVJLKQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBtX3N0YXR1cy5sYXN0OwotICAg
ICAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIC8vIE91ciBXaW5kb3dzIGJ1aWxk
IGhhc24ndCB1cGRhdGVkIGl0cyBoZWFkZXJzIGZyb20gSUNVIDYuMSwgd2hpY2ggZG9lc24ndCBo
YXZlIHRoZXNlIHN5bWJvbHMuCi0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVfRklSU1Rf
U1RST05HX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMTkpOwotICAgICAg
ICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX0xFRlRfVE9fUklHSFRfSVNPTEFURSA9IHN0YXRpY19j
YXN0PFVDaGFyRGlyZWN0aW9uPigyMCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVf
UklHSFRfVE9fTEVGVF9JU09MQVRFID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIxKTsK
LSAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSA9
IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMik7Ci0jZW5kaWYKLSAgICAgICAgLy8gV2Ug
aWdub3JlIGFsbCBjaGFyYWN0ZXIgZGlyZWN0aW9uYWxpdHkgd2hpbGUgaW4gdW5pY29kZS1iaWRp
OiBpc29sYXRlIHNwYW5zLgotICAgICAgICAvLyBXZSdsbCBoYW5kbGUgb3JkZXJpbmcgdGhlIGlz
b2xhdGVkIGNoYXJhY3RlcnMgaW4gYSBzZWNvbmQgcGFzcy4KLSAgICAgICAgaWYgKGluSXNvbGF0
ZSgpIHx8IGRpckN1cnJlbnQgPT0gVV9GSVJTVF9TVFJPTkdfSVNPTEFURSB8fCBkaXJDdXJyZW50
ID09IFVfTEVGVF9UT19SSUdIVF9JU09MQVRFIHx8IGRpckN1cnJlbnQgPT0gVV9SSUdIVF9UT19M
RUZUX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX1BPUF9ESVJFQ1RJT05BTF9JU09MQVRFKQot
ICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfT1RIRVJfTkVVVFJBTDsKLQotICAgICAgICBBU1NF
UlQobV9zdGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJBTCB8fCBtX2Vvci5hdEVuZCgpKTsKLSAg
ICAgICAgc3dpdGNoIChkaXJDdXJyZW50KSB7Ci0KLSAgICAgICAgLy8gZW1iZWRkaW5nIGFuZCBv
dmVycmlkZXMgKFgxLVg5IGluIHRoZSBCaWRpIHNwZWNzKQotICAgICAgICBjYXNlIFVfUklHSFRf
VE9fTEVGVF9FTUJFRERJTkc6Ci0gICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUX0VNQkVERElO
RzoKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU6Ci0gICAgICAgIGNhc2Ug
VV9MRUZUX1RPX1JJR0hUX09WRVJSSURFOgotICAgICAgICBjYXNlIFVfUE9QX0RJUkVDVElPTkFM
X0ZPUk1BVDoKLSAgICAgICAgICAgIGVtYmVkKGRpckN1cnJlbnQsIEZyb21Vbmljb2RlKTsKLSAg
ICAgICAgICAgIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAvLyBzdHJvbmcgdHlwZXMKLSAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6
Ci0gICAgICAgICAgICBzd2l0Y2gobV9zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNh
c2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAg
ICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25n
ICE9IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9DT01N
T05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVV
VFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVf
V0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJB
TDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05V
TUJFUikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcg
IT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdz
IGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24g
PSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAh
PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQXJhYmljIG51bWJlcnMgYXJlIGFsd2F5cyBvbiBhIGhp
Z2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQoKS0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdo
aWNoIGlzIFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0
U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9s
YXN0IHN0dWZmIHRha2VzIGVtYmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xFRlRf
VE9fUklHSFQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RPX1JJ
R0hUOwotICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFz
dCkgewotICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAgICAg
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJ
Q19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAg
ICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVG
VDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVS
TUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6
Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVO
VF9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6
Ci0gICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAm
JiBjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBV
X0FSQUJJQ19OVU1CRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRf
VE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigp
ID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9
IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBV
X1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3Vy
cmVudDsKLSAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6Ci0KLSAgICAgICAgY2Fz
ZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25n
ICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBsYXN0
IHN0cm9uZyB3YXMgQUwgY2hhbmdlIEVOIHRvIEFOCi0gICAgICAgICAgICAgICAgc3dpdGNoICht
X3N0YXR1cy5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVB
Tl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGQUxMVEhST1VH
SDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9S
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfV0hJ
VEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRS
QUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BF
QU5fTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxh
c3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBzbyB0aGUgbmV1dHJh
bHMgc2hvdWxkIGJlIFIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1p
bmF0ZSB0aGUgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX3N0YXR1cy5sYXN0ID09
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPyBtX2xhc3RCZWZvcmVFVCA6IG1fbGFzdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RP
X0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhIG5ldyBFTiBydW4uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1C
RVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBBTiBydW4uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNvbnRleHQo
KS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2UgYW4gUiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID8g
bV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9u
ZyA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
eHRlbmQgdGhlIFIgcnVuIHRvIGluY2x1ZGUgdGhlIG5ldXRyYWxzLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9U
RVJNSU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgICAgICBtX3N0YXR1cy5l
b3IgPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICBpZiAobV9kaXJlY3Rpb24g
PT0gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
TEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAg
ICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdI
VDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RP
X1JJR0hUKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRf
VE9fTEVGVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICAg
ICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05V
TUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9BUkFCSUNfTlVNQkVSKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfVEVSTUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoK
LSAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAg
IGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfV0hJVEVf
U1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1C
RVIgJiYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNvbnRleHQo
KS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8
IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0dXMubGFzdFN0cm9u
ZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xF
RlQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIHJ1biBiZWZv
cmUgdGhlIG5ldXRyYWxzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRyYWxz
LgotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kaXJlY3Rpb24gPT0gVV9PVEhFUl9O
RVVUUkFMKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5s
YXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRf
VE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgbV9zdGF0
dXMuZW9yID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09
IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklD
X05VTUJFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVN
QkVSX1NFUEFSQVRPUjoKLSAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlO
QVRPUjoKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0ID09IFVfRVVST1BFQU5fTlVNQkVS
KSB7Ci0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgICAgIG1fc3RhdHVz
LmVvciA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3Qg
IT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUikKLSAgICAgICAgICAgICAgICBtX2xhc3RC
ZWZvcmVFVCA9IG1fZW1wdHlSdW4gPyBtX2VvciA6IG1fbGFzdDsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIC8vIGJvdW5kYXJ5IG5ldXRyYWxzIHNob3VsZCBiZSBpZ25vcmVkCi0gICAg
ICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgotICAgICAgICAgICAgaWYgKG1fZW9yID09IG1f
bGFzdCkKLSAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgLy8gbmV1dHJhbHMKLSAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFS
QVRPUjoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIHdlIGRvIHdpdGggbmV3bGluZSBh
bmQgcGFyYWdyYXBoIHNlcGFyYXRvcnMgdGhhdCBjb21lIHRvIGhlcmU/Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBydWxlIEwxLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXN0RW5kICYm
IChtX2VvciA9PSBtX2N1cnJlbnQgfHwgIW5lZWRzQ29udGludWVQYXN0RW5kKCkpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fcmVhY2hlZEVuZE9mTGluZSkgewotICAgICAgICAgICAgICAgIG1fZW9y
ID0gZW5kT2ZMaW5lOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMuZW9yKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0FS
QUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IG1fc3Rh
dHVzLmVvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVG
VF9UT19SSUdIVCA6IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaGFuZGxlIG5ldXRyYWxzIGluIHRoaXMgY2FzZS4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4MTcKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudCA9IGVuZDsKLSAgICAg
ICAgICAgIG1fc3RhdHVzID0gc3RhdGVBdEVuZC5tX3N0YXR1czsKLSAgICAgICAgICAgIG1fc29y
ID0gc3RhdGVBdEVuZC5tX3NvcjsgCi0gICAgICAgICAgICBtX2VvciA9IHN0YXRlQXRFbmQubV9l
b3I7Ci0gICAgICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKLSAgICAgICAgICAg
IG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lOwotICAg
ICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBzdGF0ZUF0RW5kLm1fbGFzdEJlZm9yZUVUOwotICAg
ICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKLSAgICAgICAgICAg
IG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oZGly
Q3VycmVudCk7Ci0gICAgICAgIG1fbGFzdCA9IG1fY3VycmVudDsKLQotICAgICAgICBpZiAobV9l
bXB0eVJ1bikgewotICAgICAgICAgICAgbV9zb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBt
X2VtcHR5UnVuID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmNyZW1lbnQoKTsKLSAg
ICAgICAgaWYgKCFtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgYm9vbCBjb21taXR0ZWQgPSBjb21taXRFeHBsaWNpdEVtYmVkZGluZygp
OwotICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCAmJiBwYXN0RW5kKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jdXJyZW50ID0gZW5kOwotICAgICAgICAgICAgICAgIG1fc3RhdHVzID0gc3RhdGVBdEVu
ZC5tX3N0YXR1czsKLSAgICAgICAgICAgICAgICBtX3NvciA9IHN0YXRlQXRFbmQubV9zb3I7IAot
ICAgICAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsKLSAgICAgICAgICAgICAg
ICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKLSAgICAgICAgICAgICAgICBtX3JlYWNoZWRF
bmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgICAg
ICBtX2xhc3RCZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQ7Ci0gICAgICAgICAg
ICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKLSAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcGFzdEVuZCAmJiAobV9j
dXJyZW50ID09IGVuZCB8fCBtX2N1cnJlbnQuYXRFbmQoKSkpIHsKLSAgICAgICAgICAgIGlmICht
X2VtcHR5UnVuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc3RhdGVBdEVu
ZC5tX3N0YXR1cyA9IG1fc3RhdHVzOwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX3NvciA9IG1f
c29yOwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VvciA9IG1fZW9yOwotICAgICAgICAgICAg
c3RhdGVBdEVuZC5tX2xhc3QgPSBtX2xhc3Q7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fcmVh
Y2hlZEVuZE9mTGluZSA9IG1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgIHN0YXRlQXRF
bmQubV9sYXN0QmVmb3JlRVQgPSBtX2xhc3RCZWZvcmVFVDsKLSAgICAgICAgICAgIHN0YXRlQXRF
bmQubV9lbXB0eVJ1biA9IG1fZW1wdHlSdW47Ci0gICAgICAgICAgICBlbmRPZkxpbmUgPSBtX2xh
c3Q7Ci0gICAgICAgICAgICBwYXN0RW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1fcnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKG1fcnVucy5sYXN0UnVuKCkpOwotICAgIHJlb3Jk
ZXJSdW5zRnJvbUxldmVscygpOwotICAgIGVuZE9mTGluZSA9IEl0ZXJhdG9yKCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRD
bGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+
OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1
biwgc2l6ZV90IHRyYW5zaXRpb24pCi17Ci0gICAgQVNTRVJUKCFtX3doaXRlc3BhY2VDb2xsYXBz
aW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmNvbnRhaW5zKCZydW4pKTsKLSAgICBtX3doaXRl
c3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmFkZCgmcnVuLCB0cmFuc2l0
aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlw
ZW5hbWUgRGVyaXZlZENsYXNzPgotdW5zaWduZWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBEZXJpdmVkQ2xhc3M+Ojp3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25Gb3JJc29sYXRlZFJ1bi50YWtlKCZydW4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5M
aXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ODM4YTI1MmM1YzMyNGRkMzA3ZmQ4ZmU1YjYyY2Q0
OTM5OTJiZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHQgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBCaWRpUnVu
TGlzdF9oCi0jZGVmaW5lIEJpZGlSdW5MaXN0X2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1jbGFz
cyBCaWRpUnVuTGlzdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxpc3QpOwot
cHVibGljOgotICAgIEJpZGlSdW5MaXN0KCkKLSAgICAgICAgOiBtX2xhc3RSdW4obnVsbHB0cikK
LSAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKLSAgICAgICAgLCBtX3J1bkNv
dW50KDApCi0gICAgewotICAgIH0KLQotICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNvbHZlciBu
byBsb25nZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCi0gICAgLy8gdGhlbiB+QmlkaVJ1bkxpc3Qg
c2hvdWxkIGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCi0KLSAgICBSdW4qIGZpcnN0
UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQotICAgIFJ1biogbGFzdFJ1
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQotICAgIFJ1biogbG9naWNhbGx5TGFzdFJ1
bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQotICAgIHVuc2lnbmVkIHJ1
bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQotCi0gICAgdm9pZCBhcHBlbmRS
dW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7Ci0gICAgdm9pZCBwcmVwZW5kUnVuKHN0ZDo6dW5p
cXVlX3B0cjxSdW4+JiYpOwotCi0gICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7Ci0gICAgdm9p
ZCBtb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKik7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9p
ZCByZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKLSAgICB2b2lkIHJl
b3JkZXJSdW5zRnJvbUxldmVscygpOwotCi0gICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0UnVuKFJ1
biogcnVuKSB7IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQotCi0gICAgdm9pZCByZXBsYWNl
UnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpOwot
Ci1wcml2YXRlOgotCi0gICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQtbGlzdCwg
d2hlcmUgdGhlIGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQgYXJlIG9m
IHR5cGUgc3RkOjp1bmlxdWVfcHRyKS4KLSAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJlbG93IHBv
aW50IGludG8gdGhlIHNpbmdseS1saW5rZWQtbGlzdC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVu
PiBtX2ZpcnN0UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAotICAgIFJ1biogbV9sYXN0UnVu
OwotICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOwotICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVu
Pjo6YXBwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQotewotICAgIGlmICghbV9m
aXJzdFJ1bikgewotICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOwotICAgICAgICBt
X2xhc3RSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbGFz
dFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHJ1bikpOwotICAgICAgICBtX2xhc3RSdW4gPSBtX2xhc3RS
dW4tPm5leHQoKTsKLSAgICB9Ci0gICAgbV9ydW5Db3VudCsrOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihzdGQ6OnVu
aXF1ZV9wdHI8UnVuPiYmIHJ1bikKLXsKLSAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsKLQotICAg
IGlmICghbV9sYXN0UnVuKQotICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7Ci0gICAgZWxz
ZQotICAgICAgICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7Ci0gICAgbV9maXJz
dFJ1biA9IFdURk1vdmUocnVuKTsKLSAgICBtX3J1bkNvdW50Kys7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQoUnVu
KiBydW4pCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4pOwotICAgIEFTU0VSVChtX2xhc3RSdW4p
OwotICAgIEFTU0VSVChydW4tPm5leHQoKSk7Ci0KLSAgICBSdW4qIHByZXZpb3VzID0gbnVsbHB0
cjsKLSAgICBSdW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIHdoaWxlIChjdXJy
ZW50ICE9IHJ1bikgewotICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJl
bnQgPSBwcmV2aW91cy0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmICghcHJldmlvdXMpIHsKLSAg
ICAgICAgQVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7Ci0gICAg
ICAgIG1fZmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOwotICAgICAgICBt
X2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VO
ZXh0KCk7Ci0gICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0KCkpOwot
ICAgICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3Zl
UnVuVG9CZWdpbm5pbmcoUnVuKiBydW4pCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4pOwotICAg
IEFTU0VSVChtX2xhc3RSdW4pOwotICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5nZXQoKSk7
Ci0KLSAgICBSdW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICBSdW4qIGN1cnJl
bnQgPSBwcmV2aW91cy0+bmV4dCgpOwotICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikgewotICAg
ICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4
dCgpOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3Vz
LT50YWtlTmV4dCgpOwotICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQoKSk7Ci0g
ICAgaWYgKHJ1biA9PSBtX2xhc3RSdW4pCi0gICAgICAgIG1fbGFzdFJ1biA9IHByZXZpb3VzOwot
Ci0gICAgdGFyZ2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOwotICAgIG1fZmlyc3RS
dW4gPSBXVEZNb3ZlKHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci12b2lkIEJp
ZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1
bkxpc3Q8UnVuPiYgbmV3UnVucykKLXsKLSAgICBBU1NFUlQobmV3UnVucy5ydW5Db3VudCgpKTsK
LSAgICBBU1NFUlQobV9maXJzdFJ1bik7Ci0gICAgQVNTRVJUKHRvUmVwbGFjZSk7Ci0KLSAgICBt
X3J1bkNvdW50ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRpbmcgdGhl
IG5ldyBydW5zIGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCi0KLSAgICAvLyBGaXggdXAgYW55IHBv
aW50ZXJzIHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCi0gICAgaWYgKG1fbGFzdFJ1biA9PSB0b1Jl
cGxhY2UpCi0gICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOwotICAgIGlmICht
X2xvZ2ljYWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQotICAgICAgICBtX2xvZ2ljYWxseUxhc3RS
dW4gPSBuZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKLQotICAgIGlmIChtX2ZpcnN0UnVuLmdl
dCgpID09IHRvUmVwbGFjZSkgewotICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dCht
X2ZpcnN0UnVuLT50YWtlTmV4dCgpKTsKLSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUobmV3
UnVucy5tX2ZpcnN0UnVuKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGaW5kIHRoZSBydW4g
anVzdCBiZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KLSAgICAgICAgUnVu
KiBwcmV2aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChwcmV2aW91
c1J1bi0+bmV4dCgpICE9IHRvUmVwbGFjZSkKLSAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcHJl
dmlvdXNSdW4tPm5leHQoKTsKLSAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKLQotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5leHQoKTsK
LSAgICAgICAgcHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4p
KTsKLSAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtlTmV4dCgp
KTsKLSAgICB9Ci0KLSAgICBuZXdSdW5zLmNsZWFyKCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
dW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKLXsKLSAgICBtX2ZpcnN0UnVuID0g
bnVsbHB0cjsKLSAgICBtX2xhc3RSdW4gPSBudWxscHRyOwotICAgIG1fbG9naWNhbGx5TGFzdFJ1
biA9IG51bGxwdHI7Ci0gICAgbV9ydW5Db3VudCA9IDA7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
dW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQpCi17Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZW5kIDwgbV9ydW5Db3VudCk7
Ci0KLSAgICAvLyBHZXQgdGhlIGl0ZW0gYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgcnVucyB0byBy
ZXZlcnNlIGFuZCBwdXQgaXQgaW4KLSAgICAvLyB8YmVmb3JlU3RhcnR8LiB8Y3Vycnwgc2hvdWxk
IHBvaW50IHRvIHRoZSBmaXJzdCBydW4gdG8gcmV2ZXJzZS4KLSAgICBSdW4qIGN1cnIgPSBtX2Zp
cnN0UnVuLmdldCgpOwotICAgIFJ1biogYmVmb3JlU3RhcnQgPSBudWxscHRyOwotICAgIHVuc2ln
bmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgc3RhcnQ7ICsraSkgewotICAgICAgICBiZWZvcmVT
dGFydCA9IGN1cnI7Ci0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7Ci0gICAgfQotICAgIFJ1
biogc3RhcnRSdW4gPSBjdXJyOwotCi0gICAgZm9yICg7IGkgPCBlbmQ7ICsraSkKLSAgICAgICAg
Y3VyciA9IGN1cnItPm5leHQoKTsKLQotICAgIGlmICghY3Vyci0+bmV4dCgpKQotICAgICAgICBt
X2xhc3RSdW4gPSBzdGFydFJ1bjsKLQotICAgIC8vIFN0YW5kYXJkICJzbGlkaW5nIHdpbmRvdyIg
b2YgMyBwb2ludGVycwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHByZXZpb3VzID0gY3Vyci0+
dGFrZU5leHQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBjdXJyZW50ID0gYmVmb3JlU3Rh
cnQgPyBiZWZvcmVTdGFydC0+dGFrZU5leHQoKSA6IFdURk1vdmUobV9maXJzdFJ1bik7Ci0gICAg
d2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbmV4dCA9IGN1
cnJlbnQtPnRha2VOZXh0KCk7Ci0gICAgICAgIGN1cnJlbnQtPnNldE5leHQoV1RGTW92ZShwcmV2
aW91cykpOwotICAgICAgICBwcmV2aW91cyA9IFdURk1vdmUoY3VycmVudCk7Ci0gICAgICAgIGN1
cnJlbnQgPSBXVEZNb3ZlKG5leHQpOwotICAgIH0KLQotICAgIGlmIChiZWZvcmVTdGFydCkKLSAg
ICAgICAgYmVmb3JlU3RhcnQtPnNldE5leHQoV1RGTW92ZShwcmV2aW91cykpOwotICAgIGVsc2UK
LSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUocHJldmlvdXMpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCaWRpUnVuTGlzdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGI2NTYzYmM4YWVlNmExZmRkMjRiMTI2ZTdlMWRmZmZlNDEzZTM4Yi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaUdyb3VwQ2FuZGlk
YXRlKFVDaGFyMzIgY2hhcmFjdGVyKQotewotI2RlZmluZSBTWU1CT0xTX0FORF9QSUNUT0dSQVBI
U19FWFRFTkRFRF9BIDI5OAotI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNjQKLSNkZWZp
bmUgVUJMT0NLX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EgU1lNQk9MU19BTkRf
UElDVE9HUkFQSFNfRVhURU5ERURfQQotI2Vsc2UKLXN0YXRpY19hc3NlcnQoVUJMT0NLX1NZTUJP
TFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EgPT0gU1lNQk9MU19BTkRfUElDVE9HUkFQSFNf
RVhURU5ERURfQSk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8aW50Pih1Ymxv
Y2tfZ2V0Q29kZShjaGFyYWN0ZXIpKSkgewotICAgIGNhc2UgVUJMT0NLX01JU0NFTExBTkVPVVNf
U1lNQk9MUzoKLSAgICBjYXNlIFVCTE9DS19ESU5HQkFUUzoKLSAgICBjYXNlIFVCTE9DS19NSVND
RUxMQU5FT1VTX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0VNT1RJ
Q09OUzoKLSAgICBjYXNlIFVCTE9DS19UUkFOU1BPUlRfQU5EX01BUF9TWU1CT0xTOgotICAgIGNh
c2UgVUJMT0NLX1NVUFBMRU1FTlRBTF9TWU1CT0xTX0FORF9QSUNUT0dSQVBIUzoKLSAgICBjYXNl
IFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRFRF9BOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaUZpdHpwYXRyaWNrTW9kaWZpZXIoVUNoYXIzMiBj
aGFyYWN0ZXIpCi17Ci0gICAgLy8gVSsxRjNGQiAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRSSUNL
IFRZUEUtMS0yCi0gICAgLy8gVSsxRjNGQyAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRSSUNLIFRZ
UEUtMwotICAgIC8vIFUrMUYzRkQgLSBFTU9KSSBNT0RJRklFUiBGSVRaUEFUUklDSyBUWVBFLTQK
LSAgICAvLyBVKzFGM0ZFIC0gRU1PSkkgTU9ESUZJRVIgRklUWlBBVFJJQ0sgVFlQRS01Ci0gICAg
Ly8gVSsxRjNGRiAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRSSUNLIFRZUEUtNgotCi0gICAgcmV0
dXJuIGNoYXJhY3RlciA+PSAweDFGM0ZCICYmIGNoYXJhY3RlciA8PSAweDFGM0ZGOwotfQotCi1p
bmxpbmUgYm9vbCBpc1ZhcmlhdGlvblNlbGVjdG9yKFVDaGFyMzIgY2hhcmFjdGVyKQotewotICAg
IHJldHVybiBjaGFyYWN0ZXIgPj0gMHhGRTAwICYmIGNoYXJhY3RlciA8PSAweEZFMEY7Ci19Ci0K
LWlubGluZSBib29sIGlzRW1vamlLZXljYXBCYXNlKFVDaGFyMzIgY2hhcmFjdGVyKQotewotICAg
IHJldHVybiAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzknKSB8fCBjaGFyYWN0
ZXIgPT0gJyMnIHx8IGNoYXJhY3RlciA9PSAnKic7Ci19Ci0KLWlubGluZSBib29sIGlzRW1vamlS
ZWdpb25hbEluZGljYXRvcihVQ2hhcjMyIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFj
dGVyID49IDB4MUYxRTYgJiYgY2hhcmFjdGVyIDw9IDB4MUYxRkY7Ci19Ci0KLWlubGluZSBib29s
IGlzRW1vamlXaXRoUHJlc2VudGF0aW9uQnlEZWZhdWx0KFVDaGFyMzIgY2hhcmFjdGVyKQotewot
ICAgIHJldHVybiB1X2hhc0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfRU1PSklfUFJF
U0VOVEFUSU9OKTsKLX0KLQotaW5saW5lIGJvb2wgaXNFbW9qaU1vZGlmaWVyQmFzZShVQ2hhcjMy
IGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gdV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIs
IFVDSEFSX0VNT0pJX01PRElGSUVSX0JBU0UpOwotfQotCi1pbmxpbmUgYm9vbCBpc0RlZmF1bHRJ
Z25vcmFibGVDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIHVfaGFz
QmluYXJ5UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BP
SU5UKTsKLX0KLQotaW5saW5lIGJvb2wgaXNDb250cm9sQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFj
dGVyKQotewotICAgIHJldHVybiB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFjdGVyLCBVQ0hB
Ul9HRU5FUkFMX0NBVEVHT1JZKSA9PSBVX0NPTlRST0xfQ0hBUjsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDNhMThiY2VhMDE3OTYzMGI5MGVlZGM2MjY0MmIzZGE3N2UwYjE2
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCi0KLSNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9J
TlBVVF9UWVBFUykKLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBsb3dlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0g
PSB7Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZCwgLy8gYQotICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBiCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUxvY2FsRGF5T2ZXZWVrU3RhbmRBbG9uLCAvLyBjCi0gICAgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZURheU9mTW9udGgsIC8vIGQKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
TG9jYWxEYXlPZldlZWssIC8vIGUKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxp
ZCwgLy8gZgotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb2RpZmllZEp1bGlhbkRheSwg
Ly8gZwotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTIsIC8vIGgKLSAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gaQotICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVJbnZhbGlkLCAvLyBqCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIy
NCwgLy8gawotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBsCi0gICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZSwgLy8gbQotICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBuCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIG8KLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gcAot
ICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lLCAvLyBxCi0gICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHIKLSAgICBEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlU2Vjb25kLCAvLyBzCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIHQKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXh0ZW5kZWRZZWFyLCAv
LyB1Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU5vbkxvY2F0aW9uWm9uZSwgLy8gdgot
ICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZZZWFyLCAvLyB3Ci0gICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHgKLSAgICBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlWWVhciwgLy8geQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVab25lLCAvLyB6
Ci19OwotCi1zdGF0aWMgY29uc3QgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSB1cHBlckNhc2VU
b0ZpZWxkVHlwZU1hcFsyNl0gPSB7Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxp
c2Vjb25kc0luRGF5LCAvLyBBCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IC8vIEIKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gQwotICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZlllYXIsIC8vIEQKLSAgICBEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlRGF5T2ZXZWVrLCAvLyBFCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZURheU9mV2Vla0luTW9udGgsIC8vIEYKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXJh
LCAvLyBHCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMywgLy8gSAotICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBJCi0gICAgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUludmFsaWQsIC8vIEoKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91
cjExLCAvLyBLCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSwg
Ly8gTAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCwgLy8gTQotICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBOCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUludmFsaWQsIC8vIE8KLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxp
ZCwgLy8gUAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXIsIC8vIFEKLSAgICBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gUgotICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kLCAvLyBTCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUludmFsaWQsIC8vIFQKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxp
ZCwgLy8gVQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBWCi0gICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtPZk1vbnRoLCAvLyBXCi0gICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIFgKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlWWVhck9mV2Vla09mWWVhciwgLy8gWQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVS
RkM4MjJab25lLCAvLyBaCi19OwotCi1zdGF0aWMgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBt
YXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjb25zdCBVQ2hhciBjaCkKLXsKLSAgICBpZiAoaXNBU0NJ
SVVwcGVyKGNoKSkKLSAgICAgICAgcmV0dXJuIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwW2NoIC0g
J0EnXTsKLQotICAgIGlmIChpc0FTQ0lJTG93ZXIoY2gpKQotICAgICAgICByZXR1cm4gbG93ZXJD
YXNlVG9GaWVsZFR5cGVNYXBbY2ggLSAnYSddOwotCi0gICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVMaXRlcmFsOwotfQotCi1ib29sIERhdGVUaW1lRm9ybWF0OjpwYXJzZShjb25z
dCBTdHJpbmcmIHNvdXJjZSwgVG9rZW5IYW5kbGVyJiB0b2tlbkhhbmRsZXIpCi17Ci0gICAgZW51
bSBTdGF0ZSB7Ci0gICAgICAgIFN0YXRlSW5RdW90ZSwKLSAgICAgICAgU3RhdGVJblF1b3RlUXVv
dGUsCi0gICAgICAgIFN0YXRlTGl0ZXJhbCwKLSAgICAgICAgU3RhdGVRdW90ZSwKLSAgICAgICAg
U3RhdGVTeW1ib2wsCi0gICAgfSBzdGF0ZSA9IFN0YXRlTGl0ZXJhbDsKLQotICAgIEZpZWxkVHlw
ZSBmaWVsZFR5cGUgPSBGaWVsZFR5cGVMaXRlcmFsOwotICAgIFN0cmluZ0J1aWxkZXIgbGl0ZXJh
bEJ1ZmZlcjsKLSAgICBpbnQgZmllbGRDb3VudGVyID0gMDsKLQotICAgIGZvciAodW5zaWduZWQg
aW50IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2UubGVuZ3RoKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgY29uc3QgVUNoYXIgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICBzd2l0Y2ggKHN0YXRl
KSB7Ci0gICAgICAgIGNhc2UgU3RhdGVJblF1b3RlOgotICAgICAgICAgICAgaWYgKGNoID09ICdc
JycpIHsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlSW5RdW90ZVF1b3RlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaXRlcmFsQnVm
ZmVyLmFwcGVuZChjaCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0YXRl
SW5RdW90ZVF1b3RlOgotICAgICAgICAgICAgaWYgKGNoID09ICdcJycpIHsKLSAgICAgICAgICAg
ICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZCgnXCcnKTsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlSW5RdW90ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZmllbGRUeXBlID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gpOwotICAg
ICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVJbnZhbGlkKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5
cGVMaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwot
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5n
dGgoKSkgewotICAgICAgICAgICAgICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJh
bEJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmNsZWFy
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7Ci0gICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlU3ltYm9sOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBTdGF0ZUxpdGVyYWw6Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykgewotICAg
ICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVRdW90ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmllbGRUeXBlID0gbWFwQ2hhcmFjdGVyVG9G
aWVsZFR5cGUoY2gpOwotICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVJbnZh
bGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGZp
ZWxkVHlwZSA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgbGl0ZXJhbEJ1
ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkgewotICAgICAgICAgICAg
ICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsK
LSAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7Ci0gICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
U3ltYm9sOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdGF0ZVF1b3RlOgot
ICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAgICAgc3RhdGUg
PSBjaCA9PSAnXCcnID8gU3RhdGVMaXRlcmFsIDogU3RhdGVJblF1b3RlOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdGF0ZVN5bWJvbDogewotICAgICAgICAgICAgQVNTRVJU
KGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKLSAgICAgICAgICAgIEFTU0VSVChmaWVs
ZFR5cGUgIT0gRmllbGRUeXBlTGl0ZXJhbCk7Ci0gICAgICAgICAgICBBU1NFUlQobGl0ZXJhbEJ1
ZmZlci5pc0VtcHR5KCkpOwotCi0gICAgICAgICAgICBGaWVsZFR5cGUgZmllbGRUeXBlMiA9IG1h
cENoYXJhY3RlclRvRmllbGRUeXBlKGNoKTsKLSAgICAgICAgICAgIGlmIChmaWVsZFR5cGUyID09
IEZpZWxkVHlwZUludmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBpZiAoZmllbGRUeXBlID09IGZpZWxkVHlwZTIpIHsKLSAgICAgICAgICAgICAgICAr
K2ZpZWxkQ291bnRlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0RmllbGQoZmllbGRUeXBlLCBmaWVsZENvdW50
ZXIpOwotCi0gICAgICAgICAgICBpZiAoZmllbGRUeXBlMiA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICdcJycpCi0gICAgICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVRdW90ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAgICAgICAgICAgICBzdGF0
ZSA9IFN0YXRlTGl0ZXJhbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7Ci0gICAg
ICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZFR5cGUyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gRmllbGRU
eXBlSW52YWxpZCk7Ci0KLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBTdGF0ZUxpdGVy
YWw6Ci0gICAgY2FzZSBTdGF0ZUluUXVvdGVRdW90ZToKLSAgICAgICAgaWYgKGxpdGVyYWxCdWZm
ZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRMaXRlcmFsKGxpdGVy
YWxCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBT
dGF0ZVF1b3RlOgotICAgIGNhc2UgU3RhdGVJblF1b3RlOgotICAgICAgICBpZiAobGl0ZXJhbEJ1
ZmZlci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0
ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2Fz
ZSBTdGF0ZVN5bWJvbDoKLSAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRl
cmFsKTsKLSAgICAgICAgQVNTRVJUKCFsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKTsKLSAgICAgICAg
dG9rZW5IYW5kbGVyLnZpc2l0RmllbGQoZmllbGRUeXBlLCBmaWVsZENvdW50ZXIpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGlzQVNDSUlBbHBoYWJldE9yUXVvdGUoVUNo
YXIgY2gpCi17Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjaCkgfHwgY2ggPT0gJ1wnJzsKLX0K
LQotdm9pZCBEYXRlVGltZUZvcm1hdDo6cXVvdGVBbmRBcHBlbmRMaXRlcmFsKGNvbnN0IFN0cmlu
ZyYgbGl0ZXJhbCwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQotewotICAgIGlmIChsaXRlcmFsLmxl
bmd0aCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsaXRlcmFsLmZpbmQoaXNB
U0NJSUFscGhhYmV0T3JRdW90ZSkgPT0gbm90Rm91bmQpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVu
ZChsaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChsaXRlcmFsLmZp
bmQoJ1wnJykgPT0gbm90Rm91bmQpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnXCcnLCBsaXRl
cmFsLCAnXCcnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXRlcmFsLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGxpdGVyYWxb
aV0gPT0gJ1wnJykKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIicnIik7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnXCcnLCBTdHJpbmcgeyBsaXRlcmFsLnN1
YnN0cmluZyhpKSB9LnJlcGxhY2UoJ1wnJywgIicnIiksICdcJycpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZv
cm1hdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzcyNmRmZmJlMWYzZTE5ZDdhODMxZDc3MDc2
OTNlMTVjNjU2NjdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQuaAorKysgL2Rl
di9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRl
VGltZUZvcm1hdF9oCi0jZGVmaW5lIERhdGVUaW1lRm9ybWF0X2gKLQotI2lmIEVOQUJMRShEQVRF
X0FORF9USU1FX0lOUFVUX1RZUEVTKQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gRGF0ZVRpbWVGb3JtYXQgcGFyc2VzIGRhdGUgdGltZSBmb3Jt
YXQgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbAotLy8gc3RhbmRhcmQgMzUsIExvY2FsZSBE
YXRhIE1hcmt1cCBMYW5ndWFnZSAoTERNTClbMV0uCi0vLyBbMV0gTERNTCBodHRwOi8vdW5pY29k
ZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5zCi1jbGFz
cyBEYXRlVGltZUZvcm1hdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBGaWVsZFR5cGUgewotICAgICAg
ICBGaWVsZFR5cGVJbnZhbGlkLAotICAgICAgICBGaWVsZFR5cGVMaXRlcmFsLAotCi0gICAgICAg
IC8vIEVyYTogQUQKLSAgICAgICAgRmllbGRUeXBlRXJhID0gJ0cnLAotCi0gICAgICAgIC8vIFll
YXI6IDE5OTYKLSAgICAgICAgRmllbGRUeXBlWWVhciA9ICd5JywKLSAgICAgICAgRmllbGRUeXBl
WWVhck9mV2Vla09mWWVhciA9ICdZJywKLSAgICAgICAgRmllbGRUeXBlRXh0ZW5kZWRZZWFyID0g
J3UnLAotCi0gICAgICAgIC8vIFF1YXRlcjogUTIKLSAgICAgICAgRmllbGRUeXBlUXVhdGVyID0g
J1EnLAotICAgICAgICBGaWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lID0gJ3EnLAotCi0gICAgICAg
IC8vIE1vbnRoOiBTZXB0ZW1iZXIKLSAgICAgICAgRmllbGRUeXBlTW9udGggPSAnTScsCi0gICAg
ICAgIEZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSA9ICdMJywKLQotICAgICAgICAvLyBXZWVrOiA0
MgotICAgICAgICBGaWVsZFR5cGVXZWVrT2ZZZWFyID0gJ3cnLAotICAgICAgICBGaWVsZFR5cGVX
ZWVrT2ZNb250aCA9ICdXJywKLQotICAgICAgICAvLyBEYXk6IDEyCi0gICAgICAgIEZpZWxkVHlw
ZURheU9mTW9udGggPSAnZCcsCi0gICAgICAgIEZpZWxkVHlwZURheU9mWWVhciA9ICdEJywKLSAg
ICAgICAgRmllbGRUeXBlRGF5T2ZXZWVrSW5Nb250aCA9ICdGJywKLSAgICAgICAgRmllbGRUeXBl
TW9kaWZpZWRKdWxpYW5EYXkgPSAnZycsCi0KLSAgICAgICAgLy8gV2VlayBEYXk6IFR1ZXNkYXkK
LSAgICAgICAgRmllbGRUeXBlRGF5T2ZXZWVrID0gJ0UnLAotICAgICAgICBGaWVsZFR5cGVMb2Nh
bERheU9mV2VlayA9ICdlJywKLSAgICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFs
b24gPSAnYycsCi0KLSAgICAgICAgLy8gUGVyaW9kOiBBTSBvciBQTQotICAgICAgICBGaWVsZFR5
cGVQZXJpb2QgPSAnYScsCi0KLSAgICAgICAgLy8gSG91cjogNwotICAgICAgICBGaWVsZFR5cGVI
b3VyMTIgPSAnaCcsCi0gICAgICAgIEZpZWxkVHlwZUhvdXIyMyA9ICdIJywKLSAgICAgICAgRmll
bGRUeXBlSG91cjExID0gJ0snLAotICAgICAgICBGaWVsZFR5cGVIb3VyMjQgPSAnaycsCi0KLSAg
ICAgICAgLy8gTWludXRlOiA1OQotICAgICAgICBGaWVsZFR5cGVNaW51dGUgPSAnbScsCi0KLSAg
ICAgICAgLy8gU2Vjb25kOiAxMgotICAgICAgICBGaWVsZFR5cGVTZWNvbmQgPSAncycsCi0gICAg
ICAgIEZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQgPSAnUycsCi0gICAgICAgIEZpZWxkVHlwZU1p
bGxpc2Vjb25kc0luRGF5ID0gJ0EnLAotCi0gICAgICAgIC8vIFpvbmU6IFBEVAotICAgICAgICBG
aWVsZFR5cGVab25lID0gJ3onLAotICAgICAgICBGaWVsZFR5cGVSRkM4MjJab25lID0gJ1onLAot
ICAgICAgICBGaWVsZFR5cGVOb25Mb2NhdGlvblpvbmUgPSAndicsCi0gICAgfTsKLQotICAgIGNs
YXNzIFRva2VuSGFuZGxlciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5Ub2tlbkhh
bmRsZXIoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxkKEZpZWxk
VHlwZSwgaW50IG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgfTsKLQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIGZhaWxlZC4KLSAgICBzdGF0aWMg
Ym9vbCBwYXJzZShjb25zdCBTdHJpbmcmLCBUb2tlbkhhbmRsZXImKTsKLSAgICBzdGF0aWMgdm9p
ZCBxdW90ZUFuZEFwcGVuZExpdGVyYWwoY29uc3QgU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYpOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLSNlbmRpZiAvLyBEYXRlVGlt
ZUZvcm1hdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0ZvbnRS
ZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0ZvbnRSZW5kZXJp
bmdNb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMGFiYTRlODkyYjNjOTk2
ZjYxMWNjM2RiZjI3NWQzYTExODdjYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Gb250UmVuZGVyaW5n
TW9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBUaGlzIHNldHRpbmcgaXMgdXNlZCB0byBwcm92aWRlIHdheXMgb2Ygc3dpdGNo
aW5nIGJldHdlZW4gbXVsdGlwbGUgcmVuZGVyaW5nIG1vZGVzIHRoYXQgbWF5IGhhdmUgZGlmZmVy
ZW50Ci0vLyBtZXRyaWNzLiBJdCBpcyB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkg
dGV4dCBvbiBXaW5kb3dzLgotZW51bSBjbGFzcyBGb250UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3Qg
ewotICAgIE5vcm1hbCwKLSAgICBBbHRlcm5hdGUKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFJlbmRlcmluZ01v
ZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpG
b250UmVuZGVyaW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmluZ01vZGU6Ok5v
cm1hbCwKLSAgICAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZQotICAg
ID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvSHlwaGVuYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVkMWU1OWE5
NGUzZDIyMzJlMWI3OGJmN2NmZjY0ZDA2MTQ0NDllNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0h5cGhl
bmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBIeXBoZW5hdGlvbl9oCi0jZGVmaW5lIEh5cGhlbmF0aW9uX2gKLQotI2luY2x1ZGUgPHVu
aWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1pbmxpbmUgc3RhdGljIGJvb2wgZW5vdWdoV2lkdGhGb3JIeXBoZW5hdGlvbihm
bG9hdCBhdmFpbGFibGVXaWR0aCwgZmxvYXQgZm9udFBpeGVsU2l6ZSkKLXsKLSAgICAvLyBJZiB0
aGUgbWF4aW11bSB3aWR0aCBhdmFpbGFibGUgZm9yIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBoeXBo
ZW4gaXMgc21hbGwsIHRoZW4gaXQgaXMgdmVyeSB1bmxpa2VseQotICAgIC8vIHRoYXQgYW4gaHlw
aGVuYXRpb24gb3Bwb3J0dW5pdHkgZXhpc3RzLCBzbyBkbyBub3QgYm90aGVyIHRvIGxvb2sgZm9y
IGl0LgotICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCA+IGZvbnRQaXhlbFNpemUgKiA1IC8gNDsK
LQotfQotYm9vbCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmll
cik7Ci1zaXplX3QgbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXcsIHNpemVfdCBiZWZvcmVJ
bmRleCwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEh5cGhlbmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKaW5kZXggZjQ3MjAwYjU3MjE2OGQ0
ZWVmYWE3NGU5MDc1NzFhZDVjOTJhYjAxOS4uYTc3Y2ZjN2UyOWEyNGZhZDVhY2QyZGIwOTdkYmQw
MjIyMDgyY2Y1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybUxvY2FsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9y
bUxvY2FsZS5jcHAKQEAgLTMyLDE1ICszMiwxNSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTG9jYWxl
LmgiCiAKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgotI2luY2x1ZGUgIkRhdGVUaW1lRm9y
bWF0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0
L0RhdGVUaW1lRm9ybWF0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9U
WVBFUykKIAotY2xhc3MgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyIDogcHJpdmF0ZSBEYXRlVGltZUZv
cm1hdDo6VG9rZW5IYW5kbGVyIHsKK2NsYXNzIERhdGVUaW1lU3RyaW5nQnVpbGRlciA6IHByaXZh
dGUgUEFMOjpEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRlVGltZVN0cmluZ0J1aWxkZXIpOwogCiBwdWJsaWM6CkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5k
bGVyIGZ1bmN0aW9ucy4KLSAgICB2b2lkIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSwgaW50KSBmaW5hbDsKKyAgICB2b2lkIHZpc2l0RmllbGQoUEFMOjpEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlLCBpbnQpIGZpbmFsOwogICAgIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0
cmluZyYpIGZpbmFsOwogCiAgICAgU3RyaW5nIHplcm9QYWRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
c2l6ZV90IHdpZHRoKTsKQEAgLTcyLDcgKzcyLDcgQEAgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyOjpE
YXRlVGltZVN0cmluZ0J1aWxkZXIoTG9jYWxlJiBsb2NhbGl6ZXIsIGNvbnN0IERhdGVDb21wb24K
IGJvb2wgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyOjpidWlsZChjb25zdCBTdHJpbmcmIGZvcm1hdFN0
cmluZykKIHsKICAgICBtX2J1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGZvcm1hdFN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0
aGlzKTsKKyAgICByZXR1cm4gUEFMOjpEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5n
LCAqdGhpcyk7CiB9CiAKIFN0cmluZyBEYXRlVGltZVN0cmluZ0J1aWxkZXI6Onplcm9QYWRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCB3aWR0aCkKQEAgLTkzLDE0ICs5MywxNCBA
QCB2b2lkIERhdGVUaW1lU3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVyKGludCBudW1iZXIsIHNp
emVfdCB3aWR0aCkKICAgICBtX2J1aWxkZXIuYXBwZW5kKG1fbG9jYWxpemVyLmNvbnZlcnRUb0xv
Y2FsaXplZE51bWJlcih6ZXJvUGFkZGVkTnVtYmVyU3RyaW5nKSk7CiB9CiAKLXZvaWQgRGF0ZVRp
bWVTdHJpbmdCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmll
bGRUeXBlLCBpbnQgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycykKK3ZvaWQgRGF0ZVRpbWVTdHJp
bmdCdWlsZGVyOjp2aXNpdEZpZWxkKFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVs
ZFR5cGUsIGludCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzKQogewogICAgIHN3aXRjaCAoZmll
bGRUeXBlKSB7Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjoKKyAgICBj
YXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXI6CiAgICAgICAgIC8vIEFsd2F5
cyB1c2UgcGFkZGluZyB3aWR0aCBvZiA0IHNvIGl0IG1hdGNoZXMgRGF0ZVRpbWVFZGl0RWxlbWVu
dC4KICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5mdWxsWWVhcigpLCA0KTsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoOgorICAgIGNh
c2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGg6CiAgICAgICAgIGlmIChudW1i
ZXJPZlBhdHRlcm5DaGFyYWN0ZXJzID09IDMpCiAgICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KG1fbG9jYWxpemVyLnNob3J0TW9udGhMYWJlbHMoKVttX2RhdGUubW9udGgoKV0pOwogICAgICAg
ICBlbHNlIGlmIChudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzID09IDQpCkBAIC0xMTAsNyArMTEw
LDcgQEAgdm9pZCBEYXRlVGltZVN0cmluZ0J1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludAogICAgICAgICAgICAgYXBwZW5kTnVtYmVyKG1f
ZGF0ZS5tb250aCgpICsgMSwgMik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZToKKyAgICBjYXNlIFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZToKICAgICAgICAgaWYg
KG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMgPT0gMykKICAgICAgICAgICAgIG1fYnVpbGRlci5h
cHBlbmQobV9sb2NhbGl6ZXIuc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKVttX2RhdGUubW9u
dGgoKV0pOwogICAgICAgICBlbHNlIGlmIChudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzID09IDQp
CkBAIC0xMjAsNDEgKzEyMCw0MSBAQCB2b2lkIERhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRG
aWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50CiAgICAgICAgICAg
ICBhcHBlbmROdW1iZXIobV9kYXRlLm1vbnRoKCkgKyAxLCAyKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aDoK
KyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9udGg6CiAgICAg
ICAgIC8vIEFsd2F5cyB1c2UgcGFkZGluZyB3aWR0aCBvZiAyIHNvIGl0IG1hdGNoZXMgRGF0ZVRp
bWVFZGl0RWxlbWVudC4KICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5tb250aERheSgpLCAy
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdl
ZWtPZlllYXI6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZZ
ZWFyOgogICAgICAgICAvLyBBbHdheXMgdXNlIHBhZGRpbmcgd2lkdGggb2YgMiBzbyBpdCBtYXRj
aGVzIERhdGVUaW1lRWRpdEVsZW1lbnQuCiAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUud2Vl
aygpLCAyKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVBlcmlvZDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlv
ZDoKICAgICAgICAgbV9idWlsZGVyLmFwcGVuZChtX2xvY2FsaXplci50aW1lQU1QTUxhYmVscygp
WyhtX2RhdGUuaG91cigpID49IDEyID8gMSA6IDApXSk7CiAgICAgICAgIHJldHVybjsKLSAgICBj
YXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTI6IHsKKyAgICBjYXNlIFBBTDo6RGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjogewogICAgICAgICBpbnQgaG91cjEyID0gbV9k
YXRlLmhvdXIoKSAlIDEyOwogICAgICAgICBpZiAoIWhvdXIxMikKICAgICAgICAgICAgIGhvdXIx
MiA9IDEyOwogICAgICAgICBhcHBlbmROdW1iZXIoaG91cjEyLCBudW1iZXJPZlBhdHRlcm5DaGFy
YWN0ZXJzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVIb3VyMjM6CiAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUuaG91cigpLCBudW1iZXJPZlBh
dHRlcm5DaGFyYWN0ZXJzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUhvdXIxMToKICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5ob3VyKCkgJSAxMiwgbnVt
YmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycyk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIyNDogewogICAgICAgICBpbnQgaG91cjI0ID0gbV9kYXRlLmhvdXIo
KTsKICAgICAgICAgaWYgKCFob3VyMjQpCiAgICAgICAgICAgICBob3VyMjQgPSAyNDsKICAgICAg
ICAgYXBwZW5kTnVtYmVyKGhvdXIyNCwgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWludXRlOgogICAg
ICAgICBhcHBlbmROdW1iZXIobV9kYXRlLm1pbnV0ZSgpLCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0
ZXJzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZVNlY29uZDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoK
ICAgICAgICAgaWYgKCFtX2RhdGUubWlsbGlzZWNvbmQoKSkKICAgICAgICAgICAgIGFwcGVuZE51
bWJlcihtX2RhdGUuc2Vjb25kKCksIG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMpOwogICAgICAg
ICBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVk
UHJpbnRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRh
YmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlMzYxNDcxOTcxZDEyNmYw
MmJjNzNhZDJiNTA1N2Q5ZDMxZjVhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJRdW90ZWRQcmludGFibGUuaCIKLQotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSA3NjsKLQotc3RhdGljIGNvbnN0
IGNoYXIgY3JsZkxpbmVFbmRpbmdbXSA9ICJcclxuIjsKLQotc3RhdGljIHNpemVfdCBsZW5ndGhP
ZkxpbmVFbmRpbmdBdEluZGV4KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5n
dGgsIHNpemVfdCBpbmRleCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpbmRleCA8IGlucHV0TGVuZ3RoKTsKLSAgICBpZiAoaW5wdXRbaW5kZXhdID09ICdcbicpCi0g
ICAgICAgIHJldHVybiAxOyAvLyBTaW5nbGUgTEYuCi0KLSAgICBpZiAoaW5wdXRbaW5kZXhdID09
ICdccicpIHsKLSAgICAgICAgaWYgKChpbmRleCArIDEpID09IGlucHV0TGVuZ3RoIHx8IGlucHV0
W2luZGV4ICsgMV0gIT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiAxOyAvLyBTaW5nbGUgQ1Ig
KENsYXNzaWMgTWFjIE9TKS4KLSAgICAgICAgcmV0dXJuIDI7IC8vIENSLUxGLgotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCi17Ci0gICAgcmV0dXJuIHF1b3RlZFByaW50
YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7Ci19Ci0KLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBp
bnB1dExlbmd0aCkKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gb3V0OwotICAgIG91dC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGlucHV0TGVuZ3RoKTsKLSAgICBzaXplX3QgY3VycmVudExpbmVMZW5n
dGggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7ICsraSkgewot
ICAgICAgICBib29sIGlzTGFzdENoYXJhY3RlciA9IChpID09IGlucHV0TGVuZ3RoIC0gMSk7Ci0g
ICAgICAgIHVpbnQ4X3QgY3VycmVudENoYXJhY3RlciA9IGlucHV0W2ldOwotICAgICAgICBib29s
IHJlcXVpcmVzRW5jb2RpbmcgPSBmYWxzZTsKLSAgICAgICAgLy8gQWxsIG5vbi1wcmludGFibGUg
QVNDSUkgY2hhcmFjdGVycyBhbmQgPSByZXF1aXJlIGVuY29kaW5nLgotICAgICAgICBpZiAoKGN1
cnJlbnRDaGFyYWN0ZXIgPCAnICcgfHwgY3VycmVudENoYXJhY3RlciA+ICd+JyB8fCBjdXJyZW50
Q2hhcmFjdGVyID09ICc9JykgJiYgY3VycmVudENoYXJhY3RlciAhPSAnXHQnKQotICAgICAgICAg
ICAgcmVxdWlyZXNFbmNvZGluZyA9IHRydWU7Ci0KLSAgICAgICAgLy8gU3BhY2UgYW5kIHRhYiBj
aGFyYWN0ZXJzIGhhdmUgdG8gYmUgZW5jb2RlZCBpZiB0aGV5IGFwcGVhciBhdCB0aGUgZW5kIG9m
IGEgbGluZS4KLSAgICAgICAgaWYgKCFyZXF1aXJlc0VuY29kaW5nICYmIChjdXJyZW50Q2hhcmFj
dGVyID09ICdcdCcgfHwgY3VycmVudENoYXJhY3RlciA9PSAnICcpICYmIChpc0xhc3RDaGFyYWN0
ZXIgfHwgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleChpbnB1dCwgaW5wdXRMZW5ndGgsIGkgKyAx
KSkpCi0gICAgICAgICAgICByZXF1aXJlc0VuY29kaW5nID0gdHJ1ZTsKLQotICAgICAgICAvLyBF
bmQgb2YgbGluZSBzaG91bGQgYmUgY29udmVydGVkIHRvIENSLUxGIHNlcXVlbmNlcy4KLSAgICAg
ICAgaWYgKCFpc0xhc3RDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGhPZkxp
bmVFbmRpbmcgPSBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGlucHV0LCBpbnB1dExlbmd0aCwg
aSk7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoT2ZMaW5lRW5kaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgb3V0LmFwcGVuZChjcmxmTGluZUVuZGluZywgc3RybGVuKGNybGZMaW5lRW5kaW5nKSk7Ci0g
ICAgICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGggPSAwOwotICAgICAgICAgICAgICAgIGkg
Kz0gKGxlbmd0aE9mTGluZUVuZGluZyAtIDEpOyAvLyAtMSBiZWNhdXNlIHdlJ2xsICsrIGluIHRo
ZSBmb3IoKSBhYm92ZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHNpemVfdCBsZW5ndGhPZkVuY29kZWRDaGFyYWN0ZXIgPSAx
OwotICAgICAgICBpZiAocmVxdWlyZXNFbmNvZGluZykKLSAgICAgICAgICAgIGxlbmd0aE9mRW5j
b2RlZENoYXJhY3RlciArPSAyOwotICAgICAgICBpZiAoIWlzTGFzdENoYXJhY3RlcikKLSAgICAg
ICAgICAgIGxlbmd0aE9mRW5jb2RlZENoYXJhY3RlciArPSAxOyAvLyArIDEgZm9yIHRoZSA9IChz
b2Z0IGxpbmUgYnJlYWspLgotCi0gICAgICAgIC8vIEluc2VydCBhIHNvZnQgbGluZSBicmVhayBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChjdXJyZW50TGluZUxlbmd0aCArIGxlbmd0aE9mRW5j
b2RlZENoYXJhY3RlciA+IG1heGltdW1MaW5lTGVuZ3RoKSB7Ci0gICAgICAgICAgICBvdXQuYXBw
ZW5kKCc9Jyk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGNybGZMaW5lRW5kaW5nLCBzdHJsZW4o
Y3JsZkxpbmVFbmRpbmcpKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoID0gMDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEZpbmFsbHksIGluc2VydCB0aGUgYWN0dWFsIGNoYXJhY3Rl
cihzKS4KLSAgICAgICAgaWYgKHJlcXVpcmVzRW5jb2RpbmcpIHsKLSAgICAgICAgICAgIG91dC5h
cHBlbmQoJz0nKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4
RGlnaXQoY3VycmVudENoYXJhY3RlcikpOwotICAgICAgICAgICAgb3V0LmFwcGVuZChsb3dlck5p
YmJsZVRvQVNDSUlIZXhEaWdpdChjdXJyZW50Q2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBjdXJy
ZW50TGluZUxlbmd0aCArPSAzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0LmFw
cGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoKys7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3V0OwotfQotCi1WZWN0b3I8dWludDhf
dD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCi17
Ci0gICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IG91dDsKLSAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVybiBvdXQ7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkgewotICAgICAgICBjaGFyIGN1
cnJlbnRDaGFyYWN0ZXIgPSBkYXRhW2ldOwotICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAh
PSAnPScpIHsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoY3VycmVudENoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBhcmUgZGVhbGluZyB3
aXRoIGEgJz14eCcgc2VxdWVuY2UuCi0gICAgICAgIGlmIChkYXRhTGVuZ3RoIC0gaSA8IDMpIHsK
LSAgICAgICAgICAgIC8vIFVuZmluaXNoZWQgPSBzZXF1ZW5jZSwgYXBwZW5kIGFzIGlzLgotICAg
ICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIGNoYXIgdXBwZXJDaGFyYWN0ZXIgPSBkYXRhWysraV07
Ci0gICAgICAgIGNoYXIgbG93ZXJDaGFyYWN0ZXIgPSBkYXRhWysraV07Ci0gICAgICAgIGlmICh1
cHBlckNoYXJhY3RlciA9PSAnXHInICYmIGxvd2VyQ2hhcmFjdGVyID09ICdcbicpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCh1cHBlckNoYXJh
Y3RlcikgfHwgIWlzQVNDSUlIZXhEaWdpdChsb3dlckNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IC8vIEludmFsaWQgc2VxdWVuY2UsID0gZm9sbG93ZWQgYnkgbm9uIGhleCBkaWdpdHMsIGp1c3Qg
aW5zZXJ0IHRoZSBjaGFyYWN0ZXJzIGFzIGlzLgotICAgICAgICAgICAgb3V0LmFwcGVuZCgnPScp
OwotICAgICAgICAgICAgb3V0LmFwcGVuZCh1cHBlckNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBv
dXQuYXBwZW5kKGxvd2VyQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIG91dC5hcHBlbmQodG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hhcmFjdGVyLCBs
b3dlckNoYXJhY3RlcikpOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjcyNzNiNWY0MjhjMjViYzgzMmUwN2VhNmE4OTE1NWQzOWU2Mjlh
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5j
b2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50
YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA4M2Vh
N2FmNzRjMjZjM2U0MTVjZTQ1ODYwYWI3ZThkMWRkZTg5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Nl
Z21lbnRlZFN0cmluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgot
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRQb3NpdGlvbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGluZSB2b2lkIFNl
Z21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjphcHBlbmRUbyhTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KSBjb25zdAotewotICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5nKHN0cmluZywgc3RyaW5nLmxl
bmd0aCgpIC0gbGVuZ3RoLCBsZW5ndGgpOwotfQotCi1TZWdtZW50ZWRTdHJpbmcmIFNlZ21lbnRl
ZFN0cmluZzo6b3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYmIG90aGVyKQotewotICAgIG1fY3Vy
cmVudFN1YnN0cmluZyA9IFdURk1vdmUob3RoZXIubV9jdXJyZW50U3Vic3RyaW5nKTsKLSAgICBt
X290aGVyU3Vic3RyaW5ncyA9IFdURk1vdmUob3RoZXIubV9vdGhlclN1YnN0cmluZ3MpOwotCi0g
ICAgbV9pc0Nsb3NlZCA9IG90aGVyLm1faXNDbG9zZWQ7Ci0KLSAgICBtX2N1cnJlbnRDaGFyYWN0
ZXIgPSBvdGhlci5tX2N1cnJlbnRDaGFyYWN0ZXI7Ci0KLSAgICBtX251bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgPSBvdGhlci5tX251bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmc7Ci0gICAgbV9udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7Ci0gICAgbV9jdXJyZW50TGluZSA9IG90aGVy
Lm1fY3VycmVudExpbmU7Ci0KLSAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBvdGhlci5tX2Zhc3RQYXRo
RmxhZ3M7Ci0gICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0g
b3RoZXIubV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uOwotICAgIG1f
YWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9IG90aGVyLm1fYWR2YW5jZUFuZFVw
ZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbjsKLQotICAgIG90aGVyLmNsZWFyKCk7Ci0KLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLXVuc2lnbmVkIFNlZ21lbnRlZFN0cmluZzo6bGVuZ3RoKCkgY29uc3QK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoOwotICAg
IGZvciAoYXV0byYgc3Vic3RyaW5nIDogbV9vdGhlclN1YnN0cmluZ3MpCi0gICAgICAgIGxlbmd0
aCArPSBzdWJzdHJpbmcubGVuZ3RoOwotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXZvaWQgU2Vn
bWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQotewotICAgIGlmICghbV9jdXJy
ZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7Ci0g
ICAgZm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3RyaW5ncykKLSAgICAgICAgc3Vi
c3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgdXBkYXRlQWR2YW5j
ZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmNsZWFyKCkK
LXsKLSAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsKLSAgICBtX290aGVyU3Vic3Ry
aW5ncy5jbGVhcigpOwotCi0gICAgbV9pc0Nsb3NlZCA9IGZhbHNlOwotCi0gICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gMDsKLQotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudFN1YnN0cmluZyA9IDA7Ci0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50TGluZSA9IDA7Ci0gICAgbV9jdXJyZW50TGluZSA9IDA7Ci0KLSAgICB1cGRh
dGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kU3Vic3RyaW5nKFN1YnN0cmluZyYmIHN1YnN0cmlu
ZykKLXsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOwotICAgIGlmICghc3Vic3RyaW5nLmxlbmd0
aCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKQot
ICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdWJzdHJpbmcpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJy
ZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpOwotICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcgPSBXVEZNb3ZlKHN1YnN0cmluZyk7
Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50
Q2hhcmFjdGVyKCk7Ci0gICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Ci0g
ICAgfQotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6cHVzaEJhY2soU3RyaW5nJiYgc3RyaW5n
KQotewotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBhIHN1YnN0cmluZyBmb3IgYW4gZW1wdHkgc3Ry
aW5nLgotICAgIEFTU0VSVChzdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgLy8gVGhlIG5ldyBzdWJz
dHJpbmcgd2Ugd2lsbCBjcmVhdGUgd29uJ3QgaGF2ZSB0aGUgZG9Ob3RFeGNsdWRlTGluZU51bWJl
cnMgc2V0IGFwcHJvcHJpYXRlbHkuCi0gICAgLy8gVGhhdCB3YXMgbG9zdCB3aGVuIHRoZSBjaGFy
YWN0ZXJzIHdlcmUgY29uc3VtZWQgYmVmb3JlIHB1c2hpbmcgdGhlbSBiYWNrLiBCdXQgdGhpcyBk
b2VzCi0gICAgLy8gbm90IG1hdHRlciwgYmVjYXVzZSBjbGllbnRzIG5ldmVyIHVzZSB0aGlzIGZv
ciBuZXdsaW5lcy4gQ2F0Y2ggdGhhdCB3aXRoIHRoaXMgYXNzZXJ0aW9uLgotICAgIEFTU0VSVCgh
c3RyaW5nLmNvbnRhaW5zKCdcbicpKTsKLQotICAgIC8vIFRoZSBjaGFyYWN0ZXJzIGluIHRoZSBz
dHJpbmcgbXVzdCBiZSBwcmV2aW91c2x5IGNvbnN1bWVkIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHNl
Z21lbnRlZCBzdHJpbmcuCi0gICAgQVNTRVJUKHN0cmluZy5sZW5ndGgoKSA8PSBudW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZCgpKTsKLQotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKTsKLSAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCkKLSAg
ICAgICAgbV9vdGhlclN1YnN0cmluZ3MucHJlcGVuZChXVEZNb3ZlKG1fY3VycmVudFN1YnN0cmlu
ZykpOwotICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUoc3RyaW5nKTsKLSAgICBtX251
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgLT0gbV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aDsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRT
dWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOwotICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBv
aW50ZXJzKCk7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjpjbG9zZSgpCi17Ci0gICAgQVNT
RVJUKCFtX2lzQ2xvc2VkKTsKLSAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBTZWdt
ZW50ZWRTdHJpbmc6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nIHsgc3RyaW5nLm1fY3VycmVudFN1YnN0cmluZyB9
KTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290aGVyU3Vic3RyaW5ncykK
LSAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKHN1YnN0cmluZyk7Ci19Ci0KLXZvaWQg
U2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQotewotICAg
IGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZy5tX2N1cnJlbnRTdWJzdHJpbmcpKTsKLSAg
ICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290aGVyU3Vic3RyaW5ncykKLSAgICAg
ICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKFdURk1vdmUoc3Vic3RyaW5nKSk7Ci19Ci0KLXZv
aWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGFwcGVu
ZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6
YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGFwcGVuZFN1YnN0cmluZyhTdHJp
bmcgeyBzdHJpbmcgfSk7Ci19Ci0KLVN0cmluZyBTZWdtZW50ZWRTdHJpbmc6OnRvU3RyaW5nKCkg
Y29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBtX2N1cnJlbnRTdWJzdHJp
bmcuYXBwZW5kVG8ocmVzdWx0KTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IG1fb3RoZXJT
dWJzdHJpbmdzKQotICAgICAgICBzdWJzdHJpbmcuYXBwZW5kVG8ocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNl
V2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCkKLXsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIg
PSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2OwotICAgIGRlY3JlbWVu
dEFuZENoZWNrTGVuZ3RoKCk7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlQW5k
VXBkYXRlTGluZU51bWJlcjE2KCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzKTsKLSAgICBwcm9jZXNzUG9zc2libGVOZXdsaW5lKCk7Ci0g
ICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFy
YWN0ZXIxNjsKLSAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpOwotfQotCi1pbmxpbmUgdm9p
ZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0
aG91dFVwZGF0aW5nTGluZU51bWJlcigpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmlu
Zy5sZW5ndGggPT0gMSk7Ci0gICAgaWYgKG1fb3RoZXJTdWJzdHJpbmdzLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsKLSAgICAgICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gMDsKLSAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JF
bXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRTdWJzdHJp
bmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKLSAgICBtX2N1cnJlbnRTdWJzdHJpbmcg
PSBtX290aGVyU3Vic3RyaW5ncy50YWtlRmlyc3QoKTsKLSAgICAvLyBJZiB3ZSd2ZSBwcmV2aW91
c2x5IGNvbnN1bWVkIHNvbWUgY2hhcmFjdGVycyBvZiB0aGUgbm9uLWN1cnJlbnQgc3RyaW5nLCB3
ZSBub3cgYWNjb3VudCBmb3IgdGhvc2UKLSAgICAvLyBjaGFyYWN0ZXJzIGFzIHBhcnQgb2YgdGhl
IGN1cnJlbnQgc3RyaW5nLCBub3QgYXMgcGFydCBvZiAicHJpb3IgdG8gY3VycmVudCBzdHJpbmcu
IgotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmlu
ZyAtPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKLSAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rl
cigpOwotICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Ci19Ci0KLXZvaWQgU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSk7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycyk7Ci0gICAgcHJvY2Vzc1Bv
c3NpYmxlTmV3bGluZSgpOwotICAgIGFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5n
V2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6
YWR2YW5jZUVtcHR5KCkKLXsKLSAgICBBU1NFUlQoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgp
OwotICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCgh
bV9jdXJyZW50Q2hhcmFjdGVyKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnVwZGF0ZUFk
dmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCkKLXsKLSAg
ICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxKTsKLSAgICBtX2Zhc3RQYXRo
RmxhZ3MgPSBOb0Zhc3RQYXRoOwotICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1i
ZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsKLSAgICBpZiAobV9jdXJyZW50U3Vi
c3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQotICAgICAgICBtX2FkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmds
ZUNoYXJhY3RlclN1YnN0cmluZzsKLSAgICBlbHNlCi0gICAgICAgIG1fYWR2YW5jZUFuZFVwZGF0
ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsKLX0KLQotT3JkaW5h
bE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2N1cnJlbnRMaW5lKTsKLX0KLQot
T3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRDb2x1bW4oKSBjb25zdAotewot
ICAgIHJldHVybiBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG51bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkKCkgLSBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRMaW5lKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEN1cnJlbnRQb3NpdGlvbihP
cmRpbmFsTnVtYmVyIGxpbmUsIE9yZGluYWxOdW1iZXIgY29sdW1uQWZ0cmVQcm9sb2csIGludCBw
cm9sb2dMZW5ndGgpCi17Ci0gICAgbV9jdXJyZW50TGluZSA9IGxpbmUuemVyb0Jhc2VkSW50KCk7
Ci0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG51
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgKyBwcm9sb2dMZW5ndGggLSBjb2x1bW5BZnRyZVBy
b2xvZy56ZXJvQmFzZWRJbnQoKTsKLX0KLQotU2VnbWVudGVkU3RyaW5nOjpBZHZhbmNlUGFzdFJl
c3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3QgY2hhciogbGl0
ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCi17Ci0gICAgY29uc3RleHByIHVu
c2lnbmVkIG1heExlbmd0aCA9IDEwOwotICAgIEFTU0VSVCghc3RyY2hyKGxpdGVyYWwsICdcbicp
KTsKLSAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihsaXRlcmFsKTsKLSAgICBBU1NFUlQobGVuZ3Ro
IDw9IG1heExlbmd0aCk7Ci0gICAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gTm90RW5vdWdoQ2hhcmFjdGVyczsKLSAgICBVQ2hhciBjb25zdW1lZENoYXJhY3Rl
cnNbbWF4TGVuZ3RoXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAg
IGlmIChjaGFyYWN0ZXJNaXNtYXRjaChjaGFyYWN0ZXIsIGxpdGVyYWxbaV0sIGxldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSkpIHsKLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIHB1
c2hCYWNrKFN0cmluZyB7IGNvbnN1bWVkQ2hhcmFjdGVycywgaSB9KTsKLSAgICAgICAgICAgIHJl
dHVybiBEaWROb3RNYXRjaDsKLSAgICAgICAgfQotICAgICAgICBhZHZhbmNlUGFzdE5vbk5ld2xp
bmUoKTsKLSAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzW2ldID0gY2hhcmFjdGVyOwotICAgIH0K
LSAgICByZXR1cm4gRGlkTWF0Y2g7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjp1cGRhdGVB
ZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCkKLXsKLSAgICBBU1NFUlQoIW1f
Y3VycmVudFN1YnN0cmluZy5sZW5ndGgpOwotICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFjdGVyKTsKLSAgICBtX2Zhc3RQ
YXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOwotICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVO
dW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eTsKLSAgICBtX2Fk
dmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlRW1wdHk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21l
bnRlZFN0cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTdmMTkxNDAzN2Qz
MzViZjk4ZTQ4ZTVkNmY5MzE5MzA5YzI2MGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVk
U3RyaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBzaG91
bGQgbm90IHN0YXJ0IHdpdGggImsiLgotLy8gRklYTUU6IFRoaXMgaXMgYSBzaGFyZWQgdG9rZW5p
emVyIGNvbmNlcHQsIG5vdCBhIFNlZ21lbnRlZFN0cmluZyBjb25jZXB0LCBidXQgdGhpcyBpcyB0
aGUgb25seSBjb21tb24gaGVhZGVyIGZvciBub3cuCi1jb25zdGV4cHIgTENoYXIga0VuZE9mRmls
ZU1hcmtlciA9IDA7Ci0KLWNsYXNzIFNlZ21lbnRlZFN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgU2Vn
bWVudGVkU3RyaW5nKCkgPSBkZWZhdWx0OwotICAgIFNlZ21lbnRlZFN0cmluZyhTdHJpbmcmJik7
Ci0gICAgU2VnbWVudGVkU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU2VnbWVudGVkU3Ry
aW5nKFNlZ21lbnRlZFN0cmluZyYmKSA9IGRlbGV0ZTsKLSAgICBTZWdtZW50ZWRTdHJpbmcoY29u
c3QgU2VnbWVudGVkU3RyaW5nJikgPSBkZWxldGU7Ci0KLSAgICBTZWdtZW50ZWRTdHJpbmcmIG9w
ZXJhdG9yPShTZWdtZW50ZWRTdHJpbmcmJik7Ci0gICAgU2VnbWVudGVkU3RyaW5nJiBvcGVyYXRv
cj0oY29uc3QgU2VnbWVudGVkU3RyaW5nJikgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBjbGVhcigp
OwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHZvaWQgYXBwZW5kKFNlZ21lbnRlZFN0cmluZyYm
KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLQotICAgIHZvaWQg
YXBwZW5kKFN0cmluZyYmKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmKTsKLQotICAg
IHZvaWQgcHVzaEJhY2soU3RyaW5nJiYpOwotCi0gICAgdm9pZCBzZXRFeGNsdWRlTGluZU51bWJl
cnMoKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2N1cnJlbnRTdWJz
dHJpbmcubGVuZ3RoOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBib29s
IGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nsb3NlZDsgfQotCi0gICAgdm9pZCBhZHZh
bmNlKCk7Ci0gICAgdm9pZCBhZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsgLy8gRmFzdGVyIHRoYW4g
Y2FsbGluZyBhZHZhbmNlIHdoZW4gd2Uga25vdyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgbm90
IGEgbmV3bGluZS4KLSAgICB2b2lkIGFkdmFuY2VQYXN0TmV3bGluZSgpOyAvLyBGYXN0ZXIgdGhh
biBjYWxsaW5nIGFkdmFuY2Ugd2hlbiB3ZSBrbm93IHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBh
IG5ld2xpbmUuCi0KLSAgICBlbnVtIEFkdmFuY2VQYXN0UmVzdWx0IHsgRGlkTm90TWF0Y2gsIERp
ZE1hdGNoLCBOb3RFbm91Z2hDaGFyYWN0ZXJzIH07Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoPiBBZHZhbmNlUGFzdFJlc3VsdCBhZHZhbmNlUGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClb
bGVuZ3RoXSkgeyByZXR1cm4gYWR2YW5jZVBhc3Q8bGVuZ3RoLCBmYWxzZT4obGl0ZXJhbCk7IH0K
LSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQ
YXN0TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIgKCZsaXRlcmFsKVtsZW5ndGhd
KSB7IHJldHVybiBhZHZhbmNlUGFzdDxsZW5ndGgsIHRydWU+KGxpdGVyYWwpOyB9Ci0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpIGNvbnN0OwotCi0gICAgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOyB9Ci0KLSAgICBPcmRpbmFsTnVtYmVyIGN1cnJl
bnRDb2x1bW4oKSBjb25zdDsKLSAgICBPcmRpbmFsTnVtYmVyIGN1cnJlbnRMaW5lKCkgY29uc3Q7
Ci0KLSAgICAvLyBTZXRzIHZhbHVlIG9mIGxpbmUvY29sdW1uIHZhcmlhYmxlcy4gQ29sdW1uIGlz
IHNwZWNpZmllZCBpbmRpcmVjdGx5IGJ5IGEgcGFyYW1ldGVyIGNvbHVtbkFmdGVyUHJvbG9nCi0g
ICAgLy8gd2hpY2ggaXMgYSB2YWx1ZSBvZiBjb2x1bW4gdGhhdCB3ZSBzaG91bGQgZ2V0IGFmdGVy
IGEgcHJvbG9nIChmaXJzdCBwcm9sb2dMZW5ndGggY2hhcmFjdGVycykgaGFzIGJlZW4gY29uc3Vt
ZWQuCi0gICAgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oT3JkaW5hbE51bWJlciBsaW5lLCBPcmRp
bmFsTnVtYmVyIGNvbHVtbkFmdGVyUHJvbG9nLCBpbnQgcHJvbG9nTGVuZ3RoKTsKLQotcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgU3Vic3RyaW5nIHsKLSAgICAgICAgU3Vic3RyaW5nKCkgPSBkZWZhdWx0
OwotICAgICAgICBTdWJzdHJpbmcoU3RyaW5nJiYpOwotCi0gICAgICAgIFVDaGFyIGN1cnJlbnRD
aGFyYWN0ZXIoKSBjb25zdDsKLSAgICAgICAgVUNoYXIgY3VycmVudENoYXJhY3RlclByZUluY3Jl
bWVudCgpOwotCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgYXBwZW5kVG8oU3RyaW5nQnVpbGRlciYpIGNvbnN0OwotCi0g
ICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAg
ICAgICAgYm9vbCBpczhCaXQ7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIGNvbnN0IExD
aGFyKiBjdXJyZW50Q2hhcmFjdGVyODsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50
Q2hhcmFjdGVyMTY7Ci0gICAgICAgIH07Ci0gICAgICAgIGJvb2wgZG9Ob3RFeGNsdWRlTGluZU51
bWJlcnMgeyB0cnVlIH07Ci0gICAgfTsKLQotICAgIGVudW0gRmFzdFBhdGhGbGFncyB7Ci0gICAg
ICAgIE5vRmFzdFBhdGggPSAwLAotICAgICAgICBVc2U4Qml0QWR2YW5jZUFuZFVwZGF0ZUxpbmVO
dW1iZXJzID0gMSA8PCAwLAotICAgICAgICBVc2U4Qml0QWR2YW5jZSA9IDEgPDwgMSwKLSAgICB9
OwotCi0gICAgdm9pZCBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nJiYpOwotCi0gICAgdm9pZCBw
cm9jZXNzUG9zc2libGVOZXdsaW5lKCk7Ci0gICAgdm9pZCBzdGFydE5ld0xpbmUoKTsKLQotICAg
IHZvaWQgYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKLSAgICB2b2lkIGFkdmFu
Y2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTYoKTsKLSAgICB2b2lkIGFkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVyMTYoKTsKLSAgICB2b2lkIGFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vi
c3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotICAgIHZvaWQgYWR2YW5jZVBhc3RT
aW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLSAgICB2b2lkIGFkdmFuY2VFbXB0eSgpOwotCi0g
ICAgdm9pZCB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOwotICAgIHZvaWQgdXBkYXRl
QWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOwotICAgIHZvaWQgdXBkYXRl
QWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLQot
ICAgIHZvaWQgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGNoYXJhY3Rlck1pc21hdGNoKENoYXJhY3Rl
clR5cGUsIGNoYXIsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKTsKLSAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlPiBBZHZhbmNl
UGFzdFJlc3VsdCBhZHZhbmNlUGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClbbGVuZ3RoXSk7Ci0g
ICAgQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3RTbG93Q2FzZShjb25zdCBjaGFyKiBsaXRl
cmFsLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Ci0KLSAgICBTdWJzdHJpbmcgbV9j
dXJyZW50U3Vic3RyaW5nOwotICAgIERlcXVlPFN1YnN0cmluZz4gbV9vdGhlclN1YnN0cmluZ3M7
Ci0KLSAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwotCi0gICAgVUNoYXIgbV9jdXJyZW50
Q2hhcmFjdGVyIHsgMCB9OwotCi0gICAgdW5zaWduZWQgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgeyAwIH07Ci0gICAgaW50IG1f
Y3VycmVudExpbmUgeyAwIH07Ci0KLSAgICB1bnNpZ25lZCBjaGFyIG1fZmFzdFBhdGhGbGFncyB7
IE5vRmFzdFBhdGggfTsKLSAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2FkdmFuY2VXaXRo
b3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rpb24pKCkgeyAmU2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlRW1wdHkgfTsKLSAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2FkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVyRnVuY3Rpb24pKCkgeyAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlRW1wdHkg
fTsKLX07Ci0KLWlubGluZSBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6U3Vic3RyaW5nKFN0
cmluZyYmIHBhc3NlZFN0cmluZykKLSAgICA6IHN0cmluZyhXVEZNb3ZlKHBhc3NlZFN0cmluZykp
Ci0gICAgLCBsZW5ndGgoc3RyaW5nLmxlbmd0aCgpKQotewotICAgIGlmIChsZW5ndGgpIHsKLSAg
ICAgICAgaXM4Qml0ID0gc3RyaW5nLmltcGwoKS0+aXM4Qml0KCk7Ci0gICAgICAgIGlmIChpczhC
aXQpCi0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyOCA9IHN0cmluZy5pbXBsKCktPmNoYXJh
Y3RlcnM4KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIxNiA9
IHN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMxNigpOwotICAgIH0KLX0KLQotaW5saW5lIHVuc2ln
bmVkIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1l
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0cmluZy5sZW5ndGgoKSAtIGxlbmd0aDsKLX0KLQot
QUxXQVlTX0lOTElORSBVQ2hhciBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6Y3VycmVudENo
YXJhY3RlcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0gICAgcmV0dXJuIGlzOEJp
dCA/ICpjdXJyZW50Q2hhcmFjdGVyOCA6ICpjdXJyZW50Q2hhcmFjdGVyMTY7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgVUNoYXIgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OmN1cnJlbnRDaGFyYWN0
ZXJQcmVJbmNyZW1lbnQoKQotewotICAgIEFTU0VSVChsZW5ndGgpOwotICAgIHJldHVybiBpczhC
aXQgPyAqKytjdXJyZW50Q2hhcmFjdGVyOCA6ICorK2N1cnJlbnRDaGFyYWN0ZXIxNjsKLX0KLQot
aW5saW5lIFNlZ21lbnRlZFN0cmluZzo6U2VnbWVudGVkU3RyaW5nKFN0cmluZyYmIHN0cmluZykK
LSAgICA6IG1fY3VycmVudFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpCi17Ci0gICAgaWYgKG1f
Y3VycmVudFN1YnN0cmluZy5sZW5ndGgpIHsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0g
bV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIoKTsKLSAgICAgICAgdXBkYXRlQWR2
YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLSAgICB9Ci19Ci0KLWlubGluZSBTZWdtZW50ZWRTdHJp
bmc6OlNlZ21lbnRlZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICA6IFNlZ21lbnRl
ZFN0cmluZyhTdHJpbmcgeyBzdHJpbmcgfSkKLXsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNl
Z21lbnRlZFN0cmluZzo6ZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKQotewotICAgIEFTU0VSVCht
X2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4gMSk7Ci0gICAgaWYgKFVOTElLRUxZKC0tbV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxKSkKLSAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9u
UG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIo
KQotewotICAgIGlmIChMSUtFTFkobV9mYXN0UGF0aEZsYWdzICYgVXNlOEJpdEFkdmFuY2UpKSB7
Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9ICorK21fY3VycmVudFN1YnN0cmluZy5jdXJy
ZW50Q2hhcmFjdGVyODsKLSAgICAgICAgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgICh0aGlzLT4qbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5n
TGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQotCi1pbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6
OnN0YXJ0TmV3TGluZSgpCi17Ci0gICAgKyttX2N1cnJlbnRMaW5lOwotICAgIG1fbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZCgpOwotfQotCi1pbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnByb2Nlc3NQb3Nz
aWJsZU5ld2xpbmUoKQotewotICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPT0gJ1xuJykKLSAg
ICAgICAgc3RhcnROZXdMaW5lKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6
YWR2YW5jZSgpCi17Ci0gICAgaWYgKExJS0VMWShtX2Zhc3RQYXRoRmxhZ3MgJiBVc2U4Qml0QWR2
YW5jZSkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKTsK
LSAgICAgICAgYm9vbCBsYXN0Q2hhcmFjdGVyV2FzTmV3bGluZSA9IG1fY3VycmVudENoYXJhY3Rl
ciA9PSAnXG4nOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJz
dHJpbmcuY3VycmVudENoYXJhY3Rlcjg7Ci0gICAgICAgIGJvb2wgaGF2ZU9uZUNoYXJhY3Rlckxl
ZnQgPSAtLW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMTsKLSAgICAgICAgaWYgKExJS0VM
WSghKGxhc3RDaGFyYWN0ZXJXYXNOZXdsaW5lIHwgaGF2ZU9uZUNoYXJhY3RlckxlZnQpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJXYXNOZXdsaW5lICYg
ISEobV9mYXN0UGF0aEZsYWdzICYgVXNlOEJpdEFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVycykp
Ci0gICAgICAgICAgICBzdGFydE5ld0xpbmUoKTsKLSAgICAgICAgaWYgKGhhdmVPbmVDaGFyYWN0
ZXJMZWZ0KQotICAgICAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5n
bGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICh0
aGlzLT4qbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdE5vbk5ld2xpbmUoKQot
ewotICAgIEFTU0VSVChtX2N1cnJlbnRDaGFyYWN0ZXIgIT0gJ1xuJyk7Ci0gICAgYWR2YW5jZVdp
dGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKLX0KLQotaW5saW5lIHZvaWQgU2VnbWVudGVkU3Ry
aW5nOjphZHZhbmNlUGFzdE5ld2xpbmUoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRDaGFyYWN0
ZXIgPT0gJ1xuJyk7Ci0gICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKSB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCi0g
ICAgICAgICAgICBzdGFydE5ld0xpbmUoKTsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0g
bV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXJQcmVJbmNyZW1lbnQoKTsKLSAgICAg
ICAgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgICh0aGlzLT4qbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQot
Ci1pbmxpbmUgdW5zaWduZWQgU2VnbWVudGVkU3RyaW5nOjpudW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudFN1YnN0cmluZyArIG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBB
TFdBWVNfSU5MSU5FIGJvb2wgU2VnbWVudGVkU3RyaW5nOjpjaGFyYWN0ZXJNaXNtYXRjaChDaGFy
YWN0ZXJUeXBlIGEsIGNoYXIgYiwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCi17Ci0g
ICAgcmV0dXJuIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSA/ICFpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKGEsIGIpIDogYSAhPSBiOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGhJbmNs
dWRpbmdUZXJtaW5hdG9yLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZT4gU2VnbWVudGVk
U3RyaW5nOjpBZHZhbmNlUGFzdFJlc3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0KGNv
bnN0IGNoYXIgKCZsaXRlcmFsKVtsZW5ndGhJbmNsdWRpbmdUZXJtaW5hdG9yXSkKLXsKLSAgICBj
b25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoID0gbGVuZ3RoSW5jbHVkaW5nVGVybWluYXRvciAtIDE7
Ci0gICAgQVNTRVJUKCFsaXRlcmFsW2xlbmd0aF0pOwotICAgIEFTU0VSVCghc3RyY2hyKGxpdGVy
YWwsICdcbicpKTsKLSAgICBpZiAobGVuZ3RoICsgMSA8IG1fY3VycmVudFN1YnN0cmluZy5sZW5n
dGgpIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5pczhCaXQpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIGlmIChjaGFyYWN0ZXJNaXNtYXRjaChtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJh
Y3RlcjhbaV0sIGxpdGVyYWxbaV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBEaWROb3RNYXRjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyOCArPSBsZW5ndGg7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRD
aGFyYWN0ZXI4OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlck1p
c21hdGNoKG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyMTZbaV0sIGxpdGVyYWxb
aV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBEaWROb3RNYXRjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudFN1YnN0
cmluZy5jdXJyZW50Q2hhcmFjdGVyMTYgKz0gbGVuZ3RoOwotICAgICAgICAgICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gKm1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyMTY7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCAtPSBsZW5ndGg7Ci0gICAg
ICAgIHJldHVybiBEaWRNYXRjaDsKLSAgICB9Ci0gICAgcmV0dXJuIGFkdmFuY2VQYXN0U2xvd0Nh
c2UobGl0ZXJhbCwgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKTsKLX0KLQotaW5saW5lIHZvaWQg
U2VnbWVudGVkU3RyaW5nOjp1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpCi17Ci0gICAg
aWYgKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKSB7Ci0gICAgICAgIGlmIChtX2N1cnJl
bnRTdWJzdHJpbmcuaXM4Qml0KSB7Ci0gICAgICAgICAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBVc2U4
Qml0QWR2YW5jZTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNs
dWRlTGluZU51bWJlcnMpCi0gICAgICAgICAgICAgICAgbV9mYXN0UGF0aEZsYWdzIHw9IFVzZThC
aXRBZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcnM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9mYXN0UGF0aEZsYWdzID0gTm9GYXN0UGF0aDsKLSAgICAgICAgbV9h
ZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIxNjsKLSAgICAgICAgaWYgKG1fY3Vy
cmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycykKLSAgICAgICAgICAgIG1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VBbmRVcGRhdGVMaW5lTnVtYmVyMTY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTY7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgpIHsKLSAgICAgICAgdXBkYXRlQWR2
YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmcoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDJmNDQ4MjAwYzk0NGM0YWUxNGYxMjk4YzM4YjI5MTE4NzM1ZDEzOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
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
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEluIHNvbWUgY2lyY3Vt
c3RhbmNlcyB3ZSB3YW50IHRvIHN0b3JlIGEgU3RyaW5nIGFsb25nIHdpdGggdGhlIFRleHREaXJl
Y3Rpb24KLS8vIG9mIHRoZSBTdHJpbmcgYXMgbGVhcm5lZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRo
ZSBTdHJpbmcuIEZvciBleGFtcGxlLAotLy8gY29uc2lkZXIgc3RvcmluZyB0aGUgdGl0bGUgZGVy
aXZlZCBmcm9tIDx0aXRsZSBkaXI9J3J0bCc+c29tZSB0aXRsZTwvdGl0bGU+Ci0vLyBpbiB0aGUg
aGlzdG9yeS4KLS8vCi0vLyBOb3RlIHRoYXQgaXMgZXhwbGljaXRseSAqbm90KiB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBzdHJpbmcgYXMgbGVhcm5lZAotLy8gZnJvbSB0aGUgY2hhcmFjdGVycyBvZiB0
aGUgc3RyaW5nOyBpdCdzIGV4dHJhIG1ldGFkYXRhIHdlIGhhdmUgZXh0ZXJuYWwKLS8vIHRvIHRo
ZSBzdHJpbmcuCi0KLXN0cnVjdCBTdHJpbmdXaXRoRGlyZWN0aW9uIHsKLSAgICBTdHJpbmcgc3Ry
aW5nOwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uIHsgVGV4dERpcmVjdGlvbjo6TFRSIH07
Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24m
IGEsIGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIGIpCi17Ci0gICAgcmV0dXJuIGEuc3RyaW5n
ID09IGIuc3RyaW5nICYmIGEuZGlyZWN0aW9uID09IGIuZGlyZWN0aW9uOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIGEsIGNvbnN0IFN0cmlu
Z1dpdGhEaXJlY3Rpb24mIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotaW5saW5l
IFN0cmluZ1dpdGhEaXJlY3Rpb24gdHJ1bmNhdGVGcm9tRW5kKGNvbnN0IFN0cmluZ1dpdGhEaXJl
Y3Rpb24mIHN0cmluZywgdW5zaWduZWQgbWF4TGVuZ3RoKQotewotICAgIHJldHVybiB7IHN0cmlu
Zy5zdHJpbmcubGVmdChtYXhMZW5ndGgpLCBzdHJpbmcuZGlyZWN0aW9uIH07Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3VmZml4VHJlZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdWZmaXhUcmVlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGEyNGNlNjAyMGE5YmRkNDllYjUzZDEyZTcxZjU5Mjg5ZDc4N2I1MDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdWZmaXhUcmVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBZGFtIEJhcnRoLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBVbmljb2RlQ29kZWJv
b2sgewotcHVibGljOgotICAgIHN0YXRpYyBpbnQgY29kZVdvcmQoVUNoYXIgYykgeyByZXR1cm4g
YzsgfQotICAgIGVudW0geyBjb2RlU2l6ZSA9IDEgPDwgOCAqIHNpemVvZihVQ2hhcikgfTsKLX07
Ci0KLWNsYXNzIEFTQ0lJQ29kZWJvb2sgewotcHVibGljOgotICAgIHN0YXRpYyBpbnQgY29kZVdv
cmQoVUNoYXIgYykgeyByZXR1cm4gYyAmIChjb2RlU2l6ZSAtIDEpOyB9Ci0gICAgZW51bSB7IGNv
ZGVTaXplID0gMSA8PCAoOCAqIHNpemVvZihjaGFyKSAtIDEpIH07Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlYm9vaz4KLWNsYXNzIFN1ZmZpeFRyZWUgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1ZmZpeFRyZWUpCi1wdWJsaWM6
Ci0gICAgU3VmZml4VHJlZShjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGRlcHRoKQotICAg
ICAgICA6IG1fZGVwdGgoZGVwdGgpCi0gICAgICAgICwgbV9sZWFmKHRydWUpCi0gICAgewotICAg
ICAgICBidWlsZCh0ZXh0KTsKLSAgICB9Ci0KLSAgICBib29sIG1pZ2h0Q29udGFpbihjb25zdCBT
dHJpbmcmIHF1ZXJ5KQotICAgIHsKLSAgICAgICAgTm9kZSogY3VycmVudCA9ICZtX3Jvb3Q7Ci0g
ICAgICAgIGludCBsaW1pdCA9IHN0ZDo6bWluKG1fZGVwdGgsIHF1ZXJ5Lmxlbmd0aCgpKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW1pdDsgKytpKSB7Ci0gICAgICAgICAgICBhdXRv
IGl0ID0gY3VycmVudC0+ZmluZChDb2RlYm9vazo6Y29kZVdvcmQocXVlcnlbaV0pKTsKLSAgICAg
ICAgICAgIGlmIChpdCA9PSBjdXJyZW50LT5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBjdXJyZW50ID0gaXQtPm5vZGU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNsYXNzIE5vZGUgewotICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE5vZGUo
Ym9vbCBpc0xlYWYgPSBmYWxzZSkKLSAgICAgICAgICAgIDogbV9pc0xlYWYoaXNMZWFmKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+Tm9kZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byogY2hpbGQgPSBlbnRyeS5ub2RlOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZCAmJiAhY2hp
bGQtPm1faXNMZWFmKQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2hpbGQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBOb2RlKiYgY2hpbGRBdChpbnQgY29kZVdvcmQp
OwotCi0gICAgICAgIGF1dG8gZmluZChpbnQgY29kZVdvcmQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmZpbmRfaWYobV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVu
ZCgpLCBbY29kZVdvcmRdKGF1dG8mIGVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5LmNvZGVXb3JkID09IGNvZGVXb3JkOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fY2hpbGRyZW4uZW5kKCk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHN0cnVjdCBDaGlsZFdpdGhDb2RlV29yZCB7Ci0gICAgICAgICAgICBp
bnQgY29kZVdvcmQ7Ci0gICAgICAgICAgICBOb2RlKiBub2RlOwotICAgICAgICB9OwotCi0gICAg
ICAgIFZlY3RvcjxDaGlsZFdpdGhDb2RlV29yZD4gbV9jaGlsZHJlbjsKLSAgICAgICAgYm9vbCBt
X2lzTGVhZjsKLSAgICB9OwotCi0gICAgdm9pZCBidWlsZChjb25zdCBTdHJpbmcmIHRleHQpCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGJhc2UgPSAwOyBiYXNlIDwgdGV4dC5sZW5ndGgo
KTsgKytiYXNlKSB7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gJm1fcm9vdDsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4oYmFzZSArIG1fZGVwdGgsIHRleHQubGVu
Z3RoKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSAwOyBiYXNlICsgb2Zm
c2V0IDwgbGltaXQ7ICsrb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQg
IT0gJm1fbGVhZik7Ci0gICAgICAgICAgICAgICAgTm9kZSomIGNoaWxkID0gY3VycmVudC0+Y2hp
bGRBdChDb2RlYm9vazo6Y29kZVdvcmQodGV4dFtiYXNlICsgb2Zmc2V0XSkpOwotICAgICAgICAg
ICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gYmFzZSArIG9m
ZnNldCArIDEgPT0gbGltaXQgPyAmbV9sZWFmIDogbmV3IE5vZGUoKTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY2hpbGQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBOb2RlIG1fcm9vdDsKLSAgICB1bnNpZ25lZCBtX2RlcHRoOwotCi0gICAgLy8gSW5zdGVhZCBv
ZiBhbGxvY2F0aW5nIGEgZnJlc2ggZW1wdHkgbGVhZiBub2RlIGZvciBldmVyIGxlYWYgaW4gdGhl
IHRyZWUKLSAgICAvLyAodGhlcmUgY2FuIGJlIGEgbG90IG9mIHRoZXNlKSwgd2UgYWxpYXMgYWxs
IHRoZSBsZWF2ZXMgdG8gdGhpcyAic3RhdGljIgotICAgIC8vIGxlYWYgbm9kZS4KLSAgICBOb2Rl
IG1fbGVhZjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvZGVib29rPgotaW5saW5lIGF1dG8g
U3VmZml4VHJlZTxDb2RlYm9vaz46Ok5vZGU6OmNoaWxkQXQoaW50IGNvZGVXb3JkKSAtPiBOb2Rl
KiYKLXsKLSAgICBhdXRvIGl0ID0gZmluZChjb2RlV29yZCk7Ci0gICAgaWYgKGl0ICE9IG1fY2hp
bGRyZW4uZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+bm9kZTsKLSAgICBtX2NoaWxkcmVuLmFw
cGVuZChDaGlsZFdpdGhDb2RlV29yZCB7IGNvZGVXb3JkLCBudWxscHRyIH0pOwotICAgIHJldHVy
biBtX2NoaWxkcmVuLmxhc3QoKS5ub2RlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzgwZmY2ODIwZjA5YTc2MTM3N2YxMmE5NDM5MTI0
YWQyYWFiNDI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBE
b21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKLQotI2luY2x1ZGUgPHVuaWNv
ZGUvdWJyay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVu
c2lnbmVkIGVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcgdGV4dCkKLXsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICB1bnNpZ25lZCBmaXJzdCA9IGk7Ci0gICAg
ICAgIFVDaGFyMzIgY2g7Ci0gICAgICAgIFUxNl9ORVhUKHRleHQsIGksIGxlbmd0aCwgY2gpOwot
ICAgICAgICBpZiAoIXJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmlyc3Q7Ci0gICAgfQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXVuc2ln
bmVkIHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3IHRleHQpCi17Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBsZW5ndGg7IGkgPiAwOyApIHsKLSAgICAgICAgdW5zaWduZWQgbGFzdCA9IGk7Ci0gICAgICAg
IFVDaGFyMzIgY2g7Ci0gICAgICAgIFUxNl9QUkVWKHRleHQsIDAsIGksIGNoKTsKLSAgICAgICAg
aWYgKCFyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpKQotICAgICAgICAgICAgcmV0
dXJuIGxhc3Q7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09B
KQotCi1pbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0
aW9uLCBib29sIGZvcndhcmQpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFr
SXRlcmF0b3IodGV4dCk7Ci0KLSAgICBpZiAoZm9yd2FyZCkgewotICAgICAgICBwb3NpdGlvbiA9
IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7Ci0gICAgICAgIHdoaWxlIChwb3NpdGlvbiAh
PSBVQlJLX0RPTkUpIHsKLSAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhl
IGNoYXJhY3RlciBwcmVjZWVkaW5nIHRoZSBicmVhayBpcyBhbHBoYW51bWVyaWMuCi0gICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8IHRleHQubGVuZ3RoKCkg
JiYgdV9pc2FsbnVtKHRleHRbcG9zaXRpb24gLSAxXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfZm9sbG93aW5nKGl0LCBw
b3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGgoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlv
bik7Ci0gICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBVQlJLX0RPTkUpIHsKLSAgICAgICAgICAg
IC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJy
ZWFrIGlzIGFscGhhbnVtZXJpYy4KLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiB1X2lzYWxu
dW0odGV4dFtwb3NpdGlvbl0pKQotICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQot
ICAgICAgICAgICAgcG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIGZpbmRXb3JkQm91
bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQotewotICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQpOwot
ICAgICplbmQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwotICAgIGlmICgqZW5kIDwg
MCkKLSAgICAgICAgKmVuZCA9IHVicmtfbGFzdChpdCk7Ci0gICAgKnN0YXJ0ID0gdWJya19wcmV2
aW91cyhpdCk7Ci19Ci0KLXZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQs
IGludCBwb3NpdGlvbiwgaW50KiBlbmQpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dCk7Ci0gICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3Np
dGlvbik7Ci0gICAgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsK
LX0KLQotI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmll
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTg3M2FmNGQ3ZDczYzNhZTA5NGRkZmY0NzRkOWRj
YjM1NWFiMTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVGV4dEJvdW5kYXJpZXNfaAotI2RlZmluZSBUZXh0
Qm91bmRhcmllc19oCi0KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgaW5saW5lIGJvb2wgcmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KFVDaGFyMzIgY2hhcmFjdGVyKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgbmVlZGVkIHdoZW4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDY1NiBpcyBmaXhlZC4KLQotICAg
ICAgICAvLyBXZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIGNvbnN0YW50IGlmIHdlIHJlcXVpcmUgYSBu
ZXdlciB2ZXJzaW9uIG9mIHRoZSBJQ1UgaGVhZGVycy4KLSAgICAgICAgY29uc3QgaW50IFdLX1Vf
TEJfQ09ORElUSU9OQUxfSkFQQU5FU0VfU1RBUlRFUiA9IDM3OwotCi0gICAgICAgIGludCBsaW5l
QnJlYWsgPSB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFjdGVyLCBVQ0hBUl9MSU5FX0JSRUFL
KTsKLSAgICAgICAgcmV0dXJuIGxpbmVCcmVhayA9PSBVX0xCX0NPTVBMRVhfQ09OVEVYVCB8fCBs
aW5lQnJlYWsgPT0gV0tfVV9MQl9DT05ESVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSIHx8IGxpbmVC
cmVhayA9PSBVX0xCX0lERU9HUkFQSElDOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGVuZE9mRmly
c3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcpOwotICAgIHVuc2lnbmVkIHN0YXJ0T2ZM
YXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3KTsKLQotICAgIHZvaWQgZmluZFdvcmRC
b3VuZGFyeShTdHJpbmdWaWV3LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKTsK
LSAgICB2b2lkIGZpbmRFbmRXb3JkQm91bmRhcnkoU3RyaW5nVmlldywgaW50IHBvc2l0aW9uLCBp
bnQqIGVuZCk7Ci0gICAgaW50IGZpbmROZXh0V29yZEZyb21JbmRleChTdHJpbmdWaWV3LCBpbnQg
cG9zaXRpb24sIGJvb2wgZm9yd2FyZCk7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgKaW5kZXggZTE4ZWQ1ZjMxZTlh
NmJmMjczMGE4M2YzZjY0NzUyZGM1MjE2ZmVmMC4uMjE5NDJkODk5NDY4OWUyNWRiNDVkZjM2ODg5
YzM1OGZkYmEyYmRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q2hlY2tlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENoZWNrZXJDbGllbnQuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDIyICszNywyMiBAQCBjbGFzcyBUZXh0
Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dENoZWNrZXJDbGllbnQo
KSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJD
aGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRDaGVj
a2luZ1R5cGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChj
b25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdM
ZW5ndGgpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5n
dGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmll
dywgVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3RyaW5nVmlldywgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5n
VHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3RyaW5nVmlldywgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tp
bmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgPSAwOwog
I2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUg
bGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRo
ZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSBjb3Jy
ZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3MgaW4gbW9yZSB0ZXh0IGluICJjb250
ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxhbmd1YWdlCiAgICAgLy8gaWRlbnRp
ZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vycm91bmRpbmcgdGhlICJ3b3JkIiBm
b3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBzdWdnZXN0aW9ucy4KICAgICB2aXJ0
dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZjZjOGMwOWY5NzFkNTNmNDJmOGNjYWUzMTI4MGMxNzNmZjk0ZDY3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENoZWNraW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
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
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmFuZ2UuaCIKLSNpbmNsdWRlIDx3dGYv
RW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL09wdGlvblNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNz
IFRleHRDaGVja2luZ1R5cGUgOiB1aW50OF90IHsKLSAgICBOb25lICAgICAgICAgICAgICAgICAg
ICA9IDAsCi0gICAgU3BlbGxpbmcgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgR3JhbW1h
ciAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCi0gICAgTGluayAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDIsCi0gICAgUXVvdGUgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgRGFz
aCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDQsCi0gICAgUmVwbGFjZW1lbnQgICAgICAgICAg
ICAgPSAxIDw8IDUsCi0gICAgQ29ycmVjdGlvbiAgICAgICAgICAgICAgPSAxIDw8IDYsCi0gICAg
U2hvd0NvcnJlY3Rpb25QYW5lbCAgICAgPSAxIDw8IDcsCi19OwotCi0jaWYgUExBVEZPUk0oTUFD
KQotdHlwZWRlZiB1aW50NjRfdCBOU1RleHRDaGVja2luZ1R5cGVzOwotV0VCQ09SRV9FWFBPUlQg
TlNUZXh0Q2hlY2tpbmdUeXBlcyBuc1RleHRDaGVja2luZ1R5cGVzKE9wdGlvblNldDxUZXh0Q2hl
Y2tpbmdUeXBlPik7Ci0jZW5kaWYKLQotZW51bSBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB7Ci0g
ICAgVGV4dENoZWNraW5nUHJvY2Vzc0JhdGNoLAotICAgIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNy
ZW1lbnRhbAotfTsKLQotc3RydWN0IEdyYW1tYXJEZXRhaWwgewotICAgIENoYXJhY3RlclJhbmdl
IHJhbmdlOwotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgU3RyaW5nIHVzZXJEZXNj
cmlwdGlvbjsKLX07Ci0KLXN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQgewotICAgIFRleHRDaGVj
a2luZ1R5cGUgdHlwZTsKLSAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKLSAgICBWZWN0b3I8R3Jh
bW1hckRldGFpbD4gZGV0YWlsczsKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7Ci19OwotCi1zdHJ1
Y3QgVGV4dENoZWNraW5nR3Vlc3NlcyB7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAg
ICBib29sIG1pc3NwZWxsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgdW5ncmFtbWF0aWNhbCB7IGZh
bHNlIH07Ci19OwotCi1lbnVtIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyVHlwZSB7IH07
Ci11c2luZyBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXJUeXBlPjsKLQotY2xhc3MgVGV4dENoZWNraW5n
UmVxdWVzdERhdGEgewotICAgIGZyaWVuZCBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsgLy8gRm9y
IGFjY2VzcyB0byBtX2lkZW50aWZpZXIuCi1wdWJsaWM6Ci0gICAgVGV4dENoZWNraW5nUmVxdWVz
dERhdGEoKSA9IGRlZmF1bHQ7Ci0gICAgVGV4dENoZWNraW5nUmVxdWVzdERhdGEoc3RkOjpvcHRp
b25hbDxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVGV4
dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCi0gICAgICAgIDogbV90ZXh0IHsgdGV4
dCB9Ci0gICAgICAgICwgbV9pZGVudGlmaWVyIHsgaWRlbnRpZmllciB9Ci0gICAgICAgICwgbV9w
cm9jZXNzVHlwZSB7IHByb2Nlc3NUeXBlIH0KLSAgICAgICAgLCBtX2NoZWNraW5nVHlwZXMgeyBj
aGVja2luZ1R5cGVzIH0KLSAgICB7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQotICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dDsgfQotICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jaGVja2luZ1R5cGVzOyB9Ci0gICAgVGV4dENoZWNraW5nUHJvY2Vzc1R5
cGUgcHJvY2Vzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NUeXBlOyB9Ci0KLXByaXZh
dGU6Ci0gICAgU3RyaW5nIG1fdGV4dDsKLSAgICBzdGQ6Om9wdGlvbmFsPFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7Ci0gICAgVGV4dENoZWNraW5nUHJvY2Vzc1R5
cGUgbV9wcm9jZXNzVHlwZSB7IFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCB9OwotICAg
IE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBtX2NoZWNraW5nVHlwZXM7Ci19OwotCi1jbGFz
cyBUZXh0Q2hlY2tpbmdSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dENoZWNraW5nUmVx
dWVzdD4gewotcHVibGljOgotICAgIHZpcnR1YWwgflRleHRDaGVja2luZ1JlcXVlc3QoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiBkYXRh
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKGNvbnN0IFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoKSA9
IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHRDaGVja2luZ1Byb2Nlc3NU
eXBlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2ViQ29yZTo6
VGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1By
b2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzQmF0Y2gsCi0gICAgICAgIFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Byb2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwKLSAg
ICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdUeXBlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2Vi
Q29yZTo6VGV4dENoZWNraW5nVHlwZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlw
ZTo6Tm9uZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsCi0g
ICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIsCi0gICAgICAgIFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGU6OkxpbmssCi0gICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGU6OlF1b3RlLAotICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwKLSAgICAgICAg
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbiwKLSAgICAgICAgV2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbAotICAgID47Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dERpcmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0
aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZmU5N2RlYTBhNWIwYmU0ODdm
YjgyYjFkYjI1N2QzZTkwMzMxNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBjbGFzcyBUZXh0RGlyZWN0aW9uIDogYm9v
bCB7IExUUiwgUlRMIH07Ci0KLWlubGluZSBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpMVFI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFn
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM1OTIyNGYwZGI3MGM5YTc3OTM5
OThlZmYxMDQ4MWZjNWQ1MzRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw4MDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxv
cHRpb25hbD4KLSNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWVudW0gY2xhc3MgVGV4dFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsKLSAgICBBdXRv
VGV4dFJlbmRlcmluZywKLSAgICBPcHRpbWl6ZVNwZWVkLAotICAgIE9wdGltaXplTGVnaWJpbGl0
eSwKLSAgICBHZW9tZXRyaWNQcmVjaXNpb24KLX07Ci0KLWVudW0gY2xhc3MgRm9udFNtb290aGlu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBBdXRvU21vb3RoaW5nLAotICAgIE5vU21vb3RoaW5nLAot
ICAgIEFudGlhbGlhc2VkLAotICAgIFN1YnBpeGVsQW50aWFsaWFzZWQKLX07Ci0KLWVudW0gY2xh
c3MgRm9udE9yaWVudGF0aW9uIDogdWludDhfdCB7Ci0gICAgSG9yaXpvbnRhbCwKLSAgICBWZXJ0
aWNhbAotfTsKLQotZW51bSBjbGFzcyBOb25DSktHbHlwaE9yaWVudGF0aW9uIDogdWludDhfdCB7
Ci0gICAgTWl4ZWQsCi0gICAgVXByaWdodAotfTsKLQotZW51bSBFeHBhbnNpb25CZWhhdmlvckZs
YWdzIHsKLSAgICBGb3JiaWRSaWdodEV4cGFuc2lvbiA9IDAgPDwgMCwKLSAgICBBbGxvd1JpZ2h0
RXhwYW5zaW9uID0gMSA8PCAwLAotICAgIEZvcmNlUmlnaHRFeHBhbnNpb24gPSAyIDw8IDAsCi0g
ICAgUmlnaHRFeHBhbnNpb25NYXNrID0gMyA8PCAwLAotCi0gICAgRm9yYmlkTGVmdEV4cGFuc2lv
biA9IDAgPDwgMiwKLSAgICBBbGxvd0xlZnRFeHBhbnNpb24gPSAxIDw8IDIsCi0gICAgRm9yY2VM
ZWZ0RXhwYW5zaW9uID0gMiA8PCAyLAotICAgIExlZnRFeHBhbnNpb25NYXNrID0gMyA8PCAyLAot
Ci0gICAgRGVmYXVsdEV4cGFuc2lvbiA9IEFsbG93UmlnaHRFeHBhbnNpb24gfCBGb3JiaWRMZWZ0
RXhwYW5zaW9uLAotfTsKLXR5cGVkZWYgdW5zaWduZWQgRXhwYW5zaW9uQmVoYXZpb3I7Ci0KLWVu
dW0gRm9udFN5bnRoZXNpc1ZhbHVlcyB7Ci0gICAgRm9udFN5bnRoZXNpc05vbmUgPSAweDAsCi0g
ICAgRm9udFN5bnRoZXNpc1dlaWdodCA9IDB4MSwKLSAgICBGb250U3ludGhlc2lzU3R5bGUgPSAw
eDIsCi0gICAgRm9udFN5bnRoZXNpc1NtYWxsQ2FwcyA9IDB4NAotfTsKLS8vIEZJWE1FOiBVc2Ug
T3B0aW9uU2V0LgotdHlwZWRlZiB1bnNpZ25lZCBGb250U3ludGhlc2lzOwotY29uc3QgdW5zaWdu
ZWQgRm9udFN5bnRoZXNpc1dpZHRoID0gMzsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudExpZ2F0
dXJlcyA6IHVpbnQ4X3QgeyBOb3JtYWwsIFllcywgTm8gfTsKLWVudW0gY2xhc3MgRm9udFZhcmlh
bnRQb3NpdGlvbiA6IHVpbnQ4X3QgeyBOb3JtYWwsIFN1YnNjcmlwdCwgU3VwZXJzY3JpcHQgfTsK
LQotZW51bSBjbGFzcyBGb250VmFyaWFudENhcHMgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0g
ICAgU21hbGwsCi0gICAgQWxsU21hbGwsCi0gICAgUGV0aXRlLAotICAgIEFsbFBldGl0ZSwKLSAg
ICBVbmljYXNlLAotICAgIFRpdGxpbmcKLX07Ci0KLWVudW0gY2xhc3MgRm9udFZhcmlhbnROdW1l
cmljRmlndXJlIDogdWludDhfdCB7Ci0gICAgTm9ybWFsLAotICAgIExpbmluZ051bWJlcnMsCi0g
ICAgT2xkU3R5bGVOdW1iZXJzCi19OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmcgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0gICAgUHJvcG9ydGlvbmFsTnVtYmVycywK
LSAgICBUYWJ1bGFyTnVtYmVycwotfTsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudE51bWVyaWNG
cmFjdGlvbiA6IHVpbnQ4X3QgewotICAgIE5vcm1hbCwKLSAgICBEaWFnb25hbEZyYWN0aW9ucywK
LSAgICBTdGFja2VkRnJhY3Rpb25zCi19OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJpYW50TnVtZXJp
Y09yZGluYWwgOiBib29sIHsgTm9ybWFsLCBZZXMgfTsKLWVudW0gY2xhc3MgRm9udFZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm8gOiBib29sIHsgTm9ybWFsLCBZZXMgfTsKLWVudW0gY2xhc3MgRm9u
dFZhcmlhbnRBbHRlcm5hdGVzIDogYm9vbCB7IE5vcm1hbCwgSGlzdG9yaWNhbEZvcm1zIH07Ci0K
LWVudW0gY2xhc3MgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IDogdWludDhfdCB7Ci0gICAg
Tm9ybWFsLAotICAgIEppczc4LAotICAgIEppczgzLAotICAgIEppczkwLAotICAgIEppczA0LAot
ICAgIFNpbXBsaWZpZWQsCi0gICAgVHJhZGl0aW9uYWwKLX07Ci0KLWVudW0gY2xhc3MgRm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aCA6IHVpbnQ4X3QgewotICAgIE5vcm1hbCwKLSAgICBGdWxsLAot
ICAgIFByb3BvcnRpb25hbAotfTsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudEVhc3RBc2lhblJ1
YnkgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0gICAgWWVzCi19OwotCi1zdHJ1Y3QgRm9udFZh
cmlhbnRTZXR0aW5ncyB7Ci0gICAgRm9udFZhcmlhbnRTZXR0aW5ncygpCi0gICAgICAgIDogY29t
bW9uTGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpCi0gICAgICAgICwgZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKQotICAgICAg
ICAsIGhpc3RvcmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKLSAg
ICAgICAgLCBjb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KQotICAgICAgICAsIHBvc2l0aW9uKEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbCkKLSAgICAg
ICAgLCBjYXBzKEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsKQotICAgICAgICAsIG51bWVyaWNGaWd1
cmUoRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWwpCi0gICAgICAgICwgbnVtZXJpY1Nw
YWNpbmcoRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsKQotICAgICAgICAsIG51bWVy
aWNGcmFjdGlvbihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsKQotICAgICAgICAs
IG51bWVyaWNPcmRpbmFsKEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCkKLSAgICAg
ICAgLCBudW1lcmljU2xhc2hlZFplcm8oRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5v
cm1hbCkKLSAgICAgICAgLCBhbHRlcm5hdGVzKEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFs
KQotICAgICAgICAsIGVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpOb3JtYWwpCi0gICAgICAgICwgZWFzdEFzaWFuV2lkdGgoRm9udFZhcmlhbnRFYXN0QXNpYW5X
aWR0aDo6Tm9ybWFsKQotICAgICAgICAsIGVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpOb3JtYWwpCi0gICAgewotICAgIH0KLQotICAgIEZvbnRWYXJpYW50U2V0dGluZ3Mo
Ci0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbkxpZ2F0dXJlcywKLSAgICAgICAg
Rm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcywKLSAgICAgICAgRm9u
dFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlcywKLSAgICAgICAgRm9udFZhcmlh
bnRMaWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMsCi0gICAgICAgIEZvbnRWYXJpYW50UG9z
aXRpb24gcG9zaXRpb24sCi0gICAgICAgIEZvbnRWYXJpYW50Q2FwcyBjYXBzLAotICAgICAgICBG
b250VmFyaWFudE51bWVyaWNGaWd1cmUgbnVtZXJpY0ZpZ3VyZSwKLSAgICAgICAgRm9udFZhcmlh
bnROdW1lcmljU3BhY2luZyBudW1lcmljU3BhY2luZywKLSAgICAgICAgRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb24gbnVtZXJpY0ZyYWN0aW9uLAotICAgICAgICBGb250VmFyaWFudE51bWVyaWNP
cmRpbmFsIG51bWVyaWNPcmRpbmFsLAotICAgICAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybyBudW1lcmljU2xhc2hlZFplcm8sCi0gICAgICAgIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBh
bHRlcm5hdGVzLAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgZWFzdEFzaWFu
VmFyaWFudCwKLSAgICAgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCBlYXN0QXNpYW5XaWR0
aCwKLSAgICAgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IGVhc3RBc2lhblJ1YnkpCi0gICAg
ICAgICAgICA6IGNvbW1vbkxpZ2F0dXJlcyhjb21tb25MaWdhdHVyZXMpCi0gICAgICAgICAgICAs
IGRpc2NyZXRpb25hcnlMaWdhdHVyZXMoZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKLSAgICAgICAg
ICAgICwgaGlzdG9yaWNhbExpZ2F0dXJlcyhoaXN0b3JpY2FsTGlnYXR1cmVzKQotICAgICAgICAg
ICAgLCBjb250ZXh0dWFsQWx0ZXJuYXRlcyhjb250ZXh0dWFsQWx0ZXJuYXRlcykKLSAgICAgICAg
ICAgICwgcG9zaXRpb24ocG9zaXRpb24pCi0gICAgICAgICAgICAsIGNhcHMoY2FwcykKLSAgICAg
ICAgICAgICwgbnVtZXJpY0ZpZ3VyZShudW1lcmljRmlndXJlKQotICAgICAgICAgICAgLCBudW1l
cmljU3BhY2luZyhudW1lcmljU3BhY2luZykKLSAgICAgICAgICAgICwgbnVtZXJpY0ZyYWN0aW9u
KG51bWVyaWNGcmFjdGlvbikKLSAgICAgICAgICAgICwgbnVtZXJpY09yZGluYWwobnVtZXJpY09y
ZGluYWwpCi0gICAgICAgICAgICAsIG51bWVyaWNTbGFzaGVkWmVybyhudW1lcmljU2xhc2hlZFpl
cm8pCi0gICAgICAgICAgICAsIGFsdGVybmF0ZXMoYWx0ZXJuYXRlcykKLSAgICAgICAgICAgICwg
ZWFzdEFzaWFuVmFyaWFudChlYXN0QXNpYW5WYXJpYW50KQotICAgICAgICAgICAgLCBlYXN0QXNp
YW5XaWR0aChlYXN0QXNpYW5XaWR0aCkKLSAgICAgICAgICAgICwgZWFzdEFzaWFuUnVieShlYXN0
QXNpYW5SdWJ5KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGlzQWxsTm9ybWFsKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb21tb25MaWdhdHVyZXMgPT0gRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbAotICAgICAgICAgICAgJiYgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9PSBG
b250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBoaXN0b3JpY2FsTGln
YXR1cmVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKLSAgICAgICAgICAgICYmIGNv
bnRleHR1YWxBbHRlcm5hdGVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKLSAgICAg
ICAgICAgICYmIHBvc2l0aW9uID09IEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgY2FwcyA9PSBGb250VmFyaWFudENhcHM6Ok5vcm1hbAotICAgICAgICAgICAgJiYg
bnVtZXJpY0ZpZ3VyZSA9PSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgbnVtZXJpY1NwYWNpbmcgPT0gRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9y
bWFsCi0gICAgICAgICAgICAmJiBudW1lcmljRnJhY3Rpb24gPT0gRm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb246Ok5vcm1hbAotICAgICAgICAgICAgJiYgbnVtZXJpY09yZGluYWwgPT0gRm9udFZh
cmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBudW1lcmljU2xhc2hl
ZFplcm8gPT0gRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbAotICAgICAgICAg
ICAgJiYgYWx0ZXJuYXRlcyA9PSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgZWFzdEFzaWFuVmFyaWFudCA9PSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
Ok5vcm1hbAotICAgICAgICAgICAgJiYgZWFzdEFzaWFuV2lkdGggPT0gRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBlYXN0QXNpYW5SdWJ5ID09IEZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb21tb25MaWdhdHVyZXMgPT0gb3RoZXIuY29tbW9uTGlnYXR1cmVzCi0gICAgICAg
ICAgICAmJiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID09IG90aGVyLmRpc2NyZXRpb25hcnlMaWdh
dHVyZXMKLSAgICAgICAgICAgICYmIGhpc3RvcmljYWxMaWdhdHVyZXMgPT0gb3RoZXIuaGlzdG9y
aWNhbExpZ2F0dXJlcwotICAgICAgICAgICAgJiYgY29udGV4dHVhbEFsdGVybmF0ZXMgPT0gb3Ro
ZXIuY29udGV4dHVhbEFsdGVybmF0ZXMKLSAgICAgICAgICAgICYmIHBvc2l0aW9uID09IG90aGVy
LnBvc2l0aW9uCi0gICAgICAgICAgICAmJiBjYXBzID09IG90aGVyLmNhcHMKLSAgICAgICAgICAg
ICYmIG51bWVyaWNGaWd1cmUgPT0gb3RoZXIubnVtZXJpY0ZpZ3VyZQotICAgICAgICAgICAgJiYg
bnVtZXJpY1NwYWNpbmcgPT0gb3RoZXIubnVtZXJpY1NwYWNpbmcKLSAgICAgICAgICAgICYmIG51
bWVyaWNGcmFjdGlvbiA9PSBvdGhlci5udW1lcmljRnJhY3Rpb24KLSAgICAgICAgICAgICYmIG51
bWVyaWNPcmRpbmFsID09IG90aGVyLm51bWVyaWNPcmRpbmFsCi0gICAgICAgICAgICAmJiBudW1l
cmljU2xhc2hlZFplcm8gPT0gb3RoZXIubnVtZXJpY1NsYXNoZWRaZXJvCi0gICAgICAgICAgICAm
JiBhbHRlcm5hdGVzID09IG90aGVyLmFsdGVybmF0ZXMKLSAgICAgICAgICAgICYmIGVhc3RBc2lh
blZhcmlhbnQgPT0gb3RoZXIuZWFzdEFzaWFuVmFyaWFudAotICAgICAgICAgICAgJiYgZWFzdEFz
aWFuV2lkdGggPT0gb3RoZXIuZWFzdEFzaWFuV2lkdGgKLSAgICAgICAgICAgICYmIGVhc3RBc2lh
blJ1YnkgPT0gb3RoZXIuZWFzdEFzaWFuUnVieTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOyB9Ci0KLSAgICB1bnNpZ25lZCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbW1vbkxpZ2F0dXJlcykg
PDwgMjYKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRpc2NyZXRpb25hcnlM
aWdhdHVyZXMpIDw8IDI0Ci0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihoaXN0
b3JpY2FsTGlnYXR1cmVzKSA8PCAyMgotICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29udGV4dHVhbEFsdGVybmF0ZXMpIDw8IDIwCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb3NpdGlvbikgPDwgMTgKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNhcHMpIDw8IDE1Ci0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihu
dW1lcmljRmlndXJlKSA8PCAxMwotICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bnVtZXJpY1NwYWNpbmcpIDw8IDExCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihudW1lcmljRnJhY3Rpb24pIDw8IDkKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG51bWVyaWNPcmRpbmFsKSA8PCA4Ci0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihudW1lcmljU2xhc2hlZFplcm8pIDw8IDcKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGFsdGVybmF0ZXMpIDw8IDYKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVhc3RBc2lhblZhcmlhbnQpIDw8IDMKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGVhc3RBc2lhbldpZHRoKSA8PCAxCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlYXN0QXNpYW5SdWJ5KSA8PCAwOwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudFNldHRpbmdzPiBk
ZWNvZGUoRGVjb2RlciYpOwotCi0gICAgLy8gRklYTUU6IHRoaXMgd291bGQgYmUgbXVjaCBtb3Jl
IGNvbXBhY3Qgd2l0aCBiaXRmaWVsZHMuCi0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9u
TGlnYXR1cmVzOwotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGRpc2NyZXRpb25hcnlMaWdhdHVy
ZXM7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlczsKLSAgICBG
b250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlczsKLSAgICBGb250VmFyaWFu
dFBvc2l0aW9uIHBvc2l0aW9uOwotICAgIEZvbnRWYXJpYW50Q2FwcyBjYXBzOwotICAgIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZSBudW1lcmljRmlndXJlOwotICAgIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmcgbnVtZXJpY1NwYWNpbmc7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24g
bnVtZXJpY0ZyYWN0aW9uOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgbnVtZXJpY09y
ZGluYWw7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8gbnVtZXJpY1NsYXNoZWRa
ZXJvOwotICAgIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHRlcm5hdGVzOwotICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudCBlYXN0QXNpYW5WYXJpYW50OwotICAgIEZvbnRWYXJpYW50RWFz
dEFzaWFuV2lkdGggZWFzdEFzaWFuV2lkdGg7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
IGVhc3RBc2lhblJ1Ynk7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGb250
VmFyaWFudFNldHRpbmdzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IGNvbW1vbkxpZ2F0dXJlczsKLSAgICBlbmNvZGVyIDw8IGRpc2NyZXRpb25hcnlM
aWdhdHVyZXM7Ci0gICAgZW5jb2RlciA8PCBoaXN0b3JpY2FsTGlnYXR1cmVzOwotICAgIGVuY29k
ZXIgPDwgY29udGV4dHVhbEFsdGVybmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBwb3NpdGlvbjsKLSAg
ICBlbmNvZGVyIDw8IGNhcHM7Ci0gICAgZW5jb2RlciA8PCBudW1lcmljRmlndXJlOwotICAgIGVu
Y29kZXIgPDwgbnVtZXJpY1NwYWNpbmc7Ci0gICAgZW5jb2RlciA8PCBudW1lcmljRnJhY3Rpb247
Ci0gICAgZW5jb2RlciA8PCBudW1lcmljT3JkaW5hbDsKLSAgICBlbmNvZGVyIDw8IG51bWVyaWNT
bGFzaGVkWmVybzsKLSAgICBlbmNvZGVyIDw8IGFsdGVybmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBl
YXN0QXNpYW5WYXJpYW50OwotICAgIGVuY29kZXIgPDwgZWFzdEFzaWFuV2lkdGg7Ci0gICAgZW5j
b2RlciA8PCBlYXN0QXNpYW5SdWJ5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3Rk
OjpvcHRpb25hbDxGb250VmFyaWFudFNldHRpbmdzPiBGb250VmFyaWFudFNldHRpbmdzOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGln
YXR1cmVzPiBjb21tb25MaWdhdHVyZXM7Ci0gICAgZGVjb2RlciA+PiBjb21tb25MaWdhdHVyZXM7
Ci0gICAgaWYgKCFjb21tb25MaWdhdHVyZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzOwotICAgIGRlY29kZXIgPj4gZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKLSAgICBp
ZiAoIWRpc2NyZXRpb25hcnlMaWdhdHVyZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBoaXN0b3JpY2FsTGln
YXR1cmVzOwotICAgIGRlY29kZXIgPj4gaGlzdG9yaWNhbExpZ2F0dXJlczsKLSAgICBpZiAoIWhp
c3RvcmljYWxMaWdhdHVyZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBjb250ZXh0dWFsQWx0ZXJuYXRlczsK
LSAgICBkZWNvZGVyID4+IGNvbnRleHR1YWxBbHRlcm5hdGVzOwotICAgIGlmICghY29udGV4dHVh
bEFsdGVybmF0ZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPEZvbnRWYXJpYW50UG9zaXRpb24+IHBvc2l0aW9uOwotICAgIGRlY29kZXIgPj4gcG9z
aXRpb247Ci0gICAgaWYgKCFwb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRDYXBzPiBjYXBzOwotICAgIGRlY29kZXIg
Pj4gY2FwczsKLSAgICBpZiAoIWNhcHMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZT4gbnVtZXJpY0ZpZ3Vy
ZTsKLSAgICBkZWNvZGVyID4+IG51bWVyaWNGaWd1cmU7Ci0gICAgaWYgKCFudW1lcmljRmlndXJl
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nPiBudW1lcmljU3BhY2luZzsKLSAgICBkZWNvZGVyID4+IG51
bWVyaWNTcGFjaW5nOwotICAgIGlmICghbnVtZXJpY1NwYWNpbmcpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uPiBudW1lcmljRnJhY3Rpb247Ci0gICAgZGVjb2RlciA+PiBudW1lcmljRnJhY3Rpb247Ci0g
ICAgaWYgKCFudW1lcmljRnJhY3Rpb24pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+IG51bWVyaWNPcmRp
bmFsOwotICAgIGRlY29kZXIgPj4gbnVtZXJpY09yZGluYWw7Ci0gICAgaWYgKCFudW1lcmljT3Jk
aW5hbCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+IG51bWVyaWNTbGFzaGVkWmVybzsKLSAgICBk
ZWNvZGVyID4+IG51bWVyaWNTbGFzaGVkWmVybzsKLSAgICBpZiAoIW51bWVyaWNTbGFzaGVkWmVy
bykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzPiBhbHRlcm5hdGVzOwotICAgIGRlY29kZXIgPj4gYWx0ZXJuYXRl
czsKLSAgICBpZiAoIWFsdGVybmF0ZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4gZWFzdEFzaWFu
VmFyaWFudDsKLSAgICBkZWNvZGVyID4+IGVhc3RBc2lhblZhcmlhbnQ7Ci0gICAgaWYgKCFlYXN0
QXNpYW5WYXJpYW50KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPiBlYXN0QXNpYW5XaWR0aDsKLSAgICBk
ZWNvZGVyID4+IGVhc3RBc2lhbldpZHRoOwotICAgIGlmICghZWFzdEFzaWFuV2lkdGgpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50
RWFzdEFzaWFuUnVieT4gZWFzdEFzaWFuUnVieTsKLSAgICBkZWNvZGVyID4+IGVhc3RBc2lhblJ1
Ynk7Ci0gICAgaWYgKCFlYXN0QXNpYW5SdWJ5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIHt7Ci0gICAgICAgICpjb21tb25MaWdhdHVyZXMsCi0gICAgICAgICpk
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAotICAgICAgICAqaGlzdG9yaWNhbExpZ2F0dXJlcywKLSAg
ICAgICAgKmNvbnRleHR1YWxBbHRlcm5hdGVzLAotICAgICAgICAqcG9zaXRpb24sCi0gICAgICAg
ICpjYXBzLAotICAgICAgICAqbnVtZXJpY0ZpZ3VyZSwKLSAgICAgICAgKm51bWVyaWNTcGFjaW5n
LAotICAgICAgICAqbnVtZXJpY0ZyYWN0aW9uLAotICAgICAgICAqbnVtZXJpY09yZGluYWwsCi0g
ICAgICAgICpudW1lcmljU2xhc2hlZFplcm8sCi0gICAgICAgICphbHRlcm5hdGVzLAotICAgICAg
ICAqZWFzdEFzaWFuVmFyaWFudCwKLSAgICAgICAgKmVhc3RBc2lhbldpZHRoLAotICAgICAgICAq
ZWFzdEFzaWFuUnVieQotICAgIH19OwotfQotCi1zdHJ1Y3QgRm9udFZhcmlhbnRMaWdhdHVyZXNW
YWx1ZXMgewotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzKAotICAgICAgICBGb250VmFy
aWFudExpZ2F0dXJlcyBjb21tb25MaWdhdHVyZXMsCi0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1
cmVzIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMsCi0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1cmVz
IGhpc3RvcmljYWxMaWdhdHVyZXMsCi0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRl
eHR1YWxBbHRlcm5hdGVzKQotICAgICAgICAgICAgOiBjb21tb25MaWdhdHVyZXMoY29tbW9uTGln
YXR1cmVzKQotICAgICAgICAgICAgLCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKGRpc2NyZXRpb25h
cnlMaWdhdHVyZXMpCi0gICAgICAgICAgICAsIGhpc3RvcmljYWxMaWdhdHVyZXMoaGlzdG9yaWNh
bExpZ2F0dXJlcykKLSAgICAgICAgICAgICwgY29udGV4dHVhbEFsdGVybmF0ZXMoY29udGV4dHVh
bEFsdGVybmF0ZXMpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcz4gZGVjb2Rl
KERlY29kZXImKTsKLQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbkxpZ2F0dXJlczsK
LSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwotICAgIEZv
bnRWYXJpYW50TGlnYXR1cmVzIGhpc3RvcmljYWxMaWdhdHVyZXM7Ci0gICAgRm9udFZhcmlhbnRM
aWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXM7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlczo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBjb21tb25MaWdhdHVyZXM7Ci0gICAgZW5j
b2RlciA8PCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwotICAgIGVuY29kZXIgPDwgaGlzdG9yaWNh
bExpZ2F0dXJlczsKLSAgICBlbmNvZGVyIDw8IGNvbnRleHR1YWxBbHRlcm5hdGVzOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJl
c1ZhbHVlcz4gRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGNvbW1vbkxp
Z2F0dXJlczsKLSAgICBkZWNvZGVyID4+IGNvbW1vbkxpZ2F0dXJlczsKLSAgICBpZiAoIWNvbW1v
bkxpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGRpc2NyZXRpb25hcnlMaWdhdHVyZXM7Ci0gICAg
ZGVjb2RlciA+PiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwotICAgIGlmICghZGlzY3JldGlvbmFy
eUxpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGhpc3RvcmljYWxMaWdhdHVyZXM7Ci0gICAgZGVj
b2RlciA+PiBoaXN0b3JpY2FsTGlnYXR1cmVzOwotICAgIGlmICghaGlzdG9yaWNhbExpZ2F0dXJl
cykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnRMaWdhdHVyZXM+IGNvbnRleHR1YWxBbHRlcm5hdGVzOwotICAgIGRlY29kZXIgPj4g
Y29udGV4dHVhbEFsdGVybmF0ZXM7Ci0gICAgaWYgKCFjb250ZXh0dWFsQWx0ZXJuYXRlcykKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqY29tbW9uTGlnYXR1
cmVzLCAqZGlzY3JldGlvbmFyeUxpZ2F0dXJlcywgKmhpc3RvcmljYWxMaWdhdHVyZXMsICpjb250
ZXh0dWFsQWx0ZXJuYXRlcyB9fTsKLX0KLQotc3RydWN0IEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVl
cyB7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljVmFsdWVzKAotICAgICAgICBGb250VmFyaWFudE51
bWVyaWNGaWd1cmUgZmlndXJlLAotICAgICAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNw
YWNpbmcsCi0gICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZyYWN0aW9uLAotICAg
ICAgICBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGluYWwsCi0gICAgICAgIEZvbnRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvKQotICAgICAgICAgICAgOiBmaWd1cmUo
ZmlndXJlKQotICAgICAgICAgICAgLCBzcGFjaW5nKHNwYWNpbmcpCi0gICAgICAgICAgICAsIGZy
YWN0aW9uKGZyYWN0aW9uKQotICAgICAgICAgICAgLCBvcmRpbmFsKG9yZGluYWwpCi0gICAgICAg
ICAgICAsIHNsYXNoZWRaZXJvKHNsYXNoZWRaZXJvKQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1l
cmljVmFsdWVzPiBkZWNvZGUoRGVjb2RlciYpOwotCi0gICAgRm9udFZhcmlhbnROdW1lcmljRmln
dXJlIGZpZ3VyZTsKLSAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmc7Ci0gICAg
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb247Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljT3JkaW5hbCBvcmRpbmFsOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNs
YXNoZWRaZXJvOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRm9udFZhcmlh
bnROdW1lcmljVmFsdWVzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IGZpZ3VyZTsKLSAgICBlbmNvZGVyIDw8IHNwYWNpbmc7Ci0gICAgZW5jb2RlciA8
PCBmcmFjdGlvbjsKLSAgICBlbmNvZGVyIDw8IG9yZGluYWw7Ci0gICAgZW5jb2RlciA8PCBzbGFz
aGVkWmVybzsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnROdW1lcmljVmFsdWVzPiBGb250VmFyaWFudE51bWVyaWNWYWx1ZXM6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmlj
RmlndXJlPiBmaWd1cmU7Ci0gICAgZGVjb2RlciA+PiBmaWd1cmU7Ci0gICAgaWYgKCFmaWd1cmUp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc+IHNwYWNpbmc7Ci0gICAgZGVjb2RlciA+PiBzcGFjaW5nOwot
ICAgIGlmICghc3BhY2luZykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IGZyYWN0aW9uOwotICAgIGRl
Y29kZXIgPj4gZnJhY3Rpb247Ci0gICAgaWYgKCFmcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bD4gb3JkaW5hbDsKLSAgICBkZWNvZGVyID4+IG9yZGluYWw7Ci0gICAgaWYgKCFvcmRpbmFsKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybz4gc2xhc2hlZFplcm87Ci0gICAgZGVjb2RlciA+PiBzbGFz
aGVkWmVybzsKLSAgICBpZiAoIXNsYXNoZWRaZXJvKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIHt7ICpmaWd1cmUsICpzcGFjaW5nLCAqZnJhY3Rpb24sICpvcmRp
bmFsLCAqc2xhc2hlZFplcm8gfX07Ci19Ci0KLXN0cnVjdCBGb250VmFyaWFudEVhc3RBc2lhblZh
bHVlcyB7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXMoCi0gICAgICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50LAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lh
bldpZHRoIHdpZHRoLAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgcnVieSkKLSAg
ICAgICAgICAgIDogdmFyaWFudCh2YXJpYW50KQotICAgICAgICAgICAgLCB3aWR0aCh3aWR0aCkK
LSAgICAgICAgICAgICwgcnVieShydWJ5KQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5W
YWx1ZXM+IGRlY29kZShEZWNvZGVyJik7Ci0KLSAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudDsKLSAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIHdpZHRoOwotICAgIEZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgdmFyaWFudDsKLSAgICBlbmNvZGVyIDw8IHdp
ZHRoOwotICAgIGVuY29kZXIgPDwgcnVieTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LXN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM+IEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFsdWVzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4gdmFyaWFudDsKLSAgICBkZWNvZGVyID4+
IHZhcmlhbnQ7Ci0gICAgaWYgKCF2YXJpYW50KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPiB3aWR0aDsK
LSAgICBkZWNvZGVyID4+IHdpZHRoOwotICAgIGlmICghd2lkdGgpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eT4gcnVieTsKLSAgICBkZWNvZGVyID4+IHJ1Ynk7Ci0gICAgaWYgKCFydWJ5KQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICp2YXJpYW50LCAqd2lkdGgsICpy
dWJ5IH19OwotfQotCi1lbnVtIGNsYXNzIEZvbnRXaWR0aFZhcmlhbnQgOiB1aW50OF90IHsKLSAg
ICBSZWd1bGFyV2lkdGgsCi0gICAgSGFsZldpZHRoLAotICAgIFRoaXJkV2lkdGgsCi0gICAgUXVh
cnRlcldpZHRoLAotICAgIExhc3RGb250V2lkdGhWYXJpYW50ID0gUXVhcnRlcldpZHRoCi19Owot
Ci1jb25zdCB1bnNpZ25lZCBGb250V2lkdGhWYXJpYW50V2lkdGggPSAyOwotCi1DT01QSUxFX0FT
U0VSVCghKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpMYXN0Rm9udFdp
ZHRoVmFyaWFudCkgPj4gRm9udFdpZHRoVmFyaWFudFdpZHRoKSwgRm9udFdpZHRoVmFyaWFudFdp
ZHRoX2lzX2NvcnJlY3QpOwotCi1lbnVtIGNsYXNzIEZvbnRTbWFsbENhcHMgOiB1aW50OF90IHsK
LSAgICBPZmYgPSAwLAotICAgIE9uID0gMQotfTsKLQotZW51bSBjbGFzcyBLZXJuaW5nIDogdWlu
dDhfdCB7Ci0gICAgQXV0bywKLSAgICBOb3JtYWwsCi0gICAgTm9TaGlmdAotfTsKLQotZW51bSBj
bGFzcyBGb250T3B0aWNhbFNpemluZyA6IHVpbnQ4X3QgewotICAgIEVuYWJsZWQsCi0gICAgRGlz
YWJsZWQKLX07Ci0KLS8vIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNw
ZWMvZnZhci5odG0jVkFUCi1lbnVtIGNsYXNzIEZvbnRTdHlsZUF4aXMgOiB1aW50OF90IHsKLSAg
ICBzbG50LAotICAgIGl0YWwKLX07Ci0KLWVudW0gY2xhc3MgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgOiB1aW50OF90IHsKLSAgICBObywKLSAgICBZZXMKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dFJlbmRlcmlu
Z01vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlRl
eHRSZW5kZXJpbmdNb2RlLAotICAgIFdlYkNvcmU6OlRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4
dFJlbmRlcmluZywKLSAgICBXZWJDb3JlOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVl
ZCwKLSAgICBXZWJDb3JlOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5LAot
ICAgIFdlYkNvcmU6OlRleHRSZW5kZXJpbmdNb2RlOjpHZW9tZXRyaWNQcmVjaXNpb24KLSAgICA+
OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250U21vb3Ro
aW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6
Rm9udFNtb290aGluZ01vZGUsCi0gICAgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9T
bW9vdGhpbmcsCi0gICAgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nLAot
ICAgIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZCwKLSAgICBXZWJDb3Jl
OjpGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCwKLSAgICBXZWJDb3JlOjpG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRPcmllbnRhdGlvbj4gewotICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udE9yaWVudGF0aW9uLAotICAg
IFdlYkNvcmU6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwKLSAgICBXZWJDb3JlOjpGb250
T3JpZW50YXRpb246OlZlcnRpY2FsCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gewotICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiwK
LSAgICBXZWJDb3JlOjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCwKLSAgICBXZWJDb3Jl
OjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpVcHJpZ2h0Ci0gICAgPjsKLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHsKLSAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TGln
YXR1cmVzLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwsCi0gICAg
V2ViQ29yZTo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllcywKLSAgICBXZWJDb3JlOjpGb250VmFy
aWFudExpZ2F0dXJlczo6Tm8KLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGb250VmFyaWFudFBvc2l0aW9uPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0g
RW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudFBvc2l0aW9uLAotICAgIFdlYkNv
cmU6OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFu
dFBvc2l0aW9uOjpTdWJzY3JpcHQsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6
U3VwZXJzY3JpcHQKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpGb250VmFyaWFudENhcHM+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVz
PAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50Q2FwcywKLSAgICBXZWJDb3JlOjpGb250VmFyaWFu
dENhcHM6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudENhcHM6OlNtYWxsLAotICAg
IFdlYkNvcmU6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGwsCi0gICAgV2ViQ29yZTo6Rm9udFZh
cmlhbnRDYXBzOjpQZXRpdGUsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQZXRp
dGUsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzOjpVbmljYXNlLAotICAgIFdlYkNvcmU6
OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZT4gewotICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmlj
RmlndXJlLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsLAot
ICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVycywKLSAg
ICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVycwotICAg
ID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAg
IFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcsCi0gICAgV2ViQ29yZTo6Rm9udFZh
cmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlh
bnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbj4g
ewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb24sCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rp
b246Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlh
Z29uYWxGcmFjdGlvbnMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246
OlN0YWNrZWRGcmFjdGlvbnMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPiB7Ci0gICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFs
LAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCwKLSAgICBX
ZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXMKLSAgICA+OwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8sCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybzo6WWVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzPiB7Ci0gICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEFsdGVybmF0ZXMsCi0gICAg
V2ViQ29yZTo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwsCi0gICAgV2ViQ29yZTo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXMKLSAgICA+OwotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRW
YXJpYW50RWFzdEFzaWFuVmFyaWFudCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Okppczc4LAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
ODMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MCwKLSAg
ICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0LAotICAgIFdlYkNv
cmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmllZCwKLSAgICBXZWJDb3Jl
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsLAotICAgIFdlYkNvcmU6
OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsCi0gICAgPjsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aD4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoOjpOb3JtYWwsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVs
bCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWwK
LSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAot
ICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSwKLSAgICBXZWJDb3JlOjpGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVh
c3RBc2lhblJ1Ynk6OlllcwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQ+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQsCi0gICAgV2ViQ29yZTo6Rm9u
dFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlh
bnQ6OkhhbGZXaWR0aCwKLSAgICBXZWJDb3JlOjpGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRo
LAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aAotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRTbWFsbENhcHM+
IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRTbWFs
bENhcHMsCi0gICAgV2ViQ29yZTo6Rm9udFNtYWxsQ2Fwczo6T2ZmLAotICAgIFdlYkNvcmU6OkZv
bnRTbWFsbENhcHM6Ok9uCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6S2VybmluZz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0g
ICAgV2ViQ29yZTo6S2VybmluZywKLSAgICBXZWJDb3JlOjpLZXJuaW5nOjpBdXRvLAotICAgIFdl
YkNvcmU6Oktlcm5pbmc6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpLZXJuaW5nOjpOb1NoaWZ0Ci0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udE9w
dGljYWxTaXppbmc+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNv
cmU6OkZvbnRPcHRpY2FsU2l6aW5nLAotICAgIFdlYkNvcmU6OkZvbnRPcHRpY2FsU2l6aW5nOjpF
bmFibGVkLAotICAgIFdlYkNvcmU6OkZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZAotICAgID47
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRTdHlsZUF4
aXM+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRT
dHlsZUF4aXMsCi0gICAgV2ViQ29yZTo6Rm9udFN0eWxlQXhpczo6c2xudCwKLSAgICBXZWJDb3Jl
OjpGb250U3R5bGVBeGlzOjppdGFsCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM+IHsKLSAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkFsbG93VXNlckluc3RhbGxlZEZvbnRz
LAotICAgIFdlYkNvcmU6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObywKLSAgICBXZWJDb3Jl
OjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2Rl
QmlkaS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ5Y2ZlZmU2NmM0Y2NmMzcyM2EwMjM1OWQ0NTcw
NTcwMDFlMjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZUJpZGkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFVuaWNvZGVCaWRpX2gKLSNkZWZpbmUgVW5pY29kZUJpZGlfaAot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRVVuaWNvZGVCaWRpIHsKLSAgICBVQk5vcm1h
bCwKLSAgICBFbWJlZCwKLSAgICBPdmVycmlkZSwKLSAgICBJc29sYXRlLAotICAgIFBsYWludGV4
dCwKLSAgICBJc29sYXRlT3ZlcnJpZGUsCi19OyAKLQotaW5saW5lIGJvb2wgaXNJc29sYXRlZChj
b25zdCBFVW5pY29kZUJpZGkmIHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmljb2RlQmlk
aSA9PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlkZSB8fCB1bmljb2Rl
QmlkaSA9PSBQbGFpbnRleHQ7Ci19Ci0KLWlubGluZSBib29sIGlzT3ZlcnJpZGUoRVVuaWNvZGVC
aWRpIHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmljb2RlQmlkaSA9PSBPdmVycmlkZSB8
fCB1bmljb2RlQmlkaSA9PSBJc29sYXRlT3ZlcnJpZGU7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGUyMDdhMzc0ODQ2MWZkOWYxOTZmOGMzNzkyZjQ4OTU5NTU4MGIyZjQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
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
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKLSNpbmNsdWRl
IDxhcnJheT4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIFdyaXRpbmdNb2Rl
IDogdWludDhfdCB7Ci0gICAgVG9wVG9Cb3R0b20gPSAwLCAvLyBob3Jpem9udGFsLXRiCi0gICAg
Qm90dG9tVG9Ub3AgPSAxLCAvLyBob3Jpem9udGFsLWJ0Ci0gICAgTGVmdFRvUmlnaHQgPSAyLCAv
LyB2ZXJ0aWNhbC1scgotICAgIFJpZ2h0VG9MZWZ0ID0gMywgLy8gdmVydGljYWwtcmwKLX07Ci0K
LWNvbnN0ZXhwciB1bnNpZ25lZCBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHdyaXRpbmdNb2RlKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGRpcmVjdGlvbik7Ci19Ci0KLS8vIERlZmluZSB0aGUgdGV4dCBmbG93IGluIHRlcm1zIG9mIHRo
ZSB3cml0aW5nIG1vZGUgYW5kIHRoZSB0ZXh0IGRpcmVjdGlvbi4gVGhlIGZpcnN0Ci0vLyBwYXJ0
IGlzIHRoZSBsaW5lIGdyb3dpbmcgZGlyZWN0aW9uIGFuZCB0aGUgc2Vjb25kIHBhcnQgaXMgdGhl
IGJsb2NrIGdyb3dpbmcgZGlyZWN0aW9uLgotZW51bSBUZXh0RmxvdyB7Ci0gICAgSW5saW5lRWFz
dEJsb2NrU291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpUb3BUb0Jv
dHRvbSwgVGV4dERpcmVjdGlvbjo6TFRSKSwKLSAgICBJbmxpbmVXZXN0QmxvY2tTb3V0aCA9IG1h
a2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tLCBUZXh0RGlyZWN0
aW9uOjpSVEwpLAotICAgIElubGluZUVhc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFs
aXplcihXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRleHREaXJlY3Rpb246OkxUUiksCi0gICAg
SW5saW5lV2VzdEJsb2NrTm9ydGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2Rl
OjpCb3R0b21Ub1RvcCwgVGV4dERpcmVjdGlvbjo6UlRMKSwKLSAgICBJbmxpbmVTb3V0aEJsb2Nr
RWFzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBU
ZXh0RGlyZWN0aW9uOjpMVFIpLAotICAgIElubGluZVNvdXRoQmxvY2tXZXN0ID0gbWFrZVRleHRG
bG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQsIFRleHREaXJlY3Rpb246OlJU
TCksCi0gICAgSW5saW5lTm9ydGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdy
aXRpbmdNb2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVjdGlvbjo6TFRSKSwKLSAgICBJbmxpbmVO
b3J0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OlJpZ2h0
VG9MZWZ0LCBUZXh0RGlyZWN0aW9uOjpSVEwpCi19OwotCi1jb25zdGV4cHIgaW5saW5lIFRleHRG
bG93IG1ha2VUZXh0RmxvdyhXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRGbG93PihtYWtlVGV4dEZs
b3dJbml0YWxpemVyKHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pKTsKLX0KLQotY29uc3RleHByIHVu
c2lnbmVkIFRleHRGbG93UmV2ZXJzZWRNYXNrID0gMTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBUZXh0
Rmxvd0ZsaXBwZWRNYXNrID0gMjsKLWNvbnN0ZXhwciB1bnNpZ25lZCBUZXh0Rmxvd1ZlcnRpY2Fs
TWFzayA9IDQ7Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1JldmVyc2VkVGV4dEZsb3coVGV4
dEZsb3cgdGV4dGZsb3cpCi17Ci0gICAgcmV0dXJuIHRleHRmbG93ICYgVGV4dEZsb3dSZXZlcnNl
ZE1hc2s7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0ZsaXBwZWRUZXh0RmxvdyhUZXh0
RmxvdyB0ZXh0ZmxvdykKLXsKLSAgICByZXR1cm4gdGV4dGZsb3cgJiBUZXh0Rmxvd0ZsaXBwZWRN
YXNrOwotfQotCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFRleHRGbG93KFRleHRG
bG93IHRleHRmbG93KQotewotICAgIHJldHVybiB0ZXh0ZmxvdyAmIFRleHRGbG93VmVydGljYWxN
YXNrOwotfQotCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgaXNGbGlwcGVkTGluZXNUZXh0RmxvdyhU
ZXh0RmxvdyB0ZXh0ZmxvdykKLXsKLSAgICByZXR1cm4gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZs
b3cpICE9IGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0Zmxvdyk7Ci19Ci0KLS8vIExpbmVzIGhhdmUg
dmVydGljYWwgb3JpZW50YXRpb247IG1vZGVzIHZlcnRpY2FsLWxyIG9yIHZlcnRpY2FsLXJsLgot
Y29uc3RleHByIGlubGluZSBib29sIGlzVmVydGljYWxXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gaXNWZXJ0aWNhbFRleHRGbG93KG1ha2VUZXh0Rmxv
dyh3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Ci19Ci0KLS8vIEJsb2NrIHByb2dy
ZXNzaW9uIGluY3JlYXNlcyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIG5vcm1hbDsgbW9k
ZXMgdmVydGljYWwtcmwgb3IgaG9yaXpvbnRhbC1idC4KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBp
c0ZsaXBwZWRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICByZXR1
cm4gaXNGbGlwcGVkVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0
aW9uOjpMVFIpKTsKLX0KLQotLy8gTGluZXMgaGF2ZSBob3Jpem9udGFsIG9yaWVudGF0aW9uOyBt
b2RlcyBob3Jpem9udGFsLXRiIG9yIGhvcml6b250YWwtYnQuCi1jb25zdGV4cHIgaW5saW5lIGJv
b2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0g
ICAgcmV0dXJuICFpc1ZlcnRpY2FsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotfQotCi0vLyBC
b3R0b20gb2YgdGhlIGxpbmUgb2NjdXJzIGVhcmxpZXIgaW4gdGhlIGJsb2NrOyBtb2RlcyB2ZXJ0
aWNhbC1sciBvciBob3Jpem9udGFsLWJ0LgotY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBl
ZExpbmVzV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJu
IGlzRmxpcHBlZExpbmVzVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBUZXh0RGly
ZWN0aW9uOjpMVFIpKTsKLX0KLQotZW51bSBjbGFzcyBMb2dpY2FsQm94U2lkZSA6IHVpbnQ4X3Qg
ewotICAgIEJsb2NrU3RhcnQsCi0gICAgSW5saW5lRW5kLAotICAgIEJsb2NrRW5kLAotICAgIElu
bGluZVN0YXJ0Ci19OwotCi1lbnVtIGNsYXNzIEJveFNpZGUgOiB1aW50OF90IHsKLSAgICBUb3As
Ci0gICAgUmlnaHQsCi0gICAgQm90dG9tLAotICAgIExlZnQKLX07Ci0KLWVudW0gY2xhc3MgTG9n
aWNhbEJveENvcm5lciA6IHVpbnQ4X3QgewotICAgIFN0YXJ0U3RhcnQsCi0gICAgU3RhcnRFbmQs
Ci0gICAgRW5kU3RhcnQsCi0gICAgRW5kRW5kCi19OwotCi0vLyBUaGUgbWFwcGluZyBpcyB3aXRo
IHRoZSBmaXJzdCBzdGFydC9lbmQgZ2l2aW5nIHRoZSBibG9jayBheGlzIHNpZGUsCi0vLyBhbmQg
dGhlIHNlY29uZCB0aGUgaW5saW5lLWF4aXMgc2lkZSwgaS5lLiBwYXR0ZXJuZWQgYXMgJ2JvcmRl
ci1ibG9jay1pbmxpbmUtcmFkaXVzJy4KLWVudW0gY2xhc3MgQm94Q29ybmVyIDogdWludDhfdCB7
Ci0gICAgVG9wTGVmdCwKLSAgICBUb3BSaWdodCwKLSAgICBCb3R0b21SaWdodCwKLSAgICBCb3R0
b21MZWZ0Ci19OwotCi1lbnVtIGNsYXNzIExvZ2ljYWxCb3hBeGlzIDogdWludDhfdCB7Ci0gICAg
SW5saW5lLAotICAgIEJsb2NrCi19OwotCi1lbnVtIGNsYXNzIEJveEF4aXMgOiB1aW50OF90IHsK
LSAgICBIb3Jpem9udGFsLAotICAgIFZlcnRpY2FsCi19OwotCi1jb25zdGV4cHIgc3RkOjphcnJh
eTxCb3hTaWRlLCA0PiBhbGxCb3hTaWRlcyA9IHsgQm94U2lkZTo6VG9wLCBCb3hTaWRlOjpSaWdo
dCwgQm94U2lkZTo6Qm90dG9tLCBCb3hTaWRlOjpMZWZ0IH07Ci0KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBpc0hvcml6b250YWxQaHlzaWNhbFNpZGUoQm94U2lkZSBwaHlzaWNhbFNpZGUpCi17Ci0g
ICAgcmV0dXJuIHBoeXNpY2FsU2lkZSA9PSBCb3hTaWRlOjpMZWZ0IHx8IHBoeXNpY2FsU2lkZSA9
PSBCb3hTaWRlOjpSaWdodDsKLX0KLQotY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1pcnJvclBo
eXNpY2FsU2lkZShCb3hTaWRlIHBoeXNpY2FsU2lkZSkKLXsKLSAgICAvLyB0b3AgPC0+IGJvdHRv
bSBhbmQgbGVmdCA8LT4gcmlnaHQgY29udmVyc2lvbgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
b3hTaWRlPigoc3RhdGljX2Nhc3Q8aW50PihwaHlzaWNhbFNpZGUpICsgMikgJSA0KTsKLX0KLQot
Y29uc3RleHByIGlubGluZSBCb3hTaWRlIHJvdGF0ZVBoeXNpY2FsU2lkZShCb3hTaWRlIHBoeXNp
Y2FsU2lkZSkKLXsKLSAgICAvLyB0b3AgPC0+IGxlZnQgYW5kIHJpZ2h0IDwtPiBib3R0b20gY29u
dmVyc2lvbgotICAgIGJvb2wgaG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250YWxQaHlzaWNhbFNp
ZGUocGh5c2ljYWxTaWRlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZT4oKHN0YXRp
Y19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIChob3Jpem9udGFsU2lkZSA/IDEgOiAzKSkgJSA0
KTsKLX0KLQotY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNh
bFNpZGUoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKQotewot
ICAgIEJveFNpZGUgcGh5c2ljYWxTaWRlID0gc3RhdGljX2Nhc3Q8Qm94U2lkZT4obG9naWNhbFNp
ZGUpOwotICAgIGJvb2wgaG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250YWxQaHlzaWNhbFNpZGUo
cGh5c2ljYWxTaWRlKTsKLQotICAgIGlmIChpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpKQot
ICAgICAgICBwaHlzaWNhbFNpZGUgPSByb3RhdGVQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsK
LQotICAgIGlmICgoaG9yaXpvbnRhbFNpZGUgJiYgaXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93
KSkgfHwgKCFob3Jpem9udGFsU2lkZSAmJiBpc0ZsaXBwZWRUZXh0Rmxvdyh0ZXh0ZmxvdykpKQot
ICAgICAgICBwaHlzaWNhbFNpZGUgPSBtaXJyb3JQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsK
LQotICAgIHJldHVybiBwaHlzaWNhbFNpZGU7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgQm94U2lk
ZSBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBM
b2dpY2FsQm94U2lkZSBsb2dpY2FsU2lkZSkKLXsKLSAgICAvLyBTZXQgdGhlIGRpcmVjdGlvbiBz
dWNoIHRoYXQgc2lkZSBpcyBtaXJyb3JlZCBpZiBpc0ZsaXBwZWRXcml0aW5nTW9kZSgpIGlzIHRy
dWUKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGlzRmxpcHBlZFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKLSAg
ICByZXR1cm4gbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGlu
Z01vZGUsIGRpcmVjdGlvbiksIGxvZ2ljYWxTaWRlKTsKLX0KLQotY29uc3RleHByIGlubGluZSBC
b3hDb3JuZXIgbWFwTG9naWNhbENvcm5lclRvUGh5c2ljYWxDb3JuZXIoVGV4dEZsb3cgdGV4dGZs
b3csIExvZ2ljYWxCb3hDb3JuZXIgbG9naWNhbEJveENvcm5lcikKLXsKLSAgICBib29sIGlzQmxv
Y2tTdGFydCA9IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJveENvcm5lcjo6U3RhcnRTdGFy
dCB8fCBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0RW5kOwotICAg
IGJvb2wgaXNJbmxpbmVTdGFydCA9IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJveENvcm5l
cjo6U3RhcnRTdGFydCB8fCBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6OkVu
ZFN0YXJ0OwotICAgIGlmIChpc0Jsb2NrU3RhcnQgPT0gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZs
b3cpKSB7Ci0gICAgICAgIGlmIChpc0lubGluZVN0YXJ0ID09IGlzUmV2ZXJzZWRUZXh0Rmxvdyh0
ZXh0ZmxvdykpCi0gICAgICAgICAgICByZXR1cm4gQm94Q29ybmVyOjpCb3R0b21SaWdodDsKLSAg
ICB9IGVsc2UgaWYgKGlzSW5saW5lU3RhcnQgIT0gaXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93
KSkKLSAgICAgICAgcmV0dXJuIEJveENvcm5lcjo6VG9wTGVmdDsKLSAgICBpZiAoaXNCbG9ja1N0
YXJ0ID09IGlzRmxpcHBlZExpbmVzVGV4dEZsb3codGV4dGZsb3cpKQotICAgICAgICByZXR1cm4g
Qm94Q29ybmVyOjpCb3R0b21MZWZ0OwotICAgIHJldHVybiBCb3hDb3JuZXI6OlRvcFJpZ2h0Owot
fQotCi1jb25zdGV4cHIgaW5saW5lIEJveEF4aXMgbWFwTG9naWNhbEF4aXNUb1BoeXNpY2FsQXhp
cyhUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveEF4aXMgbG9naWNhbEF4aXMpCi17Ci0gICAg
aWYgKGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0ZmxvdykpCi0gICAgICAgIHJldHVybiBsb2dpY2Fs
QXhpcyA9PSBMb2dpY2FsQm94QXhpczo6SW5saW5lID8gQm94QXhpczo6VmVydGljYWwgOiBCb3hB
eGlzOjpIb3Jpem9udGFsOwotICAgIHJldHVybiBsb2dpY2FsQXhpcyA9PSBMb2dpY2FsQm94QXhp
czo6SW5saW5lID8gQm94QXhpczo6SG9yaXpvbnRhbCA6IEJveEF4aXM6OlZlcnRpY2FsOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjY2OTZlNGI3NDAzNThjMjVmMjJjYmJhZWRiMDE4NWU0YWU0ZjgzYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5o
IgotCi0jaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9UaW55TFJVQ2FjaGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElD
VS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgVGlueUxSVUNhY2hl
UG9saWN5PEF0b21TdHJpbmcsIFJldGFpblB0cjxDRkxvY2FsZVJlZj4+Ci17Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFRpbnlMUlVDYWNoZTxBdG9tU3RyaW5nLCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+
PiYgY2FjaGUoKQotICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbnlMUlVD
YWNoZTxBdG9tU3RyaW5nLCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+Pj4gY2FjaGU7Ci0gICAgICAg
IHJldHVybiBjYWNoZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0tleU51bGwoY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2Nh
bGVJZGVudGlmaWVyLmlzTnVsbCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0ZM
b2NhbGVSZWY+IGNyZWF0ZVZhbHVlRm9yTnVsbEtleSgpCi0gICAgewotICAgICAgICAvLyBDRiBo
eXBoZW5hdGlvbiBmdW5jdGlvbnMgdXNlIGxvY2FsZSAocmVnaW9uYWwgZm9ybWF0cykgbGFuZ3Vh
Z2UsIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWF0Y2ggcHJpbWFyeSBVSSBsYW5ndWFnZSwK
LSAgICAgICAgLy8gc28gd2UgY2FuJ3QgdXNlIGRlZmF1bHQgbG9jYWxlIGhlcmUuIFNlZSA8cmRh
cjovL3Byb2JsZW0vMTQ4OTc2NjQ+LgotICAgICAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGxv
Y2FsZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVmYXVs
dExhbmd1YWdlKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgICAgICByZXR1cm4gQ0ZT
dHJpbmdJc0h5cGhlbmF0aW9uQXZhaWxhYmxlRm9yTG9jYWxlKGxvY2FsZS5nZXQoKSkgPyBsb2Nh
bGUgOiBudWxscHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+
IGNyZWF0ZVZhbHVlRm9yS2V5KGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi0g
ICAgewotICAgICAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGxvY2FsZSA9IGFkb3B0Q0YoQ0ZM
b2NhbGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbG9jYWxlSWRlbnRpZmllci5zdHJpbmco
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIENGU3RyaW5nSXNI
eXBoZW5hdGlvbkF2YWlsYWJsZUZvckxvY2FsZShsb2NhbGUuZ2V0KCkpID8gbG9jYWxlIDogbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQXRvbVN0cmluZyBjcmVhdGVLZXlGb3JTdG9yYWdl
KGNvbnN0IEF0b21TdHJpbmcmIGtleSkgeyByZXR1cm4ga2V5OyB9Ci19OwotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWJvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21TdHJpbmcmIGxvY2Fs
ZUlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIFRpbnlMUlVDYWNoZVBvbGljeTxBdG9tU3RyaW5n
LCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+Pjo6Y2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7
Ci19Ci0KLXNpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyB0ZXh0LCBzaXplX3Qg
YmVmb3JlSW5kZXgsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi17Ci0gICAg
UmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBUaW55TFJVQ2FjaGVQb2xpY3k8QXRvbVN0
cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj46OmNhY2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZp
ZXIpOwotCi0gICAgQ0ZPcHRpb25GbGFncyBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmllcyA9IDE7
Ci0gICAgQ0ZJbmRleCByZXN1bHQgPSBDRlN0cmluZ0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZv
cmVJbmRleCh0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSwgYmVmb3Jl
SW5kZXgsIENGUmFuZ2VNYWtlKDAsIHRleHQubGVuZ3RoKCkpLCBzZWFyY2hBY3Jvc3NXb3JkQm91
bmRhcmllcywgbG9jYWxlLmdldCgpLCBudWxscHRyKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IGtD
Rk5vdEZvdW5kID8gMCA6IHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5NDAwOTUxN2RhMjdhZjMxMjNhZmEwNmQ0
YjdhMWZjNTJjNTUyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGV4dEJvdW5kYXJpZXMuaCIKLQotI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZTdHJp
bmdUb2tlbml6ZXIuaD4KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8dW5pY29kZS91YnJrLmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx1
bmljb2RlL3VzdHJpbmcuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+Ci0jaW1wb3J0
IDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgotI2ltcG9ydCA8d3RmL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oPgotI2ltcG9ydCA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgIVVTRShBUFBLSVQpCi0KLXN0
YXRpYyBib29sIGlzU2tpcENoYXJhY3RlcihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIGMgPT0g
MHhBMCB8fCBjID09ICdcbicgfHwgYyA9PSAnLicgfHwgYyA9PSAnLCcgfHwgYyA9PSAnIScgIHx8
IGMgPT0gJz8nIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IHVfaXNzcGFjZShjKTsKLX0KLQot
c3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKLXsKLSAgICByZXR1
cm4gYyA9PSAweEEwIHx8IGMgPT0gJ1xuJyB8fCB1X2lzc3BhY2UoYyk7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoVUNoYXIzMiBjKQotewotICAgIC8vIEFtcGVy
c2FuZCBpcyBhbiBleGNlcHRpb24gYWRkZWQgdG8gdHJlYXQgQVQmVCBhcyBhIHNpbmdsZSB3b3Jk
IChzZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjIyNjQ+KS4KLSAgICByZXR1cm4gIUNGQ2hhcmFjdGVy
U2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZD
aGFyYWN0ZXJTZXRBbHBoYU51bWVyaWMpLCBjKSAmJiBjICE9ICcmJzsKLX0KLQotc3RhdGljIGJv
b2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQotewotICAgIHJldHVybiBDRkNoYXJhY3Rl
clNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NG
Q2hhcmFjdGVyU2V0U3ltYm9sKSwgYyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQW1iaWd1b3VzQm91
bmRhcnlDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gVGhlc2UgYXJlIGNo
YXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNhbiBhcHBl
YXIgd2l0aGluIHdvcmRzLgotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0
ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5j
dHVhdGlvbkdlcnNoYXlpbTsKLX0KLQotc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2Vu
aXplckZvclN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCi17Ci0gICAgc3RhdGljIGF1dG8gbG9jYWxl
ID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgY29uc3QgY2hhciogbG9jYWxJRCA9
IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpOwotICAgICAgICBhdXRvIGN1cnJlbnRMb2NhbGVJ
RCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGxvY2FsSUQpLCBzdHJsZW4obG9j
YWxJRCksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7
Ci0gICAgICAgIHJldHVybiBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGN1cnJlbnRMb2NhbGVJRC5nZXQoKSkpOwotICAgIH0oKSk7Ci0KLSAgICBpZiAoIWxvY2Fs
ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDRlJhbmdlIGVudGlyZVJh
bmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSk7ICAgIAotCi0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1Rva2VuaXplclJlZj4+IHRv
a2VuaXplcjsKLSAgICBpZiAoIXRva2VuaXplci5nZXQoKSkKLSAgICAgICAgdG9rZW5pemVyLmdl
dCgpID0gYWRvcHRDRihDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzdHIsIGVudGlyZVJhbmdlLCBrQ0ZTdHJpbmdUb2tlbml6ZXJVbml0V29yZEJvdW5kYXJ5LCBs
b2NhbGUuZ2V0KCkuZ2V0KCkpKTsKLSAgICBlbHNlCi0gICAgICAgIENGU3RyaW5nVG9rZW5pemVy
U2V0U3RyaW5nKHRva2VuaXplci5nZXQoKS5nZXQoKSwgc3RyLCBlbnRpcmVSYW5nZSk7Ci0gICAg
cmV0dXJuIHRva2VuaXplci5nZXQoKS5nZXQoKTsKLX0KLQotLy8gU2ltcGxlIGNhc2U6IEEgd29y
ZCBpcyBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzIGRlbGltaXRlZCBieSBhIHNwZWNpYWwgc2V0IG9m
IHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgotc3RhdGljIHZvaWQgZmluZFNpbXBsZVdvcmRC
b3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBl
bmQpCi17Ci0gICAgQVNTRVJUKHBvc2l0aW9uID49IDApOwotICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSk7Ci0KLSAgICB1bnNpZ25lZCBz
dGFydFBvcyA9IHBvc2l0aW9uOwotICAgIHdoaWxlIChzdGFydFBvcyA+IDApIHsKLSAgICAgICAg
aW50IGkgPSBzdGFydFBvczsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVTdGFydFBv
czsKLSAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3Mp
OwotICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJCZWZvcmVT
dGFydFBvcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChpID49IDApOwotICAgICAgICAgICAgaWYg
KCFpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIWlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3MpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckJlZm9yZUJlZm9y
ZVN0YXJ0UG9zOwotICAgICAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVm
b3JlQmVmb3JlU3RhcnRQb3MpOwotICAgICAgICAgICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFy
YWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIFUxNl9CQUNLXzEodGV4dCwgMCwgc3RhcnRQb3MpOwot
ICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBlbmRQb3MgPSBwb3NpdGlvbjsKLSAgICB3aGlsZSAo
ZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgewotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAg
ICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7
Ci0gICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGkgPSBlbmRQb3M7Ci0gICAgICAgICAgICBVMTZfRldEXzEodGV4
dCwgaSwgdGV4dC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8PSB0ZXh0Lmxlbmd0
aCgpKTsKLSAgICAgICAgICAgIGlmIChpID09IHRleHQubGVuZ3RoKCkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyRW5kUG9zOwotICAg
ICAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSwgY2hhcmFjdGVyQWZ0ZXJF
bmRQb3MpOwotICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKGNo
YXJhY3RlcikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoaXNXb3Jk
RGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRlckVuZFBvcykpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBvcywgdGV4
dC5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIHRleHQgbWF5IGNvbnNpc3Qgb2YgYWxs
IGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3IgYSBzZXJpZXMgb2YgZW1v
amkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCi0gICAgLy8gbWFrZXMgbm8gc2Vuc2Ug
KGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KCkgYmVoYXZpb3IpLgot
ICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgewot
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQ
b3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7Ci0gICAgICAgIGlmIChpc1N5bWJvbENoYXJh
Y3RlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBvcywgdGV4
dC5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgKnN0YXJ0ID0gc3RhcnRQb3M7Ci0gICAgKmVuZCA9
IGVuZFBvczsKLX0KLQotLy8gQ29tcGxleCBjYXNlOiB1c2UgQ0ZTdHJpbmdUb2tlbml6ZXIgdG8g
ZmluZCB3b3JkIGJvdW5kYXJ5Lgotc3RhdGljIHZvaWQgZmluZENvbXBsZXhXb3JkQm91bmRhcnko
U3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQotewot
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2hhclN0cmluZyA9IHRleHQuY3JlYXRlQ0ZTdHJp
bmdXaXRob3V0Q29weWluZygpOwotCi0gICAgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYgdG9rZW5pemVy
ID0gdG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcuZ2V0KCkpOwotICAgIGlmICghdG9rZW5p
emVyKSB7Ci0gICAgICAgIC8vIEVycm9yIGNyZWF0aW5nIHRva2VuaXplciwgc28ganVzdCB1c2Ug
c2ltcGxlIGZ1bmN0aW9uLgotICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KHRleHQsIHBv
c2l0aW9uLCBzdGFydCwgZW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENGU3Ry
aW5nVG9rZW5pemVyVG9rZW5UeXBlICB0b2tlbiA9IENGU3RyaW5nVG9rZW5pemVyR29Ub1Rva2Vu
QXRJbmRleCh0b2tlbml6ZXIsIHBvc2l0aW9uKTsKLSAgICBpZiAodG9rZW4gPT0ga0NGU3RyaW5n
VG9rZW5pemVyVG9rZW5Ob25lKSB7Ci0gICAgICAgIC8vIE5vIHRva2VuIGZvdW5kOiBzZWxlY3Qg
ZW50aXJlIGJsb2NrLgotICAgICAgICAvLyBOQjogSSBuZXZlciBoaXQgdGhpcyBzZWN0aW9uIGlu
IGFsbCBteSB0ZXN0aW5nLgotICAgICAgICAqc3RhcnQgPSAwOwotICAgICAgICAqZW5kID0gdGV4
dC5sZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENGUmFuZ2UgcmVzdWx0
ID0gQ0ZTdHJpbmdUb2tlbml6ZXJHZXRDdXJyZW50VG9rZW5SYW5nZSh0b2tlbml6ZXIpOwotICAg
ICpzdGFydCA9IHJlc3VsdC5sb2NhdGlvbjsKLSAgICAqZW5kID0gcmVzdWx0LmxvY2F0aW9uICsg
cmVzdWx0Lmxlbmd0aDsKLX0KLQotI2VuZGlmCi0KLXZvaWQgZmluZFdvcmRCb3VuZGFyeShTdHJp
bmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCi17Ci0jaWYg
VVNFKEFQUEtJVCkKLSAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0LmNyZWF0ZU5TU3RyaW5nV2l0
aG91dENvcHlpbmcoKS5nZXQoKV0pOwotICAgIE5TUmFuZ2UgcmFuZ2UgPSBbYXR0cmlidXRlZFN0
cmluZyBkb3VibGVDbGlja0F0SW5kZXg6c3RkOjptaW48dW5zaWduZWQ+KHBvc2l0aW9uLCB0ZXh0
Lmxlbmd0aCgpIC0gMSldOwotICAgICpzdGFydCA9IHJhbmdlLmxvY2F0aW9uOwotICAgICplbmQg
PSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKLSNlbHNlCi0gICAgdW5zaWduZWQgcG9z
ID0gcG9zaXRpb247Ci0gICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCgpICYmIHBvcykKLSAgICAg
ICAgLS1wb3M7Ci0KLSAgICAvLyBGb3IgY29tcGxleCB0ZXh0IChUaGFpLCBKYXBhbmVzZSwgQ2hp
bmVzZSksIHZpc2libGVfdW5pdHMgd2lsbCBwYXNzIHRoZSB0ZXh0IGluIGFzIGEgCi0gICAgLy8g
c2luZ2xlIGNvbnRpZ3VvdXMgcnVuIG9mIGNoYXJhY3RlcnMsIHByb3ZpZGluZyBhcyBtdWNoIGNv
bnRleHQgYXMgaXMgcG9zc2libGUuCi0gICAgLy8gV2Ugb25seSBuZWVkIG9uZSBjaGFyYWN0ZXIg
dG8gZGV0ZXJtaW5lIGlmIHRoZSB0ZXh0IGlzIGNvbXBsZXguCi0gICAgVUNoYXIzMiBjaDsKLSAg
ICB1bnNpZ25lZCBpID0gcG9zOwotICAgIFUxNl9ORVhUKHRleHQsIGksIHRleHQubGVuZ3RoKCks
IGNoKTsKLSAgICBib29sIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFy
eShjaCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpbXByb3ZlcyBvdXIgd29yZCBib3Vu
ZGFyeSBiZWhhdmlvciwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZ28gZmFyIGVub3VnaC4KLSAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg4NTM5NTE+IFRha2UgY29tcGxleCB3b3JkIGJvdW5kYXJ5
IGZpbmRpbmcgcGF0aCB3aGVuIG5lY2Vzc2FyeQotICAgIGlmICghaXNDb21wbGV4KSB7Ci0gICAg
ICAgIC8vIENoZWNrIGFnYWluIGZvciBjb21wbGV4IHRleHQsIGF0IHRoZSBzdGFydCBvZiB0aGUg
cnVuLgotICAgICAgICBpID0gMDsKLSAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5n
dGgoKSwgY2gpOwotICAgICAgICBpc0NvbXBsZXggPSByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91
bmRhcnkoY2gpOwotICAgIH0KLQotICAgIGlmIChpc0NvbXBsZXgpCi0gICAgICAgIGZpbmRDb21w
bGV4V29yZEJvdW5kYXJ5KHRleHQsIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKLSAgICBlbHNlCi0g
ICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQp
OwotCi0jZGVmaW5lIExPR19XT1JEX0JSRUFLIDAKLSNpZiBMT0dfV09SRF9CUkVBSwotICAgIGF1
dG8gdW5pU3RyaW5nID0gdGV4dC5jcmVhdGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Ci0gICAg
YXV0byBmb3VuZFdvcmQgPSB0ZXh0LnN1YnN0cmluZygqc3RhcnQsICplbmQgLSAqc3RhcnQpLmNy
ZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKLSAgICBOU0xvZyhAIiVzX0JSRUFLICclQCcg
KCVkLCVkKSBpbiAnJUAnICglcCkgYXQgJWQsIGxlbmd0aD0lZCIsIGlzQ29tcGxleCA/ICJDT01Q
TEVYIiA6ICJTSU1QTEUiLCBmb3VuZFdvcmQuZ2V0KCksICpzdGFydCwgKmVuZCwgdW5pU3RyaW5n
LmdldCgpLCB1bmlTdHJpbmcuZ2V0KCksIHBvc2l0aW9uLCB0ZXh0Lmxlbmd0aCgpKTsKLSNlbmRp
ZgotICAgIAotI2VuZGlmCi19Ci0KLXZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3
IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBlbmQpCi17Ci0gICAgaW50IHN0YXJ0OwotICAgIGZp
bmRXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sICZzdGFydCwgZW5kKTsKLX0KLQotaW50IGZp
bmROZXh0V29yZEZyb21JbmRleChTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgYm9vbCBm
b3J3YXJkKQoteyAgIAotI2lmIFVTRShBUFBLSVQpCi0gICAgU3RyaW5nIHRleHRXaXRob3V0VW5w
YWlyZWRTdXJyb2dhdGVzOwotICAgIGlmIChoYXNVbnBhaXJlZFN1cnJvZ2F0ZSh0ZXh0KSkgewot
ICAgICAgICB0ZXh0V2l0aG91dFVucGFpcmVkU3Vycm9nYXRlcyA9IHJlcGxhY2VVbnBhaXJlZFN1
cnJvZ2F0ZXNXaXRoUmVwbGFjZW1lbnRDaGFyYWN0ZXIodGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCkpOwotICAgICAgICB0ZXh0ID0gdGV4dFdpdGhvdXRVbnBhaXJlZFN1cnJvZ2F0ZXM7Ci0g
ICAgfQotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29w
eWluZygpLmdldCgpXSk7Ci0gICAgcmV0dXJuIFthdHRyaWJ1dGVkU3RyaW5nIG5leHRXb3JkRnJv
bUluZGV4OnBvc2l0aW9uIGZvcndhcmQ6Zm9yd2FyZF07Ci0jZWxzZQotICAgIC8vIFRoaXMgdmVy
eSBsaWtlbHkgd29uJ3QgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGUgbm9uLWlQaG9uZSB2ZXJzaW9u
LCBidXQgaXQgd29ya3MKLSAgICAvLyBmb3IgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0IGlzIHVz
ZWQgb24gaVBob25lLCBhbmQgaW4gdGhlIGZ1dHVyZSB3aWxsIGJlCi0gICAgLy8gdHVuZWQgdG8g
aW1wcm92ZSB0aGUgaVBob25lLXNwZWNpZmljIGJlaGF2aW9yIGZvciB0aGUga2V5Ym9hcmQgYW5k
IHRleHQgZWRpdGluZy4KLSAgICBpbnQgcG9zID0gcG9zaXRpb247Ci0gICAgVUJyZWFrSXRlcmF0
b3IqIGJvdW5kYXJ5ID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCk7Ci0gICAgaWYgKGJvdW5kYXJ5
KSB7Ci0gICAgICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAgICAgcG9zID0gdWJya19mb2xsb3dpbmcoYm91bmRhcnksIHBvcyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBvcyA9PSBVQlJLX0RPTkUpCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IHRleHQu
bGVuZ3RoKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9z
KSA8IHRleHQubGVuZ3RoKCkgJiYgKHBvcyA9PSAwIHx8ICFpc1NraXBDaGFyYWN0ZXIodGV4dFtw
b3MgLSAxXSkpICYmIGlzU2tpcENoYXJhY3Rlcih0ZXh0W3Bvc10pKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBwb3MgPSB1YnJr
X3ByZWNlZGluZyhib3VuZGFyeSwgcG9zKTsKLSAgICAgICAgICAgICAgICBpZiAocG9zID09IFVC
UktfRE9ORSkKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gMDsKLSAgICAgICAgICAgIH0gd2hp
bGUgKHBvcyA+IDAgJiYgaXNTa2lwQ2hhcmFjdGVyKHRleHRbcG9zXSkgJiYgIWlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcih0ZXh0W3BvcyAtIDFdKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHBvczsKLSNlbmRpZgotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI1ZGMxNDJkYjFhMzgxMzM2NzZiNWU4MWNjNGFkMjUwZDBiY2YwODYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGV4dENoZWNraW5n
LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5TVGV4dENoZWNraW5nVHlwZXMgbnNUZXh0
Q2hlY2tpbmdUeXBlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gdHlwZXMpCi17Ci0gICAg
TlNUZXh0Q2hlY2tpbmdUeXBlcyBtYXNrID0gMDsKLSAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKQotICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nOwotICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpH
cmFtbWFyKSkKLSAgICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyOwotICAg
IGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkKLSAgICAgICAgbWFz
ayB8PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rOwotICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpRdW90ZSkpCi0gICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBl
UXVvdGU7Ci0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKQot
ICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZURhc2g7Ci0gICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkKLSAgICAgICAgbWFzayB8PSBO
U1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDsKLSAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpCi0gICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tp
bmdUeXBlQ29ycmVjdGlvbjsKLSAgICByZXR1cm4gbWFzazsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Jp
ZGlSdW4uY3BwCmluZGV4IDYxYWZlZWUzNDRiYjlhMTM3YWQ2N2UwOGIwNzk1Y2ZlZjQ4OTcxNjEu
LmM5MzMzYmQyZmUxYzgzYjQ3Njg1MTUyNTgwZmRhMDk5Y2JhNDE2NDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQmlkaVJ1bi5jcHAKQEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIs
IGJpZGlSdW5Db3VudGVyLCAoIkJpZGlSdW4iKSk7CiAKLUJpZGlSdW46OkJpZGlSdW4odW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEJpZGlDb250
ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXIpCi0gICAgOiBCaWRpQ2hhcmFjdGVyUnVu
KHN0YXJ0LCBzdG9wLCBjb250ZXh0LCBkaXIpCitCaWRpUnVuOjpCaWRpUnVuKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBQQUw6OkJpZGlDb250
ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXIpCisgICAgOiBQQUw6OkJpZGlDaGFyYWN0
ZXJSdW4oc3RhcnQsIHN0b3AsIGNvbnRleHQsIGRpcikKICAgICAsIG1fcmVuZGVyZXIocmVuZGVy
ZXIpCiAgICAgLCBtX2JveChudWxscHRyKQogewpAQCAtNTMsOCArNTMsOCBAQCBCaWRpUnVuOjp+
QmlkaVJ1bigpCiAKIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiBCaWRpUnVuOjp0YWtlTmV4dCgp
CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IG5leHQgPSBCaWRpQ2hh
cmFjdGVyUnVuOjp0YWtlTmV4dCgpOwotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIHJhdyA9IG5leHQu
cmVsZWFzZSgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+IG5l
eHQgPSBQQUw6OkJpZGlDaGFyYWN0ZXJSdW46OnRha2VOZXh0KCk7CisgICAgUEFMOjpCaWRpQ2hh
cmFjdGVyUnVuKiByYXcgPSBuZXh0LnJlbGVhc2UoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmlk
aVJ1bj4gcmVzdWx0ID0gc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+KHN0YXRpY19jYXN0PEJpZGlS
dW4qPihyYXcpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRp
UnVuLmgKaW5kZXggZWQ3NzQ1ZDdkMWZhMGY0ZWIzNjVkYTUyYjZlZDgwYmZlZWRhNTYxZi4uODk2
NzA1ODBhNmYwZTI2OTMxZGRjNWFmZjlmN2E4NTU3ZmNlZTgxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQmlkaVJ1bi5oCkBAIC0yMywyMCArMjMsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlIDxwYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0jaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisKK25hbWVzcGFjZSBQQUwgeworY2xhc3Mg
QmlkaUNvbnRleHQ7Cit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRl
eHQ7CiBjbGFzcyBMZWdhY3lJbmxpbmVCb3g7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKLXN0cnVj
dCBCaWRpUnVuIDogQmlkaUNoYXJhY3RlclJ1biB7Ci0gICAgQmlkaVJ1bih1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgQmlkaUNvbnRleHQqLCBVQ2hhckRpcmVj
dGlvbik7CitzdHJ1Y3QgQmlkaVJ1biA6IFBBTDo6QmlkaUNoYXJhY3RlclJ1biB7CisgICAgQmlk
aVJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgUEFMOjpC
aWRpQ29udGV4dCosIFVDaGFyRGlyZWN0aW9uKTsKICAgICB+QmlkaVJ1bigpOwogCi0gICAgQmlk
aVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpZGlSdW4qPihCaWRpQ2hhcmFjdGVy
UnVuOjpuZXh0KCkpOyB9CisgICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PEJpZGlSdW4qPihQQUw6OkJpZGlDaGFyYWN0ZXJSdW46Om5leHQoKSk7IH0KICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QmlkaVJ1bj4gdGFrZU5leHQoKTsKICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KCkgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogICAgIExlZ2FjeUlubGluZUJveCogYm94KCkgeyBy
ZXR1cm4gbV9ib3g7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Cb3Jk
ZXJFZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQm9yZGVyRWRnZS5oCmluZGV4IGNm
YjJjOTExNzM1ZDcwODNmZDUzMzhhOWJhNWI3ZTUwYWFhOTJkNjguLmNjM2E3ODliODVjOTEwNzA5
MTc0MTZkMDM3MjZlMWE4ZmUxODRjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Cb3JkZXJFZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JvcmRlckVk
Z2UuaApAQCAtNzAsOCArNzAsOCBAQCB1c2luZyBCb3JkZXJFZGdlcyA9IFJlY3RFZGdlczxCb3Jk
ZXJFZGdlPjsKIEJvcmRlckVkZ2VzIGJvcmRlckVkZ2VzKGNvbnN0IFJlbmRlclN0eWxlJiwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUs
IGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsKIAogaW5saW5lIGJvb2wgZWRn
ZXNTaGFyZUNvbG9yKGNvbnN0IEJvcmRlckVkZ2UmIGZpcnN0RWRnZSwgY29uc3QgQm9yZGVyRWRn
ZSYgc2Vjb25kRWRnZSkgeyByZXR1cm4gZmlyc3RFZGdlLmNvbG9yKCkgPT0gc2Vjb25kRWRnZS5j
b2xvcigpOyB9Ci1pbmxpbmUgQm94U2lkZUZsYWcgZWRnZUZsYWdGb3JTaWRlKEJveFNpZGUgc2lk
ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZUZsYWc+KDEgPDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHNpZGUpKTsgfQotaW5saW5lIGJvb2wgaW5jbHVkZXNFZGdlKE9wdGlvblNldDxCb3hT
aWRlRmxhZz4gZmxhZ3MsIEJveFNpZGUgc2lkZSkgeyByZXR1cm4gZmxhZ3MuY29udGFpbnMoZWRn
ZUZsYWdGb3JTaWRlKHNpZGUpKTsgfQoraW5saW5lIEJveFNpZGVGbGFnIGVkZ2VGbGFnRm9yU2lk
ZShQQUw6OkJveFNpZGUgc2lkZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZUZsYWc+KDEg
PDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpZGUpKTsgfQoraW5saW5lIGJvb2wgaW5jbHVkZXNF
ZGdlKE9wdGlvblNldDxCb3hTaWRlRmxhZz4gZmxhZ3MsIFBBTDo6Qm94U2lkZSBzaWRlKSB7IHJl
dHVybiBmbGFncy5jb250YWlucyhlZGdlRmxhZ0ZvclNpZGUoc2lkZSkpOyB9CiAKIGlubGluZSBi
b29sIGluY2x1ZGVzQWRqYWNlbnRFZGdlcyhPcHRpb25TZXQ8Qm94U2lkZUZsYWc+IGZsYWdzKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdu
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50
LmNwcAppbmRleCAyMjNlMDI4ZjJhM2Y3NzdkOWIyMjBjMDkxYTMyZTFhYjA3YzAzMjFmLi5jODg0
YjliNzRlMGVjNmRiZDQ1Y2Y0YWNiOWRjNGU4OGFjM2Q2ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmNwcApAQCAtMTU4LDcgKzE1
OCw3IEBAIHZvaWQgR3JpZEJhc2VsaW5lQWxpZ25tZW50OjpjbGVhcihHcmlkQXhpcyBiYXNlbGlu
ZUF4aXMpCiAgICAgICAgIG1fY29sQXhpc0FsaWdubWVudENvbnRleHQuY2xlYXIoKTsKIH0KIAot
QmFzZWxpbmVHcm91cDo6QmFzZWxpbmVHcm91cChXcml0aW5nTW9kZSBibG9ja0Zsb3csIEl0ZW1Q
b3NpdGlvbiBjaGlsZFByZWZlcmVuY2UpCitCYXNlbGluZUdyb3VwOjpCYXNlbGluZUdyb3VwKFBB
TDo6V3JpdGluZ01vZGUgYmxvY2tGbG93LCBJdGVtUG9zaXRpb24gY2hpbGRQcmVmZXJlbmNlKQog
ICAgIDogbV9tYXhBc2NlbnQoMCksIG1fbWF4RGVzY2VudCgwKSwgbV9pdGVtcygpCiB7CiAgICAg
bV9ibG9ja0Zsb3cgPSBibG9ja0Zsb3c7CkBAIC0xNzMsMzYgKzE3MywzNiBAQCB2b2lkIEJhc2Vs
aW5lR3JvdXA6OnVwZGF0ZShjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGFzY2Vu
dCwgTGF5b3V0VW5pdAogICAgIH0KIH0KIAotYm9vbCBCYXNlbGluZUdyb3VwOjppc09wcG9zaXRl
QmxvY2tGbG93KFdyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3QKK2Jvb2wgQmFzZWxpbmVHcm91
cDo6aXNPcHBvc2l0ZUJsb2NrRmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGJsb2NrRmxvdykgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKLSAgICAg
ICAgcmV0dXJuIG1fYmxvY2tGbG93ID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKLSAgICBj
YXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tGbG93
ID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6
OkxlZnRUb1JpZ2h0OgorICAgICAgICByZXR1cm4gbV9ibG9ja0Zsb3cgPT0gUEFMOjpXcml0aW5n
TW9kZTo6UmlnaHRUb0xlZnQ7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVm
dDoKKyAgICAgICAgcmV0dXJuIG1fYmxvY2tGbG93ID09IFBBTDo6V3JpdGluZ01vZGU6OkxlZnRU
b1JpZ2h0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1ib29sIEJhc2VsaW5lR3JvdXA6OmlzT3J0
aG9nb25hbEJsb2NrRmxvdyhXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0Citib29sIEJhc2Vs
aW5lR3JvdXA6OmlzT3J0aG9nb25hbEJsb2NrRmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxv
dykgY29uc3QKIHsKICAgICBzd2l0Y2ggKGJsb2NrRmxvdykgewotICAgIGNhc2UgV3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOgotICAgICAgICByZXR1cm4gbV9ibG9ja0Zsb3cgIT0gV3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgotICAg
IGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgotICAgICAgICByZXR1cm4gbV9ibG9ja0Zs
b3cgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CisgICAgICAgIHJldHVybiBtX2Jsb2NrRmxvdyAhPSBQQUw6OldyaXRp
bmdNb2RlOjpUb3BUb0JvdHRvbTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1Jp
Z2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHJl
dHVybiBtX2Jsb2NrRmxvdyA9PSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIH0KIAotYm9vbCBCYXNlbGluZUdyb3VwOjppc0NvbXBhdGlibGUoV3JpdGlu
Z01vZGUgY2hpbGRCbG9ja0Zsb3csIEl0ZW1Qb3NpdGlvbiBjaGlsZFByZWZlcmVuY2UpIGNvbnN0
Citib29sIEJhc2VsaW5lR3JvdXA6OmlzQ29tcGF0aWJsZShQQUw6OldyaXRpbmdNb2RlIGNoaWxk
QmxvY2tGbG93LCBJdGVtUG9zaXRpb24gY2hpbGRQcmVmZXJlbmNlKSBjb25zdAogewogICAgIEFT
U0VSVChpc0Jhc2VsaW5lUG9zaXRpb24oY2hpbGRQcmVmZXJlbmNlKSk7CiAgICAgQVNTRVJUKHNp
emUoKSA+IDApOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQmFzZWxpbmVDb250ZXh0Ojp1cGRh
dGVTaGFyZWRHcm91cChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBJdGVtUG9zaXRpb24gcHJlCiAv
LyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzcyMQogQmFz
ZWxpbmVHcm91cCYgQmFzZWxpbmVDb250ZXh0OjpmaW5kQ29tcGF0aWJsZVNoYXJlZEdyb3VwKGNv
bnN0IFJlbmRlckJveCYgY2hpbGQsIEl0ZW1Qb3NpdGlvbiBwcmVmZXJlbmNlKQogewotICAgIFdy
aXRpbmdNb2RlIGJsb2NrRGlyZWN0aW9uID0gY2hpbGQuc3R5bGUoKS53cml0aW5nTW9kZSgpOwor
ICAgIFBBTDo6V3JpdGluZ01vZGUgYmxvY2tEaXJlY3Rpb24gPSBjaGlsZC5zdHlsZSgpLndyaXRp
bmdNb2RlKCk7CiAgICAgZm9yIChhdXRvJiBncm91cCA6IG1fc2hhcmVkR3JvdXBzKSB7CiAgICAg
ICAgIGlmIChncm91cC5pc0NvbXBhdGlibGUoYmxvY2tEaXJlY3Rpb24sIHByZWZlcmVuY2UpKQog
ICAgICAgICAgICAgcmV0dXJuIGdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdubWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWRCYXNlbGluZUFsaWdubWVudC5oCmluZGV4IDMwZTBlYzhmY2RiNDBhMGUzZjJlMDA3ZGE2
NjQ5MGJmOWQwNzdjNWUuLjZhNjdjNGY0YTU3ZTU3YmYwZmY4MmY2NDkyNTk4NjgxNDlkODQ2ZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyaWRMYXlvdXRGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2Rl
LmgiCisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKQEAgLTU4LDIxICs1OCwyMSBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJhc2VsaW5lQ29udGV4dDsKLSAg
ICBCYXNlbGluZUdyb3VwKFdyaXRpbmdNb2RlIGJsb2NrRmxvdywgSXRlbVBvc2l0aW9uIGNoaWxk
UHJlZmVyZW5jZSk7CisgICAgQmFzZWxpbmVHcm91cChQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxv
dywgSXRlbVBvc2l0aW9uIGNoaWxkUHJlZmVyZW5jZSk7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdo
ZXRoZXIgYSBiYXNlbGluZS1zaGFyaW5nIGdyb3VwIGlzIGNvbXBhdGlibGUgd2l0aCBhbiBpdGVt
LCBiYXNlZCBvbiBpdHMgJ2Jsb2NrLWZsb3cnIGFuZAogICAgIC8vICdiYXNlbGluZS1wcmVmZXJl
bmNlJwotICAgIGJvb2wgaXNDb21wYXRpYmxlKFdyaXRpbmdNb2RlLCBJdGVtUG9zaXRpb24pIGNv
bnN0OworICAgIGJvb2wgaXNDb21wYXRpYmxlKFBBTDo6V3JpdGluZ01vZGUsIEl0ZW1Qb3NpdGlv
bikgY29uc3Q7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJhc2VsaW5lLXNoYXJp
bmcgZ3JvdXAncyBhc3NvY2lhdGVkIGJsb2NrLWZsb3cgaXMgb3Bwb3NpdGUgKExSIHZzIFJMKSB0
byBwYXJ0aWN1bGFyCiAgICAgLy8gaXRlbSdzIHdyaXRpbmctbW9kZS4KLSAgICBib29sIGlzT3Bw
b3NpdGVCbG9ja0Zsb3coV3JpdGluZ01vZGUgYmxvY2tGbG93KSBjb25zdDsKKyAgICBib29sIGlz
T3Bwb3NpdGVCbG9ja0Zsb3coUEFMOjpXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0OwogCiAg
ICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBiYXNlbGluZS1zaGFyaW5nIGdyb3VwJ3MgYXNz
b2NpYXRlZCBibG9jay1mbG93IGlzIG9ydGhvZ29uYWwgKHZlcnRpY2FsIHZzIGhvcml6b250YWwp
CiAgICAgLy8gdG8gcGFydGljdWxhciBpdGVtJ3Mgd3JpdGluZy1tb2RlLgotICAgIGJvb2wgaXNP
cnRob2dvbmFsQmxvY2tGbG93KFdyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3Q7CisgICAgYm9v
bCBpc09ydGhvZ29uYWxCbG9ja0Zsb3coUEFMOjpXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0
OwogCi0gICAgV3JpdGluZ01vZGUgbV9ibG9ja0Zsb3c7CisgICAgUEFMOjpXcml0aW5nTW9kZSBt
X2Jsb2NrRmxvdzsKICAgICBJdGVtUG9zaXRpb24gbV9wcmVmZXJlbmNlOwogICAgIExheW91dFVu
aXQgbV9tYXhBc2NlbnQ7CiAgICAgTGF5b3V0VW5pdCBtX21heERlc2NlbnQ7CkBAIC0xNTMsNyAr
MTUzLDcgQEAgcHVibGljOgogCiAgICAgLy8gU2V0cyB0aGUgR3JpZCBDb250YWluZXIncyB3cml0
aW5nLW1vZGUgc28gdGhhdCB3ZSBjYW4gYXZvaWQgdGhlIGRlcGVuZGVjeSBvZiB0aGUgTGF5b3V0
R3JpZCBjbGFzcyBmb3IKICAgICAvLyBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ3JpZCBpdGVtIGlz
IG9ydGhvZ29uYWwgb3Igbm90LgotICAgIHZvaWQgc2V0QmxvY2tGbG93KFdyaXRpbmdNb2RlIGJs
b2NrRmxvdykgeyBtX2Jsb2NrRmxvdyA9IGJsb2NrRmxvdzsgfTsKKyAgICB2b2lkIHNldEJsb2Nr
RmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxvdykgeyBtX2Jsb2NrRmxvdyA9IGJsb2NrRmxv
dzsgfTsKIAogICAgIC8vIENsZWFyaW5nIHRoZSBCYXNlbGluZSBBbGlnbm1lbnQgY29udGV4dCBh
bmQgdGhlaXIgaW50ZXJuYWwgY2xhc3NlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLgogICAgIHZvaWQg
Y2xlYXIoR3JpZEF4aXMpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8QmFzZWxpbmVDb250ZXh0PiwgRGVm
YXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVu
c2lnbmVkPj4gQmFzZWxpbmVDb250ZXh0c01hcDsKIAogICAgIC8vIEdyaWQgQ29udGFpbmVyJ3Mg
V3JpdGluZ01vZGUsIHVzZWQgdG8gZGV0ZXJtaW5lIGdyaWQgaXRlbSdzIG9ydGhvZ29uYWxpdHku
Ci0gICAgV3JpdGluZ01vZGUgbV9ibG9ja0Zsb3c7CisgICAgUEFMOjpXcml0aW5nTW9kZSBtX2Js
b2NrRmxvdzsKICAgICBCYXNlbGluZUNvbnRleHRzTWFwIG1fcm93QXhpc0FsaWdubWVudENvbnRl
eHQ7CiAgICAgQmFzZWxpbmVDb250ZXh0c01hcCBtX2NvbEF4aXNBbGlnbm1lbnRDb250ZXh0Owog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCBmNmIx
MWQ5ZDYyOWFjZmJmYjg3ODYwY2I3YjhjZDI4Y2ViYzFiMThiLi41NDQzOWIzZjQ5OTc2OTM2ZmNm
ZGQwNDMwMGUwZWVjMGE0ZWFhOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCkBAIC0yMjcsOSArMjI3LDkgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNl
bGVjdGVkVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLVN0cmlu
ZyBIaXRUZXN0UmVzdWx0OjpzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25z
dAorU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcChQQUw6OlRleHREaXJlY3Rp
b24mIGRpcikgY29uc3QKIHsKLSAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGly
ID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgLy8gUmV0dXJuIHRoZSB0b29sIHRpcCBz
dHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9pbnQsIGlmIGFueS4gT25seSBtYXJrZXJzIGFz
c29jaWF0ZWQgd2l0aCBiYWQgZ3JhbW1hcgogICAgIC8vIGN1cnJlbnRseSBzdXBwbHkgc3RyaW5n
cywgYnV0IG1heWJlIHNvbWVkYXkgbWFya2VycyBhc3NvY2lhdGVkIHdpdGggbWlzc3BlbGxlZCB3
b3JkcyB3aWxsIGFsc28uCiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkKQEAgLTI1OCw5
ICsyNTgsOSBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdAog
ICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CiB9ICAgIAogICAgIAotU3RyaW5nIEhp
dFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKK1N0cmluZyBIaXRU
ZXN0UmVzdWx0Ojp0aXRsZShQQUw6OlRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKLSAgICBk
aXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFI7CiAgICAgLy8gRmluZCB0aGUgdGl0bGUgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIERPTSBu
b2RlLgogICAgIC8vIEZvciA8YXJlYT4gdGFncyBpbiBpbWFnZSBtYXBzLCB3YWxrIHRoZSB0cmVl
IGZvciB0aGUgPGFyZWE+LCBub3QgdGhlIDxpbWc+IHVzaW5nIGl0LgogICAgIGZvciAoTm9kZSog
dGl0bGVOb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsgdGl0bGVOb2RlID0gdGl0
bGVOb2RlLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpKSB7CkBAIC0yNzcsNyArMjc3LDcgQEAgU3Ry
aW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRy
dW5jYXRlZChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6
aW5uZXJUZXh0SWZUcnVuY2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAg
ICAgZm9yIChOb2RlKiB0cnVuY2F0ZWROb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRl
ZE5vZGU7IHRydW5jYXRlZE5vZGUgPSB0cnVuY2F0ZWROb2RlLT5wYXJlbnRJbkNvbXBvc2VkVHJl
ZSgpKSB7CiAgICAgICAgIGlmICghaXM8RWxlbWVudD4oKnRydW5jYXRlZE5vZGUpKQpAQCAtMjk5
LDcgKzI5OSw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChU
ZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkaXIgPSBU
ZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaAppbmRleCAzNWFhODBiNzQ0MDhiMzAwNDJmY2IzNDVmMmU0ZDE5NDJlMjI1OTE3Li40
NDFiZDdmNjI5NTBkMGY4MzY4YjM2MzJkNzMzMDhiNjAzN2EzNmY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTk0LDEwICs5NCwxMCBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc1NlbGVjdGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzcGVs
bGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzcGVsbGluZ1Rvb2xUaXAoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgU3Ry
aW5nIHJlcGxhY2VkU3RyaW5nKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRp
dGxlKFRleHREaXJlY3Rpb24mKSBjb25zdDsKLSAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVuY2F0
ZWQoVGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0aXRs
ZShQQUw6OlRleHREaXJlY3Rpb24mKSBjb25zdDsKKyAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVu
Y2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIGFsdERpc3BsYXlTdHJpbmcoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
dGl0bGVEaXNwbGF5U3RyaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGlt
YWdlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRl
ci5jcHAKaW5kZXggNWMxOWM5MzAwNjAwZTM3N2Q5MmVkNjNmMWU4YjllYTRlNmJjYjZlZi4uNWFh
ZDFiZmIxNjhkNjhmM2QyOTIxODVhMDVhNzlmNmUwZDgzZTEyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcApAQCAtMzE5LDcgKzMxOSw3IEBAIHZv
aWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBj
b25zdCBGaWxsTGF5ZXImIGZpbGxMCiAgICAgLy8gdGhlIHByZXZpb3VzIGxpbmUgbGVmdCBvZmYu
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgIExheW91dFVuaXQgdG90
YWxMb2dpY2FsV2lkdGg7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmRpcmVj
dGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAoYXV0byBi
b3ggPSBtX2lubGluZUJveC5wcmV2aW91c0lubGluZUJveCgpOyBib3g7IGJveC50cmF2ZXJzZVBy
ZXZpb3VzSW5saW5lQm94KCkpCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGJv
eC0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9m
ZnNldE9uTGluZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lF
bGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNC
b3guY3BwCmluZGV4IDQ2ZGNkNDZmZjdkZTI5ODY2YjQ5OThlM2ZjNmM3NTA2OWRiZWViNDcuLjMx
NzlhZjYxM2UwNTdkYjU0MDE4YWJmN2M0ZjQ0NzJiZDE1M2YzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcApAQCAtNzAsNyArNzAsNyBAQCB2
b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhp
cyBhbHdheXMgTFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93
LgotICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4obV9zdHIsIGxpbmVTdHlsZSwgQWxsb3dSaWdodEV4cGFuc2lvbiksIExheW91dFBvaW50KHgo
KSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQueSgpICsgbGluZVN0eWxlLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKG1fc3RyLCBsaW5lU3R5bGUsIFBBTDo6QWxsb3dSaWdo
dEV4cGFuc2lvbiksIExheW91dFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFp
bnRPZmZzZXQueSgpICsgbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKIAogICAg
IC8vIFJlc3RvcmUgdGhlIHJlZ3VsYXIgZmlsbCBjb2xvci4KICAgICBpZiAodGV4dENvbG9yICE9
IGNvbnRleHQuZmlsbENvbG9yKCkpCkBAIC0xMTksNyArMTE5LDcgQEAgSW50UmVjdCBMZWdhY3lF
bGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpIGNvbnN0CiAgICAgY29uc3QgTGVnYWN5Um9vdElu
bGluZUJveCYgcm9vdEJveCA9IHJvb3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3
YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgeyBMYXlvdXRVbml0KHgoKSksIExheW91dFVuaXQo
eSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpLCAw
X2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSB9
OwotICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4obV9zdHIsIGxpbmVTdHlsZSwgQWxsb3dSaWdodEV4cGFuc2lvbiksIHNlbGVj
dGlvblJlY3QpOworICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIGxpbmVTdHlsZSwgUEFMOjpBbGxvd1JpZ2h0RXhw
YW5zaW9uKSwgc2VsZWN0aW9uUmVjdCk7CiAgICAgLy8gRklYTUU6IHVzZSBkaXJlY3Rpb25hbCBw
aXhlbCBzbmFwcGluZyBpbnN0ZWFkLgogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVj
dGlvblJlY3QpOwogfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgTGVnYWN5RWxsaXBzaXNCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAg
IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0
IHRleHQgcnVuIGZsYWdzIGJlbG93LgogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExh
eW91dFVuaXQoeCgpICsgcGFpbnRPZmZzZXQueCgpKSwgcm9vdEJveC5zZWxlY3Rpb25Ub3AoKSAr
IHBhaW50T2Zmc2V0LnkoKSwgMF9sdSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQoKSB9OwotICAg
IFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxl
LCBBbGxvd1JpZ2h0RXhwYW5zaW9uKTsKKyAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKG1fc3RyLCBzdHlsZSwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uKTsK
ICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCk7
CiAgICAgY29udGV4dC5maWxsUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdE
aXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCksIHJ1bi5sdHIoKSksIGMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZUJveC5oCmluZGV4IGE5MjRmNmEyYTIwOWM1NDQ4NmFlNzExZTMyNjgxODJhNjEy
YTEzNDYuLjhhNTRiMWZmMmViOTEyMTc2NWM4Y2RjZThjNTQ0YmUxZGNlYzUyZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKQEAgLTIzLDcgKzIzLDcgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2Mu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
QEAgLTIwOCw4ICsyMDgsOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmJpZGlFbWJlZGRpbmdMZXZlbCgpOyB9CiAg
ICAgdm9pZCBzZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpdGZpZWxkcy5z
ZXRCaWRpRW1iZWRkaW5nTGV2ZWwobGV2ZWwpOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwg
OiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVs
KCkgJSAyID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxU
UjsgfQorICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRp
cmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAgICAgaW50IGNhcmV0TGVm
dG1vc3RPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBj
YXJldE1pbk9mZnNldCgpIDogY2FyZXRNYXhPZmZzZXQoKTsgfQogICAgIGludCBjYXJldFJpZ2h0
bW9zdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNh
cmV0TWF4T2Zmc2V0KCkgOiBjYXJldE1pbk9mZnNldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAppbmRleCAyY2RkZWRiMTVlZjBh
ZTQ4NzgzY2MxY2E3YjM0NGZiMDI0MzQ1MDJlLi5iNzVmMGVmMmRiMzQyZjk3YzJjOWJhZWJmNzA3
MDRkNTQwOWRjY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZUZsb3dCb3guY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBMZWdhY3lJbmxpbmVGbG93
Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUoY29uc3QgR2x5cGhPdmVyZmxvd0FuZEZh
bGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0
aW9uKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsCisgICAgaWYg
KGxpbmVTdHlsZS5mb250RGVzY3JpcHRpb24oKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbAogICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lSXRlcmF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCmlu
ZGV4IDdjNGI2N2I5MTFjMTY4N2M4MDZjZGY5NDc2ZGFiYzRjNzE4OTQ2MzAuLjM5MDc4Nzc1ZDlm
YTYzYjg1NjUxMmYxMjgzYjQ0NjM5YzI4NzI2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0
IExlZ2FjeUlubGluZUl0ZXJhdAogICAgIHJldHVybiBpdDEub2Zmc2V0KCkgIT0gaXQyLm9mZnNl
dCgpIHx8IGl0MS5yZW5kZXJlcigpICE9IGl0Mi5yZW5kZXJlcigpOwogfQogCi1zdGF0aWMgaW5s
aW5lIFVDaGFyRGlyZWN0aW9uIGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3N0YXRpYyBpbmxpbmUgVUNoYXJE
aXJlY3Rpb24gZW1iZWRDaGFyRnJvbURpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKIHsKLSAgICBpZiAodW5pY29kZUJp
ZGkgPT0gRW1iZWQpCi0gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
UlRMID8gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyA6IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJ
Tkc7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hU
X1RPX0xFRlRfT1ZFUlJJREUgOiBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU7CisgICAgaWYgKHVu
aWNvZGVCaWRpID09IFBBTDo6RW1iZWQpCisgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIDogVV9MRUZU
X1RPX1JJR0hUX0VNQkVERElORzsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMID8gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIDogVV9MRUZUX1RPX1JJR0hU
X09WRVJSSURFOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgT2JzZXJ2ZXI+CkBAIC0xNTQsOCArMTU0
LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChPYnNl
cnZlciogb2JzZXJ2ZXIsIFJlbmRlck9iamVjdCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotICAgIEVVbmljb2RlQmlk
aSB1bmljb2RlQmlkaSA9IHN0eWxlLnVuaWNvZGVCaWRpKCk7Ci0gICAgaWYgKHVuaWNvZGVCaWRp
ID09IFVCTm9ybWFsKSB7CisgICAgUEFMOjpFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBzdHls
ZS51bmljb2RlQmlkaSgpOworICAgIGlmICh1bmljb2RlQmlkaSA9PSBQQUw6OlVCTm9ybWFsKSB7
CiAgICAgICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtd3JpdGluZy1tb2Rlcy8j
dW5pY29kZS1iaWRpCiAgICAgICAgIC8vICJUaGUgZWxlbWVudCBkb2VzIG5vdCBvcGVuIGFuIGFk
ZGl0aW9uYWwgbGV2ZWwgb2YgZW1iZWRkaW5nIHdpdGggcmVzcGVjdCB0byB0aGUgYmlkaXJlY3Rp
b25hbCBhbGdvcml0aG0uIgogICAgICAgICAvLyBUaHVzIHdlIGlnbm9yZSBhbnkgcG9zc2libGUg
ZGlyPSBhdHRyaWJ1dGUgb24gdGhlIHNwYW4uCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChPYnNlcnZlciogb2JzZXJ2ZXIs
IFJlbmRlck9iamVjdCoKICAgICB9CiAKICAgICBpZiAoIW9ic2VydmVyLT5pbklzb2xhdGUoKSkK
LSAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oc3R5bGUuZGly
ZWN0aW9uKCksIHVuaWNvZGVCaWRpKSwgRnJvbVN0eWxlT3JET00pOworICAgICAgICBvYnNlcnZl
ci0+ZW1iZWQoZW1iZWRDaGFyRnJvbURpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSwgdW5pY29k
ZUJpZGkpLCBQQUw6OkZyb21TdHlsZU9yRE9NKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIE9ic2Vy
dmVyPgpAQCAtMTgwLDggKzE4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZl
cldpbGxFeGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0CiAgICAgaWYg
KCFvYnNlcnZlciB8fCAhb2JqZWN0IHx8ICFvYmplY3QtPmlzUmVuZGVySW5saW5lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVjdC0+c3R5
bGUoKS51bmljb2RlQmlkaSgpOwotICAgIGlmICh1bmljb2RlQmlkaSA9PSBVQk5vcm1hbCkKKyAg
ICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVjdC0+c3R5bGUoKS51bmljb2Rl
QmlkaSgpOworICAgIGlmICh1bmljb2RlQmlkaSA9PSBQQUw6OlVCTm9ybWFsKQogICAgICAgICBy
ZXR1cm47IC8vIE5vdGhpbmcgdG8gZG8gZm9yIHVuaWNvZGUtYmlkaTogbm9ybWFsCiAgICAgaWYg
KGlzSXNvbGF0ZWQodW5pY29kZUJpZGkpKSB7CiAgICAgICAgIG9ic2VydmVyLT5leGl0SXNvbGF0
ZSgpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZl
cldpbGxFeGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0CiAKICAgICAv
LyBPdGhlcndpc2Ugd2UgcG9wIGFueSBlbWJlZC9vdmVycmlkZSBjaGFyYWN0ZXIgd2UgYWRkZWQg
d2hlbiB3ZSBvcGVuZWQgdGhpcyB0YWcuCiAgICAgaWYgKCFvYnNlcnZlci0+aW5Jc29sYXRlKCkp
Ci0gICAgICAgIG9ic2VydmVyLT5lbWJlZChVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsIEZyb21T
dHlsZU9yRE9NKTsKKyAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFMX0ZP
Uk1BVCwgUEFMOjpGcm9tU3R5bGVPckRPTSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0l0
ZXJhdG9yVGFyZ2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQpAQCAtMzcxLDYgKzM3MSwxMiBAQCBB
TFdBWVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9uIExlZ2FjeUlubGluZUl0ZXJhdG9yOjpkaXJlY3Rp
b24oKSBjb25zdAogICAgIHJldHVybiBVX09USEVSX05FVVRSQUw7CiB9CiAKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFBBTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3JlbWVu
dEludGVybmFsKCkKIHsKQEAgLTQzNCw3ICs0NDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbklz
b2xhdGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQogCiAgICAgLy8g
V2UgZG9uJ3QgY2FyZSBpZiB3ZSBlbmNvdW50ZXIgYmlkaSBkaXJlY3Rpb25hbCBvdmVycmlkZXMu
Ci0gICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSkgeyB9
CisgICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgUEFMOjpCaWRpRW1iZWRkaW5nU291cmNl
KSB7IH0KICAgICB2b2lkIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCkgeyB9CiAKICAgICB2b2lk
IGFkZEZha2VSdW5JZk5lY2Vzc2FyeShSZW5kZXJPYmplY3QmIG9iaiwgdW5zaWduZWQgcG9zLCB1
bnNpZ25lZCBlbmQsIFJlbmRlckVsZW1lbnQmIHJvb3QsIElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIpCkBAIC01MDcsNCArNTEzLDQgQEAgaW5saW5lIGJvb2wgSW5saW5lQmlkaVJlc29sdmVy
OjpuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJy
ZW50LnJlbmRlcmVyKCkgPT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCk7CiB9CiAKLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCmluZGV4IDk2NTBkOTRjMmExZjdkMWQwMWZm
YWQwNDhjZmFhZjBlNzVjNTk4NjMuLjQxNDdkMGM3NzY5NGIzYjZkMzE0ZmE3MzM0YTZjN2Q2MTY2
NzVlZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVU
ZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4
dEJveC5jcHAKQEAgLTQ4NiwyMyArNDg2LDIzIEBAIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBM
ZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBsaW5l
U3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJl
cigpKSAmJiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21iaW5l
ZCgpID8gJmRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7
CiB9CiAKLUV4cGFuc2lvbkJlaGF2aW9yIExlZ2FjeUlubGluZVRleHRCb3g6OmV4cGFuc2lvbkJl
aGF2aW9yKCkgY29uc3QKK1BBTDo6RXhwYW5zaW9uQmVoYXZpb3IgTGVnYWN5SW5saW5lVGV4dEJv
eDo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogewotICAgIEV4cGFuc2lvbkJlaGF2aW9yIGxl
ZnRCZWhhdmlvcjsKKyAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yIGxlZnRCZWhhdmlvcjsKICAg
ICBpZiAoZm9yY2VMZWZ0RXhwYW5zaW9uKCkpCi0gICAgICAgIGxlZnRCZWhhdmlvciA9IEZvcmNl
TGVmdEV4cGFuc2lvbjsKKyAgICAgICAgbGVmdEJlaGF2aW9yID0gUEFMOjpGb3JjZUxlZnRFeHBh
bnNpb247CiAgICAgZWxzZSBpZiAoY2FuSGF2ZUxlZnRFeHBhbnNpb24oKSkKLSAgICAgICAgbGVm
dEJlaGF2aW9yID0gQWxsb3dMZWZ0RXhwYW5zaW9uOworICAgICAgICBsZWZ0QmVoYXZpb3IgPSBQ
QUw6OkFsbG93TGVmdEV4cGFuc2lvbjsKICAgICBlbHNlCi0gICAgICAgIGxlZnRCZWhhdmlvciA9
IEZvcmJpZExlZnRFeHBhbnNpb247CisgICAgICAgIGxlZnRCZWhhdmlvciA9IFBBTDo6Rm9yYmlk
TGVmdEV4cGFuc2lvbjsKIAotICAgIEV4cGFuc2lvbkJlaGF2aW9yIHJpZ2h0QmVoYXZpb3I7Cisg
ICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciByaWdodEJlaGF2aW9yOwogICAgIGlmIChmb3JjZVJp
Z2h0RXhwYW5zaW9uKCkpCi0gICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBGb3JjZVJpZ2h0RXhwYW5z
aW9uOworICAgICAgICByaWdodEJlaGF2aW9yID0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOwog
ICAgIGVsc2UgaWYgKGV4cGFuc2lvbigpICYmIG5leHRMZWFmT25MaW5lKCkgJiYgIW5leHRMZWFm
T25MaW5lKCktPmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBBbGxvd1Jp
Z2h0RXhwYW5zaW9uOworICAgICAgICByaWdodEJlaGF2aW9yID0gUEFMOjpBbGxvd1JpZ2h0RXhw
YW5zaW9uOwogICAgIGVsc2UKLSAgICAgICAgcmlnaHRCZWhhdmlvciA9IEZvcmJpZFJpZ2h0RXhw
YW5zaW9uOworICAgICAgICByaWdodEJlaGF2aW9yID0gUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lv
bjsKIAogICAgIHJldHVybiBsZWZ0QmVoYXZpb3IgfCByaWdodEJlaGF2aW9yOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKaW5kZXggMjczMmZm
MDFmZDliNGI4NTMxZTZkOWU4MGM4MGY4NTc3NjE5ZThjYi4uMzM5YmQ3MmVlMDMyMGNhNjZiNWY1
YzA0ZWNlM2JhY2MyZmFiYzIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5SW5saW5lVGV4dEJveC5oCkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhl
biA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAg
IFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBi
b29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsKIAotICAgIEV4cGFuc2lvbkJlaGF2aW9y
IGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CisgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OwogCiAgICAgdm9pZCBiZWhhdmVzTGlrZVRleHQoKSBj
b25zdCA9IGRlbGV0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVM
YXlvdXQuY3BwCmluZGV4IDhjZThmMWY3M2MyY2FmMTBiMjdkZDA3OWVlYTMwZDgwYjk5MzIyNDQu
LmI2ODVmZjhmM2I4OWY4NThkOWJmMTUzMDZkZjBkOWRmYzQ3YmQ0MTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJMZWdhY3lMaW5lTGF5b3V0LmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaVJl
c29sdmVyLmg+CiAjaW5jbHVkZSAiQnJlYWtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCkBAIC03MCw3ICs3MCw3
IEBAIExlZ2FjeUxpbmVMYXlvdXQ6On5MZWdhY3lMaW5lTGF5b3V0KCkKICAgICBsaW5lQm94ZXMo
KS5kZWxldGVMaW5lQm94VHJlZSgpOwogfTsKIAotc3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0
aW9uYWxpdHkoVGV4dERpcmVjdGlvbiYgZGlyLCBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyKQor
c3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoUEFMOjpUZXh0RGlyZWN0aW9uJiBk
aXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIpCiB7CiAgICAgd2hpbGUgKCFpdGVyLmF0RW5k
KCkpIHsKICAgICAgICAgaWYgKGl0ZXIuYXRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkKQEAgLTc4LDEx
ICs3OCwxMSBAQCBzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0
aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZQogICAgICAgICBpZiAoVUNoYXIgY3Vy
cmVudCA9IGl0ZXIuY3VycmVudCgpKSB7CiAgICAgICAgICAgICBVQ2hhckRpcmVjdGlvbiBjaGFy
RGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGNo
YXJEaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgZGlyID0g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIGRpciA9IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBjaGFyRGlyZWN0
aW9uID09IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKLSAgICAgICAgICAgICAgICBkaXIgPSBU
ZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC05NSw3ICs5NSw3IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gY3Jl
YXRlUnVuKGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosCiAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8QmlkaVJ1bj4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlci5jb250ZXh0KCks
IHJlc29sdmVyLmRpcigpKTsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5z
Rm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBlbmQs
IFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQordm9pZCBM
ZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KFBBTDo6QmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4qIHJ1bnMsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCiB7CiAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IFJlbmRl
ckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KG9iaikpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3OCw3ICsyNzgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgaW5saW5lIGJvb2wgZW5kc1dpdGhIVE1MU3BhY2VzKGNvbnN0IENoYQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29u
c3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQorc3RhdGljIGJvb2wgcmVhY2hlZEVu
ZE9mVGV4dFJlbmRlcmVyKGNvbnN0IFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
KQogewogICAgIEJpZGlSdW4qIHJ1biA9IGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKICAg
ICBpZiAoIXJ1bikKQEAgLTI5Myw3ICsyOTMsNyBAQCBzdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZU
ZXh0UmVuZGVyZXIoY29uc3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQogICAgIHJl
dHVybiBlbmRzV2l0aEhUTUxTcGFjZXModGV4dC5jaGFyYWN0ZXJzMTYoKSwgcG9zaXRpb24sIGxl
bmd0aCk7CiB9CiAKLUxlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6OmNvbnN0
cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5mbyYg
bGluZUluZm8pCitMZWdhY3lSb290SW5saW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0Ojpjb25zdHJ1
Y3RMaW5lKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5m
byYgbGluZUluZm8pCiB7CiAgICAgQVNTRVJUKGJpZGlSdW5zLmZpcnN0UnVuKCkpOwogCkBAIC0z
NjMsNyArMzYzLDcgQEAgVGV4dEFsaWduTW9kZSBMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25t
ZW50Rm9yTGluZShib29sIGVuZHNXaXRoU29mdEJyZWFrKSBjb24KICNpZiBFTkFCTEUoQ1NTM19U
RVhUKQogICAgIFRleHRKdXN0aWZ5IHRleHRKdXN0aWZ5ID0gc3R5bGUoKS50ZXh0SnVzdGlmeSgp
OwogICAgIGlmIChhbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSAmJiB0ZXh0SnVz
dGlmeSA9PSBUZXh0SnVzdGlmeTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gVGV4dEFsaWduTW9kZTo6TGVmdCA6IFRleHRB
bGlnbk1vZGU6OlJpZ2h0OworICAgICAgICByZXR1cm4gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiA/IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25N
b2RlOjpSaWdodDsKICNlbmRpZgogCiAgICAgaWYgKGVuZHNXaXRoU29mdEJyZWFrKQpAQCAtNjMx
LDggKzYzMSw4IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbkZvckp1
c3RpZmllZFRleHQoQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSCiAKIHZvaWQgTGVnYWN5TGluZUxh
eW91dDo6dXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgY29uc3QgVGV4dEFsaWduTW9kZSYgdGV4dEFsaWduLCBjb25zdCBMZWdhY3lSb290SW5saW5l
Qm94KiByb290SW5saW5lQm94LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9n
aWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiB7Ci0gICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb247Ci0gICAgaWYgKHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVu
aWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b247CisgICAgaWYgKHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVuaWNvZGVCaWRpKCkg
PT0gUEFMOjpQbGFpbnRleHQpCiAgICAgICAgIGRpcmVjdGlvbiA9IHJvb3RJbmxpbmVCb3gtPmRp
cmVjdGlvbigpOwogICAgIGVsc2UKICAgICAgICAgZGlyZWN0aW9uID0gZmxvdy5zdHlsZSgpLmRp
cmVjdGlvbigpOwpAQCAtNjY3LDEzICs2NjcsMTMgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojp1
cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb24K
ICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OlN0YXJ0OgotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAg
ICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERp
cmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRo
LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
LCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6RW5kOgotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAg
ICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0
aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXBk
YXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
LCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCk7CkBAIC03MTksMTMgKzcxOSwxMyBAQCB2b2lkIExlZ2FjeUxpbmVM
YXlvdXQ6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKExlZ2FjeVJvb3RJ
bmxpbmVCbwogICAgIGxpbmVCb3gtPnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlvbihsaW5lTG9n
aWNhbExlZnQsIG5lZWRzV29yZFNwYWNpbmcpOwogfQogCi1zdGF0aWMgaW5saW5lIEV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0Zs
b3cmIGJsb2NrLCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBCaWRpUnVuKiBwcmV2aW91
c1J1biwgQmlkaVJ1biogbmV4dFJ1biwgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIGJvb2wgaXNB
ZnRlckV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3goUmVuZGVyQmxvY2tGbG93JiBibG9jaywgTGVn
YWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4q
IG5leHRSdW4sIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBib29sIGlzQWZ0ZXJFeHBhbnNpb24p
CiB7CiAgICAgLy8gVGF0ZWNodXlva28gaXMgbW9kZWxlZCBhcyB0aGUgT2JqZWN0IFJlcGxhY2Vt
ZW50IENoYXJhY3RlciAoVStGRkZDKSwgd2hpY2ggY2FuIG5ldmVyIGhhdmUgZXhwYW5zaW9uIG9w
cG9ydHVuaXRpZXMgaW5zaWRlIG5vciBpbnRyaW5zaWNhbGx5IGFkamFjZW50IHRvIGl0LgogICAg
IGlmICh0ZXh0Qm94LnJlbmRlcmVyKCkuc3R5bGUoKS50ZXh0Q29tYmluZSgpID09IFRleHRDb21i
aW5lOjpIb3Jpem9udGFsKQotICAgICAgICByZXR1cm4gRm9yYmlkTGVmdEV4cGFuc2lvbiB8IEZv
cmJpZFJpZ2h0RXhwYW5zaW9uOworICAgICAgICByZXR1cm4gUEFMOjpGb3JiaWRMZWZ0RXhwYW5z
aW9uIHwgUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lvbjsKIAotICAgIEV4cGFuc2lvbkJlaGF2aW9y
IHJlc3VsdCA9IDA7CisgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciByZXN1bHQgPSAwOwogICAg
IGJvb2wgc2V0TGVmdEV4cGFuc2lvbiA9IGZhbHNlOwogICAgIGJvb2wgc2V0UmlnaHRFeHBhbnNp
b24gPSBmYWxzZTsKICAgICBpZiAodGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkp
IHsKQEAgLTczOCw3ICs3MzgsNyBAQCBzdGF0aWMgaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0ZsbwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5IGRv
ZXNuJ3QgYWN0dWFsbHkgd29yayBiZWNhdXNlIGl0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgVUJBCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBv
cnR1bml0eShkb3duY2FzdDxSZW5kZXJUZXh0PihsZWFmQ2hpbGQtPnJlbmRlcmVyKCkpLnN0cmlu
Z1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRSaWdodEV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IEZvcmNlUmlnaHRFeHBhbnNpb247CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9yY2VSaWdodEV4cGFuc2lvbjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
QEAgLTc1Myw3ICs3NTMsNyBAQCBzdGF0aWMgaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0ZsbwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5IGRvZXNu
J3QgYWN0dWFsbHkgd29yayBiZWNhdXNlIGl0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgVUJBCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnJpZ2h0RXhwYW5zaW9uT3Bwb3J0
dW5pdHkoZG93bmNhc3Q8UmVuZGVyVGV4dD4obGVhZkNoaWxkLT5yZW5kZXJlcigpKS5zdHJpbmdW
aWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0TGVmdEV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0IHw9IEZvcmNlTGVmdEV4cGFuc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gUEFMOjpGb3JjZUxlZnRFeHBhbnNpb247CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC03
NjQsNDQgKzc2NCw0NCBAQCBzdGF0aWMgaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lv
bkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0ZsbwogICAgICAgICAgICAgUmVu
ZGVyUnVieUJhc2UmIHJ1YnlCYXNlID0gZG93bmNhc3Q8UmVuZGVyUnVieUJhc2U+KGJsb2NrKTsK
ICAgICAgICAgICAgIGlmICgmdGV4dEJveCA9PSBydWJ5QmFzZS5maXJzdFJvb3RCb3goKS0+Zmly
c3RMZWFmRGVzY2VuZGFudCgpKSB7CiAgICAgICAgICAgICAgICAgc2V0TGVmdEV4cGFuc2lvbiA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVzdWx0IHw9IEZvcmJpZExlZnRFeHBhbnNpb247Cisg
ICAgICAgICAgICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9yYmlkTGVmdEV4cGFuc2lvbjsKICAgICAg
ICAgICAgIH0gaWYgKCZ0ZXh0Qm94ID09IHJ1YnlCYXNlLmZpcnN0Um9vdEJveCgpLT5sYXN0TGVh
ZkRlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIHNldFJpZ2h0RXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZXN1bHQgfD0gRm9yYmlkUmlnaHRFeHBhbnNpb247CisgICAg
ICAgICAgICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFzZXRMZWZ0RXhwYW5zaW9uKQotICAg
ICAgICByZXN1bHQgfD0gaXNBZnRlckV4cGFuc2lvbiA/IEZvcmJpZExlZnRFeHBhbnNpb24gOiBB
bGxvd0xlZnRFeHBhbnNpb247CisgICAgICAgIHJlc3VsdCB8PSBpc0FmdGVyRXhwYW5zaW9uID8g
UEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uIDogUEFMOjpBbGxvd0xlZnRFeHBhbnNpb247CiAgICAg
aWYgKCFzZXRSaWdodEV4cGFuc2lvbikKLSAgICAgICAgcmVzdWx0IHw9IEFsbG93UmlnaHRFeHBh
bnNpb247CisgICAgICAgIHJlc3VsdCB8PSBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb247CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFwcGx5RXhwYW5zaW9uQmVo
YXZpb3IoTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uQmVoYXZpb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlFeHBhbnNpb25CZWhhdmlv
cihMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbkJlaGF2aW9yKQogewotICAgIHN3aXRjaCAoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0
RXhwYW5zaW9uTWFzaykgewotICAgIGNhc2UgRm9yY2VMZWZ0RXhwYW5zaW9uOgorICAgIHN3aXRj
aCAoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSB7CisgICAgY2Fz
ZSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbjoKICAgICAgICAgdGV4dEJveC5zZXRGb3JjZUxlZnRF
eHBhbnNpb24oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JiaWRMZWZ0RXhwYW5zaW9u
OgorICAgIGNhc2UgUEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uOgogICAgICAgICB0ZXh0Qm94LnNl
dENhbkhhdmVMZWZ0RXhwYW5zaW9uKGZhbHNlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
bGxvd0xlZnRFeHBhbnNpb246CisgICAgY2FzZSBQQUw6OkFsbG93TGVmdEV4cGFuc2lvbjoKICAg
ICAgICAgdGV4dEJveC5zZXRDYW5IYXZlTGVmdEV4cGFuc2lvbih0cnVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBzd2l0Y2ggKGV4cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBh
bnNpb25NYXNrKSB7Ci0gICAgY2FzZSBGb3JjZVJpZ2h0RXhwYW5zaW9uOgorICAgIHN3aXRjaCAo
ZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OlJpZ2h0RXhwYW5zaW9uTWFzaykgeworICAgIGNhc2Ug
UEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOgogICAgICAgICB0ZXh0Qm94LnNldEZvcmNlUmlnaHRF
eHBhbnNpb24oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JiaWRSaWdodEV4cGFuc2lv
bjoKKyAgICBjYXNlIFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb246CiAgICAgICAgIHRleHRCb3gu
c2V0Q2FuSGF2ZVJpZ2h0RXhwYW5zaW9uKGZhbHNlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBbGxvd1JpZ2h0RXhwYW5zaW9uOgorICAgIGNhc2UgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9u
OgogICAgICAgICB0ZXh0Qm94LnNldENhbkhhdmVSaWdodEV4cGFuc2lvbih0cnVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTg5NywxNCArODk3LDE0IEBAIEJpZGlSdW4qIExl
Z2FjeUxpbmVMYXlvdXQ6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50
KExlZ2FjeVJvb3RJCiAgICAgQmlkaVJ1biogcHJldmlvdXNSdW4gPSBudWxscHRyOwogICAgIGZv
ciAoOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7CiAgICAgICAgIGF1dG8gY29tcHV0ZUV4cGFu
c2lvbk9wcG9ydHVuaXRpZXMgPSBbJmV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsICZleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50LCB0ZXh0QWxpZ24sICZpc0FmdGVyRXhwYW5zaW9uXSAoUmVuZGVyQmxv
Y2tGbG93JiBibG9jaywKLSAgICAgICAgICAgIExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gs
IEJpZGlSdW4qIHByZXZpb3VzUnVuLCBCaWRpUnVuKiBuZXh0UnVuLCBTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQorICAgICAgICAgICAgTGVnYWN5SW5saW5l
VGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4qIG5leHRSdW4s
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKHN0cmluZ1ZpZXcuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gRW1wdHkgcnVucyBzaG91bGQgc3RpbGwgcHJvZHVjZSBhbiBlbnRyeSBpbiBl
eHBhbnNpb25PcHBvcnR1bml0aWVzIGxpc3Qgc28gdGhhdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIG1h
dGNoZXMgdGhlIG51bWJlciBvZiBydW5zLgogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMuYXBwZW5kKDApOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gZXhw
YW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KGJsb2NrLCB0ZXh0Qm94LCBwcmV2aW91c1J1
biwgbmV4dFJ1biwgdGV4dEFsaWduLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgIFBB
TDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBleHBhbnNpb25CZWhhdmlv
ckZvcklubGluZVRleHRCb3goYmxvY2ssIHRleHRCb3gsIHByZXZpb3VzUnVuLCBuZXh0UnVuLCB0
ZXh0QWxpZ24sIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICAgICAgYXBwbHlFeHBhbnNpb25C
ZWhhdmlvcih0ZXh0Qm94LCBleHBhbnNpb25CZWhhdmlvcik7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBvcHBvcnR1bml0aWVzSW5SdW47CiAgICAgICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0aWVz
SW5SdW4sIGlzQWZ0ZXJFeHBhbnNpb24pID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQoc3RyaW5nVmlldywgZGlyZWN0aW9uLCBleHBhbnNpb25CZWhhdmlvcik7CkBAIC0x
MDkxLDcgKzEwOTEsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZpbmRGaXJzdFRyYWlsaW5n
U3BhY2UoY29uc3QgUmVuZGVyVGV4dCYgbGFzdFRleHQsIGNvbnN0CiAgICAgcmV0dXJuIGZpcnN0
U3BhY2U7CiB9CiAKLWlubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFp
bGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBj
dXJyZW50Q29udGV4dCkKK2lubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVU
cmFpbGluZ1NwYWNlcyhQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgUEFMOjpC
aWRpQ29udGV4dCogY3VycmVudENvbnRleHQpCiB7CiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3Vu
dCgpCiAgICAgICAgIHx8ICFiaWRpUnVucy5sb2dpY2FsbHlMYXN0UnVuKCktPnJlbmRlcmVyKCku
c3R5bGUoKS5icmVha09ubHlBZnRlcldoaXRlU3BhY2UoKQpAQCAtMTExMywxNyArMTExMywxNyBA
QCBpbmxpbmUgQmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMo
QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZAogICAgIGlmIChmaXJzdFNwYWNlID09IHRyYWlsaW5n
U3BhY2VSdW4tPnN0b3AoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgYm9vbCBzaG91bGRS
ZW9yZGVyID0gdHJhaWxpbmdTcGFjZVJ1biAhPSAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUiA/IGJpZGlSdW5zLmxhc3RSdW4oKSA6IGJpZGlSdW5zLmZpcnN0UnVuKCkpOworICAgIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOworICAgIGJv
b2wgc2hvdWxkUmVvcmRlciA9IHRyYWlsaW5nU3BhY2VSdW4gIT0gKGRpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiA/IGJpZGlSdW5zLmxhc3RSdW4oKSA6IGJpZGlSdW5zLmZpcnN0
UnVuKCkpOwogICAgIGlmIChmaXJzdFNwYWNlICE9IHRyYWlsaW5nU3BhY2VSdW4tPnN0YXJ0KCkp
IHsKLSAgICAgICAgQmlkaUNvbnRleHQqIGJhc2VDb250ZXh0ID0gY3VycmVudENvbnRleHQ7Ci0g
ICAgICAgIHdoaWxlIChCaWRpQ29udGV4dCogcGFyZW50ID0gYmFzZUNvbnRleHQtPnBhcmVudCgp
KQorICAgICAgICBQQUw6OkJpZGlDb250ZXh0KiBiYXNlQ29udGV4dCA9IGN1cnJlbnRDb250ZXh0
OworICAgICAgICB3aGlsZSAoUEFMOjpCaWRpQ29udGV4dCogcGFyZW50ID0gYmFzZUNvbnRleHQt
PnBhcmVudCgpKQogICAgICAgICAgICAgYmFzZUNvbnRleHQgPSBwYXJlbnQ7CiAKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IG5ld1RyYWlsaW5nUnVuID0gbWFrZVVuaXF1ZTxCaWRp
UnVuPihmaXJzdFNwYWNlLCB0cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3AsIHRyYWlsaW5nU3BhY2VS
dW4tPnJlbmRlcmVyKCksIGJhc2VDb250ZXh0LCBVX09USEVSX05FVVRSQUwpOwogICAgICAgICB0
cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3AgPSBmaXJzdFNwYWNlOwogICAgICAgICB0cmFpbGluZ1Nw
YWNlUnVuID0gbmV3VHJhaWxpbmdSdW4uZ2V0KCk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgYmlkaVJ1bnMuYXBwZW5kUnVuKFdURk1vdmUobmV3
VHJhaWxpbmdSdW4pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYmlkaVJ1bnMucHJlcGVu
ZFJ1bihXVEZNb3ZlKG5ld1RyYWlsaW5nUnVuKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBpbmxp
bmUgQmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZAogICAgIGlmICghc2hvdWxkUmVvcmRlcikKICAgICAgICAgcmV0
dXJuIHRyYWlsaW5nU3BhY2VSdW47CiAKLSAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUikgeworICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
IHsKICAgICAgICAgYmlkaVJ1bnMubW92ZVJ1blRvRW5kKHRyYWlsaW5nU3BhY2VSdW4pOwogICAg
ICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX2xldmVsID0gMDsKICAgICB9IGVsc2UgewpAQCAtMTE3
MCw3ICsxMTcwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUlu
SXNvbGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLAogfQogCiAvLyBGSVhNRTogQmlk
aVJlc29sdmVyIHNob3VsZCBoYXZlIHRoaXMgbG9naWMuCi1zdGF0aWMgaW5saW5lIHZvaWQgY29u
c3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIs
IEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0
b3ImIGVuZE9mUnVucywgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KQorc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVjdEJpZGlS
dW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLCBQQUw6OkJpZGlS
dW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVu
ZE9mUnVucywgUEFMOjpWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSwgYm9vbCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIGEg
QmlkaVJ1bkxpc3QgaW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgaW5zdGVhZAogICAgIC8vIG9m
IHRoZSByZXNvbHZlciBvd25pbmcgdGhlIHJ1bnMuCkBAIC0xMTkyLDE5ICsxMTkyLDE5IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJl
c29sdmVyJiB0b3BSZXNvbHZlciwKICAgICAgICAgLy8gdHJlZSB0byBzZWUgd2hpY2ggcGFyZW50
IGlubGluZSBpcyB0aGUgaXNvbGF0ZS4gV2UgY291bGQgY2hhbmdlIGVudGVySXNvbGF0ZQogICAg
ICAgICAvLyB0byB0YWtlIGEgUmVuZGVyT2JqZWN0IGFuZCBkbyB0aGlzIGxvZ2ljIHRoZXJlLCBi
dXQgdGhhdCB3b3VsZCBiZSBhIGxheWVyaW5nCiAgICAgICAgIC8vIHZpb2xhdGlvbiBmb3IgQmlk
aVJlc29sdmVyICh3aGljaCBrbm93cyBub3RoaW5nIGFib3V0IFJlbmRlck9iamVjdCkuCi0gICAg
ICAgIFJlbmRlcklubGluZSogaXNvbGF0ZWRJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KGhpZ2hlc3RDb250YWluaW5nSXNvbGF0ZVdpdGhpblJvb3Qoc3RhcnRPYmplY3QsIGN1cnJlbnRS
b290KSk7CisgICAgICAgIFJlbmRlcklubGluZSogaXNvbGF0ZWRJbmxpbmUgPSBkb3duY2FzdDxS
ZW5kZXJJbmxpbmU+KFBBTDo6aGlnaGVzdENvbnRhaW5pbmdJc29sYXRlV2l0aGluUm9vdChzdGFy
dE9iamVjdCwgY3VycmVudFJvb3QpKTsKICAgICAgICAgQVNTRVJUKGlzb2xhdGVkSW5saW5lKTsK
IAogICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgaXNvbGF0ZWRSZXNvbHZlcjsKLSAgICAgICAg
RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkudW5pY29k
ZUJpZGkoKTsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgICAgIGlmICh1
bmljb2RlQmlkaSA9PSBQbGFpbnRleHQpCisgICAgICAgIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNv
ZGVCaWRpID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKKyAgICAgICAg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgaWYgKHVuaWNvZGVCaWRpID09
IFBBTDo6UGxhaW50ZXh0KQogICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGly
ZWN0aW9uLCBMZWdhY3lJbmxpbmVJdGVyYXRvcihpc29sYXRlZElubGluZSwgJmlzb2xhdGVkUnVu
Lm9iamVjdCwgMCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bmljb2Rl
QmlkaSA9PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlkZSk7CisgICAg
ICAgICAgICBBU1NFUlQodW5pY29kZUJpZGkgPT0gUEFMOjpJc29sYXRlIHx8IHVuaWNvZGVCaWRp
ID09IFBBTDo6SXNvbGF0ZU92ZXJyaWRlKTsKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGlzb2xh
dGVkSW5saW5lLT5zdHlsZSgpLmRpcmVjdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIGlzb2xh
dGVkUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHVu
aWNvZGVCaWRpKSkpOworICAgICAgICBpc29sYXRlZFJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJp
ZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHVuaWNvZGVCaWRpKSkpOwogCiAgICAgICAg
IHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShpc29sYXRlZFJlc29sdmVyLCB0b3BSZXNv
bHZlciwgaXNvbGF0ZWRSdW4ucnVuVG9SZXBsYWNlLCBpc29sYXRlZElubGluZSwgJnN0YXJ0T2Jq
ZWN0KTsKIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVj
dEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLAogICAg
ICAgICAvLyBXZSBzdG9wIGF0IHRoZSBuZXh0IGVuZCBvZiBsaW5lOyB3ZSBtYXkgcmUtZW50ZXIg
dGhpcyBpc29sYXRlIGluIHRoZSBuZXh0IGNhbGwgdG8gY29uc3RydWN0QmlkaVJ1bnMoKS4KICAg
ICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIGVuZCBhbmQgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5IGJlPwogICAgICAgICAvLyBybml3YSBzYXlzIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSBp
cyBqdXN0IGEgV2luSUUgaGFjayBhbmQgY291bGQgYWx3YXlzIGJlIGZhbHNlIGhlcmU/Ci0gICAg
ICAgIGlzb2xhdGVkUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGVuZE9mUnVucywgTm9W
aXN1YWxPdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAgICAgICAgaXNvbGF0
ZWRSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kT2ZSdW5zLCBQQUw6Ok5vVmlzdWFs
T3ZlcnJpZGUsIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBkbyBub3QgZGVsZXRlIHRoZSBydW5zIGZyb20gdGhlIHJlc29sdmVyLgogICAgICAgICAv
LyBXZSdyZSBub3QgZ3VhcmFudGVlZCB0byBnZXQgYW55IEJpZGlSdW5zIGluIHRoZSBwcmV2aW91
cyBzdGVwLiBJZiB3ZSBkb24ndCwgd2UgYWxsb3cgdGhlIHBsYWNlaG9sZGVyCiAgICAgICAgIC8v
IGl0c2VsZiB0byBiZSB0dXJuZWQgaW50byBhbiBJbmxpbmVCb3guIFdlIGNhbid0IHJlbW92ZSBp
dCBoZXJlIHdpdGhvdXQgcG90ZW50aWFsbHkgbG9zaW5nIHRyYWNrIG9mCkBAIC0xMjM3LDcgKzEy
MzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElu
bGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsCiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gY29u
c3RydWN0cyBsaW5lIGJveGVzIGZvciBhbGwgb2YgdGhlIHRleHQgcnVucyBpbiB0aGUgcmVzb2x2
ZXIgYW5kIGNvbXB1dGVzIHRoZWlyIHBvc2l0aW9uLgotTGVnYWN5Um9vdElubGluZUJveCogTGVn
YWN5TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlM
ZXZlbCwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJ
dGVyYXRvciYgZW5kLCBMaW5lSW5mbyYgbGluZUluZm8sIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYg
dmVydGljYWxQb3NpdGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVh
c3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQorTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5
TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZl
bCwgUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGlu
ZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiBsaW5lSW5mbywgVmVydGljYWxQb3NpdGlvbkNhY2hl
JiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7CiAgICAgaWYgKCFiaWRpUnVucy5ydW5D
b3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzMzgsNyArMTMzOCw3IEBAIHZv
aWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBib29sIGhhCiAgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVh
biBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAg
ICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVy
IGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCiAgICAgTGVnYWN5SW5saW5lSXRlcmF0b3Ig
Y2xlYW5MaW5lU3RhcnQ7Ci0gICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOworICAg
IFBBTDo6QmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOwogICAgIGlmICghbGF5b3V0U3Rh
dGUuaXNGdWxsTGF5b3V0KCkgJiYgc3RhcnRMaW5lKQogICAgICAgICBkZXRlcm1pbmVFbmRQb3Np
dGlvbihsYXlvdXRTdGF0ZSwgc3RhcnRMaW5lLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlk
aVN0YXR1cyk7CiAKQEAgLTEzNzgsNyArMTM3OCw3IEBAIGlubGluZSBjb25zdCBMZWdhY3lJbmxp
bmVJdGVyYXRvciYgTGVnYWN5TGluZUxheW91dDo6cmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJ
CiAgICAgcmV0dXJuIG9sZEVuZDsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5M
aW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIHVuc2lnbmVk
IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlv
dXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xl
YW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywg
dW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCiB7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGJvb2wgcGFnaW5hdGVkID0gbGF5b3V0
Q29udGV4dCgpLmxheW91dFN0YXRlKCkgJiYgbGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCkt
PmlzUGFnaW5hdGVkKCk7CkBAIC0xNDMxLDE1ICsxNDMxLDE1IEBAIHZvaWQgTGVnYWN5TGluZUxh
eW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwKICAgICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQogICAgICAgICAgICAgICAgIGxh
c3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5kLnJlbmRlcmVyKCksIGVuZC5vZmZzZXQo
KSwgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmlz
dWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1VzZS5ydGxPcmRlcmluZygp
ID09IE9yZGVyOjpWaXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIgPyBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmlnaHRUb0xlZnRP
dmVycmlkZSkgOiBOb1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAgICAgICAgIFBBTDo6VmlzdWFsRGly
ZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1VzZS5ydGxPcmRlcmluZygpID09IE9y
ZGVyOjpWaXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiA/IFBBTDo6VmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSA6IFBBTDo6VmlzdWFsUmln
aHRUb0xlZnRPdmVycmlkZSkgOiBQQUw6Ok5vVmlzdWFsT3ZlcnJpZGUpOwogCi0gICAgICAgICAg
ICBpZiAoaXNOZXdVQkFQYXJhZ3JhcGggJiYgc3R5bGVUb1VzZS51bmljb2RlQmlkaSgpID09IFBs
YWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgewotICAgICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGVUb1VzZS5kaXJlY3Rpb24oKTsKKyAg
ICAgICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHlsZVRvVXNlLnVuaWNvZGVCaWRp
KCkgPT0gUEFMOjpQbGFpbnRleHQgJiYgIXJlc29sdmVyLmNvbnRleHQoKS0+cGFyZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGVUb1Vz
ZS5kaXJlY3Rpb24oKTsKICAgICAgICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShk
aXJlY3Rpb24sIHJlc29sdmVyLnBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJlc29sdmVy
LnNldFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZVRvVXNlLnVu
aWNvZGVCaWRpKCkpKSk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKFBBTDo6
QmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUoc3R5bGVUb1VzZS51bmljb2RlQmlkaSgp
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlw
IGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0
byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCi0gICAgICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkaVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7CisgICAgICAgICAgICBQQUw6OkJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucyA9IHJlc29sdmVyLnJ1bnMoKTsKICAgICAgICAgICAgIGNv
bnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChyZXNvbHZlciwgYmlkaVJ1bnMsIGVuZCwgb3ZlcnJp
ZGUsIGxheW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkpOwog
ICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVyLnBvc2l0aW9uKCkgPT0gZW5kKTsKIApAQCAtMTUy
Nyw3ICsxNTI3LDcgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRz
SW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogICAgICAgICB9CiAKICAgICAg
ICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUucmVzZXQoKTsKLSAgICAgICAgcmVzb2x2
ZXIuc2V0UG9zaXRpb24oZW5kLCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoZW5kKSk7CisgICAg
ICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKGVuZCwgUEFMOjpudW1iZXJPZklzb2xhdGVBbmNlc3Rv
cnMoZW5kKSk7CiAgICAgfQogCiAgICAgLy8gSW4gY2FzZSB3ZSBhbHJlYWR5IGFkanVzdGVkIHRo
ZSBsaW5lIHBvc2l0aW9ucyBkdXJpbmcgdGhpcyBsYXlvdXQgdG8gYXZvaWQgd2lkb3dzCkBAIC0x
OTYwLDIwICsxOTYwLDIwIEBAIExlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6
OmRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsCiAgICAgaWYgKGxhc3RM
aW5lKSB7CiAgICAgICAgIG1fZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KGxhc3RMaW5lLT5saW5lQm94
Qm90dG9tKCkpOwogICAgICAgICBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyID0gTGVnYWN5SW5s
aW5lSXRlcmF0b3IoJm1fZmxvdywgbGFzdExpbmUtPmxpbmVCcmVha09iaigpLCBsYXN0TGluZS0+
bGluZUJyZWFrUG9zKCkpOwotICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihpdGVyLCBudW1i
ZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOworICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlv
bihpdGVyLCBQQUw6Om51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7CiAgICAgICAgIHJl
c29sdmVyLnNldFN0YXR1cyhsYXN0TGluZS0+bGluZUJyZWFrQmlkaVN0YXR1cygpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0
aW9uKCk7Ci0gICAgICAgIGlmIChzdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQor
ICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24o
KTsKKyAgICAgICAgaWYgKHN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OlBsYWludGV4dCkK
ICAgICAgICAgICAgIGRldGVybWluZURpcmVjdGlvbmFsaXR5KGRpcmVjdGlvbiwgTGVnYWN5SW5s
aW5lSXRlcmF0b3IoJm1fZmxvdywgZmlyc3RJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkobV9m
bG93KSwgMCkpOwotICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhkaXJlY3Rp
b24sIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSkpOworICAgICAgICByZXNvbHZl
ci5zZXRTdGF0dXMoUEFMOjpCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZSgp
LnVuaWNvZGVCaWRpKCkpKSk7CiAgICAgICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIgPSBM
ZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBmaXJzdElubGluZVJlbmRlcmVyU2tpcHBpbmdF
bXB0eShtX2Zsb3csICZyZXNvbHZlciksIDApOwotICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlv
bihpdGVyLCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOworICAgICAgICByZXNvbHZl
ci5zZXRQb3NpdGlvbihpdGVyLCBQQUw6Om51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7
CiAgICAgfQogICAgIHJldHVybiBjdXJyZW50TGluZTsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5
b3V0OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBM
ZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVh
bkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKK3ZvaWQgTGVnYWN5
TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykK
IHsKICAgICBhdXRvIGl0ZXJhdG9yRm9yRmlyc3REaXJ0eUZsb2F0ID0gW10oTGluZUxheW91dFN0
YXRlOjpGbG9hdExpc3QmIGZsb2F0cykgewogICAgICAgICBhdXRvIGxhc3RDbGVhbkZsb2F0ID0g
ZmxvYXRzLmxhc3RDbGVhbkZsb2F0KCk7CkBAIC0yMDg1LDcgKzIwODUsNyBAQCBib29sIExlZ2Fj
eUxpbmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKExlZ2FjeVJvb3RJ
bmxpbmVCb3gqIHJvbwogICAgIHJldHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAh
PSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChjdXJyZW50RnJhZ21lbnQp
OwogfQogCi1ib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNv
bnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMm
IGVuZExpbmVTdGF0dXMpCitib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IFBB
TDo6QmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cykKIHsKICAgICBpZiAocmVzb2x2ZXIucG9zaXRp
b24oKSA9PSBlbmRMaW5lU3RhcnQpIHsKICAgICAgICAgaWYgKHJlc29sdmVyLnN0YXR1cygpICE9
IGVuZExpbmVTdGF0dXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5TGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlv
dXQuaAppbmRleCAxMmFkN2M5NTgwMzZmMzU1MTI0N2NmNTUwYjIyMDI3NmQzYzZlN2M4Li5lOWFj
NDg3MjBjNWU1YmJkNzA4NDdjYjdiNTE5YjljN2JiYzUzMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKQEAgLTMxLDkgKzMxLDE0IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIK
IAorbmFtZXNwYWNlIFBBTCB7CitjbGFzcyBCaWRpQ29udGV4dDsKK3RlbXBsYXRlIDxjbGFzcyBS
dW4+IGNsYXNzIEJpZGlSdW5MaXN0Oworc3RydWN0IEJpZGlTdGF0dXM7Cit9CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRleHQ7CiBjbGFzcyBGbG9hdGluZ09iamVjdDsK
IGNsYXNzIEZsb2F0V2l0aFJlY3Q7CiBjbGFzcyBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OwpAQCAt
NDYsMTAgKzUxLDggQEAgY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyUnVieVJ1bjsK
IGNsYXNzIExlZ2FjeVJvb3RJbmxpbmVCb3g7CiBjbGFzcyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7
Ci1zdHJ1Y3QgQmlkaVN0YXR1czsKIHN0cnVjdCBXb3JkTWVhc3VyZW1lbnQ7CiAKLXRlbXBsYXRl
IDxjbGFzcyBSdW4+IGNsYXNzIEJpZGlSdW5MaXN0OwogdHlwZWRlZiBWZWN0b3I8V29yZE1lYXN1
cmVtZW50LCA2ND4gV29yZE1lYXN1cmVtZW50czsKIAogY2xhc3MgTGVnYWN5TGluZUxheW91dCB7
CkBAIC02NiwxNCArNjksMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBsYXlvdXRMaW5lQm94ZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwogCi0gICAgTGVnYWN5Um9vdElubGluZUJv
eCogY29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7
CisgICAgTGVnYWN5Um9vdElubGluZUJveCogY29uc3RydWN0TGluZShQQUw6OkJpZGlSdW5MaXN0
PEJpZGlSdW4+JiwgY29uc3QgTGluZUluZm8mKTsKICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRP
bkxpbmUoY29uc3QgRmxvYXRpbmdPYmplY3QmIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZUluZm8mLCBMaW5lV2lkdGgmKTsKICAgICB2b2lk
IGFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiAKICAgICBzaXplX3QgbGluZUNvdW50
KCkgY29uc3Q7CiAgICAgc2l6ZV90IGxpbmVDb3VudFVudGlsKGNvbnN0IExlZ2FjeVJvb3RJbmxp
bmVCb3gqKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlk
aVJ1bkxpc3Q8QmlkaVJ1bj4qLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYsIElu
bGluZUJpZGlSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3Qo
UEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2Jq
ZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlTG9naWNh
bFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IFRleHRBbGlnbk1vZGUm
LCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
ZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKIAogcHJp
dmF0ZToKQEAgLTg5LDIwICs5MiwyMCBAQCBwcml2YXRlOgogICAgIEJpZGlSdW4qIGNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KExlZ2FjeVJvb3RJbmxpbmVCb3gqLCBj
b25zdCBMaW5lSW5mbyYsIFRleHRBbGlnbk1vZGUsIGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQm
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQ
b3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgcmVtb3ZlSW5saW5l
Qm94KEJpZGlSdW4mLCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94JikgY29uc3Q7CiAgICAgdm9p
ZCBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKExlZ2FjeVJvb3RJbmxpbmVC
b3gqLCBCaWRpUnVuKiBmaXJzdFJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
IHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmKTsKLSAgICBpbmxpbmUgQmlk
aVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
LCBCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOworICAgIGlubGluZSBCaWRpUnVuKiBoYW5k
bGVUcmFpbGluZ1NwYWNlcyhQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgUEFM
OjpCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOwogICAgIHZvaWQgYXBwZW5kRmxvYXRpbmdP
YmplY3RUb0xhc3RMaW5lKEZsb2F0aW5nT2JqZWN0Jik7Ci0gICAgTGVnYWN5Um9vdElubGluZUJv
eCogY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5k
LCBMaW5lSW5mbyYsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYsIEJpZGlSdW4qIHRyYWlsaW5nU3Bh
Y2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmKTsKKyAgICBMZWdhY3lSb290SW5saW5lQm94KiBjcmVh
dGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBQQUw6OkJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZCwg
TGluZUluZm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNl
UnVuLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExp
bmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOwogICAgIGlubGluZSBjb25zdCBM
ZWdhY3lJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExh
eW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCBG
bG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgSW5saW5lQmlkaVJlc29s
dmVyJiwgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBvbGRFbmQpOwotICAgIHZvaWQgbGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29s
dmVyJiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBC
aWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcyk7CisgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5
b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0
YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwogICAgIHZvaWQgcmVh
dHRhY2hDbGVhbkxpbmVGbG9hdHMoTGVnYWN5Um9vdElubGluZUJveCYgY2xlYW5MaW5lLCBMYXlv
dXRVbml0IGRlbHRhLCBib29sIGlzRmlyc3RDbGVhbkxpbmUpOwogICAgIHZvaWQgbGlua1RvRW5k
TGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwogICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xl
YW5MaW5lKExlZ2FjeVJvb3RJbmxpbmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJv
eE9uQ2xlYW5MaW5lLCBGbG9hdFdpdGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsIGJvb2wm
IGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKICAgICBMZWdhY3lS
b290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElu
bGluZUJpZGlSZXNvbHZlciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxh
eW91dFN0YXRlJiwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJ
dGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMp
OworICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgTGVnYWN5
Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5l
U3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAgICAgYm9vbCBj
aGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJik7CiAgICAg
Ym9vbCBsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChMZWdhY3lSb290SW5saW5lQm94
KiByb290Qm94LCBMYXlvdXRVbml0IGxpbmVEZWx0YSwgUmVuZGVyRnJhZ21lbnRlZEZsb3cqKSBj
b25zdDsKLSAgICBib29sIG1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElu
bGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3Rh
cnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpOworICAgIGJvb2wgbWF0Y2hlZEVu
ZExpbmUoTGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3Qg
TGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVz
JiBlbmRMaW5lU3RhdHVzKTsKICAgICB2b2lkIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAg
ICAgdm9pZCBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCk7CiAgICAgdm9pZCB1cGRhdGVGcmFn
bWVudEZvckxpbmUoTGVnYWN5Um9vdElubGluZUJveCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwCmluZGV4IDhlMWEwZmJlZjU2
Y2Y2MTBlZDE3ZmFkN2M1ZTg0Y2E2NGM3NWQwMmIuLjc1YWU0YWY3NWQ0ODA0NzZiYjQ1OTBiYjcz
NDUxOWZjNDkyMzhhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lSb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
Um9vdElubGluZUJveC5jcHAKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMZWdhY3lSb290SW5saW5lQm94LmgiCiAKLSNpbmNsdWRlICJCaWRpUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclJ1
YnlUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlZlcnRpY2FsUG9z
aXRpb25DYWNoZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE5
OSwxMCArMTk5LDEwIEBAIHZvaWQgTGVnYWN5Um9vdElubGluZUJveDo6YWRqdXN0UG9zaXRpb24o
ZmxvYXQgZHgsIGZsb2F0IGR5KQogdm9pZCBMZWdhY3lSb290SW5saW5lQm94OjpjaGlsZFJlbW92
ZWQoTGVnYWN5SW5saW5lQm94KiBib3gpCiB7CiAgICAgaWYgKCZib3gtPnJlbmRlcmVyKCkgPT0g
bV9saW5lQnJlYWtPYmopCi0gICAgICAgIHNldExpbmVCcmVha0luZm8obnVsbHB0ciwgMCwgQmlk
aVN0YXR1cygpKTsKKyAgICAgICAgc2V0TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBQQUw6OkJp
ZGlTdGF0dXMoKSk7CiAKICAgICBmb3IgKGF1dG8qIHByZXYgPSBwcmV2Um9vdEJveCgpOyBwcmV2
ICYmIHByZXYtPmxpbmVCcmVha09iaigpID09ICZib3gtPnJlbmRlcmVyKCk7IHByZXYgPSBwcmV2
LT5wcmV2Um9vdEJveCgpKSB7Ci0gICAgICAgIHByZXYtPnNldExpbmVCcmVha0luZm8obnVsbHB0
ciwgMCwgQmlkaVN0YXR1cygpKTsKKyAgICAgICAgcHJldi0+c2V0TGluZUJyZWFrSW5mbyhudWxs
cHRyLCAwLCBQQUw6OkJpZGlTdGF0dXMoKSk7CiAgICAgICAgIHByZXYtPm1hcmtEaXJ0eSgpOwog
ICAgIH0KIH0KQEAgLTU5OCwxMiArNTk4LDEyIEBAIFJlbmRlckJsb2NrRmxvdyYgTGVnYWN5Um9v
dElubGluZUJveDo6YmxvY2tGbG93KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
QmxvY2tGbG93PihyZW5kZXJlcigpKTsKIH0KIAotQmlkaVN0YXR1cyBMZWdhY3lSb290SW5saW5l
Qm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKK1BBTDo6QmlkaVN0YXR1cyBMZWdhY3lS
b290SW5saW5lQm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKIHsgCiAgICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0Vvciks
IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0U3Ry
b25nKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xh
c3QpLCBtX2xpbmVCcmVha0NvbnRleHQuY29weVJlZigpIH07CiB9CiAKLXZvaWQgTGVnYWN5Um9v
dElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWdu
ZWQgYnJlYWtQb3NpdGlvbiwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzKQordm9pZCBMZWdhY3lS
b290SW5saW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNp
Z25lZCBicmVha1Bvc2l0aW9uLCBjb25zdCBQQUw6OkJpZGlTdGF0dXMmIHN0YXR1cykKIHsKICAg
ICBtX2xpbmVCcmVha09iaiA9IG9iamVjdDsKICAgICBtX2xpbmVCcmVha1BvcyA9IGJyZWFrUG9z
aXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElu
bGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3gu
aAppbmRleCBlY2VlMjY0ZGI1YzMyOWY1NGZkZDA4ZWYxOWFhYzA2ZTA4MDQzNmU1Li5lNTliNjQ2
MmU4ODI5YjVmNjVlYzk5NzY1MTZhYjI1NTQwZmMzNDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmgKQEAgLTIwLDExICsyMCwxNSBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGVnYWN5
SW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L0JpZGlDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAorbmFtZXNwYWNl
IFBBTCB7CitzdHJ1Y3QgQmlkaVN0YXR1czsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMzMsNyArMzcsNiBAQCBjbGFzcyBMb2dpY2FsU2VsZWN0
aW9uT2Zmc2V0Q2FjaGVzOwogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogY2xhc3MgUmVuZGVyRnJh
Z21lbnRDb250YWluZXI7CiAKLXN0cnVjdCBCaWRpU3RhdHVzOwogc3RydWN0IEdhcFJlY3RzOwog
CiBjbGFzcyBMZWdhY3lSb290SW5saW5lQm94IDogcHVibGljIExlZ2FjeUlubGluZUZsb3dCb3gs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxMZWdhY3lSb290SW5saW5lQm94PiB7CkBAIC05MSw4ICs5
NCw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIGxpbmVCcmVha09iaigp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrT2JqLmdldCgpOyB9Ci0gICAgQmlkaVN0YXR1cyBs
aW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaW5lQnJlYWtJbmZvKFJl
bmRlck9iamVjdCosIHVuc2lnbmVkIGJyZWFrUG9zLCBjb25zdCBCaWRpU3RhdHVzJik7CisgICAg
UEFMOjpCaWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdDsKKyAgICB2b2lkIHNl
dExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQgYnJlYWtQb3MsIGNvbnN0IFBB
TDo6QmlkaVN0YXR1cyYpOwogCiAgICAgdW5zaWduZWQgbGluZUJyZWFrUG9zKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQnJlYWtQb3M7IH0KICAgICB2b2lkIHNldExpbmVCcmVha1Bvcyh1bnNpZ25l
ZCBwKSB7IG1fbGluZUJyZWFrUG9zID0gcDsgfQpAQCAtMjAyLDcgKzIwNSw3IEBAIHByaXZhdGU6
CiAgICAgLy8gV2hlcmUgdGhpcyBsaW5lIGVuZGVkLiBUaGUgZXhhY3Qgb2JqZWN0IGFuZCB0aGUg
cG9zaXRpb24gd2l0aGluIHRoYXQgb2JqZWN0IGFyZSBzdG9yZWQgc28gdGhhdAogICAgIC8vIHdl
IGNhbiBjcmVhdGUgYW4gTGVnYWN5SW5saW5lSXRlcmF0b3IgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIg
dGhlIGVuZCBvZiB0aGlzIGxpbmUuCiAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fbGluZUJy
ZWFrT2JqOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gbV9saW5lQnJlYWtDb250ZXh0OworICAg
IFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiBtX2xpbmVCcmVha0NvbnRleHQ7CiAKICAgICBMYXlv
dXRVbml0IG1fbGluZVRvcDsKICAgICBMYXlvdXRVbml0IG1fbGluZUJvdHRvbTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGM1NjYyZTZiMDMxYzUzNTFlMDhl
NTg4NDRkYjRiOTkwMzM2NzNhNzguLmQxNGUyZTlhNmI1OWU5Mjg0YmZiZmMxMDU5ZmIxYzYxOTRi
NDM1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzA4
Nyw5ICszMDg3LDkgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25z
dAogICAgIHJldHVybiAiUmVuZGVyQmxvY2siOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykK
K1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdW
aWV3LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgYXV0byB0ZXh0RGlyZWN0aW9uID0g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9y
ZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbDsKICAgICBpZiAoZmxhZ3MgIT0gRGVmYXVsdFRleHRS
dW5GbGFncykgewogICAgICAgICBpZiAoZmxhZ3MgJiBSZXNwZWN0RGlyZWN0aW9uKQpAQCAtMzEw
NiwzNCArMzEwNiwzNCBAQCBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFN0
cmluZ1ZpZXcgc3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUmCiAgICAgcmV0dXJuIFRleHRS
dW4oV1RGTW92ZSh1cGRhdGVkU3RyaW5nKSwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9u
LCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK1RleHRS
dW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24s
IFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihTdHJp
bmdWaWV3KHN0cmluZyksIHN0eWxlLCBleHBhbnNpb24sIGZsYWdzKTsKIH0KIAotVGV4dFJ1biBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5n
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7
CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyhhdG9tU3RyaW5nKSwgc3R5
bGUsIGV4cGFuc2lvbiwgZmxhZ3MpOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBj
b25zdHJ1Y3RUZXh0UnVuKHRleHQuc3RyaW5nVmlldygpLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0K
IAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJUZXh0
JiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQmIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBBTDo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHVuc2lnbmVkIHN0b3AgPSBvZmZzZXQg
KyBsZW5ndGg7CiAgICAgQVNTRVJUKHN0b3AgPD0gdGV4dC50ZXh0KCkubGVuZ3RoKCkpOwogICAg
IHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHRleHQuc3RyaW5nVmlldyhvZmZzZXQsIHN0b3ApLCBz
dHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQQUw6OkV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbikKIHsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihTdHJpbmdWaWV3
KGNoYXJhY3RlcnMsIGxlbmd0aCksIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBjb25z
dHJ1Y3RUZXh0UnVuKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVuZ3RoKSwgc3R5bGUsIGV4cGFu
c2lvbik7CiB9CkBAIC0zMzA3LDEyICszMzA3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dEJvcmRlckJveFJlY3RGb3JQYWludGluZyhMYXlvdXRSZWN0JiBwYWludFJlY3QpCiAgICAgaWYg
KHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBMYXlvdXRVbml0
IHlPZmYgPSBzdGQ6Om1heCgwX2x1LCAobGVnZW5kLT5oZWlnaHQoKSAtIFJlbmRlckJveDo6Ym9y
ZGVyQmVmb3JlKCkpIC8gMik7CiAgICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0
LmhlaWdodCgpIC0geU9mZik7Ci0gICAgICAgIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0g
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQorICAgICAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9k
ZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQogICAgICAgICAgICAgcGFpbnRS
ZWN0LnNldFkocGFpbnRSZWN0LnkoKSArIHlPZmYpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIExh
eW91dFVuaXQgeE9mZiA9IHN0ZDo6bWF4KDBfbHUsIChsZWdlbmQtPndpZHRoKCkgLSBSZW5kZXJC
b3g6OmJvcmRlckJlZm9yZSgpKSAvIDIpOwogICAgICAgICBwYWludFJlY3Quc2V0V2lkdGgocGFp
bnRSZWN0LndpZHRoKCkgLSB4T2ZmKTsKLSAgICAgICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUo
KSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgIGlmIChzdHlsZSgpLndyaXRp
bmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCiAgICAgICAgICAgICBw
YWludFJlY3Quc2V0WChwYWludFJlY3QueCgpICsgeE9mZik7CiAgICAgfQogfQpAQCAtMzMyOSwx
MSArMzMyOSwxMSBAQCBMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpwYWludFJlY3RUb0NsaXBPdXRG
cm9tQm9yZGVyKGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdAogICAgIExheW91dFVuaXQgYm9y
ZGVyRXh0ZW50ID0gUmVuZGVyQm94Ojpib3JkZXJCZWZvcmUoKTsKICAgICBpZiAoc3R5bGUoKS5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGNsaXBSZWN0LnNldFgocGFpbnRS
ZWN0LngoKSArIGxlZ2VuZC0+eCgpKTsKLSAgICAgICAgY2xpcFJlY3Quc2V0WShzdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tID8gcGFpbnRSZWN0LnkoKSA6
IHBhaW50UmVjdC55KCkgKyBwYWludFJlY3QuaGVpZ2h0KCkgLSBib3JkZXJFeHRlbnQpOworICAg
ICAgICBjbGlwUmVjdC5zZXRZKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbSA/IHBhaW50UmVjdC55KCkgOiBwYWludFJlY3QueSgpICsgcGFpbnRS
ZWN0LmhlaWdodCgpIC0gYm9yZGVyRXh0ZW50KTsKICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgo
bGVnZW5kLT53aWR0aCgpKTsKICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KGJvcmRlckV4dGVu
dCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY2xpcFJlY3Quc2V0WChzdHlsZSgpLndyaXRpbmdN
b2RlKCkgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0ID8gcGFpbnRSZWN0LngoKSA6IHBhaW50
UmVjdC54KCkgKyBwYWludFJlY3Qud2lkdGgoKSAtIGJvcmRlckV4dGVudCk7CisgICAgICAgIGNs
aXBSZWN0LnNldFgoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6Okxl
ZnRUb1JpZ2h0ID8gcGFpbnRSZWN0LngoKSA6IHBhaW50UmVjdC54KCkgKyBwYWludFJlY3Qud2lk
dGgoKSAtIGJvcmRlckV4dGVudCk7CiAgICAgICAgIGNsaXBSZWN0LnNldFkocGFpbnRSZWN0Lnko
KSArIGxlZ2VuZC0+eSgpKTsKICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgoYm9yZGVyRXh0ZW50
KTsKICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KGxlZ2VuZC0+aGVpZ2h0KCkpOwpAQCAtMzM2
MCwyOCArMzM2MCwyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRJbnRyaW5zaWNCb3JkZXJGb3JG
aWVsZHNldChMYXlvdXRVbml0IHBhZGRpbmcpCiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmJv
cmRlclRvcCgpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSAhPSBXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgIWludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCkpCisg
ICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSAhPSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0Jv
dHRvbSB8fCAhaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKSkKICAgICAgICAgcmV0dXJuIFJl
bmRlckJveDo6Ym9yZGVyVG9wKCk7CiAgICAgcmV0dXJuIFJlbmRlckJveDo6Ym9yZGVyVG9wKCkg
KyBpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpib3JkZXJMZWZ0KCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgp
ICE9IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCB8fCAhaW50cmluc2ljQm9yZGVyRm9yRmllbGRz
ZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6
OkxlZnRUb1JpZ2h0IHx8ICFpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpKQogICAgICAgICBy
ZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJMZWZ0KCk7CiAgICAgcmV0dXJuIFJlbmRlckJveDo6Ym9y
ZGVyTGVmdCgpICsgaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKTsKIH0KIAogTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6Ym9yZGVyQm90dG9tKCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS53
cml0aW5nTW9kZSgpICE9IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCB8fCAhaW50cmluc2ljQm9y
ZGVyRm9yRmllbGRzZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFBBTDo6
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wIHx8ICFpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgp
KQogICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJCb3R0b20oKTsKICAgICByZXR1cm4g
UmVuZGVyQm94Ojpib3JkZXJCb3R0b20oKSArIGludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCk7
CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmJvcmRlclJpZ2h0KCkgY29uc3QKIHsKLSAg
ICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCB8
fCAhaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5n
TW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0IHx8ICFpbnRyaW5zaWNCb3Jk
ZXJGb3JGaWVsZHNldCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJSaWdodCgp
OwogICAgIHJldHVybiBSZW5kZXJCb3g6OmJvcmRlclJpZ2h0KCkgKyBpbnRyaW5zaWNCb3JkZXJG
b3JGaWVsZHNldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRl
eCAyMWU2MjEwZTU5YzMyN2E4Yzc0MjVhZDQwZjA3MWJkMzMxNzczZTRlLi5kYWVjNTYyMThkMWM2
NzY1OWEwOGE5MzBkZmM1NGYxYmY1ODhmNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaApAQCAtMTk0LDE5ICsxOTQsMTkgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5
bGUmLAotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHRS
dW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOworICAgICAgICBQQUw6OkV4cGFuc2lvbkJl
aGF2aW9yID0gUEFMOjpEZWZhdWx0RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4
dFJ1bkZsYWdzKTsKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgPSBE
ZWZhdWx0RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKKyAg
ICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVsdEV4cGFuc2lvbiwgVGV4
dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgc3RhdGljIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAotICAg
ICAgICBFeHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9
IERlZmF1bHRUZXh0UnVuRmxhZ3MpOworICAgICAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yID0g
UEFMOjpEZWZhdWx0RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdz
KTsKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQm
LCBjb25zdCBSZW5kZXJTdHlsZSYsCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVs
dEV4cGFuc2lvbik7CisgICAgICAgIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1
bHRFeHBhbnNpb24pOwogICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyVGV4dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSYsCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbik7
CisgICAgICAgIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24p
OwogICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAotICAgICAgICBFeHBh
bnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24pOworICAgICAgICBQQUw6OkV4cGFuc2lv
bkJlaGF2aW9yID0gUEFMOjpEZWZhdWx0RXhwYW5zaW9uKTsKICAgICBzdGF0aWMgVGV4dFJ1biBj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiwKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0
RXhwYW5zaW9uKTsKKyAgICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVs
dEV4cGFuc2lvbik7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25z
dDsKICAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZTc0MGQ1MmEyYjAzMmExYTJmNGU0MmZlZGNj
N2QyOTk2Y2VjYWExNS4uYzMzNmI2NGYzMDY2ZTA1MThhZDkwYzNhMTdhMDk4MmFlZTc3NjMxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTc5LDEwICs3OSwxMCBA
QAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRz
Lmg+CiAKQEAgLTMwMTksMjAgKzMwMTksMjAgQEAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBSZW5k
ZXJCb3g6OnJlbmRlckJveEZyYWdtZW50SW5mbyhSZW5kZXJGcmFnbWVudENvbnRhaW5lcioKIHN0
YXRpYyBib29sIHNob3VsZEZsaXBCZWZvcmVBZnRlck1hcmdpbnMoY29uc3QgUmVuZGVyU3R5bGUm
IGNvbnRhaW5pbmdCbG9ja1N0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSkKIHsK
ICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrU3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSAhPSBjaGlsZFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICBXcml0aW5n
TW9kZSBjaGlsZFdyaXRpbmdNb2RlID0gY2hpbGRTdHlsZS0+d3JpdGluZ01vZGUoKTsKKyAgICBQ
QUw6OldyaXRpbmdNb2RlIGNoaWxkV3JpdGluZ01vZGUgPSBjaGlsZFN0eWxlLT53cml0aW5nTW9k
ZSgpOwogICAgIGJvb2wgc2hvdWxkRmxpcCA9IGZhbHNlOwogICAgIHN3aXRjaCAoY29udGFpbmlu
Z0Jsb2NrU3R5bGUud3JpdGluZ01vZGUoKSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgotICAgICAgICBzaG91bGRGbGlwID0gKGNoaWxkV3JpdGluZ01vZGUgPT0gV3JpdGlu
Z01vZGU6OlJpZ2h0VG9MZWZ0KTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOgorICAgICAgICBzaG91bGRGbGlwID0gKGNoaWxkV3JpdGluZ01vZGUgPT0gUEFMOjpXcml0
aW5nTW9kZTo6UmlnaHRUb0xlZnQpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdyaXRpbmdN
b2RlOjpCb3R0b21Ub1RvcDoKLSAgICAgICAgc2hvdWxkRmxpcCA9IChjaGlsZFdyaXRpbmdNb2Rl
ID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpCb3R0b21Ub1RvcDoKKyAgICAgICAgc2hvdWxkRmxpcCA9IChjaGlsZFdyaXRpbmdNb2RlID09
IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgIHNob3VsZEZsaXAgPSAoY2hpbGRX
cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3ApOworICAgIGNhc2UgUEFMOjpX
cml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHNob3VsZEZsaXAgPSAoY2hpbGRXcml0
aW5nTW9kZSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgotICAgICAgICBzaG91bGRGbGlw
ID0gKGNoaWxkV3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wKTsKKyAgICBj
YXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgICAgICBzaG91bGRGbGlwID0g
KGNoaWxkV3JpdGluZ01vZGUgPT0gUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3ApOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3NjksMTQgKzM3NjksMTQgQEAgc3RhdGljIHZvaWQg
Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYg
bG9naWNhbFJpZ2gKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQg
PSBjaGlsZC0+cGFyZW50KCk7Ci0gICAgVGV4dERpcmVjdGlvbiBwYXJlbnREaXJlY3Rpb24gPSBw
YXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHBhcmVu
dERpcmVjdGlvbiA9IHBhcmVudC0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKIAogICAgIC8vIFRoaXMg
bWV0aG9kIGlzIHVzaW5nIGVuY2xvc2luZ0JveCgpIHdoaWNoIGlzIHdyb25nIGZvciBhYnNvbHV0
ZWx5CiAgICAgLy8gcG9zaXRpb25lZCBncmlkIGl0ZW1zLCBhcyB0aGV5IHJlbHkgb24gdGhlIGdy
aWQgYXJlYS4gU28gZm9yIGdyaWQgaXRlbXMgaWYKICAgICAvLyBib3RoICJsZWZ0IiBhbmQgInJp
Z2h0IiBwcm9wZXJ0aWVzIGFyZSAiYXV0byIsIHdlIGNhbiBjb25zaWRlciB0aGF0IG9uZSBvZgog
ICAgIC8vIHRoZW0gKGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uKSBpcyBzaW1wbHkgIjAiLgog
ICAgIGlmIChwYXJlbnQtPmlzUmVuZGVyR3JpZCgpICYmIHBhcmVudCA9PSBjaGlsZC0+Y29udGFp
bmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIpCisgICAgICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIpCiAgICAgICAgICAgICBsb2dpY2FsTGVmdC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpG
aXhlZCwgMCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxSaWdodC5zZXRWYWx1
ZShMZW5ndGhUeXBlOjpGaXhlZCwgMCk7CkBAIC0zNzg0LDcgKzM3ODQsNyBAQCBzdGF0aWMgdm9p
ZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3Ro
JiBsb2dpY2FsUmlnaAogICAgIH0KIAogICAgIC8vIEZvciBvcnRob2dvbmFsIGZsb3dzIHdlIGRv
bid0IGNhcmUgd2hldGhlciB0aGUgcGFyZW50IGlzIExUUiBvciBSVEwgYmVjYXVzZSBpdCBkb2Vz
IG5vdCBhZmZlY3QgdGhlIHBvc2l0aW9uIGluIG91ciBpbmxpbmUgYXhpcy4KLSAgICBpZiAocGFy
ZW50RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiB8fCBpc09ydGhvZ29uYWwoKmNoaWxk
LCAqcGFyZW50KSkgeworICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgfHwgaXNPcnRob2dvbmFsKCpjaGlsZCwgKnBhcmVudCkpIHsKICAgICAgICAgTGF5
b3V0VW5pdCBzdGF0aWNQb3NpdGlvbiA9IGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpID8g
Y2hpbGQtPmxheWVyKCktPnN0YXRpY0Jsb2NrUG9zaXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLmJv
cmRlckJlZm9yZSgpIDogY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkgLSBj
b250YWluZXJCbG9jay5ib3JkZXJMb2dpY2FsTGVmdCgpOwogICAgICAgICBmb3IgKGF1dG8qIGN1
cnJlbnQgPSBwYXJlbnQ7IGN1cnJlbnQgJiYgY3VycmVudCAhPSAmY29udGFpbmVyQmxvY2s7IGN1
cnJlbnQgPSBjdXJyZW50LT5jb250YWluZXIoKSkgewogICAgICAgICAgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KCpjdXJyZW50KSkKQEAgLTM4NzMsNyArMzg3Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1CiAgICAgLy8gVXNlIHRoZSBjb250YWluZXIgYmxvY2sncyBkaXJlY3Rpb24gZXhjZXB0
IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHN0YXRpYyBkaXN0YW5jZQogICAgIC8vIFRoaXMgY29uZm9y
bXMgd2l0aCB0aGUgcmVmZXJlbmNlIHJlc3VsdHMgZm9yIGFic3Bvcy1yZXBsYWNlZC13aWR0aC1t
YXJnaW4tMDAwLmh0bQogICAgIC8vIG9mIHRoZSBDU1MgMi4xIHRlc3Qgc3VpdGUKLSAgICBUZXh0
RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGly
ZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNv
bnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRh
bCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgY29uc3QgTGF5b3V0VW5pdCBib3Jk
ZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CkBAIC00MDA2
LDcgKzQwMDYsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zm
c2V0KExheW91dFVuaXQmIGxvZ2ljYWxMZWZ0UG9zLCBjb25zdAogICAgICAgICBsb2dpY2FsTGVm
dFBvcyArPSAoY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250YWluZXJCbG9j
ay5ib3JkZXJMZWZ0KCkgOiBjb250YWluZXJCbG9jay5ib3JkZXJUb3AoKSk7CiB9CiAKLXZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdp
ZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IGNvbnRhaW5lckJsb2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKK3ZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdp
ZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IGNvbnRhaW5lckJsb2NrLCBQQUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVu
Z3RoIGxvZ2ljYWxMZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNh
bExlZnQsIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1dGVkVmFsdWVzKSBjb25zdApAQCAtNDA3MCw3ICs0MDcwLDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBl
LCBMZW5ndGggbG8KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXNl
IHRoZSBjb250YWluaW5nIGJsb2NrJ3MgZGlyZWN0aW9uIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQg
YmxvY2sncwogICAgICAgICAgICAgICAgIC8vIHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFi
c3Bvcy1ub24tcmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC4KLSAgICAgICAgICAgICAgICBpZiAo
Y29udGFpbmVyRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgICAgICAgICAg
ICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsK
ICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTG9naWNhbExlZnRWYWx1ZSA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIG1hcmdpbkxvZ2ljYWxSaWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2U7IC8v
IHdpbGwgYmUgbmVnYXRpdmUKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA5Myw3ICs0
MDkzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNp
bmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG8KIAogICAgICAgICAgICAgLy8gVXNlIHRo
ZSBjb250YWluaW5nIGJsb2NrJ3MgZGlyZWN0aW9uIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQgYmxv
Y2sncwogICAgICAgICAgICAgLy8gcGVyIENTUyAyLjEgcmVmZXJlbmNlIHRlc3QgYWJzcG9zLW5v
bi1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLgotICAgICAgICAgICAgaWYgKCFpc09ydGhvZ29u
YWwoKnRoaXMsIGNvbnRhaW5lckJsb2NrKSAmJiBjb250YWluZXJEaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6UlRMKQorICAgICAgICAgICAgaWYgKCFpc09ydGhvZ29uYWwoKnRoaXMsIGNvbnRh
aW5lckJsb2NrKSAmJiBjb250YWluZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpS
VEwpCiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IChhdmFpbGFibGVTcGFjZSAr
IGxvZ2ljYWxMZWZ0VmFsdWUpIC0gbWFyZ2luTG9naWNhbExlZnRWYWx1ZSAtIG1hcmdpbkxvZ2lj
YWxSaWdodFZhbHVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTQyMjMsNyArNDIyMyw3
IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNh
bFRvcCwgTGVuZ3RoJiBsb2dpY2FsQm90dG9tCiAKICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIFJU
TCB0aGVuIHdlIG5lZWQgdG8gZmxpcCB0aGUgY29vcmRpbmF0ZSBieSBzZXR0aW5nIHRoZSBsb2dp
Y2FsIGJvdHRvbSBpbnN0ZWFkIG9mIHRoZSBsb2dpY2FsIHRvcC4gVGhhdCBvbmx5IG5lZWRzCiAg
ICAgLy8gdG8gYmUgZG9uZSBpbiBjYXNlIG9mIG9ydGhvZ29uYWwgd3JpdGluZyBtb2RlcywgZm9y
IGhvcml6b250YWwgb25lcyB0aGUgdGV4dCBkaXJlY3Rpb24gb2YgdGhlIHBhcmVudCBkb2VzIG5v
dCBhZmZlY3QgdGhlIGJsb2NrIHBvc2l0aW9uLgotICAgIGlmIChwYXJlbnQtPnN0eWxlKCkuZGly
ZWN0aW9uKCkgIT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIGlzT3J0aG9nb25hbCgqY2hpbGQsICpw
YXJlbnQpKQorICAgIGlmIChwYXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIgJiYgaXNPcnRob2dvbmFsKCpjaGlsZCwgKnBhcmVudCkpCiAgICAgICAg
IGxvZ2ljYWxCb3R0b20uc2V0VmFsdWUoTGVuZ3RoVHlwZTo6Rml4ZWQsIHN0YXRpY0xvZ2ljYWxU
b3ApOwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbFRvcC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpG
aXhlZCwgc3RhdGljTG9naWNhbFRvcCk7CkBAIC00NTI4LDcgKzQ1MjgsNyBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZChMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZQogCiAgICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVz
ZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRo
ZSBjb250YWluZXIgYmxvY2sncy4KLSAgICBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlv
biA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0
aW9uKCk7CiAKICAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCiAgICAgYm9vbCBpc0hvcml6b250
YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwpAQCAtNDU5NCw3ICs0NTk0LDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNh
bEV4dGVudENvbXB1dGVkVmFsdWUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFVz
ZSB0aGUgY29udGFpbmluZyBibG9jaydzIGRpcmVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcGFyZW50
IGJsb2NrJ3MKICAgICAgICAgICAgIC8vIHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFic3Bv
cy1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLgotICAgICAgICAgICAgaWYgKGNvbnRhaW5lckRp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICAgICAgICAgIGlmIChjb250YWlu
ZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsKICAgICAgICAgICAgICAg
ICBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gMDsKICAgICAgICAgICAgICAgICBtYXJnaW5Mb2dp
Y2FsUmlnaHRBbGlhcyA9IGRpZmZlcmVuY2U7IC8vIHdpbGwgYmUgbmVnYXRpdmUKICAgICAgICAg
ICAgIH0gZWxzZSB7CkBAIC00NjQyLDcgKzQ2NDIsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
ZQogICAgICAgICBsb2dpY2FsUmlnaHRWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKGxvZ2ljYWxSaWdo
dCwgY29udGFpbmVyTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IHZh
bHVlRm9yTGVuZ3RoKGxvZ2ljYWxMZWZ0LCBjb250YWluZXJMb2dpY2FsV2lkdGgpOwogICAgICAg
ICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyByaWdodC10by1sZWZ0LCB0aGVuIHB1c2gg
dGhlIGxlZnQgcG9zaXRpb24gYXMgZmFyIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZQotICAgICAg
ICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkgeworICAgICAg
ICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSB7CiAg
ICAgICAgICAgICBpbnQgdG90YWxMb2dpY2FsV2lkdGggPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVu
dCArIGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSArICBtYXJnaW5Mb2dpY2Fs
TGVmdEFsaWFzICsgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXM7CiAgICAgICAgICAgICBsb2dpY2Fs
TGVmdFZhbHVlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKHRvdGFsTG9naWNhbFdpZHRoIC0g
bG9naWNhbExlZnRWYWx1ZSk7CiAgICAgICAgIH0KQEAgLTUxNDAsOSArNTE0MCw5IEBAIExheW91
dFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50CiAgICAgCiAgICAgLy8gV2UgYXJlIHB1dHRpbmcgb3Vyc2VsdmVz
IGludG8gb3VyIHBhcmVudCdzIGNvb3JkaW5hdGUgc3BhY2UuICBJZiB0aGVyZSBpcyBhIGZsaXBw
ZWQgYmxvY2sgbWlzbWF0Y2gKICAgICAvLyBpbiBhIHBhcnRpY3VsYXIgYXhpcywgdGhlbiB3ZSBo
YXZlIHRvIGZsaXAgdGhlIHJlY3QgYWxvbmcgdGhhdCBheGlzLgotICAgIGlmIChzdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0IHx8IHBhcmVudFN0eWxlLT53
cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCkKKyAgICBpZiAoc3R5bGUo
KS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0IHx8IHBhcmVu
dFN0eWxlLT53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQog
ICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKLSAgICBlbHNlIGlmIChz
dHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wIHx8IHBhcmVu
dFN0eWxlLT53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCkKKyAgICBl
bHNlIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9t
VG9Ub3AgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6
Qm90dG9tVG9Ub3ApCiAgICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsK
IAogICAgIHJldHVybiByZWN0OwpAQCAtNTIwMyw5ICs1MjAzLDkgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnQKICAgICAKICAgICAvLyBXZSBhcmUgcHV0dGluZyBvdXJzZWx2ZXMgaW50byBvdXIg
cGFyZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEgZmxpcHBlZCBibG9jayBt
aXNtYXRjaAogICAgIC8vIGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIHdlIGhhdmUgdG8gZmxp
cCB0aGUgcmVjdCBhbG9uZyB0aGF0IGF4aXMuCi0gICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUo
KSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2Rl
KCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQorICAgIGlmIChzdHlsZSgpLndyaXRpbmdN
b2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQgfHwgcGFyZW50U3R5bGUtPndy
aXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpCiAgICAgICAgIHJl
Y3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwotICAgIGVsc2UgaWYgKHN0eWxlKCkud3Jp
dGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AgfHwgcGFyZW50U3R5bGUtPndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wKQorICAgIGVsc2UgaWYgKHN0
eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCB8fCBw
YXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1Rv
cCkKICAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogCiAgICAgcmV0
dXJuIHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZTM0MjY3OGQx
YzQzNjM5ODY1NzkwODdhNWM0ZTUyMDMxZDZiMDU0NC4uN2YzMjMwMGFkZWVhN2E2NDY0NDYzOWNh
OWJiNWMyNTU4M2FhNDQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAt
NzU3LDcgKzc1Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXBhaW50TGF5ZXJSZWN0c0Zvcklt
YWdlKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgRmlsbExheWVyJiBsYXllcnMsIGJvb2wgZHJhd2lu
Z0JhY2tncm91bmQpOwogCiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQo
TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIFRleHREaXJlY3Rpb24g
Y29udGFpbmVyRGlyZWN0aW9uLAorICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhVc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrLCBQQUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGly
ZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRp
bmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBs
b2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0
LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmlu
ZGV4IDVjY2YxN2E5Mjc5ZTM1N2Y3ZGY3NTM5NDhiY2Q0ZDc3OWFjMzNiOGUuLjQzNTNkYTJmODdj
MWNkMzc4Mzc1NjAxZjZiZGU4NzkxMWFjNmQ2YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTQ4OCw3ICsxNDg4LDcgQEAg
c3RhdGljIGJvb2wgYm9yZGVyU3R5bGVJc0RvdHRlZE9yRGFzaGVkKEJvcmRlclN0eWxlIHN0eWxl
KQogCiAvLyBCb3JkZXJTdHlsZTo6T3V0c2V0IGRhcmtlbnMgdGhlIGJvdHRvbSBhbmQgcmlnaHQg
KGFuZCBtYXliZSBsaWdodGVucyB0aGUgdG9wIGFuZCBsZWZ0KQogLy8gQm9yZGVyU3R5bGU6Oklu
c2V0IGRhcmtlbnMgdGhlIHRvcCBhbmQgbGVmdCAoYW5kIG1heWJlIGxpZ2h0ZW5zIHRoZSBib3R0
b20gYW5kIHJpZ2h0KQotc3RhdGljIGlubGluZSBib29sIGJvcmRlclN0eWxlSGFzVW5tYXRjaGVk
Q29sb3JzQXRDb3JuZXIoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQm94U2lkZSBh
ZGphY2VudFNpZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVIYXNVbm1hdGNoZWRD
b2xvcnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6
Qm94U2lkZSBhZGphY2VudFNpZGUpCiB7CiAgICAgLy8gVGhlc2Ugc3R5bGVzIG1hdGNoIGF0IHRo
ZSB0b3AvbGVmdCBhbmQgYm90dG9tL3JpZ2h0LgogICAgIGlmIChzdHlsZSA9PSBCb3JkZXJTdHls
ZTo6SW5zZXQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBzdHlsZSA9PSBCb3Jk
ZXJTdHlsZTo6UmlkZ2UgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCkgewpAQCAtMTUw
MSw3ICsxNTAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGJvcmRlclN0eWxlSGFzVW5tYXRjaGVk
Q29sb3JzQXRDb3JuZXIoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUgc2lk
ZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcykKK3N0YXRp
YyBpbmxpbmUgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6
OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRnZXMpCiB7CiAgICAg
YXV0byYgZWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwogICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IGVk
Z2VzLmF0KGFkamFjZW50U2lkZSk7CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29sb3JzTWF0Y2hBdENvcm5lcihCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRT
aWRlLCBjb25zdAogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb2xvck5lZWRzQW50aUFsaWFz
QXRDb3JuZXIoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVy
RWRnZXMmIGVkZ2VzKQorc3RhdGljIGlubGluZSBib29sIGNvbG9yTmVlZHNBbnRpQWxpYXNBdENv
cm5lcihQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3Qg
Qm9yZGVyRWRnZXMmIGVkZ2VzKQogewogICAgIGF1dG8mIGVkZ2UgPSBlZGdlcy5hdChzaWRlKTsK
ICAgICBhdXRvJiBhZGphY2VudEVkZ2UgPSBlZGdlcy5hdChhZGphY2VudFNpZGUpOwpAQCAtMTUz
NCwxMSArMTUzNCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29sb3JOZWVkc0FudGlBbGlhc0F0
Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZAogfQogCiAvLyBUaGlzIGFz
c3VtZXMgdGhhdCB3ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuCi1z
dGF0aWMgaW5saW5lIGJvb2wgd2lsbEJlT3ZlcmRyYXduKEJveFNpZGUgc2lkZSwgQm94U2lkZSBh
ZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcykKK3N0YXRpYyBpbmxpbmUgYm9v
bCB3aWxsQmVPdmVyZHJhd24oUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2Vu
dFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcykKIHsKICAgICBzd2l0Y2ggKHNpZGUpIHsK
LSAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbTogeworICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbTog
ewogICAgICAgICBhdXRvJiBlZGdlID0gZWRnZXMuYXQoc2lkZSk7CiAgICAgICAgIGF1dG8mIGFk
amFjZW50RWRnZSA9IGVkZ2VzLmF0KGFkamFjZW50U2lkZSk7CiAKQEAgLTE1NTMsMTUgKzE1NTMs
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHdpbGxCZU92ZXJkcmF3bihCb3hTaWRlIHNpZGUsIEJv
eFNpZGUgYWRqYWNlbnRTaWRlLCBjb25zdCBCb3IKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgotICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6Cisg
ICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0
OgogICAgICAgICAvLyBUaGVzZSBkcmF3IGxhc3QsIHNvIGFyZSBuZXZlciBvdmVyZHJhd24uCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKEJveFNpZGUgc2lkZSwgQm94
U2lkZSBhZGphY2VudFNpZGUsIEJvcmRlclN0eWxlIHN0eWxlLCBCb3JkZXJTdHlsZSBhZGphY2Vu
dFN0eWxlKQorc3RhdGljIGlubGluZSBib29sIGJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShQQUw6
OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5
bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlID09IEJvcmRl
clN0eWxlOjpEb3VibGUgfHwgYWRqYWNlbnRTdHlsZSA9PSBCb3JkZXJTdHlsZTo6RG91YmxlIHx8
IGFkamFjZW50U3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBhZGphY2VudFN0eWxlID09
IEJvcmRlclN0eWxlOjpSaWRnZSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTc1LDcgKzE1
NzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKEJveFNp
ZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsCiAgICAgcmV0dXJuIGJvcmRlclN0eWxlSGFz
VW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIoc3R5bGUsIHNpZGUsIGFkamFjZW50U2lkZSk7CiB9CiAK
LXN0YXRpYyBib29sIGpvaW5SZXF1aXJlc01pdHJlKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGph
Y2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgYm9vbCBhbGxvd092ZXJkcmF3KQor
c3RhdGljIGJvb2wgam9pblJlcXVpcmVzTWl0cmUoUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgYm9vbCBhbGxvd092
ZXJkcmF3KQogewogICAgIGF1dG8mIGVkZ2UgPSBlZGdlcy5hdChzaWRlKTsKICAgICBhdXRvJiBh
ZGphY2VudEVkZ2UgPSBlZGdlcy5hdChhZGphY2VudFNpZGUpOwpAQCAtMTU5NSw3ICsxNTk1LDcg
QEAgc3RhdGljIGJvb2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFk
amFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRp
YyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRS
ZWN0JmlubmVyQm9yZGVyLCBCb3hTaWRlIHNpZGUpCitzdGF0aWMgUm91bmRlZFJlY3QgY2FsY3Vs
YXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJvcmRlciwgUEFM
OjpCb3hTaWRlIHNpZGUpCiB7CiAgICAgLy8gRXhwYW5kIHRoZSBpbm5lciBib3JkZXIgYXMgbmVj
ZXNzYXJ5IHRvIG1ha2UgaXQgYSByb3VuZGVkIHJlY3QgKGkuZS4gcmFkaWkgY29udGFpbmVkIHdp
dGhpbiBlYWNoIGVkZ2UpLgogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBmYWN0
IHdlIG9ubHkgZ2V0IHJhZGlpIG5vdCBjb250YWluZWQgd2l0aGluIGVhY2ggZWRnZSBpZiBvbmUg
b2YgdGhlIHJhZGlpCkBAIC0xNjA3LDcgKzE2MDcsNyBAQCBzdGF0aWMgUm91bmRlZFJlY3QgY2Fs
Y3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJvcmRlciwg
QgogICAgIGZsb2F0IG1heFJhZGlpOwogCiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBC
b3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgb3ZlcnNo
b290ID0gbmV3UmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKyBuZXdSYWRpaS50b3BSaWdodCgpLndp
ZHRoKCkgLSBuZXdSZWN0LndpZHRoKCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIShuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAmJiBuZXdSYWRp
aS50b3BSaWdodCgpLndpZHRoKCkpKTsKQEAgLTE2MjIsNyArMTYyMiw3IEBAIHN0YXRpYyBSb3Vu
ZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRSZWN0Jmlu
bmVyQm9yZGVyLCBCCiAgICAgICAgICAgICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRpaSk7CiAg
ICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkuYm90dG9tTGVm
dCgpLndpZHRoKCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkgLSBuZXdSZWN0Lndp
ZHRoKCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IShuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSAmJiBuZXdSYWRpaS5ib3R0b21SaWdodCgp
LndpZHRoKCkpKTsKQEAgLTE2MzksNyArMTYzOSw3IEBAIHN0YXRpYyBSb3VuZGVkUmVjdCBjYWxj
dWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRSZWN0JmlubmVyQm9yZGVyLCBC
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6Cisg
ICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlp
LnRvcExlZnQoKS5oZWlnaHQoKSArIG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAtIG5l
d1JlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIShuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpKSk7CkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBzdGF0aWMgUm91bmRlZFJl
Y3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJv
cmRlciwgQgogICAgICAgICAgICAgbmV3UmVjdC5zZXRXaWR0aChtYXhSYWRpaSk7CiAgICAgICAg
IGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICBjYXNlIFBBTDo6Qm94U2lk
ZTo6UmlnaHQ6CiAgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0
KCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpIC0gbmV3UmVjdC5oZWlnaHQoKTsK
ICAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsKICAgICAgICAgICAgIEFTU0VSVCghKG5ld1Jh
ZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQo
KSkpOwpAQCAtMTY3Niw3ICsxNjc2LDcgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFk
anVzdGVkSW5uZXJCb3JkZXIoY29uc3QgUm91bmRlZFJlY3QmaW5uZXJCb3JkZXIsIEIKIH0KIAog
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPbmVCb3JkZXJTaWRlKEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJv
dW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAot
ICAgIGNvbnN0IExheW91dFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRq
YWNlbnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNpZGUyLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRn
ZXMsIGNvbnN0IFBhdGgqIHBhdGgsCisgICAgY29uc3QgTGF5b3V0UmVjdCYgc2lkZVJlY3QsIFBB
TDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlMSwgUEFMOjpCb3hTaWRl
IGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgY29uc3QgUGF0aCogcGF0
aCwKICAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSwgYm9vbCBh
bnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKQogewogICAgIGF1dG8mIGVkZ2VU
b1JlbmRlciA9IGVkZ2VzLmF0KHNpZGUpOwpAQCAtMTcyMiwyMiArMTcyMiwyMiBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsCiAgICAgfQogfQogCi1zdGF0aWMgTGF5b3V0UmVjdCBjYWxjdWxhdGVT
aWRlUmVjdChjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2Vz
JiBlZGdlcywgQm94U2lkZSBzaWRlKQorc3RhdGljIExheW91dFJlY3QgY2FsY3VsYXRlU2lkZVJl
Y3QoY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRn
ZXMsIFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIExheW91dFJlY3Qgc2lkZVJlY3QgPSBvdXRl
ckJvcmRlci5yZWN0KCk7CiAgICAgZmxvYXQgd2lkdGggPSBlZGdlcy5hdChzaWRlKS53aWR0aEZv
clBhaW50aW5nKCk7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICBjYXNlIEJveFNpZGU6OlRv
cDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICBzaWRlUmVjdC5zZXRIZWln
aHQod2lkdGgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgc2lkZVJlY3Quc2hpZnRYRWRnZVRv
KHNpZGVSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgc2lk
ZVJlY3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0
OgogICAgICAgICBzaWRlUmVjdC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTE3NjAsNyArMTc2MCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
Qm9yZGVyU2lkZXMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvCiAgICAgLy8g
aXMgb25seSB0byBiZSB1c2VkIGZvciBzb2xpZCBib3JkZXJzIGFuZCB0aGUgc2hhcGUgb2YgdGhl
IGJvcmRlciBwYWludGVkIGJ5IGRyYXdCb3hTaWRlRnJvbVBhdGgKICAgICAvLyBvbmx5IGRlcGVu
ZHMgb24gc2lkZVJlY3Qgd2hlbiBwYWludGluZyBzb2xpZCBib3JkZXJzLgogCi0gICAgYXV0byBw
YWludE9uZVNpZGUgPSBbJl0oQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZTEsIEJv
eFNpZGUgYWRqYWNlbnRTaWRlMikgeworICAgIGF1dG8gcGFpbnRPbmVTaWRlID0gWyZdKFBBTDo6
Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlMSwgUEFMOjpCb3hTaWRlIGFk
amFjZW50U2lkZTIpIHsKICAgICAgICAgYXV0byYgZWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwogICAg
ICAgICBpZiAoIWVkZ2Uuc2hvdWxkUmVuZGVyKCkgfHwgIWVkZ2VTZXQuY29udGFpbnMoZWRnZUZs
YWdGb3JTaWRlKHNpZGUpKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3NzAsMjIgKzE3NzAs
MjIgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXJTaWRlcyhHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICAgICAgTGF5b3V0U2l6ZSBzZWNvbmRS
YWRpdXM7CiAKICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6
VG9wOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgc2lkZVJl
Y3Quc2V0SGVpZ2h0KGVkZ2Uud2lkdGhGb3JQYWludGluZygpICsgaW5uZXJCb3JkZXJBZGp1c3Rt
ZW50LnkoKSk7CiAgICAgICAgICAgICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCku
dG9wTGVmdCgpOwogICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gaW5uZXJCb3JkZXIucmFkaWko
KS50b3BSaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6
UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgIHNp
ZGVSZWN0LnNoaWZ0WEVkZ2VUbyhzaWRlUmVjdC5tYXhYKCkgLSBlZGdlLndpZHRoRm9yUGFpbnRp
bmcoKSAtIGlubmVyQm9yZGVyQWRqdXN0bWVudC54KCkpOwogICAgICAgICAgICAgZmlyc3RSYWRp
dXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCk7CiAgICAgICAgICAgICBzZWNv
bmRSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpC
b3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFlFZGdlVG8oc2lkZVJl
Y3QubWF4WSgpIC0gZWRnZS53aWR0aEZvclBhaW50aW5nKCkgLSBpbm5lckJvcmRlckFkanVzdG1l
bnQueSgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJCb3JkZXIucmFkaWkoKS5i
b3R0b21MZWZ0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRp
aSgpLmJvdHRvbVJpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hT
aWRlOjpMZWZ0OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAg
IHNpZGVSZWN0LnNldFdpZHRoKGVkZ2Uud2lkdGhGb3JQYWludGluZygpICsgaW5uZXJCb3JkZXJB
ZGp1c3RtZW50LngoKSk7CiAgICAgICAgICAgICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVyLnJh
ZGlpKCkuYm90dG9tTGVmdCgpOwogICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gaW5uZXJCb3Jk
ZXIucmFkaWkoKS50b3BMZWZ0KCk7CkBAIC0xNzk2LDE4ICsxNzk2LDE4IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyU2lkZXMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvCiAgICAgICAgIHBhaW50T25lQm9yZGVyU2lkZShncmFwaGljc0NvbnRleHQs
IHN0eWxlLCBvdXRlckJvcmRlciwgaW5uZXJCb3JkZXIsIHNpZGVSZWN0LCBzaWRlLCBhZGphY2Vu
dFNpZGUxLCBhZGphY2VudFNpZGUyLCBlZGdlcywgdXNlUGF0aCA/ICZyb3VuZGVkUGF0aCA6IG51
bGxwdHIsIGJsZWVkQXZvaWRhbmNlLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9n
aWNhbFJpZ2h0RWRnZSwgYW50aWFsaWFzLCBvdmVycmlkZUNvbG9yKTsKICAgICB9OwogCi0gICAg
cGFpbnRPbmVTaWRlKEJveFNpZGU6OlRvcCwgQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6UmlnaHQp
OwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpCb3R0b20sIEJveFNpZGU6OkxlZnQsIEJveFNp
ZGU6OlJpZ2h0KTsKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6VG9w
LCBCb3hTaWRlOjpCb3R0b20pOwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpSaWdodCwgQm94
U2lkZTo6VG9wLCBCb3hTaWRlOjpCb3R0b20pOworICAgIHBhaW50T25lU2lkZShQQUw6OkJveFNp
ZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpMZWZ0LCBQQUw6OkJveFNpZGU6OlJpZ2h0KTsKKyAgICBw
YWludE9uZVNpZGUoUEFMOjpCb3hTaWRlOjpCb3R0b20sIFBBTDo6Qm94U2lkZTo6TGVmdCwgUEFM
OjpCb3hTaWRlOjpSaWdodCk7CisgICAgcGFpbnRPbmVTaWRlKFBBTDo6Qm94U2lkZTo6TGVmdCwg
UEFMOjpCb3hTaWRlOjpUb3AsIFBBTDo6Qm94U2lkZTo6Qm90dG9tKTsKKyAgICBwYWludE9uZVNp
ZGUoUEFMOjpCb3hTaWRlOjpSaWdodCwgUEFMOjpCb3hTaWRlOjpUb3AsIFBBTDo6Qm94U2lkZTo6
Qm90dG9tKTsKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRUcmFuc2x1Y2Vu
dEJvcmRlclNpZGVzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91
bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBJbnRQb2ludCYgaW5uZXJCb3JkZXJBZGp1c3Rt
ZW50LAogICAgIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgQm94U2lkZVNldCBlZGdlc1RvRHJh
dywgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVM
b2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFs
aWFzKQogewogICAgIC8vIHdpbGxCZU92ZXJkcmF3biBhc3N1bWVzIHRoYXQgd2UgZHJhdyBpbiBv
cmRlcjogdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LgotICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50
IGZyb20gQm94U2lkZSBlbnVtIG9yZGVyLgotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJh
eTxCb3hTaWRlLCA0PiBwYWludE9yZGVyU2lkZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94U2lkZTo6
Qm90dG9tLCBCb3hTaWRlOjpMZWZ0LCBCb3hTaWRlOjpSaWdodCB9OworICAgIC8vIFRoaXMgaXMg
ZGlmZmVyZW50IGZyb20gUEFMOjpCb3hTaWRlIGVudW0gb3JkZXIuCisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PFBBTDo6Qm94U2lkZSwgND4gcGFpbnRPcmRlclNpZGVzID0geyBQQUw6
OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpCb3R0b20sIFBBTDo6Qm94U2lkZTo6TGVmdCwg
UEFMOjpCb3hTaWRlOjpSaWdodCB9OwogCiAgICAgd2hpbGUgKGVkZ2VzVG9EcmF3KSB7CiAgICAg
ICAgIC8vIEZpbmQgdW5kcmF3biBlZGdlcyBzaGFyaW5nIGEgY29sb3IuCkBAIC0xODk1LDEwICsx
ODk1LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjdCYKICAgICBib29sIGhhdmVBbGxEb3VibGVF
ZGdlcyA9IHRydWU7CiAgICAgaW50IG51bUVkZ2VzVmlzaWJsZSA9IDQ7CiAgICAgYm9vbCBhbGxF
ZGdlc1NoYXJlQ29sb3IgPSB0cnVlOwotICAgIHN0ZDo6b3B0aW9uYWw8Qm94U2lkZT4gZmlyc3RW
aXNpYmxlU2lkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Qm94U2lkZT4gZmlyc3RWaXNpYmxl
U2lkZTsKICAgICBCb3hTaWRlU2V0IGVkZ2VzVG9EcmF3OwogCi0gICAgZm9yIChhdXRvIHNpZGUg
OiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykg
ewogICAgICAgICBhdXRvJiBjdXJyRWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwogCiAgICAgICAgIGlm
IChjdXJyRWRnZS5zaG91bGRSZW5kZXIoKSkKQEAgLTE5NTIsMjQgKzE5NTIsMjQgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRSZWN0JgogICAgICAgICAgICAgaWYgKGhhdmVBbGxEb3VibGVFZGdlcykgewog
ICAgICAgICAgICAgICAgIExheW91dFJlY3QgaW5uZXJUaGlyZFJlY3QgPSBvdXRlckJvcmRlci5y
ZWN0KCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBvdXRlclRoaXJkUmVjdCA9IG91dGVy
Qm9yZGVyLnJlY3QoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNp
ZGVzKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVz
KSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb3V0ZXJXaWR0aDsKICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBpbm5lcldpZHRoOwogICAgICAgICAgICAgICAgICAgICBl
ZGdlcy5hdChzaWRlKS5nZXREb3VibGVCb3JkZXJTdHJpcGVXaWR0aHMob3V0ZXJXaWR0aCwgaW5u
ZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkZSkgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQ
QUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0
LnNoaWZ0WUVkZ2VUbyhpbm5lclRoaXJkUmVjdC55KCkgKyBpbm5lcldpZHRoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNoaWZ0WUVkZ2VUbyhvdXRlclRoaXJkUmVj
dC55KCkgKyBvdXRlcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5l
clRoaXJkUmVjdC5zZXRXaWR0aChpbm5lclRoaXJkUmVjdC53aWR0aCgpIC0gaW5uZXJXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlclRoaXJkUmVjdC5zZXRXaWR0aChvdXRlclRo
aXJkUmVjdC53aWR0aCgpIC0gb3V0ZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbm5lclRoaXJkUmVjdC5zZXRIZWlnaHQoaW5uZXJUaGlyZFJlY3QuaGVpZ2h0KCkg
LSBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNl
dEhlaWdodChvdXRlclRoaXJkUmVjdC5oZWlnaHQoKSAtIG91dGVyV2lkdGgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6
TGVmdDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5zaGlmdFhFZGdlVG8oaW5uZXJUaGly
ZFJlY3QueCgpICsgaW5uZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlclRo
aXJkUmVjdC5zaGlmdFhFZGdlVG8ob3V0ZXJUaGlyZFJlY3QueCgpICsgb3V0ZXJXaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwMDcsNyArMjAwNyw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgTGF5b3V0UmVjdCYKICAgICAgICAgaWYgKGhhdmVBbGxTb2xpZEVkZ2VzICYmIG51bUVk
Z2VzVmlzaWJsZSAhPSA0ICYmICFvdXRlckJvcmRlci5pc1JvdW5kZWQoKSAmJiBoYXZlQWxwaGFD
b2xvcikgewogICAgICAgICAgICAgUGF0aCBwYXRoOwogCi0gICAgICAgICAgICBmb3IgKGF1dG8g
c2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IFBBTDo6
YWxsQm94U2lkZXMpIHsKICAgICAgICAgICAgICAgICBpZiAoZWRnZXMuYXQoc2lkZSkuc2hvdWxk
UmVuZGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWRlUmVjdCA9IGNhbGN1bGF0
ZVNpZGVSZWN0KG91dGVyQm9yZGVyLCBlZGdlcywgc2lkZSk7CiAgICAgICAgICAgICAgICAgICAg
IHBhdGguYWRkUmVjdChzaWRlUmVjdCk7IC8vIEZJWE1FOiBOZWVkIHBpeGVsIHNuYXBwaW5nIGhl
cmUuCkBAIC0yMDQ0LDcgKzIwNDQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJvcmRlcihjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlY3QmCiB9CiAKIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0
IFBhdGgmIGJvcmRlclBhdGgsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywKLSAgICBmbG9hdCB0
aGlja25lc3MsIGZsb2F0IGRyYXdUaGlja25lc3MsIEJveFNpZGUgc2lkZSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIEJhY2tn
cm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwKKyAgICBmbG9hdCB0aGlja25lc3Ms
IGZsb2F0IGRyYXdUaGlja25lc3MsIFBBTDo6Qm94U2lkZSBzaWRlLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgQmFja2dyb3Vu
ZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLAogICAgIGJvb2wgaW5jbHVkZUxvZ2ljYWxM
ZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkKIHsKICAgICBpZiAodGhpY2tu
ZXNzIDw9IDApCkBAIC0yMTkyLDcgKzIxOTIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAog
fQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJv
cmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVk
Z2VNYXRjaGVzLCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKQorICAgIFBBTDo6Qm94U2lkZSBzaWRl
LCBib29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpCiB7CiAgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7
CiAgICAgY29uc3QgRmxvYXRSZWN0JiBvdXRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KG91dGVyQm9yZGVyLnJlY3QoKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtMjIxNSw3ICsyMjE1
LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXgKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gcXVh
ZDsKICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CiAgICAgc3dpdGNoIChzaWRl
KSB7Ci0gICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoK
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkp
OwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIo
KSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpKTsKQEAgLTIyMjgsNyArMjIyOCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNs
aXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAg
ICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBj
YXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAg
IHF1YWQudW5jaGVja2VkQXBwZW5kKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CkBA
IC0yMjQxLDcgKzIyNDEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVy
U2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICAgICAg
ZmluZEludGVyc2VjdGlvbihvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4
WE1heFlDb3JuZXIoKSwgcXVhZFsyXSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwogICAgICAgICBx
dWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CiAgICAgICAg
IHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAgLTIy
NTQsNyArMjI1NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRl
UG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgICAgICAgICBmaW5k
SW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1h
eFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4
WUNvcm5lcigpLCBxdWFkWzJdKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6
OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVu
Y2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAgLTIyODMsNyAr
MjI4Myw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdv
bihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgICAgIHF1YWRbMF0sCiAgICAg
ICAgIHF1YWRbMV0sCiAgICAgICAgIHF1YWRbMl0sCi0gICAgICAgIHNpZGUgPT0gQm94U2lkZTo6
VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tID8gRmxvYXRQb2ludChxdWFkWzNdLngoKSwg
cXVhZFsyXS55KCkpIDogRmxvYXRQb2ludChxdWFkWzJdLngoKSwgcXVhZFszXS55KCkpLAorICAg
ICAgICBzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpC
b3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkgOiBGbG9hdFBvaW50
KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSksCiAgICAgICAgIHF1YWRbM10KICAgICB9OwogICAg
IGJvb2wgd2FzQW50aWFsaWFzZWQgPSBncmFwaGljc0NvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7
CkBAIC0yMjkyLDcgKzIyOTIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9y
ZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogCiAgICAgVmVj
dG9yPEZsb2F0UG9pbnQ+IHNlY29uZFF1YWQgPSB7CiAgICAgICAgIHF1YWRbMF0sCi0gICAgICAg
IHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tID8gRmxvYXRQ
b2ludChxdWFkWzBdLngoKSwgcXVhZFsxXS55KCkpIDogRmxvYXRQb2ludChxdWFkWzFdLngoKSwg
cXVhZFswXS55KCkpLAorICAgICAgICBzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUg
PT0gUEFMOjpCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbMF0ueCgpLCBxdWFkWzFd
LnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSksCiAgICAgICAgIHF1
YWRbMV0sCiAgICAgICAgIHF1YWRbMl0sCiAgICAgICAgIHF1YWRbM10KQEAgLTIzMDgsMTAgKzIz
MDgsMTAgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3Jv
dW5kRWRnZShjb25zdCBGbG9hdFNpemUmIGNvbnRleHQKIHsKICAgICBhdXRvIGVkZ2VzID0gYm9y
ZGVyRWRnZXMoc3R5bGUoKSwgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIAotICAg
IGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6IFBB
TDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgYXV0byYgY3VyckVkZ2UgPSBlZGdlcy5hdChzaWRl
KTsKICAgICAgICAgLy8gRklYTUU6IGZvciB2ZXJ0aWNhbCB0ZXh0Ci0gICAgICAgIGZsb2F0IGF4
aXNTY2FsZSA9IChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkJvdHRv
bSkgPyBjb250ZXh0U2NhbGUuaGVpZ2h0KCkgOiBjb250ZXh0U2NhbGUud2lkdGgoKTsKKyAgICAg
ICAgZmxvYXQgYXhpc1NjYWxlID0gKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9
PSBQQUw6OkJveFNpZGU6OkJvdHRvbSkgPyBjb250ZXh0U2NhbGUuaGVpZ2h0KCkgOiBjb250ZXh0
U2NhbGUud2lkdGgoKTsKICAgICAgICAgaWYgKCFjdXJyRWRnZS5vYnNjdXJlc0JhY2tncm91bmRF
ZGdlKGF4aXNTY2FsZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjMz
MCw3ICsyMzMwLDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNC
YWNrZ3JvdW5kKCkgY29uc3QKIAogICAgIGF1dG8gZWRnZXMgPSBib3JkZXJFZGdlcyhzdHlsZSgp
LCBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCi0gICAgZm9yIChhdXRvIHNpZGUg
OiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykg
ewogICAgICAgICBpZiAoIWVkZ2VzLmF0KHNpZGUpLm9ic2N1cmVzQmFja2dyb3VuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5kZXggMTVmZGY5MzRkZWUyMzZmYzM5M2JhMTkw
MDIwNzYzZjJkNWZkNWI0Mi4uMGQxM2VkNDUyOThjNzllNzIyNjhmZGJiZjc4ZTczMGRmYjE5OGRl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKQEAgLTMxNSwxMCArMzE1LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBmaXhlZEJhY2tncm91
bmRQYWludHNJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIHZvaWQgY2xpcEJvcmRl
clNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJv
cmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJveFNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRF
ZGdlTWF0Y2hlcyk7CisgICAgICAgIFBBTDo6Qm94U2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVz
LCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKTsKIAogICAgIHZvaWQgcGFpbnRPbmVCb3JkZXJTaWRl
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUm91bmRlZFJlY3Qm
IG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsCi0gICAgICAgIGNv
bnN0IExheW91dFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZTEs
IEJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9yZGVyRWRnZXMmLAorICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBzaWRlUmVjdCwgUEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNl
bnRTaWRlMSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRlckVkZ2VzJiwK
ICAgICAgICAgY29uc3QgUGF0aCosIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgYm9vbCBpbmNs
dWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlLCBib29sIGFu
dGlhbGlhcywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IgPSBudWxscHRyKTsKICAgICB2b2lk
IHBhaW50VHJhbnNsdWNlbnRCb3JkZXJTaWRlcyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91bmRlZFJl
Y3QmIGlubmVyQm9yZGVyLCBjb25zdCBJbnRQb2ludCYgaW5uZXJCb3JkZXJBZGp1c3RtZW50LAog
ICAgICAgICBjb25zdCBCb3JkZXJFZGdlcyYsIEJveFNpZGVTZXQsIEJhY2tncm91bmRCbGVlZEF2
b2lkYW5jZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2Fs
UmlnaHRFZGdlLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKTsKQEAgLTMyNiw3ICszMjYsNyBAQCBw
cml2YXRlOgogICAgICAgICBjb25zdCBJbnRQb2ludCYgaW5uZXJCb3JkZXJBZGp1c3RtZW50LCBj
b25zdCBCb3JkZXJFZGdlcyYsIEJveFNpZGVTZXQsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwK
ICAgICAgICAgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2Fs
UmlnaHRFZGdlLCBib29sIGFudGlhbGlhcyA9IGZhbHNlLCBjb25zdCBDb2xvciogb3ZlcnJpZGVD
b2xvciA9IG51bGxwdHIpOwogICAgIHZvaWQgZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUGF0aCYsIGNvbnN0IEJvcmRlckVkZ2Vz
JiwKLSAgICAgICAgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRl
LCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgICAgIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJh
d1RoaWNrbmVzcywgUEFMOjpCb3hTaWRlLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIENv
bG9yLCBCb3JkZXJTdHlsZSwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVM
b2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwogICAgIHZvaWQg
cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3ImLCBjb25zdCBMYXlvdXRSZWN0
Jik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5j
cHAKaW5kZXggNmVjYzBkZTM5NzJkMjc5MDYzZjNjNWU3MzdhNzU4ODEzZjc0M2I0MC4uM2NhNTlj
YmM5NTgzY2NmYjc2MTc5YWJiMTVkNWIyNDQ1MzQwZWE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9p
ZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHRJZk5lZWRlZCgpCiAKICAgICBGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvciA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3Io
KTsKIAotICAgIGRlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCk7IC8vIFdlIGFyZSBnb2luZyB0byBkcmF3IGNvbWJpbmVkIHRleHQgaG9yaXpvbnRh
bGx5LgorICAgIGRlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKFBBTDo6Rm9udE9yaWVudGF0aW9u
OjpIb3Jpem9udGFsKTsgLy8gV2UgYXJlIGdvaW5nIHRvIGRyYXcgY29tYmluZWQgdGV4dCBob3Jp
em9udGFsbHkuCiAKICAgICBGb250Q2FzY2FkZSBob3Jpem9udGFsRm9udChGb250Q2FzY2FkZURl
c2NyaXB0aW9uIHsgZGVzY3JpcHRpb24gfSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLmxldHRlclNw
YWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCkpOwogICAgIGhvcml6
b250YWxGb250LnVwZGF0ZShmb250U2VsZWN0b3IpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQg
UmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0SWZOZWVkZWQoKQogICAgICAgICBzaG91bGRV
cGRhdGVGb250ID0gbV9jb21iaW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92
ZShkZXNjcmlwdGlvbikpOyAvLyBOZWVkIHRvIGNoYW5nZSBmb250IG9yaWVudGF0aW9uIHRvIGhv
cml6b250YWwuCiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE5lZWQgdG8gdHJ5IGNvbXByZXNzZWQg
Z2x5cGhzLgotICAgICAgICBzdGF0aWMgY29uc3QgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnRzW10gPSB7IEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aCwgRm9udFdpZHRoVmFyaWFudDo6
VGhpcmRXaWR0aCwgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoIH07CisgICAgICAgIHN0
YXRpYyBjb25zdCBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50c1tdID0geyBQQUw6
OkZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aCwgUEFMOjpGb250V2lkdGhWYXJpYW50OjpUaGly
ZFdpZHRoLCBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aCB9OwogICAgICAgICBm
b3IgKGF1dG8gd2lkdGhWYXJpYW50IDogd2lkdGhWYXJpYW50cykgewogICAgICAgICAgICAgZGVz
Y3JpcHRpb24uc2V0V2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCk7IC8vIFdoZW4gbW9kaWZ5aW5n
IHRoaXMsIG1ha2Ugc3VyZSB0byBrZWVwIGl0IGluIHN5bmMgd2l0aCBGb250UGxhdGZvcm1EYXRh
Ojppc0ZvclRleHRDb21iaW5lKCkhCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKaW5kZXggN2UxOGZmMGE2ZTVm
ZWE0MmQ2MzZhNDhlMTEwNzJjNjM2MzI3NGI4Yi4uZWEzNDE4ODY0N2UzOWRjY2YyYjgwMWNkM2Fk
YWM1ODcxMGRkZWU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKQEAgLTEwNDMsNyArMTA0Myw3IEBAIHZv
aWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcChGbGV4Qm94SXRl
cmF0b3ImIGl0ZXJhdG9yLCBib29sCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGRvbid0IHN1cHBvcnQgUlRMLgotICAgICAgICBp
ZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSAhPSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlm
IChzdHlsZSgpLmRpcmVjdGlvbigpICE9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gR2V0IHRoZSBsYXN0IGxpbmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAppbmRleCAxZTQz
MmNkNjE2MzA4MTkzMTU5MmVjYmE1YWFjMTU2OTk2ZmMzNzEyLi5mZjQwMDQwODdhMzMwY2Y5NGJh
MzhlY2NjM2I0MjU4NTU4OTc0OGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCkBAIC03NiwxOSArNzYsMTkgQEAgc3RhdGljIFBhdGgg
Y3JlYXRlUmlnaHRBcnJvd1BhdGgoKQogUmVuZGVyRGV0YWlsc01hcmtlcjo6T3JpZW50YXRpb24g
UmVuZGVyRGV0YWlsc01hcmtlcjo6b3JpZW50YXRpb24oKSBjb25zdAogewogICAgIHN3aXRjaCAo
c3R5bGUoKS53cml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0
b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKICAgICAgICAgaWYg
KHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGlz
T3BlbigpID8gRG93biA6IFJpZ2h0OwogICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBEb3duIDog
TGVmdDsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBMZWZ0IDogRG93
bjsKICAgICAgICAgcmV0dXJuIGlzT3BlbigpID8gTGVmdCA6IFVwOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBpc09wZW4oKSA/IFJpZ2h0IDogRG93bjsKICAgICAgICAgcmV0dXJuIGlz
T3BlbigpID8gUmlnaHQgOiBVcDsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoK
KyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgogICAgICAgICBpZiAoc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPcGVu
KCkgPyBVcCA6IFJpZ2h0OwogICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBVcCA6IExlZnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNTQ2M2RmNDQz
N2E4MTlmNTBkMzE0MjFmYTk5OTJjN2UzOWZhMGViMy4uOTkwZDg4YzJjMTUwNjk1NDE4YTE5MmU1
OGQ0NDk5ODFlZGUwYWIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcApAQCAtODIzLDcgKzgyMyw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6aW52YWxpZGF0
ZUNhY2hlZEZpcnN0TGluZVN0eWxlKCkKIAogdm9pZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkK
IHsKLSAgICBBU1NFUlQoc2V0dGluZ3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygp
IHx8IG5ld1N0eWxlLmZvbnREZXNjcmlwdGlvbigpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKCkgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKKyAgICBBU1NFUlQoc2V0dGlu
Z3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIHx8IG5ld1N0eWxlLmZvbnREZXNj
cmlwdGlvbigpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPT0gUEFMOjpBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250czo6Tm8pOwogCiAgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFs
aXplZFN0eWxlKCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlKSB7CkBA
IC0xNzQ2LDcgKzE3NDYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckVsZW1lbnQ6OmFic29sdXRlQW5j
aG9yUmVjdFdpdGhTY3JvbGxNYXJnaW4oYm9vbCogaW5zaWRlRml4ZWQpCiAgICAgcmV0dXJuIGFi
c29sdXRlQW5jaG9yUmVjdChpbnNpZGVGaXhlZCk7CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6
ZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxl
IGJvcmRlclN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIs
IGJvb2wgYW50aWFsaWFzKSBjb25zdAordm9pZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZvckJv
eFNpZGUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJT
dHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFu
dGlhbGlhcykgY29uc3QKIHsKICAgICBhdXRvIGRyYXdCb3JkZXJSZWN0ID0gWyZncmFwaGljc0Nv
bnRleHRdIChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgewpAQCAtMTc1NSw3ICsxNzU1LDcg
QEAgdm9pZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdS
ZWN0KHJlY3QpOwogICAgIH07CiAKLSAgICBhdXRvIGRyYXdMaW5lRm9yID0gW3RoaXMsICZncmFw
aGljc0NvbnRleHQsIGNvbG9yLCBhbnRpYWxpYXNdIChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEJv
eFNpZGUgc2lkZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRq
YWNlbnQpCisgICAgYXV0byBkcmF3TGluZUZvciA9IFt0aGlzLCAmZ3JhcGhpY3NDb250ZXh0LCBj
b2xvciwgYW50aWFsaWFzXSAoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBQQUw6OkJveFNpZGUgc2lk
ZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRqYWNlbnQpCiAg
ICAgewogICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNzY4LDcgKzE3NjgsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lk
ZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgIGZsb2F0IHky
ID0gcmVjdC5tYXhZKCk7CiAgICAgZmxvYXQgdGhpY2tuZXNzOwogICAgIGZsb2F0IGxlbmd0aDsK
LSAgICBpZiAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20p
IHsKKyAgICBpZiAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94
U2lkZTo6Qm90dG9tKSB7CiAgICAgICAgIHRoaWNrbmVzcyA9IHkyIC0geTE7CiAgICAgICAgIGxl
bmd0aCA9IHgyIC0geDE7CiAgICAgfSBlbHNlIHsKQEAgLTE4MTQsMTMgKzE4MTQsMTMgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91
bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKIAogICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6
Qm90dG9tOgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKKyAgICAgICAgICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJl
Y3Qoc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxLCB5MSwgbGVuZ3RoLCB0aGly
ZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAgICAgICAgICAgICBkcmF3
Qm9yZGVyUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEsIHkyIC0gdGhp
cmRPZlRoaWNrbmVzcywgbGVuZ3RoLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6
TGVmdDoKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6TGVmdDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdo
dDoKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KExheW91dFJlY3QoeDEsIHkxLCB0aGlyZE9mVGhpY2tuZXNzLCBsZW5ndGgpLCBkZXZpY2VTY2Fs
ZUZhY3RvcikpOwogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMoTGF5b3V0UmVjdCh4MiAtIHRoaXJkT2ZUaGlja25lc3MsIHkxLCB0aGlyZE9mVGhp
Y2tuZXNzLCBsZW5ndGgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTg0MiwyOCArMTg0MiwyOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5l
Rm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogCiAg
ICAgICAgICAgICBGbG9hdFJlY3QgcGFpbnRCb3JkZXJSZWN0OwogICAgICAgICAgICAgc3dpdGNo
IChzaWRlKSB7Ci0gICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgIGNh
c2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQxLCB5MSwg
KHgyIC0gbWl0cmVPZmZzZXQzKSAtICh4MSArIG1pdHJlT2Zmc2V0MSksIHRoaXJkT2ZUaGlja25l
c3MpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFp
bnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2Vu
dDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIAogICAgICAgICAgICAgICAgIHBhaW50
Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJl
T2Zmc2V0MiwgeTIgLSB0aGlyZE9mVGhpY2tuZXNzLCAoeDIgLSBtaXRyZU9mZnNldDQpIC0gKHgx
ICsgbWl0cmVPZmZzZXQyKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsK
ICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRl
clN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdU
aGlyZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb3hTaWRl
OjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAg
ICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0
KHgxLCB5MSArIG1pdHJlT2Zmc2V0MSwgdGhpcmRPZlRoaWNrbmVzcywgKHkyIC0gbWl0cmVPZmZz
ZXQzKSAtICh5MSArIG1pdHJlT2Zmc2V0MSkpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6
U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsK
IAogICAgICAgICAgICAgICAgIHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoTGF5b3V0UmVjdCh4MiAtIHRoaXJkT2ZUaGlja25lc3MsIHkxICsgbWl0cmVPZmZzZXQyLCB0
aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9mZnNldDQpIC0gKHkxICsgbWl0cmVPZmZzZXQy
KSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWlu
dEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50
MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgICAgICBjYXNlIFBBTDo6
Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICAgICAgICAgIHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJlT2Zmc2V0MiwgeTEsICh4MiAt
IG1pdHJlT2Zmc2V0NCkgLSAoeDEgKyBtaXRyZU9mZnNldDIpLCB0aGlyZE9mVGhpY2tuZXNzKSwg
ZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9y
ZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmln
VGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAKICAgICAgICAgICAgICAgICBwYWludEJvcmRl
clJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNl
dDEsIHkyIC0gdGhpcmRPZlRoaWNrbmVzcywgKHgyIC0gbWl0cmVPZmZzZXQzKSAtICh4MSArIG1p
dHJlT2Zmc2V0MSksIHRoaXJkT2ZUaGlja25lc3MpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAg
ICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHls
ZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Umln
aHQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICAg
ICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgx
LCB5MSArIG1pdHJlT2Zmc2V0MiwgdGhpcmRPZlRoaWNrbmVzcywgKHkyIC0gbWl0cmVPZmZzZXQ0
KSAtICh5MSArIG1pdHJlT2Zmc2V0MikpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAg
ICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29s
aWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIApA
QCAtMTg5OSwxNiArMTg5OSwxNiBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94
U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICBm
bG9hdCBvZmZzZXQzID0gMDsKICAgICAgICAgZmxvYXQgb2Zmc2V0NCA9IDA7CiAKLSAgICAgICAg
aWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMSA8IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gfHwgc2lkZSA9
PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSkKKyAgICAgICAgaWYgKCgo
c2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6TGVmdCkg
JiYgYWRqYWNlbnRXaWR0aDEgPCAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpCb3R0b20g
fHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQog
ICAgICAgICAgICAgb2Zmc2V0MSA9IGZsb29yVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMSAv
IDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6
OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkgfHwg
KChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApKQorICAgICAgICBpZiAoKChzaWRlID09IFBBTDo6Qm94U2lkZTo6
VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMiA8IDAp
IHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IFBBTDo6Qm94U2lk
ZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyID4gMCkpCiAgICAgICAgICAgICBvZmZzZXQyID0g
Y2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7
CiAKLSAgICAgICAgaWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRl
OjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0
b20gfHwgc2lkZSA9PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPCAwKSkKKyAg
ICAgICAgaWYgKCgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94
U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hT
aWRlOjpCb3R0b20gfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdp
ZHRoMSA8IDApKQogICAgICAgICAgICAgb2Zmc2V0MyA9IGZsb29yVG9EZXZpY2VQaXhlbChmYWJz
KGFkamFjZW50V2lkdGgxKSAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAo
KChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFj
ZW50V2lkdGgyID4gMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJv
eFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMiA8IDApKQorICAgICAgICBpZiAoKChzaWRl
ID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBz
aWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCiAgICAg
ICAgICAgICBvZmZzZXQ0ID0gY2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICAgICAgZmxvYXQgYWRqdXN0ZWRYID0gY2VpbFRvRGV2
aWNlUGl4ZWwoKHgxICsgeDIpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtMTkyMCwxOSAr
MTkyMCwxOSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICB5MiA9IHJvdW5kVG9E
ZXZpY2VQaXhlbCh5MiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgICAgIHN3aXRjaCAoc2lk
ZSkgewotICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNp
ZGU6OlRvcDoKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgx
ICsgb2Zmc2V0MSwgeTEpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0MiwgYWRqdXN0ZWRZKSksIHNp
ZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFsZiwgYWRqYWNlbnQyQmlnSGFsZikpOwog
ICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoeDEgKyBvZmZzZXQz
LCBhZGp1c3RlZFkpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0NCwgeTIpKSwgc2lkZSwgczIsIEZs
b2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFjZW50MlNtYWxsSGFsZikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAgY2FzZSBQ
QUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxv
YXRQb2ludCh4MSwgeTEgKyBvZmZzZXQxKSwgRmxvYXRQb2ludChhZGp1c3RlZFgsIHkyIC0gb2Zm
c2V0MikpLCBzaWRlLCBzMSwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJp
Z0hhbGYpKTsKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KGFk
anVzdGVkWCwgeTEgKyBvZmZzZXQzKSwgRmxvYXRQb2ludCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNp
ZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYp
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAg
ICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgIGRyYXdMaW5lRm9y
KEZsb2F0UmVjdChGbG9hdFBvaW50KHgxICsgb2Zmc2V0MSwgeTEpLCBGbG9hdFBvaW50KHgyIC0g
b2Zmc2V0MiwgYWRqdXN0ZWRZKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFs
ZiwgYWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoeDEgKyBvZmZzZXQzLCBhZGp1c3RlZFkpLCBGbG9hdFBvaW50KHgyIC0gb2Zm
c2V0NCwgeTIpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFj
ZW50MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lk
ZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAg
IGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgxLCB5MSArIG9mZnNldDEpLCBGbG9h
dFBvaW50KGFkanVzdGVkWCwgeTIgLSBvZmZzZXQyKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRq
YWNlbnQxQmlnSGFsZiwgYWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVG
b3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoYWRqdXN0ZWRYLCB5MSArIG9mZnNldDMpLCBGbG9hdFBv
aW50KHgyLCB5MiAtIG9mZnNldDQpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFs
bEhhbGYsIGFkamFjZW50MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTY3
LDI1ICsxOTY3LDI1IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVGb3JCb3hTaWRlKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGCiAgICAgICAgIFZlY3RvcjxG
bG9hdFBvaW50PiBxdWFkOwogICAgICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7
CiAgICAgICAgIHN3aXRjaCAoc2lkZSkgewotICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAg
ICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7
CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+
KCBhZGphY2VudFdpZHRoMSwgMCksIHkyIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRB
cHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsK
ICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4o
LWFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206
CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+
KCBhZGphY2VudFdpZHRoMSwgMCksIHkxIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRB
cHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9KTsK
ICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4o
LWFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkxIH0pOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAg
Y2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVu
ZCh7IHgxLCB5MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApIH0pOwogICAg
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTIgLSBzdGQ6Om1heDxmbG9hdD4o
LWFkamFjZW50V2lkdGgyLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDIsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7CiAgICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MSArIHN0ZDo6bWF4PGZsb2F0Pigg
YWRqYWNlbnRXaWR0aDEsIDApIH0pOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Qm94U2lkZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBh
ZGphY2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7
IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwogICAgICAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oLWFk
amFjZW50V2lkdGgyLCAwKSB9KTsKQEAgLTIxNDIsMTAgKzIxNDIsMTAgQEAgdm9pZCBSZW5kZXJF
bGVtZW50OjpwYWludE91dGxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJl
Y3QmIHBhaW50UmUKICAgICBmbG9hdCBib3R0b21PdXRlciA9IG91dGVyLm1heFkoKTsKICAgICBm
bG9hdCBib3R0b21Jbm5lciA9IHN0ZDo6bWluKGlubmVyLm1heFkoKSwgYm90dG9tT3V0ZXIpOwog
Ci0gICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQobGVmdE91dGVyLCB0b3BPdXRlciksIEZsb2F0UG9pbnQobGVmdElubmVyLCBib3R0b21P
dXRlcikpLCBCb3hTaWRlOjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGlu
ZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwotICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0Nv
bnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KGxlZnRPdXRlciwgdG9wT3V0ZXIpLCBGbG9hdFBv
aW50KHJpZ2h0T3V0ZXIsIHRvcElubmVyKSksIEJveFNpZGU6OlRvcCwgb3V0bGluZUNvbG9yLCBv
dXRsaW5lU3R5bGUsIG91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoKTsKLSAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludChyaWdodElubmVy
LCB0b3BPdXRlciksIEZsb2F0UG9pbnQocmlnaHRPdXRlciwgYm90dG9tT3V0ZXIpKSwgQm94U2lk
ZTo6UmlnaHQsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxp
bmVXaWR0aCk7Ci0gICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQobGVmdE91dGVyLCBib3R0b21Jbm5lciksIEZsb2F0UG9pbnQocmlnaHRP
dXRlciwgYm90dG9tT3V0ZXIpKSwgQm94U2lkZTo6Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG91dGxp
bmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOworICAgIGRyYXdMaW5lRm9yQm94
U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KGxlZnRPdXRlciwgdG9w
T3V0ZXIpLCBGbG9hdFBvaW50KGxlZnRJbm5lciwgYm90dG9tT3V0ZXIpKSwgUEFMOjpCb3hTaWRl
OjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5l
V2lkdGgpOworICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVj
dChGbG9hdFBvaW50KGxlZnRPdXRlciwgdG9wT3V0ZXIpLCBGbG9hdFBvaW50KHJpZ2h0T3V0ZXIs
IHRvcElubmVyKSksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHls
ZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOworICAgIGRyYXdMaW5lRm9yQm94U2lkZShn
cmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KHJpZ2h0SW5uZXIsIHRvcE91dGVy
KSwgRmxvYXRQb2ludChyaWdodE91dGVyLCBib3R0b21PdXRlcikpLCBQQUw6OkJveFNpZGU6OlJp
Z2h0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lk
dGgpOworICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChG
bG9hdFBvaW50KGxlZnRPdXRlciwgYm90dG9tSW5uZXIpLCBGbG9hdFBvaW50KHJpZ2h0T3V0ZXIs
IGJvdHRvbU91dGVyKSksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG91dGxp
bmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwogCiAgICAgaWYgKHVzZVRyYW5z
cGFyZW5jeUxheWVyKQogICAgICAgICBncmFwaGljc0NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IGI4ZWRh
MjRjMjAxZjFlZjYzNWNlZWNiYmUyMDJiYmMyZjc4MzkwMWQuLjNmZGExMzk0MjI2NDAzZTI4YmM5
NDFhODBkMzdjZTVjOGVhOWVkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaApAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0NvdW50ZXJO
b2RlTWFwKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb3VudGVyTm9kZU1hcDsgfQogICAgIHZvaWQg
c2V0SGFzQ291bnRlck5vZGVNYXAoYm9vbCBmKSB7IG1faGFzQ291bnRlck5vZGVNYXAgPSBmOyB9
CiAKLSAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmLCBCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lk
dGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSkgY29uc3Q7
CisgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiwgUEFMOjpCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50
V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSkgY29u
c3Q7CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAgIHZvaWQgYWRqdXN0Q29tcHV0
ZWRGb250U2l6ZXNPbkJsb2NrcyhmbG9hdCBzaXplLCBmbG9hdCB2aXNpYmxlV2lkdGgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKaW5kZXggODc4NWYyMjk5YzgwZDM5NDZlOGZmZDIxNjYyZDAyOTIxOTQ2MzFmNy4uMjkyMmUx
OTNkNjcyODAzYjY1YmI1YTkwNDc4YTk3MzY5M2FiZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNw
bGF5ZWRGaWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKICAgICAgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW4oZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIEFsbG93Umln
aHRFeHBhbnNpb24sIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUp
OworICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGRpc3BsYXllZEZp
bGVuYW1lLCBzdHlsZSgpLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIFJlc3BlY3REaXJlY3Rp
b24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICAgICAgaW50IGljb25IZWlnaHQgPSBub2RlSGVpZ2h0KHVwbG9hZEJ1dHRvbigpKTsK
QEAgLTIwNSwxMCArMjA1LDEwIEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljCiAgICAgY29uc3Qg
U3RyaW5nIGNoYXJhY3RlckFzU3RyaW5nID0gU3RyaW5nKCZjaGFyYWN0ZXIsIDEpOwogICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcgY29uc3Ry
dWN0VGV4dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KLSAgICBmbG9hdCBtaW5EZWZh
dWx0TGFiZWxXaWR0aCA9IGRlZmF1bHRXaWR0aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1
Y3RUZXh0UnVuKGNoYXJhY3RlckFzU3RyaW5nLCBzdHlsZSgpLCBBbGxvd1JpZ2h0RXhwYW5zaW9u
KSk7CisgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0V2lkdGhOdW1DaGFy
cyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihjaGFyYWN0ZXJBc1N0cmluZywgc3R5bGUo
KSwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uKSk7CiAKICAgICBjb25zdCBTdHJpbmcgbGFiZWwg
PSB0aGVtZSgpLmZpbGVMaXN0RGVmYXVsdExhYmVsKGlucHV0RWxlbWVudCgpLm11bHRpcGxlKCkp
OwotICAgIGZsb2F0IGRlZmF1bHRMYWJlbFdpZHRoID0gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0
UnVuKGxhYmVsLCBzdHlsZSgpLCBBbGxvd1JpZ2h0RXhwYW5zaW9uKSk7CisgICAgZmxvYXQgZGVm
YXVsdExhYmVsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4obGFiZWwsIHN0eWxl
KCksIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbikpOwogICAgIGlmIChIVE1MSW5wdXRFbGVtZW50
KiBidXR0b24gPSB1cGxvYWRCdXR0b24oKSkKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYnV0
dG9uUmVuZGVyZXIgPSBidXR0b24tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBkZWZhdWx0TGFi
ZWxXaWR0aCArPSBidXR0b25SZW5kZXJlci0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBh
ZnRlckJ1dHRvblNwYWNpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmNwcAppbmRleCA2MWYyMTM1NmEyZWM2NDg3MjMxNjAzNmU2OTgwNWVmYTA3NTYx
M2MxLi5jNzFkZTYzMjM5MDc5ZjA1YzI4NTU3ZDA4ODU1ZTBhM2E3OGE5NmMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTQyLDggKzQy
LDggQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01v
ZGUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUu
aD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CkBAIC00OTAsNyArNDkwLDcg
QEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6aXNIb3Jpem9udGFsRmxvdygpIGNvbnN0CiBib29s
IFJlbmRlckZsZXhpYmxlQm94Ojppc0xlZnRUb1JpZ2h0RmxvdygpIGNvbnN0CiB7CiAgICAgaWYg
KGlzQ29sdW1uRmxvdygpKQotICAgICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5nTW9kZSgpID09
IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSB8fCBzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0OworICAgICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5nTW9k
ZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8IHN0eWxlKCkud3JpdGluZ01v
ZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDsKICAgICByZXR1cm4gc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgXiAoc3R5bGUoKS5mbGV4RGlyZWN0aW9uKCkgPT0g
RmxleERpcmVjdGlvbjo6Um93UmV2ZXJzZSk7CiB9CiAKQEAgLTY3NywyMiArNjc3LDIyIEBAIHN0
ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVNYWluQXhp
c0V4dGVudEZvckNoaWxkKFJlbmRlCiAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVMb2dpY2FsV2lk
dGhJbkZyYWdtZW50VXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwg
KnRoaXMsIGZyYWdtZW50KSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsK
IH0KIAotV3JpdGluZ01vZGUgUmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01v
ZGUoKSBjb25zdAorUEFMOjpXcml0aW5nTW9kZSBSZW5kZXJGbGV4aWJsZUJveDo6dHJhbnNmb3Jt
ZWRXcml0aW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgV3JpdGluZ01vZGUgbW9kZSA9IHN0eWxlKCku
d3JpdGluZ01vZGUoKTsKKyAgICBQQUw6OldyaXRpbmdNb2RlIG1vZGUgPSBzdHlsZSgpLndyaXRp
bmdNb2RlKCk7CiAgICAgaWYgKCFpc0NvbHVtbkZsb3coKSkKICAgICAgICAgcmV0dXJuIG1vZGU7
CiAgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9C
b3R0b206Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6Ci0gICAgICAgIHJldHVy
biBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFdyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodCA6IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpM
ZWZ0VG9SaWdodDoKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAg
cmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gV3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tIDogV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOworICAgIGNhc2UgUEFMOjpXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcDoKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
UEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgOiBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRv
TGVmdDsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2Ug
UEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHJldHVybiBzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIDog
UEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207CisgICAgcmV0dXJu
IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZs
ZXhpYmxlQm94OjpmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0CkBAIC03MTIsMTMgKzcxMiwx
MyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVCb3JkZXJFbmQoKSBj
b25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9yZGVyQmVmb3Jl
KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSkgewotICAg
IGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVybiBib3JkZXJUb3AoKTsKLSAgICBjYXNlIFdy
aXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRv
bVRvVG9wOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5n
TW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdo
dDoKICAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpS
aWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAg
ICAgICByZXR1cm4gYm9yZGVyUmlnaHQoKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC03MjgsMTMgKzcyOCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpm
bG93QXdhcmVCb3JkZXJCZWZvcmUoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJv
eDo6Zmxvd0F3YXJlQm9yZGVyQWZ0ZXIoKSBjb25zdAogewogICAgIHN3aXRjaCAodHJhbnNmb3Jt
ZWRXcml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206Cisg
ICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKICAgICAgICAgcmV0dXJuIGJv
cmRlckJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNh
c2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAgICAgICAgIHJldHVybiBib3JkZXJU
b3AoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHQoKTsK
LSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGlu
Z01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICByZXR1cm4gYm9yZGVyTGVmdCgpOwogICAgIH0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc1OCwxMyArNzU4LDEzIEBAIExheW91dFVu
aXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZVBhZGRpbmdFbmQoKSBjb25zdAogTGF5b3V0
VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlUGFkZGluZ0JlZm9yZSgpIGNvbnN0CiB7
CiAgICAgc3dpdGNoICh0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFdyaXRp
bmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOgogICAgICAgICByZXR1cm4gcGFkZGluZ1RvcCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6
OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAg
ICAgICAgIHJldHVybiBwYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVm
dFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKICAgICAg
ICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAgICAgICAgcmV0
dXJuIHBhZGRpbmdSaWdodCgpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTc3NCwxMyArNzc0LDEzIEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2Fy
ZVBhZGRpbmdCZWZvcmUoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxv
d0F3YXJlUGFkZGluZ0FmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3Jp
dGluZ01vZGUoKSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNh
c2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVybiBwYWRkaW5n
Qm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQ
QUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIHBhZGRpbmdUb3Ao
KTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6V3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gcGFkZGluZ1JpZ2h0KCk7Ci0g
ICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdDoKICAgICAgICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCk7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODA0LDEzICs4MDQsMTMgQEAgTGF5b3V0VW5p
dCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luRW5kRm9yQ2hpbGQoY29uc3QgUmVu
ZGVyQm94JiBjaGlsZCkKIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZU1h
cmdpbkJlZm9yZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoICh0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgog
ICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luVG9wKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAg
ICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6
OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CiAg
ICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5MZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAg
ICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblJpZ2h0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aAppbmRleCA4NThhYjk4ZjkyMTQxNmNjNGYxZmI0ZDBiMjk4MzBjZDY1M2QyNmE5Li4yZDg5ODA2
MjkyZjk5MzY1YmZlMWYwYWQyZGIxOTJmNmNmYTI0MTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaApAQCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbEhl
aWdodCk7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlTWFpbkF4aXNFeHRl
bnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBTaXplVHlwZSwgY29uc3QgTGVuZ3RoJiBzaXpl
KTsKLSAgICBXcml0aW5nTW9kZSB0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7CisgICAg
UEFMOjpXcml0aW5nTW9kZSB0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgZmxv
d0F3YXJlQm9yZGVyRW5kKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJC
ZWZvcmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFnbWVudGVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
Z21lbnRlZEZsb3cuY3BwCmluZGV4IDI2NWI4OTRmMzNmMmExM2E0MmNkZDg1MDI4OWM2ODgwY2Y5
NGFlOWMuLmRjODE4NTk3OTcyMjBhMzMxMDRjOTI3MGJkZGUzYzQ2ZTk1MjA1NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcApAQCAt
MTY3LDcgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0ZUxvZ2ljYWxX
aWR0aCgpCiAgICAgLy8gSWYgdGhlIGZyYWdtZW50cyBoYXZlIG5vbi11bmlmb3JtIGxvZ2ljYWwg
d2lkdGhzLCB0aGVuIGluc2VydCBpbnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIFJlbmRlckZyYWdt
ZW50ZWRGbG93LgogICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkgewog
ICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnQtPnBhZ2VM
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCAt
IGZyYWdtZW50TG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0g
c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IDBfbHUgOiBs
b2dpY2FsV2lkdGggLSBmcmFnbWVudExvZ2ljYWxXaWR0aDsKICAgICAgICAgZnJhZ21lbnQtPnNl
dFJlbmRlckJveEZyYWdtZW50SW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwgZnJhZ21lbnRMb2dpY2Fs
V2lkdGgsIGZhbHNlKTsKICAgICB9CiB9CkBAIC04NDIsNyArODQyLDcgQEAgdm9pZCBSZW5kZXJG
cmFnbWVudGVkRmxvdzo6dXBkYXRlRnJhZ21lbnRzRnJhZ21lbnRlZEZsb3dQb3J0aW9uUmVjdCgp
CiAgICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFn
ZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbEhlaWdo
dCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZyYWdtZW50ZWRGbG93OjptYXhMb2dpY2Fs
SGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0LCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRnJh
Z21lbnRlZEZsb3dDb250ZW50KCkpOwogCi0gICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0
KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2lj
YWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50
TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOworICAgICAgICBMYXlvdXRSZWN0
IGZyYWdtZW50UmVjdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOwog
CiAgICAgICAgIGZyYWdtZW50LT5zZXRGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0KGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3QudHJhbnNwb3Nl
ZFJlY3QoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5k
ZXggOGNmNGZlMjVjMDBmY2ZkOTIwYmFiM2E2ZTcyMWU3MjYyNzM4YjUzZS4uYWI2MDQwNGFiNjA1
MjM3OWY3ZjM2ZDkwMWQ3MzE4NDMyMDdjNjRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBMCiAgICAgICAgIGJvdHRvbVJpZ2h0Lm1vdmUoMCwgLTIgKiBvdXRsaW5lT2Zmc2V0KTsK
ICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSAtb3V0bGluZVdpZHRoOwogICAgIH0KLSAgICBkcmF3
TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9t
UmlnaHQpLCBCb3hTaWRlOjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNl
bnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOworICAgIGRyYXdMaW5lRm9yQm94
U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBB
TDo6Qm94U2lkZTo6TGVmdCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lk
dGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKICAgICAKICAgICAvLyByaWdodCBlZGdl
CiAgICAgdG9wTGVmdCA9IG91dGxpbmVCb3hSZWN0Lm1heFhNaW5ZQ29ybmVyKCk7CkBAIC0xMDM3
LDcgKzEwMzcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAgICAgICBib3R0b21SaWdo
dC5tb3ZlKG91dGxpbmVXaWR0aCwgLTIgKiBvdXRsaW5lT2Zmc2V0KTsKICAgICAgICAgYWRqYWNl
bnRXaWR0aDIgPSAtb3V0bGluZVdpZHRoOwogICAgIH0KLSAgICBkcmF3TGluZUZvckJveFNpZGUo
Z3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRl
OjpSaWdodCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGph
Y2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3ND
b250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBQQUw6OkJveFNpZGU6OlJp
Z2h0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50
V2lkdGgyLCBhbnRpYWxpYXMpOwogCiAgICAgLy8gdXBwZXIgZWRnZQogICAgIGlmICh0aGlzTGlu
ZS54KCkgPCBwcmV2aW91c0xpbmUueCgpKSB7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgTAogICAgICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSAtb3V0bGluZVdp
ZHRoOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkamFjZW50V2lkdGgyID0gb3V0bGlu
ZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9h
dFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpUb3AsIG91dGxpbmVDb2xvciwg
b3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlhcyk7
CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0
b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRsaW5lQ29sb3IsIG91
dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOwog
ICAgIH0KICAgICAKICAgICBpZiAocHJldmlvdXNMaW5lLm1heFgoKSA8IHRoaXNMaW5lLm1heFgo
KSkgewpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGlu
ZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEwKICAgICAg
ICAgYm90dG9tUmlnaHQgPSBvdXRsaW5lQm94UmVjdC5tYXhYTWluWUNvcm5lcigpOwogICAgICAg
ICBib3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwgMCk7CiAgICAgICAgIGFkamFjZW50V2lk
dGgyID0gb3V0bGluZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3ND
b250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpUb3AsIG91
dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIs
IGFudGlhbGlhcyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
IEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRs
aW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBh
bnRpYWxpYXMpOwogICAgIH0KIAogICAgIGlmICh0aGlzTGluZS54KCkgPT0gdGhpc0xpbmUubWF4
WCgpKSB7CkBAIC0xMDc1LDcgKzEwNzUsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRs
aW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAg
ICAgICBib3R0b21SaWdodCA9IG91dGxpbmVCb3hSZWN0Lm1heFhNaW5ZQ29ybmVyKCk7CiAgICAg
ICAgIGJvdHRvbVJpZ2h0Lm1vdmUob3V0bGluZVdpZHRoLCAwKTsKICAgICAgICAgYWRqYWNlbnRX
aWR0aDIgPSBvdXRsaW5lV2lkdGg7Ci0gICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGlj
c0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIEJveFNpZGU6OlRvcCwg
b3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGphY2VudFdpZHRo
MiwgYW50aWFsaWFzKTsKKyAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4
dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJpZ2h0KSwgUEFMOjpCb3hTaWRlOjpUb3AsIG91
dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIs
IGFudGlhbGlhcyk7CiAgICAgfQogCiAgICAgLy8gbG93ZXIgZWRnZQpAQCAtMTA5MCw3ICsxMDkw
LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEwKICAgICAgICAgICAgIGFkamFjZW50V2lkdGgy
ID0gLW91dGxpbmVXaWR0aDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhZGphY2VudFdp
ZHRoMiA9IG91dGxpbmVXaWR0aDsKLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNz
Q29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJpZ2h0KSwgQm94U2lkZTo6Qm90dG9t
LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lk
dGgyLCBhbnRpYWxpYXMpOworICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBQQUw6OkJveFNpZGU6OkJvdHRv
bSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGphY2VudFdp
ZHRoMiwgYW50aWFsaWFzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG5leHRMaW5lLm1heFgoKSA8
IHRoaXNMaW5lLm1heFgoKSkgewpAQCAtMTEwNCw3ICsxMTA0LDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEwKICAgICAgICAgYm90dG9tUmlnaHQgPSBvdXRsaW5lQm94UmVjdC5tYXhYTWF4WUNv
cm5lcigpOwogICAgICAgICBib3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwgb3V0bGluZVdp
ZHRoKTsKICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSBvdXRsaW5lV2lkdGg7Ci0gICAgICAgIGRy
YXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0
b21SaWdodCksIEJveFNpZGU6OkJvdHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFk
amFjZW50V2lkdGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICAgICAgZHJhd0xp
bmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJp
Z2h0KSwgUEFMOjpCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBh
ZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlhcyk7CiAgICAgfQogCiAgICAg
aWYgKHRoaXNMaW5lLngoKSA9PSB0aGlzTGluZS5tYXhYKCkpIHsKQEAgLTExMTQsNyArMTExNCw3
IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBMCiAgICAgICAgIGJvdHRvbVJpZ2h0ID0gb3V0bGlu
ZUJveFJlY3QubWF4WE1heFlDb3JuZXIoKTsKICAgICAgICAgYm90dG9tUmlnaHQubW92ZShvdXRs
aW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CiAgICAgICAgIGFkamFjZW50V2lkdGgyID0gb3V0bGlu
ZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9h
dFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVDb2xv
ciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlh
cyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVj
dCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBvdXRsaW5lQ29s
b3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxp
YXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggMDkyNWQ4MjhmOGFhNWE1YjBjYjRmMmQyNzg2OGIwZmEyOTUyYmFlZi4uZmY4ODU4M2Q3
MmIxYjU0MjE5NDkyMjUyYzNiYmNlODJlYjIzM2QzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC01MjI5LDggKzUyMjksOCBAQCBzdGF0aWMgYm9vbCBoYXNW
aXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIpCiAKIHN0YXRpYyBib29sIHN0eWxlSGFzU21vb3RoaW5nVGV4dE1vZGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewotICAgIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUg
PSBzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCk7Ci0gICAgcmV0dXJuIHNt
b290aGluZ01vZGUgPT0gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfHwgc21vb3Ro
aW5nTW9kZSA9PSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDsKKyAgICBQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUgPSBzdHlsZS5mb250RGVzY3JpcHRp
b24oKS5mb250U21vb3RoaW5nKCk7CisgICAgcmV0dXJuIHNtb290aGluZ01vZGUgPT0gUEFMOjpG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB8fCBzbW9vdGhpbmdNb2RlID09IFBBTDo6
Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ7CiB9CiAKIC8vIENvbnN0cmFp
biB0aGUgZGVwdGggYW5kIGJyZWFkdGggb2YgdGhlIHNlYXJjaCBmb3IgcGVyZm9ybWFuY2UuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKaW5kZXggZjI5NTA0YTJmMzJlODVhZDU4MzI3ZjY2YTM0YjE5MTI4YjZkNjg3OC4uOWE0ZjM5
OTM2YTM5YmFiYTY5NTA0NDI3YTJiYjk2ZjkxZjVjZmEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMTgyLDcgKzE4
Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2hvdWxkUGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0CiAgICAgY2FzZSBVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9s
aWN5OjpDb250ZW50OgogICAgICAgICByZXR1cm4gc3R5bGUoKS5zaG91bGRQbGFjZVZlcnRpY2Fs
U2Nyb2xsYmFyT25MZWZ0KCk7CiAgICAgY2FzZSBVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5
OjpTeXN0ZW06Ci0gICAgICAgIHJldHVybiBzZXR0aW5ncygpLnN5c3RlbUxheW91dERpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzKCkuc3lz
dGVtTGF5b3V0RGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBzdHlsZSgpLnNob3VsZFBsYWNl
VmVydGljYWxTY3JvbGxiYXJPbkxlZnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAppbmRleCBmYTFhZWE0NDgwNGNi
NTE5M2EwNGI5ZThlZDViNTAwMjBjM2NhY2Q2Li42ODA5ZTY3MDFjOTI2NjZlZmZhM2E2MDUxZGEy
OTgxMjg4NzE5NDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxPcmlnaW4oKQogICAgIEFTU0VS
VChib3gpOwogCiAgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92
ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkgLyp8fCBib3gtPnN0eWxlKCkud3JpdGluZ01vZGUoKSA9
PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQqLykKKyAgICBpZiAoc2hvdWxkUGxhY2VWZXJ0aWNh
bFNjcm9sbGJhck9uTGVmdCgpIC8qfHwgYm94LT5zdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFM
OjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQqLykKICAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVy
ZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgaW50IHNjcm9sbGFibGVUb3BP
dmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwog
ICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNj
cm9sbGFibGVUb3BPdmVyZmxvdykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCmluZGV4IDljMDdjODA5YjkwMTM5NDAyOTY1MjM3MjZhZDdmMzQ4MDJhNzUyYmQu
LjdmZjcxZmFkNjM4NTIxNThmY2M1YmMwMzMxNDNjZjQzZDZkM2U2NWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIGlmICh0ZXh0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRleHQg
PSBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4dCwgJyAnKTsKLSAgICAgICAgICAgIGF1
dG8gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGV4dCwgc3R5bGUoKSwgQWxsb3dSaWdodEV4
cGFuc2lvbik7CisgICAgICAgICAgICBhdXRvIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRl
eHQsIHN0eWxlKCksIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbik7CiAgICAgICAgICAgICB3aWR0
aCA9IHN0ZDo6bWF4KHdpZHRoLCBzZWxlY3RGb250KCkud2lkdGgodGV4dFJ1bikpOwogICAgICAg
ICB9CiAgICAgICAgIC8vIEZJWE1FOiBJcyBjZWlsaW5nIHJpZ2h0IGhlcmUsIG9yIHNob3VsZCB3
ZSBiZSBkb2luZyBzb21lIGtpbmQgb2Ygcm91bmRpbmcgaW5zdGVhZD8KQEAgLTQyMiw3ICs0MjIs
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5z
ZXRGaWxsQ29sb3IodGV4dENvbG9yKTsKIAotICAgIFRleHRSdW4gdGV4dFJ1bihpdGVtVGV4dCwg
MCwgMCwgQWxsb3dSaWdodEV4cGFuc2lvbiwgaXRlbVN0eWxlLmRpcmVjdGlvbigpLCBpc092ZXJy
aWRlKGl0ZW1TdHlsZS51bmljb2RlQmlkaSgpKSwgdHJ1ZSk7CisgICAgVGV4dFJ1biB0ZXh0UnVu
KGl0ZW1UZXh0LCAwLCAwLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIGl0ZW1TdHlsZS5kaXJl
Y3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUudW5pY29kZUJpZGkoKSksIHRydWUpOwogICAg
IEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIExheW91
dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJbmRleCk7CiAg
ICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1biwgJml0ZW1TdHlsZSwgaXRl
bUZvbnQsIHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3Bw
CmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMwOGQ2YjM5MTU1NWY3YzUyMzZiNjQyZjguLjU0ZjU5YTM5
ZmUwMGJjNzU5ZmViYmRiZmYyYjkzNjYzYjFlMjBiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIlJl
bmRlclRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlN0
eWxlSW5oZXJpdGVkRGF0YS5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCisjaW5jbHVkZSA8
cGFsL3RleHQvVW5pY29kZUJpZGkuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgpAQCAtNzQsMTAgKzc0LDEwIEBAIFJlbmRlclN0eWxlIFJlbmRlckxpc3RJdGVtOjpjb21w
dXRlTWFya2VyU3R5bGUoKSBjb25zdAogICAgIC8vIG90aGVyd2lzZSBzZXQgaW4gdGhlIHVzZXIt
YWdlbnQgc3R5bGVzaGVldCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IDo6YmVmb3JlOjptYXJrZXIg
b3IKICAgICAvLyA6OmFmdGVyOjptYXJrZXIuIFNlZSBidWdzLndlYmtpdC5vcmcvYi8yMTg4OTcu
CiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnMpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50TnVtZXJpY1NwYWNpbmcoUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1
bGFyTnVtYmVycyk7CiAgICAgbWFya2VyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CiAgICAgbWFya2VyU3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwotICAgIG1hcmtlclN0eWxlLnNldFVuaWNvZGVC
aWRpKEVVbmljb2RlQmlkaTo6SXNvbGF0ZSk7CisgICAgbWFya2VyU3R5bGUuc2V0VW5pY29kZUJp
ZGkoUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGUpOwogICAgIG1hcmtlclN0eWxlLnNldFdoaXRl
U3BhY2UoV2hpdGVTcGFjZTo6UHJlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRUZXh0VHJhbnNmb3Jt
KFRleHRUcmFuc2Zvcm06Ok5vbmUpOwogICAgIHJldHVybiBtYXJrZXJTdHlsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCBiMTM0NmExMDViNzMyOGU1
OGY1ZmJhN2U5ODA5MjZjYTE5OTgxZTkwLi5lNGQwMzRmNTBjODllNzVjMzM3NWI0YjkyMzQ5MDIx
MzliNTQxZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFy
cXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
CkBAIC0xMDMsMTMgKzEwMywxMyBAQCBNYXJxdWVlRGlyZWN0aW9uIFJlbmRlck1hcnF1ZWU6OmRp
cmVjdGlvbigpIGNvbnN0CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIENTUzMgImF1dG8iIHZh
bHVlIGZvciBkZXRlcm1pbmluZyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtYXJxdWVlLgogICAgIC8v
IEZvciBub3cganVzdCBtYXAgTWFycXVlZURpcmVjdGlvbjo6QXV0byB0byBNYXJxdWVlRGlyZWN0
aW9uOjpCYWNrd2FyZAogICAgIE1hcnF1ZWVEaXJlY3Rpb24gcmVzdWx0ID0gbV9sYXllci0+cmVu
ZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVEaXJlY3Rpb24oKTsKLSAgICBUZXh0RGlyZWN0aW9uIGRp
ciA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyID0gbV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmRpcmVjdGlvbigp
OwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QXV0bykKICAgICAgICAgcmVz
dWx0ID0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgaWYgKHJlc3VsdCA9PSBNYXJx
dWVlRGlyZWN0aW9uOjpGb3J3YXJkKQotICAgICAgICByZXN1bHQgPSAoZGlyID09IFRleHREaXJl
Y3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodCA6IE1hcnF1ZWVEaXJlY3Rpb246
OkxlZnQ7CisgICAgICAgIHJlc3VsdCA9IChkaXIgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
ID8gTWFycXVlZURpcmVjdGlvbjo6UmlnaHQgOiBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0OwogICAg
IGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQpCi0gICAgICAgIHJlc3Vs
dCA9IChkaXIgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSA/IE1hcnF1ZWVEaXJlY3Rpb246OkxlZnQg
OiBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgcmVzdWx0ID0gKGRpciA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0IDogTWFycXVlZURp
cmVjdGlvbjo6UmlnaHQ7CiAgICAgCiAgICAgLy8gTm93IHdlIGhhdmUgdGhlIHJlYWwgZGlyZWN0
aW9uLiAgTmV4dCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGluY3JlbWVudCBpcyBuZWdhdGl2ZS4K
ICAgICAvLyBJZiBzbywgdGhlbiB3ZSByZXZlcnNlIHRoZSBkaXJlY3Rpb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCAwZjUxMTY1Y2VhYjdkYTZm
ZmE1M2VjZTZjOGJkNWIwYjk2OTA0MWMzLi43MTIxNGY0ZGRhNzNiMzI2YjZjMGZjOThjMzNlNjlk
NDAwNWY1YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAKQEAgLTEzMiwxNiArMTMyLDE2IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVy
U3R5bGUoKQogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBub3QgcmVzcGVjdCB0
aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLAogICAgICAgICAvLyBz
byB3ZSBtdXN0IGFkanVzdCBvdXIgb3duIHN0eWxlIHRvIG1hdGNoLgogICAgICAgICBpbm5lclN0
eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpMZWZ0KTsKLSAgICAgICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSAobV9idXR0b25UZXh0ICYmIG1fYnV0dG9uVGV4dC0+dGV4dCgpLmRl
ZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19MRUZUKSA/IFRleHREaXJlY3Rp
b246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYgbV9idXR0b25UZXh0LT50ZXh0KCkuZGVmYXVs
dFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgaW5uZXJTdHlsZS5z
ZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0g
ZWxzZSBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1BbGlnbm1lbnRG
b2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKSkgewotICAgICAgICBpbm5lclN0eWxlLnNldFRl
eHRBbGlnbihzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFRleHRB
bGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodCk7Ci0gICAgICAgIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uOwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGk7CisgICAg
ICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6
UmlnaHQpOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgICAgICBQ
QUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaTsKICAgICAgICAgaWYgKG11bHRpcGxlKCkgJiYg
c2VsZWN0ZWRPcHRpb25Db3VudCgqdGhpcykgIT0gMSkgewotICAgICAgICAgICAgZGlyZWN0aW9u
ID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS5kZWZhdWx0V3JpdGluZ0Rp
cmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0
RGlyZWN0aW9uOjpMVFI7Ci0gICAgICAgICAgICB1bmljb2RlQmlkaSA9IFVCTm9ybWFsOworICAg
ICAgICAgICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQo
KS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBQQUw6OlRl
eHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAg
dW5pY29kZUJpZGkgPSBQQUw6OlVCTm9ybWFsOwogICAgICAgICB9IGVsc2UgaWYgKG1fb3B0aW9u
U3R5bGUpIHsKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG1fb3B0aW9uU3R5bGUtPmRpcmVjdGlv
bigpOwogICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBtX29wdGlvblN0eWxlLT51bmljb2RlQmlk
aSgpOwpAQCAtNTc0LDcgKzU3NCw3IEBAIGNvbnN0IGludCBlbmRPZkxpbmVQYWRkaW5nID0gMjsK
IAogTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAog
ewotICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkg
JiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKKyAgICBpZiAo
KHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCB8fCBzdHlsZSgp
LmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpICYmIHN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgLy8gRm9y
IHRoZXNlIGFwcGVhcmFuY2UgdmFsdWVzLCB0aGUgdGhlbWUgYXBwbGllcyBwYWRkaW5nIHRvIGxl
YXZlIHJvb20gZm9yIHRoZQogICAgICAgICAvLyBkcm9wLWRvd24gYnV0dG9uLiBCdXQgbGVhdmlu
ZyByb29tIGZvciB0aGUgYnV0dG9uIGluc2lkZSB0aGUgcG9wdXAgbWVudSBpdHNlbGYKICAgICAg
ICAgLy8gbG9va3Mgc3RyYW5nZSwgc28gd2UgcmV0dXJuIGEgc21hbGwgZGVmYXVsdCBwYWRkaW5n
IHRvIGF2b2lkIGhhdmluZyBhIGxhcmdlIGVtcHR5CkBAIC01ODgsNyArNTg4LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogCiBMYXlvdXRV
bml0IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewotICAgIGlm
ICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0IHx8IHN0eWxl
KCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgJiYgc3R5bGUo
KS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKChzdHlsZSgpLmVm
ZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5lZmZlY3RpdmVB
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm4gZW5kT2ZMaW5lUGFk
ZGluZzsKIAogICAgIHJldHVybiBwYWRkaW5nUmlnaHQoKSArIG1faW5uZXJCbG9jay0+cGFkZGlu
Z1JpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmNwcAppbmRleCBlMzk2ZmExMjI4Mjk4ZDUwZDYwZDZhZmY3NmNkNDJjZWUwZTJiYmE0
Li4wODhlMzYyMDc0YjE5N2U1NWE0ODZjNmFiYjhhNTIwNmY5MDk2YWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKQEAgLTYzMSw5
ICs2MzEsOSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1bGVzKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQbwogICAgICAgICBMYXlvdXRVbml0IHJ1
bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKICAgICAgICAgTGF5b3V0VW5p
dCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IDBfbHUgOiBjb250ZW50TG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgaW5saW5lRGlyZWN0aW9uU2l6ZSA9IGNvbXB1dGVk
Q29sdW1uV2lkdGgoKTsKLSAgICAgICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKQotICAgICAgICAgICAgPyBsZWZ0VG9SaWdodCA/IEJveFNpZGU6OkxlZnQgOiBC
b3hTaWRlOjpSaWdodAotICAgICAgICAgICAgOiBsZWZ0VG9SaWdodCA/IEJveFNpZGU6OlRvcCA6
IEJveFNpZGU6OkJvdHRvbTsKKyAgICAgICAgUEFMOjpCb3hTaWRlIGJveFNpZGUgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpCisgICAgICAgICAgICA/IGxlZnRUb1JpZ2h0ID8gUEFMOjpCb3hT
aWRlOjpMZWZ0IDogUEFMOjpCb3hTaWRlOjpSaWdodAorICAgICAgICAgICAgOiBsZWZ0VG9SaWdo
dCA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRlOjpCb3R0b207CiAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgICAgIC8v
IE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCkBAIC02NzQsNyArNjc0LDcgQEAgdm9pZCBSZW5k
ZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG8KIAogICAgICAgICBydWxlUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwog
Ci0gICAgICAgIEJveFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0
b3BUb0JvdHRvbSA/IEJveFNpZGU6OlRvcCA6IEJveFNpZGU6OkJvdHRvbSA6IHRvcFRvQm90dG9t
ID8gQm94U2lkZTo6TGVmdCA6IEJveFNpZGU6OlJpZ2h0OworICAgICAgICBQQUw6OkJveFNpZGUg
Ym94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0b3BUb0JvdHRvbSA/IFBBTDo6
Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRlOjpCb3R0b20gOiB0b3BUb0JvdHRvbSA/IFBBTDo6
Qm94U2lkZTo6TGVmdCA6IFBBTDo6Qm94U2lkZTo6UmlnaHQ7CiAKICAgICAgICAgTGF5b3V0U2l6
ZSBzdGVwKDBfbHUsIHRvcFRvQm90dG9tID8gY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdh
cCA6IC0oY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdhcCkpOwogICAgICAgICBpZiAoIWlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCmluZGV4IGQ2MWFjZDNjZDg2ZTcxYzc0YjAxODcxMjQxNmUzNzExZmZkYzQwNzgu
LjNmNGM1NDg1ZDAwNmU4NGNlMzhmZWYyMzZmODA4YWM3NDU5ZTQ2NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xODc5LDcgKzE4NzksNyBAQCBSZW5k
ZXJGcmFnbWVudGVkRmxvdyogUmVuZGVyT2JqZWN0Ojpsb2NhdGVFbmNsb3NpbmdGcmFnbWVudGVk
RmxvdygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9j
ay0+ZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVuZGVy
T2JqZWN0OjpjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKGNvbnN0IEJvcmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgQm94U2lkZSYgc2lkZSwgQ29sb3ImIGNvbG9yKQordm9pZCBSZW5kZXJPYmplY3Q6
OmNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoY29uc3QgQm9yZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBQQUw6OkJveFNpZGUmIHNpZGUsIENvbG9yJiBjb2xvcikKIHsKICAgICBBU1NFUlQoc3R5bGUg
PT0gQm9yZGVyU3R5bGU6Okluc2V0IHx8IHN0eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQpOwog
CkBAIC0xODg5LDcgKzE4ODksNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y2FsY3VsYXRlQm9yZGVy
U3R5bGVDb2xvcihjb25zdCBCb3JkZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJveAogCiAgICAgZW51
bSBPcGVyYXRpb24geyBEYXJrZW4sIExpZ2h0ZW4gfTsKIAotICAgIE9wZXJhdGlvbiBvcGVyYXRp
b24gPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSA9PSAo
c3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47CisgICAgT3Bl
cmF0aW9uIG9wZXJhdGlvbiA9IChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0g
UEFMOjpCb3hTaWRlOjpMZWZ0KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERh
cmtlbiA6IExpZ2h0ZW47CiAKICAgICAvLyBIZXJlIHdlIHdpbGwgZGFya2VuIHRoZSBib3JkZXIg
ZGVjb3JhdGlvbiBjb2xvciB3aGVuIG5lZWRlZC4gVGhpcyB3aWxsIHlpZWxkIGEgc2ltaWxhciBi
ZWhhdmlvciBhcyBpbiBGRi4KICAgICBpZiAob3BlcmF0aW9uID09IERhcmtlbikgewpAQCAtMjMx
NSw3ICsyMzE1LDcgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRy
aWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgICAgICBpZiAoZ2VvbWV0
cmllc1tqXS5iZWhhdmlvcigpID09IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRp
dmlkdWFsUXVhZHMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgcHJldmlv
dXNSZWN0ID0gZ2VvbWV0cmllc1tqIC0gMV07Ci0gICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5
Tm90UmVhY2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJl
Y3Rpb246OkxUUiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwgKHByZXZpb3VzUmVj
dC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlvdXNSZWN0LmNvbnRh
aW5zU3RhcnQoKSk7CisgICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdodEVk
Z2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
ICYmIHByZXZpb3VzUmVjdC5jb250YWluc0VuZCgpKSB8fCAocHJldmlvdXNSZWN0LmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMICYmIHByZXZpb3VzUmVjdC5jb250YWluc1N0
YXJ0KCkpOwogICAgICAgICBpZiAocHJldmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaW50IGFkanVzdGVkV2lkdGggPSBnZW9tZXRy
aWVzW2pdLmxvZ2ljYWxMZWZ0KCkgLSBwcmV2aW91c1JlY3QubG9naWNhbExlZnQoKTsKQEAgLTIz
MzIsMTAgKzIzMzIsMTAgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25HZW9t
ZXRyaWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmIChzZWxlY3Rpb25HZW9tZXRyeS5iZWhhdmlvcigpID09IFNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFRl
eHREaXJlY3Rpb246OlJUTCAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0ZpcnN0T25MaW5lKCkpIHsK
KyAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKSkgewogICAg
ICAgICAgICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0TG9naWNhbFdpZHRoKHNlbGVjdGlvbkdlb21l
dHJ5LmxvZ2ljYWxXaWR0aCgpICsgc2VsZWN0aW9uR2VvbWV0cnkubG9naWNhbExlZnQoKSAtIHNl
bGVjdGlvbkdlb21ldHJ5Lm1pblgoKSk7CiAgICAgICAgICAgICBzZWxlY3Rpb25HZW9tZXRyeS5z
ZXRMb2dpY2FsTGVmdChzZWxlY3Rpb25HZW9tZXRyeS5taW5YKCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiAm
JiBzZWxlY3Rpb25HZW9tZXRyeS5pc0xhc3RPbkxpbmUoKSkKKyAgICAgICAgfSBlbHNlIGlmIChz
ZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiAm
JiBzZWxlY3Rpb25HZW9tZXRyeS5pc0xhc3RPbkxpbmUoKSkKICAgICAgICAgICAgIHNlbGVjdGlv
bkdlb21ldHJ5LnNldExvZ2ljYWxXaWR0aChzZWxlY3Rpb25HZW9tZXRyeS5tYXhYKCkgLSBzZWxl
Y3Rpb25HZW9tZXRyeS5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBkNDk5ODc4NzJlZjM0MTAzYWMwZTgyNGQ3MWYzOTRj
NmViY2U5N2QzLi5iYWE2YjdlMDJjMjhiYmI4NDY5MGMyN2U0N2E3YmJhODIxN2E5MzdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC03NjIsNyArNzYyLDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dEJp
dChib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91
dChiKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJGcmFnbWVudGVkRmxvdyogbG9jYXRlRW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVCb3Jk
ZXJTdHlsZUNvbG9yKGNvbnN0IEJvcmRlclN0eWxlJiwgY29uc3QgQm94U2lkZSYsIENvbG9yJik7
CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihjb25zdCBCb3JkZXJT
dHlsZSYsIGNvbnN0IFBBTDo6Qm94U2lkZSYsIENvbG9yJik7CiAKICAgICBzdGF0aWMgRnJhZ21l
bnRlZEZsb3dTdGF0ZSBjb21wdXRlZEZyYWdtZW50ZWRGbG93U3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAK
aW5kZXggYTZiYmRiNDVmMzdlMmExYmE0NDVhN2M0MTMxYjU1Yzg4OTA0NjZjYi4uZjYwZjI0OTA5
NGE1ZTMxZWQzZjYzMGUyODkyYmQ1YzMzYjhmZDBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcCgpIGNvbnN0CiAgICAgTGF5b3V0VW5pdCByZXN1
bHQgPSBjb21wdXRlZENTU1BhZGRpbmdUb3AoKTsKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdCArIChz
dHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tID8gaW50cmlu
c2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOworICAgIHJldHVy
biByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tID8gaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2ljUGFkZGluZ0Fm
dGVyKCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JvdHRvbSgp
IGNvbnN0CkBAIC0zMDMsNyArMzAzLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBh
ZGRpbmdCb3R0b20oKSBjb25zdAogICAgIExheW91dFVuaXQgcmVzdWx0ID0gY29tcHV0ZWRDU1NQ
YWRkaW5nQm90dG9tKCk7CiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5n
TW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/IGludHJpbnNpY1BhZGRpbmdBZnRl
cigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgKHN0
eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/IGlu
dHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKIH0KIAog
TGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdMZWZ0KCkgY29uc3QKQEAgLTMxMSw3
ICszMTEsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0xlZnQoKSBjb25z
dAogICAgIExheW91dFVuaXQgcmVzdWx0ID0gY29tcHV0ZWRDU1NQYWRkaW5nTGVmdCgpOwogICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6IGludHJpbnNpY1BhZGRp
bmdBZnRlcigpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9
PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUo
KSA6IGludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJs
ZUNlbGw6OnBhZGRpbmdSaWdodCgpIGNvbnN0CkBAIC0zMTksNyArMzE5LDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCgpIGNvbnN0CiAgICAgTGF5b3V0VW5pdCBy
ZXN1bHQgPSBjb21wdXRlZENTU1BhZGRpbmdSaWdodCgpOwogICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQg
KyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGlu
dHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGlu
Z0JlZm9yZSgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCZWZv
cmUoKSBjb25zdApAQCAtMTExNSw3ICsxMTE1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQK
IAogc3RydWN0IENvbGxhcHNlZEJvcmRlciB7CiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9y
ZGVyVmFsdWU7Ci0gICAgQm94U2lkZSBzaWRlOworICAgIFBBTDo6Qm94U2lkZSBzaWRlOwogICAg
IGJvb2wgc2hvdWxkUGFpbnQ7CiAgICAgTGF5b3V0VW5pdCB4MTsKICAgICBMYXlvdXRVbml0IHkx
OwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBC
b3hTaWRlIGJvcmRlclNpZGUsIGJvb2wgc2hvdWxkUGFpbnQsCisgICAgdm9pZCBhZGRCb3JkZXIo
Y29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBQQUw6OkJveFNpZGUgYm9y
ZGVyU2lkZSwgYm9vbCBzaG91bGRQYWludCwKICAgICAgICAgTGF5b3V0VW5pdCB4MSwgTGF5b3V0
VW5pdCB5MSwgTGF5b3V0VW5pdCB4MiwgTGF5b3V0VW5pdCB5MiwgQm9yZGVyU3R5bGUgYm9yZGVy
U3R5bGUpCiAgICAgewogICAgICAgICBpZiAoYm9yZGVyVmFsdWUuZXhpc3RzKCkgJiYgc2hvdWxk
UGFpbnQpIHsKQEAgLTEyNTMsMTAgKzEyNTMsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50Q29sbGFwc2VkQm9yZGVycyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG8K
ICAgICAvLyBXZSBuZXZlciBwYWludCBkaWFnb25hbHMgYXQgdGhlIGpvaW5zLiAgV2Ugc2ltcGx5
IGxldCB0aGUgYm9yZGVyIHdpdGggdGhlIGhpZ2hlc3QKICAgICAvLyBwcmVjZWRlbmNlIHBhaW50
IG9uIHRvcCBvZiBib3JkZXJzIHdpdGggbG93ZXIgcHJlY2VkZW5jZS4gIAogICAgIENvbGxhcHNl
ZEJvcmRlcnMgYm9yZGVyczsKLSAgICBib3JkZXJzLmFkZEJvcmRlcih0b3BWYWwsIEJveFNpZGU6
OlRvcCwgcmVuZGVyVG9wLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJl
Y3QubWF4WCgpLCBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7Ci0gICAgYm9y
ZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBCb3hTaWRlOjpCb3R0b20sIHJlbmRlckJvdHRvbSwg
Ym9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsIGJvcmRlclJl
Y3QubWF4WCgpLCBib3JkZXJSZWN0Lm1heFkoKSwgYm90dG9tU3R5bGUpOwotICAgIGJvcmRlcnMu
YWRkQm9yZGVyKGxlZnRWYWwsIEJveFNpZGU6OkxlZnQsIHJlbmRlckxlZnQsIGJvcmRlclJlY3Qu
eCgpLCBib3JkZXJSZWN0LnkoKSwgYm9yZGVyUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlclJl
Y3QubWF4WSgpLCBsZWZ0U3R5bGUpOwotICAgIGJvcmRlcnMuYWRkQm9yZGVyKHJpZ2h0VmFsLCBC
b3hTaWRlOjpSaWdodCwgcmVuZGVyUmlnaHQsIGJvcmRlclJlY3QubWF4WCgpIC0gcmlnaHRXaWR0
aCwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QubWF4WCgpLCBib3JkZXJSZWN0Lm1heFkoKSwg
cmlnaHRTdHlsZSk7CisgICAgYm9yZGVycy5hZGRCb3JkZXIodG9wVmFsLCBQQUw6OkJveFNpZGU6
OlRvcCwgcmVuZGVyVG9wLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJl
Y3QubWF4WCgpLCBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7CisgICAgYm9y
ZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBQQUw6OkJveFNpZGU6OkJvdHRvbSwgcmVuZGVyQm90
dG9tLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgYm9y
ZGVyUmVjdC5tYXhYKCksIGJvcmRlclJlY3QubWF4WSgpLCBib3R0b21TdHlsZSk7CisgICAgYm9y
ZGVycy5hZGRCb3JkZXIobGVmdFZhbCwgUEFMOjpCb3hTaWRlOjpMZWZ0LCByZW5kZXJMZWZ0LCBi
b3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QueCgpICsgbGVmdFdpZHRo
LCBib3JkZXJSZWN0Lm1heFkoKSwgbGVmdFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihy
aWdodFZhbCwgUEFMOjpCb3hTaWRlOjpSaWdodCwgcmVuZGVyUmlnaHQsIGJvcmRlclJlY3QubWF4
WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QubWF4WCgpLCBib3Jk
ZXJSZWN0Lm1heFkoKSwgcmlnaHRTdHlsZSk7CiAKICAgICBib29sIGFudGlhbGlhcyA9IHNob3Vs
ZEFudGlhbGlhc0xpbmVzKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGE0ZWJhMDgwYzQ1ZjVh
OGFkNjY2OTQ4NWZiOGRhZTA2ODEwNDFiNWIuLmE5OTA1Njk4YjA2YTNkNGIyNTMxZjdmYmZkNmJm
ZmU5MWI1ZTZjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBDZWxsU3BhbiBSZW5kZXJUYWJsZVNl
Y3Rpb246OnNwYW5uZWRDb2x1bW5zKGNvbnN0IExheW91dFJlY3QmIGZsaXBwZWRSZWN0LCBTaG91
bAogICAgIHJldHVybiBDZWxsU3BhbihzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKIH0KIAotdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCb3JkZXIoY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0IHJlY3QsIEJveFNpZGUgc2lk
ZSwgQ1NTUHJvcGVydHlJRCBib3JkZXJDb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIEJv
cmRlclN0eWxlIHRhYmxlQm9yZGVyU3R5bGUpCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFp
bnRSb3dHcm91cEJvcmRlcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYm9vbCBhbnRpYWxp
YXMsIExheW91dFJlY3QgcmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIENTU1Byb3BlcnR5SUQgYm9y
ZGVyQ29sb3IsIEJvcmRlclN0eWxlIGJvcmRlclN0eWxlLCBCb3JkZXJTdHlsZSB0YWJsZUJvcmRl
clN0eWxlKQogewogICAgIGlmICh0YWJsZUJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpIaWRk
ZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTEwOTIsMTQgKzEwOTIsMTQgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJUYWJsZVNlY3Rpb246Om9mZnNldExlZnRGb3JSb3dHcm91cEJvcmRlcihSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwKICAgICByZXR1cm4gcm93R3JvdXBSZWN0LndpZHRoKCkgLSBtX3Jvd1Bvc1ty
b3cgKyAxXSArIChpc0xhc3RSb3cgPyAtb3V0ZXJCb3JkZXJMZWZ0KCZzdHlsZSgpKSA6IDBfbHUp
OwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6b2Zmc2V0VG9wRm9yUm93R3Jv
dXBCb3JkZXIoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBCb3hTaWRlIGJvcmRlclNpZGUsIHVuc2ln
bmVkIHJvdykKK0xheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpvZmZzZXRUb3BGb3JSb3dH
cm91cEJvcmRlcihSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBBTDo6Qm94U2lkZSBib3JkZXJTaWRl
LCB1bnNpZ25lZCByb3cpCiB7CiAgICAgYm9vbCBpc0xhc3RSb3cgPSByb3cgKyAxID09IG1fZ3Jp
ZC5zaXplKCk7CiAgICAgaWYgKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIG1fcm93UG9zW3Jvd10gKyAoIXJvdyAmJiBib3JkZXJTaWRlID09IEJveFNp
ZGU6OlJpZ2h0ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IGlzTGFzdFJvdyAmJiBib3Jk
ZXJTaWRlID09IEJveFNpZGU6OkxlZnQgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiAwX2x1
KTsKKyAgICAgICAgcmV0dXJuIG1fcm93UG9zW3Jvd10gKyAoIXJvdyAmJiBib3JkZXJTaWRlID09
IFBBTDo6Qm94U2lkZTo6UmlnaHQgPyAtb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKCkpIDogaXNMYXN0
Um93ICYmIGJvcmRlclNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0ID8gb3V0ZXJCb3JkZXJUb3Ao
JnN0eWxlKCkpIDogMF9sdSk7CiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQotICAgICAgICByZXR1cm4gKGNlbGwgPyBjZWxsLT55KCkgKyBjZWxsLT5oZWlnaHQoKSA6
IDBfbHUpICsgKGJvcmRlclNpZGUgPT0gQm94U2lkZTo6TGVmdCA/IG91dGVyQm9yZGVyVG9wKCZz
dHlsZSgpKSA6IDBfbHUpOwotICAgIHJldHVybiBib3JkZXJTaWRlID09IEJveFNpZGU6OlJpZ2h0
ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHU7CisgICAgICAgIHJldHVybiAoY2Vs
bCA/IGNlbGwtPnkoKSArIGNlbGwtPmhlaWdodCgpIDogMF9sdSkgKyAoYm9yZGVyU2lkZSA9PSBQ
QUw6OkJveFNpZGU6OkxlZnQgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiAwX2x1KTsKKyAg
ICByZXR1cm4gYm9yZGVyU2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0ID8gLW91dGVyQm9yZGVy
VG9wKCZzdHlsZSgpKSA6IDBfbHU7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9u
Ojp2ZXJ0aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgY29u
c3QgTGF5b3V0UmVjdCYgcm93R3JvdXBSZWN0LCB1bnNpZ25lZCByb3cpCkBAIC0xMTIzLDcgKzEx
MjMsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6aG9yaXpvbnRhbFJvd0dyb3Vw
Qm9yZGVyV2lkdGgoUmVuZGVyVGFibGVDZWxsKiBjZQogICAgIHJldHVybiBtX3Jvd1Bvc1tyb3cg
KyAxXSAtIG1fcm93UG9zW3Jvd10gKyAoaXNMYXN0Um93ID8gb3V0ZXJCb3JkZXJMZWZ0KCZzdHls
ZSgpKSA6ICFyb3cgPyBvdXRlckJvcmRlclJpZ2h0KCZzdHlsZSgpKSA6IDBfbHUpOwogfQogCi12
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcklmUmVxdWlyZWQoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
dW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4sIEJveFNpZGUgYm9yZGVyU2lkZSwgUmVuZGVy
VGFibGVDZWxsKiBjZWxsKQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBC
b3JkZXJJZlJlcXVpcmVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQsIHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1uLCBQQUw6OkJv
eFNpZGUgYm9yZGVyU2lkZSwgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQogewogICAgIGlmICh0YWJs
ZSgpLT5jdXJyZW50Qm9yZGVyVmFsdWUoKS0+cHJlY2VkZW5jZSgpID4gQm9yZGVyUHJlY2VkZW5j
ZTo6Um93R3JvdXApCiAgICAgICAgIHJldHVybjsKQEAgLTExMzMsMjQgKzExMzMsMjQgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCb3JkZXJJZlJlcXVpcmVkKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlz
LT5zdHlsZSgpOwogICAgIGJvb2wgYW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzTGluZXMocGFp
bnRJbmZvLmNvbnRleHQoKSk7CiAgICAgTGF5b3V0UmVjdCByb3dHcm91cFJlY3QgPSBMYXlvdXRS
ZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpOwotICAgIHJvd0dyb3VwUmVjdC5tb3ZlQnkoLUxheW91
dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lkZSA9PSBCb3hTaWRlOjpS
aWdodCkgPyAwX2x1IDogb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKSkpOworICAgIHJvd0dyb3VwUmVj
dC5tb3ZlQnkoLUxheW91dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lk
ZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSA/IDBfbHUgOiBvdXRlckJvcmRlclRvcCgmc3R5bGUp
KSk7CiAKICAgICBzd2l0Y2ggKGJvcmRlclNpZGUpIHsKLSAgICBjYXNlIEJveFNpZGU6OlRvcDoK
KyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICBwYWludFJvd0dyb3VwQm9yZGVy
KHBhaW50SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LngoKSArIG9mZnNl
dExlZnRGb3JSb3dHcm91cEJvcmRlcihjZWxsLCByb3dHcm91cFJlY3QsIHJvdyksIHJvd0dyb3Vw
UmVjdC55KCksIAotICAgICAgICAgICAgaG9yaXpvbnRhbFJvd0dyb3VwQm9yZGVyV2lkdGgoY2Vs
bCwgcm93R3JvdXBSZWN0LCByb3csIGNvbHVtbiksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyVG9w
KCkud2lkdGgoKSkpLCBCb3hTaWRlOjpUb3AsIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsIHN0
eWxlLmJvcmRlclRvcFN0eWxlKCksIHRhYmxlKCktPnN0eWxlKCkuYm9yZGVyVG9wU3R5bGUoKSk7
CisgICAgICAgICAgICBob3Jpem9udGFsUm93R3JvdXBCb3JkZXJXaWR0aChjZWxsLCByb3dHcm91
cFJlY3QsIHJvdywgY29sdW1uKSwgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJUb3AoKS53aWR0aCgp
KSksIFBBTDo6Qm94U2lkZTo6VG9wLCBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCBzdHlsZS5i
b3JkZXJUb3BTdHlsZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclRvcFN0eWxlKCkpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBBTDo6Qm94
U2lkZTo6Qm90dG9tOgogICAgICAgICBwYWludFJvd0dyb3VwQm9yZGVyKHBhaW50SW5mbywgYW50
aWFsaWFzLCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LngoKSArIG9mZnNldExlZnRGb3JSb3dHcm91
cEJvcmRlcihjZWxsLCByb3dHcm91cFJlY3QsIHJvdyksIHJvd0dyb3VwUmVjdC55KCkgKyByb3dH
cm91cFJlY3QuaGVpZ2h0KCksIAotICAgICAgICAgICAgaG9yaXpvbnRhbFJvd0dyb3VwQm9yZGVy
V2lkdGgoY2VsbCwgcm93R3JvdXBSZWN0LCByb3csIGNvbHVtbiksIExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyQm90dG9tKCkud2lkdGgoKSkpLCBCb3hTaWRlOjpCb3R0b20sIENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tQ29sb3IsIHN0eWxlLmJvcmRlckJvdHRvbVN0eWxlKCksIHRhYmxlKCktPnN0eWxl
KCkuYm9yZGVyQm90dG9tU3R5bGUoKSk7CisgICAgICAgICAgICBob3Jpem9udGFsUm93R3JvdXBC
b3JkZXJXaWR0aChjZWxsLCByb3dHcm91cFJlY3QsIHJvdywgY29sdW1uKSwgTGF5b3V0VW5pdChz
dHlsZS5ib3JkZXJCb3R0b20oKS53aWR0aCgpKSksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBzdHlsZS5ib3JkZXJCb3R0b21TdHlsZSgpLCB0YWJs
ZSgpLT5zdHlsZSgpLmJvcmRlckJvdHRvbVN0eWxlKCkpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAg
IHBhaW50Um93R3JvdXBCb3JkZXIocGFpbnRJbmZvLCBhbnRpYWxpYXMsIExheW91dFJlY3Qocm93
R3JvdXBSZWN0LngoKSwgcm93R3JvdXBSZWN0LnkoKSArIG9mZnNldFRvcEZvclJvd0dyb3VwQm9y
ZGVyKGNlbGwsIGJvcmRlclNpZGUsIHJvdyksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyTGVmdCgp
LndpZHRoKCkpLAotICAgICAgICAgICAgdmVydGljYWxSb3dHcm91cEJvcmRlckhlaWdodChjZWxs
LCByb3dHcm91cFJlY3QsIHJvdykpLCBCb3hTaWRlOjpMZWZ0LCBDU1NQcm9wZXJ0eUJvcmRlckxl
ZnRDb2xvciwgc3R5bGUuYm9yZGVyTGVmdFN0eWxlKCksIHRhYmxlKCktPnN0eWxlKCkuYm9yZGVy
TGVmdFN0eWxlKCkpOworICAgICAgICAgICAgdmVydGljYWxSb3dHcm91cEJvcmRlckhlaWdodChj
ZWxsLCByb3dHcm91cFJlY3QsIHJvdykpLCBQQUw6OkJveFNpZGU6OkxlZnQsIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yLCBzdHlsZS5ib3JkZXJMZWZ0U3R5bGUoKSwgdGFibGUoKS0+c3R5bGUo
KS5ib3JkZXJMZWZ0U3R5bGUoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm94U2lkZTo6
UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICBwYWludFJvd0dy
b3VwQm9yZGVyKHBhaW50SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHJvd0dyb3VwUmVjdC54
KCkgKyByb3dHcm91cFJlY3Qud2lkdGgoKSwgcm93R3JvdXBSZWN0LnkoKSArIG9mZnNldFRvcEZv
clJvd0dyb3VwQm9yZGVyKGNlbGwsIGJvcmRlclNpZGUsIHJvdyksIExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyUmlnaHQoKS53aWR0aCgpKSwKLSAgICAgICAgICAgIHZlcnRpY2FsUm93R3JvdXBCb3Jk
ZXJIZWlnaHQoY2VsbCwgcm93R3JvdXBSZWN0LCByb3cpKSwgQm94U2lkZTo6UmlnaHQsIENTU1By
b3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgc3R5bGUuYm9yZGVyUmlnaHRTdHlsZSgpLCB0YWJsZSgp
LT5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7CisgICAgICAgICAgICB2ZXJ0aWNhbFJvd0dy
b3VwQm9yZGVySGVpZ2h0KGNlbGwsIHJvd0dyb3VwUmVjdCwgcm93KSksIFBBTDo6Qm94U2lkZTo6
UmlnaHQsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgc3R5bGUuYm9yZGVyUmlnaHRTdHls
ZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTE1OCwyOSArMTE1OCwyOSBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcklmUmVxdWlyZWQoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZgogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9y
ZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xs
YXBzZWRCb3JkZXJTaWRlIHNpZGUpCitzdGF0aWMgUEFMOjpCb3hTaWRlIHBoeXNpY2FsQm9yZGVy
Rm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xsYXBz
ZWRCb3JkZXJTaWRlIHNpZGUpCiB7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICBjYXNlIENC
U1N0YXJ0OgogICAgICAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBCb3hTaWRlOjpMZWZ0IDogQm94U2lkZTo6UmlnaHQ7Ci0gICAgICAg
IHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCb3hT
aWRlOjpUb3AgOiBCb3hTaWRlOjpCb3R0b207CisgICAgICAgICAgICByZXR1cm4gc3R5bGVGb3JD
ZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpCb3hTaWRlOjpMZWZ0IDog
UEFMOjpCb3hTaWRlOjpSaWdodDsKKyAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRl
OjpCb3R0b207CiAgICAgY2FzZSBDQlNFbmQ6CiAgICAgICAgIGlmIChzdHlsZUZvckNlbGxGbG93
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlRm9y
Q2VsbEZsb3ctPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJveFNpZGU6OlJpZ2h0IDogQm94
U2lkZTo6TGVmdDsKLSAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IEJveFNpZGU6OkJvdHRvbSA6IEJveFNpZGU6OlRvcDsKKyAgICAgICAg
ICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBQ
QUw6OkJveFNpZGU6OlJpZ2h0IDogUEFMOjpCb3hTaWRlOjpMZWZ0OworICAgICAgICByZXR1cm4g
c3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpCb3hTaWRl
OjpCb3R0b20gOiBQQUw6OkJveFNpZGU6OlRvcDsKICAgICBjYXNlIENCU0JlZm9yZToKICAgICAg
ICAgaWYgKHN0eWxlRm9yQ2VsbEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOwotICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxs
Rmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gQm94U2lkZTo6UmlnaHQgOiBCb3hTaWRl
OjpMZWZ0OworICAgICAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOworICAgICAgICBy
ZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpC
b3hTaWRlOjpSaWdodCA6IFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICBjYXNlIENCU0FmdGVyOgog
ICAgICAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpCb3R0b207Ci0gICAgICAgIHJldHVybiBzdHls
ZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCb3hTaWRlOjpMZWZ0IDog
Qm94U2lkZTo6UmlnaHQ7CisgICAgICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpCb3R0b207
CisgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBQQUw6OkJveFNpZGU6OkxlZnQgOiBQQUw6OkJveFNpZGU6OlJpZ2h0OwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQm94U2lk
ZTo6TGVmdDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA4
NWNiMTJkYjkzYmIxOTJhZmI2NTZiMTYxNGQyOWYyZGQ2M2VlMTRhLi42MWM3ZTVlZjA3NTMwZGVl
ZTc0ZmU1ZjdmMzIwYzhiZTZhN2FkNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xNzEsMTEgKzE3MSwxMSBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludFJvd0dyb3VwQm9yZGVyKGNvbnN0IFBh
aW50SW5mbyYsIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0LCBCb3hTaWRlLCBDU1NQcm9wZXJ0
eUlEIGJvcmRlckNvbG9yLCBCb3JkZXJTdHlsZSwgQm9yZGVyU3R5bGUgdGFibGVCb3JkZXJTdHls
ZSk7Ci0gICAgdm9pZCBwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZChjb25zdCBQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIHVuc2lnbmVkIHJvdywgdW5zaWdu
ZWQgY29sLCBCb3hTaWRlLCBSZW5kZXJUYWJsZUNlbGwqID0gMCk7CisgICAgdm9pZCBwYWludFJv
d0dyb3VwQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYsIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0
LCBQQUw6OkJveFNpZGUsIENTU1Byb3BlcnR5SUQgYm9yZGVyQ29sb3IsIEJvcmRlclN0eWxlLCBC
b3JkZXJTdHlsZSB0YWJsZUJvcmRlclN0eWxlKTsKKyAgICB2b2lkIHBhaW50Um93R3JvdXBCb3Jk
ZXJJZlJlcXVpcmVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2wsIFBBTDo6Qm94U2lkZSwgUmVuZGVyVGFi
bGVDZWxsKiA9IDApOwogICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdEZvclJvd0dyb3VwQm9yZGVy
KFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJlY3QmIHJvd0dyb3VwUmVjdCwgdW5zaWdu
ZWQgcm93KTsKIAotICAgIExheW91dFVuaXQgb2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIoUmVu
ZGVyVGFibGVDZWxsKiwgQm94U2lkZSBib3JkZXJTaWRlLCB1bnNpZ25lZCByb3cpOworICAgIExh
eW91dFVuaXQgb2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIoUmVuZGVyVGFibGVDZWxsKiwgUEFM
OjpCb3hTaWRlIGJvcmRlclNpZGUsIHVuc2lnbmVkIHJvdyk7CiAgICAgTGF5b3V0VW5pdCB2ZXJ0
aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJl
Y3QmIHJvd0dyb3VwUmVjdCwgdW5zaWduZWQgcm93KTsKICAgICBMYXlvdXRVbml0IGhvcml6b250
YWxSb3dHcm91cEJvcmRlcldpZHRoKFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJlY3Qm
IHJvd0dyb3VwUmVjdCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggOGM0MjU0ZWM0Mjk0M2UxMzc4MmM0
N2NkM2JiNmVjZmQ5M2U2NjUxOS4uYzQyNzQzM2Y5OTMzNTA5OTY3NzUwMjdhNDQ0ZjE5ZDAwYmQ4
ZWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMjgsMTQg
KzI4LDE0IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkJyZWFrTGlu
ZXMuaCIKICNpbmNsdWRlICJCcmVha2luZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJDaGFyYWN0ZXJQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oPgog
I2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2lu
Y2x1ZGUgIkh5cGhlbmF0aW9uLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvSHlwaGVuYXRpb24uaD4K
ICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRv
ckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yVGV4dEJv
eC5oIgpAQCAtOTMzLDcgKzkzMyw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0
aChSZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlCiAgICAgVmVj
dG9yPGludCwgOD4gaHlwaGVuTG9jYXRpb25zOwogICAgIEFTU0VSVCh3b3JkLmxlbmd0aCgpID49
IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0aW9uID0gd29y
ZC5sZW5ndGgoKSAtIG1pbmltdW1TdWZmaXhMZW5ndGg7Ci0gICAgd2hpbGUgKChoeXBoZW5Mb2Nh
dGlvbiA9IGxhc3RIeXBoZW5Mb2NhdGlvbih3b3JkLCBoeXBoZW5Mb2NhdGlvbiwgc3R5bGUuY29t
cHV0ZWRMb2NhbGUoKSkpID49IHN0ZDo6bWF4KG1pbmltdW1QcmVmaXhMZW5ndGgsIDFVKSkKKyAg
ICB3aGlsZSAoKGh5cGhlbkxvY2F0aW9uID0gUEFMOjpsYXN0SHlwaGVuTG9jYXRpb24od29yZCwg
aHlwaGVuTG9jYXRpb24sIHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKSA+PSBzdGQ6Om1heChtaW5p
bXVtUHJlZml4TGVuZ3RoLCAxVSkpCiAgICAgICAgIGh5cGhlbkxvY2F0aW9ucy5hcHBlbmQoaHlw
aGVuTG9jYXRpb24pOwogCiAgICAgaWYgKGh5cGhlbkxvY2F0aW9ucy5pc0VtcHR5KCkpCkBAIC0x
MDAyLDcgKzEwMDIsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGbwogICAgIGZsb2F0IG1heFdv
cmRXaWR0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKICAgICB1bnNpZ25l
ZCBtaW5pbXVtUHJlZml4TGVuZ3RoID0gMDsKICAgICB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVu
Z3RoID0gMDsKLSAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8gJiYgY2Fu
SHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKSB7CisgICAgaWYgKHN0eWxlLmh5cGhl
bnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIFBBTDo6Y2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVk
TG9jYWxlKCkpKSB7CiAgICAgICAgIG1heFdvcmRXaWR0aCA9IDA7CiAKICAgICAgICAgLy8gTWFw
ICdoeXBoZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06IGF1dG87JyB0byAyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggMGYyODFhMDU3
Y2Y2NTE4MGU0YmU4Njk5MDZlODJjNmIxN2I4MDIwYy4uZTFhZjE4ZGZhMDlmNzcwYjIwNDM2ZTU0
NjFmY2EzMjI0NDgzMTQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRy
b2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgoKQogICAgIGNvbnN0IFVDaGFyIGNoID0gJzAnOwogICAg
IGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKICAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKHN0ciwgc3R5bGUoKSwgQWxsb3dSaWdodEV4cGFuc2lvbik7CisgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHIsIHN0eWxlKCksIFBBTDo6QWxs
b3dSaWdodEV4cGFuc2lvbik7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1bik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCBjZGIyYjBh
MmQxYjc0MGVjNzIxODUwY2M2NzczN2NjNGM5MTgxNDZhLi44ZGEzMWQ2ZTU4ZGU5ZGY2N2JjNWEy
OGNlMmMwMTE4MjAzOWE0N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCkBAIC03MDUsNyArNzA1LDcgQEAgTGVuZ3RoQm94IFJlbmRlclRoZW1lSU9TOjpw
b3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnMKICAg
ICB9CiAKICAgICBpZiAoc3R5bGUuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkgewotICAgICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6UlRMKQorICAgICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4geyAwLCAwLCAwLCBzdGF0aWNfY2FzdDxpbnQ+
KHBhZGRpbmcgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSB9OwogICAgICAgICByZXR1cm4geyAw
LCBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmcgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSwgMCwg
MCB9OwogICAgIH0KQEAgLTg0Nyw3ICs4NDcsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiBib3gsIGNvbnN0CiAj
ZW5kaWYKIAogICAgIGF1dG8mIHN0eWxlID0gYm94LnN0eWxlKCk7Ci0gICAgYm9vbCBpc1JUTCA9
IHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBib29sIGlzUlRM
ID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgZmxv
YXQgYm9yZGVyVG9wV2lkdGggPSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIEZsb2F0UmVj
dCBjbGlwKHJlY3QueCgpICsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5
bGUuYm9yZGVyVG9wV2lkdGgoKSwgcmVjdC53aWR0aCgpIC0gc3R5bGUuYm9yZGVyTGVmdFdpZHRo
KCkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSBzdHlsZS5ib3Jk
ZXJUb3BXaWR0aCgpIC0gc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCk7CkBA
IC04ODksNyArODg5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRv
bkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYgYm94LCBjb25zdAogCiAgICAgZmxvYXQgc2Vw
YXJhdG9yUG9zaXRpb24gPSBpc1JUTCA/IChjbGlwLngoKSArIE1lbnVMaXN0QnV0dG9uUGFkZGlu
Z0FmdGVyKSA6IChjbGlwLm1heFgoKSAtIE1lbnVMaXN0QnV0dG9uUGFkZGluZ0FmdGVyKTsKIAot
ICAgIGJveC5kcmF3TGluZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoc2VwYXJhdG9yUG9zaXRpb24gLSBib3JkZXJUb3BXaWR0aCwgY2xpcC55KCkp
LCBGbG9hdFBvaW50KHNlcGFyYXRvclBvc2l0aW9uLCBjbGlwLm1heFkoKSkpLCBCb3hTaWRlOjpS
aWdodCwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29s
b3IpLCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAwLCAwKTsKKyAgICBib3guZHJhd0xpbmVGb3JC
b3hTaWRlKHBhaW50SW5mby5jb250ZXh0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KHNlcGFyYXRv
clBvc2l0aW9uIC0gYm9yZGVyVG9wV2lkdGgsIGNsaXAueSgpKSwgRmxvYXRQb2ludChzZXBhcmF0
b3JQb3NpdGlvbiwgY2xpcC5tYXhZKCkpKSwgUEFMOjpCb3hTaWRlOjpSaWdodCwgc3R5bGUudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3Jk
ZXJUb3BTdHlsZSgpLCAwLCAwKTsKIAogICAgIEZsb2F0UmVjdCBidXR0b25DbGlwOwogICAgIGlm
IChpc1JUTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRl
eCBhYTYwZjJlYjJjNDIzMmVjOTBmYTkzZmVhMGZlODA3MDYxYjM1OGMyLi5mMDU5MGQxMTVjOWE1
ODNkNDFjYTIwZGE5YjM3M2Q5ZWMyMWMyOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xNTQ0LDcgKzE1NDQsNyBAQCB2b2lkIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUAogCiB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBib29sIGlzUlRMID0gcmVuZGVyZXIu
c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc1JU
TCA9IHJlbmRlcmVyLnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpS
VEw7CiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIuc3R5
bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci5zdHls
ZSgpLmJvcmRlclRvcFdpZHRoKCksCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVyLnN0
eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclJpZ2h0V2lk
dGgoKSwKQEAgLTE2NTIsNyArMTY1Miw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1l
bnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlKSBjCiBMZW5n
dGhCb3ggUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgU2V0dGluZ3MmKSBjb25zdAogewogICAgIGlmIChzdHlsZS5l
ZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAgIGNvbnN0IGlu
dCogcGFkZGluZyA9IHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUp
LCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAgICBjb25z
dCBpbnQqIHBhZGRpbmcgPSBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSwgc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwogICAg
ICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmdbdG9wUGFkZGluZ10gKiBzdHls
ZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5n
W3JpZ2h0UGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihwYWRkaW5nW2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9v
bSgpKSwKQEAgLTE2NjMsNyArMTY2Myw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVtZU1hYzo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAgICAg
ICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIChzdHlsZS5jb21wdXRlZEZv
bnRQaXhlbFNpemUoKSAvIGJhc2VGb250U2l6ZSk7CiAgICAgICAgIGZsb2F0IHJpZ2h0UGFkZGlu
ZyA9IGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nQmVmb3JlICsgYXJyb3dQYWRkaW5n
QWZ0ZXIgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7
CiAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0
eWxlLmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFRl
eHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgc3RkOjpzd2FwKHJpZ2h0UGFkZGluZywg
bGVmdFBhZGRpbmcpOwogICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlZFBv
cHVwUGFkZGluZ1RvcCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSksCiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KHJpZ2h0UGFkZGluZyksCkBAIC0xNzE0LDcgKzE3MTQsNyBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IEludFNpegogICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0
aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCiAgICAgc2V0Q29udHJvbFNpemUocG9w
dXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgYnV0dG9uU2l6ZSwgby5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKSk7CiAKLSAgICBwb3B1cEJ1dHRvbi51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uID0gby5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgcG9wdXBCdXR0b24udXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbiA9IG8uc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAKICAgICAvLyBVcGRhdGUg
dGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0YXRl
KHBvcHVwQnV0dG9uLCBvKTsKQEAgLTIxMzIsNyArMjEzMiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgYm94LCBj
b25zdCBQCiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gYWRqdXN0ZWRSZXN1bHRCdXR0b25S
ZWN0KFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qoc25hcHBlZEludFJl
Y3QoaW5wdXRCb3guY29udGVudEJveFJlY3QoKSkpXSk7CiAgICAgLy8gQWRqdXN0IHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSBjb250ZW50IGRpcmVjdGlvbi4KICAgICBmbG9hdCBhZGp1c3RlZFhQb3Np
dGlvbjsKLSAgICBpZiAoYm94LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
UlRMKQorICAgIGlmIChib3guc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCkKICAgICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94
UmVjdCgpLm1heFgoKSAtIGxvY2FsQm91bmRzLnNpemUoKS53aWR0aCgpOwogICAgIGVsc2UKICAg
ICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94UmVjdCgpLngoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBi
MzEzNzM3MmY1ZDUxMDk1NWM5MTM4NDE1OGRiZDllMjZkYzMzM2IyLi5jMzJjZjQxMWM1NjA1NTg3
ODMyMTdkYTRhOGRmNzAxMzQwM2E1YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zMjgsMTMgKzMyOCwxMyBAQCB2b2lkIFJlbmRlclRy
ZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJP
YmplY3QmIG8sCiAgICAgICAgIExheW91dFVuaXQgYm9yZGVyTGVmdCA9IGJveC5ib3JkZXJMZWZ0
KCk7CiAgICAgICAgIGlmIChib3guaXNGaWVsZHNldCgpKSB7CiAgICAgICAgICAgICBjb25zdCBh
dXRvJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihib3gpOwotICAgICAgICAgICAgaWYg
KG8uc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSkKKyAg
ICAgICAgICAgIGlmIChvLnN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbSkKICAgICAgICAgICAgICAgICBib3JkZXJUb3AgLT0gYmxvY2suaW50cmlu
c2ljQm9yZGVyRm9yRmllbGRzZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG8uc3R5bGUoKS53
cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCkKKyAgICAgICAgICAgIGVs
c2UgaWYgKG8uc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OkJvdHRv
bVRvVG9wKQogICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbSAtPSBibG9jay5pbnRyaW5zaWNC
b3JkZXJGb3JGaWVsZHNldCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoby5zdHlsZSgpLndyaXRp
bmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0KQorICAgICAgICAgICAgZWxzZSBp
ZiAoby5zdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQpCiAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCAtPSBibG9jay5pbnRyaW5zaWNCb3JkZXJG
b3JGaWVsZHNldCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoby5zdHlsZSgpLndyaXRpbmdNb2Rl
KCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQorICAgICAgICAgICAgZWxzZSBpZiAoby5z
dHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpCiAg
ICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQgLT0gYmxvY2suaW50cmluc2ljQm9yZGVyRm9yRmll
bGRzZXQoKTsKICAgICAgICAgICAgIAogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRCb3hQYWludGVyLmNwcAppbmRleCA0NzRmN2ViYTc2ODgzNTA2ZjI2NDk0ZDlkZjRl
ZTI3MGYzYzRmYTY3Li42Y2JjNzY1MWFmOTYxMzQ1ZDc2OWUyMTc0ZDVhZWU5YTFhOGYyMDJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0
aW9ucygpCiAgICAgICAgICAgICBpZiAoIXRleHRCb3goKS5pc0hvcml6b250YWwoKSkgewogICAg
ICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZSgwLCBs
b2dpY2FsV2lkdGhCZWZvcmVSYW5nZSk7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25T
ZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRIZWlnaHQobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGV4dEJveCgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rp
b246OlJUTCkgeworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Qm94KCkuZGlyZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3Jh
dGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSwgMCk7
CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRX
aWR0aChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQx
OCw5ICs0MTgsOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lcygpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWlycm9yUlRMU2VnbWVudChm
bG9hdCBsb2dpY2FsV2lkdGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCYgc3RhcnQs
IGZsb2F0IHdpZHRoKQorc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQg
bG9naWNhbFdpZHRoLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCYgc3RhcnQs
IGZsb2F0IHdpZHRoKQogewotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRS
KQorICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAg
IHJldHVybjsKICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCBhNTllZWQ0NGY0YWEz
NDQ2MzcyOGZiNmUyNjExNWQ4OTVlNTQ0NzljLi5jYjNjMzVlMmFjZTkxYzRhN2Q4MTExMTBkMzIz
ZTNmODQ2M2YyNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAK
QEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFkb3dBcHBsaWVy
OjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxv
YXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQs
IGJvb2wgb3BhcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCitTaGFkb3dBcHBsaWVy
OjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxv
YXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQs
IGJvb2wgb3BhcXVlLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKICAgICA6IG1f
Y29udGV4dCB7IGNvbnRleHQgfQogICAgICwgbV9zaGFkb3cgeyBzaGFkb3cgfQogICAgICwgbV9v
bmx5RHJhd3NTaGFkb3cgeyAhaXNMYXN0U2hhZG93SXRlcmF0aW9uKCkgfHwgIWxhc3RTaGFkb3dJ
dGVyYXRpb25TaG91bGREcmF3VGV4dCB9CkBAIC01MCw4ICs1MCw4IEBAIFNoYWRvd0FwcGxpZXI6
OlNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3csCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmbG9hdCBzaGFkb3dYID0g
b3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsID8gc2hhZG93LT54KCku
dmFsdWUoKSA6IHNoYWRvdy0+eSgpLnZhbHVlKCk7Ci0gICAgZmxvYXQgc2hhZG93WSA9IG9yaWVu
dGF0aW9uID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCA/IHNoYWRvdy0+eSgpLnZhbHVl
KCkgOiAtc2hhZG93LT54KCkudmFsdWUoKTsKKyAgICBmbG9hdCBzaGFkb3dYID0gb3JpZW50YXRp
b24gPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgPyBzaGFkb3ctPngoKS52YWx1
ZSgpIDogc2hhZG93LT55KCkudmFsdWUoKTsKKyAgICBmbG9hdCBzaGFkb3dZID0gb3JpZW50YXRp
b24gPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgPyBzaGFkb3ctPnkoKS52YWx1
ZSgpIDogLXNoYWRvdy0+eCgpLnZhbHVlKCk7CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChz
aGFkb3dYLCBzaGFkb3dZKTsKICAgICBhdXRvIHNoYWRvd1JhZGl1cyA9IHNoYWRvdy0+cmFkaXVz
KCk7CiAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGUKICAgICBpZiAoIW9wYXF1ZSkKICAgICAg
ICAgbV9jb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogICAgIHdoaWxlIChzaGFk
b3cpIHsKLSAgICAgICAgU2hhZG93QXBwbGllciBzaGFkb3dBcHBsaWVyKG1fY29udGV4dCwgc2hh
ZG93LCBjb2xvckZpbHRlciwgYm94UmVjdCwgbGFzdFNoYWRvd0l0ZXJhdGlvblNob3VsZERyYXdU
ZXh0LCBvcGFxdWUsIG1fdGV4dEJveElzSG9yaXpvbnRhbCA/IEZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCA6IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOworICAgICAgICBTaGFkb3dBcHBs
aWVyIHNoYWRvd0FwcGxpZXIobV9jb250ZXh0LCBzaGFkb3csIGNvbG9yRmlsdGVyLCBib3hSZWN0
LCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQsIG9wYXF1ZSwgbV90ZXh0Qm94SXNI
b3Jpem9udGFsID8gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgOiBQQUw6OkZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgICAgICBpZiAoIXNoYWRvd0FwcGxpZXIubm90aGlu
Z1RvRHJhdygpKQogICAgICAgICAgICAgcGFpbnRUZXh0T3JFbXBoYXNpc01hcmtzKGZvbnQsIHRl
eHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCB0ZXh0T3JpZ2luICsgc2hh
ZG93QXBwbGllci5leHRyYU9mZnNldCgpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5oCmluZGV4IGU0NTM0Y2JmYmYxODcwMTc2NDc0N2E1ODMzODVkNzk4ZDA3MTU5ODIuLjc4
M2U3ZGRiMjhhNjA2MGQ4NGY1MDNhN2U5MGM2ZTcwZTMwOGIwOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0UGFpbnRlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhEaXNw
bGF5TGlzdENhY2hlLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCBpbmxpbmUgdm9pZCBU
ZXh0UGFpbnRlcjo6c2V0RW1waGFzaXNNYXJrKGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGZsb2F0
IG9mZnNldCwgYwogCiBjbGFzcyBTaGFkb3dBcHBsaWVyIHsKIHB1YmxpYzoKLSAgICBTaGFkb3dB
cHBsaWVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFNoYWRvd0RhdGEqLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBs
YXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQgPSB0cnVlLCBib29sIG9wYXF1ZSA9IGZh
bHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwpOworICAg
IFNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgU2hhZG93RGF0YSosIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMqIGNvbG9yRmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHRleHRSZWN0
LCBib29sIGxhc3RTaGFkb3dJdGVyYXRpb25TaG91bGREcmF3VGV4dCA9IHRydWUsIGJvb2wgb3Bh
cXVlID0gZmFsc2UsIFBBTDo6Rm9udE9yaWVudGF0aW9uID0gUEFMOjpGb250T3JpZW50YXRpb246
Okhvcml6b250YWwpOwogICAgIEZsb2F0U2l6ZSBleHRyYU9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXh0cmFPZmZzZXQ7IH0KICAgICBib29sIG5vdGhpbmdUb0RyYXcoKSBjb25zdCB7IHJldHVy
biBtX25vdGhpbmdUb0RyYXc7IH0KICAgICBib29sIGRpZFNhdmVDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRTYXZlQ29udGV4dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCAzZDlmZjk5NWJiYzM3NDQ3ZmNhODcyMDVkYTkx
NzU5ZjdhNjI5NTk1Li4wODI4ZjIyNGI1M2EwOTQwYjFhNDM2ZDhmODE5MzBkMTFiZDdiZjgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaApA
QCAtMjUsNyArMjUsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCcmVha0xpbmVzLmgi
Ci0jaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9IeXBoZW5hdGlv
bi5oPgogI2luY2x1ZGUgIkxpbmVCcmVha2VyLmgiCiAjaW5jbHVkZSAiTGluZUluZm8uaCIKICNp
bmNsdWRlICJMaW5lTGF5b3V0U3RhdGUuaCIKQEAgLTI2Niw2ICsyNjYsMTUgQEAgaW5saW5lIHZv
aWQgQnJlYWtpbmdDb250ZXh0OjppbmNyZW1lbnQoKQogICAgIG1fYXRTdGFydCA9IGZhbHNlOwog
fQogCisvLyBXaGVuIGlnbm9yaW5nIHNwYWNlcywgdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9y
IG9iamVjdHMgdGhhdCBuZWVkIGxpbmUgYm94ZXMgc3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9yCisv
LyBoYXJkIGxpbmUgYnJlYWtzIHRvIGVuc3VyZSB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCitz
dGF0aWMgdm9pZCBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhMaW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZSYgc3RhdGUsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAg
TGVnYWN5SW5saW5lSXRlcmF0b3IgdHJhbnNpdGlvbigwLCAmcmVuZGVyZXIsIDApOworICAgIHN0
YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsKKyAgICBzdGF0ZS5zdGFydElnbm9y
aW5nU3BhY2VzKHRyYW5zaXRpb24pOworfQorCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6
OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogewogICAgIGlmIChmaXRzT25MaW5lT3JI
YW5nc0F0RW5kKCkpIHsKQEAgLTI4Nyw3ICsyOTYsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0Nv
bnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogICAgICAgICAvLyBuZWVkIHRv
IGNoZWNrIGZvciBmbG9hdHMgdG8gY2xlYXIgLSBzbyBpZiB3ZSdyZSBpZ25vcmluZyBzcGFjZXMs
IHN0b3AgaWdub3JpbmcgdGhlbSBhbmQgYWRkIGEKICAgICAgICAgLy8gcnVuIGZvciB0aGlzIG9i
amVjdC4KICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMgJiYgUmVuZGVyU3R5bGU6OnVzZWRD
bGVhcihicikgIT0gVXNlZENsZWFyOjpOb25lKQotICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhicik7Cisg
ICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2xpbmVXaGl0ZXNw
YWNlQ29sbGFwc2luZ1N0YXRlLCBicik7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgcHJlY2VkZWQg
YnkgY29sbGFwc2luZyBzcGFjZSBhbmQgYXJlIGluIGEgcmlnaHQtYWxpZ25lZCBjb250YWluZXIg
d2UgbmVlZCB0byBlbnN1cmUgdGhlIHNwYWNlIGdldHMKICAgICAgICAgLy8gY29sbGFwc2VkIGF3
YXkgc28gdGhhdCBpdCBkb2Vzbid0IHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhlIGNvbnRhaW5l
cidzIHJpZ2h0LWhhbmQgZWRnZS4KICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgcmVnYXJkbGVz
cyBvZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJlYmFzZWxpbmlu
ZyBhIGxvdCBvZiB0ZXN0IHJlc3VsdHMuCkBAIC0zNzAsNyArMzc5LDcgQEAgaW5saW5lIHZvaWQg
QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVPdXRPZkZsb3dQb3NpdGlvbmVkKFZlY3RvcjxSZW5kZXJC
b3gqPiYgcG9zaXQKICAgICAvLyB0aGVuIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyBhZ2Fpbi4KICAg
ICBpZiAoaXNJbmxpbmVUeXBlIHx8IGJveC5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkg
ewogICAgICAgICBpZiAobV9pZ25vcmluZ1NwYWNlcykKLSAgICAgICAgICAgIG1fbGluZVdoaXRl
c3BhY2VDb2xsYXBzaW5nU3RhdGUuZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMoYm94
KTsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fbGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIGJveCk7CiAgICAgICAgIG1fdHJhaWxpbmdPYmplY3Rz
LmFwcGVuZEJveElmTmVlZGVkKGJveCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBvc2l0aW9uZWRP
YmplY3RzLmFwcGVuZCgmYm94KTsKQEAgLTQzOCw3ICs0NDcsNyBAQCBpbmxpbmUgdm9pZCBCcmVh
a2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKICAgICAgICAgICAgIG1fbGluZUluZm8u
c2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmbV93aWR0aCk7CiAgICAgICAgIGlmIChtX2lnbm9y
aW5nU3BhY2VzKSB7CiAgICAgICAgICAgICBtX3RyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwotICAg
ICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5z
aWRlSWdub3JlZFNwYWNlcygqbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgICAgICAgICAgZW5z
dXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdT
dGF0ZSwgKm1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2Jsb2Nr
U3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgbV9yZXNvbHZlci5wb3NpdGlvbigpLnJlbmRl
cmVyKCkgPT0gbV9jdXJyZW50LnJlbmRlcmVyKCkKICAgICAgICAgICAgICYmIHNob3VsZFNraXBX
aGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBtX2N1cnJlbnQucmVuZGVyZXIoKSwg
bV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSkpIHsKICAgICAgICAgICAgIC8vIExpa2Ug
d2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0byBtYWtlIHN1cmUg
dGhhdCBhbnkKQEAgLTU5Myw3ICs2MDIsNyBAQCBpbmxpbmUgdm9pZCB0cnlIeXBoZW5hdGluZyhS
ZW5kZXJUZXh0JiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgQXRvbQogICAg
IGZsb2F0IGh5cGhlbldpZHRoID0gbWVhc3VyZUh5cGhlbldpZHRoKHRleHQsIGZvbnQpOwogCiAg
ICAgZmxvYXQgbWF4UHJlZml4V2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHhQb3MgLSBoeXBoZW5X
aWR0aCAtIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwotICAgIGlmICghZW5vdWdoV2lkdGhGb3JIeXBo
ZW5hdGlvbihtYXhQcmVmaXhXaWR0aCwgZm9udC5waXhlbFNpemUoKSkpCisgICAgaWYgKCFQQUw6
OmVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24obWF4UHJlZml4V2lkdGgsIGZvbnQucGl4ZWxTaXpl
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0
ZXh0LnN0eWxlKCk7CkBAIC02MDUsNyArNjE0LDcgQEAgaW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRp
bmcoUmVuZGVyVGV4dCYgdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IEF0b20K
ICAgICBpZiAocHJlZml4TGVuZ3RoIDwgbWluaW11bVByZWZpeExlbmd0aCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcHJlZml4TGVuZ3RoID0gbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXco
dGV4dC50ZXh0KCkpLnN1YnN0cmluZyhsYXN0U3BhY2UsIHBvcyAtIGxhc3RTcGFjZSksIHN0ZDo6
bWluKHByZWZpeExlbmd0aCwgcG9zIC0gbGFzdFNwYWNlIC0gbWluaW11bVN1ZmZpeExlbmd0aCkg
KyAxLCBsb2NhbGVJZGVudGlmaWVyKTsKKyAgICBwcmVmaXhMZW5ndGggPSBQQUw6Omxhc3RIeXBo
ZW5Mb2NhdGlvbihTdHJpbmdWaWV3KHRleHQudGV4dCgpKS5zdWJzdHJpbmcobGFzdFNwYWNlLCBw
b3MgLSBsYXN0U3BhY2UpLCBzdGQ6Om1pbihwcmVmaXhMZW5ndGgsIHBvcyAtIGxhc3RTcGFjZSAt
IG1pbmltdW1TdWZmaXhMZW5ndGgpICsgMSwgbG9jYWxlSWRlbnRpZmllcik7CiAgICAgaWYgKCFw
cmVmaXhMZW5ndGggfHwgcHJlZml4TGVuZ3RoIDwgbWluaW11bVByZWZpeExlbmd0aCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjk0LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250
ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wK
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUocmVuZGVyZXIsIG1fbGlu
ZUluZm8pOwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUo
KTsKICAgICBib29sIGlzRml4ZWRQaXRjaCA9IGZvbnQuaXNGaXhlZFBpdGNoKCk7Ci0gICAgYm9v
bCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBXZWJD
b3JlOjpjYW5IeXBoZW5hdGUoc3R5bGUuY29tcHV0ZWRMb2NhbGUoKSk7CisgICAgYm9vbCBjYW5I
eXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBQQUw6OmNhbkh5
cGhlbmF0ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKICAgICBib29sIGNhbkhhbmdQdW5jdHVh
dGlvbkF0U3RhcnQgPSBzdHlsZS5oYW5naW5nUHVuY3R1YXRpb24oKS5jb250YWlucyhIYW5naW5n
UHVuY3R1YXRpb246OkZpcnN0KTsKICAgICBib29sIGNhbkhhbmdQdW5jdHVhdGlvbkF0RW5kID0g
c3R5bGUuaGFuZ2luZ1B1bmN0dWF0aW9uKCkuY29udGFpbnMoSGFuZ2luZ1B1bmN0dWF0aW9uOjpM
YXN0KTsKICAgICBib29sIGNhbkhhbmdTdG9wT3JDb21tYUF0TGluZUVuZCA9IHN0eWxlLmhhbmdp
bmdQdW5jdHVhdGlvbigpLmNvbnRhaW5zKEhhbmdpbmdQdW5jdHVhdGlvbjo6QWxsb3dFbmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3Rz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAK
aW5kZXggYmUyZmVhMTU0NWFmYTRhNjU1MjZiOWFmNjdiYjQ4OWIzNDQxYjY3NS4uNTgwMDBlZWM1
YTQ0ZWU1OWI2MGQ3YmVhMDIyYWI5YTU2ZDBiNWU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZv
aWQgVHJhaWxpbmdPYmplY3RzOjp1cGRhdGVXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25z
Rm9yVHJhaWxpbmdCb3hlcyhMaW5lCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9i
b3hlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRUcmFuc2l0aW9uID49
IGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25zKCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgdHJhbnNpdGlvbiBmb3IgdGhpcyBib3ggeWV0
LgotICAgICAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxp
bmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgICAgIGVu
c3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0
YXRlLCBtX2JveGVzW2ldKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25zKClbY3VycmVu
dFRyYW5zaXRpb25dLnJlbmRlcmVyKCkgPT0gJihtX2JveGVzW2ldLmdldCgpKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25z
KClbY3VycmVudFRyYW5zaXRpb24gKyAxXS5yZW5kZXJlcigpID09ICYobV9ib3hlc1tpXS5nZXQo
KSkpOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVz
cGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGluZQogICAgICAgICBM
ZWdhY3lJbmxpbmVJdGVyYXRvciBlbmRNaWQoMCwgbV93aGl0ZXNwYWNlLCBwb3MpOwogICAgICAg
ICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5zdGFydElnbm9yaW5nU3BhY2VzKGVuZE1p
ZCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ib3hlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxpbmVCb3hJ
bnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMobGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIG1fYm94
ZXNbaV0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvVHJhaWxpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9U
cmFpbGluZ09iamVjdHMuaAppbmRleCAzNmVhM2JiN2U4ZTgyYjI1MmRkMTUwYTMwNjdiYThkMDdl
NDc3YzJjLi45OTQwZjcxMzVmMTBjMGQzYTdlODk5Mzg3ZWZlMzQ0MDljZjQ5OTJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaApAQCAtMjYs
NiArMjYsMTIgQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIFBBTCB7
Cit0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJlc29sdmVy
OwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIElzb2xhdGVSdW4+
IGNsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlOwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y
PiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOworfQorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIExlZ2FjeUlubGluZUl0ZXJhdG9yOwpAQCAtMzUsMTEgKzQxLDggQEAgY2xh
c3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBCaWRpUnVuOwogc3RydWN0IEJpZGlJc29sYXRlZFJ1bjsK
IAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZl
cjsKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBJc29sYXRlUnVu
PiBjbGFzcyBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTsKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv
cj4gY2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLXR5cGVkZWYgQmlkaVJlc29sdmVy
V2l0aElzb2xhdGU8TGVnYWN5SW5saW5lSXRlcmF0b3IsIEJpZGlSdW4sIEJpZGlJc29sYXRlZFJ1
bj4gSW5saW5lQmlkaVJlc29sdmVyOwotdHlwZWRlZiBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
PExlZ2FjeUlubGluZUl0ZXJhdG9yPiBMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKK3R5
cGVkZWYgUEFMOjpCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRvciwg
QmlkaVJ1biwgQmlkaUlzb2xhdGVkUnVuPiBJbmxpbmVCaWRpUmVzb2x2ZXI7Cit0eXBlZGVmIFBB
TDo6V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRvcj4gTGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7CiAKIGNsYXNzIFRyYWlsaW5nT2JqZWN0cyB7CiBwdWJs
aWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MQmxvY2suY3BwCmluZGV4IGVkOGYyMGY5ODViYWEyNTQ3NDg0MWIyNjhhNDU0OTc5NjRlZjJl
YmUuLmIyZGI0OGNkYjg2MzU4Y2M5NDJkYzFhN2M3OTY2OWQ2ZTg3ZTY3NGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3Bw
CkBAIC04OSw3ICs4OSw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6Om1hdGhBeGlz
SGVpZ2h0KCkgY29uc3QKIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6bWlycm9ySWZO
ZWVkZWQoTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBMYXlvdXRVbml0IGJveFdpZHRoKSBj
b25zdAogewotICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJU
TCkKKyAgICBpZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJU
TCkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gYm94V2lkdGggLSBob3Jpem9udGFs
T2Zmc2V0OwogCiAgICAgcmV0dXJuIGhvcml6b250YWxPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmlu
ZGV4IGFhMWZlNTUyYTE4M2FhZDMyMmJjYjM0ZDEwOGZlMWFhYzEzMzUxNTAuLmFhMzk0YmUyNGEx
NWVhODVkOGRlZTkxNWYzMmU2NjYxNzI1ZjI2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC0yMzcs
NyArMjM3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2cKICAgICAgICAgc2V0TG9naWNhbFdp
ZHRoKHdpZHRoKTsKIAogICAgICAgICAvLyBXZSB0aGVuIG1vdmUgdGhlIGNoaWxkcmVuIHRvIHRh
a2Ugc3BhY2luZyBpbnRvIGFjY291bnQuCi0gICAgICAgIExheW91dFBvaW50IGhvcml6b250YWxT
aGlmdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxlYWRpbmdT
cGFjZVZhbHVlIDogLWxlYWRpbmdTcGFjZVZhbHVlLCAwX2x1KTsKKyAgICAgICAgTGF5b3V0UG9p
bnQgaG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1ZSwgMF9sdSk7
CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0
aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgaG9yaXpvbnRhbFNoaWZ0KTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDZkMzdiZDIwYTVlYTIxMjBi
YWE0YTNlYjU4ZGQ4ODlkZGMzYjkwOTEuLjdiYzY2Y2RkNDQ1NzQ5ZDY5YTg3OWNiNGQ0MWNjZjZh
ZjkwZTgyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBA
IC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNyZWF0ZVBvbHln
b25TaGFwZShWZWN0b3I8RmxvYXRQb2ludD4mJiB2ZXJ0aWNlcywKICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxQb2x5Z29uU2hhcGU+KFdURk1vdmUodmVydGljZXMpLCBmaWxsUnVsZSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRmxvYXRSZWN0IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQorc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgUEFMOjpXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpKQogICAgICAgICByZXR1cm4gcmVjdDsKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGlubGlu
ZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbG9naWMKICAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgUEFMOjpXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpKQogICAgICAgICByZXR1cm4gcG9pbnQ7CkBAIC04NSwxNCArODUsMTQgQEAgc3Rh
dGljIGlubGluZSBGbG9hdFBvaW50IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IGwKICAgICByZXR1cm4gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb25z
dCBGbG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorc3RhdGljIGlubGlu
ZSBGbG9hdFNpemUgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
UEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1cm4gc2l6ZTsKICAgICByZXR1cm4g
c2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBl
OjpjcmVhdGVTaGFwZShjb25zdCBCYXNpY1NoYXBlJiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRT
aXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IG1hcmdp
bikKK3N0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVNoYXBlKGNvbnN0IEJhc2lj
U2hhcGUmIGJhc2ljU2hhcGUsIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBQQUw6
OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pCiB7CiAgICAgYm9vbCBob3Jp
em9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7
CiAgICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94
U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7CkBAIC0xNzMsNyArMTczLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgQmFzaWNT
aGFwZSYgYmFzaWNTaGFwZSwgY29uc3QgTGEKICAgICByZXR1cm4gc2hhcGU7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwg
ZmxvYXQgdGhyZXNob2xkLCBjb25zdCBMYXlvdXRSZWN0JiBpbWFnZVIsIGNvbnN0IExheW91dFJl
Y3QmIG1hcmdpblIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pCitzdGQ6
OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2Us
IGZsb2F0IHRocmVzaG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSLCBjb25zdCBMYXlvdXRS
ZWN0JiBtYXJnaW5SLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4p
CiB7CiAgICAgQVNTRVJUKG1hcmdpblIuaGVpZ2h0KCkgPj0gMCk7CiAKQEAgLTIzNiw3ICsyMzYs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFn
ZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShjb25zdCBS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBt
YXJnaW4pCitzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShjb25z
dCBSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IGZsb2F0IG1hcmdpbikKIHsKICAgICBBU1NFUlQocm91bmRlZFJlY3QucmVjdCgpLndpZHRoKCkg
Pj0gMCAmJiByb3VuZGVkUmVjdC5yZWN0KCkuaGVpZ2h0KCkgPj0gMCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaAppbmRleCAyYmNhN2I1MGY0MzY4OTEyY2NjN2Y4MGM4
YTU4MzE4OTE0NjQzMThmLi45Y2JmYTg0M2I5ZjNmZTdlOTFhZjc5MDM4NDY4ZjA3ZDg5YjY3ZDQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1
ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAgICAgICAg
UGF0aCBtYXJnaW5TaGFwZTsKICAgICB9OwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxT
aGFwZT4gY3JlYXRlU2hhcGUoY29uc3QgQmFzaWNTaGFwZSYsIGNvbnN0IExheW91dFNpemUmIGxv
Z2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSosIGZsb2F0IHRocmVz
aG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBtYXJn
aW5SZWN0LCBXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFNoYXBlPiBjcmVhdGVCb3hTaGFwZShjb25zdCBSb3VuZGVkUmVjdCYsIFdyaXRpbmdN
b2RlLCBmbG9hdCBtYXJnaW4pOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNy
ZWF0ZVNoYXBlKGNvbnN0IEJhc2ljU2hhcGUmLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94
U2l6ZSwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSosIGZsb2F0IHRocmVzaG9s
ZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBtYXJnaW5S
ZWN0LCBQQUw6OldyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8U2hhcGU+IGNyZWF0ZUJveFNoYXBlKGNvbnN0IFJvdW5kZWRSZWN0JiwgUEFMOjpX
cml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKIAogICAgIHZpcnR1YWwgflNoYXBlKCkgPSBkZWZh
dWx0OwogCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAobGluZVRv
cCA8IHJlY3QubWF4WSgpICYmIGxpbmVUb3AgKyBsaW5lSGVpZ2h0ID4gcmVjdC55KCkpIHx8ICgh
bGluZUhlaWdodCAmJiBsaW5lVG9wID09IHJlY3QueSgpKTsKICAgICB9CiAKLSAgICBXcml0aW5n
TW9kZSBtX3dyaXRpbmdNb2RlOworICAgIFBBTDo6V3JpdGluZ01vZGUgbV93cml0aW5nTW9kZTsK
ICAgICBmbG9hdCBtX21hcmdpbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCmluZGV4IGMxYjhjNGEzMzJiOTJlZjY4
OTBjZmZlNmQyNjc2NmZiOWFmMmQ4NmUuLjIwOTQzZjA2NjI1ODVkMWJlODUwNjRmNzAzMDI0N2E5
ZTc3OGVmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZU91dHNpZGVJbmZvLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0
IGdldFNoYXBlSW1hZ2VNYXJnaW5SZWN0KGNvbnN0IFJlbmRlckJveCYgcmVuZGVyQm94LCBjb25z
dCBMYXlvCiAgICAgcmV0dXJuIExheW91dFJlY3QobWFyZ2luQm94T3JpZ2luLCBtYXJnaW5SZWN0
U2l6ZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGVPdXRzaWRlSW5mbzo6Y3Jl
YXRlU2hhcGVGb3JJbWFnZShTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCBzaGFwZUltYWdl
VGhyZXNob2xkLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKSBjb25zdAor
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVTaGFwZUZvcklt
YWdlKFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UsIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQsIFBB
TDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IG1hcmdpbikgY29uc3QKIHsKICAgICBM
YXlvdXRTaXplIGltYWdlU2l6ZSA9IG1fcmVuZGVyZXIuY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNE
aW1lbnNpb25zKHN0eWxlSW1hZ2UsIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUsIFJlbmRlcklt
YWdlOjpTY2FsZUJ5RWZmZWN0aXZlWm9vbSk7CiAgICAgc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVy
Q29udGV4dEZvclJlbmRlcmVyKG1fcmVuZGVyZXIsIGltYWdlU2l6ZSwgbV9yZW5kZXJlci5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSk7CkBAIC0xNjksNyArMTY5LDcgQEAgY29uc3QgU2hhcGUmIFNo
YXBlT3V0c2lkZUluZm86OmNvbXB1dGVkU2hhcGUoKSBjb25zdAogICAgIEFTU0VSVChtX3JlbmRl
cmVyLmNvbnRhaW5pbmdCbG9jaygpKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmlu
Z0Jsb2NrU3R5bGUgPSBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpOwogCi0g
ICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBjb250YWluaW5nQmxvY2tTdHlsZS53cml0aW5n
TW9kZSgpOworICAgIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBjb250YWluaW5nQmxv
Y2tTdHlsZS53cml0aW5nTW9kZSgpOwogICAgIGF1dG8gbWFyZ2luID0gWyZdIHsKICAgICAgICAg
YXV0byBzaGFwZU1hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9yZW5kZXJlci5zdHlsZSgp
LnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkgPyBtX3JlbmRlcmVy
LmNvbnRhaW5pbmdCbG9jaygpLT5jb250ZW50V2lkdGgoKSA6IDBfbHUpOwogICAgICAgICByZXR1
cm4gaXNuYW4oc2hhcGVNYXJnaW4pID8gMC4wZiA6IHNoYXBlTWFyZ2luOwpAQCAtMTk5LDI2ICsx
OTksMjYgQEAgY29uc3QgU2hhcGUmIFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVkU2hhcGUoKSBj
b25zdAogICAgIHJldHVybiAqbV9zaGFwZTsKIH0KIAotc3RhdGljIGlubGluZSBMYXlvdXRVbml0
IGJvcmRlckJlZm9yZUluV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYm9yZGVyQmVm
b3JlSW5Xcml0aW5nTW9kZShjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBQQUw6OldyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKQogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpOwot
ICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
Qm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6IHJldHVybiByZW5k
ZXJlci5ib3JkZXJMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6IHJl
dHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
VG9wVG9Cb3R0b206IHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKTsKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9tKCk7
CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDogcmV0dXJuIHJlbmRlcmVy
LmJvcmRlckxlZnQoKTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiBy
ZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQmVmb3JlKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlSW5Xcml0aW5nTW9kZShj
b25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3N0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlSW5Xcml0aW5nTW9kZShj
b25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQog
ewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BU
b0JvdHRvbTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1Rv
cCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIu
Ym9yZGVyQm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0
aW5nTW9kZTo6TGVmdFRvUmlnaHQ6IHJldHVybiByZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci5wYWRkaW5nTGVmdCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiBy
ZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOwor
ICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206IHJldHVybiByZW5kZXJlci5i
b3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKTsKKyAgICBjYXNlIFBBTDo6V3JpdGlu
Z01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9tKCkgKyByZW5k
ZXJlci5wYWRkaW5nQm90dG9tKCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodDogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdMZWZ0
KCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDogcmV0dXJuIHJlbmRl
cmVyLmJvcmRlclJpZ2h0KCkgKyByZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKaW5kZXggOTQ4NDMxNzE5NDdjMDIzMDlhYjdmNGZi
MWI5N2MyNjM4ODJlZTM3MS4uZGVjNjNhNWY0YTcxNGIxNzc2YTZhMWVmZDc5MjczZDNjZGIwOTUz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNoYXBlT3V0
c2lkZUluZm8qIGluZm8oY29uc3QgUmVuZGVyQm94JiBrZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5n
ZXQoJmtleSk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNyZWF0
ZVNoYXBlRm9ySW1hZ2UoU3R5bGVJbWFnZSosIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQsIFdy
aXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gY3JlYXRlU2hhcGVGb3JJbWFnZShTdHlsZUltYWdlKiwgZmxvYXQgc2hhcGVJbWFnZVRocmVz
aG9sZCwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKSBjb25zdDsKIAogICAgIExheW91
dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRPZmZzZXQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9OaW5lUGllY2VJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05p
bmVQaWVjZUltYWdlLmgKaW5kZXggYzM5ZGVjMzM0NDEyZGQ5NTA2MGE1YTE2ZjQyZmY5NDgyYmUz
YmQ0ZS4uZGE2Y2IxMjNlMjIzM2NlZDM4ZjA3MWNmM2ExZjk5ZWQzOTgwYTAzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgKQEAgLTgyLDI0
ICs4MiwyNCBAQCBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsUGllY2UoSW1hZ2VQaWVjZSBwaWVjZSkK
ICAgICByZXR1cm4gcGllY2UgPT0gTGVmdFBpZWNlIHx8IHBpZWNlID09IFJpZ2h0UGllY2UgfHwg
cGllY2UgPT0gTWlkZGxlUGllY2U7CiB9CiAKLWlubGluZSBzdGQ6Om9wdGlvbmFsPEJveFNpZGU+
IGltYWdlUGllY2VIb3Jpem9udGFsU2lkZShJbWFnZVBpZWNlIHBpZWNlKQoraW5saW5lIHN0ZDo6
b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiBpbWFnZVBpZWNlSG9yaXpvbnRhbFNpZGUoSW1hZ2VQaWVj
ZSBwaWVjZSkKIHsKICAgICBpZiAocGllY2UgPT0gVG9wTGVmdFBpZWNlIHx8IHBpZWNlID09IFRv
cFBpZWNlIHx8IHBpZWNlID09IFRvcFJpZ2h0UGllY2UpCi0gICAgICAgIHJldHVybiBCb3hTaWRl
OjpUb3A7CisgICAgICAgIHJldHVybiBQQUw6OkJveFNpZGU6OlRvcDsKIAogICAgIGlmIChwaWVj
ZSA9PSBCb3R0b21MZWZ0UGllY2UgfHwgcGllY2UgPT0gQm90dG9tUGllY2UgfHwgcGllY2UgPT0g
Qm90dG9tUmlnaHRQaWVjZSkKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJvdHRvbTsKKyAgICAg
ICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIH0KIAotaW5saW5lIHN0ZDo6b3B0aW9uYWw8Qm94U2lkZT4gaW1hZ2VQaWVjZVZlcnRpY2Fs
U2lkZShJbWFnZVBpZWNlIHBpZWNlKQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRl
PiBpbWFnZVBpZWNlVmVydGljYWxTaWRlKEltYWdlUGllY2UgcGllY2UpCiB7CiAgICAgaWYgKHBp
ZWNlID09IFRvcExlZnRQaWVjZSB8fCBwaWVjZSA9PSBMZWZ0UGllY2UgfHwgcGllY2UgPT0gQm90
dG9tTGVmdFBpZWNlKQotICAgICAgICByZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAgICAgICAgcmV0
dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKIAogICAgIGlmIChwaWVjZSA9PSBUb3BSaWdodFBpZWNl
IHx8IHBpZWNlID09IFJpZ2h0UGllY2UgfHwgcGllY2UgPT0gQm90dG9tUmlnaHRQaWVjZSkKLSAg
ICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRl
OjpSaWdodDsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA2YjM2MzhkMWE4ZjBlMWU2
NzRhMzVmZTljZjJlM2NiNWVmNmI4ZDBhLi5iZDRlOTMzMDE1YWRjNWJmNDkxNzJjOGY4ODY2OWM1
N2E1ZGI0ZmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKQEAgLTIyNjIsMTMgKzIyNjIsMTMgQEAgQ29sb3IgUmVuZGVyU3R5bGU6OmVmZmVj
dGl2ZUFjY2VudENvbG9yKCkgY29uc3QKIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJTdHlsZTo6
Ym9yZGVyQmVmb3JlKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKLSAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyVG9wKCk7Ci0gICAgY2FzZSBX
cml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0
b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIGJvcmRlckJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAg
ICAgICAgcmV0dXJuIGJvcmRlclJpZ2h0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjI3OCwxMyArMjI3OCwxMyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyU3R5
bGU6OmJvcmRlckJlZm9yZSgpIGNvbnN0CiBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyU3R5bGU6
OmJvcmRlckFmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKLSAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7Ci0gICAgY2Fz
ZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpC
b3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIGJvcmRlclRvcCgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJSaWdodCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6
OlJpZ2h0VG9MZWZ0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CiAg
ICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjMwOCwxMyArMjMwOCwxMyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyU3R5
bGU6OmJvcmRlckVuZCgpIGNvbnN0CiBmbG9hdCBSZW5kZXJTdHlsZTo6Ym9yZGVyQmVmb3JlV2lk
dGgoKSBjb25zdAogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUoKSkgewotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9C
b3R0b206CiAgICAgICAgIHJldHVybiBib3JkZXJUb3BXaWR0aCgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9U
b3A6CiAgICAgICAgIHJldHVybiBib3JkZXJCb3R0b21XaWR0aCgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0V2lkdGgoKTsKLSAgICBjYXNlIFdyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0
OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHRXaWR0aCgpOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIzMjQsMTMgKzIzMjQsMTMgQEAgZmxvYXQgUmVuZGVyU3R5bGU6
OmJvcmRlckJlZm9yZVdpZHRoKCkgY29uc3QKIGZsb2F0IFJlbmRlclN0eWxlOjpib3JkZXJBZnRl
cldpZHRoKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tV2lkdGgoKTsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJv
dHRvbVRvVG9wOgogICAgICAgICByZXR1cm4gYm9yZGVyVG9wV2lkdGgoKTsKLSAgICBjYXNlIFdy
aXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRU
b1JpZ2h0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHRXaWR0aCgpOwotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0V2lkdGgoKTsKICAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNDEwLDIzICsyNDEwLDIzIEBAIExheW91dEJveEV4dGVu
dCBSZW5kZXJTdHlsZTo6aW1hZ2VPdXRzZXRzKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkg
Y29uc3QKICAgICB9OwogfQogCi1zdGQ6OnBhaXI8Rm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlw
aE9yaWVudGF0aW9uPiBSZW5kZXJTdHlsZTo6Zm9udEFuZEdseXBoT3JpZW50YXRpb24oKQorc3Rk
OjpwYWlyPFBBTDo6Rm9udE9yaWVudGF0aW9uLCBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+
IFJlbmRlclN0eWxlOjpmb250QW5kR2x5cGhPcmllbnRhdGlvbigpCiB7CiAgICAgLy8gRklYTUU6
IFRleHRPcmllbnRhdGlvblNpZGV3YXlzIHNob3VsZCBtYXAgdG8gc2lkZXdheXMtbGVmdCBpbiB2
ZXJ0aWNhbC1sciwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCB5ZXQuCiAKICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHsgRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsLCBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OworICAgICAgICByZXR1
cm4geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgUEFMOjpOb25DSktHbHlwaE9y
aWVudGF0aW9uOjpNaXhlZCB9OwogCiAgICAgc3dpdGNoICh0ZXh0T3JpZW50YXRpb24oKSkgewog
ICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uOjpNaXhlZDoKLSAgICAgICAgcmV0dXJuIHsgRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQgfTsKKyAg
ICAgICAgcmV0dXJuIHsgUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBQQUw6Ok5vbkNK
S0dseXBoT3JpZW50YXRpb246Ok1peGVkIH07CiAgICAgY2FzZSBUZXh0T3JpZW50YXRpb246OlVw
cmlnaHQ6Ci0gICAgICAgIHJldHVybiB7IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIE5vbkNK
S0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfTsKKyAgICAgICAgcmV0dXJuIHsgUEFMOjpGb250
T3JpZW50YXRpb246OlZlcnRpY2FsLCBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmln
aHQgfTsKICAgICBjYXNlIFRleHRPcmllbnRhdGlvbjo6U2lkZXdheXM6Ci0gICAgICAgIHJldHVy
biB7IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6
TWl4ZWQgfTsKKyAgICAgICAgcmV0dXJuIHsgUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250
YWwsIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQgfTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgRm9udE9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsLCBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OworICAg
ICAgICByZXR1cm4geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgUEFMOjpOb25D
SktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OwogICAgIH0KIH0KIApAQCAtMjcxMiw3ICsyNzEy
LDcgQEAgZmxvYXQgUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQoKSBjb25zdAogCiBib29sIFJl
bmRlclN0eWxlOjpzaG91bGRQbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgfHwgd3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ7
CisgICAgcmV0dXJuICghaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpIHx8IHdyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQ7CiB9CiAKIFZlY3RvcjxQYWludFR5cGUsIDM+IFJlbmRlclN0eWxlOjpwYWludFR5cGVz
Rm9yUGFpbnRPcmRlcihQYWludE9yZGVyIG9yZGVyKQpAQCAtMjgwOCw3ICsyODA4LDcgQEAgVXNl
ZENsZWFyIFJlbmRlclN0eWxlOjp1c2VkQ2xlYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikKICAgICBjYXNlIENsZWFyOjpJbmxpbmVTdGFydDoKICAgICBjYXNlIENsZWFyOjpJbmxpbmVF
bmQ6CiAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID0gcmVuZGVyZXIuY29u
dGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChjb250YWlu
aW5nQmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoY29u
dGFpbmluZ0Jsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAg
ICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENs
ZWFyOjpSaWdodCA6IFVzZWRDbGVhcjo6TGVmdDsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFs
dWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENsZWFyOjpMZWZ0IDogVXNlZENsZWFyOjpS
aWdodDsKICAgICB9CkBAIC0yODI5LDcgKzI4MjksNyBAQCBVc2VkRmxvYXQgUmVuZGVyU3R5bGU6
OnVzZWRGbG9hdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIGNhc2UgRmxvYXQ6
OklubGluZVN0YXJ0OgogICAgIGNhc2UgRmxvYXQ6OklubGluZUVuZDoKICAgICAgICAgYXV0byBj
b250YWluaW5nQmxvY2tEaXJlY3Rpb24gPSByZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5
bGUoKS5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0RpcmVjdGlvbiA9
PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tEaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0
ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6OlJpZ2h0IDogVXNlZEZs
b2F0OjpMZWZ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5l
U3RhcnQgPyBVc2VkRmxvYXQ6OkxlZnQgOiBVc2VkRmxvYXQ6OlJpZ2h0OwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNGQxZTc4Yjk0
OTMzMzQxNzVmODJiYzA2OWE5MmQ2Yjc0YWQ2Y2E0ZS4uZmU1YmEzOWY2MzBiN2VmMTEyMDQ2ODUz
MDUzYTcwZWQ4NThjNGVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKQEAgLTY1LDEzICs2NSwxMyBAQAogI2luY2x1ZGUgIlN0eWxlU3Vycm91bmRE
YXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVUcmFuc2Zvcm1EYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVW
aXN1YWxEYXRhLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQv
VGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgIlRvdWNoQWN0
aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCiAjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuaWNvZGVCaWRpLmg+CiAjaW5jbHVk
ZSA8d3RmL0RhdGFSZWYuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMzQ4LDcgKzM0OCw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBMZW5ndGhCb3gmIGNsaXAoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbERhdGEtPmNsaXA7IH0K
ICAgICBib29sIGhhc0NsaXAoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbERhdGEtPmhhc0NsaXA7
IH0KIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEVVbmljb2RlQmlkaT4obV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSk7IH0K
KyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFBBTDo6RVVuaWNvZGVCaWRpPihtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRp
KTsgfQogCiAgICAgQ2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDbGVh
cj4obV9ub25Jbmhlcml0ZWRGbGFncy5jbGVhcik7IH0KICAgICBzdGF0aWMgVXNlZENsZWFyIHVz
ZWRDbGVhcihjb25zdCBSZW5kZXJPYmplY3QmKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgc3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKICAgICBmbG9hdCBjb21wdXRl
ZEZvbnRTaXplKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY29tcHV0ZWRGb250UGl4ZWxTaXplKCkg
Y29uc3Q7Ci0gICAgc3RkOjpwYWlyPEZvbnRPcmllbnRhdGlvbiwgTm9uQ0pLR2x5cGhPcmllbnRh
dGlvbj4gZm9udEFuZEdseXBoT3JpZW50YXRpb24oKTsKKyAgICBzdGQ6OnBhaXI8UEFMOjpGb250
T3JpZW50YXRpb24sIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gZm9udEFuZEdseXBoT3Jp
ZW50YXRpb24oKTsKIAogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBmb250VmFyaWF0aW9uU2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS52YXJpYXRpb25TZXR0aW5n
cygpOyB9CiAgICAgRm9udFNlbGVjdGlvblZhbHVlIGZvbnRXZWlnaHQoKSBjb25zdCB7IHJldHVy
biBmb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKTsgfQpAQCAtMzk0LDggKzM5NCw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICBUZXh0Wm9vbSB0ZXh0Wm9vbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHRab29tPihtX3JhcmVJbmhlcml0ZWREYXRhLT50ZXh0Wm9vbSk7IH0KIAotICAgIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERp
cmVjdGlvbj4obV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24pOyB9Ci0gICAgYm9vbCBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9pbmhlcml0ZWRGbGFncy5k
aXJlY3Rpb24pOyB9CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KICAgICBib29s
IGhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX25vbkluaGVyaXRl
ZEZsYWdzLmhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb247IH0KIAogICAgIGNvbnN0IExlbmd0aCYg
c3BlY2lmaWVkTGluZUhlaWdodCgpIGNvbnN0OwpAQCAtNzkxLDExICs3OTEsMTEgQEAgcHVibGlj
OgogICAgIFRleHRTZWN1cml0eSB0ZXh0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0U2VjdXJpdHk+KG1fcmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0K
ICAgICBJbnB1dFNlY3VyaXR5IGlucHV0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxJbnB1dFNlY3VyaXR5PihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5pbnB1dFNlY3VyaXR5
KTsgfQogCi0gICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxXcml0aW5nTW9kZT4obV9pbmhlcml0ZWRGbGFncy53cml0aW5nTW9kZSk7IH0KLSAg
ICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KLSAgICBib29sIGlzVmVy
dGljYWxXcml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzVmVydGljYWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQotICAgIGJvb2wgaXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUoKSk7IH0KLSAgICBib29sIGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gV2ViQ29yZTo6aXNGbGlwcGVkV3JpdGluZ01vZGUod3JpdGluZ01vZGUo
KSk7IH0KKyAgICBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpXcml0aW5nTW9kZT4obV9pbmhlcml0ZWRGbGFncy53cml0aW5nTW9k
ZSk7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
UEFMOjppc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQorICAgIGJvb2wg
aXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUEFMOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KKyAgICBib29sIGlzRmxpcHBlZExpbmVzV3JpdGlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBQQUw6OmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUoKSk7IH0KKyAgICBib29sIGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gUEFMOjppc0ZsaXBwZWRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQog
CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBpbWFnZU9yaWVudGF0aW9uKCkgY29uc3Q7CiAKQEAgLTk2
Niw3ICs5NjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwKExlbmd0aCYmIHRvcCwgTGVu
Z3RoJiYgcmlnaHQsIExlbmd0aCYmIGJvdHRvbSwgTGVuZ3RoJiYgbGVmdCk7CiAgICAgdm9pZCBz
ZXRDbGlwKExlbmd0aEJveCYmIGJveCkgeyBTRVRfVkFSKG1fdmlzdWFsRGF0YSwgY2xpcCwgV1RG
TW92ZShib3gpKTsgfQogCi0gICAgdm9pZCBzZXRVbmljb2RlQmlkaShFVW5pY29kZUJpZGkgdikg
eyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRpID0gdjsgfQorICAgIHZvaWQgc2V0VW5p
Y29kZUJpZGkoUEFMOjpFVW5pY29kZUJpZGkgdikgeyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNv
ZGVCaWRpID0gdjsgfQogCiAgICAgdm9pZCBzZXRDbGVhcihDbGVhciB2KSB7IG1fbm9uSW5oZXJp
dGVkRmxhZ3MuY2xlYXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KICAgICB2b2lkIHNl
dFRhYmxlTGF5b3V0KFRhYmxlTGF5b3V0VHlwZSB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MudGFi
bGVMYXlvdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KQEAgLTk5NCw3ICs5OTQsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oVGV4dFVuZGVybGlu
ZVBvc2l0aW9uIHBvc2l0aW9uKSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFVu
ZGVybGluZVBvc2l0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pKTsgfQogICAg
IHZvaWQgc2V0VGV4dFVuZGVybGluZU9mZnNldChUZXh0VW5kZXJsaW5lT2Zmc2V0IHRleHRVbmRl
cmxpbmVPZmZzZXQpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0VW5kZXJsaW5l
T2Zmc2V0LCB0ZXh0VW5kZXJsaW5lT2Zmc2V0KTsgfQogICAgIHZvaWQgc2V0VGV4dERlY29yYXRp
b25UaGlja25lc3MoVGV4dERlY29yYXRpb25UaGlja25lc3MgdGV4dERlY29yYXRpb25UaGlja25l
c3MpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVz
cywgdGV4dERlY29yYXRpb25UaGlja25lc3MpOyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4
dERpcmVjdGlvbiB2KSB7IG1faW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHYpOyB9CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9u
IHYpIHsgbV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dik7IH0KICAgICB2b2lkIHNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oYm9vbCB2KSB7IG1f
bm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldERpcmVjdGlvbiA9IHY7IH0KICAgICB2
b2lkIHNldExpbmVIZWlnaHQoTGVuZ3RoJiYpOwogICAgIGJvb2wgc2V0Wm9vbShmbG9hdCk7CkBA
IC0xNTE5LDcgKzE1MTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rpc3BsYXlUYWJsZU9yVGFi
bGVQYXJ0KCkgY29uc3QgeyByZXR1cm4gaXNEaXNwbGF5VGFibGVPclRhYmxlUGFydChkaXNwbGF5
KCkpOyB9CiAgICAgYm9vbCBpc09yaWdpbmFsRGlzcGxheUxpc3RJdGVtVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGlzRGlzcGxheUxpc3RJdGVtVHlwZShvcmlnaW5hbERpc3BsYXkoKSk7IH0KIAotICAg
IGJvb2wgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUpOworICAgIGJvb2wgc2V0V3JpdGluZ01v
ZGUoUEFMOjpXcml0aW5nTW9kZSk7CiAKICAgICBib29sIGhhc0V4cGxpY2l0bHlTZXRXcml0aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNl
dFdyaXRpbmdNb2RlOyB9CiAgICAgdm9pZCBzZXRIYXNFeHBsaWNpdGx5U2V0V3JpdGluZ01vZGUo
Ym9vbCB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldFdyaXRpbmdNb2Rl
ID0gdjsgfQpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIENsZWFy
IGluaXRpYWxDbGVhcigpIHsgcmV0dXJuIENsZWFyOjpOb25lOyB9CiAgICAgc3RhdGljIERpc3Bs
YXlUeXBlIGluaXRpYWxEaXNwbGF5KCkgeyByZXR1cm4gRGlzcGxheVR5cGU6OklubGluZTsgfQot
ICAgIHN0YXRpYyBFVW5pY29kZUJpZGkgaW5pdGlhbFVuaWNvZGVCaWRpKCkgeyByZXR1cm4gVUJO
b3JtYWw7IH0KKyAgICBzdGF0aWMgUEFMOjpFVW5pY29kZUJpZGkgaW5pdGlhbFVuaWNvZGVCaWRp
KCkgeyByZXR1cm4gUEFMOjpVQk5vcm1hbDsgfQogICAgIHN0YXRpYyBQb3NpdGlvblR5cGUgaW5p
dGlhbFBvc2l0aW9uKCkgeyByZXR1cm4gUG9zaXRpb25UeXBlOjpTdGF0aWM7IH0KICAgICBzdGF0
aWMgVmVydGljYWxBbGlnbiBpbml0aWFsVmVydGljYWxBbGlnbigpIHsgcmV0dXJuIFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lOyB9CiAgICAgc3RhdGljIEZsb2F0IGluaXRpYWxGbG9hdGluZygpIHsg
cmV0dXJuIEZsb2F0OjpOb25lOyB9CkBAIC0xNTc3LDggKzE1NzcsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIENhcHRpb25TaWRlIGluaXRpYWxDYXB0aW9uU2lkZSgpIHsgcmV0dXJuIENhcHRpb25T
aWRlOjpUb3A7IH0KICAgICBzdGF0aWMgQ29sdW1uQXhpcyBpbml0aWFsQ29sdW1uQXhpcygpIHsg
cmV0dXJuIENvbHVtbkF4aXM6OkF1dG87IH0KICAgICBzdGF0aWMgQ29sdW1uUHJvZ3Jlc3Npb24g
aW5pdGlhbENvbHVtblByb2dyZXNzaW9uKCkgeyByZXR1cm4gQ29sdW1uUHJvZ3Jlc3Npb246Ok5v
cm1hbDsgfQotICAgIHN0YXRpYyBUZXh0RGlyZWN0aW9uIGluaXRpYWxEaXJlY3Rpb24oKSB7IHJl
dHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBzdGF0aWMgV3JpdGluZ01vZGUgaW5pdGlh
bFdyaXRpbmdNb2RlKCkgeyByZXR1cm4gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOyB9CisgICAg
c3RhdGljIFBBTDo6VGV4dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0aW9uKCkgeyByZXR1cm4gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBzdGF0aWMgUEFMOjpXcml0aW5nTW9kZSBpbml0
aWFsV3JpdGluZ01vZGUoKSB7IHJldHVybiBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTsg
fQogICAgIHN0YXRpYyBUZXh0Q29tYmluZSBpbml0aWFsVGV4dENvbWJpbmUoKSB7IHJldHVybiBU
ZXh0Q29tYmluZTo6Tm9uZTsgfQogICAgIHN0YXRpYyBUZXh0T3JpZW50YXRpb24gaW5pdGlhbFRl
eHRPcmllbnRhdGlvbigpIHsgcmV0dXJuIFRleHRPcmllbnRhdGlvbjo6TWl4ZWQ7IH0KICAgICBz
dGF0aWMgT2JqZWN0Rml0IGluaXRpYWxPYmplY3RGaXQoKSB7IHJldHVybiBPYmplY3RGaXQ6OkZp
bGw7IH0KQEAgLTE5MjUsNyArMTkyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHZl
cnRpY2FsQWxpZ24gOiA0OyAvLyBWZXJ0aWNhbEFsaWduCiAgICAgICAgIHVuc2lnbmVkIGNsZWFy
IDogMzsgLy8gQ2xlYXIKICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gOiAzOyAvLyBQb3NpdGlv
blR5cGUKLSAgICAgICAgdW5zaWduZWQgdW5pY29kZUJpZGkgOiAzOyAvLyBFVW5pY29kZUJpZGkK
KyAgICAgICAgdW5zaWduZWQgdW5pY29kZUJpZGkgOiAzOyAvLyBQQUw6OkVVbmljb2RlQmlkaQog
ICAgICAgICB1bnNpZ25lZCBmbG9hdGluZyA6IDM7IC8vIEZsb2F0CiAgICAgICAgIHVuc2lnbmVk
IHRhYmxlTGF5b3V0IDogMTsgLy8gVGFibGVMYXlvdXRUeXBlCiAKQEAgLTIzNzgsNyArMjM3OCw3
IEBAIGlubGluZSBib29sIFJlbmRlclN0eWxlOjppc0Rpc3BsYXlSZWdpb25UeXBlKCkgY29uc3QK
ICAgICAgICAgfHwgZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpMaXN0SXRlbTsKIH0KIAotaW5s
aW5lIGJvb2wgUmVuZGVyU3R5bGU6OnNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHYpCitpbmxp
bmUgYm9vbCBSZW5kZXJTdHlsZTo6c2V0V3JpdGluZ01vZGUoUEFMOjpXcml0aW5nTW9kZSB2KQog
ewogICAgIGlmICh2ID09IHdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwCmluZGV4IDUxM2Y1YWQ0YmZkOWE4OTQyMTQ0YzRhNmUwN2Y4NzAwOGYxYWZiNTIuLjBjYzQz
ZTdhYzZiNWNhNDBlNjUwMzYyZjQ4NmQ2YmI5ZjY1NjcxNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMjA5LDcg
KzIwOSw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRG
b3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlCiB7CiAgICAgLy8gQWx0ZXIgZm9udC1z
aXplIHRvIHRoZSByaWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGluZyB0aGUgZ2x5
cGhzIHRoZW1zZWx2ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBpcyBzcGVjaWZp
ZWQKICAgICBzY2FsaW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2Ny
ZWVuRm9udFNpemVTY2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKLSAgICBpZiAoIXNjYWxpbmdGYWN0
b3IgfHwgc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUoKSA9PSBUZXh0
UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uKSB7CisgICAgaWYgKCFzY2FsaW5nRmFj
dG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRSZW5kZXJpbmdNb2RlKCkgPT0gUEFM
OjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAgICAgIHNjYWxp
bmdGYWN0b3IgPSAxOwogICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjIyLDggKzIyMiw4IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5l
VGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlCiAKICAgICAvLyBTVkcgY29udHJvbHMgaXRzIG93biBnbHlwaCBvcmllbnRhdGlvbiwgc28g
ZG9uJ3QgYWxsb3cgd3JpdGluZy1tb2RlCiAgICAgLy8gdG8gYWZmZWN0IGl0LgotICAgIGlmIChm
b250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSAhPSBGb250T3JpZW50YXRpb246Okhvcml6b250
YWwpCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRp
b246Okhvcml6b250YWwpOworICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSAh
PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldE9yaWVudGF0aW9uKFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKTsKIAog
ICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIDAs
IDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVudCgpLmZvbnRTZWxl
Y3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwCmluZGV4IDhmNTIzNjBjYTZhMWNmNmE5ZDJmM2M3ZDc5NTNkZWFiNGJkMmNkZjUu
LmI0YzlhZTdjYzg0NWY5ZWEyOGFhYmZmYmM4ODczNWFkMGVkNTNkOGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtMzg0LDcg
KzM4NCw3IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNWR1RlCiAgICAgVGV4dFJ1biBydW4oU3RyaW5n
VmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKGZyYWdtZW50LmNoYXJhY3Rlck9mZnNl
dCwgZnJhZ21lbnQubGVuZ3RoKQogICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBvbmx5IHJl
bGV2YW50IHdpdGggYWxsb3dUYWJzPXRydWUgKi8KICAgICAgICAgICAgICAgICAsIDAgLyogcGFk
ZGluZywgb25seSByZWxldmFudCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxldmFudCBmb3Ig
U1ZHICovCi0gICAgICAgICAgICAgICAgLCBBbGxvd1JpZ2h0RXhwYW5zaW9uCisgICAgICAgICAg
ICAgICAgLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24KICAgICAgICAgICAgICAgICAsIGRpcmVj
dGlvbigpCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpW
aXN1YWwgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKaW5kZXggMzkwOTFlZjhhZjNkOWIzMDQ4
ZGM3YjJiMmNmNDgyMTE5OTY1ZmM1Yi4uN2I1ODc4NTdjNTE5NzNkZjViYjBhMzM4ZGRjY2ZhNjk3
ZDQzNDIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0
cmljcy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgVGV4dFJ1biBTVkdUZXh0TWV0cmljczo6Y29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25lZCBwb3MKICAgICBU
ZXh0UnVuIHJ1bihTdHJpbmdWaWV3KHRleHQudGV4dCgpKS5zdWJzdHJpbmcocG9zaXRpb24sIGxl
bmd0aCkKICAgICAgICAgICAgICAgICAsIDAgLyogeFBvcywgb25seSByZWxldmFudCB3aXRoIGFs
bG93VGFicz10cnVlICovCiAgICAgICAgICAgICAgICAgLCAwIC8qIHBhZGRpbmcsIG9ubHkgcmVs
ZXZhbnQgZm9yIGp1c3RpZmllZCB0ZXh0LCBub3QgcmVsZXZhbnQgZm9yIFNWRyAqLwotICAgICAg
ICAgICAgICAgICwgQWxsb3dSaWdodEV4cGFuc2lvbgorICAgICAgICAgICAgICAgICwgUEFMOjpB
bGxvd1JpZ2h0RXhwYW5zaW9uCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQog
ICAgICAgICAgICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJl
Y3Rpb25hbE92ZXJyaWRlICovKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuY3BwCmluZGV4IGZlZmE0ODVjYWZiZjRiYmM4NGJlOTVmNDU5YTc5OWUyNzY4
ZDY1ZjUuLjczNmIyMGRhNDUyNTc5MTIwY2U3YzJiMGQxYzI1NjQ5NzA5NjA1YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTU0MSw3ICs1
NDEsNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzLCBib29sIGluYwogICAgICAgICBpZiAoaXM8SFRNTEVsZW1l
bnQ+KHN0eWxlZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKICAgICAgICAg
ICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzdHlsZWRFbGVt
ZW50KS5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwotICAgICAg
ICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
OworICAgICAgICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVm
dERlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAg
IGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25PcmlnaW46
OkF1dGhvcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Bh
Z2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVj
dG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0Li4y
OGIyYzQ3ODgxOTU4OTNmNDY2YzIwNmRkMTRjZTVlNGM3N2Q0YjAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25z
dCBTdHlsZVJ1bGVQYWdlCiAKIGJvb2wgUGFnZVJ1bGVDb2xsZWN0b3I6OmlzTGVmdFBhZ2UoaW50
IHBhZ2VJbmRleCkgY29uc3QKIHsKLSAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IG1fcm9vdERp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQg
PSBtX3Jvb3REaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgcmV0dXJu
IChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oCmluZGV4IGU0NTJjNzQ0YTYwNGI0ZTI3
NDExN2Y1NmE3ZGM5MTAxNmY3YjhlNjUuLjVlNGNmMGI1ZDBjOTBmNTVmM2E0MGVhODE5MDViZjdi
ZDhmY2Y2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVj
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuaApAQCAt
MzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgU3R5bGUgewogCiBjbGFzcyBQYWdlUnVsZUNvbGxlY3Rv
ciB7CiBwdWJsaWM6Ci0gICAgUGFnZVJ1bGVDb2xsZWN0b3IoU2NvcGVSdWxlU2V0cyYgcnVsZVNl
dHMsIFRleHREaXJlY3Rpb24gcm9vdERpcmVjdGlvbikKKyAgICBQYWdlUnVsZUNvbGxlY3RvcihT
Y29wZVJ1bGVTZXRzJiBydWxlU2V0cywgUEFMOjpUZXh0RGlyZWN0aW9uIHJvb3REaXJlY3Rpb24p
CiAgICAgICAgIDogbV9ydWxlU2V0cyhydWxlU2V0cykKICAgICAgICAgLCBtX3Jvb3REaXJlY3Rp
b24ocm9vdERpcmVjdGlvbikKICAgICB7IH0KQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRj
aGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBib29sIGlzTGVm
dFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogCiAgICAg
U2NvcGVSdWxlU2V0cyYgbV9ydWxlU2V0czsKLSAgICBUZXh0RGlyZWN0aW9uIG1fcm9vdERpcmVj
dGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gbV9yb290RGlyZWN0aW9uOwogCiAgICAgTWF0
Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
UHJvcGVydHlDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUu
aAppbmRleCA1MWQyMTc2MWM3NTAzM2NhMzM2YzY3ZmE4OTk1ODdhYTAyNjU5NWRmLi40MzY1ZDM5
YTBmZDM1ZTdiMzA0Mzc1NDI5NjE3MjM2OWJmNjk3YmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Q
cm9wZXJ0eUNhc2NhZGUuaApAQCAtNDIsOCArNDIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBJbmNs
dWRlZFByb3BlcnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKIAogICAgIHN0cnVjdCBEaXJl
Y3Rpb24gewotICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247Ci0gICAgICAgIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERp
cmVjdGlvbjsKKyAgICAgICAgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZTsKICAgICB9Owog
CiAgICAgUHJvcGVydHlDYXNjYWRlKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVsLCBJ
bmNsdWRlZFByb3BlcnRpZXMsIERpcmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRq
dXN0ZXIuY3BwCmluZGV4IGY4NTQyMGIxNTU4Nzk5OThhODExNjkzMDU3ODMzODY1OTU0OTIxZWYu
LjQwNTlmYmRlMWIwY2ViYzlkZmYwMmZiODU0YWU2MjBhZDVlNTM3NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC0zNDQsMTAgKzM0NCwxMCBAQCB2b2lkIEFkanVz
dGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdXNlckFn
ZW50QXBwZWFyYW5jZQogICAgICAgICAgICAgc3R5bGUuc2V0V3JpdGluZ01vZGUobV9wYXJlbnRT
dHlsZS53cml0aW5nTW9kZSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qg
c3VwcG9ydCBibG9jay1mbG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0dGlu
ZwotICAgICAgICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gV3JpdGlu
Z01vZGU6OlRvcFRvQm90dG9tLgorICAgICAgICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5n
IG90aGVyIHRoYW4gUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20uCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOCAtIEZsZXhpYmxlIGJv
eCBzdXBwb3J0LgotICAgICAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b20gJiYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Qm94IHx8
IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQm94KSkKLSAgICAgICAgICAg
IHN0eWxlLnNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSk7CisgICAgICAg
IGlmIChzdHlsZS53cml0aW5nTW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9t
ICYmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCB8fCBzdHlsZS5kaXNwbGF5
KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCkpCisgICAgICAgICAgICBzdHlsZS5zZXRXcml0
aW5nTW9kZShQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSk7CiAKICAgICAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1kaXNwbGF5LyN0cmFuc2Zvcm1hdGlvbnMKICAgICAgICAg
Ly8gIkEgcGFyZW50IHdpdGggYSBncmlkIG9yIGZsZXggZGlzcGxheSB2YWx1ZSBibG9ja2lmaWVz
IHRoZSBib3jigJlzIGRpc3BsYXkgdHlwZS4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDA4Zjc5MDQ0NTNhOGEwYTY5YzU4MTJmN2Q2NDMzNzRl
YjlmMjQ1YmEuLmFmOWUwYjYyMmY1YTMwZDY1NTE0MDRkZWZkNDQ5MGQ5ZGFjYzBkMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBAIC0xNTQsNyAr
MTU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNvbnZlcnRHbHlw
aE9yaWVudGF0aW9uKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGlj
IEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oQnVpbGRlclN0
YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGg+
IGNvbnZlcnRMaW5lSGVpZ2h0KEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiwgZmxvYXQg
bXVsdGlwbGllciA9IDEuZik7Ci0gICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29udmVydEZvbnRT
eW50aGVzaXMoQnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgUEFM
OjpGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0
IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIEZvbnRQYWxldHRlIGNvbnZlcnRGb250UGFsZXR0ZShC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIAogICAgIHN0YXRpYyBCcmVha0Jl
dHdlZW4gY29udmVydFBhZ2VCcmVha0JldHdlZW4oQnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFs
dWUmKTsKQEAgLTE1NjQsMjUgKzE1NjQsMjUgQEAgaW5saW5lIHN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
PiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChCdWlsZGVyU3RhdGUmIGIKICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1pbmxpbmUgRm9udFN5bnRoZXNpcyBCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0Rm9udFN5bnRoZXNpcyhCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgUEFMOjpGb250U3ludGhlc2lzIEJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRGb250U3ludGhlc2lzKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBB
U1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgcmV0dXJuIEZvbnRTeW50aGVzaXNOb25lOworICAgICAgICBy
ZXR1cm4gUEFMOjpGb250U3ludGhlc2lzTm9uZTsKICAgICB9CiAKLSAgICBGb250U3ludGhlc2lz
IHJlc3VsdCA9IEZvbnRTeW50aGVzaXNOb25lOworICAgIFBBTDo6Rm9udFN5bnRoZXNpcyByZXN1
bHQgPSBQQUw6OkZvbnRTeW50aGVzaXNOb25lOwogICAgIEFTU0VSVChpczxDU1NWYWx1ZUxpc3Q+
KHZhbHVlKSk7CiAgICAgZm9yIChjb25zdCBDU1NWYWx1ZSYgdiA6IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpKSB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHYpLnZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlV2VpZ2h0OgotICAgICAg
ICAgICAgcmVzdWx0IHw9IEZvbnRTeW50aGVzaXNXZWlnaHQ7CisgICAgICAgICAgICByZXN1bHQg
fD0gUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTVmFsdWVTdHlsZToKLSAgICAgICAgICAgIHJlc3VsdCB8PSBGb250U3ludGhlc2lz
U3R5bGU7CisgICAgICAgICAgICByZXN1bHQgfD0gUEFMOjpGb250U3ludGhlc2lzU3R5bGU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwczoKLSAgICAg
ICAgICAgIHJlc3VsdCB8PSBGb250U3ludGhlc2lzU21hbGxDYXBzOworICAgICAgICAgICAgcmVz
dWx0IHw9IFBBTDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2FwczsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDllZTNhNDI3Nzg3MzJj
NWVhM2RiNWNiNWI2NGMwM2EyMjRmOWYxYzkuLjhhNWVjYWFiZjZhNDg3MTBiMmQ3ZjAwNmYxNmVl
Yzg5OWEzODg2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5o
CkBAIC0xNjI5LDEwICsxNjI5LDEwIEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKEJ1aWxkZXJTdGF0ZSYgYnVpbGRlCiBpbmxpbmUg
dm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJlcyhCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1
aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudENvbW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlh
bnRMaWdhdHVyZXM6Ok5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRIaXN0
b3JpY2FsTGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25MaWdh
dHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEhpc3Rvcmlj
YWxMaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKFBBTDo6Rm9udFZhcmlh
bnRMaWdhdHVyZXM6Ok5vcm1hbCk7CiAgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCkBAIC0xNjYxLDExICsxNjYxLDExIEBA
IGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJp
YyhCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTCiBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxGb250VmFyaWFudE51bWVyaWMoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
CiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKEZvbnRWYXJp
YW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dE51bWVyaWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCk7Ci0gICAg
Zm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb246Ok5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1l
cmljT3JkaW5hbChGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZvbnRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvOjpOb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVt
ZXJpY0ZpZ3VyZShQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51
bWVyaWNGcmFjdGlvbihQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwoUEFMOjpGb250VmFy
aWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86
Ok5vcm1hbCk7CiAgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogfQogCkBAIC0xNjkzLDkgKzE2OTMsOSBAQCBpbmxpbmUgdm9pZCBC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudEVhc3RBc2lhbihCdWlsZGVyU3Rh
dGUmIGJ1aWxkZQogaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZh
cmlhbnRFYXN0QXNpYW4oQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KEZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RB
c2lhbldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eTo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aChQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6Ok5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNp
YW5SdWJ5KFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpOwogICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0K
IApAQCAtMTc5MSw3ICsxNzkxLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUZvbnRTdHlsZShCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmEKICAgICBhdXRv
JiBmb250U3R5bGVWYWx1ZSA9IGRvd25jYXN0PENTU0ZvbnRTdHlsZVZhbHVlPih2YWx1ZSk7CiAg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Rm9udFN0eWxlRnJvbVZhbHVlKGZvbnRTdHlsZVZhbHVlKSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldEZvbnRTdHlsZUF4aXMoZm9udFN0eWxlVmFsdWUuZm9udFN0eWxlVmFsdWUtPnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUl0YWxpYyA/IEZvbnRTdHlsZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlz
OjpzbG50KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhmb250U3R5bGVW
YWx1ZS5mb250U3R5bGVWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSXRhbGljID8gUEFMOjpG
b250U3R5bGVBeGlzOjppdGFsIDogUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KTsKICAgICBidWls
ZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAppbmRleCA5MGM0
N2RiNGM2NmJlZTE5MWYyNzAzMzllNWUzZTVmOWY1YWE5ZjlmLi4yZGRmYThiZjlmNzNhM2E1MDRk
NjJlZmY5ZDUzOWQ5ODU1OWU4MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuY3BwCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBCdWlsZGVyU3RhdGU6OmFkanVz
dFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCkKIAogICAgIG1fc3R5bGUuc2V0VGV4dEFsaWdu
KFRleHRBbGlnbk1vZGU6OkNlbnRlcik7CiAgICAgaWYgKG1fc3R5bGUuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKLSAgICAgICAgbV9zdHlsZS5zZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZTo6
TGVmdFRvUmlnaHQpOworICAgICAgICBtX3N0eWxlLnNldFdyaXRpbmdNb2RlKFBBTDo6V3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0KTsKIH0KIAogdm9pZCBCdWlsZGVyU3RhdGU6OnVwZGF0ZUZvbnQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKaW5kZXggYzUxZjJhZWFk
NDdhYTRiNmRjYzk5ZTEwNzYwMzVjNDY3OWIyYTM3MC4uMTFiOGFjMmFmNDY0ZTQ4NzcwNGE2MjM2
YTRjMGUxNTY5NDNiMjZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0
ZS5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZvbnRTaXplKEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKICAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFpvb20oZik7IH0KICAgICB2b2lkIHNldEVm
ZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldEVmZmVjdGl2
ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUp
OyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9
CiAgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRh
dGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3Jp
ZW50YXRpb24pOyB9CiAKICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERpcnR5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1
bWVudC5jcHAKaW5kZXggMzMxODliZDY0Y2FjYmVkZjkzNjhkMzRmYTlmYjU2NGQ1OGJkMWYzNi4u
ODY2NWEzYWZmMzlkZmNmMGY2ZjdiZGNiOGNhMGFlM2YzOTkxZWFlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcApAQCAtMTExLDcgKzEx
MSw3IEBAIFJlbmRlclN0eWxlIHJlc29sdmVGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9j
dW1lbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZExvY2FsZShkb2N1bWVudC5j
b250ZW50TGFuZ3VhZ2UoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUo
c2V0dGluZ3MuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldE9u
ZUZhbWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFs
bG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6Ok5vKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMoc2V0dGluZ3Muc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IFBBTDo6
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9u
dHM6Ok5vKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlm
aWVyKENTU1ZhbHVlTWVkaXVtKTsKICAgICBpbnQgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChD
U1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAKaW5kZXggNDI3ZGQ4ODU0OGJlZjY0ZjYyYzZl
OWZmY2JiYjE5MjEyNzUxZjQwOS4uMDcyMTcxZGVkZDcwNzNhODc3ZDJhMzc2MGQ1ZTc5M2NlYmQ5
YjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJh
dy5jcHAKQEAgLTEyNiwzMCArMTI2LDMwIEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJl
c29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBmb250RGVzY3JpcHRpb24uc2V0
Rm9udFN0eWxlQXhpcygoZm9udFJhdy5zdHlsZSAmJiBmb250UmF3LnN0eWxlLT5zdHlsZSA9PSBD
U1NWYWx1ZUl0YWxpYykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6c2xu
dCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoKGZvbnRSYXcuc3R5bGUg
JiYgZm9udFJhdy5zdHlsZS0+c3R5bGUgPT0gQ1NTVmFsdWVJdGFsaWMpID8gUEFMOjpGb250U3R5
bGVBeGlzOjppdGFsIDogUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KTsKIAogICAgIGlmIChmb250
UmF3LnZhcmlhbnRDYXBzKSB7CiAgICAgICAgIHN3aXRjaCAoKmZvbnRSYXcudmFyaWFudENhcHMp
IHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6Ok5vcm1hbCk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6Ok5v
cm1hbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2Fw
czoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFu
dENhcHM6OlNtYWxsKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2Fw
cyhQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVBbGxTbWFsbENhcHM6Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OkFs
bFNtYWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlUGV0aXRl
Q2FwczoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFy
aWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6Ci0gICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOworICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKFBBTDo6Rm9udFZhcmlhbnRD
YXBzOjpBbGxQZXRpdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWVVbmljYXNlOgotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZv
bnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OlVuaWNhc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlRpdGxpbmcpOwor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpUaXRsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDBlYTc4ZWFkYWJlOTE1MTlkODU1ZGMzZDkxMjk4NTY5ZjI4Njlk
ZWIuLjExZTZhODlmZGIzOTE5Yjg1MzdjY2JhZDlkMDJjNzU0ODVkYmE5MTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NTYsNyArNDU2LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudChjb25z
dCBFbGVtZW50KiBlbGUKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXpl
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCksIHN0eWxlLmdldCgpLCBkb2N1bWVudCgpKSk7CiAKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGlu
Z3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiAKICAgICBzdHlsZS0+
Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBmMWE3ZTIyMTEyMGU3MWE5
Njk5MWIzMjMzYTM4NTQzMDMxODlkNWIwLi4yNDBmNGQ3ZTA1NWZjMWQ1MWNjMzY0MTU2NTU2OGZl
YzFiMTc2YzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIFdlYkNvcmU6OkVkaXRpbmdCZWhh
dmlvclR5cGUgbV9vcmlnaW5hbEVkaXRpbmdCZWhhdmlvcjsKICAgICAgICAgV2ViQ29yZTo6U3Rv
cmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5OwogICAgICAgICBXZWJD
b3JlOjpVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5IG1fdXNlckludGVyZmFjZURpcmVjdGlv
blBvbGljeTsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBtX3N5c3RlbUxheW91dERpcmVjdGlvbjsK
KyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIG1fc3lzdGVtTGF5b3V0RGlyZWN0aW9uOwogICAg
ICAgICBXZWJDb3JlOjpQREZJbWFnZUNhY2hpbmdQb2xpY3kgbV9wZGZJbWFnZUNhY2hpbmdQb2xp
Y3k7CiAgICAgICAgIFdlYkNvcmU6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBtX2ZvcmNlZENv
bG9yc0FyZUludmVydGVkQWNjZXNzaWJpbGl0eVZhbHVlOwogICAgICAgICBXZWJDb3JlOjpGb3Jj
ZWRBY2Nlc3NpYmlsaXR5VmFsdWUgbV9mb3JjZWREaXNwbGF5SXNNb25vY2hyb21lQWNjZXNzaWJp
bGl0eVZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDQyZTljMGQ2
ODU4ZWM5MWMzMTljYjIzMzRjZTBiMjIxNTMzMWZhNmMuLmMwZDI3NjhkMDhlNjc0MWJkYjFkYTFk
NzY5MGUyMzYzYjgwYWY5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTI1OTksOCArMjU5OSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZSwgdW5zaWduZWQgbG9jYXRpCiAgICAgaWYgKCFjb250
ZXh0RG9jdW1lbnQoKSB8fCAhY29udGV4dERvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgcmVzdWx0LnR5cGUg
PSBUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOworICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJl
c3VsdDsKKyAgICByZXN1bHQudHlwZSA9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6Tm9uZTsKICAg
ICByZXN1bHQucmFuZ2UgPSB7IGxvY2F0aW9uLCBsZW5ndGggfTsKICAgICByZXN1bHQucmVwbGFj
ZW1lbnQgPSBjYW5kaWRhdGU7CiAgICAgY29udGV4dERvY3VtZW50KCktPmVkaXRvcigpLmhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlKHJlc3VsdCk7CkBAIC0zOTEwLDcgKzM5MTAsNyBAQCBTdHJpbmcg
SW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsK
ICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdDsKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKCZlbGVt
ZW50KTsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uOwogICAgIHJldHVybiByZXN1bHQudGl0bGUoZGlyZWN0aW9uKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXJJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZXMuaAppbmRleCBmNzQ5MGY2YzU2YzM2MDljMTFkNTBkYjUxZTA5MzY1
YTE2NjY4MmM2Li42NGFmNDBiZDdhODM3OGNiZjcxZjRjOTNjMzY0OTQ2MmEyY2VkOTkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNl
cklubGluZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZXMuaApAQCAtMzAsMTMgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotaW5saW5lIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcm
IHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgY29uc3VtZWRDaGFyYWN0ZXJzKQoraW5saW5lIHZvaWQg
dW5jb25zdW1lQ2hhcmFjdGVycyhQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdC
dWlsZGVyJiBjb25zdW1lZENoYXJhY3RlcnMpCiB7CiAgICAgc291cmNlLnB1c2hCYWNrKGNvbnN1
bWVkQ2hhcmFjdGVycy50b1N0cmluZygpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFBhcnNl
ckZ1bmN0aW9ucz4KLWJvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5v
dWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCitib29sIGNv
bnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgU3Ry
aW5nQnVpbGRlciYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywg
VUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAgQVNTRVJUKCFhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlciB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnIicg
fHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJ1wnJyB8fCBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3RlciA9PSAnPicpOwogICAgIEFTU0VSVCghbm90RW5vdWdoQ2hhcmFjdGVycyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4
IDdlNmJmNGFhMDM2NTFhZDYxNzlhMmJiNDk3ZjBhYjMwOGZjZWE1NjYuLjhhNGJhNjljODE3ZDRj
MmJiODA1YmJlM2ZhYTQzMTAzMTU4MmY2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6Y2xlYXJDdXJyZW50Tm9kZVN0YWNrKCkKICAgICB9CiB9CiAKLXZvaWQg
WE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydChTZWdtZW50ZWRTdHJpbmcmJikKK3ZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6Omluc2VydChQQUw6OlNlZ21lbnRlZFN0cmluZyYmKQogewogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlci5oCmluZGV4IDFjZGE5N2MxNzY1MDZkOTVkNmIyMTFlMTIxMTZmZTI2ODdmMWRi
M2MuLjY0MDhiMDI5ZTIyZDBkZmNkY2MyY2NiYWY5M2U4ZThiZTc1MWQyNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTI3LDEwICsyNywx
MCBAQAogI2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1ZGUg
IlBlbmRpbmdTY3JpcHRDbGllbnQuaCIKICNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJYTUxFcnJvcnMu
aCIKICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50JiwgRnJhbWVWaWV3KiA9IG51bGxwdHIp
OwogICAgIFhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0b21T
dHJpbmcsIEF0b21TdHJpbmc+JiYsIGNvbnN0IEF0b21TdHJpbmcmLCBQYXJzZXJDb250ZW50UG9s
aWN5KTsKIAotICAgIHZvaWQgaW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYmKSBmaW5hbDsKKyAgICB2
b2lkIGluc2VydChQQUw6OlNlZ21lbnRlZFN0cmluZyYmKSBmaW5hbDsKICAgICB2b2lkIGFwcGVu
ZChSZWZQdHI8U3RyaW5nSW1wbD4mJikgZmluYWw7CiAgICAgdm9pZCBmaW5pc2goKSBmaW5hbDsK
ICAgICB2b2lkIHN0b3BQYXJzaW5nKCkgZmluYWw7CkBAIC0xNTEsNyArMTUxLDcgQEAgcHJpdmF0
ZToKIAogICAgIEZyYW1lVmlldyogbV92aWV3IHsgbnVsbHB0ciB9OwogCi0gICAgU2VnbWVudGVk
U3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07CisgICAgUEFMOjpTZWdtZW50ZWRT
dHJpbmcgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybTsKIAogICAgIFJlZlB0cjxYTUxQYXJz
ZXJDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdDYWxsYmFj
a3M+IG1fcGVuZGluZ0NhbGxiYWNrczsKQEAgLTE4Myw3ICsxODMsNyBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0cmluZz4gbV9wcmVmaXhUb05hbWVzcGFjZU1hcDsK
ICAgICBBdG9tU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKIAotICAgIFNlZ21lbnRlZFN0
cmluZyBtX3BlbmRpbmdTcmM7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9wZW5kaW5nU3Jj
OwogfTsKIAogI2lmIEVOQUJMRShYU0xUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445787</attachid>
            <date>2021-12-02 16:28:46 -0800</date>
            <delta_ts>2021-12-08 18:24:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233697-20211202162845.patch</filename>
            <type>text/plain</type>
            <size>1432928</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiNmQyZjJmYmNkN2I3
ODU1MzIxY2U1YjgwMWQ1YzJmYWNiMzhmNC4uNDg1ZDcyMDc2ZTQ0MTljYThjNGNlMjFlZmI4YWRh
MDVkNjVmMDQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1MiBAQAorMjAyMS0xMi0wMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgYSBm
ZXcgbW9yZSBmaWxlcyBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dCB0byBXZWJDb3JlL1BBTC90
ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2
OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmg6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRCb3VuZGFy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzTWlzc3BlbGxpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZSBj
b25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1l
bnRQYXRoIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3Bl
bGxpbmcpOgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6Cisg
ICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRMaWdhdHVyZXNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFy
aWFudExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlh
bnRQb3NpdGlvblByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlhbnRD
YXBzUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFyaWFudE51bWVyaWNQ
cm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50QWx0ZXJuYXRlc1By
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlhbnRFYXN0QXNpYW5Qcm9w
ZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZv
bnRTdHlsZUZyb21TdHlsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50RnJv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRTeW50aGVzaXNGcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFNob3J0aGFuZFZhbHVlRm9yU2VsZWN0aW9uUHJvcGVydGllcyk6
CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAqIGNzcy9D
U1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6ZW5z
dXJlTG9jYWxGb250RmFjZXNGb3JGYW1pbHlSZWdpc3RlcmVkKToKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2
ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkVVbmljb2RlQmlkaSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6Oldy
aXRpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpv
cGVyYXRvciBQQUw6Oktlcm5pbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtb290aGluZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtYWxsQ2Fw
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3Ig
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmlt
aXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkZvbnRWYXJp
YW50Q2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgUEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udE9wdGljYWxTaXppbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmlj
b2RlQmlkaSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVW
YWx1ZTo6b3BlcmF0b3IgVGV4dERpcmVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgV3JpdGluZ01vZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEtl
cm5pbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFs
dWU6Om9wZXJhdG9yIEZvbnRTbW9vdGhpbmdNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250U21hbGxDYXBzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRv
ciBUZXh0UmVuZGVyaW5nTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFZhcmlhbnRQb3NpdGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9u
dFZhcmlhbnRDYXBzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFyaWFudEFsdGVybmF0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnRPcHRp
Y2FsU2l6aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHkuaDoK
KyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5nZXMpOgorICAgICAgICAqIGNzcy9Gb250
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c3R5bGUgY29uc3QpOgorICAg
ICAgICAqIGNzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250U3R5bGVLZXl3b3JkKToKKyAgICAgICAgKiBjc3MvRm9udFZhcmlhbnRCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RGb250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlRm9udFZhcmlhbnQpOgorICAgICAgICAqIGNzcy9Gb250VmFyaWFudEJ1aWxkZXIuaDoKKyAg
ICAgICAgKiBjc3MvbWFrZXByb3AucGw6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIu
aDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVGb250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgICogZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OmFkamFjZW50U2lkZXNGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveERlY29yYXRpb25EYXRhOjpoYXNCb3JkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6Ym9yZGVy
T2JzY3VyZXNCYWNrZ3JvdW5kRWRnZSBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25EYXRhLmg6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Y29sb3JzTWF0Y2hBdENvcm5lciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjb2xvck5l
ZWRzQW50aUFsaWFzQXRDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OmNhbGN1
bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9y
ZGVyUGFpbnRlcjo6am9pblJlcXVpcmVzTWl0cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHln
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJh
d0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OnBhaW50VHJhbnNsdWNlbnRCb3JkZXJT
aWRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpw
YWludEJvcmRlcnMgY29uc3QpOgorICAgICAgICAqIGRvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFy
c2VyLmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRh
dGVUaXRsZUZyb21UaXRsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondy
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aXRsZVdpdGhEaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsQWxpZ25tZW50Rm9y
SW5saW5lRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsQWxpZ25tZW50Rm9y
QmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20v
UG9zaXRpb24uaDoKKyAgICAgICAgKiBkb20vUmF3RGF0YURvY3VtZW50UGFyc2VyLmg6CisgICAg
ICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRU
b0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcv
RGljdGF0aW9uQWx0ZXJuYXRpdmUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFy
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpp
c0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0ZvcndhcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dGV4dFNlbGVjdGlvbkludGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmRpZFN1Y2NlZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxDaGVja1JlcXVlc3Q6OnNldENoZWNrZXJBbmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
OjpkaWRDaGVja1N1Y2NlZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRD
aGVja0NhbmNlbCk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6bGFzdFJlcXVlc3RJZGVudGlmaWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6bGFzdFByb2Nlc3NlZElkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpbmRHcmFtbWF0aWNhbEVycm9ycyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5k
TWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6
c3VicmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpm
aW5kTWlzc3BlbGxlZFdvcmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kVW5ncmFtbWF0
aWNhbFBocmFzZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVy
OjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OmNoZWNraW5nUmFuZ2VNYXRjaGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNDaGVja2luZ1JhbmdlQ292ZXJlZEJ5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdSYW5nZUNv
dmVycyBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OmlzV29yZEVuZE1hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yRWFjaE1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OnJhbmdlRm9yTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZENsb3Nlc3RQ
bGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBsYWluVGV4dCk6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBv
c2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDoKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXN1YWxX
b3JkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdWZm
aXhMZW5ndGhGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVmaXhMZW5ndGhGb3JSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFdvcmRCb3VuZGFyeSk6
CisgICAgICAgIChXZWJDb3JlOjplbmRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
cHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0V29y
ZFBvc2l0aW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdEJvdW5kYXJ5T2ZMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0Qm91bmRhcnlPZkxpbmUpOgorICAgICAgICAqIGVk
aXRpbmcvVmlzaWJsZVVuaXRzLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudElu
UmFuZ2UpOgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6RGF0ZVRpbWVGb3JtYXRW
YWxpZGF0b3I6OnZpc2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpEYXRlVGltZUZvcm1hdFZhbGlkYXRvcjo6dmFsaWRhdGVGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXR1cERhdGVUaW1lQ2hv
b3NlclBhcmFtZXRlcnMpOgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
Lmg6CisgICAgICAgICogaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6YWRq
dXN0SW5uZXJUZXh0U3R5bGUgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpcmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1lYXN1cmVUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5h
bCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Zm9u
dFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjptZWFzdXJlVGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVudGl0eVBhcnNlcjo6Y29uc3VtZU5hbWVkRW50aXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVIVE1MRW50aXR5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MRW50aXR5UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OmFwcGVuZFRvRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dFN0cmVhbTo6aW5zZXJ0QXRDdXJyZW50SW5zZXJ0aW9u
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjptYXJrRW5kT2ZGaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dFN0cmVhbTo6Y3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0U3RyZWFtOjpzcGxpdEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0U3RyZWFtOjptZXJnZUZyb20pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OmFwcGVuZFRvRW5k
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU291cmNlVHJhY2tlcjo6c3RhcnRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlVHJhY2tlcjo6ZW5kVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VU
cmFja2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpidWZmZXJBU0NJSUNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpidWZmZXJDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRva2VuaXplcjo6ZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmVtaXRFbmRPZkZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVG9rZW5pemVyOjpjb21taXRUb1BhcnRpYWxFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRva2VuaXplcjo6Y29tbWl0VG9Db21wbGV0ZUVuZFRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tl
bik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjpwZWVrKToKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjphZHZhbmNlUGFzdE5vbk5ld2xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OnByb2Nlc3NOZXh0SW5w
dXRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6
OmlzQXRFbmRPZkZpbGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgICogaHRtbC90
cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFRv
a2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlQW5kRW1pdFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5pemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAgKiBodG1s
L3RyYWNrL1dlYlZUVFRva2VuaXplci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
dXNlZFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUNvbnRlbnRCcmVha2VyOjp0cnlCcmVha2luZ1RleHRSdW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6d29yZEJyZWFrQmVoYXZp
b3IgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUl0ZW1zQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmJ1aWxkQmlk
aVBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1zQnVpbGRl
cjo6YnJlYWtBbmRDb21wdXRlQmlkaUxldmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW1zQnVpbGRlcjo6aGFuZGxlSW5saW5lQm94U3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveEVuZCk6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGx5UnVuRXhwYW5zaW9uKToKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6aW5saW5lRGlyZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lu
bGluZURpc3BsYXlCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS90ZXh0L1RleHRVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFV0
aWw6OmZhbGxiYWNrRm9udHNGb3JSdW4pOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9J
bmxpbmVJdGVyYXRvckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJv
eDo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAg
ICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3Zl
cmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9y
U3R5bGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnRpdGxlIGNv
bnN0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwOgorICAgICAgICAqIGxv
YWRlci9FbXB0eUNsaWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlF
ZGl0b3JDbGllbnQ6OkVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogbG9hZGVy
L0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIGxv
YWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6SGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJlbnRJdGVtVGl0bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjppbml0aWFsaXplSXRlbSk6Cisg
ICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmg6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZEZvbnQuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZTo6Z2V0VG9vbFRpcCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
V2l0aFNvZnRTcGFjZXMpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnJvb3RNYXJnaW4gY29uc3QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy55YW1sOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3NCYXNl
Lmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmF4ZXNGbGlwcGVkRm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSk6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlOjptYWluRnJhbWVDYW5SdWJiZXJCYW5kT25TaWRlKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnNjcm9sbFBvc2l0aW9uSXNOb3RSdWJiZXJiYW5kaW5nRWRnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bp
bm5lZE9uU2lkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjpzaG91bGRSdWJiZXJCYW5kT25TaWRlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpib3hTaWRlRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhCb3gu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVN0eWxlOjp0ZXh0RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9S
ZWN0RWRnZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVjdEVkZ2VzOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RF
ZGdlczo6dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6cmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpib3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVk
Z2VzOjpsZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlY3RFZGdlczo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdl
czo6cmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpib3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlY3RFZGdlczo6c2V0QXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2Vz
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRSaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OnNldEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWN0RWRnZXM6OnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpiZWZvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjphZnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWN0RWRnZXM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YmVmb3JlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlY3RFZGdlczo6YWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVk
Z2VzOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OmVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OnNldEJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWN0RWRnZXM6OnNldEFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdl
czo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRFbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjppc1Bpbm5lZE9uU2lkZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRPblNpZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnRhcmdldFNpZGVGb3JTY3JvbGxE
ZWx0YSk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL0RyYWdJbWFnZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0lt
YWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFu
Y2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFN5bnRoZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpj
b2xsZWN0Q29tcGxleFRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmFwcGx5VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb25LZXk6Om1ha2VGbGFnc0tleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRo
Rm9yU2ltcGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZTo6cmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNTbWFs
bENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnJlbmRlcmluZ01v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoVmFyaWFudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWR2YW5jZWRUZXh0UmVuZGVy
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Y29tcHV0ZUVu
YWJsZUtlcm5pbmcgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6a2VybmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmb250U21vb3RoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldEtlcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6c2V0Rm9udFNtb290aGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU21hbGxDYXBzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxLZXJuaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxGb250
U21vb3RoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omlu
aXRpYWxUZXh0UmVuZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjppbml0aWFsRm9udFN5bnRoZXNpcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsVmFyaWFudFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxWYXJpYW50Q2Fwcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsVmFyaWFudEFsdGVy
bmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlh
bE9wdGljYWxTaXppbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250
czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERl
c2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnRleHRSZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6b3JpZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpub25DSktHbHlw
aE9yaWVudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
d2lkdGhWYXJpYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
Zm9udFN5bnRoZXNpcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnZhcmlhbnRDb21tb25MaWdhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjp2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudENvbnRleHR1
YWxBbHRlcm5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
dmFyaWFudFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
Ojp2YXJpYW50TnVtZXJpY0ZpZ3VyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnZhcmlhbnROdW1lcmljU3BhY2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1lcmljRnJhY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY09yZGluYWwgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFu
dEFsdGVybmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2
YXJpYW50RWFzdEFzaWFuVmFyaWFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5XaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5SdWJ5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudFNldHRpbmdzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6b3B0aWNhbFNpemluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZvbnRTdHlsZUF4aXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRG
b250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFJlbmRl
cmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVu
ZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9yaWVu
dGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Tm9uQ0pLR2x5
cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldEZvbnRT
eW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50
Q29tbW9uTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0
VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDYXBzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudE51bWVyaWNGaWd1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY1NwYWNp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJp
Y0ZyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFu
dE51bWVyaWNPcmRpbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0
VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3Jp
cHRpb246OnNldFZhcmlhbnRBbHRlcm5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNj
cmlwdGlvbjo6c2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFzaWFuUnVieSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9wdGljYWxTaXppbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRGb250U3R5bGVBeGlzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpkZWNvZGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6d2lkdGhWYXJpYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OnRleHRSZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBo
aWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFw
cGVkUmVjdHNGb3JPdXRsaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJ1bjo6VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
OjpleHBhbnNpb25CZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpk
aXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6cnRsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46Omx0ciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UnVuOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6V2lkdGhJ
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphcHBseUluaXRpYWxB
ZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpjYWxjdWxhdGVBZGRpdGlvbmFs
V2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGZWF0dXJlU2V0dGluZ3NG
cm9tVmFyaWFudHMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZVBsYXRmb3JtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6Okluc3Rh
bGxlZEZvbnQ6Okluc3RhbGxlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNl
OjpGb250RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1G
b250TG9va3VwV2l0aEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2l0aEZhbWlseVNw
ZWNpYWxDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpsb29rdXBGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
YWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZvbnRGb3JJbnN0YWxsZWRGb250cyk6CisgICAgICAgIChXZWJDb3JlOjppc0ZvbnRNYXRjaGlu
Z1VzZXJJbnN0YWxsZWRGb250RmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YWRkQXR0cmli
dXRlc0ZvcldlYkZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZEZvbnRNYW5kYXRv
cnlBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNj
cmlwdGlvbkNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnRDYXNjYWRlTGlz
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRl
eHQ6OmNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhh
dmlvcik6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6c3lz
dGVtRm9udFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQ6OmNhc2NhZGVMaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
VmVydGljYWxUZXh0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2
YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhl
c2lzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlcml2YXRpdmVGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6RHJhd0dseXBocyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeSk6CisgICAgICAgICogcGxhdGZvcm0v
aW9zL1NlbGVjdGlvbkdlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9t
ZXRyeTo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21l
dHJ5OjpzZXREaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRSdWJiZXJCYW5kT25TaWRl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjphZmZlY3RlZFNpZGVPbkRvbWluYW50QXhpcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxkUnViYmVy
QmFuZE9uU2lkZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2Fs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN0cmluZ0J1aWxkZXI6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRGaWVsZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9CaWRpUnVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlSdW46OkJpZGlSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6dGFrZU5leHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9CaWRpUnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjpuZXh0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQm9yZGVyRWRnZS5oOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZsYWdG
b3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVzRWRnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdubWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
bGluZUdyb3VwOjpCYXNlbGluZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VsaW5lR3Jv
dXA6OmlzT3Bwb3NpdGVCbG9ja0Zsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZWxp
bmVHcm91cDo6aXNPcnRob2dvbmFsQmxvY2tGbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VsaW5lR3JvdXA6OmlzQ29tcGF0aWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlbGluZUNvbnRleHQ6OmZpbmRDb21wYXRpYmxlU2hhcmVkR3JvdXApOgorICAgICAgICAqIHJl
bmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRC
YXNlbGluZUFsaWdubWVudDo6c2V0QmxvY2tGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzcGVsbGlu
Z1Rvb2xUaXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVu
Y2F0ZWQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lFbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lFbGxpcHNpc0Jv
eDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnNlbGVjdGlv
blJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50
U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVCb3g6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVCb3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUlubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjplbWJlZENoYXJGcm9tRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpub3Rp
ZnlPYnNlcnZlcldpbGxFeGl0T2JqZWN0KToKKyAgICAgICAgKFBBTDo6SXNvbGF0ZVRyYWNrZXI6
OmVtYmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50
SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNJc29sYXRlZElubGluZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0Q29udGFpbmluZ0lzb2xhdGVXaXRo
aW5Sb290KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om51bWJlck9mSXNvbGF0ZUFuY2Vz
dG9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphZGRQbGFjZWhvbGRlclJ1bkZvcklz
b2xhdGVkSW5saW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2Vy
OjpJc29sYXRlVHJhY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJh
Y2tlcjo6ZW50ZXJJc29sYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVU
cmFja2VyOjpleGl0SXNvbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6aW5Jc29sYXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklz
b2xhdGVUcmFja2VyOjplbWJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250
aW51ZVBhc3RFbmRJbnRlcm5hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5l
VGV4dEJveDo6ZXhwYW5zaW9uQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29uc3RydWN0TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RXhwYW5zaW9uQmVoYXZpb3IpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvclNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6aGFuZGxl
VHJhaWxpbmdTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JT
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVC
b3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojps
YXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxp
bmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lMaW5lTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6Y2hpbGRSZW1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0Jp
ZGlTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6
c2V0TGluZUJyZWFrSW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFkanVzdEJvcmRlckJveFJlY3RGb3JQYWludGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRSZWN0VG9DbGlwT3V0RnJvbUJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Ym9yZGVyVG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpib3JkZXJMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpib3JkZXJCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmJvcmRlclJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZEZsaXBCZWZvcmVBZnRlck1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENv
cm5lcik6CisgICAgICAgIChXZWJDb3JlOjpjb2xvcnNNYXRjaEF0Q29ybmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcik6CisgICAgICAgIChXZWJDb3Jl
Ojp3aWxsQmVPdmVyZHJhd24pOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKToKKyAgICAgICAgKFdlYkNvcmU6OmpvaW5SZXF1aXJlc01pdHJlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T25lQm9yZGVyU2lkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjYWxjdWxhdGVTaWRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXJTaWRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0Jh
Y2tncm91bmRFZGdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpib3JkZXJPYnNjdXJlc0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmlu
ZVRleHRJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3g6OmFwcGx5TGluZUNsYW1wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXRhaWxzTWFya2VyOjpvcmllbnRh
dGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpwYWludE91dGxpbmUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6aXNMZWZ0VG9SaWdodEZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZUJvcmRlckJlZm9yZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9yZGVy
QWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsb3dB
d2FyZVBhZGRpbmdCZWZvcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGli
bGVCb3g6OmZsb3dBd2FyZVBhZGRpbmdBZnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQgY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudGVkRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYWdtZW50ZWRGbG93Ojp1cGRhdGVGcmFnbWVudHNGcmFnbWVudGVkRmxvd1BvcnRpb25S
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
YWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxPcmlnaW4pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y29tcHV0
ZU1hcmtlclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpkaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQgY29uc3QpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6
OmNsaWVudFBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0
OjpwYWludENvbHVtblJ1bGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25H
ZW9tZXRyaWVzSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xsYXBzZWRCb3JkZXJzOjphZGRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjpwYWludFJvd0dyb3VwQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6b2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRlckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1heFdvcmRGcmFnbWVudFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3Mp
OgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL0JyZWFraW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0
OjpoYW5kbGVCUik6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91
dE9mRmxvd1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVFbXB0eUlubGluZSk6CisgICAgICAgIChXZWJDb3JlOjp0cnlIeXBoZW5hdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAq
IHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmFpbGluZ09iamVjdHM6OnVwZGF0ZVdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbnNGb3JU
cmFpbGluZ0JveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjptaXJyb3JJZk5lZWRlZCBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGh5
c2ljYWxSZWN0VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUG9pbnRUb0xv
Z2ljYWwpOgorICAgICAgICAoV2ViQ29yZTo6cGh5c2ljYWxTaXplVG9Mb2dpY2FsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZUJv
eFNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlT3V0c2lkZUluZm86OmNyZWF0ZVNoYXBlRm9ySW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OmJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
TmluZVBpZWNlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlUGllY2VIb3Jpem9udGFs
U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVBpZWNlVmVydGljYWxTaWRlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OmJvcmRlckJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6Ym9yZGVyQWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmJvcmRlckJlZm9yZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpib3JkZXJBZnRlcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpmb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6c2hvdWxkUGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dXNlZENsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjp1c2VkRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpkaXJlY3Rpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OndyaXRpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0hvcml6b250YWxXcml0aW5nTW9kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aXNWZXJ0aWNhbFdyaXRpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0ZsaXBwZWRMaW5lc1dy
aXRpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6c2V0VW5pY29kZUJpZGkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldERp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbFVuaWNvZGVC
aWRpKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbml0aWFsRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbml0aWFsV3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAqIHN0eWxlL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpFbGVtZW50UnVsZUNv
bGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjppc0xl
ZnRQYWdlIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjpQYWdlUnVsZUNvbGxlY3Rv
cik6CisgICAgICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgICogc3R5bGUv
U3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFk
anVzdCBjb25zdCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50
aGVzaXMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TGln
YXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxGb250VmFyaWFudE51bWVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjphZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyU3RhdGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZv
ckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAgICAgICog
c3R5bGUvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2
ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQgY29uc3QpOgorICAgICAgICAqIHht
bC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6dW5jb25zdW1lQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ2hh
cmFjdGVyUmVmZXJlbmNlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQpOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAyMS0xMS0zMCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIHRoZSB0
aW1lc3RhbXAgZm9yIHNjcm9sbGluZyB0aHJlYWQgYW5pbWF0aW9ucyB0aHJvdWdoIGFsbCB0aGUg
c2VydmljZVNjcm9sbEFuaW1hdGlvbigpIGNhbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCBhYTQ0
NzQ4YzU2NmNiZTc2NWUwZWE2YzlhYjBjN2JhMDA5Y2I4MjFkLi5iNzk5ZDYzNzg5MzA0NDE3NWQz
YzIxODdkMjFmOWU3NmMyMjUwZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBA
QAorMjAyMS0xMi0wMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgYSBmZXcgbW9yZSBmaWxlcyBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dCB0byBXZWJDb3JlL1BBTC90ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzM2OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBhbC90ZXh0L0JpZGlDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L0JpZGlDb250
ZXh0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmguCisgICAgICAgICogcGFsL3RleHQvQmlkaVJlc29sdmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oLgorICAgICAgICAoUEFM
OjpEZXJpdmVkQ2xhc3M+OjpjcmVhdGVCaWRpUnVuc0ZvckxpbmUpOgorICAgICAgICAqIHBhbC90
ZXh0L0JpZGlSdW5MaXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0JpZGlSdW5MaXN0LmguCisgICAgICAgIChQQUw6OkJpZGlSdW5MaXN0PFJ1bj46OnJldmVy
c2VSdW5zKToKKyAgICAgICAgKiBwYWwvdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMu
aC4KKyAgICAgICAgKiBwYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5nZS5oLgorICAgICAgICAqIHBhbC90ZXh0
L0RhdGVUaW1lRm9ybWF0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwLgorICAgICAgICAoUEFMOjpEYXRlVGltZUZvcm1hdDo6
cGFyc2UpOgorICAgICAgICAqIHBhbC90ZXh0L0RhdGVUaW1lRm9ybWF0Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmguCisgICAgICAg
ICogcGFsL3RleHQvRm9udFJlbmRlcmluZ01vZGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvRm9udFJlbmRlcmluZ01vZGUuaC4KKyAgICAgICAgKiBwYWwvdGV4
dC9IeXBoZW5hdGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9IeXBoZW5hdGlvbi5oLgorICAgICAgICAqIHBhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAuCisgICAgICAgIChQQUw6Omxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgpOgorICAgICAg
ICAqIHBhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L1NlZ21lbnRlZFN0
cmluZy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50
ZWRTdHJpbmcuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rp
b24uaC4KKyAgICAgICAgKiBwYWwvdGV4dC9TdWZmaXhUcmVlLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N1ZmZpeFRyZWUuaC4KKyAgICAgICAgKFBBTDo6QVND
SUlDb2RlYm9vazo6Y29kZVdvcmQpOgorICAgICAgICAqIHBhbC90ZXh0L1RleHRCb3VuZGFyaWVz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5k
YXJpZXMuY3BwLgorICAgICAgICAoUEFMOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAg
ICAqIHBhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmguCisgICAgICAgIChQQUw6OnJlcXVpcmVz
Q29udGV4dEZvcldvcmRCb3VuZGFyeSk6CisgICAgICAgICogcGFsL3RleHQvVGV4dENoZWNraW5n
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2lu
Zy5oLgorICAgICAgICAqIHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oLgorICAgICAgICAqIHBh
bC90ZXh0L1RleHRGbGFncy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RmxhZ3MuaC4KKyAgICAgICAgKFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5nczo6ZGVj
b2RlKToKKyAgICAgICAgKFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmRlY29kZSk6
CisgICAgICAgIChQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlczo6ZGVjb2RlKToKKyAgICAg
ICAgKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmRlY29kZSk6CisgICAgICAgICog
cGFsL3RleHQvVW5pY29kZUJpZGkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVW5pY29kZUJpZGkuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9Xcml0aW5nTW9kZS5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5o
LgorICAgICAgICAqIHBhbC90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcC4KKyAgICAg
ICAgKiBwYWwvdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbS4KKyAgICAgICAgKFBB
TDo6ZmluZENvbXBsZXhXb3JkQm91bmRhcnkpOgorICAgICAgICAoUEFMOjpmaW5kTmV4dFdvcmRG
cm9tSW5kZXgpOgorICAgICAgICAqIHBhbC90ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW06IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q2hlY2tpbmdN
YWMubW0uCisKIDIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhlc2l6ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAppbmRl
eCA2NTM5MTUyZTk4YzVhYWM4ODg3NTFlOGEyYWIxOTQ3YmFiODIyMzAyLi5iYWVjODY4MTQ4ODEx
MGNlYjQ0NDZiYTA2YTYyMzVkNDNlZmFlYzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCkBAIC0zNyw4ICszNyw4IEBACiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25EaXJlY3Rpb24u
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSAiV3JpdGlu
Z01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Myw3ICs3Myw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBTdHJpbmcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAgICAg
Y29uc3QgVVJMJiBpY29uKCkgY29uc3QgeyByZXR1cm4gbV9pY29uOyB9CiAKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IERpcmVjdGlv
bjo6UnRsID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9u
ID09IERpcmVjdGlvbjo6UnRsID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUjsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaENsaWNr
RXZlbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGJjMzVkOGM2MWJiMTBhYjlhNjZmZTgwZmFmYmUyYmIzZGYyNWZlOGYuLjQ3NjZiNjhmNzQ0
ZTdkYjFmMGUwOWRhOGNjNTJlNmJhZWI5MWVhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNiw2ICsxMzYsMTQgQEAKIAkJ
MUMzNkM1MkYyNzQzMDExQTAwNkRBNEMxIC8qIFdlYkdQVURvd25jYXN0Q29udmVydFRvQmFja2lu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDMzZDNTJEMjc0MzAxMUEwMDZEQTRDMSAvKiBXZWJHUFVEb3duY2FzdENvbnZlcnRUb0JhY2tp
bmdDb250ZXh0LmggKi87IH07CiAJCTFDNDg3NkQ4MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3
NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKIAkJMUM0ODc2RDkxRjhE
N0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmggKi87
IH07CisJCTFDNUM1ODE4Mjc1Nzc0RjAwMDNCNTQwRCAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MEEyNzU3
NzRENzAwM0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi87IH07CisJCTFDNUM1ODE5Mjc1
Nzc0RjAwMDNCNTQwRCAvKiBRdW90ZWRQcmludGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MDUyNzU3NzRDRjAwM0I1NDBEIC8qIFF1
b3RlZFByaW50YWJsZS5jcHAgKi87IH07CisJCTFDNUM1ODFBMjc1Nzc0RjAwMDNCNTQwRCAvKiBC
aWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyogQmlkaUNvbnRleHQuY3BwICovOyB9Owor
CQkxQzVDNTgxQjI3NTc3NEYwMDAzQjU0MEQgLyogRGF0ZVRpbWVGb3JtYXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MTQyNzU3NzRFQTAw
M0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmNwcCAqLzsgfTsKKwkJMUM1QzU4MUMyNzU3NzRGMDAw
M0I1NDBEIC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1ODBEMjc1Nzc0REQwMDNCNTQwRCAvKiBUZXh0Qm91bmRh
cmllcy5jcHAgKi87IH07CisJCTFDNUM1ODIyMjc1NzdGMjkwMDNCNTQwRCAvKiBUZXh0Qm91bmRh
cmllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
NUM1ODIxMjc1NzdGMjgwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLzsgfTsKKwkJMUM1
QzU4MjYyNzU3OTkzRTAwM0I1NDBEIC8qIFRleHRDaGVja2luZ01hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1ODI1Mjc1Nzk5M0UwMDNCNTQw
RCAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi87IH07CisJCTFDNUM1ODI3Mjc1N0E1RUUwMDNCNTQw
RCAvKiBIeXBoZW5hdGlvbkNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNUM1ODFGMjc1NzdDN0YwMDNCNTQwRCAvKiBIeXBoZW5hdGlvbkNGLmNw
cCAqLzsgfTsKIAkJMUM3N0M4QzkyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExpbmsu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM3N0M4
QzcyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExpbmsuY3BwICovOyB9OwogCQkxQzc3
QzhDRTI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzc3QzhDRDI1RDdBNEEzMDA2MzVFMEMgLyog
T1RTVkdUYWJsZS5jcHAgKi87IH07CiAJCTFDQzNBQ0U4MjJCRDdFQzUwMEYzNjBGMCAvKiBNZXRh
bFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUND
M0FDRTcyMkJEN0VCODAwRjM2MEYwIC8qIE1ldGFsU1BJLmggKi87IH07CkBAIC01MzQsNiArNTQy
LDMyIEBACiAJCTFDMzZDNTJEMjc0MzAxMUEwMDZEQTRDMSAvKiBXZWJHUFVEb3duY2FzdENvbnZl
cnRUb0JhY2tpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVURvd25jYXN0Q29udmVy
dFRvQmFja2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2
RDYxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9n
Z2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDAyNzU3NzRDOTAwM0I1NDBEIC8qIEJpZGlDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwMjI3NTc3NENBMDAzQjU0MEQgLyog
QmlkaVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUmVz
b2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDMyNzU3NzRDQzAw
M0I1NDBEIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRSZW5kZXJp
bmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODA0Mjc1Nzc0Q0Qw
MDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dEJvdW5kYXJpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1
QzU4MDUyNzU3NzRDRjAwM0I1NDBEIC8qIFF1b3RlZFByaW50YWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdW90ZWRQcmludGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyogQmlkaUNvbnRl
eHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpZGlDb250ZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDcyNzU3NzREMjAwM0I1
NDBEIC8qIFRleHRGbGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dEZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODA4Mjc1Nzc0RDQw
MDNCNTQwRCAvKiBCaWRpUnVuTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCaWRpUnVuTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwOTI3
NTc3NEQ1MDAzQjU0MEQgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGF0ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM1QzU4MEEyNzU3NzRENzAwM0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MEIyNzU3NzREOTAwM0I1NDBEIC8qIENo
YXJhY3RlclByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hh
cmFjdGVyUHJvcGVydGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgw
QzI3NTc3NERCMDAzQjU0MEQgLyogU2VnbWVudGVkU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUM1QzU4MEQyNzU3NzRERDAwM0I1NDBEIC8qIFRleHRCb3VuZGFyaWVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MEYyNzU3NzRFMDAwM0I1NDBEIC8q
IFRleHRDaGVja2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hl
Y2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTAyNzU3NzRFMjAw
M0I1NDBEIC8qIFVuaWNvZGVCaWRpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVuaWNvZGVCaWRpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODExMjc1
Nzc0RTQwMDNCNTQwRCAvKiBTdWZmaXhUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN1ZmZpeFRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4
MTIyNzU3NzRFNjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEh5cGhlbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDNUM1ODEzMjc1Nzc0RTgwMDNCNTQwRCAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTQyNzU3NzRFQTAwM0I1NDBEIC8qIERhdGVU
aW1lRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVU
aW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTUyNzU3
NzRFQzAwM0I1NDBEIC8qIFF1b3RlZFByaW50YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBRdW90ZWRQcmludGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM1QzU4MTYyNzU3NzRFRTAwM0I1NDBEIC8qIFRleHREaXJlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVD
NTgxNzI3NTc3NEVGMDAzQjU0MEQgLyogV3JpdGluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV3JpdGluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM1QzU4MUYyNzU3N0M3RjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSHlwaGVuYXRpb25DRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDNUM1ODIxMjc1NzdGMjgwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MjQyNzU3OTVFNDAwM0I1NDBEIC8qIENo
YXJhY3RlclJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoYXJhY3Rl
clJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODI1Mjc1Nzk5M0Uw
MDNCNTQwRCAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0
Q2hlY2tpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjdDRUEyMUUz
MkVFMjYwMEY4MEYyRSAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvcmVUZXh0U29mdExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzc3QzhDODI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGluay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb3JlVGV4dFNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTU5LDYgKzExOTMsMTQgQEAKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFDNUM1ODFFMjc1NzdDNTcwMDNCNTQwRCAvKiBjZiAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUM1QzU4MUYy
NzU3N0M3RjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovLAorCQkJKTsKKwkJCXBhdGgg
PSBjZjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTFDQzVFM0MxMjczNzQ1
N0QwMDZGNkZGNCAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC0xMzM2LDEwICsxMzc4LDM0IEBACiAJCUEzMEQ0MTFEMUYwREQwQUMwMEI3
MTk1NCAvKiB0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkxQzVDNTgxRTI3NTc3QzU3MDAzQjU0MEQgLyogY2YgKi8sCiAJCQkJQTMwRDQxMjMxRjBE
RDEwNTAwQjcxOTU0IC8qIG1hYyAqLywKKwkJCQkxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyog
QmlkaUNvbnRleHQuY3BwICovLAorCQkJCTFDNUM1ODAwMjc1Nzc0QzkwMDNCNTQwRCAvKiBCaWRp
Q29udGV4dC5oICovLAorCQkJCTFDNUM1ODAyMjc1Nzc0Q0EwMDNCNTQwRCAvKiBCaWRpUmVzb2x2
ZXIuaCAqLywKKwkJCQkxQzVDNTgwODI3NTc3NEQ0MDAzQjU0MEQgLyogQmlkaVJ1bkxpc3QuaCAq
LywKKwkJCQkxQzVDNTgwQjI3NTc3NEQ5MDAzQjU0MEQgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5o
ICovLAorCQkJCTFDNUM1ODI0Mjc1Nzk1RTQwMDNCNTQwRCAvKiBDaGFyYWN0ZXJSYW5nZS5oICov
LAorCQkJCTFDNUM1ODE0Mjc1Nzc0RUEwMDNCNTQwRCAvKiBEYXRlVGltZUZvcm1hdC5jcHAgKi8s
CisJCQkJMUM1QzU4MDkyNzU3NzRENTAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmggKi8sCisJ
CQkJMUM1QzU4MDMyNzU3NzRDQzAwM0I1NDBEIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8sCisJ
CQkJMUM1QzU4MTIyNzU3NzRFNjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uLmggKi8sCiAJCQkJQTMw
RDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5nLmNwcCAqLywKIAkJCQlBMzBENDExRTFG
MEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywKKwkJCQkxQzVDNTgwNTI3NTc3NENGMDAz
QjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmNwcCAqLywKKwkJCQkxQzVDNTgxNTI3NTc3NEVDMDAz
QjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmggKi8sCisJCQkJMUM1QzU4MEEyNzU3NzRENzAwM0I1
NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8sCisJCQkJMUM1QzU4MEMyNzU3NzREQjAwM0I1
NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5oICovLAorCQkJCTFDNUM1ODEzMjc1Nzc0RTgwMDNCNTQw
RCAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8sCisJCQkJMUM1QzU4MTEyNzU3NzRFNDAwM0I1
NDBEIC8qIFN1ZmZpeFRyZWUuaCAqLywKKwkJCQkxQzVDNTgwRDI3NTc3NEREMDAzQjU0MEQgLyog
VGV4dEJvdW5kYXJpZXMuY3BwICovLAorCQkJCTFDNUM1ODA0Mjc1Nzc0Q0QwMDNCNTQwRCAvKiBU
ZXh0Qm91bmRhcmllcy5oICovLAorCQkJCTFDNUM1ODBGMjc1Nzc0RTAwMDNCNTQwRCAvKiBUZXh0
Q2hlY2tpbmcuaCAqLywKKwkJCQkxQzVDNTgxNjI3NTc3NEVFMDAzQjU0MEQgLyogVGV4dERpcmVj
dGlvbi5oICovLAorCQkJCTFDNUM1ODA3Mjc1Nzc0RDIwMDNCNTQwRCAvKiBUZXh0RmxhZ3MuaCAq
LywKIAkJCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5o
ICovLAorCQkJCTFDNUM1ODEwMjc1Nzc0RTIwMDNCNTQwRCAvKiBVbmljb2RlQmlkaS5oICovLAor
CQkJCTFDNUM1ODE3Mjc1Nzc0RUYwMDNCNTQwRCAvKiBXcml0aW5nTW9kZS5oICovLAogCQkJKTsK
IAkJCXBhdGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEzNDgsNiAr
MTQxNCw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUEzMEQ0
MTI0MUYwREQxMkQwMEI3MTk1NCAvKiBLaWxsUmluZ01hYy5tbSAqLywKKwkJCQkxQzVDNTgyMTI3
NTc3RjI4MDAzQjU0MEQgLyogVGV4dEJvdW5kYXJpZXMubW0gKi8sCisJCQkJMUM1QzU4MjUyNzU3
OTkzRTAwM0I1NDBEIC8qIFRleHRDaGVja2luZ01hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0g
bWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE3ODMsNiArMTg1MSw3IEBACiAJ
CQkJNTdGRDMxOEEyMkIzNTkzRTAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE2RTk5NTMyM0RBRTZCRTAwRTg3MUNCIC8qIEF1ZGlvVG9vbGJveFNvZnRM
aW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3N0U4N0IxMjI2QTQ2MDIwMEEyQUZGMCAvKiBB
VkZvdW5kYXRpb25Tb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODFBMjc1Nzc0
RjAwMDNCNTQwRCAvKiBCaWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRDJCNDEz
NDI1RjA1RTM1MDBBM0Y3MEEgLyogQ2xvY2tHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBDRjk5Q0E4MUY3Mzg0MzcwMDdFRTc5MyAvKiBDb3JlTWVkaWFTb2Z0TGluay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQzc3QzhDOTI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGlu
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3OTAsMTAgKzE4NTksMTIgQEAKIAkJCQk1N0YxQzkw
QTI1RENGMENGMDBFOEY2RUEgLyogQ3J5cHRvS2l0UHJpdmF0ZVNvZnRMaW5rLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjREREQwMUIyNjREQzY5RTAwRUYxQjkxIC8qIERhdGFEZXRlY3RvcnNDb3Jl
U29mdExpbmsubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNEUwODc1QzI2NkFDQTUzMDAwRjgxNEEg
LyogRGF0YURldGVjdG9yc1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUM1QzU4MUIy
NzU3NzRGMDAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUExMTc1QjU4MUY2QjQ3MDUwMEM0QjlGMCAvKiBEZWZhdWx0U2VhcmNoUHJvdmlkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjQ0MjkxNjQxRkE1MjY3MDAwMkNDOTNFIC8qIEZpbGVTaXplRm9y
bWF0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY0NDI5MTY4MUZBNTI3MDUwMDJDQzkzRSAv
KiBGaWxlU2l6ZUZvcm1hdHRlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMwMjJFRkUy
MkNGRThFMTAwNkRGMDFCIC8qIEd1bnppcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzVDNTgy
NzI3NTdBNUVFMDAzQjU0MEQgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMzBENDEyMjFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTMwRDQxMjUxRjBERDEyRDAwQjcxOTU0IC8qIEtpbGxSaW5nTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUM0ODc2RDgxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xODA5LDggKzE4ODAsMTAgQEAKIAkJCQlBMTE3NUI0RjFGNkIzMzczMDBD
NEI5RjAgLyogUG9wdXBNZW51Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ1MEZDOUYyMUY1RjYw
MjAwNERGQTU2IC8qIFF1aWNrTG9va1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjRD
ODVBNEUyNjU4NTUxQTAwNUI4OUNDIC8qIFF1aWNrTG9va1VJU29mdExpbmsubW0gaW4gU291cmNl
cyAqLywKKwkJCQkxQzVDNTgxOTI3NTc3NEYwMDAzQjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3MUMwMDM3MjcwN0VERjAwMEQwMjdDNyAvKiBSZXBsYXlL
aXRTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0OTc0RUE0MjY1RUVBMjIwMEI0OUI4
QyAvKiBSZXZlYWxTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODE4Mjc1Nzc0
RjAwMDNCNTQwRCAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NjZDREMxRjQ2MkQ2QTAwOUU2RUU5IC8qIFNlc3Npb25JRC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBM0FCNkU1MjFGM0QxREM1MDA5QzE0QjEgLyogU2xlZXBEaXNhYmxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBM0FCNkU2MDFGM0QxRTM5MDA5QzE0QjEgLyogU2xlZXBEaXNhYmxlckNvY29h
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgyMCw2ICsxODkzLDkgQEAKIAkJCQlBM0FCNkU1NzFG
M0QxRERCMDA5QzE0QjEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0FCNkU2NTFGM0QyMTdGMDA5QzE0QjEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTA3OUQxRDk4MjY5NTBERDcwMDg4MzU3NyAvKiBTeXN0ZW1T
dGF0dXNTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODFDMjc1Nzc0RjAwMDNC
NTQwRCAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzVDNTgyMjI3
NTc3RjI5MDAzQjU0MEQgLyogVGV4dEJvdW5kYXJpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQkx
QzVDNTgyNjI3NTc5OTNFMDAzQjU0MEQgLyogVGV4dENoZWNraW5nTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkUxMzQyQ0QyMTVBQTEwQTAwNzE5OUQyIC8qIFVJS2l0U29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQkwNzYxMURCNzI0M0ZBNUJGMDBEODA3MDQgLyogVXNhZ2VUcmFja2lu
Z1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUYzNDQyNDhBNkEwMDAwMjJENURF
IC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU2MzEyNzA5ZjQz
MmM0MTU3NTBlODE4ODljYjAxNWY2YmU5NDI4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisKKyNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250
ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4g
eworICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OworICAgIHZvaWQqIHBhcmVudDsKK307CisK
K0NPTVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4dCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNC
aWRpQ29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9zdGF5X3NtYWxsKTsKKworaW5saW5lIEJp
ZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBC
aWRpQ29udGV4dCogcGFyZW50KQorICAgIDogbV9sZXZlbChsZXZlbCkKKyAgICAsIG1fZGlyZWN0
aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fb3ZlcnJpZGUob3ZlcnJpZGUpCisgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2lubGluZSBSZWY8Qmlk
aUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNhY2hlZCh1bnNpZ25lZCBjaGFyIGxldmVs
LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdT
b3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBzb3VyY2UsIHBh
cmVudCkpOworfQorCitSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGUodW5zaWdu
ZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBC
aWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKK3sKKyAgICBB
U1NFUlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRf
VE9fUklHSFQpKTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHJldHVybiBjcmVhdGVVbmNh
Y2hlZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNlLCBwYXJlbnQpOworCisgICAg
QVNTRVJUKGxldmVsIDw9IDEpOworICAgIGlmICghbGV2ZWwpIHsKKyAgICAgICAgaWYgKCFvdmVy
cmlkZSkgeworICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29u
dGV4dD4+IGx0ckNvbnRleHQ7CisgICAgICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgbHRy
Q29udGV4dE9uY2VGbGFnOworICAgICAgICAgICAgc3RkOjpjYWxsX29uY2UobHRyQ29udGV4dE9u
Y2VGbGFnLCBbJl0oKSB7CisgICAgICAgICAgICAgICAgbHRyQ29udGV4dC5nZXQoKSA9IGNyZWF0
ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFsc2UsIEZyb21TdHlsZU9yRE9NLCAwKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuICpsdHJDb250ZXh0LmdldCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29u
dGV4dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKKyAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOworICAgICAgICBzdGQ6OmNhbGxfb25jZShsdHJP
dmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgeworICAgICAgICAgICAgbHRyT3ZlcnJpZGVD
b250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZUX1RPX1JJR0hULCB0cnVlLCBG
cm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKmx0ck92ZXJy
aWRlQ29udGV4dC5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAoIW92ZXJyaWRlKSB7CisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxDb250ZXh0Owor
ICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsQ29udGV4dE9uY2VGbGFnOworICAgICAg
ICBzdGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgICAg
IHJ0bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgxLCBVX1JJR0hUX1RPX0xFRlQsIGZh
bHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKnJ0
bENvbnRleHQuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0
cjxCaWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4dDsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UocnRs
T3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgcnRsT3ZlcnJpZGVDb250
ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9UT19MRUZULCB0cnVlLCBGcm9t
U3R5bGVPckRPTSwgMCk7CisgICAgfSk7CisgICAgcmV0dXJuICpydGxPdmVycmlkZUNvbnRleHQu
Z2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmPEJpZGlDb250ZXh0PiBjb3B5Q29udGV4dEFu
ZFJlYmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29udGV4dCwgQmlkaUNvbnRleHQqIHBhcmVu
dCkKK3sKKyAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50ID8gcGFyZW50LT5sZXZlbCgpIDogMDsK
KyAgICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgIG5ld0xl
dmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZlbCk7CisgICAgZWxzZSBpZiAocGFyZW50
KQorICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxldmVsKG5ld0xldmVsKTsKKyAg
ICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdMZXZlbCwgY29udGV4dC5kaXIoKSwgY29u
dGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgpLCBwYXJlbnQpOworfQorCisvLyBUaGUg
QmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFibGUgLS0gdGhleSdyZSByZS11c2VkIGZv
ciByZS1sYXlvdXQgYWZ0ZXIKKy8vIERPTSBtb2RpZmljYXRpb24vZWRpdGluZyAtLSBzbyB3ZSBj
b3B5IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMsIGFuZAorLy8gcmVjYWxjdWxhdGUgdGhl
aXIgbGV2ZWxzLgorUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y29weVN0YWNrUmVtb3Zp
bmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQoreworICAgIFZlY3RvcjxCaWRpQ29udGV4dCos
IDY0PiBjb250ZXh0czsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gdGhpczsgYW5jZXN0b3I7
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci0+
c291cmNlKCkgIT0gRnJvbVVuaWNvZGUpCisgICAgICAgICAgICBjb250ZXh0cy5hcHBlbmQoYW5j
ZXN0b3IpOworICAgIH0KKyAgICBBU1NFUlQoY29udGV4dHMuc2l6ZSgpKTsKKyAgICBhdXRvIHRv
cENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHMubGFzdCgp
LCBudWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb250ZXh0cy5zaXplKCkgLSAxOyBp
OyAtLWkpCisgICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZl
bCgqY29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0cigpKTsKKyAgICByZXR1cm4gdG9wQ29u
dGV4dDsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlDb250ZXh0JiBjMSwgY29uc3Qg
QmlkaUNvbnRleHQmIGMyKQoreworICAgIGlmICgmYzEgPT0gJmMyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5sZXZlbCgpIHx8IGMxLm92ZXJyaWRlKCkg
IT0gYzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBjMi5kaXIoKSB8fCBjMS5zb3VyY2UoKSAh
PSBjMi5zb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYzEucGFyZW50
KCkpCisgICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7CisgICAgcmV0dXJuIGMyLnBhcmVudCgp
ICYmICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBB
TApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NzRkYTE5ZmQzYjcwZDI5NTg3MmUxNjhhMTM2NzM4OGNmZDRjODIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBQQUwgeworCitlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5
bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKKworLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxp
Y2l0IGVtYmVkZGluZ3MuCitjbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxCaWRpQ29udGV4dD4geworcHVibGljOgorICAgIFBBTF9FWFBPUlQgc3RhdGljIFJl
ZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9u
LCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVP
ckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAgQmlkaUNvbnRleHQq
IHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9CisgICAgdW5zaWduZWQg
Y2hhciBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7IH0KKyAgICBVQ2hhckRpcmVjdGlv
biBkaXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9kaXJl
Y3Rpb24pOyB9CisgICAgYm9vbCBvdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGU7
IH0KKyAgICBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEJpZGlFbWJlZGRpbmdTb3VyY2U+KG1fc291cmNlKTsgfQorCisgICAgUEFMX0VYUE9S
VCBSZWY8QmlkaUNvbnRleHQ+IGNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRl
eHRzKCk7CisKK3ByaXZhdGU6CisgICAgQmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwg
VUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlD
b250ZXh0KiBwYXJlbnQpOworCisgICAgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlVW5j
YWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUs
IEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOworCisgICAgdW5zaWdu
ZWQgbV9sZXZlbCA6IDY7IC8vIFRoZSBtYXhpbWl1bSBiaWRpIGxldmVsIGlzIDYyOiBodHRwOi8v
dW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0V4cGxpY2l0X0xldmVsc19hbmRfRGlyZWN0aW9ucwor
ICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDogNTsgLy8gRGlyZWN0aW9uCisgICAgdW5zaWduZWQg
bV9vdmVycmlkZSA6IDE7CisgICAgdW5zaWduZWQgbV9zb3VyY2UgOiAxOyAvLyBCaWRpRW1iZWRk
aW5nU291cmNlCisgICAgUmVmUHRyPEJpZGlDb250ZXh0PiBtX3BhcmVudDsKK307CisKK2lubGlu
ZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyT2RkTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkK
K3sKKyAgICByZXR1cm4gKGxldmVsICsgMSkgfCAxOworfQorCitpbmxpbmUgdW5zaWduZWQgY2hh
ciBuZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQoreworICAgIHJldHVy
biAobGV2ZWwgKyAyKSAmIH4xOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNvbnRl
eHQmLCBjb25zdCBCaWRpQ29udGV4dCYpOworCit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjMxOTkzZDcx
YjcyZmJmZWQ5N2VkMDM5YjIzOTI3YjU1YzQyNTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0wLDAgKzEsOTYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisjaW5jbHVkZSAiQmlk
aVJ1bkxpc3QuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgUEFMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IGNs
YXNzIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgeworcHVibGljOgorICAgIHZvaWQgcmVzZXQo
KQorICAgIHsKKyAgICAgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworICAgICAgICBtX2N1cnJl
bnRUcmFuc2l0aW9uID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydElnbm9yaW5nU3Bh
Y2VzKGNvbnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
bV90cmFuc2l0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5k
KHRyYW5zaXRpb24pOworICAgIH0KKworICAgIHZvaWQgc3RvcElnbm9yaW5nU3BhY2VzKGNvbnN0
IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNpdGlv
bnMuc2l6ZSgpICUgMik7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRpb24p
OworICAgIH0KKworICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1lbnQoKTsKKyAg
ICB9CisKKyAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygpIHsgcmV0dXJu
IG1fdHJhbnNpdGlvbnM7IH0KKyAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQorICAgIHNpemVfdCBjdXJyZW50VHJhbnNpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIHNldEN1
cnJlbnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1cnJlbnRUcmFu
c2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGluY3JlbWVudEN1cnJlbnRU
cmFuc2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGRlY3JlbWVu
dE51bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5zaXRpb25zLnNp
emUoKSAtIDEpOyB9CisgICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SXRlcmF0
b3I+IG1fdHJhbnNpdGlvbnM7CisgICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRpb24geyAwIH07
Cit9OworCisvLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0eXBpY2FsbHkg
dGhlIGVuZCBvZiBhIGxpbmUpIGNhbgorLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVzZWQgdG8gcmVz
dGFydCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KK3N0cnVjdCBCaWRpU3RhdHVz
IHsKKyAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ3JlYXRlcyBhIEJpZGlT
dGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBkZWZhdWx0IGRp
cmVjdGlvbi4KKyAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBoYXMgdHdvIHBv
c3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMgYXQgbGVhc3Qg
MTkuCisgICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBpc092ZXJy
aWRlKQorICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gVV9M
RUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAsIGxhc3RTdHJvbmcoZW9y
KQorICAgICAgICAsIGxhc3QoZW9yKQorICAgICAgICAsIGNvbnRleHQoQmlkaUNvbnRleHQ6OmNy
ZWF0ZShkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMCA6IDEsIGVvciwgaXNPdmVy
cmlkZSkpCisgICAgeworICAgIH0KKworICAgIEJpZGlTdGF0dXMoVUNoYXJEaXJlY3Rpb24gZW9y
LCBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlvbiBsYXN0LCBSZWZQdHI8
QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKKyAgICAgICAgOiBlb3IoZW9yKQorICAgICAgICAsIGxh
c3RTdHJvbmcobGFzdFN0cm9uZykKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgICAgICwgY29u
dGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgIHsKKyAgICB9CisKKyAgICBVQ2hhckRpcmVjdGlv
biBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25n
IHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgVUNoYXJEaXJlY3Rpb24gbGFzdCB7IFVfT1RIRVJf
TkVVVFJBTCB9OworICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4dDsKK307CisKK3N0cnVj
dCBCaWRpRW1iZWRkaW5nIHsKKyAgICBCaWRpRW1iZWRkaW5nKFVDaGFyRGlyZWN0aW9uIGRpcmVj
dGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCisgICAgICAgIDogZGlyZWN0aW9uKGRp
cmVjdGlvbikKKyAgICAgICAgLCBzb3VyY2Uoc291cmNlKQorICAgIHsKKyAgICB9CisKKyAgICBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2U7
Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEs
IGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0dXJuIHN0YXR1czEuZW9yID09
IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0dXMyLmxhc3QgJiYgc3RhdHVzMS5s
YXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAqKHN0YXR1czEuY29udGV4dCkgPT0g
KihzdGF0dXMyLmNvbnRleHQpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJp
ZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0
dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKK30KKworc3RydWN0IEJpZGlDaGFyYWN0ZXJSdW4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJpZGlDaGFyYWN0
ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIEJpZGlDb250ZXh0KiBjb250ZXh0
LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pCisgICAgICAgIDogbV9zdGFydChzdGFydCkKKyAg
ICAgICAgLCBtX3N0b3Aoc3RvcCkKKyAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRleHQtPm92ZXJy
aWRlKCkpCisgICAgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkK
KyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOworCisgICAgICAgIG1fbGV2
ZWwgPSBjb250ZXh0LT5sZXZlbCgpOworCisgICAgICAgIC8vIGFkZCBsZXZlbCBvZiBydW4gKGNh
c2VzIEkxICYgSTIpCisgICAgICAgIGlmIChtX2xldmVsICUgMikgeworICAgICAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVfQVJBQklDX05V
TUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAg
bV9sZXZlbCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAgICAgICAg
ICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0g
VV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCArPSAyOworICAgICAg
ICB9CisgICAgfQorCisgICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQorICAgIHsKKyAgICAgICAgLy8g
RGVsZXRlIHRoZSBsaW5rZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0cnVjdG9yIHJl
Y3Vyc2lvbi4KKyAgICAgICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOworICAgICAgICB3
aGlsZSAobmV4dCkKKyAgICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Cisg
ICAgdW5zaWduZWQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQorICAgIHVuc2lnbmVk
IGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAgYm9vbCByZXZlcnNl
ZChib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3VhbGx5
T3JkZXJlZDsgfQorICAgIGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsg
cmV0dXJuIG1fb3ZlcnJpZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CisKKyAgICBCaWRpQ2hhcmFj
dGVyUnVuKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgc3RkOjp1
bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4gV1RGTW92ZSht
X25leHQpOyB9CisgICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVy
UnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQorCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7CisKK3B1YmxpYzoKKyAg
ICB1bnNpZ25lZCBtX3N0YXJ0OworICAgIHVuc2lnbmVkIG1fc3RvcDsKKyAgICB1bnNpZ25lZCBj
aGFyIG1fbGV2ZWw7CisgICAgYm9vbCBtX292ZXJyaWRlIDogMTsKKyAgICBib29sIG1faGFzSHlw
aGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEgbGF5ZXJpbmcg
dmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2JqZWN0IG9uIDY0
LWJpdC4KK307CisKK2VudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgeworICAgIE5vVmlzdWFs
T3ZlcnJpZGUsCisgICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICBWaXN1YWxSaWdo
dFRvTGVmdE92ZXJyaWRlCit9OworCisvLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0J3MgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KKy8vIGh0dHA6Ly91bmljb2Rl
Lm9yZy9yZXBvcnRzL3RyOQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1
biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKK3B1YmxpYzoKKyAgICBjb25z
dCBJdGVyYXRvciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICB2
b2lkIHNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVyYXRvciYgcG9z
aXRpb24pIHsgbV9jdXJyZW50ID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNv
bnN0IEl0ZXJhdG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRDb3VudCkKKyAg
ICB7CisgICAgICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOworICAgICAgICBtX25lc3RlZElzb2xh
dGVDb3VudCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7CisgICAgfQorCisgICAgdm9pZCBpbmNyZW1l
bnQoKSB7IHN0YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1lbnRJbnRlcm5h
bCgpOyB9CisKKyAgICBCaWRpQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzLmNvbnRleHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldENvbnRleHQoUmVmUHRyPEJpZGlDb250
ZXh0PiYmIGNvbnRleHQpIHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7IH0K
KworICAgIHZvaWQgc2V0TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7IG1fc3RhdHVz
Lmxhc3QgPSBsYXN0RGlyOyB9CisgICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVDaGFyRGlyZWN0
aW9uIGxhc3RTdHJvbmdEaXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RTdHJvbmdEaXI7
IH0KKyAgICB2b2lkIHNldEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsgbV9zdGF0dXMu
ZW9yID0gZW9yRGlyOyB9CisKKyAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25zdCB7IHJldHVy
biBtX2RpcmVjdGlvbjsgfQorICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlv
bikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQorCisgICAgY29uc3QgQmlkaVN0YXR1cyYg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhC
aWRpU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorCisgICAgV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUoKSB7
IHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KKworICAgIC8vIFRoZSBjdXJy
ZW50IGFsZ29yaXRobSBoYW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUgbGF5ZXIgb2YgbmVzdGlu
ZyBhdCBhIHRpbWUuCisgICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVhY2ggaXNvbGF0ZWQgc3Bh
biwgd2Ugd2lsbCB3YWxrIGludG8gKGFuZCBpZ25vcmUpIGFsbAorICAgIC8vIGNoaWxkIGlzb2xh
dGVkIHNwYW5zLgorICAgIHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25lc3RlZElzb2xhdGVDb3Vu
dCsrOyB9CisgICAgdm9pZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1fbmVzdGVkSXNvbGF0ZUNv
dW50ID49IDEpOyBtX25lc3RlZElzb2xhdGVDb3VudC0tOyB9CisgICAgYm9vbCBpbklzb2xhdGUo
KSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQorCisgICAgdm9pZCBlbWJl
ZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSk7CisgICAgYm9vbCBjb21taXRF
eHBsaWNpdEVtYmVkZGluZygpOworCisgICAgdm9pZCBjcmVhdGVCaWRpUnVuc0ZvckxpbmUoY29u
c3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBOb1Zpc3VhbE92ZXJy
aWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CisKKyAgICBCaWRpUnVuTGlzdDxSdW4+
JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyB1c2VkIHRv
IGJlIHBhcnQgb2YgZGVsZXRlUnVucygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9sYXRpb24uCisg
ICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorICAgIHZvaWQgbWFy
a0N1cnJlbnRSdW5FbXB0eSgpIHsgbV9lbXB0eVJ1biA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0
V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiwgc2l6ZV90
KTsKKyAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRl
ZFJ1bihSdW4mKTsKKworcHJvdGVjdGVkOgorICAgIEJpZGlSZXNvbHZlckJhc2UoKSA9IGRlZmF1
bHQ7CisKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2ZXJzIHN1YmNs
YXNzaW5nIHRoaXMgbWV0aG9kLCB3ZSBzaG91bGQKKyAgICAvLyBwYXNzIGluIHNvbWUgc29ydCBv
ZiBUcmFpdHMgb2JqZWN0IHdoaWNoIGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBmb3IgYXBwZW5k
aW5nLgorICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3MmPigq
dGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQorICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RF
bmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xhc3MmPigqdGhp
cykubmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpOyB9CisKKyAgICBJdGVyYXRvciBtX2N1
cnJlbnQ7CisgICAgLy8gc29yIGFuZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFuZCAiZW5kIG9m
IHJ1biIgcmVzcGVjdGl2ZWx5IGFuZCBjb3JyZXBvbmQKKyAgICAvLyB0byBhYnJldmlhdGlvbnMg
dXNlZCBpbiBVQkEgc3BlYzogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNCRDcKKyAg
ICBJdGVyYXRvciBtX3NvcjsgLy8gUG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhl
IGN1cnJlbnQgcnVuLgorICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8gdGhlIGxhc3Qg
Y2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KKyAgICBJdGVyYXRvciBtX2xhc3Q7CisgICAg
QmlkaVN0YXR1cyBtX3N0YXR1czsKKyAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFVf
T1RIRVJfTkVVVFJBTCB9OworICAgIEl0ZXJhdG9yIGVuZE9mTGluZTsKKyAgICBib29sIG1fcmVh
Y2hlZEVuZE9mTGluZSB7IGZhbHNlIH07CisgICAgSXRlcmF0b3IgbV9sYXN0QmVmb3JlRVQ7IC8v
IEJlZm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKKyAgICBib29sIG1fZW1wdHlS
dW4geyB0cnVlIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlbG9uZyB0byB0
aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFzc2VkCisgICAgLy8gaW50byBjcmVhdGVCaWRp
UnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KKyAgICBCaWRpUnVuTGlzdDxSdW4+IG1fcnVuczsK
KworICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+IG1fd2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZTsKKworICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNvdW50IHsgMCB9
OworICAgIEhhc2hNYXA8UnVuKiwgdW5zaWduZWQ+IG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFu
c2l0aW9uRm9ySXNvbGF0ZWRSdW47CisKK3ByaXZhdGU6CisgICAgdm9pZCByYWlzZUV4cGxpY2l0
RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJEaXJlY3Rpb24gdG8pOwor
ICAgIHZvaWQgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20p
OworICAgIHZvaWQgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwor
CisgICAgdm9pZCB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJEaXJl
Y3Rpb24pOworICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7CisgICAgdm9pZCBpbmNy
ZW1lbnRJbnRlcm5hbCgpIHsgbV9jdXJyZW50LmluY3JlbWVudCgpOyB9CisgICAgdm9pZCBhcHBl
bmRSdW5JbnRlcm5hbCgpOworICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFZlY3RvcjxCaWRpRW1iZWRkaW5nLCA4PiBt
X2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KK2NsYXNzIEJpZGlSZXNvbHZlciA6IHB1YmxpYyBC
aWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZlcjxJdGVyYXRvciwgUnVu
Pj4geworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlw
ZW5hbWUgSXNvbGF0ZVJ1bj4KK2NsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlIDogcHVibGlj
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyV2l0aElzb2xhdGU8
SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKK3B1YmxpYzoKKyAgICB+QmlkaVJlc29sdmVy
V2l0aElzb2xhdGUoKTsKKworICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKTsKKyAgICB2b2lk
IGFwcGVuZFJ1bkludGVybmFsKCk7CisgICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVy
bmFsKCkgY29uc3Q7CisgICAgVmVjdG9yPElzb2xhdGVSdW4+JiBpc29sYXRlZFJ1bnMoKSB7IHJl
dHVybiBtX2lzb2xhdGVkUnVuczsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxJc29sYXRlUnVu
PiBtX2lzb2xhdGVkUnVuczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBl
bmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+CitpbmxpbmUgQmlkaVJlc29sdmVyV2l0aElz
b2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVzb2x2ZXJXaXRoSXNvbGF0
ZSgpCit7CisgICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgcmVzb2x2ZXIgc2hvdWxkIGhhdmUgaGFu
ZGxlZCB0aGUgaXNvbGF0ZWQgcnVucy4KKyAgICBBU1NFUlQobV9pc29sYXRlZFJ1bnMuaXNFbXB0
eSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlw
ZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4s
IERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fZW1wdHlS
dW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBt
X3Nvci5vZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9lb3Iub2Zmc2V0
KCk7CisKKyAgICAgICAgaWYgKCFlbmRPZkxpbmUuYXRFbmQoKSAmJiBlbmRPZmZzZXQgPj0gZW5k
T2ZMaW5lLm9mZnNldCgpKSB7CisgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSB0cnVl
OworICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2ZMaW5lLm9mZnNldCgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKKyAgICAgICAgICAgIG1f
cnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxSdW4+KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgKyAx
LCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7CisKKyAgICAgICAgbV9lb3IuaW5jcmVtZW50KCk7
CisgICAgICAgIG1fc29yID0gbV9lb3I7CisgICAgfQorCisgICAgbV9kaXJlY3Rpb24gPSBVX09U
SEVSX05FVVRSQUw7CisgICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFMOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNz
Pjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSkK
K3sKKyAgICAvLyBJc29sYXRlZCBzcGFucyBjb21wdXRlIGJhc2UgZGlyZWN0aW9uYWxpdHkgZHVy
aW5nIHRoZWlyIG93biBVQkEgcnVuLgorICAgIC8vIERvIG5vdCBpbnNlcnQgZmFrZSBlbWJlZCBj
aGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4gaXNvbGF0ZWQgc3Bhbi4KKyAgICBBU1NFUlQoIWlu
SXNvbGF0ZSgpKTsKKworICAgIEFTU0VSVChkaXIgPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFU
IHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpciA9PSBVX0xFRlRfVE9f
UklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwgZGly
ID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSk7CisgICAgbV9jdXJyZW50RXhwbGljaXRFbWJl
ZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIsIHNvdXJjZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNz
Pjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpCit7CisgICAgQVNT
RVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7Cisg
ICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSworICAgICAg
ICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9VTkRBUllfTkVVVFJBTAorICAgICAgICAmJiBtX3N0
YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKKyAgICAgICAgJiYgbV9zdGF0
dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCisgICAgICAgICYmIG1fc3RhdHVz
Lmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIAorICAgICAgICAmJiBtX3N0YXR1cy5s
YXN0ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0
ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCk7CisgICAgaWYgKG1fZGlyZWN0aW9uID09IFVf
T1RIRVJfTkVVVFJBTCkKKyAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25n
ID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUg
RGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2
ZWRDbGFzcz46Omxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9t
KQoreworICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAg
Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBi
aWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRo
ZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0Cisg
ICAgICAgIGlmIChmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgLy8gYmlk
aS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAorICAgICAgICAgICAgaWYgKG1fc3Rh
dHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGlmIChtX3N0
YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
c3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBtX2RpcmVj
dGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklH
SFQpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0dXMuZW9yID09
IFVfQVJBQklDX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdI
VCkgeworICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgfQorICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAg
ICB9CisKKyAgICBhcHBlbmRSdW4oKTsKKyAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKKworICAgIC8v
IHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVyIGxldmVsIChy
dWxlIFgxMCkKKyAgICBzZXRMYXN0RGlyKGZyb20pOworICAgIHNldExhc3RTdHJvbmdEaXIoZnJv
bSk7CisgICAgbV9lb3IgPSBJdGVyYXRvcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNv
bHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBsaWNpdEVtYmVk
ZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKQoreworICAg
IGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tEaXJl
Y3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNvciAu
Li4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNv
ci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAgIGlm
ICh0byA9PSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBi
aWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0
cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9BUkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FS
QUJJQ19OVU1CRVI7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUICYmIGZyb20g
PT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAg
ICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgorICAg
ICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAmJiAobV9zdGF0
dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJR0hUX1RPX0xF
RlQpKQorICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFOX05VTUJFUiAm
JiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09IFVfUklH
SFRfVE9fTEVGVCkpIHsKKyAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIH0KKyAgICAgICAgbV9lb3IgPSBt
X2xhc3Q7CisgICAgfQorCisgICAgYXBwZW5kUnVuKCk7CisgICAgbV9lbXB0eVJ1biA9IHRydWU7
CisKKyAgICBzZXRMYXN0RGlyKHRvKTsKKyAgICBzZXRMYXN0U3Ryb25nRGlyKHRvKTsKKyAgICBt
X2VvciA9IEl0ZXJhdG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBl
bmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK2Jvb2wgQmlkaVJlc29sdmVyQmFzZTxJ
dGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZygpCit7
CisgICAgLy8gV2hlbiB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmluZyB0aGUgcGFy
ZW50IGNvbnRleHQgd2hpY2gKKyAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0aGUgaXNvbGF0
ZWQgY29udGVudCwgaW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCisgICAgLy8gV2Ugc2hvdWxk
IG5ldmVyIGFjY3J1ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92ZXIgaXNvbGF0
ZWQgY29udGVudC4KKyAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVudEV4cGxpY2l0
RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gZnJvbUxldmVsID0gY29u
dGV4dCgpLT5sZXZlbCgpOworICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gdG9Db250ZXh0ID0gY29u
dGV4dCgpOworCisgICAgZm9yIChhdXRvJiBlbWJlZGRpbmcgOiBtX2N1cnJlbnRFeHBsaWNpdEVt
YmVkZGluZ1NlcXVlbmNlKSB7CisgICAgICAgIGlmIChlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVf
UE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBhcmVudENv
bnRleHQgPSB0b0NvbnRleHQtPnBhcmVudCgpKQorICAgICAgICAgICAgICAgIHRvQ29udGV4dCA9
IHBhcmVudENvbnRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBVQ2hhckRpcmVj
dGlvbiBkaXJlY3Rpb24gPSAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRf
RU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJS
SURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIGJv
b2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVF9PVkVS
UklERSB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSB0b0NvbnRleHQtPmxldmVsKCk7Cisg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKKyAgICAgICAgICAg
ICAgICBsZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJFdmVuTGV2ZWwobGV2ZWwpOwor
ICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0ID0g
QmlkaUNvbnRleHQ6OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgZW1iZWRkaW5n
LnNvdXJjZSwgdG9Db250ZXh0LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8g
dG9MZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKKworICAgIGlmICh0b0xldmVsID4gZnJvbUxl
dmVsKQorICAgICAgICByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUgMiA/
IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCwgdG9MZXZlbCAlIDIgPyBVX1JJR0hU
X1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOworICAgIGVsc2UgaWYgKHRvTGV2ZWwgPCBmcm9t
TGV2ZWwpCisgICAgICAgIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9tTGV2ZWwgJSAy
ID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKKworICAgIHNldENvbnRleHQo
V1RGTW92ZSh0b0NvbnRleHQpKTsKKworICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2Vx
dWVuY2UuY2xlYXIoKTsKKworICAgIHJldHVybiBmcm9tTGV2ZWwgIT0gdG9MZXZlbDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZl
ZENsYXNzPgoraW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJp
dmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJEaXJl
Y3Rpb24gZGlyQ3VycmVudCkKK3sKKyAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKKyAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0
ICE9IFVfRVVST1BFQU5fTlVNQkVSKQorICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9IFVfRVVS
T1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRP
UjoKKyAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgY2FzZSBVX1dISVRFX1NQQUNF
X05FVVRSQUw6CisgICAgY2FzZSBVX09USEVSX05FVVRSQUw6CisgICAgICAgIHN3aXRjaCAobV9z
dGF0dXMubGFzdCkgeworICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgY2Fz
ZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoK
KyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgY2FzZSBVX0FSQUJJQ19O
VU1CRVI6CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9
IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFVf
RElSX05PTl9TUEFDSU5HX01BUks6CisgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hU
X0VNQkVERElORzoKKyAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToKKyAgICBjYXNl
IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKKyAgICBjYXNlIFVfUE9QX0RJUkVDVElPTkFMX0ZP
Uk1BVDoKKyAgICAgICAgLy8gaWdub3JlIHRoZXNlCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgor
aW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+
OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQoreworICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWxMb3cg
PSAxMjg7CisgICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOworICAgIGZvciAoUnVuKiBy
dW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkgeworICAgICAg
ICBsZXZlbEhpZ2ggPSBzdGQ6Om1heChydW4tPmxldmVsKCksIGxldmVsSGlnaCk7CisgICAgICAg
IGxldmVsTG93ID0gc3RkOjptaW4ocnVuLT5sZXZlbCgpLCBsZXZlbExvdyk7CisgICAgfQorCisg
ICAgLy8gVGhpcyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGlu
ZyB0byBCaWRpIHNwZWMpOgorICAgIC8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8j
TDIKKyAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3VuZCBpbiB0aGUgdGV4dCB0
byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCisgICAgLy8gcmV2ZXJzZSBhbnkg
Y29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2ZWwg
b3IgaGlnaGVyLgorCisgICAgLy8gUmV2ZXJzaW5nIGlzIG9ubHkgZG9uZSB1cCB0byB0aGUgbG93
ZXN0IG9kZCBsZXZlbC4KKyAgICBpZiAoIShsZXZlbExvdyAlIDIpKQorICAgICAgICBsZXZlbExv
dysrOworCisgICAgdW5zaWduZWQgY291bnQgPSBtX3J1bnMucnVuQ291bnQoKSAtIDE7CisKKyAg
ICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7CisgICAgICAgIHVuc2lnbmVkIGkgPSAw
OworICAgICAgICBSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOworICAgICAgICB3aGlsZSAo
aSA8IGNvdW50KSB7CisgICAgICAgICAgICBmb3IgKDtpIDwgY291bnQgJiYgcnVuICYmIHJ1bi0+
bGV2ZWwoKSA8IGxldmVsSGlnaDsgaSsrKQorICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4
dCgpOworICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOworICAgICAgICAgICAgZm9yICg7
aSA8PSBjb3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpID49IGxldmVsSGlnaDsgaSsrKQorICAg
ICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dCgpOworICAgICAgICAgICAgdW5zaWduZWQgZW5k
ID0gaSAtIDE7CisgICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoc3RhcnQsIGVuZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbGV2ZWxIaWdoLS07CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lk
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6Y3JlYXRlQmlk
aVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRl
IG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWspCit7CisgICAgQVNTRVJUKG1fZGlyZWN0aW9u
ID09IFVfT1RIRVJfTkVVVFJBTCk7CisKKyAgICBpZiAob3ZlcnJpZGUgIT0gTm9WaXN1YWxPdmVy
cmlkZSkgeworICAgICAgICBtX2VtcHR5UnVuID0gZmFsc2U7CisgICAgICAgIG1fc29yID0gbV9j
dXJyZW50OworICAgICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChtX2N1
cnJlbnQgIT0gZW5kICYmICFtX2N1cnJlbnQuYXRFbmQoKSkgeworICAgICAgICAgICAgbV9lb3Ig
PSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBpbmNyZW1lbnQoKTsKKyAgICAgICAgfQorICAgICAg
ICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRlID09IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgPyBV
X0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIGFwcGVuZFJ1bigpOwor
ICAgICAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1bigpKTsKKyAg
ICAgICAgaWYgKG92ZXJyaWRlID09IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUgJiYgbV9ydW5z
LnJ1bkNvdW50KCkpCisgICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoMCwgbV9ydW5zLnJ1
bkNvdW50KCkgLSAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZW1wdHlSdW4g
PSB0cnVlOworCisgICAgbV9lb3IgPSBJdGVyYXRvcigpOworCisgICAgbV9sYXN0ID0gbV9jdXJy
ZW50OworICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOworICAgIEJpZGlSZXNvbHZlckJhc2U8SXRl
cmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPiBzdGF0ZUF0RW5kOworCisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudDsKKyAgICAgICAgaWYgKHBhc3RF
bmQgJiYgKGhhcmRMaW5lQnJlYWsgfHwgbV9jdXJyZW50LmF0RW5kKCkpKSB7CisgICAgICAgICAg
ICBCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChoYXJkTGluZUJy
ZWFrKSB7CisgICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUgVW5pY29kZSBC
aWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAorICAgICAgICAgICAgICAgIC8vIFdpbklF
IGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyByZXNldCBiaWRpIHN0YXRl
CisgICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBiaWRpIGNvbnRyb2wgY2hh
cmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCisgICAgICAgICAgICAgICAgLy8gRE9NIG5vZGVz
IHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgc3RhdGVBdEVu
ZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRz
KCkpOworCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRlQXRFbmQuY29udGV4dCgp
LT5kaXIoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVvckRpcihkaXJDdXJyZW50
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIoZGlyQ3VycmVudCk7Cisg
ICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGlyKGRpckN1cnJlbnQpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYy0+cGFyZW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBk
aXJDdXJyZW50ID0gYy0+ZGlyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlvbigpOworICAgICAgICAg
ICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQorICAgICAgICAgICAgICAgICYmIGRpckN1cnJl
bnQgIT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORworICAgICAgICAgICAgICAgICYmIGRpckN1
cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORworICAgICAgICAgICAgICAgICYmIGRp
ckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAgICAgICAgICAgICAgJiYg
ZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKKyAgICAgICAgICAgICAgICAm
JiBkaXJDdXJyZW50ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkKKyAgICAgICAgICAgICAg
ICBkaXJDdXJyZW50ID0gY29udGV4dCgpLT5kaXIoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGRp
ckN1cnJlbnQgPT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSykKKyAgICAgICAgICAgICAgICBkaXJD
dXJyZW50ID0gbV9zdGF0dXMubGFzdDsKKyAgICAgICAgfQorCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgICAgICAvLyBPdXIgV2luZG93cyBidWlsZCBoYXNuJ3QgdXBkYXRlZCBpdHMgaGVhZGVycyBm
cm9tIElDVSA2LjEsIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGVzZSBzeW1ib2xzLgorICAgICAgICBj
b25zdCBVQ2hhckRpcmVjdGlvbiBVX0ZJUlNUX1NUUk9OR19JU09MQVRFID0gc3RhdGljX2Nhc3Q8
VUNoYXJEaXJlY3Rpb24+KDE5KTsKKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9MRUZU
X1RPX1JJR0hUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjApOworICAg
ICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1JJR0hUX1RPX0xFRlRfSVNPTEFURSA9IHN0YXRp
Y19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMSk7CisgICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9u
IFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4o
MjIpOworI2VuZGlmCisgICAgICAgIC8vIFdlIGlnbm9yZSBhbGwgY2hhcmFjdGVyIGRpcmVjdGlv
bmFsaXR5IHdoaWxlIGluIHVuaWNvZGUtYmlkaTogaXNvbGF0ZSBzcGFucy4KKyAgICAgICAgLy8g
V2UnbGwgaGFuZGxlIG9yZGVyaW5nIHRoZSBpc29sYXRlZCBjaGFyYWN0ZXJzIGluIGEgc2Vjb25k
IHBhc3MuCisgICAgICAgIGlmIChpbklzb2xhdGUoKSB8fCBkaXJDdXJyZW50ID09IFVfRklSU1Rf
U1RST05HX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX0xFRlRfVE9fUklHSFRfSVNPTEFURSB8
fCBkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9JU09MQVRFIHx8IGRpckN1cnJlbnQgPT0g
VV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSkKKyAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX09U
SEVSX05FVVRSQUw7CisKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05F
VVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7CisgICAgICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewor
CisgICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChYMS1YOSBpbiB0aGUgQmlkaSBz
cGVjcykKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgICAgICBj
YXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19M
RUZUX09WRVJSSURFOgorICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKKyAg
ICAgICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6CisgICAgICAgICAgICBlbWJlZChk
aXJDdXJyZW50LCBGcm9tVW5pY29kZSk7CisgICAgICAgICAgICBjb21taXRFeHBsaWNpdEVtYmVk
ZGluZygpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gc3Ryb25nIHR5cGVzCisg
ICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1
cy5sYXN0KSB7CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAg
IGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVI6CisgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAgICAg
ICAgICBpZiAobV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5s
YXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVfTEVGVF9U
T19SSUdIVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJF
Ul9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNl
IFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBj
YXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09
IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5s
YXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNv
IGxldCdzIGNsb3NlIHRoYXQgcnVuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJh
bHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiwgd2hpY2ggaXMgUgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9BUkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1iZXJz
IGFyZSBhbHdheXMgb24gYSBoaWdoZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0
aGF0IHJ1bgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJF
UjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0KCktPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24s
IHdoaWNoIGlzIFIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRf
VE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBlbWJl
ZGRpbmcgZGlyCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09IFVf
UklHSFRfVE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xFRlRf
VE9fUklHSFQ7CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RPX1JJ
R0hUOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFz
dCkgeworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6Cisg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7
CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2UgVV9S
SUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1C
RVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAg
ICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01F
TlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Cisg
ICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9z
dGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBjb250ZXh0KCktPmRp
cigpID09IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdHVz
Lmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX1JJR0hU
X1RPX0xFRlQ7CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVudDsK
KyAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6CisKKyAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVf
UklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKKyAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IHN0cm9u
ZyB3YXMgQUwgY2hhbmdlIEVOIHRvIEFOCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1
cy5sYXN0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAgICAgICAgICAgIGNhc2UgVV9B
UkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAg
ICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBVX0JM
T0NLX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6
CisgICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAg
ICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0
YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBz
byB0aGUgbmV1dHJhbHMgc2hvdWxkIGJlIFIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGVybWluYXRlIHRoZSBFTiBydW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9F
VVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9
PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0
ZSB0aGUgQU4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RP
X0xFRlQgfHwgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGFuIFIgcnVuLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJN
SU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVn
aW4gYSBuZXcgRU4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RP
X0xFRlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgUiBydW4gdG8g
aW5jbHVkZSB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1f
c3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9y
ZUVUIDogbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJ
R0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OworICAgICAgICAgICAgICAgIG1fc3RhdHVz
LmVvciA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgIGlmIChtX2RpcmVjdGlv
biA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0g
VV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgor
ICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hU
KQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICBjYXNl
IFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVN
QkVSOgorICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgIGFw
cGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX0NP
TU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9BUkFCSUNfTlVNQkVSKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJf
U0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9S
OgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNl
IFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBj
YXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09
IFVfQVJBQklDX05VTUJFUgorICAgICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09
IFVfRVVST1BFQU5fTlVNQkVSICYmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9f
TEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkpCisgICAgICAgICAg
ICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0
dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBV
X1JJR0hUX1RPX0xFRlQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUg
cnVuIGJlZm9yZSB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OworICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRyYWxz
LgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkK
KyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09
IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKKyAg
ICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1fY3Vy
cmVudDsKKyAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAg
ICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAg
ICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgIGNhc2UgVV9D
T01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICBpZiAobV9zdGF0dXMu
bGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGRpckN1cnJlbnQg
PSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsK
KyAgICAgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAgICAg
fSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1Ip
CisgICAgICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBtX2VtcHR5UnVuID8gbV9lb3IgOiBt
X2xhc3Q7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBib3VuZGFyeSBuZXV0cmFs
cyBzaG91bGQgYmUgaWdub3JlZAorICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKKyAg
ICAgICAgICAgIGlmIChtX2VvciA9PSBtX2xhc3QpCisgICAgICAgICAgICAgICAgbV9lb3IgPSBt
X2N1cnJlbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIG5ldXRyYWxzCisg
ICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6CisgICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBkbyB3ZSBkbyB3aXRoIG5ld2xpbmUgYW5kIHBhcmFncmFwaCBzZXBhcmF0b3JzIHRoYXQgY29t
ZSB0byBoZXJlPworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NF
UEFSQVRPUjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcnVsZSBMMS4KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpZiAocGFzdEVuZCAmJiAobV9lb3IgPT0gbV9jdXJyZW50IHx8ICFuZWVkc0Nv
bnRpbnVlUGFzdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKCFtX3JlYWNoZWRFbmRPZkxpbmUp
IHsKKyAgICAgICAgICAgICAgICBtX2VvciA9IGVuZE9mTGluZTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG1fc3RhdHVzLmVvcikgeworICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJ
R0hUOgorICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAgICAgICAgICAg
ICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IG1fc3RhdHVzLmVvcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJl
Y3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9U
T19SSUdIVCA6IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
aGFuZGxlIG5ldXRyYWxzIGluIHRoaXMgY2FzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQ4MTcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9jdXJyZW50ID0gZW5kOworICAgICAgICAgICAgbV9zdGF0dXMgPSBz
dGF0ZUF0RW5kLm1fc3RhdHVzOworICAgICAgICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1fc29y
OyAKKyAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsKKyAgICAgICAgICAgIG1f
bGFzdCA9IHN0YXRlQXRFbmQubV9sYXN0OworICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5l
ID0gc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRPZkxpbmU7CisgICAgICAgICAgICBtX2xhc3RCZWZv
cmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQ7CisgICAgICAgICAgICBtX2VtcHR5UnVu
ID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX09U
SEVSX05FVVRSQUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHVw
ZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihkaXJDdXJyZW50KTsKKyAgICAgICAg
bV9sYXN0ID0gbV9jdXJyZW50OworCisgICAgICAgIGlmIChtX2VtcHR5UnVuKSB7CisgICAgICAg
ICAgICBtX3NvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGluY3JlbWVudCgpOworICAgICAgICBpZiAoIW1fY3VycmVu
dEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBib29s
IGNvbW1pdHRlZCA9IGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7CisgICAgICAgICAgICBpZiAo
Y29tbWl0dGVkICYmIHBhc3RFbmQpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnQgPSBlbmQ7
CisgICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBzdGF0ZUF0RW5kLm1fc3RhdHVzOworICAgICAg
ICAgICAgICAgIG1fc29yID0gc3RhdGVBdEVuZC5tX3NvcjsgCisgICAgICAgICAgICAgICAgbV9l
b3IgPSBzdGF0ZUF0RW5kLm1fZW9yOworICAgICAgICAgICAgICAgIG1fbGFzdCA9IHN0YXRlQXRF
bmQubV9sYXN0OworICAgICAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRF
bmQubV9yZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVUID0g
c3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVDsKKyAgICAgICAgICAgICAgICBtX2VtcHR5UnVuID0g
c3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9P
VEhFUl9ORVVUUkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFwYXN0RW5kICYmIChtX2N1cnJlbnQgPT0gZW5kIHx8IG1f
Y3VycmVudC5hdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKG1fZW1wdHlSdW4pCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc3RhdHVzID0gbV9zdGF0
dXM7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc29yID0gbV9zb3I7CisgICAgICAgICAgICBz
dGF0ZUF0RW5kLm1fZW9yID0gbV9lb3I7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fbGFzdCA9
IG1fbGFzdDsKKyAgICAgICAgICAgIHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lID0gbV9y
ZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVCA9
IG1fbGFzdEJlZm9yZUVUOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VtcHR5UnVuID0gbV9l
bXB0eVJ1bjsKKyAgICAgICAgICAgIGVuZE9mTGluZSA9IG1fbGFzdDsKKyAgICAgICAgICAgIHBh
c3RFbmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9ydW5zLnNldExvZ2ljYWxs
eUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7CisgICAgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7
CisgICAgZW5kT2ZMaW5lID0gSXRlcmF0b3IoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVz
b2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OnNldFdoaXRlc3BhY2VDb2xs
YXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuLCBzaXplX3QgdHJhbnNpdGlv
bikKK3sKKyAgICBBU1NFUlQoIW1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNv
bGF0ZWRSdW4uY29udGFpbnMoJnJ1bikpOworICAgIG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFu
c2l0aW9uRm9ySXNvbGF0ZWRSdW4uYWRkKCZydW4sIHRyYW5zaXRpb24pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+
Cit1bnNpZ25lZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46
OndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuKQor
eworICAgIHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVk
UnVuLnRha2UoJnJ1bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3RleHQvQmlkaVJ1bkxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWFiNjcwZTU5N2RmY2RjZTc3
NDhmZGIzOWEyNTgxM2M1YTllMTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHQgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIFBBTCB7CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+CitjbGFzcyBCaWRpUnVu
TGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxpc3QpOworcHVibGljOgor
ICAgIEJpZGlSdW5MaXN0KCkKKyAgICAgICAgOiBtX2xhc3RSdW4obnVsbHB0cikKKyAgICAgICAg
LCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKKyAgICAgICAgLCBtX3J1bkNvdW50KDApCisg
ICAgeworICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNvbHZlciBubyBsb25nZXIg
b3ducyB0aGUgQmlkaVJ1bkxpc3QsCisgICAgLy8gdGhlbiB+QmlkaVJ1bkxpc3Qgc2hvdWxkIGNh
bGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCisKKyAgICBSdW4qIGZpcnN0UnVuKCkgY29u
c3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQorICAgIFJ1biogbGFzdFJ1bigpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQorICAgIFJ1biogbG9naWNhbGx5TGFzdFJ1bigpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQorICAgIHVuc2lnbmVkIHJ1bkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQorCisgICAgdm9pZCBhcHBlbmRSdW4oc3RkOjp1
bmlxdWVfcHRyPFJ1bj4mJik7CisgICAgdm9pZCBwcmVwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxS
dW4+JiYpOworCisgICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7CisgICAgdm9pZCBtb3ZlUnVu
VG9CZWdpbm5pbmcoUnVuKik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCByZXZlcnNl
UnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICB2b2lkIHJlb3JkZXJSdW5z
RnJvbUxldmVscygpOworCisgICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0UnVuKFJ1biogcnVuKSB7
IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQorCisgICAgdm9pZCByZXBsYWNlUnVuV2l0aFJ1
bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpOworCitwcml2YXRl
OgorCisgICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQtbGlzdCwgd2hlcmUgdGhl
IGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQgYXJlIG9mIHR5cGUgc3Rk
Ojp1bmlxdWVfcHRyKS4KKyAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJlbG93IHBvaW50IGludG8g
dGhlIHNpbmdseS1saW5rZWQtbGlzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBtX2ZpcnN0
UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIFJ1biogbV9sYXN0UnVuOworICAgIFJ1
biogbV9sb2dpY2FsbHlMYXN0UnVuOworICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6YXBwZW5k
UnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQoreworICAgIGlmICghbV9maXJzdFJ1bikg
eworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOworICAgICAgICBtX2xhc3RSdW4g
PSBtX2ZpcnN0UnVuLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbGFzdFJ1bi0+c2V0
TmV4dChXVEZNb3ZlKHJ1bikpOworICAgICAgICBtX2xhc3RSdW4gPSBtX2xhc3RSdW4tPm5leHQo
KTsKKyAgICB9CisgICAgbV9ydW5Db3VudCsrOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgor
aW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiYmIHJ1bikKK3sKKyAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsKKworICAgIGlmICghbV9s
YXN0UnVuKQorICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7CisgICAgZWxzZQorICAgICAg
ICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAgbV9maXJzdFJ1biA9IFdU
Rk1vdmUocnVuKTsKKyAgICBtX3J1bkNvdW50Kys7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+
CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQoUnVuKiBydW4pCit7
CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVChtX2xhc3RSdW4pOworICAgIEFT
U0VSVChydW4tPm5leHQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICBS
dW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1
bikgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2
aW91cy0+bmV4dCgpOworICAgIH0KKworICAgIGlmICghcHJldmlvdXMpIHsKKyAgICAgICAgQVNT
RVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1
bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7CisgICAgICAgIG1fZmly
c3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOworICAgICAgICBtX2xhc3RSdW4t
PnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VOZXh0KCk7Cisg
ICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0KCkpOworICAgICAgICBt
X2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9CZWdp
bm5pbmcoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVCht
X2xhc3RSdW4pOworICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5nZXQoKSk7CisKKyAgICBS
dW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICBSdW4qIGN1cnJlbnQgPSBwcmV2
aW91cy0+bmV4dCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikgeworICAgICAgICBwcmV2
aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAg
IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzLT50YWtlTmV4
dCgpOworICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQoKSk7CisgICAgaWYgKHJ1
biA9PSBtX2xhc3RSdW4pCisgICAgICAgIG1fbGFzdFJ1biA9IHByZXZpb3VzOworCisgICAgdGFy
Z2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1fZmlyc3RSdW4gPSBXVEZN
b3ZlKHRhcmdldCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5MaXN0
PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1bkxpc3Q8UnVu
PiYgbmV3UnVucykKK3sKKyAgICBBU1NFUlQobmV3UnVucy5ydW5Db3VudCgpKTsKKyAgICBBU1NF
UlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKHRvUmVwbGFjZSk7CisKKyAgICBtX3J1bkNvdW50
ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRpbmcgdGhlIG5ldyBydW5z
IGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCisKKyAgICAvLyBGaXggdXAgYW55IHBvaW50ZXJzIHdo
aWNoIG1heSBlbmQgdXAgc3RhbGUuCisgICAgaWYgKG1fbGFzdFJ1biA9PSB0b1JlcGxhY2UpCisg
ICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOworICAgIGlmIChtX2xvZ2ljYWxs
eUxhc3RSdW4gPT0gdG9SZXBsYWNlKQorICAgICAgICBtX2xvZ2ljYWxseUxhc3RSdW4gPSBuZXdS
dW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKKworICAgIGlmIChtX2ZpcnN0UnVuLmdldCgpID09IHRv
UmVwbGFjZSkgeworICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dChtX2ZpcnN0UnVu
LT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUobmV3UnVucy5tX2Zp
cnN0UnVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGaW5kIHRoZSBydW4ganVzdCBiZWZv
cmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KKyAgICAgICAgUnVuKiBwcmV2aW91
c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgICAgIHdoaWxlIChwcmV2aW91c1J1bi0+bmV4
dCgpICE9IHRvUmVwbGFjZSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcHJldmlvdXNSdW4t
Pm5leHQoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5leHQoKTsKKyAgICAgICAg
cHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4pKTsKKyAgICAg
ICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtlTmV4dCgpKTsKKyAgICB9
CisKKyAgICBuZXdSdW5zLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lk
IEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKK3sKKyAgICBtX2ZpcnN0UnVuID0gbnVsbHB0cjsK
KyAgICBtX2xhc3RSdW4gPSBudWxscHRyOworICAgIG1fbG9naWNhbGx5TGFzdFJ1biA9IG51bGxw
dHI7CisgICAgbV9ydW5Db3VudCA9IDA7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lk
IEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbmQgPCBtX3J1bkNvdW50KTsK
KworICAgIC8vIEdldCB0aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBydW5zIHRvIHJl
dmVyc2UgYW5kIHB1dCBpdCBpbgorICAgIC8vIHxiZWZvcmVTdGFydHwuIHxjdXJyfCBzaG91bGQg
cG9pbnQgdG8gdGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgorICAgIFJ1biogY3VyciA9IG1fZmly
c3RSdW4uZ2V0KCk7CisgICAgUnVuKiBiZWZvcmVTdGFydCA9IG51bGxwdHI7CisgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgZm9yICg7IGkgPCBzdGFydDsgKytpKSB7CisgICAgICAgIGJlZm9yZVN0
YXJ0ID0gY3VycjsKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKKyAgICB9CisgICAgUnVu
KiBzdGFydFJ1biA9IGN1cnI7CisKKyAgICBmb3IgKDsgaSA8IGVuZDsgKytpKQorICAgICAgICBj
dXJyID0gY3Vyci0+bmV4dCgpOworCisgICAgaWYgKCFjdXJyLT5uZXh0KCkpCisgICAgICAgIG1f
bGFzdFJ1biA9IHN0YXJ0UnVuOworCisgICAgLy8gU3RhbmRhcmQgInNsaWRpbmcgd2luZG93IiBv
ZiAzIHBvaW50ZXJzCisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJldmlvdXMgPSBjdXJyLT50
YWtlTmV4dCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJlbnQgPSBiZWZvcmVTdGFy
dCA/IGJlZm9yZVN0YXJ0LT50YWtlTmV4dCgpIDogV1RGTW92ZShtX2ZpcnN0UnVuKTsKKyAgICB3
aGlsZSAoY3VycmVudCkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBuZXh0ID0gY3Vy
cmVudC0+dGFrZU5leHQoKTsKKyAgICAgICAgY3VycmVudC0+c2V0TmV4dChXVEZNb3ZlKHByZXZp
b3VzKSk7CisgICAgICAgIHByZXZpb3VzID0gV1RGTW92ZShjdXJyZW50KTsKKyAgICAgICAgY3Vy
cmVudCA9IFdURk1vdmUobmV4dCk7CisgICAgfQorCisgICAgaWYgKGJlZm9yZVN0YXJ0KQorICAg
ICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgZWxzZQor
ICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2aW91cyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0NoYXJhY3Rl
clByb3BlcnRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJQcm9w
ZXJ0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU1NDUyMDAzMWFiNGVmNjlmM2RlMjJhZjk5ZjMwY2JjY2I3
NDY4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFy
YWN0ZXJQcm9wZXJ0aWVzLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dW5p
Y29kZS91Y2hhci5oPgorCituYW1lc3BhY2UgUEFMIHsKKworc3RhdGljIGlubGluZSBib29sIGlz
RW1vamlHcm91cENhbmRpZGF0ZShVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyNkZWZpbmUgU1lNQk9M
U19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURfQSAyOTgKKyNpZiBVX0lDVV9WRVJTSU9OX01BSk9S
X05VTSA8IDY0CisjZGVmaW5lIFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRF
RF9BIFNZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EKKyNlbHNlCitzdGF0aWNfYXNz
ZXJ0KFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRFRF9BID09IFNZTUJPTFNf
QU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKHN0YXRp
Y19jYXN0PGludD4odWJsb2NrX2dldENvZGUoY2hhcmFjdGVyKSkpIHsKKyAgICBjYXNlIFVCTE9D
S19NSVNDRUxMQU5FT1VTX1NZTUJPTFM6CisgICAgY2FzZSBVQkxPQ0tfRElOR0JBVFM6CisgICAg
Y2FzZSBVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9QSUNUT0dSQVBIUzoKKyAgICBj
YXNlIFVCTE9DS19FTU9USUNPTlM6CisgICAgY2FzZSBVQkxPQ0tfVFJBTlNQT1JUX0FORF9NQVBf
U1lNQk9MUzoKKyAgICBjYXNlIFVCTE9DS19TVVBQTEVNRU5UQUxfU1lNQk9MU19BTkRfUElDVE9H
UkFQSFM6CisgICAgY2FzZSBVQkxPQ0tfU1lNQk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURf
QToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGlzRW1vamlGaXR6cGF0cmlja01v
ZGlmaWVyKFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIC8vIFUrMUYzRkIgLSBFTU9KSSBNT0RJ
RklFUiBGSVRaUEFUUklDSyBUWVBFLTEtMgorICAgIC8vIFUrMUYzRkMgLSBFTU9KSSBNT0RJRklF
UiBGSVRaUEFUUklDSyBUWVBFLTMKKyAgICAvLyBVKzFGM0ZEIC0gRU1PSkkgTU9ESUZJRVIgRklU
WlBBVFJJQ0sgVFlQRS00CisgICAgLy8gVSsxRjNGRSAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRS
SUNLIFRZUEUtNQorICAgIC8vIFUrMUYzRkYgLSBFTU9KSSBNT0RJRklFUiBGSVRaUEFUUklDSyBU
WVBFLTYKKworICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMHgxRjNGQiAmJiBjaGFyYWN0ZXIgPD0g
MHgxRjNGRjsKK30KKworaW5saW5lIGJvb2wgaXNWYXJpYXRpb25TZWxlY3RvcihVQ2hhcjMyIGNo
YXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID49IDB4RkUwMCAmJiBjaGFyYWN0ZXIg
PD0gMHhGRTBGOworfQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppS2V5Y2FwQmFzZShVQ2hhcjMyIGNo
YXJhY3RlcikKK3sKKyAgICByZXR1cm4gKGNoYXJhY3RlciA+PSAnMCcgJiYgY2hhcmFjdGVyIDw9
ICc5JykgfHwgY2hhcmFjdGVyID09ICcjJyB8fCBjaGFyYWN0ZXIgPT0gJyonOworfQorCitpbmxp
bmUgYm9vbCBpc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCit7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlciA+PSAweDFGMUU2ICYmIGNoYXJhY3RlciA8PSAweDFGMUZGOwor
fQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppV2l0aFByZXNlbnRhdGlvbkJ5RGVmYXVsdChVQ2hhcjMy
IGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gdV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIs
IFVDSEFSX0VNT0pJX1BSRVNFTlRBVElPTik7Cit9CisKK2lubGluZSBib29sIGlzRW1vamlNb2Rp
ZmllckJhc2UoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIHVfaGFzQmluYXJ5UHJv
cGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSV9NT0RJRklFUl9CQVNFKTsKK30KKworaW5saW5l
IGJvb2wgaXNEZWZhdWx0SWdub3JhYmxlQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyKQorewor
ICAgIHJldHVybiB1X2hhc0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfREVGQVVMVF9J
R05PUkFCTEVfQ09ERV9QT0lOVCk7Cit9CisKK2lubGluZSBib29sIGlzQ29udHJvbENoYXJhY3Rl
cihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gdV9nZXRJbnRQcm9wZXJ0eVZhbHVl
KGNoYXJhY3RlciwgVUNIQVJfR0VORVJBTF9DQVRFR09SWSkgPT0gVV9DT05UUk9MX0NIQVI7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJS
YW5nZS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0NoYXJhY3RlclJhbmdlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzAyM2IwMWJlN2I2MjY0YzNlMmIyNWVmNjhlM2MwZmNhODY4YmIzOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5o
CkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoRk9VTkRBVElPTikgJiYg
ZGVmaW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2UgeworICAgIHVp
bnQ2NF90IGxvY2F0aW9uIHsgMCB9OworICAgIHVpbnQ2NF90IGxlbmd0aCB7IDAgfTsKKworICAg
IENoYXJhY3RlclJhbmdlKCkgPSBkZWZhdWx0OworICAgIGNvbnN0ZXhwciBDaGFyYWN0ZXJSYW5n
ZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKTsKKworI2lmIFVTRShDRikKKyAg
ICBjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2UoQ0ZSYW5nZSk7CisgICAgY29uc3RleHByIG9wZXJh
dG9yIENGUmFuZ2UoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKEZPVU5EQVRJT04pICYmIGRl
ZmluZWQoX19PQkpDX18pCisgICAgY29uc3RleHByIENoYXJhY3RlclJhbmdlKE5TUmFuZ2UpOwor
ICAgIGNvbnN0ZXhwciBvcGVyYXRvciBOU1JhbmdlKCkgY29uc3Q7CisjZW5kaWYKK307CisKK2Nv
bnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24s
IHVpbnQ2NF90IGxlbmd0aCkKKyAgICA6IGxvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbGVuZ3Ro
KGxlbmd0aCkKK3sKK30KKworI2lmIFVTRShDRikKKworY29uc3RleHByIENoYXJhY3RlclJhbmdl
OjpDaGFyYWN0ZXJSYW5nZShDRlJhbmdlIHJhbmdlKQorICAgIDogQ2hhcmFjdGVyUmFuZ2UocmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkKK3sKKyAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24g
IT0ga0NGTm90Rm91bmQpOworfQorCitjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2U6Om9wZXJhdG9y
IENGUmFuZ2UoKSBjb25zdAoreworICAgIENGSW5kZXggbG9jYXRpb25DRiA9IGxvY2F0aW9uOwor
ICAgIENGSW5kZXggbGVuZ3RoQ0YgPSBsZW5ndGg7CisgICAgcmV0dXJuIHsgbG9jYXRpb25DRiwg
bGVuZ3RoQ0YgfTsKK30KKworI2VuZGlmCisKKyNpZiBVU0UoRk9VTkRBVElPTikgJiYgZGVmaW5l
ZChfX09CSkNfXykKKworY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0ZXJSYW5nZShO
U1JhbmdlIHJhbmdlKQorICAgIDogQ2hhcmFjdGVyUmFuZ2UgeyByYW5nZS5sb2NhdGlvbiwgcmFu
Z2UubGVuZ3RoIH0KK3sKKyAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCk7
Cit9CisKK2NvbnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6b3BlcmF0b3IgTlNSYW5nZSgpIGNvbnN0
Cit7CisgICAgTlNVSW50ZWdlciBsb2NhdGlvbk5TID0gbG9jYXRpb247CisgICAgTlNVSW50ZWdl
ciBsZW5ndGhOUyA9IGxlbmd0aDsKKyAgICByZXR1cm4geyBsb2NhdGlvbk5TLCBsZW5ndGhOUyB9
OworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOWVjZTE1OWJjMTYz
MTI5YTAwMjYyNzY0OTFmZjZjZjBhNDAzNDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApAQCAtMCwwICsxLDI3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisg
KiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRlVGlt
ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCisjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdGF0aWMgY29uc3QgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZSBsb3dlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0gPSB7CisgICAgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZVBlcmlvZCwgLy8gYQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJ
bnZhbGlkLCAvLyBiCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxvY2FsRGF5T2ZXZWVr
U3RhbmRBbG9uLCAvLyBjCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9udGgs
IC8vIGQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTG9jYWxEYXlPZldlZWssIC8vIGUK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gZgorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVNb2RpZmllZEp1bGlhbkRheSwgLy8gZworICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVIb3VyMTIsIC8vIGgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
SW52YWxpZCwgLy8gaQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBq
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNCwgLy8gaworICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBsCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZU1pbnV0ZSwgLy8gbQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAv
LyBuCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIG8KKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gcAorICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lLCAvLyBxCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUludmFsaWQsIC8vIHIKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kLCAv
LyBzCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHQKKyAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlRXh0ZW5kZWRZZWFyLCAvLyB1CisgICAgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZU5vbkxvY2F0aW9uWm9uZSwgLy8gdgorICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVXZWVrT2ZZZWFyLCAvLyB3CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIHgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhciwgLy8geQorICAg
IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVab25lLCAvLyB6Cit9OworCitzdGF0aWMgY29uc3Qg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSB1cHBlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0gPSB7
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5LCAvLyBBCisg
ICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIEIKKyAgICBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gQworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVEYXlPZlllYXIsIC8vIEQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZXZWVr
LCAvLyBFCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mV2Vla0luTW9udGgsIC8v
IEYKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXJhLCAvLyBHCisgICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUhvdXIyMywgLy8gSAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVJbnZhbGlkLCAvLyBJCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8v
IEoKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExLCAvLyBLCisgICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSwgLy8gTAorICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVNb250aCwgLy8gTQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJ
bnZhbGlkLCAvLyBOCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIE8K
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gUAorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXIsIC8vIFEKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSW52YWxpZCwgLy8gUgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlvbmFs
U2Vjb25kLCAvLyBTCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIFQK
KyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gVQorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBWCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVdlZWtPZk1vbnRoLCAvLyBXCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFs
aWQsIC8vIFgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhck9mV2Vla09mWWVhciwg
Ly8gWQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVSRkM4MjJab25lLCAvLyBaCit9Owor
CitzdGF0aWMgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlw
ZShjb25zdCBVQ2hhciBjaCkKK3sKKyAgICBpZiAoaXNBU0NJSVVwcGVyKGNoKSkKKyAgICAgICAg
cmV0dXJuIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwW2NoIC0gJ0EnXTsKKworICAgIGlmIChpc0FT
Q0lJTG93ZXIoY2gpKQorICAgICAgICByZXR1cm4gbG93ZXJDYXNlVG9GaWVsZFR5cGVNYXBbY2gg
LSAnYSddOworCisgICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMaXRlcmFsOwor
fQorCitib29sIERhdGVUaW1lRm9ybWF0OjpwYXJzZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgVG9r
ZW5IYW5kbGVyJiB0b2tlbkhhbmRsZXIpCit7CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIFN0
YXRlSW5RdW90ZSwKKyAgICAgICAgU3RhdGVJblF1b3RlUXVvdGUsCisgICAgICAgIFN0YXRlTGl0
ZXJhbCwKKyAgICAgICAgU3RhdGVRdW90ZSwKKyAgICAgICAgU3RhdGVTeW1ib2wsCisgICAgfSBz
dGF0ZSA9IFN0YXRlTGl0ZXJhbDsKKworICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUgPSBGaWVsZFR5
cGVMaXRlcmFsOworICAgIFN0cmluZ0J1aWxkZXIgbGl0ZXJhbEJ1ZmZlcjsKKyAgICBpbnQgZmll
bGRDb3VudGVyID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHNv
dXJjZS5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBVQ2hhciBjaCA9IHNvdXJj
ZVtpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZUlu
UXVvdGU6CisgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVJblF1b3RlUXVvdGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5kKGNoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3RhdGVJblF1b3RlUXVvdGU6CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5k
KCdcJycpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVJblF1b3RlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWVsZFR5cGUgPSBt
YXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7CisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09
IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAgICAg
ICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZUxpdGVyYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
dG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTeW1i
b2w7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0YXRlTGl0ZXJhbDoKKyAg
ICAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZVF1b3RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmaWVsZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7CisgICAgICAgICAg
ICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVy
YWwpIHsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsaXRlcmFs
QnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0
ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGxpdGVyYWxC
dWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRDb3VudGVy
ID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTeW1ib2w7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFN0YXRlUXVvdGU6CisgICAgICAgICAgICBsaXRlcmFsQnVmZmVy
LmFwcGVuZChjaCk7CisgICAgICAgICAgICBzdGF0ZSA9IGNoID09ICdcJycgPyBTdGF0ZUxpdGVy
YWwgOiBTdGF0ZUluUXVvdGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0
YXRlU3ltYm9sOiB7CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUlu
dmFsaWQpOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRlcmFs
KTsKKyAgICAgICAgICAgIEFTU0VSVChsaXRlcmFsQnVmZmVyLmlzRW1wdHkoKSk7CisKKyAgICAg
ICAgICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUyID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gp
OworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZTIgPT0gRmllbGRUeXBlSW52YWxpZCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0g
ZmllbGRUeXBlMikgeworICAgICAgICAgICAgICAgICsrZmllbGRDb3VudGVyOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbkhhbmRsZXIu
dmlzaXRGaWVsZChmaWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisKKyAgICAgICAgICAgIGlmIChm
aWVsZFR5cGUyID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2gg
PT0gJ1wnJykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVF1b3RlOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVu
ZChjaCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIGZpZWxkVHlwZSA9IGZpZWxk
VHlwZTI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKKworICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlTGl0ZXJhbDoKKyAgICBjYXNlIFN0YXRlSW5RdW90
ZVF1b3RlOgorICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkKKyAgICAgICAgICAg
IHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFN0YXRlUXVvdGU6CisgICAgY2FzZSBTdGF0
ZUluUXVvdGU6CisgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKQorICAgICAgICAg
ICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIFN0YXRlU3ltYm9sOgorICAgICAgICBB
U1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUxpdGVyYWwpOworICAgICAgICBBU1NFUlQoIWxp
dGVyYWxCdWZmZXIubGVuZ3RoKCkpOworICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRGaWVsZChm
aWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgaXNBU0NJSUFscGhhYmV0T3JRdW90ZShVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4gaXNB
U0NJSUFscGhhKGNoKSB8fCBjaCA9PSAnXCcnOworfQorCit2b2lkIERhdGVUaW1lRm9ybWF0Ojpx
dW90ZUFuZEFwcGVuZExpdGVyYWwoY29uc3QgU3RyaW5nJiBsaXRlcmFsLCBTdHJpbmdCdWlsZGVy
JiBidWZmZXIpCit7CisgICAgaWYgKGxpdGVyYWwubGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGxpdGVyYWwuZmluZChpc0FTQ0lJQWxwaGFiZXRPclF1b3RlKSA9PSBu
b3RGb3VuZCkgeworICAgICAgICBidWZmZXIuYXBwZW5kKGxpdGVyYWwpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGxpdGVyYWwuZmluZCgnXCcnKSA9PSBub3RGb3VuZCkgewor
ICAgICAgICBidWZmZXIuYXBwZW5kKCdcJycsIGxpdGVyYWwsICdcJycpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpdGVyYWwubGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBpZiAobGl0ZXJhbFtpXSA9PSAnXCcnKQorICAgICAgICAgICAg
YnVmZmVyLmFwcGVuZCgiJyciKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCdcJycsIFN0cmluZyB7IGxpdGVyYWwuc3Vic3RyaW5nKGkpIH0ucmVwbGFjZSgnXCcn
LCAiJyciKSwgJ1wnJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC90ZXh0L0RhdGVUaW1lRm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQwOTdjMGY4Zjc3OTUyM2U4YjEx
OTg0MzM1MzIxZGExMjg1NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9U
WVBFUykKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8g
RGF0ZVRpbWVGb3JtYXQgcGFyc2VzIGRhdGUgdGltZSBmb3JtYXQgZGVmaW5lZCBpbiBVbmljb2Rl
IFRlY2huaWNhbAorLy8gc3RhbmRhcmQgMzUsIExvY2FsZSBEYXRhIE1hcmt1cCBMYW5ndWFnZSAo
TERNTClbMV0uCisvLyBbMV0gTERNTCBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3Ry
MzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5zCitjbGFzcyBEYXRlVGltZUZvcm1hdCB7Citw
dWJsaWM6CisgICAgZW51bSBGaWVsZFR5cGUgeworICAgICAgICBGaWVsZFR5cGVJbnZhbGlkLAor
ICAgICAgICBGaWVsZFR5cGVMaXRlcmFsLAorCisgICAgICAgIC8vIEVyYTogQUQKKyAgICAgICAg
RmllbGRUeXBlRXJhID0gJ0cnLAorCisgICAgICAgIC8vIFllYXI6IDE5OTYKKyAgICAgICAgRmll
bGRUeXBlWWVhciA9ICd5JywKKyAgICAgICAgRmllbGRUeXBlWWVhck9mV2Vla09mWWVhciA9ICdZ
JywKKyAgICAgICAgRmllbGRUeXBlRXh0ZW5kZWRZZWFyID0gJ3UnLAorCisgICAgICAgIC8vIFF1
YXRlcjogUTIKKyAgICAgICAgRmllbGRUeXBlUXVhdGVyID0gJ1EnLAorICAgICAgICBGaWVsZFR5
cGVRdWF0ZXJTdGFuZEFsb25lID0gJ3EnLAorCisgICAgICAgIC8vIE1vbnRoOiBTZXB0ZW1iZXIK
KyAgICAgICAgRmllbGRUeXBlTW9udGggPSAnTScsCisgICAgICAgIEZpZWxkVHlwZU1vbnRoU3Rh
bmRBbG9uZSA9ICdMJywKKworICAgICAgICAvLyBXZWVrOiA0MgorICAgICAgICBGaWVsZFR5cGVX
ZWVrT2ZZZWFyID0gJ3cnLAorICAgICAgICBGaWVsZFR5cGVXZWVrT2ZNb250aCA9ICdXJywKKwor
ICAgICAgICAvLyBEYXk6IDEyCisgICAgICAgIEZpZWxkVHlwZURheU9mTW9udGggPSAnZCcsCisg
ICAgICAgIEZpZWxkVHlwZURheU9mWWVhciA9ICdEJywKKyAgICAgICAgRmllbGRUeXBlRGF5T2ZX
ZWVrSW5Nb250aCA9ICdGJywKKyAgICAgICAgRmllbGRUeXBlTW9kaWZpZWRKdWxpYW5EYXkgPSAn
ZycsCisKKyAgICAgICAgLy8gV2VlayBEYXk6IFR1ZXNkYXkKKyAgICAgICAgRmllbGRUeXBlRGF5
T2ZXZWVrID0gJ0UnLAorICAgICAgICBGaWVsZFR5cGVMb2NhbERheU9mV2VlayA9ICdlJywKKyAg
ICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFsb24gPSAnYycsCisKKyAgICAgICAg
Ly8gUGVyaW9kOiBBTSBvciBQTQorICAgICAgICBGaWVsZFR5cGVQZXJpb2QgPSAnYScsCisKKyAg
ICAgICAgLy8gSG91cjogNworICAgICAgICBGaWVsZFR5cGVIb3VyMTIgPSAnaCcsCisgICAgICAg
IEZpZWxkVHlwZUhvdXIyMyA9ICdIJywKKyAgICAgICAgRmllbGRUeXBlSG91cjExID0gJ0snLAor
ICAgICAgICBGaWVsZFR5cGVIb3VyMjQgPSAnaycsCisKKyAgICAgICAgLy8gTWludXRlOiA1OQor
ICAgICAgICBGaWVsZFR5cGVNaW51dGUgPSAnbScsCisKKyAgICAgICAgLy8gU2Vjb25kOiAxMgor
ICAgICAgICBGaWVsZFR5cGVTZWNvbmQgPSAncycsCisgICAgICAgIEZpZWxkVHlwZUZyYWN0aW9u
YWxTZWNvbmQgPSAnUycsCisgICAgICAgIEZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5ID0gJ0En
LAorCisgICAgICAgIC8vIFpvbmU6IFBEVAorICAgICAgICBGaWVsZFR5cGVab25lID0gJ3onLAor
ICAgICAgICBGaWVsZFR5cGVSRkM4MjJab25lID0gJ1onLAorICAgICAgICBGaWVsZFR5cGVOb25M
b2NhdGlvblpvbmUgPSAndicsCisgICAgfTsKKworICAgIGNsYXNzIFRva2VuSGFuZGxlciB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Ub2tlbkhhbmRsZXIoKSA9IGRlZmF1bHQ7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxkKEZpZWxkVHlwZSwgaW50IG51bWJlck9mUGF0
dGVybkNoYXJhY3RlcnMpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0TGl0ZXJhbChj
b25zdCBTdHJpbmcmKSA9IDA7CisgICAgfTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNj
ZWVkZWQsIGZhbHNlIGlmIGZhaWxlZC4KKyAgICBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBTdHJp
bmcmLCBUb2tlbkhhbmRsZXImKTsKKyAgICBzdGF0aWMgdm9pZCBxdW90ZUFuZEFwcGVuZExpdGVy
YWwoY29uc3QgU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
UEFMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0Zv
bnRSZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvRm9udFJlbmRl
cmluZ01vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTQxMjI0YWFmNmUwOGQ4NmM0ZDNjYzBjNGYxYzE2ZmE4
MjE0ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0Zv
bnRSZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KKworbmFtZXNwYWNlIFBBTCB7CisK
Ky8vIFRoaXMgc2V0dGluZyBpcyB1c2VkIHRvIHByb3ZpZGUgd2F5cyBvZiBzd2l0Y2hpbmcgYmV0
d2VlbiBtdWx0aXBsZSByZW5kZXJpbmcgbW9kZXMgdGhhdCBtYXkgaGF2ZSBkaWZmZXJlbnQKKy8v
IG1ldHJpY3MuIEl0IGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9u
IFdpbmRvd3MuCitlbnVtIGNsYXNzIEZvbnRSZW5kZXJpbmdNb2RlIDogdWludDhfdCB7CisgICAg
Tm9ybWFsLAorICAgIEFsdGVybmF0ZQorfTsKKworfQorCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRSZW5kZXJpbmdNb2RlPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgUEFMOjpGb250UmVuZGVyaW5nTW9k
ZSwKKyAgICAgICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsLAorICAgICAgICBQQUw6
OkZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvSHlwaGVuYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9IeXBoZW5hdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQwMzMwOTQ4NGY0ZjI1OTliNDdiYzJmODc4YzUxNjMzYWQ4ZDIxYjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvSHlwaGVuYXRpb24uaApAQCAtMCww
ICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx1bmljb2Rl
L3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBQQUwgewor
CitpbmxpbmUgc3RhdGljIGJvb2wgZW5vdWdoV2lkdGhGb3JIeXBoZW5hdGlvbihmbG9hdCBhdmFp
bGFibGVXaWR0aCwgZmxvYXQgZm9udFBpeGVsU2l6ZSkKK3sKKyAgICAvLyBJZiB0aGUgbWF4aW11
bSB3aWR0aCBhdmFpbGFibGUgZm9yIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBoeXBoZW4gaXMgc21h
bGwsIHRoZW4gaXQgaXMgdmVyeSB1bmxpa2VseQorICAgIC8vIHRoYXQgYW4gaHlwaGVuYXRpb24g
b3Bwb3J0dW5pdHkgZXhpc3RzLCBzbyBkbyBub3QgYm90aGVyIHRvIGxvb2sgZm9yIGl0LgorICAg
IHJldHVybiBhdmFpbGFibGVXaWR0aCA+IGZvbnRQaXhlbFNpemUgKiA1IC8gNDsKKworfQorYm9v
bCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CitzaXpl
X3QgbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXcsIHNpemVfdCBiZWZvcmVJbmRleCwgY29u
c3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CisKK30gLy8gbmFtZXNwYWNlIFBBTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mM2ZjZjI0ZDBkNWQyYzRlNjNiNjFmN2Y0NThlMzA3YjVhYTlhNWUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5j
cHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXVvdGVk
UHJpbnRhYmxlLmgiCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4
aW11bUxpbmVMZW5ndGggPSA3NjsKKworc3RhdGljIGNvbnN0IGNoYXIgY3JsZkxpbmVFbmRpbmdb
XSA9ICJcclxuIjsKKworc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGNv
bnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRleCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgaW5w
dXRMZW5ndGgpOworICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xuJykKKyAgICAgICAgcmV0dXJu
IDE7IC8vIFNpbmdsZSBMRi4KKworICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xyJykgeworICAg
ICAgICBpZiAoKGluZGV4ICsgMSkgPT0gaW5wdXRMZW5ndGggfHwgaW5wdXRbaW5kZXggKyAxXSAh
PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8vIFNpbmdsZSBDUiAoQ2xhc3NpYyBNYWMg
T1MpLgorICAgICAgICByZXR1cm4gMjsgLy8gQ1ItTEYuCisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFBy
aW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQor
eworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW5wdXRMZW5ndGgpOworICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CisgICAgICAgIGJvb2wg
aXNMYXN0Q2hhcmFjdGVyID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKKyAgICAgICAgdWludDhf
dCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CisgICAgICAgIGJvb2wgcmVxdWlyZXNFbmNv
ZGluZyA9IGZhbHNlOworICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFyYWN0
ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCisgICAgICAgIGlmICgoY3VycmVudENoYXJhY3Rl
ciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJlbnRDaGFyYWN0ZXIgPT0g
Jz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCisgICAgICAgICAgICByZXF1aXJlc0Vu
Y29kaW5nID0gdHJ1ZTsKKworICAgICAgICAvLyBTcGFjZSBhbmQgdGFiIGNoYXJhY3RlcnMgaGF2
ZSB0byBiZSBlbmNvZGVkIGlmIHRoZXkgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgorICAg
ICAgICBpZiAoIXJlcXVpcmVzRW5jb2RpbmcgJiYgKGN1cnJlbnRDaGFyYWN0ZXIgPT0gJ1x0JyB8
fCBjdXJyZW50Q2hhcmFjdGVyID09ICcgJykgJiYgKGlzTGFzdENoYXJhY3RlciB8fCBsZW5ndGhP
ZkxpbmVFbmRpbmdBdEluZGV4KGlucHV0LCBpbnB1dExlbmd0aCwgaSArIDEpKSkKKyAgICAgICAg
ICAgIHJlcXVpcmVzRW5jb2RpbmcgPSB0cnVlOworCisgICAgICAgIC8vIEVuZCBvZiBsaW5lIHNo
b3VsZCBiZSBjb252ZXJ0ZWQgdG8gQ1ItTEYgc2VxdWVuY2VzLgorICAgICAgICBpZiAoIWlzTGFz
dENoYXJhY3RlcikgeworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZyA9IGxl
bmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoaW5wdXQsIGlucHV0TGVuZ3RoLCBpKTsKKyAgICAgICAg
ICAgIGlmIChsZW5ndGhPZkxpbmVFbmRpbmcpIHsKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5k
KGNybGZMaW5lRW5kaW5nLCBzdHJsZW4oY3JsZkxpbmVFbmRpbmcpKTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50TGluZUxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgaSArPSAobGVuZ3RoT2ZM
aW5lRW5kaW5nIC0gMSk7IC8vIC0xIGJlY2F1c2Ugd2UnbGwgKysgaW4gdGhlIGZvcigpIGFib3Zl
LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgc2l6ZV90IGxlbmd0aE9mRW5jb2RlZENoYXJhY3RlciA9IDE7CisgICAgICAgIGlm
IChyZXF1aXJlc0VuY29kaW5nKQorICAgICAgICAgICAgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVy
ICs9IDI7CisgICAgICAgIGlmICghaXNMYXN0Q2hhcmFjdGVyKQorICAgICAgICAgICAgbGVuZ3Ro
T2ZFbmNvZGVkQ2hhcmFjdGVyICs9IDE7IC8vICsgMSBmb3IgdGhlID0gKHNvZnQgbGluZSBicmVh
aykuCisKKyAgICAgICAgLy8gSW5zZXJ0IGEgc29mdCBsaW5lIGJyZWFrIGlmIG5lY2Vzc2FyeS4K
KyAgICAgICAgaWYgKGN1cnJlbnRMaW5lTGVuZ3RoICsgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVy
ID4gbWF4aW11bUxpbmVMZW5ndGgpIHsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoJz0nKTsKKyAg
ICAgICAgICAgIG91dC5hcHBlbmQoY3JsZkxpbmVFbmRpbmcsIHN0cmxlbihjcmxmTGluZUVuZGlu
ZykpOworICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGggPSAwOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRmluYWxseSwgaW5zZXJ0IHRoZSBhY3R1YWwgY2hhcmFjdGVyKHMpLgorICAgICAg
ICBpZiAocmVxdWlyZXNFbmNvZGluZykgeworICAgICAgICAgICAgb3V0LmFwcGVuZCgnPScpOwor
ICAgICAgICAgICAgb3V0LmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjdXJyZW50
Q2hhcmFjdGVyKSk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhl
eERpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3Ro
ICs9IDM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGN1cnJlbnRD
aGFyYWN0ZXIpOworICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBvdXQ7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4g
cXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OworICAgIGlm
ICghZGF0YUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG91dDsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7CisgICAgICAgIGNoYXIgY3VycmVudENoYXJhY3Rl
ciA9IGRhdGFbaV07CisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICE9ICc9JykgeworICAg
ICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGFyZSBkZWFsaW5nIHdpdGggYSAnPXh4JyBz
ZXF1ZW5jZS4KKyAgICAgICAgaWYgKGRhdGFMZW5ndGggLSBpIDwgMykgeworICAgICAgICAgICAg
Ly8gVW5maW5pc2hlZCA9IHNlcXVlbmNlLCBhcHBlbmQgYXMgaXMuCisgICAgICAgICAgICBvdXQu
YXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgY2hhciB1cHBlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKKyAgICAgICAgY2hh
ciBsb3dlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKKyAgICAgICAgaWYgKHVwcGVyQ2hhcmFjdGVy
ID09ICdccicgJiYgbG93ZXJDaGFyYWN0ZXIgPT0gJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KHVwcGVyQ2hhcmFjdGVyKSB8fCAhaXNB
U0NJSUhleERpZ2l0KGxvd2VyQ2hhcmFjdGVyKSkgeworICAgICAgICAgICAgLy8gSW52YWxpZCBz
ZXF1ZW5jZSwgPSBmb2xsb3dlZCBieSBub24gaGV4IGRpZ2l0cywganVzdCBpbnNlcnQgdGhlIGNo
YXJhY3RlcnMgYXMgaXMuCisgICAgICAgICAgICBvdXQuYXBwZW5kKCc9Jyk7CisgICAgICAgICAg
ICBvdXQuYXBwZW5kKHVwcGVyQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQobG93
ZXJDaGFyYWN0ZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
b3V0LmFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVy
KSk7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9RdW90ZWRQcmludGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9RdW90ZWRQcmludGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjFiYTUzMDQxMTIxMzdj
ZDc3NWZhOTJiODFlNDAxMGQ3MzNhODZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitW
ZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKKworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25z
dCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNv
ZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNTQ2YzJiMzIyNDU4NzFhYWRkOWM3MTJjZWY0MDJhMjY1OWMxMDQyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAg
LTAsMCArMSwyNzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTZWdtZW50ZWRTdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KKworbmFtZXNwYWNlIFBBTCB7
CisKK2lubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjphcHBlbmRUbyhTdHJp
bmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAoreworICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5n
KHN0cmluZywgc3RyaW5nLmxlbmd0aCgpIC0gbGVuZ3RoLCBsZW5ndGgpOworfQorCitTZWdtZW50
ZWRTdHJpbmcmIFNlZ21lbnRlZFN0cmluZzo6b3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYmIG90
aGVyKQoreworICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUob3RoZXIubV9jdXJyZW50
U3Vic3RyaW5nKTsKKyAgICBtX290aGVyU3Vic3RyaW5ncyA9IFdURk1vdmUob3RoZXIubV9vdGhl
clN1YnN0cmluZ3MpOworCisgICAgbV9pc0Nsb3NlZCA9IG90aGVyLm1faXNDbG9zZWQ7CisKKyAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBvdGhlci5tX2N1cnJlbnRDaGFyYWN0ZXI7CisKKyAgICBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgPSBvdGhl
ci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmc7Cisg
ICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG90aGVy
Lm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7CisgICAgbV9j
dXJyZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CisKKyAgICBtX2Zhc3RQYXRoRmxhZ3Mg
PSBvdGhlci5tX2Zhc3RQYXRoRmxhZ3M7CisgICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGlu
ZU51bWJlckZ1bmN0aW9uID0gb3RoZXIubV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJl
ckZ1bmN0aW9uOworICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9IG90
aGVyLm1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbjsKKworICAgIG90aGVyLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3Vuc2lnbmVkIFNlZ21lbnRlZFN0cmlu
Zzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2N1cnJlbnRTdWJz
dHJpbmcubGVuZ3RoOworICAgIGZvciAoYXV0byYgc3Vic3RyaW5nIDogbV9vdGhlclN1YnN0cmlu
Z3MpCisgICAgICAgIGxlbmd0aCArPSBzdWJzdHJpbmcubGVuZ3RoOworICAgIHJldHVybiBsZW5n
dGg7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQor
eworICAgIGlmICghbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVO
dW1iZXJzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3Ry
aW5ncykKKyAgICAgICAgc3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7
CisgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKK30KKwordm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmNsZWFyKCkKK3sKKyAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsK
KyAgICBtX290aGVyU3Vic3RyaW5ncy5jbGVhcigpOworCisgICAgbV9pc0Nsb3NlZCA9IGZhbHNl
OworCisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gMDsKKworICAgIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyA9IDA7CisgICAgbV9udW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IDA7CisgICAgbV9jdXJyZW50TGlu
ZSA9IDA7CisKKyAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5n
KCk7Cit9CisKK2lubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kU3Vic3RyaW5nKFN1
YnN0cmluZyYmIHN1YnN0cmluZykKK3sKKyAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAgIGlm
ICghc3Vic3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRT
dWJzdHJpbmcubGVuZ3RoKQorICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RGTW92
ZShzdWJzdHJpbmcpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5udW1i
ZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOworICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcgPSBX
VEZNb3ZlKHN1YnN0cmluZyk7CisgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVu
dFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5j
dGlvblBvaW50ZXJzKCk7CisgICAgfQorfQorCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6cHVzaEJh
Y2soU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBhIHN1YnN0cmlu
ZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgorICAgIEFTU0VSVChzdHJpbmcubGVuZ3RoKCkpOworCisg
ICAgLy8gVGhlIG5ldyBzdWJzdHJpbmcgd2Ugd2lsbCBjcmVhdGUgd29uJ3QgaGF2ZSB0aGUgZG9O
b3RFeGNsdWRlTGluZU51bWJlcnMgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gVGhhdCB3YXMg
bG9zdCB3aGVuIHRoZSBjaGFyYWN0ZXJzIHdlcmUgY29uc3VtZWQgYmVmb3JlIHB1c2hpbmcgdGhl
bSBiYWNrLiBCdXQgdGhpcyBkb2VzCisgICAgLy8gbm90IG1hdHRlciwgYmVjYXVzZSBjbGllbnRz
IG5ldmVyIHVzZSB0aGlzIGZvciBuZXdsaW5lcy4gQ2F0Y2ggdGhhdCB3aXRoIHRoaXMgYXNzZXJ0
aW9uLgorICAgIEFTU0VSVCghc3RyaW5nLmNvbnRhaW5zKCdcbicpKTsKKworICAgIC8vIFRoZSBj
aGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgbXVzdCBiZSBwcmV2aW91c2x5IGNvbnN1bWVkIGNoYXJh
Y3RlcnMgZnJvbSB0aGlzIHNlZ21lbnRlZCBzdHJpbmcuCisgICAgQVNTRVJUKHN0cmluZy5sZW5n
dGgoKSA8PSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKKworICAgIG1fbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRTdWJz
dHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICBpZiAobV9jdXJyZW50U3Vi
c3RyaW5nLmxlbmd0aCkKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MucHJlcGVuZChXVEZNb3Zl
KG1fY3VycmVudFN1YnN0cmluZykpOworICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUo
c3RyaW5nKTsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRT
dWJzdHJpbmcgLT0gbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aDsKKyAgICBtX2N1cnJlbnRDaGFy
YWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOworICAgIHVwZGF0
ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpj
bG9zZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKKyAgICBtX2lzQ2xvc2VkID0gdHJ1
ZTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nIHsgc3RyaW5nLm1f
Y3VycmVudFN1YnN0cmluZyB9KTsKKyAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5t
X290aGVyU3Vic3RyaW5ncykKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKHN1YnN0
cmluZyk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU2VnbWVudGVkU3RyaW5n
JiYgc3RyaW5nKQoreworICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZy5tX2N1cnJl
bnRTdWJzdHJpbmcpKTsKKyAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290aGVy
U3Vic3RyaW5ncykKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKFdURk1vdmUoc3Vi
c3RyaW5nKSk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU3RyaW5nJiYgc3Ry
aW5nKQoreworICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCit2b2lk
IFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGFw
cGVuZFN1YnN0cmluZyhTdHJpbmcgeyBzdHJpbmcgfSk7Cit9CisKK1N0cmluZyBTZWdtZW50ZWRT
dHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAg
ICBtX2N1cnJlbnRTdWJzdHJpbmcuYXBwZW5kVG8ocmVzdWx0KTsKKyAgICBmb3IgKGF1dG8mIHN1
YnN0cmluZyA6IG1fb3RoZXJTdWJzdHJpbmdzKQorICAgICAgICBzdWJzdHJpbmcuYXBwZW5kVG8o
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCkKK3sKKyAgICBt
X2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rl
cjE2OworICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7Cit9CisKK3ZvaWQgU2VnbWVudGVk
U3RyaW5nOjphZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2KCkKK3sKKyAgICBBU1NFUlQobV9j
dXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKTsKKyAgICBwcm9jZXNzUG9z
c2libGVOZXdsaW5lKCk7CisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJyZW50U3Vi
c3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIxNjsKKyAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgp
OworfQorCitpbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hh
cmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpCit7CisgICAgQVNTRVJU
KG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSk7CisgICAgaWYgKG1fb3RoZXJTdWJzdHJp
bmdzLmlzRW1wdHkoKSkgeworICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsK
KyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gMDsKKyAgICAgICAgdXBkYXRlQWR2YW5jZUZ1
bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyAr
PSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICBt
X2N1cnJlbnRTdWJzdHJpbmcgPSBtX290aGVyU3Vic3RyaW5ncy50YWtlRmlyc3QoKTsKKyAgICAv
LyBJZiB3ZSd2ZSBwcmV2aW91c2x5IGNvbnN1bWVkIHNvbWUgY2hhcmFjdGVycyBvZiB0aGUgbm9u
LWN1cnJlbnQgc3RyaW5nLCB3ZSBub3cgYWNjb3VudCBmb3IgdGhvc2UKKyAgICAvLyBjaGFyYWN0
ZXJzIGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLCBub3QgYXMgcGFydCBvZiAicHJpb3Ig
dG8gY3VycmVudCBzdHJpbmcuIgorICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlv
clRvQ3VycmVudFN1YnN0cmluZyAtPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKTsKKyAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJp
bmcuY3VycmVudENoYXJhY3RlcigpOworICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJz
KCk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3Rl
clN1YnN0cmluZygpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0g
MSk7CisgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVy
cyk7CisgICAgcHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpOworICAgIGFkdmFuY2VQYXN0U2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOworfQorCit2b2lk
IFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5KCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVu
dFN1YnN0cmluZy5sZW5ndGgpOworICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5pc0VtcHR5
KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFjdGVyKTsKK30KKwordm9pZCBTZWdtZW50
ZWRTdHJpbmc6OnVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAx
KTsKKyAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOworICAgIG1fYWR2YW5jZVdpdGhv
dXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQ
YXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsKKyAg
ICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQorICAgICAg
ICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZzsKKyAgICBlbHNlCisgICAgICAg
IG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6
OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51
bWJlcjsKK30KKworT3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2N1
cnJlbnRMaW5lKTsKK30KKworT3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRD
b2x1bW4oKSBjb25zdAoreworICAgIHJldHVybiBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2Vk
SW50KG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgLSBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lKTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNl
dEN1cnJlbnRQb3NpdGlvbihPcmRpbmFsTnVtYmVyIGxpbmUsIE9yZGluYWxOdW1iZXIgY29sdW1u
QWZ0cmVQcm9sb2csIGludCBwcm9sb2dMZW5ndGgpCit7CisgICAgbV9jdXJyZW50TGluZSA9IGxp
bmUuemVyb0Jhc2VkSW50KCk7CisgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9y
VG9DdXJyZW50TGluZSA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgKyBwcm9sb2dMZW5n
dGggLSBjb2x1bW5BZnRyZVByb2xvZy56ZXJvQmFzZWRJbnQoKTsKK30KKworU2VnbWVudGVkU3Ry
aW5nOjpBZHZhbmNlUGFzdFJlc3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2xvd0Nh
c2UoY29uc3QgY2hhciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCit7
CisgICAgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aCA9IDEwOworICAgIEFTU0VSVCghc3Ry
Y2hyKGxpdGVyYWwsICdcbicpKTsKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihsaXRlcmFsKTsK
KyAgICBBU1NFUlQobGVuZ3RoIDw9IG1heExlbmd0aCk7CisgICAgaWYgKGxlbmd0aCA+IHRoaXMt
Pmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gTm90RW5vdWdoQ2hhcmFjdGVyczsKKyAgICBVQ2hh
ciBjb25zdW1lZENoYXJhY3RlcnNbbWF4TGVuZ3RoXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2N1cnJlbnRD
aGFyYWN0ZXI7CisgICAgICAgIGlmIChjaGFyYWN0ZXJNaXNtYXRjaChjaGFyYWN0ZXIsIGxpdGVy
YWxbaV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpIHsKKyAgICAgICAgICAgIGlmIChpKQor
ICAgICAgICAgICAgICAgIHB1c2hCYWNrKFN0cmluZyB7IGNvbnN1bWVkQ2hhcmFjdGVycywgaSB9
KTsKKyAgICAgICAgICAgIHJldHVybiBEaWROb3RNYXRjaDsKKyAgICAgICAgfQorICAgICAgICBh
ZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzW2ldID0g
Y2hhcmFjdGVyOworICAgIH0KKyAgICByZXR1cm4gRGlkTWF0Y2g7Cit9CisKK3ZvaWQgU2VnbWVu
dGVkU3RyaW5nOjp1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCkK
K3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgpOworICAgIEFTU0VSVCht
X290aGVyU3Vic3RyaW5ncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFj
dGVyKTsKKyAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOworICAgIG1fYWR2YW5jZVdp
dGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VFbXB0eTsKKyAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlRW1wdHk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTIzMDgxYTI5MTY1MGFj
NzU0YTU1NTE2M2ZiYWNkMmM4OTY5Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCkBAIC0wLDAgKzEsMzIzIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8gRklYTUU6IFRo
aXMgc2hvdWxkIG5vdCBzdGFydCB3aXRoICJrIi4KKy8vIEZJWE1FOiBUaGlzIGlzIGEgc2hhcmVk
IHRva2VuaXplciBjb25jZXB0LCBub3QgYSBTZWdtZW50ZWRTdHJpbmcgY29uY2VwdCwgYnV0IHRo
aXMgaXMgdGhlIG9ubHkgY29tbW9uIGhlYWRlciBmb3Igbm93LgorY29uc3RleHByIExDaGFyIGtF
bmRPZkZpbGVNYXJrZXIgPSAwOworCitjbGFzcyBTZWdtZW50ZWRTdHJpbmcgeworcHVibGljOgor
ICAgIFNlZ21lbnRlZFN0cmluZygpID0gZGVmYXVsdDsKKyAgICBTZWdtZW50ZWRTdHJpbmcoU3Ry
aW5nJiYpOworICAgIFNlZ21lbnRlZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworICAgIFNlZ21l
bnRlZFN0cmluZyhTZWdtZW50ZWRTdHJpbmcmJikgPSBkZWxldGU7CisgICAgU2VnbWVudGVkU3Ry
aW5nKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gZGVsZXRlOworCisgICAgU2VnbWVudGVkU3Ry
aW5nJiBvcGVyYXRvcj0oU2VnbWVudGVkU3RyaW5nJiYpOworICAgIFNlZ21lbnRlZFN0cmluZyYg
b3BlcmF0b3I9KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
Y2xlYXIoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIGFwcGVuZChTZWdtZW50ZWRT
dHJpbmcmJik7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CisKKyAg
ICB2b2lkIGFwcGVuZChTdHJpbmcmJik7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7
CisKKyAgICB2b2lkIHB1c2hCYWNrKFN0cmluZyYmKTsKKworICAgIHZvaWQgc2V0RXhjbHVkZUxp
bmVOdW1iZXJzKCk7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aDsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworCisg
ICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbG9zZWQ7IH0KKworICAgIHZv
aWQgYWR2YW5jZSgpOworICAgIHZvaWQgYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7IC8vIEZhc3Rl
ciB0aGFuIGNhbGxpbmcgYWR2YW5jZSB3aGVuIHdlIGtub3cgdGhlIGN1cnJlbnQgY2hhcmFjdGVy
IGlzIG5vdCBhIG5ld2xpbmUuCisgICAgdm9pZCBhZHZhbmNlUGFzdE5ld2xpbmUoKTsgLy8gRmFz
dGVyIHRoYW4gY2FsbGluZyBhZHZhbmNlIHdoZW4gd2Uga25vdyB0aGUgY3VycmVudCBjaGFyYWN0
ZXIgaXMgYSBuZXdsaW5lLgorCisgICAgZW51bSBBZHZhbmNlUGFzdFJlc3VsdCB7IERpZE5vdE1h
dGNoLCBEaWRNYXRjaCwgTm90RW5vdWdoQ2hhcmFjdGVycyB9OworICAgIHRlbXBsYXRlPHVuc2ln
bmVkIGxlbmd0aD4gQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxp
dGVyYWwpW2xlbmd0aF0pIHsgcmV0dXJuIGFkdmFuY2VQYXN0PGxlbmd0aCwgZmFsc2U+KGxpdGVy
YWwpOyB9CisgICAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBBZHZhbmNlUGFzdFJlc3VsdCBh
ZHZhbmNlUGFzdExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyICgmbGl0ZXJhbClb
bGVuZ3RoXSkgeyByZXR1cm4gYWR2YW5jZVBhc3Q8bGVuZ3RoLCB0cnVlPihsaXRlcmFsKTsgfQor
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdDsKKworICAg
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgVUNoYXIgY3VycmVudENoYXJhY3Rlcigp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQorCisgICAgT3JkaW5hbE51bWJl
ciBjdXJyZW50Q29sdW1uKCkgY29uc3Q7CisgICAgT3JkaW5hbE51bWJlciBjdXJyZW50TGluZSgp
IGNvbnN0OworCisgICAgLy8gU2V0cyB2YWx1ZSBvZiBsaW5lL2NvbHVtbiB2YXJpYWJsZXMuIENv
bHVtbiBpcyBzcGVjaWZpZWQgaW5kaXJlY3RseSBieSBhIHBhcmFtZXRlciBjb2x1bW5BZnRlclBy
b2xvZworICAgIC8vIHdoaWNoIGlzIGEgdmFsdWUgb2YgY29sdW1uIHRoYXQgd2Ugc2hvdWxkIGdl
dCBhZnRlciBhIHByb2xvZyAoZmlyc3QgcHJvbG9nTGVuZ3RoIGNoYXJhY3RlcnMpIGhhcyBiZWVu
IGNvbnN1bWVkLgorICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKE9yZGluYWxOdW1iZXIgbGlu
ZSwgT3JkaW5hbE51bWJlciBjb2x1bW5BZnRlclByb2xvZywgaW50IHByb2xvZ0xlbmd0aCk7CisK
K3ByaXZhdGU6CisgICAgc3RydWN0IFN1YnN0cmluZyB7CisgICAgICAgIFN1YnN0cmluZygpID0g
ZGVmYXVsdDsKKyAgICAgICAgU3Vic3RyaW5nKFN0cmluZyYmKTsKKworICAgICAgICBVQ2hhciBj
dXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7CisgICAgICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXJQ
cmVJbmNyZW1lbnQoKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGVuZFRvKFN0cmluZ0J1aWxkZXImKSBjb25z
dDsKKworICAgICAgICBTdHJpbmcgc3RyaW5nOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggeyAw
IH07CisgICAgICAgIGJvb2wgaXM4Qml0OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBj
b25zdCBMQ2hhciogY3VycmVudENoYXJhY3Rlcjg7CisgICAgICAgICAgICBjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcjE2OworICAgICAgICB9OworICAgICAgICBib29sIGRvTm90RXhjbHVk
ZUxpbmVOdW1iZXJzIHsgdHJ1ZSB9OworICAgIH07CisKKyAgICBlbnVtIEZhc3RQYXRoRmxhZ3Mg
eworICAgICAgICBOb0Zhc3RQYXRoID0gMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVycyA9IDEgPDwgMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2UgPSAxIDw8IDEs
CisgICAgfTsKKworICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5nKFN1YnN0cmluZyYmKTsKKworICAg
IHZvaWQgcHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpOworICAgIHZvaWQgc3RhcnROZXdMaW5lKCk7
CisKKyAgICB2b2lkIGFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7CisgICAgdm9p
ZCBhZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCk7CisgICAgdm9pZCBhZHZhbmNl
QW5kVXBkYXRlTGluZU51bWJlcjE2KCk7CisgICAgdm9pZCBhZHZhbmNlUGFzdFNpbmdsZUNoYXJh
Y3RlclN1YnN0cmluZ1dpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKKyAgICB2b2lkIGFkdmFu
Y2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgdm9pZCBhZHZhbmNlRW1wdHko
KTsKKworICAgIHZvaWQgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKKyAgICB2b2lk
IHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKKyAgICB2b2lk
IHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5n
KCk7CisKKyAgICB2b2lkIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJNaXNtYXRjaChD
aGFyYWN0ZXJUeXBlLCBjaGFyLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7CisgICAg
dGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZT4g
QWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xlbmd0
aF0pOworICAgIEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3QgY2hh
ciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOworCisgICAgU3Vic3Ry
aW5nIG1fY3VycmVudFN1YnN0cmluZzsKKyAgICBEZXF1ZTxTdWJzdHJpbmc+IG1fb3RoZXJTdWJz
dHJpbmdzOworCisgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKKworICAgIFVDaGFyIG1f
Y3VycmVudENoYXJhY3RlciB7IDAgfTsKKworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lIHsgMCB9OworICAg
IGludCBtX2N1cnJlbnRMaW5lIHsgMCB9OworCisgICAgdW5zaWduZWQgY2hhciBtX2Zhc3RQYXRo
RmxhZ3MgeyBOb0Zhc3RQYXRoIH07CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9hZHZh
bmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uKSgpIHsgJlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZUVtcHR5IH07CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9hZHZhbmNl
QW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpIHsgJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5j
ZUVtcHR5IH07Cit9OworCitpbmxpbmUgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OlN1YnN0
cmluZyhTdHJpbmcmJiBwYXNzZWRTdHJpbmcpCisgICAgOiBzdHJpbmcoV1RGTW92ZShwYXNzZWRT
dHJpbmcpKQorICAgICwgbGVuZ3RoKHN0cmluZy5sZW5ndGgoKSkKK3sKKyAgICBpZiAobGVuZ3Ro
KSB7CisgICAgICAgIGlzOEJpdCA9IHN0cmluZy5pbXBsKCktPmlzOEJpdCgpOworICAgICAgICBp
ZiAoaXM4Qml0KQorICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjggPSBzdHJpbmcuaW1wbCgp
LT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJyZW50Q2hhcmFj
dGVyMTYgPSBzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0ZXJz
Q29uc3VtZWQoKSBjb25zdAoreworICAgIHJldHVybiBzdHJpbmcubGVuZ3RoKCkgLSBsZW5ndGg7
Cit9CisKK0FMV0FZU19JTkxJTkUgVUNoYXIgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OmN1
cnJlbnRDaGFyYWN0ZXIoKSBjb25zdAoreworICAgIEFTU0VSVChsZW5ndGgpOworICAgIHJldHVy
biBpczhCaXQgPyAqY3VycmVudENoYXJhY3RlcjggOiAqY3VycmVudENoYXJhY3RlcjE2OworfQor
CitBTFdBWVNfSU5MSU5FIFVDaGFyIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpjdXJyZW50
Q2hhcmFjdGVyUHJlSW5jcmVtZW50KCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoKTsKKyAgICByZXR1
cm4gaXM4Qml0ID8gKisrY3VycmVudENoYXJhY3RlcjggOiAqKytjdXJyZW50Q2hhcmFjdGVyMTY7
Cit9CisKK2lubGluZSBTZWdtZW50ZWRTdHJpbmc6OlNlZ21lbnRlZFN0cmluZyhTdHJpbmcmJiBz
dHJpbmcpCisgICAgOiBtX2N1cnJlbnRTdWJzdHJpbmcoV1RGTW92ZShzdHJpbmcpKQoreworICAg
IGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIG1fY3VycmVudENoYXJh
Y3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVw
ZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7CisgICAgfQorfQorCitpbmxpbmUgU2VnbWVu
dGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgOiBT
ZWdtZW50ZWRTdHJpbmcoU3RyaW5nIHsgc3RyaW5nIH0pCit7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBTZWdtZW50ZWRTdHJpbmc6OmRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCkKK3sKKyAgICBB
U1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA+IDEpOworICAgIGlmIChVTkxJS0VMWSgt
LW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSkpCisgICAgICAgIHVwZGF0ZUFkdmFuY2VG
dW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5l
TnVtYmVyKCkKK3sKKyAgICBpZiAoTElLRUxZKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRBZHZh
bmNlKSkgeworICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJp
bmcuY3VycmVudENoYXJhY3Rlcjg7CisgICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZVdpdGhvdXRV
cGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbikoKTsKK30KKworaW5saW5lIHZvaWQgU2VnbWVudGVk
U3RyaW5nOjpzdGFydE5ld0xpbmUoKQoreworICAgICsrbV9jdXJyZW50TGluZTsKKyAgICBtX251
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKTsKK30KKworaW5saW5lIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpwcm9j
ZXNzUG9zc2libGVOZXdsaW5lKCkKK3sKKyAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID09ICdc
bicpCisgICAgICAgIHN0YXJ0TmV3TGluZSgpOworfQorCitpbmxpbmUgdm9pZCBTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2UoKQoreworICAgIGlmIChMSUtFTFkobV9mYXN0UGF0aEZsYWdzICYgVXNl
OEJpdEFkdmFuY2UpKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3Ro
ID4gMSk7CisgICAgICAgIGJvb2wgbGFzdENoYXJhY3Rlcldhc05ld2xpbmUgPSBtX2N1cnJlbnRD
aGFyYWN0ZXIgPT0gJ1xuJzsKKyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJy
ZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXI4OworICAgICAgICBib29sIGhhdmVPbmVDaGFy
YWN0ZXJMZWZ0ID0gLS1tX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDE7CisgICAgICAgIGlm
IChMSUtFTFkoIShsYXN0Q2hhcmFjdGVyV2FzTmV3bGluZSB8IGhhdmVPbmVDaGFyYWN0ZXJMZWZ0
KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyV2FzTmV3
bGluZSAmICEhKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRBZHZhbmNlQW5kVXBkYXRlTGluZU51
bWJlcnMpKQorICAgICAgICAgICAgc3RhcnROZXdMaW5lKCk7CisgICAgICAgIGlmIChoYXZlT25l
Q2hhcmFjdGVyTGVmdCkKKyAgICAgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJz
Rm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAodGhpcy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbikoKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROb25OZXds
aW5lKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50Q2hhcmFjdGVyICE9ICdcbicpOworICAgIGFk
dmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Cit9CisKK2lubGluZSB2b2lkIFNlZ21l
bnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROZXdsaW5lKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50
Q2hhcmFjdGVyID09ICdcbicpOworICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4g
MSkgeworICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1i
ZXJzKQorICAgICAgICAgICAgc3RhcnROZXdMaW5lKCk7CisgICAgICAgIG1fY3VycmVudENoYXJh
Y3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyUHJlSW5jcmVtZW50KCk7
CisgICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiko
KTsKK30KKworaW5saW5lIHVuc2lnbmVkIFNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgKyBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gQUxXQVlTX0lOTElORSBib29sIFNlZ21lbnRlZFN0cmluZzo6Y2hhcmFjdGVyTWlzbWF0
Y2goQ2hhcmFjdGVyVHlwZSBhLCBjaGFyIGIsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KQoreworICAgIHJldHVybiBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UgPyAhaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbChhLCBiKSA6IGEgIT0gYjsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoSW5jbHVkaW5nVGVybWluYXRvciwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2U+IFNl
Z21lbnRlZFN0cmluZzo6QWR2YW5jZVBhc3RSZXN1bHQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNl
UGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClbbGVuZ3RoSW5jbHVkaW5nVGVybWluYXRvcl0pCit7
CisgICAgY29uc3RleHByIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aEluY2x1ZGluZ1Rlcm1pbmF0
b3IgLSAxOworICAgIEFTU0VSVCghbGl0ZXJhbFtsZW5ndGhdKTsKKyAgICBBU1NFUlQoIXN0cmNo
cihsaXRlcmFsLCAnXG4nKSk7CisgICAgaWYgKGxlbmd0aCArIDEgPCBtX2N1cnJlbnRTdWJzdHJp
bmcubGVuZ3RoKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuaXM4Qml0KSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyTWlzbWF0Y2gobV9jdXJyZW50U3Vic3RyaW5nLmN1cnJl
bnRDaGFyYWN0ZXI4W2ldLCBsaXRlcmFsW2ldLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlkTm90TWF0Y2g7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjggKz0gbGVuZ3Ro
OworICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKm1fY3VycmVudFN1YnN0cmluZy5j
dXJyZW50Q2hhcmFjdGVyODsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjaGFy
YWN0ZXJNaXNtYXRjaChtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2W2ldLCBs
aXRlcmFsW2ldLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRGlkTm90TWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1cnJl
bnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2ICs9IGxlbmd0aDsKKyAgICAgICAgICAgIG1f
Y3VycmVudENoYXJhY3RlciA9ICptX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2
OworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggLT0gbGVuZ3Ro
OworICAgICAgICByZXR1cm4gRGlkTWF0Y2g7CisgICAgfQorICAgIHJldHVybiBhZHZhbmNlUGFz
dFNsb3dDYXNlKGxpdGVyYWwsIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Cit9CisKK2lubGlu
ZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKQor
eworICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4gMSkgeworICAgICAgICBpZiAo
bV9jdXJyZW50U3Vic3RyaW5nLmlzOEJpdCkgeworICAgICAgICAgICAgbV9mYXN0UGF0aEZsYWdz
ID0gVXNlOEJpdEFkdmFuY2U7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzKQorICAgICAgICAgICAgICAgIG1fZmFzdFBhdGhGbGFncyB8
PSBVc2U4Qml0QWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJzOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7CisgICAg
ICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50
ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTY7CisgICAgICAgIGlm
IChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCisgICAgICAgICAg
ICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5n
OjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2OworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIHVw
ZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0YzYzYzYzNWJlM2Ez
MmI4MDE1NWFmYmJjMWNiY2JkNWQ5ZGFlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8gSW4gc29tZSBjaXJjdW1zdGFu
Y2VzIHdlIHdhbnQgdG8gc3RvcmUgYSBTdHJpbmcgYWxvbmcgd2l0aCB0aGUgVGV4dERpcmVjdGlv
bgorLy8gb2YgdGhlIFN0cmluZyBhcyBsZWFybmVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIFN0
cmluZy4gRm9yIGV4YW1wbGUsCisvLyBjb25zaWRlciBzdG9yaW5nIHRoZSB0aXRsZSBkZXJpdmVk
IGZyb20gPHRpdGxlIGRpcj0ncnRsJz5zb21lIHRpdGxlPC90aXRsZT4KKy8vIGluIHRoZSBoaXN0
b3J5LgorLy8KKy8vIE5vdGUgdGhhdCBpcyBleHBsaWNpdGx5ICpub3QqIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIHN0cmluZyBhcyBsZWFybmVkCisvLyBmcm9tIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBz
dHJpbmc7IGl0J3MgZXh0cmEgbWV0YWRhdGEgd2UgaGF2ZSBleHRlcm5hbAorLy8gdG8gdGhlIHN0
cmluZy4KKworc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb24geworICAgIFN0cmluZyBzdHJpbmc7
CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpMVFIgfTsKK307
CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYSwg
Y29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcgPT0g
Yi5zdHJpbmcgJiYgYS5kaXJlY3Rpb24gPT0gYi5kaXJlY3Rpb247Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYSwgY29uc3QgU3RyaW5nV2l0
aERpcmVjdGlvbiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgU3Ry
aW5nV2l0aERpcmVjdGlvbiB0cnVuY2F0ZUZyb21FbmQoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlv
biYgc3RyaW5nLCB1bnNpZ25lZCBtYXhMZW5ndGgpCit7CisgICAgcmV0dXJuIHsgc3RyaW5nLnN0
cmluZy5sZWZ0KG1heExlbmd0aCksIHN0cmluZy5kaXJlY3Rpb24gfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvU3VmZml4
VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1N1ZmZpeFRyZWUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NTZmY2UzOWVkNTFiODg5YTJiMjk0ZDY3MzI2NmUyYWEyODU1M2FkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1N1ZmZpeFRyZWUuaApAQCAtMCww
ICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBZGFtIEJhcnRoLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK2NsYXNzIFVuaWNvZGVDb2Rl
Ym9vayB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBjb2RlV29yZChVQ2hhciBjKSB7IHJldHVy
biBjOyB9CisgICAgZW51bSB7IENvZGVTaXplID0gMSA8PCA4ICogc2l6ZW9mKFVDaGFyKSB9Owor
fTsKKworY2xhc3MgQVNDSUlDb2RlYm9vayB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBjb2Rl
V29yZChVQ2hhciBjKSB7IHJldHVybiBjICYgKENvZGVTaXplIC0gMSk7IH0KKyAgICBlbnVtIHsg
Q29kZVNpemUgPSAxIDw8ICg4ICogc2l6ZW9mKGNoYXIpIC0gMSkgfTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvZGVib29rPgorY2xhc3MgU3VmZml4VHJlZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VmZml4VHJlZSkKK3B1Ymxp
YzoKKyAgICBTdWZmaXhUcmVlKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgZGVwdGgpCisg
ICAgICAgIDogbV9kZXB0aChkZXB0aCkKKyAgICAgICAgLCBtX2xlYWYodHJ1ZSkKKyAgICB7Cisg
ICAgICAgIGJ1aWxkKHRleHQpOworICAgIH0KKworICAgIGJvb2wgbWlnaHRDb250YWluKGNvbnN0
IFN0cmluZyYgcXVlcnkpCisgICAgeworICAgICAgICBOb2RlKiBjdXJyZW50ID0gJm1fcm9vdDsK
KyAgICAgICAgaW50IGxpbWl0ID0gc3RkOjptaW4obV9kZXB0aCwgcXVlcnkubGVuZ3RoKCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHsKKyAgICAgICAgICAgIGF1
dG8gaXQgPSBjdXJyZW50LT5maW5kKENvZGVib29rOjpjb2RlV29yZChxdWVyeVtpXSkpOworICAg
ICAgICAgICAgaWYgKGl0ID09IGN1cnJlbnQtPmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBpdC0+bm9kZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTm9kZSB7Cisg
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgTm9k
ZShib29sIGlzTGVhZiA9IGZhbHNlKQorICAgICAgICAgICAgOiBtX2lzTGVhZihpc0xlYWYpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5Ob2RlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICBh
dXRvKiBjaGlsZCA9IGVudHJ5Lm5vZGU7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkICYmICFj
aGlsZC0+bV9pc0xlYWYpCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjaGlsZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE5vZGUqJiBjaGlsZEF0KGludCBjb2RlV29y
ZCk7CisKKyAgICAgICAgYXV0byBmaW5kKGludCBjb2RlV29yZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4u
ZW5kKCksIFtjb2RlV29yZF0oYXV0byYgZW50cnkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZW50cnkuY29kZVdvcmQgPT0gY29kZVdvcmQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9jaGlsZHJlbi5lbmQoKTsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgc3RydWN0IENoaWxkV2l0aENvZGVXb3JkIHsKKyAgICAgICAgICAg
IGludCBjb2RlV29yZDsKKyAgICAgICAgICAgIE5vZGUqIG5vZGU7CisgICAgICAgIH07CisKKyAg
ICAgICAgVmVjdG9yPENoaWxkV2l0aENvZGVXb3JkPiBtX2NoaWxkcmVuOworICAgICAgICBib29s
IG1faXNMZWFmOworICAgIH07CisKKyAgICB2b2lkIGJ1aWxkKGNvbnN0IFN0cmluZyYgdGV4dCkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgYmFzZSA9IDA7IGJhc2UgPCB0ZXh0Lmxlbmd0
aCgpOyArK2Jhc2UpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSAmbV9yb290OworICAg
ICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihiYXNlICsgbV9kZXB0aCwgdGV4dC5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7IGJhc2UgKyBv
ZmZzZXQgPCBsaW1pdDsgKytvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dCAhPSAmbV9sZWFmKTsKKyAgICAgICAgICAgICAgICBOb2RlKiYgY2hpbGQgPSBjdXJyZW50LT5j
aGlsZEF0KENvZGVib29rOjpjb2RlV29yZCh0ZXh0W2Jhc2UgKyBvZmZzZXRdKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBiYXNlICsg
b2Zmc2V0ICsgMSA9PSBsaW1pdCA/ICZtX2xlYWYgOiBuZXcgTm9kZSgpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBjaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIE5vZGUgbV9yb290OworICAgIHVuc2lnbmVkIG1fZGVwdGg7CisKKyAgICAvLyBJbnN0ZWFk
IG9mIGFsbG9jYXRpbmcgYSBmcmVzaCBlbXB0eSBsZWFmIG5vZGUgZm9yIGV2ZXIgbGVhZiBpbiB0
aGUgdHJlZQorICAgIC8vICh0aGVyZSBjYW4gYmUgYSBsb3Qgb2YgdGhlc2UpLCB3ZSBhbGlhcyBh
bGwgdGhlIGxlYXZlcyB0byB0aGlzICJzdGF0aWMiCisgICAgLy8gbGVhZiBub2RlLgorICAgIE5v
ZGUgbV9sZWFmOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZWJvb2s+CitpbmxpbmUgYXV0
byBTdWZmaXhUcmVlPENvZGVib29rPjo6Tm9kZTo6Y2hpbGRBdChpbnQgY29kZVdvcmQpIC0+IE5v
ZGUqJgoreworICAgIGF1dG8gaXQgPSBmaW5kKGNvZGVXb3JkKTsKKyAgICBpZiAoaXQgIT0gbV9j
aGlsZHJlbi5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5ub2RlOworICAgIG1fY2hpbGRyZW4u
YXBwZW5kKENoaWxkV2l0aENvZGVXb3JkIHsgY29kZVdvcmQsIG51bGxwdHIgfSk7CisgICAgcmV0
dXJuIG1fY2hpbGRyZW4ubGFzdCgpLm5vZGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2E2YmIwOTY4YmNjMTI5OWI1YzNjMGVjMDIwM2Q2ZWNlMWM3MTgzZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKQEAg
LTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEb21pbmlrIFLD
tnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKwordW5zaWduZWQgZW5kT2ZG
aXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyB0ZXh0KQoreworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKSB7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0ID0gaTsKKyAgICAgICAgVUNoYXIzMiBj
aDsKKyAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgbGVuZ3RoLCBjaCk7CisgICAgICAgIGlmICgh
cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoKSkKKyAgICAgICAgICAgIHJldHVybiBm
aXJzdDsKKyAgICB9CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc3RhcnRPZkxh
c3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcgdGV4dCkKK3sKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA+
IDA7ICkgeworICAgICAgICB1bnNpZ25lZCBsYXN0ID0gaTsKKyAgICAgICAgVUNoYXIzMiBjaDsK
KyAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2gpOworICAgICAgICBpZiAoIXJlcXVpcmVz
Q29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCisgICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisKK2ludCBmaW5k
TmV4dFdvcmRGcm9tSW5kZXgoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9y
d2FyZCkKK3sKKyAgICBVQnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0
KTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dp
bmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkg
eworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHBy
ZWNlZWRpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSAmJiB1X2lzYWxudW0o
dGV4dFtwb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisK
KyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCgpOworICAgIH0KKworICAgIHBv
c2l0aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICB3aGlsZSAocG9zaXRp
b24gIT0gVUJSS19ET05FKSB7CisgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhl
IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAg
aWYgKHBvc2l0aW9uICYmIHVfaXNhbG51bSh0ZXh0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICBy
ZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgcG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhpdCwg
cG9zaXRpb24pOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIGZpbmRXb3JkQm91
bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQoreworICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQpOwor
ICAgICplbmQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgIGlmICgqZW5kIDwg
MCkKKyAgICAgICAgKmVuZCA9IHVicmtfbGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdWJya19wcmV2
aW91cyhpdCk7Cit9CisKK3ZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQs
IGludCBwb3NpdGlvbiwgaW50KiBlbmQpCit7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dCk7CisgICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3Np
dGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsK
K30KKworI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKKworfSAvLyBuYW1lc3BhY2UgUEFMCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk4MmUxZjM4NDY3NzQ2MzRhZGU0ODU4ZDIwMjAwN2JmMWJmYzE1MDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaApAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworaW5saW5lIGJvb2wgcmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIC8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIG5lZWRlZCB3aGVuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2NTYgaXMgZml4ZWQuCisKKyAgICAvLyBXZSBj
YW4gZ2V0IHJpZCBvZiB0aGlzIGNvbnN0YW50IGlmIHdlIHJlcXVpcmUgYSBuZXdlciB2ZXJzaW9u
IG9mIHRoZSBJQ1UgaGVhZGVycy4KKyAgICBjb25zdCBpbnQgV0tfVV9MQl9DT05ESVRJT05BTF9K
QVBBTkVTRV9TVEFSVEVSID0gMzc7CisKKyAgICBpbnQgbGluZUJyZWFrID0gdV9nZXRJbnRQcm9w
ZXJ0eVZhbHVlKGNoYXJhY3RlciwgVUNIQVJfTElORV9CUkVBSyk7CisgICAgcmV0dXJuIGxpbmVC
cmVhayA9PSBVX0xCX0NPTVBMRVhfQ09OVEVYVCB8fCBsaW5lQnJlYWsgPT0gV0tfVV9MQl9DT05E
SVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSIHx8IGxpbmVCcmVhayA9PSBVX0xCX0lERU9HUkFQSElD
OworfQorCit1bnNpZ25lZCBlbmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3
KTsKK3Vuc2lnbmVkIHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3KTsK
Kwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIGludCBwb3NpdGlvbiwgaW50KiBz
dGFydCwgaW50KiBlbmQpOwordm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIGlu
dCBwb3NpdGlvbiwgaW50KiBlbmQpOworaW50IGZpbmROZXh0V29yZEZyb21JbmRleChTdHJpbmdW
aWV3LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCk7CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGYxYmQ2NzhjOTRmZDFhYTFi
YTI1OWU2MzcxYWRhZWNmODI5YjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC90ZXh0L1RleHRDaGVja2luZy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgorI2luY2x1ZGUgPHd0Zi9FbnVt
VHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0Q2hl
Y2tpbmdUeXBlIDogdWludDhfdCB7CisgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgPSAwLAor
ICAgIFNwZWxsaW5nICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAgIEdyYW1tYXIgICAgICAg
ICAgICAgICAgID0gMSA8PCAxLAorICAgIExpbmsgICAgICAgICAgICAgICAgICAgID0gMSA8PCAy
LAorICAgIFF1b3RlICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAgIERhc2ggICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA0LAorICAgIFJlcGxhY2VtZW50ICAgICAgICAgICAgID0gMSA8
PCA1LAorICAgIENvcnJlY3Rpb24gICAgICAgICAgICAgID0gMSA8PCA2LAorICAgIFNob3dDb3Jy
ZWN0aW9uUGFuZWwgICAgID0gMSA8PCA3LAorfTsKKworI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVk
ZWYgdWludDY0X3QgTlNUZXh0Q2hlY2tpbmdUeXBlczsKK1BBTF9FWFBPUlQgTlNUZXh0Q2hlY2tp
bmdUeXBlcyBuc1RleHRDaGVja2luZ1R5cGVzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPik7
CisjZW5kaWYKKworZW51bSBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB7CisgICAgVGV4dENoZWNr
aW5nUHJvY2Vzc0JhdGNoLAorICAgIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbAorfTsK
Kworc3RydWN0IEdyYW1tYXJEZXRhaWwgeworICAgIENoYXJhY3RlclJhbmdlIHJhbmdlOworICAg
IFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CisgICAgU3RyaW5nIHVzZXJEZXNjcmlwdGlvbjsKK307
CisKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQgeworICAgIFRleHRDaGVja2luZ1R5cGUgdHlw
ZTsKKyAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4g
ZGV0YWlsczsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7Cit9OworCitzdHJ1Y3QgVGV4dENoZWNr
aW5nR3Vlc3NlcyB7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKKyAgICBib29sIG1pc3Nw
ZWxsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgdW5ncmFtbWF0aWNhbCB7IGZhbHNlIH07Cit9Owor
CitlbnVtIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBUZXh0
Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8VGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXJUeXBlPjsKKworY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdERhdGEg
eworcHVibGljOgorICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhKCkgPSBkZWZhdWx0OworICAg
IFRleHRDaGVja2luZ1JlcXVlc3REYXRhKHN0ZDo6b3B0aW9uYWw8VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXI+IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHBy
b2Nlc3NUeXBlKQorICAgICAgICA6IG1fdGV4dCB7IHRleHQgfQorICAgICAgICAsIG1faWRlbnRp
ZmllciB7IGlkZW50aWZpZXIgfQorICAgICAgICAsIG1fcHJvY2Vzc1R5cGUgeyBwcm9jZXNzVHlw
ZSB9CisgICAgICAgICwgbV9jaGVja2luZ1R5cGVzIHsgY2hlY2tpbmdUeXBlcyB9CisgICAgewor
ICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI+
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBT
dHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKyAgICBPcHRpb25TZXQ8VGV4
dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tpbmdU
eXBlczsgfQorICAgIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHByb2Nlc3NUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9jZXNzVHlwZTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX3RleHQ7
CisgICAgc3RkOjpvcHRpb25hbDxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gbV9pZGVu
dGlmaWVyOworICAgIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIG1fcHJvY2Vzc1R5cGUgeyBUZXh0
Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwgfTsKKyAgICBPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZT4gbV9jaGVja2luZ1R5cGVzOworfTsKKworY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPFRleHRDaGVja2luZ1JlcXVlc3Q+IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5UZXh0Q2hlY2tpbmdSZXF1ZXN0KCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBj
b25zdCBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgZGF0YSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlLAorICAgICAgICBQ
QUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzQmF0Y2gsCisg
ICAgICAgIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU6OlRleHRDaGVja2luZ1Byb2Nlc3NJ
bmNyZW1lbnRhbAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBB
TDo6VGV4dENoZWNraW5nVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZSwKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlOjpOb25lLAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLAorICAg
ICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIsCisgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nVHlwZTo6TGluaywKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSwK
KyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLAorICAgICAgICBQQUw6OlRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6
OkNvcnJlY3Rpb24sCisgICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rp
b25QYW5lbAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0RGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvVGV4dERpcmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlODZiYWFmMzE4OTVj
YjY2MDQ1NzRjMDJhYjcyMTBkN2QxMmVkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvVGV4dERpcmVjdGlvbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFBBTCB7CisKK2VudW0gY2xhc3MgVGV4
dERpcmVjdGlvbiA6IGJvb2wgeyBMVFIsIFJUTCB9OworCitpbmxpbmUgYm9vbCBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBkaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3RleHQvVGV4dEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNzNjN2QyODEwNWIyMmYyMTZlZmU1NzNm
ZTM0YzJlMGUzMjczMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
dGV4dC9UZXh0RmxhZ3MuaApAQCAtMCwwICsxLDgwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgeworICAg
IEF1dG9UZXh0UmVuZGVyaW5nLAorICAgIE9wdGltaXplU3BlZWQsCisgICAgT3B0aW1pemVMZWdp
YmlsaXR5LAorICAgIEdlb21ldHJpY1ByZWNpc2lvbgorfTsKKworZW51bSBjbGFzcyBGb250U21v
b3RoaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEF1dG9TbW9vdGhpbmcsCisgICAgTm9TbW9vdGhp
bmcsCisgICAgQW50aWFsaWFzZWQsCisgICAgU3VicGl4ZWxBbnRpYWxpYXNlZAorfTsKKworZW51
bSBjbGFzcyBGb250T3JpZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBIb3Jpem9udGFsLAorICAg
IFZlcnRpY2FsCit9OworCitlbnVtIGNsYXNzIE5vbkNKS0dseXBoT3JpZW50YXRpb24gOiB1aW50
OF90IHsKKyAgICBNaXhlZCwKKyAgICBVcHJpZ2h0Cit9OworCitlbnVtIEV4cGFuc2lvbkJlaGF2
aW9yRmxhZ3MgeworICAgIEZvcmJpZFJpZ2h0RXhwYW5zaW9uID0gMCA8PCAwLAorICAgIEFsbG93
UmlnaHRFeHBhbnNpb24gPSAxIDw8IDAsCisgICAgRm9yY2VSaWdodEV4cGFuc2lvbiA9IDIgPDwg
MCwKKyAgICBSaWdodEV4cGFuc2lvbk1hc2sgPSAzIDw8IDAsCisKKyAgICBGb3JiaWRMZWZ0RXhw
YW5zaW9uID0gMCA8PCAyLAorICAgIEFsbG93TGVmdEV4cGFuc2lvbiA9IDEgPDwgMiwKKyAgICBG
b3JjZUxlZnRFeHBhbnNpb24gPSAyIDw8IDIsCisgICAgTGVmdEV4cGFuc2lvbk1hc2sgPSAzIDw8
IDIsCisKKyAgICBEZWZhdWx0RXhwYW5zaW9uID0gQWxsb3dSaWdodEV4cGFuc2lvbiB8IEZvcmJp
ZExlZnRFeHBhbnNpb24sCit9OwordHlwZWRlZiB1bnNpZ25lZCBFeHBhbnNpb25CZWhhdmlvcjsK
KworZW51bSBGb250U3ludGhlc2lzVmFsdWVzIHsKKyAgICBGb250U3ludGhlc2lzTm9uZSA9IDB4
MCwKKyAgICBGb250U3ludGhlc2lzV2VpZ2h0ID0gMHgxLAorICAgIEZvbnRTeW50aGVzaXNTdHls
ZSA9IDB4MiwKKyAgICBGb250U3ludGhlc2lzU21hbGxDYXBzID0gMHg0Cit9OworLy8gRklYTUU6
IFVzZSBPcHRpb25TZXQuCit0eXBlZGVmIHVuc2lnbmVkIEZvbnRTeW50aGVzaXM7Citjb25zdCB1
bnNpZ25lZCBGb250U3ludGhlc2lzV2lkdGggPSAzOworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50
TGlnYXR1cmVzIDogdWludDhfdCB7IE5vcm1hbCwgWWVzLCBObyB9OworZW51bSBjbGFzcyBGb250
VmFyaWFudFBvc2l0aW9uIDogdWludDhfdCB7IE5vcm1hbCwgU3Vic2NyaXB0LCBTdXBlcnNjcmlw
dCB9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50Q2FwcyA6IHVpbnQ4X3QgeworICAgIE5vcm1h
bCwKKyAgICBTbWFsbCwKKyAgICBBbGxTbWFsbCwKKyAgICBQZXRpdGUsCisgICAgQWxsUGV0aXRl
LAorICAgIFVuaWNhc2UsCisgICAgVGl0bGluZworfTsKKworZW51bSBjbGFzcyBGb250VmFyaWFu
dE51bWVyaWNGaWd1cmUgOiB1aW50OF90IHsKKyAgICBOb3JtYWwsCisgICAgTGluaW5nTnVtYmVy
cywKKyAgICBPbGRTdHlsZU51bWJlcnMKK307CisKK2VudW0gY2xhc3MgRm9udFZhcmlhbnROdW1l
cmljU3BhY2luZyA6IHVpbnQ4X3QgeworICAgIE5vcm1hbCwKKyAgICBQcm9wb3J0aW9uYWxOdW1i
ZXJzLAorICAgIFRhYnVsYXJOdW1iZXJzCit9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50TnVt
ZXJpY0ZyYWN0aW9uIDogdWludDhfdCB7CisgICAgTm9ybWFsLAorICAgIERpYWdvbmFsRnJhY3Rp
b25zLAorICAgIFN0YWNrZWRGcmFjdGlvbnMKK307CisKK2VudW0gY2xhc3MgRm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbCA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OworZW51bSBjbGFzcyBGb250VmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybyA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OworZW51bSBjbGFz
cyBGb250VmFyaWFudEFsdGVybmF0ZXMgOiBib29sIHsgTm9ybWFsLCBIaXN0b3JpY2FsRm9ybXMg
fTsKKworZW51bSBjbGFzcyBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiB1aW50OF90IHsK
KyAgICBOb3JtYWwsCisgICAgSmlzNzgsCisgICAgSmlzODMsCisgICAgSmlzOTAsCisgICAgSmlz
MDQsCisgICAgU2ltcGxpZmllZCwKKyAgICBUcmFkaXRpb25hbAorfTsKKworZW51bSBjbGFzcyBG
b250VmFyaWFudEVhc3RBc2lhbldpZHRoIDogdWludDhfdCB7CisgICAgTm9ybWFsLAorICAgIEZ1
bGwsCisgICAgUHJvcG9ydGlvbmFsCit9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieSA6IHVpbnQ4X3QgeworICAgIE5vcm1hbCwKKyAgICBZZXMKK307CisKK3N0cnVjdCBG
b250VmFyaWFudFNldHRpbmdzIHsKKyAgICBGb250VmFyaWFudFNldHRpbmdzKCkKKyAgICAgICAg
OiBjb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKKyAgICAgICAg
LCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpCisg
ICAgICAgICwgaGlzdG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KQorICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpO
b3JtYWwpCisgICAgICAgICwgcG9zaXRpb24oRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsKQor
ICAgICAgICAsIGNhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCisgICAgICAgICwgbnVtZXJp
Y0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbCkKKyAgICAgICAgLCBudW1l
cmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpCisgICAgICAgICwg
bnVtZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpCisgICAg
ICAgICwgbnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsKQor
ICAgICAgICAsIG51bWVyaWNTbGFzaGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
bzo6Tm9ybWFsKQorICAgICAgICAsIGFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpO
b3JtYWwpCisgICAgICAgICwgZWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ6Ok5vcm1hbCkKKyAgICAgICAgLCBlYXN0QXNpYW5XaWR0aChGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoOjpOb3JtYWwpCisgICAgICAgICwgZWFzdEFzaWFuUnVieShGb250VmFyaWFudEVh
c3RBc2lhblJ1Ynk6Ok5vcm1hbCkKKyAgICB7CisgICAgfQorCisgICAgRm9udFZhcmlhbnRTZXR0
aW5ncygKKyAgICAgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVzLAorICAg
ICAgICBGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAg
ICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAorICAgICAgICBGb250
VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcywKKyAgICAgICAgRm9udFZhcmlh
bnRQb3NpdGlvbiBwb3NpdGlvbiwKKyAgICAgICAgRm9udFZhcmlhbnRDYXBzIGNhcHMsCisgICAg
ICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBudW1lcmljRmlndXJlLAorICAgICAgICBGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nIG51bWVyaWNTcGFjaW5nLAorICAgICAgICBGb250VmFyaWFu
dE51bWVyaWNGcmFjdGlvbiBudW1lcmljRnJhY3Rpb24sCisgICAgICAgIEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWwgbnVtZXJpY09yZGluYWwsCisgICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvIG51bWVyaWNTbGFzaGVkWmVybywKKyAgICAgICAgRm9udFZhcmlhbnRBbHRlcm5h
dGVzIGFsdGVybmF0ZXMsCisgICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCBlYXN0
QXNpYW5WYXJpYW50LAorICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIGVhc3RBc2lh
bldpZHRoLAorICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgZWFzdEFzaWFuUnVieSkK
KyAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVzKGNvbW1vbkxpZ2F0dXJlcykKKyAgICAgICAg
ICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKQorICAg
ICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVzKGhpc3RvcmljYWxMaWdhdHVyZXMpCisgICAg
ICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKGNvbnRleHR1YWxBbHRlcm5hdGVzKQorICAg
ICAgICAgICAgLCBwb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgICAgICwgY2FwcyhjYXBzKQor
ICAgICAgICAgICAgLCBudW1lcmljRmlndXJlKG51bWVyaWNGaWd1cmUpCisgICAgICAgICAgICAs
IG51bWVyaWNTcGFjaW5nKG51bWVyaWNTcGFjaW5nKQorICAgICAgICAgICAgLCBudW1lcmljRnJh
Y3Rpb24obnVtZXJpY0ZyYWN0aW9uKQorICAgICAgICAgICAgLCBudW1lcmljT3JkaW5hbChudW1l
cmljT3JkaW5hbCkKKyAgICAgICAgICAgICwgbnVtZXJpY1NsYXNoZWRaZXJvKG51bWVyaWNTbGFz
aGVkWmVybykKKyAgICAgICAgICAgICwgYWx0ZXJuYXRlcyhhbHRlcm5hdGVzKQorICAgICAgICAg
ICAgLCBlYXN0QXNpYW5WYXJpYW50KGVhc3RBc2lhblZhcmlhbnQpCisgICAgICAgICAgICAsIGVh
c3RBc2lhbldpZHRoKGVhc3RBc2lhbldpZHRoKQorICAgICAgICAgICAgLCBlYXN0QXNpYW5SdWJ5
KGVhc3RBc2lhblJ1YnkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNBbGxOb3JtYWwoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm9ybWFsCisgICAgICAgICAgICAmJiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
ID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKKyAgICAgICAgICAgICYmIGhpc3Rvcmlj
YWxMaWdhdHVyZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbAorICAgICAgICAgICAg
JiYgY29udGV4dHVhbEFsdGVybmF0ZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbAor
ICAgICAgICAgICAgJiYgcG9zaXRpb24gPT0gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBjYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsCisgICAgICAgICAg
ICAmJiBudW1lcmljRmlndXJlID09IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBudW1lcmljU3BhY2luZyA9PSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpOb3JtYWwKKyAgICAgICAgICAgICYmIG51bWVyaWNGcmFjdGlvbiA9PSBGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbjo6Tm9ybWFsCisgICAgICAgICAgICAmJiBudW1lcmljT3JkaW5hbCA9PSBG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwKKyAgICAgICAgICAgICYmIG51bWVyaWNT
bGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsCisgICAg
ICAgICAgICAmJiBhbHRlcm5hdGVzID09IEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBlYXN0QXNpYW5WYXJpYW50ID09IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6Tm9ybWFsCisgICAgICAgICAgICAmJiBlYXN0QXNpYW5XaWR0aCA9PSBGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWwKKyAgICAgICAgICAgICYmIGVhc3RBc2lhblJ1YnkgPT0g
Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBvdGhlci5jb21tb25MaWdhdHVyZXMKKyAg
ICAgICAgICAgICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPT0gb3RoZXIuZGlzY3JldGlvbmFy
eUxpZ2F0dXJlcworICAgICAgICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBvdGhlci5o
aXN0b3JpY2FsTGlnYXR1cmVzCisgICAgICAgICAgICAmJiBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9
PSBvdGhlci5jb250ZXh0dWFsQWx0ZXJuYXRlcworICAgICAgICAgICAgJiYgcG9zaXRpb24gPT0g
b3RoZXIucG9zaXRpb24KKyAgICAgICAgICAgICYmIGNhcHMgPT0gb3RoZXIuY2FwcworICAgICAg
ICAgICAgJiYgbnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5udW1lcmljRmlndXJlCisgICAgICAgICAg
ICAmJiBudW1lcmljU3BhY2luZyA9PSBvdGhlci5udW1lcmljU3BhY2luZworICAgICAgICAgICAg
JiYgbnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm51bWVyaWNGcmFjdGlvbgorICAgICAgICAgICAg
JiYgbnVtZXJpY09yZGluYWwgPT0gb3RoZXIubnVtZXJpY09yZGluYWwKKyAgICAgICAgICAgICYm
IG51bWVyaWNTbGFzaGVkWmVybyA9PSBvdGhlci5udW1lcmljU2xhc2hlZFplcm8KKyAgICAgICAg
ICAgICYmIGFsdGVybmF0ZXMgPT0gb3RoZXIuYWx0ZXJuYXRlcworICAgICAgICAgICAgJiYgZWFz
dEFzaWFuVmFyaWFudCA9PSBvdGhlci5lYXN0QXNpYW5WYXJpYW50CisgICAgICAgICAgICAmJiBl
YXN0QXNpYW5XaWR0aCA9PSBvdGhlci5lYXN0QXNpYW5XaWR0aAorICAgICAgICAgICAgJiYgZWFz
dEFzaWFuUnVieSA9PSBvdGhlci5lYXN0QXNpYW5SdWJ5OworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIHVuc2lnbmVkIHVuaXF1ZVZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29tbW9uTGlnYXR1
cmVzKSA8PCAyNgorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlzY3JldGlv
bmFyeUxpZ2F0dXJlcykgPDwgMjQKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGhpc3RvcmljYWxMaWdhdHVyZXMpIDw8IDIyCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjb250ZXh0dWFsQWx0ZXJuYXRlcykgPDwgMjAKKyAgICAgICAgICAgIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8PCAxOAorICAgICAgICAgICAgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oY2FwcykgPDwgMTUKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG51bWVyaWNGaWd1cmUpIDw8IDEzCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihudW1lcmljU3BhY2luZykgPDwgMTEKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG51bWVyaWNGcmFjdGlvbikgPDwgOQorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obnVtZXJpY09yZGluYWwpIDw8IDgKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG51bWVyaWNTbGFzaGVkWmVybykgPDwgNworICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oYWx0ZXJuYXRlcykgPDwgNgorICAgICAgICAgICAgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZWFzdEFzaWFuVmFyaWFudCkgPDwgMworICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZWFzdEFzaWFuV2lkdGgpIDw8IDEKKyAgICAgICAgICAgIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGVhc3RBc2lhblJ1YnkpIDw8IDA7CisgICAgfQorCisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0dGlu
Z3M+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICAvLyBGSVhNRTogdGhpcyB3b3VsZCBiZSBtdWNo
IG1vcmUgY29tcGFjdCB3aXRoIGJpdGZpZWxkcy4KKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBj
b21tb25MaWdhdHVyZXM7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlczsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzOwor
ICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOworICAgIEZvbnRW
YXJpYW50UG9zaXRpb24gcG9zaXRpb247CisgICAgRm9udFZhcmlhbnRDYXBzIGNhcHM7CisgICAg
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlIG51bWVyaWNGaWd1cmU7CisgICAgRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZyBudW1lcmljU3BhY2luZzsKKyAgICBGb250VmFyaWFudE51bWVyaWNGcmFj
dGlvbiBudW1lcmljRnJhY3Rpb247CisgICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCBudW1l
cmljT3JkaW5hbDsKKyAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBudW1lcmljU2xh
c2hlZFplcm87CisgICAgRm9udFZhcmlhbnRBbHRlcm5hdGVzIGFsdGVybmF0ZXM7CisgICAgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IGVhc3RBc2lhblZhcmlhbnQ7CisgICAgRm9udFZhcmlh
bnRFYXN0QXNpYW5XaWR0aCBlYXN0QXNpYW5XaWR0aDsKKyAgICBGb250VmFyaWFudEVhc3RBc2lh
blJ1YnkgZWFzdEFzaWFuUnVieTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZvbnRWYXJpYW50U2V0dGluZ3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVzOworICAgIGVuY29kZXIgPDwgZGlzY3JldGlv
bmFyeUxpZ2F0dXJlczsKKyAgICBlbmNvZGVyIDw8IGhpc3RvcmljYWxMaWdhdHVyZXM7CisgICAg
ZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAgICBlbmNvZGVyIDw8IHBvc2l0aW9u
OworICAgIGVuY29kZXIgPDwgY2FwczsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNGaWd1cmU7Cisg
ICAgZW5jb2RlciA8PCBudW1lcmljU3BhY2luZzsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNGcmFj
dGlvbjsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNPcmRpbmFsOworICAgIGVuY29kZXIgPDwgbnVt
ZXJpY1NsYXNoZWRaZXJvOworICAgIGVuY29kZXIgPDwgYWx0ZXJuYXRlczsKKyAgICBlbmNvZGVy
IDw8IGVhc3RBc2lhblZhcmlhbnQ7CisgICAgZW5jb2RlciA8PCBlYXN0QXNpYW5XaWR0aDsKKyAg
ICBlbmNvZGVyIDw8IGVhc3RBc2lhblJ1Ynk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0dGluZ3M+IEZvbnRWYXJpYW50U2V0dGluZ3M6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnRMaWdhdHVyZXM+IGNvbW1vbkxpZ2F0dXJlczsKKyAgICBkZWNvZGVyID4+IGNvbW1vbkxpZ2F0
dXJlczsKKyAgICBpZiAoIWNvbW1vbkxpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGRpc2NyZXRp
b25hcnlMaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwor
ICAgIGlmICghZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGhpc3Rvcmlj
YWxMaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBoaXN0b3JpY2FsTGlnYXR1cmVzOworICAgIGlm
ICghaGlzdG9yaWNhbExpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGNvbnRleHR1YWxBbHRlcm5h
dGVzOworICAgIGRlY29kZXIgPj4gY29udGV4dHVhbEFsdGVybmF0ZXM7CisgICAgaWYgKCFjb250
ZXh0dWFsQWx0ZXJuYXRlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRQb3NpdGlvbj4gcG9zaXRpb247CisgICAgZGVjb2RlciA+
PiBwb3NpdGlvbjsKKyAgICBpZiAoIXBvc2l0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudENhcHM+IGNhcHM7CisgICAgZGVj
b2RlciA+PiBjYXBzOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiBudW1lcmlj
RmlndXJlOworICAgIGRlY29kZXIgPj4gbnVtZXJpY0ZpZ3VyZTsKKyAgICBpZiAoIW51bWVyaWNG
aWd1cmUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IG51bWVyaWNTcGFjaW5nOworICAgIGRlY29kZXIg
Pj4gbnVtZXJpY1NwYWNpbmc7CisgICAgaWYgKCFudW1lcmljU3BhY2luZykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb24+IG51bWVyaWNGcmFjdGlvbjsKKyAgICBkZWNvZGVyID4+IG51bWVyaWNGcmFjdGlv
bjsKKyAgICBpZiAoIW51bWVyaWNGcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4gbnVtZXJp
Y09yZGluYWw7CisgICAgZGVjb2RlciA+PiBudW1lcmljT3JkaW5hbDsKKyAgICBpZiAoIW51bWVy
aWNPcmRpbmFsKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gbnVtZXJpY1NsYXNoZWRaZXJvOwor
ICAgIGRlY29kZXIgPj4gbnVtZXJpY1NsYXNoZWRaZXJvOworICAgIGlmICghbnVtZXJpY1NsYXNo
ZWRaZXJvKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxGb250VmFyaWFudEFsdGVybmF0ZXM+IGFsdGVybmF0ZXM7CisgICAgZGVjb2RlciA+PiBhbHRl
cm5hdGVzOworICAgIGlmICghYWx0ZXJuYXRlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiBlYXN0
QXNpYW5WYXJpYW50OworICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuVmFyaWFudDsKKyAgICBpZiAo
IWVhc3RBc2lhblZhcmlhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IGVhc3RBc2lhbldpZHRoOwor
ICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuV2lkdGg7CisgICAgaWYgKCFlYXN0QXNpYW5XaWR0aCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5PiBlYXN0QXNpYW5SdWJ5OworICAgIGRlY29kZXIgPj4gZWFzdEFz
aWFuUnVieTsKKyAgICBpZiAoIWVhc3RBc2lhblJ1YnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4geyB7CisgICAgICAgICpjb21tb25MaWdhdHVyZXMsCisgICAg
ICAgICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAgICAqaGlzdG9yaWNhbExpZ2F0dXJl
cywKKyAgICAgICAgKmNvbnRleHR1YWxBbHRlcm5hdGVzLAorICAgICAgICAqcG9zaXRpb24sCisg
ICAgICAgICpjYXBzLAorICAgICAgICAqbnVtZXJpY0ZpZ3VyZSwKKyAgICAgICAgKm51bWVyaWNT
cGFjaW5nLAorICAgICAgICAqbnVtZXJpY0ZyYWN0aW9uLAorICAgICAgICAqbnVtZXJpY09yZGlu
YWwsCisgICAgICAgICpudW1lcmljU2xhc2hlZFplcm8sCisgICAgICAgICphbHRlcm5hdGVzLAor
ICAgICAgICAqZWFzdEFzaWFuVmFyaWFudCwKKyAgICAgICAgKmVhc3RBc2lhbldpZHRoLAorICAg
ICAgICAqZWFzdEFzaWFuUnVieQorICAgIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50TGln
YXR1cmVzVmFsdWVzIHsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcygKKyAgICAgICAg
Rm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFu
dExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFudExp
Z2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFudExpZ2F0dXJl
cyBjb250ZXh0dWFsQWx0ZXJuYXRlcykKKyAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVzKGNv
bW1vbkxpZ2F0dXJlcykKKyAgICAgICAgICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhkaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzKQorICAgICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVzKGhp
c3RvcmljYWxMaWdhdHVyZXMpCisgICAgICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKGNv
bnRleHR1YWxBbHRlcm5hdGVzKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM+
IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb21tb25MaWdh
dHVyZXM7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsK
KyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzOworICAgIEZvbnRW
YXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOworfTsKKwordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVzOwor
ICAgIGVuY29kZXIgPDwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKKyAgICBlbmNvZGVyIDw8IGhp
c3RvcmljYWxMaWdhdHVyZXM7CisgICAgZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRlczsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRM
aWdhdHVyZXNWYWx1ZXM+IEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBj
b21tb25MaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBjb21tb25MaWdhdHVyZXM7CisgICAgaWYg
KCFjb21tb25MaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
OworICAgIGRlY29kZXIgPj4gZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKKyAgICBpZiAoIWRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBoaXN0b3JpY2FsTGlnYXR1cmVzOwor
ICAgIGRlY29kZXIgPj4gaGlzdG9yaWNhbExpZ2F0dXJlczsKKyAgICBpZiAoIWhpc3RvcmljYWxM
aWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBjb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAgICBkZWNv
ZGVyID4+IGNvbnRleHR1YWxBbHRlcm5hdGVzOworICAgIGlmICghY29udGV4dHVhbEFsdGVybmF0
ZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpjb21t
b25MaWdhdHVyZXMsICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLCAqaGlzdG9yaWNhbExpZ2F0dXJl
cywgKmNvbnRleHR1YWxBbHRlcm5hdGVzIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50TnVt
ZXJpY1ZhbHVlcyB7CisgICAgRm9udFZhcmlhbnROdW1lcmljVmFsdWVzKAorICAgICAgICBGb250
VmFyaWFudE51bWVyaWNGaWd1cmUgZmlndXJlLAorICAgICAgICBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nIHNwYWNpbmcsCisgICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZyYWN0
aW9uLAorICAgICAgICBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGluYWwsCisgICAgICAg
IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvKQorICAgICAgICAgICAg
OiBmaWd1cmUoZmlndXJlKQorICAgICAgICAgICAgLCBzcGFjaW5nKHNwYWNpbmcpCisgICAgICAg
ICAgICAsIGZyYWN0aW9uKGZyYWN0aW9uKQorICAgICAgICAgICAgLCBvcmRpbmFsKG9yZGluYWwp
CisgICAgICAgICAgICAsIHNsYXNoZWRaZXJvKHNsYXNoZWRaZXJvKQorICAgIHsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZh
cmlhbnROdW1lcmljVmFsdWVzPiBkZWNvZGUoRGVjb2RlciYpOworCisgICAgRm9udFZhcmlhbnRO
dW1lcmljRmlndXJlIGZpZ3VyZTsKKyAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNp
bmc7CisgICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb247CisgICAgRm9udFZh
cmlhbnROdW1lcmljT3JkaW5hbCBvcmRpbmFsOworICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvIHNsYXNoZWRaZXJvOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQg
Rm9udFZhcmlhbnROdW1lcmljVmFsdWVzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IGZpZ3VyZTsKKyAgICBlbmNvZGVyIDw8IHNwYWNpbmc7CisgICAg
ZW5jb2RlciA8PCBmcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IG9yZGluYWw7CisgICAgZW5jb2Rl
ciA8PCBzbGFzaGVkWmVybzsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljVmFsdWVzPiBGb250VmFyaWFudE51bWVyaWNWYWx1ZXM6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnROdW1lcmljRmlndXJlPiBmaWd1cmU7CisgICAgZGVjb2RlciA+PiBmaWd1cmU7CisgICAgaWYg
KCFmaWd1cmUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IHNwYWNpbmc7CisgICAgZGVjb2RlciA+PiBz
cGFjaW5nOworICAgIGlmICghc3BhY2luZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IGZyYWN0aW9u
OworICAgIGRlY29kZXIgPj4gZnJhY3Rpb247CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1l
cmljT3JkaW5hbD4gb3JkaW5hbDsKKyAgICBkZWNvZGVyID4+IG9yZGluYWw7CisgICAgaWYgKCFv
cmRpbmFsKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gc2xhc2hlZFplcm87CisgICAgZGVjb2Rl
ciA+PiBzbGFzaGVkWmVybzsKKyAgICBpZiAoIXNsYXNoZWRaZXJvKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqZmlndXJlLCAqc3BhY2luZywgKmZyYWN0
aW9uLCAqb3JkaW5hbCwgKnNsYXNoZWRaZXJvIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50
RWFzdEFzaWFuVmFsdWVzIHsKKyAgICBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcygKKyAgICAg
ICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQsCisgICAgICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGggd2lkdGgsCisgICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eSBydWJ5KQorICAgICAgICAgICAgOiB2YXJpYW50KHZhcmlhbnQpCisgICAgICAgICAgICAsIHdp
ZHRoKHdpZHRoKQorICAgICAgICAgICAgLCBydWJ5KHJ1YnkpCisgICAgeworICAgIH0KKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFu
dEVhc3RBc2lhblZhbHVlcz4gZGVjb2RlKERlY29kZXImKTsKKworICAgIEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudCB2YXJpYW50OworICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggd2lk
dGg7CisgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1Ynk7Cit9OworCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlczo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB2YXJpYW50OworICAgIGVu
Y29kZXIgPDwgd2lkdGg7CisgICAgZW5jb2RlciA8PCBydWJ5OworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcz4gRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2YXJpYW50OworICAg
IGRlY29kZXIgPj4gdmFyaWFudDsKKyAgICBpZiAoIXZhcmlhbnQpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lk
dGg+IHdpZHRoOworICAgIGRlY29kZXIgPj4gd2lkdGg7CisgICAgaWYgKCF3aWR0aCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRF
YXN0QXNpYW5SdWJ5PiBydWJ5OworICAgIGRlY29kZXIgPj4gcnVieTsKKyAgICBpZiAoIXJ1Ynkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICp2YXJpYW50
LCAqd2lkdGgsICpydWJ5IH0gfTsKK30KKworZW51bSBjbGFzcyBGb250V2lkdGhWYXJpYW50IDog
dWludDhfdCB7CisgICAgUmVndWxhcldpZHRoLAorICAgIEhhbGZXaWR0aCwKKyAgICBUaGlyZFdp
ZHRoLAorICAgIFF1YXJ0ZXJXaWR0aCwKKyAgICBMYXN0Rm9udFdpZHRoVmFyaWFudCA9IFF1YXJ0
ZXJXaWR0aAorfTsKKworY29uc3QgdW5zaWduZWQgRm9udFdpZHRoVmFyaWFudFdpZHRoID0gMjsK
KworQ09NUElMRV9BU1NFUlQoIShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFdpZHRoVmFyaWFu
dDo6TGFzdEZvbnRXaWR0aFZhcmlhbnQpID4+IEZvbnRXaWR0aFZhcmlhbnRXaWR0aCksIEZvbnRX
aWR0aFZhcmlhbnRXaWR0aF9pc19jb3JyZWN0KTsKKworZW51bSBjbGFzcyBGb250U21hbGxDYXBz
IDogdWludDhfdCB7CisgICAgT2ZmID0gMCwKKyAgICBPbiA9IDEKK307CisKK2VudW0gY2xhc3Mg
S2VybmluZyA6IHVpbnQ4X3QgeworICAgIEF1dG8sCisgICAgTm9ybWFsLAorICAgIE5vU2hpZnQK
K307CisKK2VudW0gY2xhc3MgRm9udE9wdGljYWxTaXppbmcgOiB1aW50OF90IHsKKyAgICBFbmFi
bGVkLAorICAgIERpc2FibGVkCit9OworCisvLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5
cG9ncmFwaHkvb3RzcGVjL2Z2YXIuaHRtI1ZBVAorZW51bSBjbGFzcyBGb250U3R5bGVBeGlzIDog
dWludDhfdCB7CisgICAgc2xudCwKKyAgICBpdGFsCit9OworCitlbnVtIGNsYXNzIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzCit9OworCit9CisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6VGV4
dFJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBB
TDo6VGV4dFJlbmRlcmluZ01vZGUsCisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1Rl
eHRSZW5kZXJpbmcsCisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVlZCwK
KyAgICBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHksCisgICAgUEFM
OjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uCisgICAgPjsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250U21vb3RoaW5nTW9kZT4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZSwK
KyAgICBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nLAorICAgIFBBTDo6Rm9u
dFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nLAorICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGU6
OkFudGlhbGlhc2VkLAorICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFs
aWFzZWQsCisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZworICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udE9yaWVudGF0aW9u
PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRPcmllbnRh
dGlvbiwKKyAgICBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwKKyAgICBQQUw6OkZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiwKKyAgICBQ
QUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkLAorICAgIFBBTDo6Tm9uQ0pLR2x5cGhP
cmllbnRhdGlvbjo6VXByaWdodAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMsCisgICAgUEFMOjpGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6
OlllcywKKyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObworICAgID47Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbj4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudFBvc2l0
aW9uLAorICAgIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsLAorICAgIFBBTDo6Rm9u
dFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0LAorICAgIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlv
bjo6U3VwZXJzY3JpcHQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxQQUw6OkZvbnRWYXJpYW50Q2Fwcz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CisgICAgUEFMOjpGb250VmFyaWFudENhcHMsCisgICAgUEFMOjpGb250VmFyaWFudENhcHM6Ok5v
cm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGwsCisgICAgUEFMOjpGb250VmFy
aWFudENhcHM6OkFsbFNtYWxsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGUsCisg
ICAgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50
Q2Fwczo6VW5pY2FzZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZworICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljRmlndXJlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZv
bnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3Vy
ZTo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1i
ZXJzLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnMK
KyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZywKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6
OlByb3BvcnRpb25hbE51bWJlcnMsCisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpUYWJ1bGFyTnVtYmVycworICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24sCisgICAg
UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zLAorICAgIFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnMKKyAgICA+OworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+
IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1h
bCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllcworICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xh
c2hlZFplcm8+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9u
dFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8sCisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFpl
cm86OlllcworICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6
Rm9udFZhcmlhbnRBbHRlcm5hdGVzPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcywKKyAgICBQQUw6OkZvbnRWYXJpYW50QWx0
ZXJuYXRlczo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3Jp
Y2FsRm9ybXMKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQsCisgICAgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6SmlzNzgsCisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ6OkppczgzLAorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5
MCwKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQsCisgICAgUEFM
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQsCisgICAgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsLAorICAgIFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aCwKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCwKKyAgICBQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGwsCisgICAgUEFMOjpGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynks
CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCwKKyAgICBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8UEFMOjpGb250V2lkdGhWYXJpYW50PiB7CisgICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQsCisgICAgUEFMOjpGb250
V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsCisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50OjpI
YWxmV2lkdGgsCisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoLAorICAgIFBB
TDo6Rm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250U21hbGxDYXBzPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRTbWFsbENhcHMsCisgICAgUEFMOjpGb250
U21hbGxDYXBzOjpPZmYsCisgICAgUEFMOjpGb250U21hbGxDYXBzOjpPbgorICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6S2VybmluZz4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpLZXJuaW5nLAorICAgIFBBTDo6S2Vybmlu
Zzo6QXV0bywKKyAgICBQQUw6Oktlcm5pbmc6Ok5vcm1hbCwKKyAgICBQQUw6Oktlcm5pbmc6Ok5v
U2hpZnQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZv
bnRPcHRpY2FsU2l6aW5nPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQ
QUw6OkZvbnRPcHRpY2FsU2l6aW5nLAorICAgIFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVuYWJs
ZWQsCisgICAgUEFMOjpGb250T3B0aWNhbFNpemluZzo6RGlzYWJsZWQKKyAgICA+OworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRTdHlsZUF4aXM+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFN0eWxlQXhpcywKKyAgICBQ
QUw6OkZvbnRTdHlsZUF4aXM6OnNsbnQsCisgICAgUEFMOjpGb250U3R5bGVBeGlzOjppdGFsCisg
ICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFM
OjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cywKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZv
bnRzOjpObywKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMKKyAgICA+Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvVW5pY29kZUJpZGkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9Vbmlj
b2RlQmlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmODE5OGVhMWIxNDY5ZWEyZjdiMWE0YmZmOWYyOWY5Njcw
MGU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5p
Y29kZUJpZGkuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBQQUwgeworCitl
bnVtIEVVbmljb2RlQmlkaSB7CisgICAgVUJOb3JtYWwsCisgICAgRW1iZWQsCisgICAgT3ZlcnJp
ZGUsCisgICAgSXNvbGF0ZSwKKyAgICBQbGFpbnRleHQsCisgICAgSXNvbGF0ZU92ZXJyaWRlLAor
fTsgCisKK2lubGluZSBib29sIGlzSXNvbGF0ZWQoY29uc3QgRVVuaWNvZGVCaWRpJiB1bmljb2Rl
QmlkaSkKK3sKKyAgICByZXR1cm4gdW5pY29kZUJpZGkgPT0gSXNvbGF0ZSB8fCB1bmljb2RlQmlk
aSA9PSBJc29sYXRlT3ZlcnJpZGUgfHwgdW5pY29kZUJpZGkgPT0gUGxhaW50ZXh0OworfQorCitp
bmxpbmUgYm9vbCBpc092ZXJyaWRlKEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3sKKyAgICBy
ZXR1cm4gdW5pY29kZUJpZGkgPT0gT3ZlcnJpZGUgfHwgdW5pY29kZUJpZGkgPT0gSXNvbGF0ZU92
ZXJyaWRlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQv
V3JpdGluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9Xcml0aW5nTW9kZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmYjdjZTc1ZTcyYjU5M2I1NTVkM2RkMGNjYjEwMjAyNjE4MGQxZGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvV3JpdGluZ01vZGUu
aApAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dERpcmVjdGlv
bi5oIgorI2luY2x1ZGUgPGFycmF5PgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBX
cml0aW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIFRvcFRvQm90dG9tID0gMCwgLy8gaG9yaXpvbnRh
bC10YgorICAgIEJvdHRvbVRvVG9wID0gMSwgLy8gaG9yaXpvbnRhbC1idAorICAgIExlZnRUb1Jp
Z2h0ID0gMiwgLy8gdmVydGljYWwtbHIKKyAgICBSaWdodFRvTGVmdCA9IDMsIC8vIHZlcnRpY2Fs
LXJsCit9OworCitjb25zdGV4cHIgdW5zaWduZWQgbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3cml0aW5nTW9kZSkgPDwgMSB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihkaXJlY3Rpb24pOworfQorCisvLyBEZWZpbmUgdGhlIHRleHQgZmxvdyBpbiB0
ZXJtcyBvZiB0aGUgd3JpdGluZyBtb2RlIGFuZCB0aGUgdGV4dCBkaXJlY3Rpb24uIFRoZSBmaXJz
dAorLy8gcGFydCBpcyB0aGUgbGluZSBncm93aW5nIGRpcmVjdGlvbiBhbmQgdGhlIHNlY29uZCBw
YXJ0IGlzIHRoZSBibG9jayBncm93aW5nIGRpcmVjdGlvbi4KK2VudW0gVGV4dEZsb3cgeworICAg
IElubGluZUVhc3RCbG9ja1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b20sIFRleHREaXJlY3Rpb246OkxUUiksCisgICAgSW5saW5lV2VzdEJsb2Nr
U291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSwg
VGV4dERpcmVjdGlvbjo6UlRMKSwKKyAgICBJbmxpbmVFYXN0QmxvY2tOb3J0aCA9IG1ha2VUZXh0
Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wLCBUZXh0RGlyZWN0aW9uOjpM
VFIpLAorICAgIElubGluZVdlc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihX
cml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRleHREaXJlY3Rpb246OlJUTCksCisgICAgSW5saW5l
U291dGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0
VG9SaWdodCwgVGV4dERpcmVjdGlvbjo6TFRSKSwKKyAgICBJbmxpbmVTb3V0aEJsb2NrV2VzdCA9
IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBUZXh0RGly
ZWN0aW9uOjpSVEwpLAorICAgIElubGluZU5vcnRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5p
dGFsaXplcihXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFRleHREaXJlY3Rpb246OkxUUiksCisg
ICAgSW5saW5lTm9ydGhCbG9ja1dlc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVjdGlvbjo6UlRMKQorfTsKKworY29uc3RleHByIGlu
bGluZSBUZXh0RmxvdyBtYWtlVGV4dEZsb3coV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Rmxvdz4o
bWFrZVRleHRGbG93SW5pdGFsaXplcih3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSk7Cit9CisKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBUZXh0Rmxvd1JldmVyc2VkTWFzayA9IDE7Citjb25zdGV4cHIgdW5z
aWduZWQgVGV4dEZsb3dGbGlwcGVkTWFzayA9IDI7Citjb25zdGV4cHIgdW5zaWduZWQgVGV4dEZs
b3dWZXJ0aWNhbE1hc2sgPSA0OworCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNSZXZlcnNlZFRl
eHRGbG93KFRleHRGbG93IHRleHRmbG93KQoreworICAgIHJldHVybiB0ZXh0ZmxvdyAmIFRleHRG
bG93UmV2ZXJzZWRNYXNrOworfQorCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNGbGlwcGVkVGV4
dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCit7CisgICAgcmV0dXJuIHRleHRmbG93ICYgVGV4dEZs
b3dGbGlwcGVkTWFzazsKK30KKworY29uc3RleHByIGlubGluZSBib29sIGlzVmVydGljYWxUZXh0
RmxvdyhUZXh0RmxvdyB0ZXh0ZmxvdykKK3sKKyAgICByZXR1cm4gdGV4dGZsb3cgJiBUZXh0Rmxv
d1ZlcnRpY2FsTWFzazsKK30KKworY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBlZExpbmVz
VGV4dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCit7CisgICAgcmV0dXJuIGlzRmxpcHBlZFRleHRG
bG93KHRleHRmbG93KSAhPSBpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpOworfQorCisvLyBM
aW5lcyBoYXZlIHZlcnRpY2FsIG9yaWVudGF0aW9uOyBtb2RlcyB2ZXJ0aWNhbC1sciBvciB2ZXJ0
aWNhbC1ybC4KK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzVmVydGljYWxUZXh0Rmxvdyht
YWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb246OkxUUikpOworfQorCisvLyBC
bG9jayBwcm9ncmVzc2lvbiBpbmNyZWFzZXMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byBu
b3JtYWw7IG1vZGVzIHZlcnRpY2FsLXJsIG9yIGhvcml6b250YWwtYnQuCitjb25zdGV4cHIgaW5s
aW5lIGJvb2wgaXNGbGlwcGVkV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7
CisgICAgcmV0dXJuIGlzRmxpcHBlZFRleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbjo6TFRSKSk7Cit9CisKKy8vIExpbmVzIGhhdmUgaG9yaXpvbnRhbCBvcmll
bnRhdGlvbjsgbW9kZXMgaG9yaXpvbnRhbC10YiBvciBob3Jpem9udGFsLWJ0LgorY29uc3RleHBy
IGlubGluZSBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKQoreworICAgIHJldHVybiAhaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsK
K30KKworLy8gQm90dG9tIG9mIHRoZSBsaW5lIG9jY3VycyBlYXJsaWVyIGluIHRoZSBibG9jazsg
bW9kZXMgdmVydGljYWwtbHIgb3IgaG9yaXpvbnRhbC1idC4KK2NvbnN0ZXhwciBpbmxpbmUgYm9v
bCBpc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorewor
ICAgIHJldHVybiBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9k
ZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Cit9CisKK2VudW0gY2xhc3MgTG9naWNhbEJveFNpZGUg
OiB1aW50OF90IHsKKyAgICBCbG9ja1N0YXJ0LAorICAgIElubGluZUVuZCwKKyAgICBCbG9ja0Vu
ZCwKKyAgICBJbmxpbmVTdGFydAorfTsKKworZW51bSBjbGFzcyBCb3hTaWRlIDogdWludDhfdCB7
CisgICAgVG9wLAorICAgIFJpZ2h0LAorICAgIEJvdHRvbSwKKyAgICBMZWZ0Cit9OworCitlbnVt
IGNsYXNzIExvZ2ljYWxCb3hDb3JuZXIgOiB1aW50OF90IHsKKyAgICBTdGFydFN0YXJ0LAorICAg
IFN0YXJ0RW5kLAorICAgIEVuZFN0YXJ0LAorICAgIEVuZEVuZAorfTsKKworLy8gVGhlIG1hcHBp
bmcgaXMgd2l0aCB0aGUgZmlyc3Qgc3RhcnQvZW5kIGdpdmluZyB0aGUgYmxvY2sgYXhpcyBzaWRl
LAorLy8gYW5kIHRoZSBzZWNvbmQgdGhlIGlubGluZS1heGlzIHNpZGUsIGkuZS4gcGF0dGVybmVk
IGFzICdib3JkZXItYmxvY2staW5saW5lLXJhZGl1cycuCitlbnVtIGNsYXNzIEJveENvcm5lciA6
IHVpbnQ4X3QgeworICAgIFRvcExlZnQsCisgICAgVG9wUmlnaHQsCisgICAgQm90dG9tUmlnaHQs
CisgICAgQm90dG9tTGVmdAorfTsKKworZW51bSBjbGFzcyBMb2dpY2FsQm94QXhpcyA6IHVpbnQ4
X3QgeworICAgIElubGluZSwKKyAgICBCbG9jaworfTsKKworZW51bSBjbGFzcyBCb3hBeGlzIDog
dWludDhfdCB7CisgICAgSG9yaXpvbnRhbCwKKyAgICBWZXJ0aWNhbAorfTsKKworY29uc3RleHBy
IHN0ZDo6YXJyYXk8Qm94U2lkZSwgND4gYWxsQm94U2lkZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94
U2lkZTo6UmlnaHQsIEJveFNpZGU6OkJvdHRvbSwgQm94U2lkZTo6TGVmdCB9OworCitjb25zdGV4
cHIgaW5saW5lIGJvb2wgaXNIb3Jpem9udGFsUGh5c2ljYWxTaWRlKEJveFNpZGUgcGh5c2ljYWxT
aWRlKQoreworICAgIHJldHVybiBwaHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6TGVmdCB8fCBwaHlz
aWNhbFNpZGUgPT0gQm94U2lkZTo6UmlnaHQ7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lk
ZSBtaXJyb3JQaHlzaWNhbFNpZGUoQm94U2lkZSBwaHlzaWNhbFNpZGUpCit7CisgICAgLy8gdG9w
IDwtPiBib3R0b20gYW5kIGxlZnQgPC0+IHJpZ2h0IGNvbnZlcnNpb24KKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Qm94U2lkZT4oKHN0YXRpY19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIDIpICUg
NCk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSByb3RhdGVQaHlzaWNhbFNpZGUoQm94
U2lkZSBwaHlzaWNhbFNpZGUpCit7CisgICAgLy8gdG9wIDwtPiBsZWZ0IGFuZCByaWdodCA8LT4g
Ym90dG9tIGNvbnZlcnNpb24KKyAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFs
UGh5c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJveFNp
ZGU+KChzdGF0aWNfY2FzdDxpbnQ+KHBoeXNpY2FsU2lkZSkgKyAoaG9yaXpvbnRhbFNpZGUgPyAx
IDogMykpICUgNCk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lk
ZVRvUGh5c2ljYWxTaWRlKFRleHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94U2lkZSBsb2dpY2Fs
U2lkZSkKK3sKKyAgICBCb3hTaWRlIHBoeXNpY2FsU2lkZSA9IHN0YXRpY19jYXN0PEJveFNpZGU+
KGxvZ2ljYWxTaWRlKTsKKyAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFsUGh5
c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7CisKKyAgICBpZiAoaXNWZXJ0aWNhbFRleHRGbG93KHRl
eHRmbG93KSkKKyAgICAgICAgcGh5c2ljYWxTaWRlID0gcm90YXRlUGh5c2ljYWxTaWRlKHBoeXNp
Y2FsU2lkZSk7CisKKyAgICBpZiAoKGhvcml6b250YWxTaWRlICYmIGlzUmV2ZXJzZWRUZXh0Rmxv
dyh0ZXh0ZmxvdykpIHx8ICghaG9yaXpvbnRhbFNpZGUgJiYgaXNGbGlwcGVkVGV4dEZsb3codGV4
dGZsb3cpKSkKKyAgICAgICAgcGh5c2ljYWxTaWRlID0gbWlycm9yUGh5c2ljYWxTaWRlKHBoeXNp
Y2FsU2lkZSk7CisKKyAgICByZXR1cm4gcGh5c2ljYWxTaWRlOworfQorCitjb25zdGV4cHIgaW5s
aW5lIEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgTG9naWNhbEJveFNpZGUgbG9naWNhbFNpZGUpCit7CisgICAgLy8gU2V0IHRoZSBk
aXJlY3Rpb24gc3VjaCB0aGF0IHNpZGUgaXMgbWlycm9yZWQgaWYgaXNGbGlwcGVkV3JpdGluZ01v
ZGUoKSBpcyB0cnVlCisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBpc0ZsaXBwZWRXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9u
OjpMVFI7CisgICAgcmV0dXJuIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRG
bG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBsb2dpY2FsU2lkZSk7Cit9CisKK2NvbnN0ZXhw
ciBpbmxpbmUgQm94Q29ybmVyIG1hcExvZ2ljYWxDb3JuZXJUb1BoeXNpY2FsQ29ybmVyKFRleHRG
bG93IHRleHRmbG93LCBMb2dpY2FsQm94Q29ybmVyIGxvZ2ljYWxCb3hDb3JuZXIpCit7CisgICAg
Ym9vbCBpc0Jsb2NrU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6
OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94Q29ybmVyOjpTdGFy
dEVuZDsKKyAgICBib29sIGlzSW5saW5lU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2lj
YWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94
Q29ybmVyOjpFbmRTdGFydDsKKyAgICBpZiAoaXNCbG9ja1N0YXJ0ID09IGlzRmxpcHBlZFRleHRG
bG93KHRleHRmbG93KSkgeworICAgICAgICBpZiAoaXNJbmxpbmVTdGFydCA9PSBpc1JldmVyc2Vk
VGV4dEZsb3codGV4dGZsb3cpKQorICAgICAgICAgICAgcmV0dXJuIEJveENvcm5lcjo6Qm90dG9t
UmlnaHQ7CisgICAgfSBlbHNlIGlmIChpc0lubGluZVN0YXJ0ICE9IGlzUmV2ZXJzZWRUZXh0Rmxv
dyh0ZXh0ZmxvdykpCisgICAgICAgIHJldHVybiBCb3hDb3JuZXI6OlRvcExlZnQ7CisgICAgaWYg
KGlzQmxvY2tTdGFydCA9PSBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KHRleHRmbG93KSkKKyAgICAg
ICAgcmV0dXJuIEJveENvcm5lcjo6Qm90dG9tTGVmdDsKKyAgICByZXR1cm4gQm94Q29ybmVyOjpU
b3BSaWdodDsKK30KKworY29uc3RleHByIGlubGluZSBCb3hBeGlzIG1hcExvZ2ljYWxBeGlzVG9Q
aHlzaWNhbEF4aXMoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hBeGlzIGxvZ2ljYWxBeGlz
KQoreworICAgIGlmIChpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpKQorICAgICAgICByZXR1
cm4gbG9naWNhbEF4aXMgPT0gTG9naWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6OlZlcnRp
Y2FsIDogQm94QXhpczo6SG9yaXpvbnRhbDsKKyAgICByZXR1cm4gbG9naWNhbEF4aXMgPT0gTG9n
aWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6Okhvcml6b250YWwgOiBCb3hBeGlzOjpWZXJ0
aWNhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzMDc4OWQ5M2MwN2Iw
ZTdjMzAwNGE3M2U3NzQ4OGZkNmFjMjkyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcApAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgi
CisKKyNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RpbnlMUlVDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNV
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+CitjbGFzcyBUaW55TFJVQ2FjaGVQ
b2xpY3k8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4geworcHVibGljOgorICAg
IHN0YXRpYyBUaW55TFJVQ2FjaGU8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4m
IGNhY2hlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55TFJVQ2Fj
aGU8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4+IGNhY2hlOworICAgICAgICBy
ZXR1cm4gY2FjaGU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNLZXlOdWxsKGNvbnN0IEF0
b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gbG9jYWxl
SWRlbnRpZmllci5pc051bGwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGTG9j
YWxlUmVmPiBjcmVhdGVWYWx1ZUZvck51bGxLZXkoKQorICAgIHsKKyAgICAgICAgLy8gQ0YgaHlw
aGVuYXRpb24gZnVuY3Rpb25zIHVzZSBsb2NhbGUgKHJlZ2lvbmFsIGZvcm1hdHMpIGxhbmd1YWdl
LCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoIHByaW1hcnkgVUkgbGFuZ3VhZ2UsCisg
ICAgICAgIC8vIHNvIHdlIGNhbid0IHVzZSBkZWZhdWx0IGxvY2FsZSBoZXJlLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzE0ODk3NjY0Pi4KKyAgICAgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2Nh
bGUgPSBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlZmF1bHRM
YW5ndWFnZSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIENGU3Ry
aW5nSXNIeXBoZW5hdGlvbkF2YWlsYWJsZUZvckxvY2FsZShsb2NhbGUuZ2V0KCkpID8gbG9jYWxl
IDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBj
cmVhdGVWYWx1ZUZvcktleShjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBhZG9wdENGKENGTG9j
YWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGxvY2FsZUlkZW50aWZpZXIuc3RyaW5nKCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworCisgICAgICAgIHJldHVybiBDRlN0cmluZ0lzSHlw
aGVuYXRpb25BdmFpbGFibGVGb3JMb2NhbGUobG9jYWxlLmdldCgpKSA/IGxvY2FsZSA6IG51bGxw
dHI7CisgICAgfQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgY3JlYXRlS2V5Rm9yU3RvcmFnZShj
b25zdCBBdG9tU3RyaW5nJiBrZXkpIHsgcmV0dXJuIGtleTsgfQorfTsKK30KKworbmFtZXNwYWNl
IFBBTCB7CisKK2Jvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50
aWZpZXIpCit7CisgICAgcmV0dXJuIFRpbnlMUlVDYWNoZVBvbGljeTxBdG9tU3RyaW5nLCBSZXRh
aW5QdHI8Q0ZMb2NhbGVSZWY+Pjo6Y2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7Cit9CisK
K3NpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyB0ZXh0LCBzaXplX3QgYmVmb3Jl
SW5kZXgsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCit7CisgICAgUmV0YWlu
UHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBUaW55TFJVQ2FjaGVQb2xpY3k8QXRvbVN0cmluZywg
UmV0YWluUHRyPENGTG9jYWxlUmVmPj46OmNhY2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZpZXIpOwor
CisgICAgQ0ZPcHRpb25GbGFncyBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmllcyA9IDE7CisgICAg
Q0ZJbmRleCByZXN1bHQgPSBDRlN0cmluZ0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZvcmVJbmRl
eCh0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSwgYmVmb3JlSW5kZXgs
IENGUmFuZ2VNYWtlKDAsIHRleHQubGVuZ3RoKCkpLCBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmll
cywgbG9jYWxlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0ID09IGtDRk5vdEZv
dW5kID8gMCA6IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MTA2OGMzYzg4NGNiOWFiZjI0YWI4MTI3ZTVmMzBhZTMwNDJkMGRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpAQCAt
MCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRleHRCb3VuZGFy
aWVzLmgiCisKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQgPENvcmVGb3VuZGF0
aW9uL0NGU3RyaW5nVG9rZW5pemVyLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKyNpbXBvcnQgPHVuaWNvZGUvdWJyay5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgor
I2ltcG9ydCA8dW5pY29kZS91c3RyaW5nLmg+CisjaW1wb3J0IDx1bmljb2RlL3V0eXBlcy5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVmlldy5o
PgorI2ltcG9ydCA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KKyNpbXBvcnQgPHd0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaD4KKyNpbXBvcnQgPHd0Zi91bmljb2Rl
L0NoYXJhY3Rlck5hbWVzLmg+CisKK25hbWVzcGFjZSBQQUwgeworCisjaWYgIVVTRShBUFBLSVQp
CisKK3N0YXRpYyBib29sIGlzU2tpcENoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJu
IGMgPT0gMHhBMCB8fCBjID09ICdcbicgfHwgYyA9PSAnLicgfHwgYyA9PSAnLCcgfHwgYyA9PSAn
IScgIHx8IGMgPT0gJz8nIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IHVfaXNzcGFjZShjKTsK
K30KKworc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sKKyAg
ICByZXR1cm4gYyA9PSAweEEwIHx8IGMgPT0gJ1xuJyB8fCB1X2lzc3BhY2UoYyk7Cit9CisKK3N0
YXRpYyBib29sIGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIC8v
IEFtcGVyc2FuZCBpcyBhbiBleGNlcHRpb24gYWRkZWQgdG8gdHJlYXQgQVQmVCBhcyBhIHNpbmds
ZSB3b3JkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjIyNjQ+KS4KKyAgICByZXR1cm4gIUNGQ2hh
cmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5l
ZChrQ0ZDaGFyYWN0ZXJTZXRBbHBoYU51bWVyaWMpLCBjKSAmJiBjICE9ICcmJzsKK30KKworc3Rh
dGljIGJvb2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIHJldHVybiBDRkNo
YXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihDRkNoYXJhY3RlclNldEdldFByZWRlZmlu
ZWQoa0NGQ2hhcmFjdGVyU2V0U3ltYm9sKSwgYyk7Cit9CisKK3N0YXRpYyBib29sIGlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhlc2Ug
YXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNh
biBhcHBlYXIgd2l0aGluIHdvcmRzLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBj
aGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJy
ZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKK30KKworc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVm
IHRva2VuaXplckZvclN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCit7CisgICAgc3RhdGljIGF1dG8g
bG9jYWxlID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAgICAgICAgY29uc3QgY2hhciogbG9j
YWxJRCA9IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpOworICAgICAgICBhdXRvIGN1cnJlbnRM
b2NhbGVJRCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGxvY2FsSUQpLCBzdHJs
ZW4obG9jYWxJRCksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0b3JO
dWxsKSk7CisgICAgICAgIHJldHVybiBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGN1cnJlbnRMb2NhbGVJRC5nZXQoKSkpOworICAgIH0oKSk7CisKKyAgICBpZiAo
IWxvY2FsZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDRlJhbmdlIGVu
dGlyZVJhbmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSk7ICAgIAor
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1Rva2VuaXplclJl
Zj4+IHRva2VuaXplcjsKKyAgICBpZiAoIXRva2VuaXplci5nZXQoKSkKKyAgICAgICAgdG9rZW5p
emVyLmdldCgpID0gYWRvcHRDRihDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBzdHIsIGVudGlyZVJhbmdlLCBrQ0ZTdHJpbmdUb2tlbml6ZXJVbml0V29yZEJvdW5k
YXJ5LCBsb2NhbGUuZ2V0KCkuZ2V0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIENGU3RyaW5nVG9r
ZW5pemVyU2V0U3RyaW5nKHRva2VuaXplci5nZXQoKS5nZXQoKSwgc3RyLCBlbnRpcmVSYW5nZSk7
CisgICAgcmV0dXJuIHRva2VuaXplci5nZXQoKS5nZXQoKTsKK30KKworLy8gU2ltcGxlIGNhc2U6
IEEgd29yZCBpcyBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzIGRlbGltaXRlZCBieSBhIHNwZWNpYWwg
c2V0IG9mIHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgorc3RhdGljIHZvaWQgZmluZFNpbXBs
ZVdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwg
aW50KiBlbmQpCit7CisgICAgQVNTRVJUKHBvc2l0aW9uID49IDApOworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSk7CisKKyAgICB1bnNp
Z25lZCBzdGFydFBvcyA9IHBvc2l0aW9uOworICAgIHdoaWxlIChzdGFydFBvcyA+IDApIHsKKyAg
ICAgICAgaW50IGkgPSBzdGFydFBvczsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVT
dGFydFBvczsKKyAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVmb3JlU3Rh
cnRQb3MpOworICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJC
ZWZvcmVTdGFydFBvcykpIHsKKyAgICAgICAgICAgIEFTU0VSVChpID49IDApOworICAgICAgICAg
ICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIWlz
QW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3MpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckJlZm9y
ZUJlZm9yZVN0YXJ0UG9zOworICAgICAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFj
dGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpOworICAgICAgICAgICAgaWYgKGlzV29yZERlbGltaXRp
bmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFUxNl9CQUNLXzEodGV4dCwgMCwgc3RhcnRQ
b3MpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBlbmRQb3MgPSBwb3NpdGlvbjsKKyAgICB3
aGlsZSAoZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3Rl
cjsKKyAgICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJh
Y3Rlcik7CisgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBlbmRQb3M7CisgICAgICAgICAgICBVMTZfRldE
XzEodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8PSB0ZXh0
Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChpID09IHRleHQubGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyRW5kUG9z
OworICAgICAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSwgY2hhcmFjdGVy
QWZ0ZXJFbmRQb3MpOworICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFj
dGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
aXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRlckVuZFBvcykpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBv
cywgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgLy8gVGhlIHRleHQgbWF5IGNvbnNpc3Qg
b2YgYWxsIGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3IgYSBzZXJpZXMg
b2YgZW1vamkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCisgICAgLy8gbWFrZXMgbm8g
c2Vuc2UgKGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KCkgYmVoYXZp
b3IpLgorICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgdGV4dC5sZW5ndGgo
KSkgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgVTE2X0dFVCh0ZXh0LCAw
LCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChpc1N5bWJv
bENoYXJhY3RlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBv
cywgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgKnN0YXJ0ID0gc3RhcnRQb3M7CisgICAg
KmVuZCA9IGVuZFBvczsKK30KKworLy8gQ29tcGxleCBjYXNlOiB1c2UgQ0ZTdHJpbmdUb2tlbml6
ZXIgdG8gZmluZCB3b3JkIGJvdW5kYXJ5Lgorc3RhdGljIHZvaWQgZmluZENvbXBsZXhXb3JkQm91
bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2hhclN0cmluZyA9IHRleHQuY3JlYXRl
Q0ZTdHJpbmdXaXRob3V0Q29weWluZygpOworCisgICAgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYgdG9r
ZW5pemVyID0gdG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcuZ2V0KCkpOworICAgIGlmICgh
dG9rZW5pemVyKSB7CisgICAgICAgIC8vIEVycm9yIGNyZWF0aW5nIHRva2VuaXplciwgc28ganVz
dCB1c2Ugc2ltcGxlIGZ1bmN0aW9uLgorICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KHRl
eHQsIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IENGU3RyaW5nVG9rZW5pemVyVG9rZW5UeXBlIHRva2VuID0gQ0ZTdHJpbmdUb2tlbml6ZXJHb1Rv
VG9rZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOworICAgIGlmICh0b2tlbiA9PSBrQ0ZT
dHJpbmdUb2tlbml6ZXJUb2tlbk5vbmUpIHsKKyAgICAgICAgLy8gTm8gdG9rZW4gZm91bmQ6IHNl
bGVjdCBlbnRpcmUgYmxvY2suCisgICAgICAgIC8vIE5COiBJIG5ldmVyIGhpdCB0aGlzIHNlY3Rp
b24gaW4gYWxsIG15IHRlc3RpbmcuCisgICAgICAgICpzdGFydCA9IDA7CisgICAgICAgICplbmQg
PSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0ZSYW5nZSBy
ZXN1bHQgPSBDRlN0cmluZ1Rva2VuaXplckdldEN1cnJlbnRUb2tlblJhbmdlKHRva2VuaXplcik7
CisgICAgKnN0YXJ0ID0gcmVzdWx0LmxvY2F0aW9uOworICAgICplbmQgPSByZXN1bHQubG9jYXRp
b24gKyByZXN1bHQubGVuZ3RoOworfQorCisjZW5kaWYKKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5
KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sK
KyNpZiBVU0UoQVBQS0lUKQorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuY3JlYXRlTlNTdHJp
bmdXaXRob3V0Q29weWluZygpLmdldCgpXSk7CisgICAgTlNSYW5nZSByYW5nZSA9IFthdHRyaWJ1
dGVkU3RyaW5nIGRvdWJsZUNsaWNrQXRJbmRleDpzdGQ6Om1pbjx1bnNpZ25lZD4ocG9zaXRpb24s
IHRleHQubGVuZ3RoKCkgLSAxKV07CisgICAgKnN0YXJ0ID0gcmFuZ2UubG9jYXRpb247CisgICAg
KmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOworI2Vsc2UKKyAgICB1bnNpZ25l
ZCBwb3MgPSBwb3NpdGlvbjsKKyAgICBpZiAocG9zID09IHRleHQubGVuZ3RoKCkgJiYgcG9zKQor
ICAgICAgICAtLXBvczsKKworICAgIC8vIEZvciBjb21wbGV4IHRleHQgKFRoYWksIEphcGFuZXNl
LCBDaGluZXNlKSwgdmlzaWJsZV91bml0cyB3aWxsIHBhc3MgdGhlIHRleHQgaW4gYXMgYSAKKyAg
ICAvLyBzaW5nbGUgY29udGlndW91cyBydW4gb2YgY2hhcmFjdGVycywgcHJvdmlkaW5nIGFzIG11
Y2ggY29udGV4dCBhcyBpcyBwb3NzaWJsZS4KKyAgICAvLyBXZSBvbmx5IG5lZWQgb25lIGNoYXJh
Y3RlciB0byBkZXRlcm1pbmUgaWYgdGhlIHRleHQgaXMgY29tcGxleC4KKyAgICBVQ2hhcjMyIGNo
OworICAgIHVuc2lnbmVkIGkgPSBwb3M7CisgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5n
dGgoKSwgY2gpOworICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJv
dW5kYXJ5KGNoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGltcHJvdmVzIG91ciB3b3Jk
IGJvdW5kYXJ5IGJlaGF2aW9yLCBidXQgZG9lc24ndCBhY3R1YWxseSBnbyBmYXIgZW5vdWdoLgor
ICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODg1Mzk1MT4gVGFrZSBjb21wbGV4IHdvcmQgYm91
bmRhcnkgZmluZGluZyBwYXRoIHdoZW4gbmVjZXNzYXJ5CisgICAgaWYgKCFpc0NvbXBsZXgpIHsK
KyAgICAgICAgLy8gQ2hlY2sgYWdhaW4gZm9yIGNvbXBsZXggdGV4dCwgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBydW4uCisgICAgICAgIGkgPSAwOworICAgICAgICBVMTZfTkVYVCh0ZXh0LCBpLCB0ZXh0
Lmxlbmd0aCgpLCBjaCk7CisgICAgICAgIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZvcldv
cmRCb3VuZGFyeShjaCk7CisgICAgfQorCisgICAgaWYgKGlzQ29tcGxleCkKKyAgICAgICAgZmlu
ZENvbXBsZXhXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOworICAgIGVs
c2UKKyAgICAgICAgZmluZFNpbXBsZVdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgc3RhcnQs
IGVuZCk7CisKKyNkZWZpbmUgTE9HX1dPUkRfQlJFQUsgMAorI2lmIExPR19XT1JEX0JSRUFLCisg
ICAgYXV0byB1bmlTdHJpbmcgPSB0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKTsK
KyAgICBhdXRvIGZvdW5kV29yZCA9IHRleHQuc3Vic3RyaW5nKCpzdGFydCwgKmVuZCAtICpzdGFy
dCkuY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5TTG9nKEAiJXNfQlJFQUsg
JyVAJyAoJWQsJWQpIGluICclQCcgKCVwKSBhdCAlZCwgbGVuZ3RoPSVkIiwgaXNDb21wbGV4ID8g
IkNPTVBMRVgiIDogIlNJTVBMRSIsIGZvdW5kV29yZC5nZXQoKSwgKnN0YXJ0LCAqZW5kLCB1bmlT
dHJpbmcuZ2V0KCksIHVuaVN0cmluZy5nZXQoKSwgcG9zaXRpb24sIHRleHQubGVuZ3RoKCkpOwor
I2VuZGlmCisgICAgCisjZW5kaWYKK30KKwordm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmlu
Z1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKK3sKKyAgICBpbnQgc3RhcnQ7Cisg
ICAgZmluZFdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgJnN0YXJ0LCBlbmQpOworfQorCitp
bnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBi
b29sIGZvcndhcmQpCit7ICAgCisjaWYgVVNFKEFQUEtJVCkKKyAgICBTdHJpbmcgdGV4dFdpdGhv
dXRVbnBhaXJlZFN1cnJvZ2F0ZXM7CisgICAgaWYgKGhhc1VucGFpcmVkU3Vycm9nYXRlKHRleHQp
KSB7CisgICAgICAgIHRleHRXaXRob3V0VW5wYWlyZWRTdXJyb2dhdGVzID0gcmVwbGFjZVVucGFp
cmVkU3Vycm9nYXRlc1dpdGhSZXBsYWNlbWVudENoYXJhY3Rlcih0ZXh0LnRvU3RyaW5nV2l0aG91
dENvcHlpbmcoKSk7CisgICAgICAgIHRleHQgPSB0ZXh0V2l0aG91dFVucGFpcmVkU3Vycm9nYXRl
czsKKyAgICB9CisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5jcmVhdGVOU1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkuZ2V0KCldKTsKKyAgICByZXR1cm4gW2F0dHJpYnV0ZWRTdHJpbmcgbmV4dFdv
cmRGcm9tSW5kZXg6cG9zaXRpb24gZm9yd2FyZDpmb3J3YXJkXTsKKyNlbHNlCisgICAgLy8gVGhp
cyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBub24taVBob25lIHZl
cnNpb24sIGJ1dCBpdCB3b3JrcworICAgIC8vIGZvciB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQg
aXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJlIHdpbGwgYmUKKyAgICAvLyB0dW5l
ZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBrZXlib2Fy
ZCBhbmQgdGV4dCBlZGl0aW5nLgorICAgIGludCBwb3MgPSBwb3NpdGlvbjsKKyAgICBVQnJlYWtJ
dGVyYXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKKyAgICBpZiAoYm91
bmRhcnkpIHsKKyAgICAgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICBwb3MgPSB1YnJrX2ZvbGxvd2luZyhib3VuZGFyeSwgcG9zKTsKKyAgICAgICAg
ICAgICAgICBpZiAocG9zID09IFVCUktfRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgcG9zID0g
dGV4dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwb3MpIDwgdGV4dC5sZW5ndGgoKSAmJiAoIXBvcyB8fCAhaXNTa2lwQ2hhcmFjdGVyKHRleHRb
cG9zIC0gMV0pKSAmJiBpc1NraXBDaGFyYWN0ZXIodGV4dFtwb3NdKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcG9zID0gdWJya19wcmVjZWRp
bmcoYm91bmRhcnksIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBVQlJLX0RPTkUp
CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICB9IHdoaWxlIChwb3Mg
PiAwICYmIGlzU2tpcENoYXJhY3Rlcih0ZXh0W3Bvc10pICYmICFpc1doaXRlc3BhY2VDaGFyYWN0
ZXIodGV4dFtwb3MgLSAxXSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwb3M7Cisj
ZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvdGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiNjczNjg5ZTBi
MjkwMGY3ZjZmNTYyNTE1MDhmMThhMzE0MjNiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbQpAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXh0Q2hlY2tp
bmcuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitOU1RleHRDaGVja2luZ1R5cGVzIG5zVGV4dENo
ZWNraW5nVHlwZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHR5cGVzKQoreworICAgIE5T
VGV4dENoZWNraW5nVHlwZXMgbWFzayA9IDA7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRD
aGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKKyAgICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5
cGVTcGVsbGluZzsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3Jh
bW1hcikpCisgICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAgICBp
ZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpCisgICAgICAgIG1hc2sg
fD0gTlNUZXh0Q2hlY2tpbmdUeXBlTGluazsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENo
ZWNraW5nVHlwZTo6UXVvdGUpKQorICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZVF1
b3RlOworICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkKKyAg
ICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5cGVEYXNoOworICAgIGlmICh0eXBlcy5jb250
YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpCisgICAgICAgIG1hc2sgfD0gTlNU
ZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pKQorICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5n
VHlwZUNvcnJlY3Rpb247CisgICAgcmV0dXJuIG1hc2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBB
TAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA3YWY1ZWI0Nzc3
NDYxYjNlNGM3MmM1ZTczMWVjZGEwMTRmOTczODU5Li43NDRkY2MzYTVmM2QxNDAyMWJhMTJhYzAw
NTFkYzE3NWViMGY2YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjIzNiwxNCArMjIzNiw5IEBAIHBs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRl
bWVudC5jcHAKIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5jcHAK
IHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKLXBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwCi1wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcAogcGxhdGZvcm0vdGV4
dC9FbmNvZGluZ1RhYmxlcy5jcHAKIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5n
LmNwcAogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKLXBsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmNwcAotcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCi1wbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3Bw
CiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggM2Y1YjYyZjM3NjNmY2Y0YjJiODQw
NjYyZWRmYjM1MWZiYTEzN2FmNi4uM2E2YzA3ZmZlYzFjNmY4ZTMzOTc4YzU3ZTJhOWYwOWRiYmNj
Y2JlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01ODksMTIgKzU4OSw5IEBAIHBsYXRm
b3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbQogcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJVXRp
bGl0aWVzLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVzcG9uc2UubW0KLXBs
YXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIHBsYXRmb3JtL3RleHQvY29jb2EvTG9j
YWxlQ29jb2EubW0KIHBsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxpemVkRGF0ZUNhY2hlLm1tCiBw
bGF0Zm9ybS90ZXh0L2lvcy9UZXh0RW5jb2RpbmdSZWdpc3RyeUlPUy5tbQotcGxhdGZvcm0vdGV4
dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0KLXBsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2luZ01h
Yy5tbQogcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KIHBsYXRm
b3JtL3hyL2NvY29hL1BsYXRmb3JtWFJDb2NvYS5tbQogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ29j
b2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2MGU0Mjg4Mzk3NTY4ZDQ1MGQxMmYxODViOGY2ZmVhNjA2NjRlMTc4Li44OTA4
YmM5ZTVlMThkMmRmYWNlMTQ5MjQ4OGZiYzBhOTdjYmE2Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MzgsNyArNDM4LDYg
QEAKIAkJMTQyMDExQjcwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMDExQjUw
QTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MkI5N0NBMTMxMzg5NDMwMDhC
RUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M4MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDMyRTg0NzBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMyRTg0
NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0NzZBQTgxNURDNEJCMTAwMzA1REIyIC8q
IFdyaXRpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ3NkFBNzE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0
MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNr
RGF0YS5oICovOyB9OwogCQkxNDc3RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogQmFja0ZvcndhcmRD
YWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDc5RkFFRTEwOUFFMzc1MDBE
RUQ2NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ3OUZBRTYxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCAqLzsg
fTsKQEAgLTYzMCw2ICs2MjksNyBAQAogCQkxQzQzREU2QjIyQUI0QjhBMDAxNTI3RDkgLyogTG9j
YWxDdXJyZW50VHJhaXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQzQzREU2ODIyQUI0QjhBMDAxNTI3RDkgLyogTG9jYWxDdXJyZW50
VHJhaXRDb2xsZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMUM0RDBERDMyNEQ5RjEwRDAwM0Q3NDk4IC8qIEdseXBoQnVmZmVyTWVtYmVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0RDBE
RDEyNEQ5RjBEQjAwM0Q3NDk4IC8qIEdseXBoQnVmZmVyTWVtYmVycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDNERCMDI2MjczMzlGRTAwMDdC
MEFEMSAvKiBTaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0REIwMjQyNzMzOUU1RTAwN0IwQUQxIC8qIFNob3Vs
ZExvY2FsaXplQXhpc05hbWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMUM1QzU4MkEyNzU5NzUzNTAwM0I1NDBEIC8qIFRleHRDaGVja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzVD
NTgyMzI3NTc4MDM3MDAzQjU0MEQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzVFMURBODI2Rjk0QjkwMDBF
MDdBRjEgLyogRm9udFBhbGV0dGVWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUUxREE2MjZGOTQ5QjkwMEUwN0FGMSAvKiBGb250UGFsZXR0
ZVZhbHVlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTFDNjYyNjExMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM2NjI2MEYxQzZFN0NBNjAwQUI1MjdD
IC8qIEZvbnRGYWNlLmggKi87IH07CiAJCTFDNzNBNzEzMjE4NTc1N0UwMDRDQ0VBNSAvKiBUZXh0
VW5kZXJsaW5lT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQ0I2QjRGQjIxN0I4Mzk0MDA5M0I5Q0QgLyogVGV4dFVuZGVybGluZU9mZnNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDI1
LDE0ICsxMDI1LDEyIEBACiAJCTM3MkQzRTU0MjE2NTc4QUUwMEM1RTAyMSAvKiBEYXRhVVJMRGVj
b2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRB
MDA3ODIxQjgyMEVDODAwMkM1QTZFIC8qIERhdGFVUkxEZWNvZGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzcyRDNFNTUyMTY1NzhBRTAwQzVF
MDIxIC8qIFNjcmlwdE1vZHVsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODM4OTUxQkFEMTQ1RjAwRDYyRUUzIC8qIFNjcmlwdE1vZHVs
ZUxvYWRlci5oICovOyB9OwogCQkzNzJEM0U1NzIxNjU3OEFFMDBDNUUwMjEgLyogTmF2aWdhdG9y
Q3JlZGVudGlhbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3RDg0NjI2MUZFODk1RjgwMENBMzY4MiAvKiBOYXZpZ2F0b3JDcmVkZW50aWFscy5oICov
OyB9OwotCQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgw
MEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdE
RTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zlcmxh
cFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5
QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAwRjRCNjYxIC8qIENy
ZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzkyOTE3RTE5ODc2
NzhGMDBGNEI2NjEgLyogQ3JlZGVudGlhbENvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3QzE5ODc2NzhGMDBGNEI2NjEgLyogQ3JlZGVu
dGlhbENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzc5OTE5OTcxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzk5MTk5NTEyMDBEREY0
MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAqLzsgfTsKIAkJMzc5OTE5QjIxMjAwREU1MDAw
RUEwNDFDIC8qIGxpYnouZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzk5MTlCMTEyMDBERTUwMDBFQTA0MUMgLyogbGliei5keWxpYiAqLzsg
fTsKLQkJMzc5RTM3MTcxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5RTM3MTUxMzczNkE2
NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oICovOyB9OwogCQkzNzlFNjFDQTEyNkNBNUM0
MDBCNjNFOEQgLyogQmFzZUJ1dHRvbklucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5RTYxQzYxMjZDQTVDMzAwQjYzRThEIC8qIEJhc2VC
dXR0b25JbnB1dFR5cGUuaCAqLzsgfTsKIAkJMzc5RTYxQ0MxMjZDQTVDNDAwQjYzRThEIC8qIEJh
c2VDaGVja2FibGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OUU2MUM4MTI2Q0E1QzMwMEI2M0U4RCAvKiBCYXNlQ2hlY2thYmxlSW5w
dXRUeXBlLmggKi87IH07CiAJCTM3QkFBRTU4MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9u
U3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
QkFBRTU3MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwMSw3ICsxMjk5LDYgQEAK
IAkJNDRFMzQ5RjkyNDZGNEUxOTAwNjg0NzlDIC8qIExpYldlYlJUQ0VudW1UcmFpdHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0RTM0OUY3MjQ2RjRE
QzcwMDY4NDc5QyAvKiBMaWJXZWJSVENFbnVtVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8q
IExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDUxMjUw
MjMxNURDRTM3RDAwMkY4NEUyIC8qIFNwaW5CdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTEyNTAyMTE1RENFMzdEMDAyRjg0RTIg
LyogU3BpbkJ1dHRvbkVsZW1lbnQuaCAqLzsgfTsKLQkJNDUzRUI2MzcxNTlDNTcwNDAwMDAxQkI3
IC8qIERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NTNFQjYzNTE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NTgzMEQ0
RTE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1ODMwRDRDMTY3OUI0RjgwMEFDRjhD
MyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTQ1OEZFNDBBMTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJT
ZWFyY2hGaWVsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi87IH07
CiAJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEg
LyogRGVjaW1hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yOTk5LDcgKzI5OTYsNiBAQAogCQk5M0YxOUIxNzA4MjQ1RTU5MDAxRTlBQkMgLyog
bGliaWN1Y29yZS5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICov
OyB9OwogCQk5M0YxRDVCQjEyRDUzMkM0MDA4MzJCRUMgLyogV2ViR0xMb3NlQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMUQ1QjgxMkQ1
MzJDNDAwODMyQkVDIC8qIFdlYkdMTG9zZUNvbnRleHQuaCAqLzsgfTsKIAkJOTNGMUQ1QzExMkQ1
MzM1NjAwODMyQkVDIC8qIEpTV2ViR0xMb3NlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMUQ1QkYxMkQ1MzM1NjAwODMyQkVDIC8qIEpT
V2ViR0xMb3NlQ29udGV4dC5oICovOyB9OwotCQk5M0YyQ0M5MzI0MjdGQjlDMDA1ODUxRDggLyog
Q2hhcmFjdGVyUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRjJDQzkxMjQyN0ZCOUEwMDU4NTFEOCAvKiBDaGFyYWN0ZXJSYW5nZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjZCODFGMjU2
N0EwOEMwMEEwODQ4OCAvKiBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2VJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2QjgxQzI1Njc5
RjcwMDBBMDg0ODggLyogU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291cmNlSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjZCODIyMjU2
N0E2NTYwMEEwODQ4OCAvKiBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZCODFCMjU2NzlGNkYw
MEEwODQ4OCAvKiBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Y2RjFFRTEyN0Y3MEIxMDA1
NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZGMUVCMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRl
eHRFdmVudC5oICovOyB9OwpAQCAtMzE3Niw3ICszMTcyLDYgQEAKIAkJOTdCQzg0ODQxMjM2RkQ5
MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzg0ODIxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHRE
b2N1bWVudFBhcnNlci5oICovOyB9OwogCQk5N0JDODQ5QjEyMzcwQTRCMDAwQzYxNjEgLyogSFRN
TElucHV0U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5N0JDODQ5QTEyMzcwQTRCMDAwQzYxNjEgLyogSFRNTElucHV0U3RyZWFtLmggKi87IH07
CiAJCTk3QkM4NEI0MTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM4NEIyMTIzNzExODAwMDBD
NjE2MSAvKiBUZXh0RG9jdW1lbnQuaCAqLzsgfTsKLQkJOTdDMDc4NTAxMTY1RDVCRTAwM0EzMkVG
IC8qIFN1ZmZpeFRyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3QzA3ODRGMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggKi87IH07CiAJ
CTk3QzQ3MURDMTJGOTI1QkQwMDg2MzU0QiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3kuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QzQ3MURBMTJGOTI1
QkQwMDg2MzU0QiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5N0QyQUQwNDE0QjgyM0E2MDA5M0RGMzIg
LyogRE9NV2luZG93UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3RDJBRDAyMTRCODIzQTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3
RENFMjAyMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdEQ0UyMDAxMDgwN0M3NTAwNTdE
Mzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMyMTEsNyArMzIwNiw2IEBACiAJCTlCNTMyRUE0MUJBOTI4
NTcwMDM4QTgyNyAvKiBTbG90QXNzaWdubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1MzJFQTIxQkE5Mjg1NzAwMzhBODI3IC8qIFNsb3RBc3Np
Z25tZW50LmggKi87IH07CiAJCTlCNjlEM0I1MUI5OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
NjlEM0IzMUI5OEZGRTkwMEUzNTEyQiAvKiBIVE1MU2xvdEVsZW1lbnQuaCAqLzsgfTsKIAkJOUI2
OUQzQjkxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjY5RDNCNzFCOTkxMDA3MDBFMzUx
MkIgLyogSlNIVE1MU2xvdEVsZW1lbnQuaCAqLzsgfTsKLQkJOUI2QzQxNTMxMzQ0OTQ5MDAwMDg1
QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCNkM0MTUyMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRo
RGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOUI3MTRFMjExQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3MTRFMUYxQzkxMTY2OTAwQUMw
RTkyIC8qIEV2ZW50UGF0aC5oICovOyB9OwogCQk5Qjc0MjYwNTIzNEJFOTU2MDBEQjUyRTkgLyog
SWRsZVJlcXVlc3RDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUI3NDI2MDMyMzRCRTk1NjAwREI1MkU5IC8qIElkbGVSZXF1ZXN0Q2FsbGJh
Y2suaCAqLzsgfTsKIAkJOUI3NDI2MEIyMzRCRUE2RTAwREI1MkU5IC8qIElkbGVEZWFkbGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3NDI2MDgy
MzRCRUE2RTAwREI1MkU5IC8qIElkbGVEZWFkbGluZS5oICovOyB9OwpAQCAtMzQ5Myw3ICszNDg3
LDYgQEAKIAkJQTYxNDhBNzkxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MTQ4QTc3
MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmggKi87IH07CiAJCUE2RDE2
OTY0MTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNkQxNjk2MzEzNDZCNEMxMDAwRUI3NzAgLyogU2hh
ZG93Um9vdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE2RDVBOTlEMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNTFCRDcxMkYxNTU4
RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTMxMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxl
bWVudC5oICovOyB9OwogCQlBNzE4NzYwRTBCMkExMjAxMDBBMTZFQ0UgLyogRHJhZ0FjdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3NjBE
MEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQ
bGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcyM0Y3N0ExNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFj
cm9zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTM1MTEsNyArMzUwNCw2IEBACiAJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3
OTE0MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyog
SlNJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oICovOyB9OwogCQlB
NzdCNDFBMDEyRTY3NUE5MDA1NDM0M0QgLyogVGV4dEV2ZW50SW5wdXRUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzdCNDE5RjEyRTY3NUE5MDA1
NDM0M0QgLyogVGV4dEV2ZW50SW5wdXRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc3RDAwMTIxMzNCMEFFQjAwRDY2NThDIC8qIFRleHRD
aGVja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc3RDAwMTExMzNCMEFFQjAwRDY2NThDIC8qIFRleHRDaGVja2luZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3OEZFMTNDMTIzNjZCMTAwMEFD
RThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzlCQURB
MjE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3OUJBRDlFMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxl
RmVhdHVyZS5oICovOyB9OwogCQlBNzlCQURBNDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5QkFEQTAx
NjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuaCAqLzsgfTsKQEAgLTM1OTcsNyArMzU4OSw2IEBA
CiAJCUE4NEQ4MkMxMTFEMzQ3NDgwMDk3Mjk5MCAvKiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEQ4MkJG
MTFEMzQ3NDgwMDk3Mjk5MCAvKiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJ
QTg0RUJEODMwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVCRDgxMENCOEM5NzcwMDA3
OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg1MzEyM0QxMUQwNDcxQjAwRDREMDc3IC8qIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg1MzEyM0MxMUQwNDcxQjAwRDREMDc3IC8qIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUE4NjNFMjAxMTM0MzQxMjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2M0UyMDAxMzQzNDEyMDAw
Mjc0OTI2IC8qIFVuaWNvZGVCaWRpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Qzkw
OURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4
MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50
LmggKi87IH07CiAJCUE4NjYyOUQzMDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNE
MDlEQTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLzsgfTsKQEAgLTM2MzgsNyAr
MzYyOSw2IEBACiAJCUE4OTk0MzI4MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjYwQjQy
MzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg5Q0NDNTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODlDQ0M1MTBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQuaCAqLzsgfTsKIAkJQThDMjI4QTExMUQ1NzIyRTAwRDVBN0QzIC8qIERlY29k
ZWREYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QzIyODlGMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3Vt
ZW50UGFyc2VyLmggKi87IH07Ci0JCUE4QzQwMjkzMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVu
TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThD
NDAyOTIxMzQ4QjIyMjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE3RkQwOUQ1NjMyNzAwMDNBQzhE
IC8qIFN0eWxlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE4MDcw
OUQ1NjMyNzAwMDNBQzhEIC8qIEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzRBN0Y1MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE4
MEIwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNEE3RjkwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJp
YnV0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0zODg3LDE2ICszODc3LDExIEBACiAJCUIyQTFGMkIxMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdN
aXNzaW5nR2x5cGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMkExRjJBODBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHTWlzc2luZ0dseXBoRWxl
bWVudC5oICovOyB9OwogCQlCMkFGRkM3RTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkIxRjcx
NzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkIxRjcxNTBEMDBDQUE4MDA0QUVB
NjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi87IH07Ci0JCUIyQzNEQTI0MEQwMDZDMUQw
MEVGNkYyNiAvKiBCaWRpQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0Q5RjMwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RB
MjUwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0Q5RjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJp
ZGlSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUIyQzNEQTJGMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEOUZGMEQwMDZD
MUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMkMzREEzNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEJvdW5kYXJpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQzNEQTA0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTNBMEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQzNEQTBBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREEz
QzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjSUNVLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwQzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dENvZGVjSUNVLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJDM0RBM0UwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMEUwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTQwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
Q29kZWNVc2VyRGVmaW5lZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJDM0RBMTAwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVk
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJD
M0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExMjBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dENvZGVjVVRGMTYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlCMkMzREE0NTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEZsYWdzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREExNTBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dEZsYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBNDcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNv
ZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0RBMTcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTQ5MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMTkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREE1MDBEMDA2Q0Q2MDBF
RjZGMjYgLyogRm9udENhc2NhZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNDExNCw4ICs0MDk5LDYgQEAKIAkJQkM0QTUzMzMyNTYwNTk4MzAw
MjhDNTkyIC8qIEhUTUxQYXJzZXJTY3JpcHRpbmdGbGFnUG9saWN5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzMjI1NjA1OTgzMDAyOEM1OTIg
LyogSFRNTFBhcnNlclNjcmlwdGluZ0ZsYWdQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzRBNTMzNTI1NjA1QTU2MDAyOEM1OTIgLyog
RGF0YURldGVjdG9yVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM0QTUzMzQyNTYwNUE1NjAwMjhDNTkyIC8qIERhdGFEZXRlY3RvclR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzRBNTMz
NzI1NjA1QUUxMDAyOEM1OTIgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzNjI1NjA1QUUxMDAyOEM1
OTIgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM0QTUzMzkyNTYwNjM5ODAwMjhDNTkyIC8qIEZvbnRS
ZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzRBNTMzODI1NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzRBNTMzQjI1
NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0QTUzM0EyNTYwNjRFMTAwMjhDNTkyIC8qIFRleHRE
aXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlCQzREREQ5NjI3M0Q5NDk5MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbFBsYXllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0REREOEYyNzNE
ODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9kZWxQbGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzREREQ5NzI3M0Q5NEE4MDA2NjBFQkIg
LyogU2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0REREOTEyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0
TW9kZWxMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQzUxMTU2RTEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUx
MTU2RDEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi87IH07CkBAIC00
MzU2LDcgKzQzMzksNiBAQAogCQlDNTEzN0NGMzExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJp
bmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTEzN0NGMTExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi87IH07CiAJCUM1
MjI3REYxMUMzQzZERjEwMEY1RUQ1NCAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTIyN0RFRjFDM0M2REQ3MDBGNUVENTQg
LyogRGF0YURldGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUM1NDQyNzRCMTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQ0Mjc0OTEx
QTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUM1NTkyRjc4MUE5MkFBMjgwMDFGODg2MiAvKiBD
aGFyYWN0ZXJQcm9wZXJ0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTU5MkY3NzFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGll
cy5oICovOyB9OwogCQlDNTcyRUUxRjEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3MkVFMUQxMjAx
QzlCQzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguaCAqLzsgfTsKIAkJQzU4NUE2NjMxMUQ0RkFDNTAw
NEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjYxMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5k
aW5nVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQzU4NUE2ODMxMUQ0RkIwODAwNEMzRTRCIC8qIEpTSURCRGF0YWJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNjZCMTFENEZC
MDcwMDRDM0U0QiAvKiBKU0lEQkRhdGFiYXNlLmggKi87IH07CkBAIC02NDM0LDcgKzY0MTYsNiBA
QAogCQkwRkRBN0MxNTE4ODMyMkVCMDBDOTU0QjUgLyogSlNUb3VjaExpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUb3VjaExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQTdDMUMxODgzMjJGQzAwQzk1NEI1IC8qIEpTR2VzdHVyZUV2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2VzdHVyZUV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQTdDMUQxODgzMjJGQzAwQzk1NEI1
IC8qIEpTR2VzdHVyZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
R2VzdHVyZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGREE3QzIwMTg4
MzJCQ0MwMEM5NTRCNSAvKiBEYXRlVGltZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEYXRlVGltZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGREE3QzIyMTg4MzMwQTkwMEM5NTRCNSAvKiBEcmFnSW1hZ2VJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnSW1hZ2VJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREE3QzI0MTg4MzMzMzIwMEM5NTRCNSAvKiBK
U1dlYktpdFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQTdDMjUxODgzMzMz
MjAwQzk1NEI1IC8qIEpTV2ViS2l0UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdFBsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2MTgsNyAr
NjU5OSw2IEBACiAJCTE0MkI5N0M4MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MzJFODQ2MEM1
MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdDQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxNDQ3NkFBNzE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGluZ01vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OUUyNEExMDdENEE4NDAwQjU3OTNGIC8qIEpTQ2Fs
bGJhY2tEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FsbGJhY2tE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjg2MTA3RDREQjQwMEI1
NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBCYWNrRm9yd2FyZENhY2hlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZENhY2hlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMTUsNiArNzA5NSw3IEBACiAJCTFDNEQwREQx
MjREOUYwREIwMDNENzQ5OCAvKiBHbHlwaEJ1ZmZlck1lbWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2x5cGhCdWZmZXJNZW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNERC
MDI0MjczMzlFNUUwMDdCMEFEMSAvKiBTaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzUwQzQ5NTIyQzg0RjI0MDBBNkU0QkUgLyogV0hMU0xTdGFuZGFyZExpYnJhcnlG
dW5jdGlvbk1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN0YW5kYXJkTGlicmFyeUZ1
bmN0aW9uTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MjMyNzU3
ODAzNzAwM0I1NDBEIC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDNUUxREE2MjZGOTQ5QjkwMEUwN0FGMSAvKiBGb250UGFsZXR0ZVZhbHVlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250UGFsZXR0ZVZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzY2MjYwRTFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzY2MjYwRjFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZhY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTgzNjksNyArODM1MCw2IEBACiAJCTM2NjJGOTg0MDQ3Q0VEQkU1
REREQUZBQSAvKiBSZW5kZXJNYXRoTUxNZW5jbG9zZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxNZW5jbG9zZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3MTE5QTc5MjBDQ0I2MTAwMDJDNkRDOSAvKiBXZWJLaXRUYXJnZXRD
b25kaXRpb25hbHMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV2ViS2l0VGFyZ2V0Q29uZGl0aW9u
YWxzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzE3RDdFNTE3RUND
M0E2MDAzQzI3NkQgLyogZXh0cmFjdC1sb2NhbGl6YWJsZS1zdHJpbmdzLnBsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsg
bmFtZSA9ICJleHRyYWN0LWxvY2FsaXphYmxlLXN0cmluZ3MucGwiOyBwYXRoID0gIlNjcmlwdHMv
ZXh0cmFjdC1sb2NhbGl6YWJsZS1zdHJpbmdzLnBsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMzcxQTY3Q0ExMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSHlwaGVuYXRpb25DRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdl
U2VyaWFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlU2VyaWFs
aXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFFNjVDRDEzNjYxRUVEMDBC
RUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFnZVNlcmlhbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogRm9udFJhbmdlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250UmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04MzgwLDkgKzgzNjAsNyBAQAogCQkzNzFGNTNFODBEMjcwNEY5MDBFQ0UwRDUgLyog
Q1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzJBREEzNzE5N0Y0N0I5MDBGQzUwMUUgLyogUHJvdGVjdGlvblNwYWNlQ29jb2EuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdGVjdGlvblNwYWNlQ29jb2EuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcyQURBMzkxOTdGNjg3NjAwRkM1MDFFIC8q
IFByb3RlY3Rpb25TcGFjZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUHJvdGVjdGlvblNwYWNlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTM3MkMwMEMzMTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MkMwMEQ4MTI5NjE5RjgwMDVDOTU3NSAvKiBG
aW5kT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSHlw
aGVuYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc2RENDRTAxM0I0Rjk2
NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGV4dFJ1bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzJCMDk1
MTY1MzU4NTYwMDBBNDlDQSAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQb3B1cE9wZW5pbmdPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RS
ZXF1ZXN0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJsYXBU
ZXN0UmVxdWVzdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM5NSw4
ICs4MzczLDYgQEAKIAkJMzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdPRkZGaWxlRm9ybWF0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5OTE5OTUxMjAwRERGNDAwRUEw
NDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdPRkZGaWxlRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTkxOUIx
MTIwMERFNTAwMEVBMDQxQyAvKiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBs
aWJ6LmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGliei5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKLQkJMzc5RTM3MTQxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdW90ZWRQcmludGFi
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzNzlFMzcxNTEzNzM2QTY2MDBC
OUU5MTkgLyogUXVvdGVkUHJpbnRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1b3RlZFByaW50YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzlF
NjFDNTEyNkNBNUMzMDBCNjNFOEQgLyogQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlQnV0dG9uSW5wdXRUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5RTYxQzYxMjZDQTVDMzAwQjYzRThEIC8qIEJh
c2VCdXR0b25JbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFz
ZUJ1dHRvbklucHV0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzlFNjFD
NzEyNkNBNUMzMDBCNjNFOEQgLyogQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwNzIsNyArOTA0OCw2IEBACiAJCTQ1MTI1
MDIwMTVEQ0UzN0QwMDJGODRFMiAvKiBTcGluQnV0dG9uRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGluQnV0dG9uRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MTI1MDIxMTVEQ0UzN0QwMDJGODRFMiAvKiBTcGluQnV0
dG9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGluQnV0dG9u
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTFBNDlGOEY4NzI2QkUw
NzE1MThCRTIgLyogSVNPUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyQm94LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVj
aWZpY0hlYWRlckJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ1M0VCNjM1
MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRlVGltZUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NTgzMEQ0QjE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0b3Njcm9sbENvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTgzMEQ0QzE2NzlCNEY4MDBB
Q0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXV0b3Njcm9sbENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNlYXJjaEZpZWxkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzMyLDcgKzEyNzA3LDYgQEAKIAkJ
OTNGMUQ1QjkxMkQ1MzJDNDAwODMyQkVDIC8qIFdlYkdMTG9zZUNvbnRleHQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdlYkdMTG9zZUNvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0YxRDVCRTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xMb3NlQ29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjFENUJGMTJENTMzNTYw
MDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJHTExvc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTkzRjJDQzkxMjQyN0ZCOUEwMDU4NTFEOCAvKiBDaGFyYWN0ZXJSYW5nZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJSYW5nZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0Y2QjgxQjI1Njc5RjZGMDBBMDg0ODggLyogU3BlZWNoUmVjb2du
aXRpb25DYXB0dXJlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNw
ZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0Y2QjgxQzI1Njc5RjcwMDBBMDg0ODggLyogU3BlZWNoUmVjb2duaXRpb25DYXB0dXJl
U291cmNlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVlY2hSZWNv
Z25pdGlvbkNhcHR1cmVTb3VyY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzRjZCODFEMjU2NzlGNzAwMEEwODQ4OCAvKiBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3Vy
Y2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWVjaFJl
Y29nbml0aW9uQ2FwdHVyZVNvdXJjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTMwOTYsNyArMTMwNzAsNiBAQAogCQk5N0JDODQ5QTEyMzcwQTRCMDAwQzYxNjEgLyog
SFRNTElucHV0U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxJ
bnB1dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDODRCMTEyMzcx
MTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRleHREb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk3QkM4NEIyMTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTk3QzA3ODRGMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1ZmZpeFRyZWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTdDMUY1NTIxMjI4NTVDQjAwRURFNjE1IC8qIEhUTUxTdGFja0l0
ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN0YWNrSXRlbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0MxRjU1MjEyMjg1NUNCMDBFREU2MTYgLyog
SFRNTFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxUb2tlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0MxRjU1MjEyMjg1NUNCMDBFREU2MTcg
LyogQXRvbUhUTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9t
SFRNTFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzIxNiw3ICsxMzE4
OSw2IEBACiAJCTlCNjlEM0I3MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxTbG90RWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjZCQzk2MDFCOTc1OTY2MDA1QUUxRjAgLyog
SlNTaGFkb3dSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U2hhZG93Um9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkJDOTYxMUI5
NzU5NjYwMDVBRTFGMCAvKiBKU1NoYWRvd1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlC
NkM0MTUyMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI3MTRFMUUxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0
aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFBhdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIg
LyogRXZlbnRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Qjc0MjYwMzIzNEJFOTU2MDBEQjUy
RTkgLyogSWRsZVJlcXVlc3RDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGxlUmVxdWVzdENh
bGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzc3MSw3ICsxMzc0Myw2
IEBACiAJCUE2RDE2OTYzMTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTZENUE5OUExNjI5RDZGRjAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE2RDVBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAv
KiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2
RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERy
YWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzc5OSw3ICsxMzc3
MCw2IEBACiAJCUE3Nzk3OTI0MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltYWdlRGF0YS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0lt
YWdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ltYWdlRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzdCNDE5RjEyRTY3NUE5MDA1NDM0M0Qg
LyogVGV4dEV2ZW50SW5wdXRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRFdmVudElucHV0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzdE
MDAxMTEzM0IwQUVCMDBENjY1OEMgLyogVGV4dENoZWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzg0OTQxQTBCNUZFNTA3MDAxRTIzN0EgLyogRGF0YVRyYW5zZmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhGRTEzOTEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxD
aGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWxsQ2hl
Y2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OEZFMTNBMTIzNjZCMTAw
MEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBTcGVsbENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTgwLDcg
KzEzOTUwLDYgQEAKIAkJQTg1MzEyM0MxMUQwNDcxQjAwRDREMDc3IC8qIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg1
RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IG5hbWUgPSBRdWFydHpDb3JlLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1F1YXJ0ekNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9
OwogCQlBODVGMjIwODE0MzAzNzdEMDA3Q0M4ODQgLyogSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9wU3RhdGVFdmVudEN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4NjNFMjAwMTM0MzQxMjAw
MDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmljb2RlQmlkaS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODY2MjlDOTA5
REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1VJRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5
Q0EwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNVSUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTg2NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb3VzZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNDA2Miw3ICsxNDAzMSw2IEBACiAJCUE4QzIyODBEMTFENEE1OTcw
MEQ1QTdEMyAvKiBEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4QzIyODlGMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQ
YXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMjI4QTAxMUQ1NzIyRTAw
RDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRp
UnVuTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUnVuTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQg
LyogU3R5bGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5
bGVkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEM0QTdFQzA5RDU2
MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3R5bGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4QzRBN0VFMDlENTYzMjcwMDAzQUM4RCAvKiBOb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE0NzA4LDE1ICsxNDY3Niw4IEBACiAJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0
RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAw
QTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkFGRkM4QzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJp
ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dEJvdW5k
YXJpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQjFGNzE0MEQwMENBQTgw
MDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQjFGNzE1MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZl
bnRzSGl0UnVsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJF
dmVudHNIaXRSdWxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzRDlGMjBE
MDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJpZGlDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQjJDM0Q5RjMwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMkMzRDlGNDBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUmVzb2x2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0Q5RkUwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21l
bnRlZFN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vn
bWVudGVkU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0Q5RkYw
RDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyQzNEQTA0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJvdW5kYXJpZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMDkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2Rl
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMEEwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRDb2RlYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENv
ZGVjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTBCMEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Q29kZWNJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRDb2RlY0lDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NDcyNyw3ICsxNDY4OCw2IEBACiAJCUIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29k
ZWNVc2VyRGVmaW5lZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENv
ZGVjVXNlckRlZmluZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTEw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNVVEYxNi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTEyMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjVVRGMTYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRGbGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEZsYWdzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTE2MEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0RW5jb2RpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHRFbmNvZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTE3
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRFbmNvZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkMzREExODBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MTU2LDggKzE1MTE2LDYgQEAK
IAkJQkM0QTUzMzIyNTYwNTk4MzAwMjhDNTkyIC8qIEhUTUxQYXJzZXJTY3JpcHRpbmdGbGFnUG9s
aWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQYXJzZXJTY3JpcHRpbmdGbGFnUG9saWN5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNEE1MzM0MjU2MDVBNTYwMDI4QzU5MiAvKiBE
YXRhRGV0ZWN0b3JUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFEZXRlY3RvclR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0QTUzMzYyNTYwNUFFMTAwMjhDNTkyIC8qIFN0
b3JhZ2VCbG9ja2luZ1BvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQmxvY2tpbmdQb2xp
Y3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM0QTUzMzgyNTYwNjM5ODAwMjhD
NTkyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRSZW5kZXJpbmdN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNEE1MzNBMjU2MDY0RTEwMDI4
QzU5MiAvKiBUZXh0RGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREaXJlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0REREOEIyNzNEODRFNzAwNjYwRUJCIC8q
IFNjZW5lS2l0TW9kZWxMb2FkZXJVU0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NlbmVLaXRNb2RlbExv
YWRlclVTRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzREREQ4QzI3M0Q4NEU3
MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFNjZW5lS2l0TW9kZWxMb2FkZXJDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDNERERDhEMjczRDg0RTcwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsUGxheWVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NlbmVLaXRNb2RlbFBsYXllci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjUwLDcgKzE1NjA4LDYgQEAKIAkJQzU0NDI3NDkx
MUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTQ0Mjc0QTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gRE9NU3RyaW5nTGlzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM1NTYxMEYwMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTU5MkY3NzFBOTJBQTI4MDAxRjg4NjIgLyogQ2hh
cmFjdGVyUHJvcGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFy
YWN0ZXJQcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NUM3QkEw
MTcxOEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJUaGVtZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbmRlclRoZW1lSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNTcyRUUxRDEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM1ODVBNjYwMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5n
VXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYyMjYs
NyArMTYxODMsNiBAQAogCQlDRTdCMkRCMTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRBbHRl
cm5hdGl2ZVdpdGhSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTdCMkRC
MjE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTdFMTc4MjFDODNBNDkxMDBBRDA2
QUYgLyogQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmg7IHBhdGggPSBjc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRUE4
NDcyMDIxMjYyMkFEMDA5NDA4MDkgLyogVGV4dENoZWNraW5nTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVGV4dENoZWNraW5nTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRUJCOEMzMTIwNzg2RENCMDAwMzk1NDcgLyogRmV0Y2hJZGlvbXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmV0Y2hJZGlvbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VCQjhDMzIy
MDc4NkRDQjAwMDM5NTQ3IC8qIEZldGNoSWRpb21zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZl
dGNoSWRpb21zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VDQURGQzMxNTM3
NzhGRjAwRTM3MDY4IC8qIERpY3RhdGlvbkFsdGVybmF0aXZlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkFsdGVybmF0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDkxMyw3ICsyNDg2OSw2IEBACiAJCQkJOTMzMDlEOEMwOTlFNjQ5MTAw
NTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCAqLywKIAkJCQlGNEQ5ODE3RTIxOTVG
QkY2MDA4MjMwRkMgLyogQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcCAqLywKIAkJCQlGNEQ5ODE3
RDIxOTVGQkY2MDA4MjMwRkMgLyogQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmggKi8sCi0JCQkJOTNG
MkNDOTEyNDI3RkI5QTAwNTg1MUQ4IC8qIENoYXJhY3RlclJhbmdlLmggKi8sCiAJCQkJN0MzQTkx
RTUxQzk2M0I4ODAwRDFBN0UzIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICovLAogCQkJCTkz
MzA5RDhEMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgKi8sCiAJ
CQkJOTMzMDlEOEUwOTlFNjQ5MTAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmggKi8s
CkBAIC0yODc1Miw0NyArMjg3MDcsMjAgQEAKIAkJCXBhdGggPSBncmFwaGljczsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUIyQjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAvKiBj
ZiAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzcxQTY3
Q0ExMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovLAotCQkJKTsKLQkJCXBh
dGggPSBjZjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCUIyQzNEOUVDMEQw
MDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlCMkIyNjQ1OTBEMDBBNzdFMDAwQUNDMUQgLyogY2YgKi8sCiAJCQkJMUMx
NjVFNEYyM0VDRjU1RTAwQjBGQ0ZCIC8qIGNvY29hICovLAogCQkJCUE1MTZFOEIyMTM2RTA0QzAw
MDc2QzNDMCAvKiBpb3MgKi8sCiAJCQkJQjJDM0Q5RjkwRDAwNkMxRDAwRUY2RjI2IC8qIG1hYyAq
LywKLQkJCQlCMkMzRDlGMjBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuY3BwICovLAot
CQkJCUIyQzNEOUYzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5oICovLAotCQkJCUIy
QzNEOUY0MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCAqLywKLQkJCQlBOEM0MDI5
MjEzNDhCMjIyMDA2M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCAqLywKLQkJCQlDNTU5MkY3NzFBOTJB
QTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5oICovLAotCQkJCTBGREE3QzIwMTg4
MzJCQ0MwMEM5NTRCNSAvKiBEYXRlVGltZUZvcm1hdC5jcHAgKi8sCi0JCQkJNDUzRUI2MzUxNTlD
NTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggKi8sCiAJCQkJQ0VDQ0ZDM0ExNDE5NzNE
NTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovLAogCQkJCURGQzYxMEEyMjRG
QjJBN0MwMDYyNTRDOCAvKiBFbmNvZGluZ1RhYmxlcy5jcHAgKi8sCiAJCQkJREZDNjEwQTQyNEZC
MkE3RDAwNjI1NEM4IC8qIEVuY29kaW5nVGFibGVzLmggKi8sCi0JCQkJQkM0QTUzMzgyNTYwNjM5
ODAwMjhDNTkyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8sCi0JCQkJMzc1Q0QyMzExMTlENDND
ODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi8sCiAJCQkJNzYzM0E3MjUxM0Q4QjMzQTAwODUw
MUI2IC8qIExvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAgKi8sCiAJCQkJNzYzM0E3MjQxM0Q4QjMz
QTAwODUwMUI2IC8qIExvY2FsZVRvU2NyaXB0TWFwcGluZy5oICovLAogCQkJCUY1NDRGNzg2MTVD
RkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5jcHAgKi8sCiAJCQkJRjU0NEY3ODcxNUNG
QjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxlLmggKi8sCi0JCQkJMzc5RTM3MTQxMzczNkE2
NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5jcHAgKi8sCi0JCQkJMzc5RTM3MTUxMzczNkE2
NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oICovLAotCQkJCUIyQzNEOUZFMEQwMDZDMUQw
MEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwICovLAotCQkJCUIyQzNEOUZGMEQwMDZDMUQw
MEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLywKLQkJCQk5QjZDNDE1MjEzNDQ5NDkwMDAw
ODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oICovLAotCQkJCTk3QzA3ODRGMTE2NUQ1QkUw
MDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggKi8sCi0JCQkJMzcyQzAwQzMxMjk2MTFGMTAwNUM5NTc1
IC8qIFRleHRCb3VuZGFyaWVzLmNwcCAqLywKLQkJCQlCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dEJvdW5kYXJpZXMuaCAqLywKLQkJCQlBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyog
VGV4dENoZWNrZXJDbGllbnQuaCAqLywKLQkJCQlBNzdEMDAxMTEzM0IwQUVCMDBENjY1OEMgLyog
VGV4dENoZWNraW5nLmggKi8sCisJCQkJMUM1QzU4MjMyNzU3ODAzNzAwM0I1NDBEIC8qIFRleHRD
aGVja2VyQ2xpZW50LmggKi8sCiAJCQkJQjJDM0RBMDkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRD
b2RlYy5jcHAgKi8sCiAJCQkJQjJDM0RBMEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5o
ICovLAogCQkJCTI2RTk4QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQ
YXRoLmggKi8sCkBAIC0yODgxMiwxNiArMjg3NDAsMTIgQEAKIAkJCQlCMkMzREExMjBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCAqLywKIAkJCQk5MzQzQ0I3RjEyRjI1RTUxMDAz
M0M1RUUgLyogVGV4dENvZGVjVVRGOC5jcHAgKi8sCiAJCQkJOTM0M0NCODAxMkYyNUU1MTAwMzND
NUVFIC8qIFRleHRDb2RlY1VURjguaCAqLywKLQkJCQlCQzRBNTMzQTI1NjA2NEUxMDAyOEM1OTIg
LyogVGV4dERpcmVjdGlvbi5oICovLAogCQkJCUIyQzNEQTE2MEQwMDZDMUQwMEVGNkYyNiAvKiBU
ZXh0RW5jb2RpbmcuY3BwICovLAogCQkJCUIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
RW5jb2RpbmcuaCAqLywKIAkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29k
aW5nRGV0ZWN0b3IuaCAqLywKIAkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVu
Y29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8sCi0JCQkJQjJDM0RBMTUwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRGbGFncy5oICovLAotCQkJCUE4NjNFMjAwMTM0MzQxMjAwMDI3NDkyNiAv
KiBVbmljb2RlQmlkaS5oICovLAotCQkJCTE0NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0
aW5nTW9kZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTI4ODI5LDggKzI4NzUzLDYgQEAKIAkJQjJDM0Q5RjkwRDAwNkMxRDAwRUY2
RjI2IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVzLm1tICovLAotCQkJ
CUNFQTg0NzIwMjEyNjIyQUQwMDk0MDgwOSAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi8sCiAJCQkJ
QTFGNTVEQzQxRjU0RDNGMDAwRURCNzVGIC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0zMzI0MiwxMCArMzMxNjQsNyBAQAogCQkJCUJD
OTQ2MkQ4MTA3QTdCNEMwMDg1NzE5MyAvKiBCZWZvcmVMb2FkRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFCMjNBMzI4MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCM0QwQTQ0RUZDNzAwRjk5MkUwIC8qIEJlZm9y
ZVVubG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREEyNDBEMDA2QzFEMDBFRjZG
MjYgLyogQmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyQzNEQTI1MEQwMDZDMUQw
MEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTc4OTg2MTEy
MEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEM0MDI5MzEz
NDhCMjIyMDA2M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERDg3
MTRCMjY1RjQzNjYwMDVGOTk3QyAvKiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjA4RDEyQjAyNkY3MDBDMUEzNTkgLyogQmlxdWFkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjAyNTEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkRFNQS2VybmVs
LmggaW4gSGVhZGVycyAqLywKQEAgLTMzMzkzLDggKzMzMzEyLDYgQEAKIAkJCQlGRDMxNUZGRjEy
QjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZEMzE2MDAyMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQzU1OTJGNzgxQTkyQUEyODAwMUY4ODYyIC8qIENoYXJhY3Rl
clByb3BlcnRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjJDQzkzMjQyN0ZCOUMwMDU4NTFE
OCAvKiBDaGFyYWN0ZXJSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5
NjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NUIzREIyMTI1MUYxMkQwMDNFRjI2OSAvKiBDaGVja2JveElucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDNEM2MUEyNzQ1MkE3OTAwQTA0MEU3IC8qIENoaWxkQ2hh
bmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMzNzkwLDcgKzMzNzA3LDYgQEAK
IAkJCQlFNUYwNkFFNzI0RDQ4NDdCMDBCQkM0RjggLyogRGF0ZVRpbWVGaWVsZEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUU1RjA2QUYzMjRENEFBRTQwMEJCQzRGOCAvKiBEYXRlVGltZUZp
ZWxkRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU1MUQ2QTFGMjRFMUUyNTUwMDg5MUNG
QSAvKiBEYXRlVGltZUZpZWxkc1N0YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0NTNFQjYzNzE1
OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1
NUIzREJBMTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUxvY2FsSW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNUYwNkFFQjI0RDQ5QkY3MDBCQkM0RjggLyogRGF0ZVRpbWVOdW1lcmlj
RmllbGRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNUYwNkFFRjI0RDRBNjM3MDBCQkM0
RjggLyogRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NDE4MSw3ICszNDA5Nyw2IEBACiAJCQkJMUM1RTFEQTgyNkY5NEI5MDAwRTA3QUYxIC8qIEZvbnRQ
YWxldHRlVmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTMyMEQ2QjEyMkEyNEU5MDAyRDE0
NDAgLyogRm9udFBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcxRjRGRkMwRDI1
RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDNEE1MzM5
MjU2MDYzOTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJBQjBBRjcxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQzNEQTZCMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250U2VsZWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MTkwNDFGMUNDNjQ4NkIwMEMzNUY1RCAvKiBGb250
U2VsZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NTcsNyArMzQzNzIsNiBAQAog
CQkJCTFBQjVFQkQyMTk0QTUwRjMwMDU5QUM3MCAvKiBIVFRQSGVhZGVyTmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxNjE0QTc5MURBNjQyNDEwMDRBRDA2RiAvKiBIVFRQSGVhZGVyVmFsdWVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3MzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBh
cnNlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTM3NUNEMjMyMTE5RDQzQzgwMEEyQTg1OSAvKiBI
eXBoZW5hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUVCQjg5MzMxQzc3NzgyOTAwQzY1RDQx
IC8qIEljZUNhbmRpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NkUwQjA1MzgxNDAw
MkNFNjRGIC8qIEljb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxM0YxNDU0MEFCNjM0QzQwMDA5
NERERiAvKiBJY29uTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM2Mjc5LDcgKzM2MTkzLDYg
QEAKIAkJCQk4M0MxRjU5NDFFREY2OUQzMDA0MTBEMjcgLyogUXVhbGlmaWVkTmFtZUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTVFMzFGNDFFMENCMEI1MDA0QjM3MUMgLyogUXVpY2tMb29r
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkFFRTkyQzIyMzg4QTdEMDA0MTU3QTkgLyogUXVpcmtz
LmggaW4gSGVhZGVycyAqLywKLQkJCQkzNzlFMzcxNzEzNzM2QTY2MDBCOUU5MTkgLyogUXVvdGVk
UHJpbnRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QTU3NEYyOTEzMURCOTZEMDA0NzFCODgg
LyogUXVvdGVzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NzIwRDAwQkYyMjAwNzFC
NzgyIC8qIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNG
OTI1NDMwRjdFRjVCODAwN0UzN0M5IC8qIFJhZGlvQnV0dG9uR3JvdXBzLmggaW4gSGVhZGVycyAq
LywKQEAgLTM2NzIzLDcgKzM2NjM2LDYgQEAKIAkJCQkxQUY3QUZDODFBNDhBOEJDMDBDOEU0RTcg
LyogU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NEQyREE1MTQ2
QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1
QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCUIyQzNEQTJGMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRT
dHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFQTgwN0M5MEY3MTRBMDMwMDUyNDE5OSAvKiBT
ZWxlY3Rpb25HZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MDVDODkxOTBCMDE0NDAw
NzU0Rjk0IC8qIFNlbGVjdGlvbkdlb21ldHJ5R2F0aGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ0NjVEN0JEMjUzNkQwNUUwMDE2NjY2RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzY5MjAsNyArMzY4MzIsNiBAQAogCQkJCTgxQUM2QzM2MTMxQzU3RDMwMDA5
QTdFMCAvKiBTdHJpbmdDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIzNTQwRjMwRDAw
NzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUNB
NjgwQzcxRTY3NzI0NTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOUI2QzQxNTMxMzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTQxNEI4MjA1MUQ2REYwRTUwMDc3RUJFMyAvKiBTdHJ1Y3R1cmVk
Q2xvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RkVGQkM4MjZERDY3QTIwMEIwQzQ4OCAvKiBT
dHJ1Y3R1cmVkU2VyaWFsaXplT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFFNjdBODMy
NUQxNjg0NzAwN0IwQTRDIC8qIFNUVU5NZXNzYWdlUGFyc2luZy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNjk5NSw3ICszNjkwNiw2IEBACiAJCQkJMUE4RjZCMDIwREI1MzAwNjAwMURCNzk0IC8qIFN1
YnN0aXR1dGVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc3OEJEODIxREE0ODA2QzAw
OUUzMDA5IC8qIFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk5
N0MwNzg1MDExNjVENUJFMDAzQTMyRUYgLyogU3VmZml4VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc2MjdCOTgxNEZCNTQyNDAwMkNEQ0ExIC8qIFN1cHBsZW1lbnRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2MkMxMjE3RDExQUI5RTc3MDAzQzQ2MkMgLyogU3VzcGVuZGFibGVUaW1lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NzQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjE2LDExICszNzEyNiw5IEBACiAJCQkJOTMzMDlF
MTcwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRBZmZpbml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0U3QjJEQjUxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1NERDRTYxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6
aW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREEzNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEJvdW5kYXJpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDBERjU2MjZFQjUzRTAwMDRBRjA2
QiAvKiBUZXh0Qm94UGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0N0Y1QjMyNjZDRjYz
RDAwMTMzRjAwIC8qIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTc3RDAwMTIxMzNCMEFFQjAwRDY2NThDIC8qIFRleHRDaGVja2luZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMUM1QzU4MkEyNzU5NzUzNTAwM0I1NDBEIC8qIFRleHRDaGVja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0RCRjhERTEyNzY5MTlDMDA2QjYwMDggLyog
VGV4dENoZWNraW5nSGVscGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEzQTBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dENvZGVjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkU5OEExMDEzMEE5
RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNzIzNCw3ICszNzE0Miw2IEBACiAJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyREUzMjUxQzMw
Qzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUM3M0E3MTUyMTg1NzU4NzAwNENDRUE1IC8qIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQzRBNTMzQjI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QTUzMjUyNTYwNTU1RjAwMjhDNTkyIC8qIFRl
eHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3QkM4NEI0MTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QkM4NDg0MTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMzcyNDQsNyArMzcxNTEsNiBAQAogCQkJCTkzM0ExNDMwMEI3RDE4
ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0I0MUEwMTJF
Njc1QTkwMDU0MzQzRCAvKiBUZXh0RXZlbnRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NUIzREQ4MTI1MUYxMkQwMDNFRjI2OSAvKiBUZXh0RmllbGRJbnB1dFR5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RmxhZ3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA5RTE4MDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0R3JhbnVsYXJp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENEY5NkY2MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0
SW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDRGOTZGNzFBMUVDQzI0MDA5OEJGODgg
LyogVGV4dEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzMzOSw3ICszNzI0
NSw2IEBACiAJCQkJMkVDREJBRDgyMUQ4OTA2MzAwRjAwRUNEIC8qIFVuZG9JdGVtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRUNEQkFEMTIxRDg5MDM0MDBGMDBFQ0QgLyogVW5kb01hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTg2M0UyMDExMzQzNDEyMDAwMjc0OTI2IC8qIFVuaWNvZGVC
aWRpLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg4NjRFMTFCQkFGNTc0MDBFNTQwQzkgLyogVW5p
cXVlSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0E1MUJCREI3OTMwMEUy
Q0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxOThGN0E5MUJCREQzODUwMEUyQ0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3Njg1LDcgKzM3NTkwLDYgQEAKIAkJCQk5MzMwOUUyNDA5
OUU2NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNTMgLyogV3JpdGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQxMkMxQTM5ODAw
MDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NDc2QUE4
MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2
NTgyMDIwOUQxNTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgzMDc4NEIyMUM1MkVFMkMwMDEwNEQxRCAvKiBYTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDBCOTMxODgxM0JBOERCQTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCmluZGV4IDJiNmVhZjgxN2M2ZmUzYjlmNTA2MjRkNjFhOTNmOWM4MjhiZjk2ZmIuLjA3
MjJlOGY3MTQzYTk3ZjUzYTI1N2FjODZiZDZiMDUwYjI5YWM0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBA
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29w
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5o
IgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmg+CiAjaW5jbHVkZSAiVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KQEAgLTI3NTAsNyArMjc1MCw3IEBAIENoYXJhY3Rlck9mZnNldCBB
WE9iamVjdENhY2hlOjpuZXh0Qm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0
ZXJPZmZzCiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgdW5zaWduZWQgcHJl
Zml4TGVuZ3RoID0gMDsKICAgICAKLSAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5k
YXJ5KGNoYXJhY3RlckFmdGVyKGNoYXJhY3Rlck9mZnNldCkpKSB7CisgICAgaWYgKFBBTDo6cmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoYXJhY3RlckFmdGVyKGNoYXJhY3Rlck9mZnNl
dCkpKSB7CiAgICAgICAgIGF1dG8gYmFja3dhcmRzU2NhblJhbmdlID0gbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGJvdW5kYXJ5LT5kb2N1bWVudCgpKTsKICAgICAgICAgaWYgKCFzZXRS
YW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KGJhY2t3YXJkc1NjYW5SYW5nZSwgY2hh
cmFjdGVyT2Zmc2V0LCBmYWxzZSkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtMjgwNSw3
ICsyODA1LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRh
cnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAgICAgICAgZm9yIChUZXh0SXRl
cmF0b3IgZm9yd2FyZHNJdGVyYXRvcihmb3J3YXJkc1NjYW5SYW5nZSk7ICFmb3J3YXJkc0l0ZXJh
dG9yLmF0RW5kKCk7IGZvcndhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQogICAgICAgICAgICAgYXBw
ZW5kKHN0cmluZywgZm9yd2FyZHNJdGVyYXRvci50ZXh0KCkpOwogICAgICAgICBzdWZmaXhMZW5n
dGggPSBzdHJpbmcuc2l6ZSgpOwotICAgIH0gZWxzZSBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29y
ZEJvdW5kYXJ5KGNoYXJhY3RlckJlZm9yZShjaGFyYWN0ZXJPZmZzZXQpKSkgeworICAgIH0gZWxz
ZSBpZiAoUEFMOjpyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVyQmVmb3Jl
KGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm91bmRhcnktPmRvY3VtZW50KCkpOwogICAg
ICAgICBhdXRvIGFmdGVyQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZSgqYm91
bmRhcnkpOwogICAgICAgICBpZiAoIWFmdGVyQm91bmRhcnkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCAxMGJhOWY5
NzZkM2NkZjI2YzljY2EyYjdkMDhiMmIyNGMzNDE3ODJiLi5mNDdiZDY0ZTJkMjdlMmI5ODE5ZDQw
OTIwYTZjMDQ2MmUyYTA4ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTM2MSw4ICszNjEsOCBAQCBib29sIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKICAgICBib29sIGlzTWlz
c3BlbGxlZCA9IGZhbHNlOwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJh
bWUpKSB7Ci0gICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIHJlc3VsdHMsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgICAgIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0
czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1
ZSgpLCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCByZXN1bHRzLCBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGlzTWlzc3Bl
bGxlZDsKQEAgLTM5Niw4ICszOTYsOCBAQCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbgogICAgIGlm
ICghdGV4dENoZWNrZXIpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBtaXNzcGVsbGluZ3M7Ci0gICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZywgbWlzc3BlbGxpbmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAg
IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOworICAgIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZywgbWlzc3BlbGxpbmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOwogCiAgICAgLy8gRmluZCB0aGUgZmlyc3QgbWlzc3BlbGxpbmcgcGFzdCB0aGUg
c3RhcnQuCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9u
OjpOZXh0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBjNGUyNmExYjcyMmExODllOGMzMGE2
ZWYwNjYwMWFhODc3YmQ2ODlkLi44MWYyYTE2OGY5NzZiMjRlMzVkMTkwODA2ZDExODQzNmFlZTll
ZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTkxOCw3ICs5MTgsNyBAQCBQYXRoIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKIAogICAgICAgICAvLyBD
b21wdXRlIHRoZSBwYXRoIG9ubHkgaWYgdGhpcyBpcyB0aGUgbGFzdCBwYXJ0IG9mIGEgbGluZSBm
b2xsb3dlZCBieSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgIGNvbnN0
IGF1dG8mIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsKLSAgICAgICAgYm9vbCByaWdodFRv
TGVmdFRleHQgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAg
ICAgIGJvb2wgcmlnaHRUb0xlZnRUZXh0ID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEw7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgeFRvbGVyYW5jZSA9IDU7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgeVRvbGVyYW5jZSA9IDU7CiAgICAgICAgIGJvb2wg
bmVlZHNQYXRoID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CmluZGV4IGQ2OTQxZjgyZjEyMjk5ODlmOWVlMzQwNDA5MTI3YjQxN2Q0NGIzMzQuLjUwYzk3NTZi
MGEzMTRjOTZmMzU5OTI2ZWZiNzk1MWNlNGJiMTcyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCkBAIC05MzgsMTIgKzkzOCwxMiBAQCBzdGF0aWMgdm9pZCBBWEF0
dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsCiAgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+ZG9jdW1l
bnQoKS5lZGl0b3IoKS50ZXh0Q2hlY2tlcigpOwogICAgICAgICAKICAgICAgICAgLy8gY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGggaXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxl
bWVudGVkIGluIFdLMSBhbmQgV0syCi0gICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7Ci0gICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCpjaGVja2VyLCB0ZXh0LCBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgcmVzdWx0cywgbm9kZS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZlY3RvcjxQQUw6OlRleHRD
aGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNo
ZWNrZXIsIHRleHQsIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIHJlc3VsdHMsIG5v
ZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgICAg
ICAKICAgICAgICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgY29uc3QgVGV4dENo
ZWNraW5nUmVzdWx0JiByZXN1bHQgPSByZXN1bHRzW2ldOworICAgICAgICAgICAgY29uc3QgUEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCA9IHJlc3VsdHNbaV07CiAgICAgICAgICAgICBB
WEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNz
cGVsbGVkVGV4dEF0dHJpYnV0ZSwgQFlFUywgTlNNYWtlUmFuZ2UocmVzdWx0LnJhbmdlLmxvY2F0
aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5yYW5nZS5sZW5ndGgpKTsKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5n
LCBOU0FjY2Vzc2liaWxpdHlNYXJrZWRNaXNzcGVsbGVkVGV4dEF0dHJpYnV0ZSwgQFlFUywgTlNN
YWtlUmFuZ2UocmVzdWx0LnJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5y
YW5nZS5sZW5ndGgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCmluZGV4IGQxNTE3NTgyNzQ4YjRmN2UzODQ1NTQyY2U5NDA0NzQ2NmQ3
ZWMzZGMuLjhlMDNlZjc1MjRjMzZiYTEwMDg1NzI1NzhmYjEzZWY3MGE4MGRkZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAt
MjE3NiwxMiArMjE3NiwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29t
cG9zaXRlT3BlcmF0aW9uKSBjb25zdCBmaW5hbAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20u
Zm9udEl0YWxpYygpICYmIHRvLmZvbnRJdGFsaWMoKSAmJiBmcm9tLmZvbnREZXNjcmlwdGlvbigp
LmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLmZvbnREZXNjcmlw
dGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50OworICAgICAgICBy
ZXR1cm4gZnJvbS5mb250SXRhbGljKCkgJiYgdG8uZm9udEl0YWxpYygpICYmIGZyb20uZm9udERl
c2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudCAm
JiB0by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gUEFMOjpGb250U3R5bGVB
eGlzOjpzbG50OwogICAgIH0KIAogICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Cisg
ICAgICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudDsK
ICAgICAgICAgaWYgKGNvbnRleHQuaXNEaXNjcmV0ZSkKICAgICAgICAgICAgIGJsZW5kZWRTdHls
ZUF4aXMgPSAoY29udGV4dC5wcm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0bykuZm9udERlc2NyaXB0
aW9uKCkuZm9udFN0eWxlQXhpcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDQ5YTMxNjU3ODI1OGIzNjg4MDUyNjg4
Y2FmZjZmMGY4ZmNiMmVjYmQuLjU2MmJmMTljZjUyYTRhN2VmODdlY2Y1ZDVjMmU4MmVjMDJhMWM5
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCkBAIC0xMTU5LDI3ICsxMTU5LDI3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHdp
bGxDaGFuZ2VQcm9wZXJ0eVZhbHVlKGNvbnN0IFdpbGxDaGFuZ2VEYXRhKiB3aWxsQ2hhbmdlRGF0
CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRMaWdhdHVy
ZXNWYWx1ZShDU1NWYWx1ZUxpc3QmIGxpc3QsIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZhbHVlLCBD
U1NWYWx1ZUlEIHllc1ZhbHVlLCBDU1NWYWx1ZUlEIG5vVmFsdWUpCitzdGF0aWMgaW5saW5lIHZv
aWQgYXBwZW5kTGlnYXR1cmVzVmFsdWUoQ1NTVmFsdWVMaXN0JiBsaXN0LCBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhbHVlLCBDU1NWYWx1ZUlEIHllc1ZhbHVlLCBDU1NWYWx1ZUlEIG5vVmFs
dWUpCiB7CiAgICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoK
ICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QuYXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKG5vVmFsdWUp
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5h
cHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoeWVz
VmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRMaWdhdHVyZXNQcm9wZXJ0
eVZhbHVlKEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbiwgRm9udFZhcmlhbnRMaWdhdHVyZXMg
ZGlzY3JldGlvbmFyeSwgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbCwgRm9udFZhcmlh
bnRMaWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBm
b250VmFyaWFudExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudExpZ2F0dXJl
cyBjb21tb24sIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeSwgUEFMOjpG
b250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsLCBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
IGNvbnRleHR1YWxBbHRlcm5hdGVzKQogewogICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKGNvbW1vbiA9PSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm8gJiYgZGlzY3JldGlvbmFyeSA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYg
aGlzdG9yaWNhbCA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYgY29udGV4dHVhbEFsdGVy
bmF0ZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vKQorICAgIGlmIChjb21tb24gPT0gUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYgZGlzY3JldGlvbmFyeSA9PSBQQUw6OkZvbnRW
YXJpYW50TGlnYXR1cmVzOjpObyAmJiBoaXN0b3JpY2FsID09IFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vICYmIGNvbnRleHR1YWxBbHRlcm5hdGVzID09IFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIGlmIChjb21tb24gPT0gRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbCAmJiBkaXNjcmV0aW9uYXJ5ID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWwgJiYgaGlzdG9yaWNhbCA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsICYmIGNvbnRl
eHR1YWxBbHRlcm5hdGVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpCisgICAgaWYg
KGNvbW1vbiA9PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgZGlzY3JldGlv
bmFyeSA9PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgaGlzdG9yaWNhbCA9
PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgY29udGV4dHVhbEFsdGVybmF0
ZXMgPT0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKQogICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAKICAg
ICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsK
QEAgLTExOTAsMTU2ICsxMTkwLDE1NiBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFu
dExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUoRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbQogICAgIHJl
dHVybiB2YWx1ZUxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50UG9z
aXRpb25Qcm9wZXJ0eVZhbHVlKEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24pCitzdGF0aWMg
UmVmPENTU1ZhbHVlPiBmb250VmFyaWFudFBvc2l0aW9uUHJvcGVydHlWYWx1ZShQQUw6OkZvbnRW
YXJpYW50UG9zaXRpb24gcG9zaXRpb24pCiB7CiAgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKTsKICAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBDU1NWYWx1
ZU5vcm1hbDsKICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudFBv
c2l0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1h
bDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3Jp
cHQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDoKICAgICAg
ICAgdmFsdWVJRCA9IENTU1ZhbHVlU3ViOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBv
c2l0aW9uOjpTdXBlcnNjcmlwdDoKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlU3VwZXI7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlh
bnRDYXBzUHJvcGVydHlWYWx1ZShGb250VmFyaWFudENhcHMgY2FwcykKK3N0YXRpYyBSZWY8Q1NT
VmFsdWU+IGZvbnRWYXJpYW50Q2Fwc1Byb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudENhcHMg
Y2FwcykKIHsKICAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpOwogICAgIENTU1ZhbHVlSUQgdmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgIHN3aXRj
aCAoY2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21h
bGw6CiAgICAgICAgIHZhbHVlSUQgPSBDU1NWYWx1ZVNtYWxsQ2FwczsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudENhcHM6OkFsbFNtYWxsOgogICAgICAgICB2YWx1ZUlEID0gQ1NTVmFsdWVBbGxTbWFs
bENhcHM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgogICAgICAgICB2YWx1ZUlE
ID0gQ1NTVmFsdWVQZXRpdGVDYXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBl
dGl0ZToKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlQWxsUGV0aXRlQ2FwczsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlVuaWNhc2U6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlVW5p
Y2FzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlRpdGxpbmc6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoKICAgICAgICAgdmFsdWVJ
RCA9IENTU1ZhbHVlVGl0bGluZ0NhcHM7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKIH0KIAotc3Rh
dGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnROdW1lcmljUHJvcGVydHlWYWx1ZShGb250VmFy
aWFudE51bWVyaWNGaWd1cmUgZmlndXJlLCBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNp
bmcsIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZyYWN0aW9uLCBGb250VmFyaWFudE51bWVy
aWNPcmRpbmFsIG9yZGluYWwsIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRa
ZXJvKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnROdW1lcmljUHJvcGVydHlWYWx1
ZShQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUsIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZyBzcGFjaW5nLCBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZy
YWN0aW9uLCBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCwgUEFMOjpGb250
VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBzbGFzaGVkWmVybykKIHsKICAgICBhdXRvJiBjc3NW
YWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGlmIChmaWd1cmUgPT0g
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWwgJiYgc3BhY2luZyA9PSBGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpOb3JtYWwgJiYgZnJhY3Rpb24gPT0gRm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb246Ok5vcm1hbCAmJiBvcmRpbmFsID09IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6
Ok5vcm1hbCAmJiBzbGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6
Tm9ybWFsKQorICAgIGlmIChmaWd1cmUgPT0gUEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6
Ok5vcm1hbCAmJiBzcGFjaW5nID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9y
bWFsICYmIGZyYWN0aW9uID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1h
bCAmJiBvcmRpbmFsID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsICYm
IHNsYXNoZWRaZXJvID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1h
bCkKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogCiAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgc3dpdGNoIChmaWd1cmUpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmU6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmluZ051bXMpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0
eWxlTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRT
dHlsZU51bWJlcnM6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPbGRzdHlsZU51bXMpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgc3dpdGNoIChzcGFjaW5nKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51
bWVyaWNTcGFjaW5nOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVy
aWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgogICAgICAgICB2YWx1ZUxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJvcG9y
dGlvbmFsTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVy
aWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRhYnVsYXJOdW1zKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoZnJhY3Rpb24pIHsKLSAgICBjYXNl
IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CiAgICAg
ICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVEaWFnb25hbEZyYWN0aW9ucykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25zOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczoKICAgICAgICAg
dmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVN0YWNrZWRGcmFjdGlvbnMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYg
KG9yZGluYWwgPT0gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzKQorICAgIGlmIChvcmRp
bmFsID09IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzKQogICAgICAgICB2YWx1
ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
T3JkaW5hbCkpOwotICAgIGlmIChzbGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybzo6WWVzKQorICAgIGlmIChzbGFzaGVkWmVybyA9PSBQQUw6OkZvbnRWYXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvOjpZZXMpCiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbGFzaGVkWmVybykpOwogCiAgICAg
cmV0dXJuIHZhbHVlTGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRB
bHRlcm5hdGVzUHJvcGVydHlWYWx1ZShGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcykK
K3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50QWx0ZXJuYXRlc1Byb3BlcnR5VmFsdWUo
UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0ZXJuYXRlcykKIHsKICAgICBhdXRvJiBjc3NW
YWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIENTU1ZhbHVlSUQgdmFs
dWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgIHN3aXRjaCAoYWx0ZXJuYXRlcykgewotICAgIGNh
c2UgRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50QWx0ZXJuYXRlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgdmFsdWVJRCA9IENTU1ZhbHVl
SGlzdG9yaWNhbEZvcm1zOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7CiB9CiAKLXN0YXRpYyBSZWY8
Q1NTVmFsdWU+IGZvbnRWYXJpYW50RWFzdEFzaWFuUHJvcGVydHlWYWx1ZShGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQgdmFyaWFudCwgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB3aWR0aCwg
Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1YnkpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250
VmFyaWFudEVhc3RBc2lhblByb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQgdmFyaWFudCwgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIHdpZHRoLCBQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5KQogewogICAgIGF1dG8mIGNzc1ZhbHVlUG9v
bCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHZhcmlhbnQgPT0gRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwgJiYgd2lkdGggPT0gRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsICYmIHJ1YnkgPT0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpO
b3JtYWwpCisgICAgaWYgKHZhcmlhbnQgPT0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Ok5vcm1hbCAmJiB3aWR0aCA9PSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5v
cm1hbCAmJiBydWJ5ID09IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpCiAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9ybWFsKTsKIAogICAgIGF1dG8gdmFsdWVMaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwogICAgIHN3aXRjaCAodmFyaWFudCkgewotICAgIGNhc2UgRm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzNzg6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM3OCkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIHZhbHVl
TGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVK
aXM4MykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6SmlzOTA6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6
SmlzOTA6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXMwNCkpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmll
ZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVk
OgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlU2ltcGxpZmllZCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw6CiAgICAgICAgIHZhbHVlTGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUcmFk
aXRpb25hbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHdpZHRoKSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRnVsbFdpZHRoKSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJv
cG9ydGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9w
b3J0aW9uYWw6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQcm9wb3J0aW9uYWxXaWR0aCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBpZiAocnVieSA9PSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Olll
cykKKyAgICBpZiAocnVieSA9PSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzKQog
ICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlUnVieSkpOwogCiAgICAgcmV0dXJuIHZhbHVlTGlzdDsKQEAgLTE5NjYsNyAr
MTk2Niw3IEBAIFJlZjxDU1NGb250U3R5bGVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6
Zm9udE5vbktleXdvcmRTdHlsZUZyb21TdHlsZVZhbHVlCiAgICAgcmV0dXJuIENTU0ZvbnRTdHls
ZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oaXRhbGljKSwgQ1NTVW5pdFR5cGU6OkNTU19ERUcpKTsK
IH0KIAotUmVmPENTU0ZvbnRTdHlsZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpmb250
U3R5bGVGcm9tU3R5bGVWYWx1ZShzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaXRh
bGljLCBGb250U3R5bGVBeGlzIGZvbnRTdHlsZUF4aXMpCitSZWY8Q1NTRm9udFN0eWxlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0ZDo6b3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBpdGFsaWMsIFBBTDo6Rm9udFN0eWxlQXhpcyBmb250
U3R5bGVBeGlzKQogewogICAgIGlmIChhdXRvIGtleXdvcmQgPSBmb250U3R5bGVLZXl3b3JkKGl0
YWxpYywgZm9udFN0eWxlQXhpcykpCiAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6
Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGtl
eXdvcmQudmFsdWUoKSkpOwpAQCAtMTk4NiwxNzggKzE5ODYsMTc4IEBAIHN0YXRpYyBSZWY8Q1NT
VmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAg
ICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAKICAg
ICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb21tb25MaWdhdHVyZXMo
KSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9D
b21tb25MaWdhdHVyZXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChz
dHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcygpKSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpZZXM6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAg
Y2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgbGlzdC0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudEhpc3RvcmljYWxMaWdhdHVy
ZXMoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dExpZ2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVz
KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcygpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRleHR1YWwpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9D
b250ZXh0dWFsKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkudmFyaWFudFBvc2l0aW9uKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50UG9zaXRpb246Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6
Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246OlN1
YnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0Ogog
ICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVTdWIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQ
b3NpdGlvbjo6U3VwZXJzY3JpcHQ6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN1cGVyKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCku
dmFyaWFudENhcHMoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAg
Y2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fw
czo6U21hbGw6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2FwcykpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbFNtYWxsQ2Fw
cykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZToKICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlUGV0aXRlQ2FwcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToK
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQWxsUGV0aXRlQ2FwcykpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpVbmljYXNlOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmljYXNlKSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRpdGxpbmdD
YXBzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGaWd1cmUoKSkgewotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y0ZpZ3VyZTo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5pbmdOdW1z
KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpP
bGRTdHlsZU51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6
T2xkU3R5bGVOdW1iZXJzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPbGRzdHlsZU51bXMpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250RGVzY3JpcHRpb24o
KS52YXJpYW50TnVtZXJpY1NwYWNpbmcoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmlj
U3BhY2luZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU3Bh
Y2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJv
cG9ydGlvbmFsTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51
bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVGFidWxh
ck51bXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250
RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCkpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CiAgICAgICAgIGxp
c3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZURpYWdvbmFsRnJhY3Rpb25zKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnM6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25zOgogICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTdGFja2VkRnJhY3Rpb25zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNPcmRp
bmFsKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOgogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgogICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVPcmRpbmFsKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXM6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXM6CiAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVNsYXNoZWRaZXJvKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5
bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudEFsdGVybmF0ZXMoKSkgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50QWx0
ZXJuYXRlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0
ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEFsdGVy
bmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSGlzdG9yaWNhbEZv
cm1zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERl
c2NyaXB0aW9uKCkudmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSkgewotICAgIGNhc2UgRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczc4KSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4
MzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzoKICAg
ICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlSmlzODMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
MDQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CiAg
ICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUppczA0KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ6CiAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVNpbXBsaWZpZWQpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUcmFkaXRpb25h
bCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNj
cmlwdGlvbigpLnZhcmlhbnRFYXN0QXNpYW5XaWR0aCgpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoOjpGdWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoOjpGdWxsOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGdWxsV2lkdGgpKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKICAg
ICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFz
aWFuUnVieSgpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOgogICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVSdWJ5KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIxNjcsMTUgKzIxNjcsMTUgQEAg
c3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQogCiBzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBpZiAoc3R5bGUuZm9udERlc2NyaXB0
aW9uKCkuZm9udFN5bnRoZXNpcygpID09IEZvbnRTeW50aGVzaXNOb25lKQorICAgIGlmIChzdHls
ZS5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgPT0gUEFMOjpGb250U3ludGhlc2lz
Tm9uZSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgaWYgKHN0eWxlLmZvbnREZXNjcmlwdGlv
bigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNXZWlnaHQpCisgICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIFBBTDo6Rm9udFN5bnRoZXNpc1dl
aWdodCkKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2VpZ2h0KSk7Ci0gICAgaWYgKHN0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkKKyAgICBp
ZiAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRoZXNpcygpICYgUEFMOjpGb250U3lu
dGhlc2lzU3R5bGUpCiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0eWxlKSk7Ci0gICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTbWFsbENh
cHMpCisgICAgaWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIFBB
TDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2FwcykKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU21hbGxDYXBz
KSk7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CkBAIC0yNjI4LDkgKzI2MjgsOSBAQCBzdGF0aWMgUmVm
PENTU0ZvbnRWYWx1ZT4gZm9udFNob3J0aGFuZFZhbHVlRm9yU2VsZWN0aW9uUHJvcGVydGllcyhj
b25zdCBGb250RGVzYwogICAgIGF1dG8gY29tcHV0ZWRGb250ID0gQ1NTRm9udFZhbHVlOjpjcmVh
dGUoKTsKIAogICAgIGF1dG8gdmFyaWFudENhcHMgPSBmb250RGVzY3JpcHRpb24udmFyaWFudENh
cHMoKTsKLSAgICBpZiAodmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbCkKKyAg
ICBpZiAodmFyaWFudENhcHMgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsKQogICAgICAg
ICBjb21wdXRlZEZvbnQtPnZhcmlhbnQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2Fwcyk7Ci0gICAgZWxzZSBpZiAodmFyaWFu
dENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCisgICAgZWxzZSBpZiAodmFyaWFudENh
cHMgPT0gUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbCkKICAgICAgICAgY29tcHV0ZWRGb250
LT52YXJpYW50ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb3JtYWwpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIENTU0ZvbnRWYWx1
ZTo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgKaW5kZXggZDI2MTQxNWNkN2E0OTcxMzAwYTA3ZDZkY2M4OGI4ODNmYTJkM2Q0
MC4uMDI5MWFjNmFmNTc0MzBhOTFmYWI5NjBjMmNiYzE4ZjQwOGVjOGFhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaApAQCAtMjMsNyAr
MjMsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlRGVmcy5oIgotI2lu
Y2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250Tm9uS2V5d29yZFN0cmV0Y2hGcm9tU3R5
bGVWYWx1ZShGb250U2VsZWN0aW9uVmFsdWUpOwogICAgIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZl
VmFsdWU+IGZvbnRTdHJldGNoRnJvbVN0eWxlVmFsdWUoRm9udFNlbGVjdGlvblZhbHVlKTsKICAg
ICBzdGF0aWMgUmVmPENTU0ZvbnRTdHlsZVZhbHVlPiBmb250Tm9uS2V5d29yZFN0eWxlRnJvbVN0
eWxlVmFsdWUoRm9udFNlbGVjdGlvblZhbHVlKTsKLSAgICBzdGF0aWMgUmVmPENTU0ZvbnRTdHls
ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGVWYWx1ZShzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rp
b25WYWx1ZT4sIEZvbnRTdHlsZUF4aXMpOworICAgIHN0YXRpYyBSZWY8Q1NTRm9udFN0eWxlVmFs
dWU+IGZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZh
bHVlPiwgUEFMOjpGb250U3R5bGVBeGlzKTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgc3R5bGVk
IGVsZW1lbnQgaXMgZWl0aGVyIHRoZSBlbGVtZW50IHBhc3NlZCBpbnRvCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmNwcAppbmRleCAxMzQ5NDhjYmZkYjc3ZDZjMjUyNzc2NDE0OTFlNzlmYTEzZWM4
MTVkLi5lZWM1YTg2ODEyNWMxMmYyNGYxYzhmNjFmY2ZmZWUyZmFjOTQzMDViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UoY29uc3QgU2V0dGluZ3M6OlZhbHVlcyogc2V0dGluZ3MsIFN0eWxlUnVsZUZvbnRG
YWNlKiBjcwogICAgICwgbV9tYXlCZVB1cmdlZCghd3JhcHBlcikKICAgICAsIG1fc2hvdWxkSWdu
b3JlRm9udExvYWRDb21wbGV0aW9ucyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+c2hvdWxkSWdub3Jl
Rm9udExvYWRDb21wbGV0aW9ucykKICAgICAsIG1fZm9udExvYWRUaW1pbmdPdmVycmlkZShzZXR0
aW5ncyA/IHNldHRpbmdzLT5mb250TG9hZFRpbWluZ092ZXJyaWRlIDogRm9udExvYWRUaW1pbmdP
dmVycmlkZTo6Tm9uZSkKLSAgICAsIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3Mg
JiYgIXNldHRpbmdzLT5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA/IEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzOjpObyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpCisgICAgLCBt
X2FsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzICYmICFzZXR0aW5ncy0+c2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMgPyBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyA6
IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcykKICAgICAsIG1fdGltZW91dFRpbWVy
KCp0aGlzLCAmQ1NTRm9udEZhY2U6OnRpbWVvdXRGaXJlZCkKIHsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmgKaW5kZXggNzg5OTNlZmVmNTdiNWU2Nzk5NmFkMWJkYWVmODc3MTdmYTE2MGRlOC4u
YjEzZTBiMmI0NTRkOGY1M2QyYTU1YjlmMDI4MTA0MzMwNzAwNjkwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmgKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotI2lu
Y2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxwYWwvdGV4
dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTE1NCw3ICsxNTQsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIHB1cmdlYWJsZSgpIGNvbnN0OwogCi0gICAgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93VXNlckluc3RhbGxlZEZvbnRzOyB9CisgICAgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dVc2VySW5z
dGFsbGVkRm9udHM7IH0KIAogICAgIHZvaWQgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCkBAIC0x
OTQsNyArMTk0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWF5QmVQdXJnZWQgeyB0cnVlIH07
CiAgICAgYm9vbCBtX3Nob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxldGlvbnMgeyBmYWxzZSB9Owog
ICAgIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGUgbV9mb250TG9hZFRpbWluZ092ZXJyaWRlIHsgRm9u
dExvYWRUaW1pbmdPdmVycmlkZTo6Tm9uZSB9OwotICAgIEFsbG93VXNlckluc3RhbGxlZEZvbnRz
IG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgeyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVz
IH07CisgICAgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxl
ZEZvbnRzIHsgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIH07CiAKICAgICBUaW1l
ciBtX3RpbWVvdXRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcApp
bmRleCBhNzZhYWNlOTc0NDRlMjNiNWFiMDNhZTVjMDQ5YTQ0ZDc0ZGZhZmFhLi44MGE0NWI0M2I1
NjMzMWEyOGFmMWY5NTNkNGVlYzc1YWY5ZTUyMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNldC5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0OjplbnN1
cmVMb2NhbEZvbnRGYWNlc0ZvckZhbWlseVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBmYW1pbAog
CiAgICAgaWYgKCFtX293bmluZ0ZvbnRTZWxlY3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgPSBtX293bmluZ0ZvbnRTZWxlY3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5zZXR0aW5nc1ZhbHVlcygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID8g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpO
bzsKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzID0gbV9vd25pbmdGb250U2VsZWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2V0
dGluZ3NWYWx1ZXMoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA/IFBBTDo6QWxsb3dV
c2VySW5zdGFsbGVkRm9udHM6OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
OwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMgPSBt
X293bmluZ0ZvbnRTZWxlY3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5mb250Q2FjaGUo
KS5nZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoZmFtaWx5TmFtZSwgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpOwogICAgIGlmIChjYXBhYmlsaXRpZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFw
cGluZ3MuaAppbmRleCBjMzRmMzViMWM1MGIxOTU5Njc4YTQ3NWEyYmEzNTcyNjY3ODI3MzJiLi5m
YTg5NjdkZTU5MmQ4YmE0NDdkMDY5YjdkMTcxZDliZGU3ODdjOTUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKQEAgLTQwLDExICs0MCwxMSBA
QAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGVEZWZzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNpbmNsdWRlICJUZXh0Rmxh
Z3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlICJUaGVtZVR5
cGVzLmgiCiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKLSNpbmNsdWRlICJVbmljb2RlQmlkaS5o
IgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVW5pY29kZUJp
ZGkuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBAIC0yNjE1LDU4ICsy
NjE1LDU4IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBU
ZXh0VHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gVGV4dFRyYW5zZm9ybTo6Tm9uZTsKIH0K
IAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KEVVbmljb2RlQmlkaSBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U1ByaW1pdGl2ZVZhbHVlKFBBTDo6RVVuaWNvZGVCaWRpIGUpCiAgICAgOiBDU1NWYWx1ZShQcmlt
aXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NT
X1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFVCTm9ybWFsOgorICAgIGNh
c2UgUEFMOjpVQk5vcm1hbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW1iZWQ6CisgICAgY2FzZSBQQUw6OkVtYmVk
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUVtYmVkOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIE92ZXJyaWRlOgorICAgIGNhc2UgUEFMOjpPdmVycmlkZToKICAgICAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVCaWRpT3ZlcnJpZGU7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXNvbGF0ZToKKyAgICBjYXNlIFBBTDo6SXNvbGF0ZToKICAgICAgICAgbV92YWx1
ZS52YWx1ZUlEID0gQ1NTVmFsdWVJc29sYXRlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIElz
b2xhdGVPdmVycmlkZToKKyAgICBjYXNlIFBBTDo6SXNvbGF0ZU92ZXJyaWRlOgogICAgICAgICBt
X3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUlzb2xhdGVPdmVycmlkZTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQbGFpbnRleHQ6CisgICAgY2FzZSBQQUw6OlBsYWludGV4dDoKICAgICAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVQbGFpbnRleHQ7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVV
bmljb2RlQmlkaSgpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6
b3BlcmF0b3IgUEFMOjpFVW5pY29kZUJpZGkoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVl
SUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6Ci0gICAgICAgIHJldHVybiBVQk5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6
VUJOb3JtYWw7CiAgICAgY2FzZSBDU1NWYWx1ZUVtYmVkOgotICAgICAgICByZXR1cm4gRW1iZWQ7
CisgICAgICAgIHJldHVybiBQQUw6OkVtYmVkOwogICAgIGNhc2UgQ1NTVmFsdWVCaWRpT3ZlcnJp
ZGU6Ci0gICAgICAgIHJldHVybiBPdmVycmlkZTsKKyAgICAgICAgcmV0dXJuIFBBTDo6T3ZlcnJp
ZGU7CiAgICAgY2FzZSBDU1NWYWx1ZUlzb2xhdGU6CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdElz
b2xhdGU6Ci0gICAgICAgIHJldHVybiBJc29sYXRlOworICAgICAgICByZXR1cm4gUEFMOjpJc29s
YXRlOwogICAgIGNhc2UgQ1NTVmFsdWVJc29sYXRlT3ZlcnJpZGU6CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdElzb2xhdGVPdmVycmlkZToKLSAgICAgICAgcmV0dXJuIElzb2xhdGVPdmVycmlkZTsK
KyAgICAgICAgcmV0dXJuIFBBTDo6SXNvbGF0ZU92ZXJyaWRlOwogICAgIGNhc2UgQ1NTVmFsdWVQ
bGFpbnRleHQ6CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBsYWludGV4dDoKLSAgICAgICAgcmV0
dXJuIFBsYWludGV4dDsKKyAgICAgICAgcmV0dXJuIFBBTDo6UGxhaW50ZXh0OwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBVQk5vcm1hbDsKKyAgICByZXR1cm4gUEFMOjpVQk5vcm1hbDsKIH0KIAogdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFVzZXJE
cmFnIGUpCkBAIC0zMDE4LDU4ICszMDE4LDU4IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBPdmVyZmxvd1dyYXAoKSBjb25zdAogICAgIHJldHVybiBPdmVy
Zmxvd1dyYXA6Ok5vcm1hbDsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFRleHREaXJlY3Rpb24gZSkKK3RlbXBsYXRlPD4gaW5saW5l
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQQUw6OlRleHREaXJlY3Rpb24g
ZSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIHNldFByaW1pdGl2ZVVu
aXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQpOwogICAgIHN3aXRjaCAoZSkgewotICAg
IGNhc2UgVGV4dERpcmVjdGlvbjo6TFRSOgorICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFI6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTHRyOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OlJUTDoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVJ0bDsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1
ZTo6b3BlcmF0b3IgVGV4dERpcmVjdGlvbigpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpUZXh0RGlyZWN0aW9uKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoaXNWYWx1ZUlEKCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsK
ICAgICBjYXNlIENTU1ZhbHVlTHRyOgotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRS
OworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgY2FzZSBDU1NW
YWx1ZVJ0bDoKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0
dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0RGly
ZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoV3Jp
dGluZ01vZGUgZSkKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShQQUw6OldyaXRpbmdNb2RlIGUpCiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVD
bGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NTX1ZBTFVF
X0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUhvcml6b250YWxUYjsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpSaWdodFRvTGVmdDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVWZXJ0aWNh
bFJsOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoK
KyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICBtX3ZhbHVl
LnZhbHVlSUQgPSBDU1NWYWx1ZVZlcnRpY2FsTHI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90
dG9tVG9Ub3A6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlSG9yaXpvbnRhbEJ0
OwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBXcml0aW5nTW9kZSgpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpXcml0aW5nTW9kZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKIApAQCAtMzA3OSwyMSArMzA3OSwyMSBAQCB0ZW1w
bGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgV3JpdGluZ01vZGUoKSBj
b25zdAogICAgIGNhc2UgQ1NTVmFsdWVMclRiOgogICAgIGNhc2UgQ1NTVmFsdWVSbDoKICAgICBj
YXNlIENTU1ZhbHVlUmxUYjoKLSAgICAgICAgcmV0dXJuIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bTsKKyAgICAgICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogICAgIGNh
c2UgQ1NTVmFsdWVWZXJ0aWNhbFJsOgogICAgIGNhc2UgQ1NTVmFsdWVUYjoKICAgICBjYXNlIENT
U1ZhbHVlVGJSbDoKLSAgICAgICAgcmV0dXJuIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OwogICAgIGNhc2UgQ1NT
VmFsdWVWZXJ0aWNhbExyOgotICAgICAgICByZXR1cm4gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0
OworICAgICAgICByZXR1cm4gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ7CiAgICAgY2Fz
ZSBDU1NWYWx1ZUhvcml6b250YWxCdDoKLSAgICAgICAgcmV0dXJuIFdyaXRpbmdNb2RlOjpCb3R0
b21Ub1RvcDsKKyAgICAgICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207CisgICAgcmV0dXJu
IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVGV4dENvbWJpbmUgZSkKQEAgLTMz
OTUsMTggKzMzOTUsMTggQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFBvaW50ZXJFdmVudHMoKSBjb25zdAogICAgIHJldHVybiBQb2ludGVyRXZlbnRzOjpB
bGw7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRp
dmVWYWx1ZShLZXJuaW5nIGtlcm5pbmcpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpLZXJuaW5nIGtlcm5pbmcpCiAgICAgOiBDU1NW
YWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0
VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGtlcm5pbmcpIHsKLSAgICBjYXNlIEtl
cm5pbmc6OkF1dG86CisgICAgY2FzZSBQQUw6Oktlcm5pbmc6OkF1dG86CiAgICAgICAgIG1fdmFs
dWUudmFsdWVJRCA9IENTU1ZhbHVlQXV0bzsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgS2Vy
bmluZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpLZXJuaW5nOjpOb3JtYWw6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBLZXJuaW5nOjpOb1NoaWZ0OgorICAgIGNhc2UgUEFMOjpLZXJuaW5nOjpOb1NoaWZ0OgogICAg
ICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vbmU7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNDE1LDIzICszNDE1LDIzIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShLZXJuaW5nIGtlcm5pbmcpCiAgICAgbV92YWx1ZS52
YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRp
dmVWYWx1ZTo6b3BlcmF0b3IgS2VybmluZygpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpLZXJuaW5nKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNWYWx1ZUlEKCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBj
YXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgcmV0dXJuIEtlcm5pbmc6OkF1dG87CisgICAgICAg
IHJldHVybiBQQUw6Oktlcm5pbmc6OkF1dG87CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAg
ICAgICAgcmV0dXJuIEtlcm5pbmc6Ok5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6S2Vybmlu
Zzo6Tm9ybWFsOwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gS2Vybmlu
Zzo6Tm9TaGlmdDsKKyAgICAgICAgcmV0dXJuIFBBTDo6S2VybmluZzo6Tm9TaGlmdDsKICAgICBk
ZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gS2VybmluZzo6QXV0bzsKKyAgICByZXR1cm4gUEFMOjpLZXJuaW5nOjpB
dXRvOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoT2JqZWN0Rml0IGZpdCkKQEAgLTM0NzgsMjEgKzM0NzgsMjEgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIE9iamVjdEZpdCgpIGNvbnN0CiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nKQordGVtcGxhdGU8PiBpbmxpbmUg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBBTDo6Rm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0
UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNo
IChzbW9vdGhpbmcpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5n
OgorICAgIGNhc2UgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKICAgICAg
ICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgY2FzZSBQQUw6OkZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVOb25lOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6
QW50aWFsaWFzZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNl
ZDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBbnRpYWxpYXNlZDsKICAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFz
ZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2Vk
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFsaWFzZWQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTAxLDM2ICszNTAxLDM2IEBAIHRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpCiAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogfQog
Ci10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFNtb290
aGluZ01vZGUoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFBBTDo6Rm9udFNtb290aGluZ01vZGUoKSBjb25zdAogewogICAgIEFTU0VSVChpc1Zh
bHVlSUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NT
VmFsdWVBdXRvOgotICAgICAgICByZXR1cm4gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhp
bmc7CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5n
OwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gRm9udFNtb290aGluZ01v
ZGU6Ok5vU21vb3RoaW5nOworICAgICAgICByZXR1cm4gUEFMOjpGb250U21vb3RoaW5nTW9kZTo6
Tm9TbW9vdGhpbmc7CiAgICAgY2FzZSBDU1NWYWx1ZUFudGlhbGlhc2VkOgotICAgICAgICByZXR1
cm4gRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOworICAgICAgICByZXR1cm4gUEFMOjpG
b250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ7CiAgICAgY2FzZSBDU1NWYWx1ZVN1YnBpeGVs
QW50aWFsaWFzZWQ6Ci0gICAgICAgIHJldHVybiBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBp
eGVsQW50aWFsaWFzZWQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpB
dXRvU21vb3RoaW5nOworICAgIHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21v
b3RoaW5nOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJp
bWl0aXZlVmFsdWUoRm9udFNtYWxsQ2FwcyBzbWFsbENhcHMpCit0ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpGb250U21hbGxDYXBzIHNt
YWxsQ2FwcykKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIHNldFByaW1p
dGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQpOwogICAgIHN3aXRjaCAoc21h
bGxDYXBzKSB7Ci0gICAgY2FzZSBGb250U21hbGxDYXBzOjpPZmY6CisgICAgY2FzZSBQQUw6OkZv
bnRTbWFsbENhcHM6Ok9mZjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnRTbWFsbENhcHM6Ok9uOgorICAgIGNh
c2UgUEFMOjpGb250U21hbGxDYXBzOjpPbjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVTbWFsbENhcHM7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTM5LDYxICszNTM5
LDYxIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZShGb250U21hbGxDYXBzIHNtYWxsQ2FwcykKICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NW
YWx1ZU5vcm1hbDsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIEZvbnRTbWFsbENhcHMoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtYWxsQ2FwcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsdWVJRCgpKTsKIAogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAg
Y2FzZSBDU1NWYWx1ZVNtYWxsQ2FwczoKLSAgICAgICAgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9u
OworICAgICAgICByZXR1cm4gUEFMOjpGb250U21hbGxDYXBzOjpPbjsKICAgICBjYXNlIENTU1Zh
bHVlTm9ybWFsOgotICAgICAgICByZXR1cm4gRm9udFNtYWxsQ2Fwczo6T2ZmOworICAgICAgICBy
ZXR1cm4gUEFMOjpGb250U21hbGxDYXBzOjpPZmY7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGb250U21h
bGxDYXBzOjpPZmY7CisgICAgcmV0dXJuIFBBTDo6Rm9udFNtYWxsQ2Fwczo6T2ZmOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVGV4
dFJlbmRlcmluZ01vZGUgZSkKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShQQUw6OlRleHRSZW5kZXJpbmdNb2RlIGUpCiAgICAgOiBDU1NWYWx1
ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlw
ZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFRleHRSZW5kZXJp
bmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzoKKyAgICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01v
ZGU6OkF1dG9UZXh0UmVuZGVyaW5nOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1
ZUF1dG87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGlt
aXplU3BlZWQ6CisgICAgY2FzZSBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNwZWVk
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU9wdGltaXplU3BlZWQ7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0
eToKKyAgICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0eToK
ICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVPcHRpbWl6ZUxlZ2liaWxpdHk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6Okdlb21ldHJpY1ByZWNp
c2lvbjoKKyAgICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Okdlb21ldHJpY1ByZWNpc2lv
bjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVHZW9tZXRyaWNQcmVjaXNpb247
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFRleHRSZW5kZXJpbmdNb2RlKCkgY29uc3QKK3RlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OlRleHRSZW5kZXJpbmdNb2Rl
KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1ZUlEKCkpOwogCiAgICAgc3dpdGNoIChtX3Zh
bHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgcmV0dXJuIFRl
eHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZzsKKyAgICAgICAgcmV0dXJuIFBBTDo6
VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOwogICAgIGNhc2UgQ1NTVmFsdWVP
cHRpbWl6ZVNwZWVkOgotICAgICAgICByZXR1cm4gVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXpl
U3BlZWQ7CisgICAgICAgIHJldHVybiBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNw
ZWVkOwogICAgIGNhc2UgQ1NTVmFsdWVPcHRpbWl6ZUxlZ2liaWxpdHk6Ci0gICAgICAgIHJldHVy
biBUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5OworICAgICAgICByZXR1cm4g
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5OwogICAgIGNhc2UgQ1NT
VmFsdWVHZW9tZXRyaWNQcmVjaXNpb246Ci0gICAgICAgIHJldHVybiBUZXh0UmVuZGVyaW5nTW9k
ZTo6R2VvbWV0cmljUHJlY2lzaW9uOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0UmVuZGVyaW5n
TW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0UmVuZGVy
aW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmc7CisgICAgcmV0dXJuIFBBTDo6VGV4dFJlbmRlcmlu
Z01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoSHlwaGVucyBoeXBoZW5zKQpAQCAtNTQ0NSwx
OCArNTQ0NSwxOCBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0
b3IgQXBwbGVQYXlCdXR0b25UeXBlKCkgY29uc3QKIH0KICNlbmRpZgogCi10ZW1wbGF0ZTw+IGlu
bGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udFZhcmlhbnRQb3Np
dGlvbiBwb3NpdGlvbikKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQ
cmltaXRpdmVWYWx1ZShQQUw6OkZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb24pCiAgICAgOiBD
U1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NV
bml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
UG9zaXRpb246Ok5vcm1hbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2Ny
aXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3JpcHQ6CiAgICAg
ICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlU3ViOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVTdXBlcjsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU0NjUsNDcg
KzU0NjUsNDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1p
dGl2ZVZhbHVlKEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXQKICAgICB9CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFyaWFudFBvc2l0aW9u
KCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQ
QUw6OkZvbnRWYXJpYW50UG9zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQo
KSk7CiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOworICAgICAg
ICByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7CiAgICAgY2FzZSBDU1NW
YWx1ZVN1YjoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDsK
KyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0OwogICAg
IGNhc2UgQ1NTVmFsdWVTdXBlcjoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50UG9zaXRpb246
OlN1cGVyc2NyaXB0OworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpT
dXBlcnNjcmlwdDsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1h
bDsKKyAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250
VmFyaWFudENhcHMgY2FwcykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShQQUw6OkZvbnRWYXJpYW50Q2FwcyBjYXBzKQogICAgIDogQ1NTVmFs
dWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5
cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNoIChjYXBzKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6
CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50Q2Fwczo6U21hbGw6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlU21h
bGxDYXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlQWxsU21hbGxDYXBzOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dENhcHM6OlBldGl0ZToKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVQZXRpdGVD
YXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRl
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKICAgICAgICAgbV92
YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBbGxQZXRpdGVDYXBzOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpVbmljYXNlOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVVuaWNh
c2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CiAgICAgICAgIG1fdmFsdWUu
dmFsdWVJRCA9IENTU1ZhbHVlVGl0bGluZ0NhcHM7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CkBAIC01NTE0LDQwICs1NTE0LDQwIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFudENhcHMgY2FwcykKICAgICB9CiB9
CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFy
aWFudENhcHMoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFBBTDo6Rm9udFZhcmlhbnRDYXBzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1
ZUlEKCkpOwogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1
ZU5vcm1hbDoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOworICAgICAg
ICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDsKICAgICBjYXNlIENTU1ZhbHVl
U21hbGxDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpTbWFsbDsKKyAgICAg
ICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDsKICAgICBjYXNlIENTU1ZhbHVl
QWxsU21hbGxDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDsK
KyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDsKICAgICBjYXNl
IENTU1ZhbHVlUGV0aXRlQ2FwczoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50Q2Fwczo6UGV0
aXRlOworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZTsKICAgICBj
YXNlIENTU1ZhbHVlQWxsUGV0aXRlQ2FwczoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBl
dGl0ZTsKICAgICBjYXNlIENTU1ZhbHVlVW5pY2FzZToKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJp
YW50Q2Fwczo6VW5pY2FzZTsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpV
bmljYXNlOwogICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAgICAgcmV0dXJuIEZv
bnRWYXJpYW50Q2Fwczo6VGl0bGluZzsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRD
YXBzOjpUaXRsaW5nOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw7
CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWw7CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFu
dEFsdGVybmF0ZXMgYWx0ZXJuYXRlcykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHRlcm5h
dGVzKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0UHJpbWl0aXZl
VW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNoIChhbHRlcm5h
dGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CiAgICAgICAgIG1fdmFsdWUudmFs
dWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVIaXN0b3JpY2FsRm9ybXM7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBA
IC01NTU2LDMwICs1NTU2LDMwIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFudEFsdGVybmF0ZXMgYWx0CiAgICAgfQogfQog
Ci10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFZhcmlh
bnRBbHRlcm5hdGVzKCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsdWVJRCgpKTsKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNh
c2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHJldHVybiBGb250VmFyaWFudEFsdGVybmF0ZXM6
Ok5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3Jt
YWw7CiAgICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxGb3JtczoKLSAgICAgICAgcmV0dXJuIEZv
bnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOworICAgICAgICByZXR1cm4gUEFM
OjpGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOworICAgIHJldHVybiBQQUw6OkZvbnRW
YXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udE9wdGljYWxTaXppbmcgc2l6aW5nKQor
dGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBB
TDo6Rm9udE9wdGljYWxTaXppbmcgc2l6aW5nKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xh
c3MpCiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9J
RCk7CiAgICAgc3dpdGNoIChzaXppbmcpIHsKLSAgICBjYXNlIEZvbnRPcHRpY2FsU2l6aW5nOjpF
bmFibGVkOgorICAgIGNhc2UgUEFMOjpGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZDoKICAgICAg
ICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZDoKKyAgICBjYXNlIFBBTDo6Rm9udE9wdGlj
YWxTaXppbmc6OkRpc2FibGVkOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5v
bmU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC01NTg4LDE5ICs1NTg4LDE5IEBA
IHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShG
b250T3B0aWNhbFNpemluZyBzaXppbmcpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udE9wdGljYWxTaXppbmcoKSBjb25zdAordGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udE9wdGlj
YWxTaXppbmcoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAgICAgc3dpdGNo
IChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgcmV0
dXJuIEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkOworICAgICAgICByZXR1cm4gUEFMOjpGb250
T3B0aWNhbFNpemluZzo6RW5hYmxlZDsKICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAg
cmV0dXJuIEZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZDsKKyAgICAgICAgcmV0dXJuIFBBTDo6
Rm9udE9wdGljYWxTaXppbmc6OkRpc2FibGVkOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udE9wdGlj
YWxTaXppbmc6OkVuYWJsZWQ7CisgICAgcmV0dXJuIFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVu
YWJsZWQ7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShGb250TG9hZGluZ0JlaGF2aW9yIGJlaGF2aW9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHkuaAppbmRleCBiYjA3Zjc3ZWE2ZmY1ODdkMDQwZDc3MDlmMDMxMzc0OWI4MDNkNDg0Li4z
ZWRiNmE0MGM3Y2FlNWQ4ZWVkMWM5MjU3Y2VmMDI4Yjc1MTQwYTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHkuaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNp
bmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHdyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0KCk7CiAKLSAgICBzdGF0aWMgQ1NTUHJv
cGVydHlJRCByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBUZXh0
RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CisgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgcmVzb2x2
ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUEFMOjpUZXh0RGlyZWN0aW9u
LCBQQUw6OldyaXRpbmdNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBpc0luaGVyaXRlZFByb3BlcnR5
KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBhbGlhc2VzRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCk7CiAgICAgc3RhdGljIGJvb2wgaXNEaXJlY3Rpb25Bd2FyZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRG
b250RmFjZS5jcHAKaW5kZXggZTZhNmVjMWE1Y2JlZDlkNDI1ZmJkMTBlOWUwYmIwYjQyOWEwYmRl
My4uYTllZmQ4OGIxNjUxMzdhMDdkNmZjYTJlOGY3YTBlOTZjM2VhNzIzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0xMjYsOCArMTI2LDggQEAg
Rm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbmdlcyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIAogICAgICAgICBhdXRvIHNlbGVjdGlvbkNhcGFiaWxp
dGllcyA9ICpmYWNlLT5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7CiAKLSAgICAgICAgYm9v
bCBzeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlwdGlvbi5mb250U3ludGhlc2lzKCkgJiBGb250
U3ludGhlc2lzV2VpZ2h0KSAmJiAhaXNGb250V2VpZ2h0Qm9sZChzZWxlY3Rpb25DYXBhYmlsaXRp
ZXMud2VpZ2h0Lm1heGltdW0pICYmIGlzRm9udFdlaWdodEJvbGQoZGVzaXJlZFJlcXVlc3Qud2Vp
Z2h0KTsKLSAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAoZm9udERlc2NyaXB0aW9uLmZv
bnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkgJiYgIWlzSXRhbGljKHNlbGVjdGlv
bkNhcGFiaWxpdGllcy5zbG9wZS5tYXhpbXVtKSAmJiBpc0l0YWxpYyhkZXNpcmVkUmVxdWVzdC5z
bG9wZSk7CisgICAgICAgIGJvb2wgc3ludGhldGljQm9sZCA9IChmb250RGVzY3JpcHRpb24uZm9u
dFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAhaXNGb250V2VpZ2h0
Qm9sZChzZWxlY3Rpb25DYXBhYmlsaXRpZXMud2VpZ2h0Lm1heGltdW0pICYmIGlzRm9udFdlaWdo
dEJvbGQoZGVzaXJlZFJlcXVlc3Qud2VpZ2h0KTsKKyAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFs
aWMgPSAoZm9udERlc2NyaXB0aW9uLmZvbnRTeW50aGVzaXMoKSAmIFBBTDo6Rm9udFN5bnRoZXNp
c1N0eWxlKSAmJiAhaXNJdGFsaWMoc2VsZWN0aW9uQ2FwYWJpbGl0aWVzLnNsb3BlLm1heGltdW0p
ICYmIGlzSXRhbGljKGRlc2lyZWRSZXF1ZXN0LnNsb3BlKTsKIAogICAgICAgICAvLyBNZXRyaWNz
IHVzZWQgZm9yIGxheW91dCBjb21lIGZyb20gRm9udFJhbmdlczo6Zm9udEZvckZpcnN0UmFuZ2Uo
KSwgd2hpY2ggYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmb250IGlzIG5vbi1udWxsLgogICAgICAg
ICBhdXRvIGZvbnRBY2Nlc3NvciA9IENTU0ZvbnRBY2Nlc3Nvcjo6Y3JlYXRlKGZhY2UsIGZvbnRE
ZXNjcmlwdGlvbiwgZm9udFBhbGV0dGVWYWx1ZXMsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0
YWxpYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAppbmRleCBlZmZkNjA3YzM0NmY5YmNmYmM5YzI4
ODliZjgzMTY5NGRhMzQwMzA1Li42MzdhMDQ3OGIxYjIzZGIxZGNjZmFlNDk5YTc4YThlODFhOGJj
YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKQEAgLTI5OCw4ICsyOTgsOCBAQCBTdHJpbmcg
Rm9udEZhY2U6OnN0eWxlKCkgY29uc3QKICAgICBpZiAoIXN0eWxlV3JhcHBlZCkKICAgICAgICAg
cmV0dXJuICJub3JtYWwiX3M7CiAgICAgYXV0byBzdHlsZSA9IHN0eWxlV3JhcHBlZC52YWx1ZSgp
OwotICAgIGF1dG8gbWluaW11bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZy
b21TdHlsZVZhbHVlKHN0eWxlLm1pbmltdW0sIEZvbnRTdHlsZUF4aXM6Oml0YWwpOwotICAgIGF1
dG8gbWF4aW11bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZh
bHVlKHN0eWxlLm1heGltdW0sIEZvbnRTdHlsZUF4aXM6Oml0YWwpOworICAgIGF1dG8gbWluaW11
bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0eWxl
Lm1pbmltdW0sIFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbCk7CisgICAgYXV0byBtYXhpbXVtID0g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Zm9udFN0eWxlRnJvbVN0eWxlVmFsdWUoc3R5bGUubWF4
aW11bSwgUEFMOjpGb250U3R5bGVBeGlzOjppdGFsKTsKIAogICAgIGlmIChtaW5pbXVtLmdldCgp
LmVxdWFscyhtYXhpbXVtLmdldCgpKSkKICAgICAgICAgcmV0dXJuIG1pbmltdW0tPmNzc1RleHQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxp
bmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oCmlu
ZGV4IGZkODdjOTAwYjM2NTVmYWZlNzE5ZWZkMGNhZGM0MDNjNGQ3MjVjODQuLmEwMWUzODYzYjU1
N2E1YjgxOTdjNDg5MDdmMTM1Y2NmMzhkNjhjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaApAQCAtMTIxLDEyICsxMjEsMTIgQEAgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmb250U3RyZXRjaFZhbHVlKENTU1Zh
bHVlSUQgdmFsdWUpCiAgICAgfQogfQogCi1pbmxpbmUgc3RkOjpvcHRpb25hbDxDU1NWYWx1ZUlE
PiBmb250U3R5bGVLZXl3b3JkKHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBzdHls
ZSwgRm9udFN0eWxlQXhpcyBheGlzKQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8Q1NTVmFsdWVJRD4g
Zm9udFN0eWxlS2V5d29yZChzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gc3R5bGUs
IFBBTDo6Rm9udFN0eWxlQXhpcyBheGlzKQogewogICAgIGlmICghc3R5bGUgfHwgc3R5bGUudmFs
dWUoKSA9PSBub3JtYWxJdGFsaWNWYWx1ZSgpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVOb3Jt
YWw7CiAgICAgaWYgKHN0eWxlLnZhbHVlKCkgPT0gaXRhbGljVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIGF4aXMgPT0gRm9udFN0eWxlQXhpczo6aXRhbCA/IENTU1ZhbHVlSXRhbGljIDogQ1NTVmFs
dWVPYmxpcXVlOworICAgICAgICByZXR1cm4gYXhpcyA9PSBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0
YWwgPyBDU1NWYWx1ZUl0YWxpYyA6IENTU1ZhbHVlT2JsaXF1ZTsKICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuY3BwCmlu
ZGV4IDZkZTY5ZWVhOGJhZDgyMWJhYjljZmYyNmJmNjA2NTViZDViOTBjZTMuLjMxMWI5MDhmYzk1
MWU1MTliMjkxMDY2ZWEzYzNkZmQzZjkyZTM2MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250
VmFyaWFudEJ1aWxkZXIuY3BwCkBAIC0yOSw0MyArMjksNDMgQEAKICNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlUG9vbC5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1Rl
eHRGbGFncy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRWYXJpYW50TGlnYXR1cmVz
VmFsdWVzIGV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudExpZ2F0
dXJlcyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMg
Y29tbW9uID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyBkaXNjcmV0aW9uYXJ5ID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAg
ICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9
IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7CisgICAgUEFMOjpGb250VmFyaWFudExpZ2F0
dXJlcyBjb21tb24gPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7CisgICAgUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5ID0gUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsOworICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNh
bCA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gUEFMOjpGb250VmFyaWFudExpZ2F0
dXJlczo6Tm9ybWFsOwogCiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAg
ICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgp
KS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJl
czoKLSAgICAgICAgICAgICAgICBjb21tb24gPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87Cisg
ICAgICAgICAgICAgICAgY29tbW9uID0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm87CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGln
YXR1cmVzOgotICAgICAgICAgICAgICAgIGNvbW1vbiA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZ
ZXM7CisgICAgICAgICAgICAgICAgY29tbW9uID0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6
WWVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
RGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5ID0g
Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAgICAgICAgICAgICAgIGRpc2NyZXRpb25hcnkg
PSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAg
ICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOworICAg
ICAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZ
ZXM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9I
aXN0b3JpY2FsTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGhpc3RvcmljYWwgPSBGb250VmFy
aWFudExpZ2F0dXJlczo6Tm87CisgICAgICAgICAgICAgICAgaGlzdG9yaWNhbCA9IFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgaGlz
dG9yaWNhbCA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7CisgICAgICAgICAgICAgICAgaGlz
dG9yaWNhbCA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb250ZXh0dWFsOgotICAgICAgICAg
ICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsK
KyAgICAgICAgICAgICAgICBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9IFBBTDo6Rm9udFZhcmlhbnRM
aWdhdHVyZXM6OlllczsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb0NvbnRleHR1YWw6Ci0gICAgICAgICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0
ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87CisgICAgICAgICAgICAgICAgY29udGV4dHVh
bEFsdGVybmF0ZXMgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC03NywxMCArNzcsMTAgQEAgRm9udFZhcmlhbnRMaWdhdHVyZXNW
YWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgICAgIGNvbW1vbiA9IEZvbnRWYXJpYW50TGln
YXR1cmVzOjpObzsKLSAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm87Ci0gICAgICAgICAgICBoaXN0b3JpY2FsID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vOwotICAgICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0ZXMgPSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm87CisgICAgICAgICAgICBjb21tb24gPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
OjpObzsKKyAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpObzsKKyAgICAgICAgICAgIGhpc3RvcmljYWwgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpObzsKKyAgICAgICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gUEFMOjpGb250VmFy
aWFudExpZ2F0dXJlczo6Tm87CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODgsNDMgKzg4LDQzIEBAIEZv
bnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyhjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gRm9udFZh
cmlhbnRMaWdhdHVyZXNWYWx1ZXMoY29tbW9uLCBkaXNjcmV0aW9uYXJ5LCBoaXN0b3JpY2FsLCBj
b250ZXh0dWFsQWx0ZXJuYXRlcyk7CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVy
ZXNWYWx1ZXMoY29tbW9uLCBkaXNjcmV0aW9uYXJ5LCBoaXN0b3JpY2FsLCBjb250ZXh0dWFsQWx0
ZXJuYXRlcyk7CiB9CiAKLUZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlh
bnROdW1lcmljKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK1BBTDo6Rm9udFZhcmlhbnROdW1lcmlj
VmFsdWVzIGV4dHJhY3RGb250VmFyaWFudE51bWVyaWMoY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewotICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUgPSBGb250VmFyaWFudE51bWVy
aWNGaWd1cmU6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmcg
PSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb24gZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFs
OwotICAgIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWw6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBz
bGFzaGVkWmVybyA9IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw7CisgICAg
UEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmUgZmlndXJlID0gUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmU6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcg
c3BhY2luZyA9IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsOworICAgIFBB
TDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb24gPSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw7CisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRp
bmFsIG9yZGluYWwgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDsKKyAg
ICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvID0gUEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOwogCiAgICAgaWYgKGlzPENTU1Zh
bHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENT
U1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMaW5pbmdOdW1zOgotICAgICAgICAgICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50
TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczsKKyAgICAgICAgICAgICAgICBmaWd1cmUgPSBQ
QUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPbGRzdHlsZU51bXM6Ci0gICAg
ICAgICAgICAgICAgZmlndXJlID0gRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51
bWJlcnM7CisgICAgICAgICAgICAgICAgZmlndXJlID0gUEFMOjpGb250VmFyaWFudE51bWVyaWNG
aWd1cmU6Ok9sZFN0eWxlTnVtYmVyczsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxOdW1zOgotICAgICAgICAgICAgICAgIHNwYWNp
bmcgPSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOworICAg
ICAgICAgICAgICAgIHNwYWNpbmcgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlBy
b3BvcnRpb25hbE51bWJlcnM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlVGFidWxhck51bXM6Ci0gICAgICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOworICAgICAgICAgICAgICAgIHNw
YWNpbmcgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZURpYWdvbmFs
RnJhY3Rpb25zOgotICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gRm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOworICAgICAgICAgICAgICAgIGZyYWN0aW9uID0g
UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3RhY2tlZEZyYWN0
aW9uczoKLSAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uOjpTdGFja2VkRnJhY3Rpb25zOworICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gUEFMOjpG
b250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcmRpbmFsOgotICAgICAgICAg
ICAgICAgIG9yZGluYWwgPSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM7CisgICAgICAg
ICAgICAgICAgb3JkaW5hbCA9IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsYXNoZWRa
ZXJvOgotICAgICAgICAgICAgICAgIHNsYXNoZWRaZXJvID0gRm9udFZhcmlhbnROdW1lcmljU2xh
c2hlZFplcm86OlllczsKKyAgICAgICAgICAgICAgICBzbGFzaGVkWmVybyA9IFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljU2xhc2hlZFplcm86OlllczsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0xMzQsNDQgKzEzNCw0NCBAQCBGb250VmFyaWFudE51bWVyaWNWYWx1ZXMgZXh0cmFjdEZv
bnRWYXJpYW50TnVtZXJpYyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgfSBlbHNlIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogCi0g
ICAgcmV0dXJuIEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlcyhmaWd1cmUsIHNwYWNpbmcsIGZyYWN0
aW9uLCBvcmRpbmFsLCBzbGFzaGVkWmVybyk7CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljVmFsdWVzKGZpZ3VyZSwgc3BhY2luZywgZnJhY3Rpb24sIG9yZGluYWwsIHNsYXNoZWRa
ZXJvKTsKIH0KIAotRm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50
RWFzdEFzaWFuKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK1BBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5WYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudCA9IEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lk
dGggd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw7Ci0gICAgRm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5IHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1h
bDsKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50ID0gUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuV2lkdGggd2lkdGggPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5v
cm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5ID0gUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDsKIAogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+
KHZhbHVlKSkgewogICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KHZhbHVlKSkgewogICAgICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oaXRlbS5nZXQoKSkudmFsdWVJRCgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
SmlzNzg6Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6SmlzNzg7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50OjpKaXM3ODsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVKaXM4MzoKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0g
UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUppczkwOgotICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOworICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlSmlzMDQ6
Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6
SmlzMDQ7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50OjpKaXMwNDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVTaW1wbGlmaWVkOgotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ7CisgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVRyYWRpdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRy
YWRpdGlvbmFsOworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlRnVsbFdpZHRoOgotICAgICAgICAgICAgICAgIHdpZHRoID0g
Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKKyAgICAgICAgICAgICAgICB3aWR0aCA9
IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVQcm9wb3J0aW9uYWxXaWR0aDoKLSAgICAg
ICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25h
bDsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aDo6UHJvcG9ydGlvbmFsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVJ1Ynk6Ci0gICAgICAgICAgICAgICAgcnVieSA9IEZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieTo6WWVzOworICAgICAgICAgICAgICAgIHJ1YnkgPSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6WWVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE4MSwxMCAr
MTgxLDEwIEBAIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudEVh
c3RBc2lhbihjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgfSBlbHNlIGlmIChpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogCi0gICAgcmV0dXJu
IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzKHZhcmlhbnQsIHdpZHRoLCBydWJ5KTsKKyAgICBy
ZXR1cm4gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcyh2YXJpYW50LCB3aWR0aCwgcnVi
eSk7CiB9CiAKLVJlZjxDU1NWYWx1ZT4gY29tcHV0ZUZvbnRWYXJpYW50KGNvbnN0IEZvbnRWYXJp
YW50U2V0dGluZ3MmIHZhcmlhbnRTZXR0aW5ncykKK1JlZjxDU1NWYWx1ZT4gY29tcHV0ZUZvbnRW
YXJpYW50KGNvbnN0IFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5ncyYgdmFyaWFudFNldHRpbmdzKQog
ewogICAgIGlmICh2YXJpYW50U2V0dGluZ3MuaXNBbGxOb3JtYWwoKSkKICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9ybWFsKTsKQEAgLTE5MiwxNzggKzE5MiwxNzggQEAgUmVmPENTU1ZhbHVlPiBjb21wdXRlRm9u
dFZhcmlhbnQoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgdmFyaWFudFNldHRpbmdzKQogICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKIAogICAg
IHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmNvbW1vbkxpZ2F0dXJlcykgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0
dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlcykpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29tbW9uTGln
YXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNl
dHRpbmdzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5n
ZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFu
dFNldHRpbmdzLmhpc3RvcmljYWxMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5n
ZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1
cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRp
bmdzLmNvbnRleHR1YWxBbHRlcm5hdGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJl
czo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CisgICAg
Y2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIGxpc3QuZ2V0KCku
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQ29udGV4dHVhbCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TGlnYXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgog
ICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vQ29udGV4dHVhbCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5wb3NpdGlvbikgewotICAgIGNh
c2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dFBvc2l0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRQ
b3NpdGlvbjo6U3Vic2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpT
dWJzY3JpcHQ6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3ViKSk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgogICAgICAgICBsaXN0LmdldCgp
LmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVN1cGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFy
aWFudFNldHRpbmdzLmNhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dENhcHM6OlNtYWxsOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2FwcykpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQWxsU21hbGxDYXBzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpQZXRpdGU6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBldGl0ZUNhcHMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpBbGxQZXRpdGU6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsUGV0aXRlQ2Fw
cykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgogICAgICAgICBsaXN0Lmdl
dCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVVuaWNhc2UpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dENhcHM6OlRpdGxpbmc6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoK
ICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUaXRsaW5nQ2FwcykpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljRmlndXJlKSB7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CiAgICAgICAgIGxpc3Qu
Z2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTGluaW5nTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVyczoKICAgICAgICAgbGlzdC5nZXQo
KS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVPbGRzdHlsZU51bXMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dp
dGNoICh2YXJpYW50U2V0dGluZ3MubnVtZXJpY1NwYWNpbmcpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZzo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6CiAgICAgICAgIGxpc3Qu
Z2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlUHJvcG9ydGlvbmFsTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAgICAgICAgbGlz
dC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVUYWJ1bGFyTnVtcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljRnJhY3Rpb24pIHsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CiAgICAgICAg
IGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlRGlhZ29uYWxGcmFjdGlvbnMpKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnM6
CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9ucykpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljT3JkaW5h
bCkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6WWVzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlT3JkaW5hbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlh
bnRTZXR0aW5ncy5udW1lcmljU2xhc2hlZFplcm8pIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljU2xhc2hlZFplcm86OlllczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU2xhc2hlZFplcm86OlllczoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbGFzaGVkWmVy
bykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5n
cy5hbHRlcm5hdGVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUhpc3RvcmljYWxGb3JtcykpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5lYXN0QXNpYW5WYXJpYW50KSB7
Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODoKICAgICAgICAgbGlzdC5n
ZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVKaXM3OCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzODMpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczkw
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgogICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczkwKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVK
aXMwNCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudDo6U2ltcGxpZmllZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpTaW1wbGlmaWVkOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNpbXBsaWZpZWQpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRy
YWRpdGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRy
YWRpdGlvbmFsOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRyYWRpdGlvbmFsKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lh
bldpZHRoKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgogICAgICAgICBsaXN0Lmdl
dCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUZ1bGxXaWR0aCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVByb3BvcnRpb25hbFdpZHRoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRj
aCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblJ1YnkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50
RWFzdEFzaWFuUnVieTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lh
blJ1Ynk6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblJ1Ynk6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZ
ZXM6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUnVieSkpOwogICAgICAgICBicmVhazsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRCdWlsZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRCdWlsZGVyLmgKaW5kZXggNjkxYTY5OWEz
ZDFhMjYxYjBiZWI4NjBiZGUzYmQxN2YzMTg0ZmE4Ni4uNDdjN2YwOWY5ZWU3NzBiOTExM2Q2ZmYw
OWQ4MjA2MTBmYjc1OTEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYXJp
YW50QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIu
aApAQCAtMjcsMTggKzI3LDIxIEBACiAKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTVmFsdWU7Ci1zdHJ1Y3QgRm9udFZhcmlhbnRTZXR0aW5n
czsKK25hbWVzcGFjZSBQQUwgewogc3RydWN0IEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzOwog
c3RydWN0IEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlczsKIHN0cnVjdCBGb250VmFyaWFudEVhc3RB
c2lhblZhbHVlczsKK3N0cnVjdCBGb250VmFyaWFudFNldHRpbmdzOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENTU1ZhbHVlOwogCi1Gb250VmFyaWFudExpZ2F0dXJlc1ZhbHVl
cyBleHRyYWN0Rm9udFZhcmlhbnRMaWdhdHVyZXMoY29uc3QgQ1NTVmFsdWUmKTsKLUZvbnRWYXJp
YW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKGNvbnN0IENTU1ZhbHVl
Jik7Ci1Gb250VmFyaWFudEVhc3RBc2lhblZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnRFYXN0QXNp
YW4oY29uc3QgQ1NTVmFsdWUmKTsKK1BBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXMgZXh0
cmFjdEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENTU1ZhbHVlJik7CitQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKGNvbnN0IENTU1ZhbHVl
Jik7CitQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudEVh
c3RBc2lhbihjb25zdCBDU1NWYWx1ZSYpOwogCi1SZWY8Q1NTVmFsdWU+IGNvbXB1dGVGb250VmFy
aWFudChjb25zdCBGb250VmFyaWFudFNldHRpbmdzJik7CitSZWY8Q1NTVmFsdWU+IGNvbXB1dGVG
b250VmFyaWFudChjb25zdCBQQUw6OkZvbnRWYXJpYW50U2V0dGluZ3MmKTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBs
IGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCmluZGV4IGY5NDE5MTc0ZjVhMDllNWQw
ZmE5ZmU1ZDZkZTZlYmFjNTA0MmJiODAuLmQzYmUzYmEyY2UzZGY1ZWYwYjY1YTZmZTA1NzA5MzI5
OGE3ODQ5N2EgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKQEAgLTcxNSw5ICs3MTUsOSBAQCBwcmlu
dCBHUEVSRiA8PCAiRU9GIjsKICAgICB9CiB9CiAKLUNTU1Byb3BlcnR5SUQgQ1NTUHJvcGVydHk6
OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorQ1NTUHJv
cGVydHlJRCBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBQQUw6Oldy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewotICAgIGNvbnN0IFRleHRGbG93JiB0ZXh0ZmxvdyA9
IG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsKKyAgICBjb25zdCBQQUw6OlRl
eHRGbG93JiB0ZXh0ZmxvdyA9IG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsK
ICAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKIEVPRgogCkBAIC03MjUsNyArNzI1LDcgQEAgZm9y
IG15ICRsb2dpY2FsUHJvcGVydHlHcm91cCAodmFsdWVzICVsb2dpY2FsUHJvcGVydHlHcm91cHMp
IHsKICAgICB3aGlsZSAobXkgKCRyZXNvbHZlciwgJG5hbWUpID0gZWFjaCAleyAkbG9naWNhbFBy
b3BlcnR5R3JvdXAtPnsibG9naWNhbCJ9IH0pIHsKICAgICAgICAgbXkgJGtpbmQgPSAkbG9naWNh
bFByb3BlcnR5R3JvdXAtPnsia2luZCJ9OwogICAgICAgICBteSAka2luZElkID0gbmFtZVRvSWQo
JGtpbmQpOwotICAgICAgICBteSAkcmVzb2x2ZXJFbnVtID0gIkxvZ2ljYWxCb3giIC4gJGtpbmRJ
ZCAuICI6OiIgLiBuYW1lVG9JZCgkcmVzb2x2ZXIpOworICAgICAgICBteSAkcmVzb2x2ZXJFbnVt
ID0gIlBBTDo6TG9naWNhbEJveCIgLiAka2luZElkIC4gIjo6IiAuIG5hbWVUb0lkKCRyZXNvbHZl
cik7CiAgICAgICAgIG15IEBwaHlzaWNhbHM7CiAgICAgICAgIGlmICgka2luZCBlcSAic2lkZSIp
IHsKICAgICAgICAgICAgIEBwaHlzaWNhbHMgPSAoInRvcCIsICJyaWdodCIsICJib3R0b20iLCAi
bGVmdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKaW5kZXggZmUzYTEyNzNi
N2NiZTVhNjRkYzIyYTQwZmYwMDFkNDkwMTdjZTUwOS4uZWQyZjcwZWVmYmMwNTcwNDQyN2RmNzI2
ODc4NTQzNWNhZjgzMjQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Lmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IDk4
MTAwMjUwMDU2N2EyZjM2Nzg1NWRlYmE1Y2NmYjE3M2M4YzBlZWEuLjllOTcxMjQ4OTkzMDFlNmU1
MjM3Yjg5OWY2MWZiYmRiYWNkZWRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC02OTUsOSArNjk1LDkgQEAgc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50RWFzdEFzaWFuKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAKICAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+IHZhcmlhbnQ7Ci0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRo
PiB3aWR0aDsKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4gcnVi
eTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2
YXJpYW50OworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRo
PiB3aWR0aDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
PiBydWJ5OwogICAgIAogICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAo
cmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQpAQCAtNzA5LDQ3ICs3MDksNDcgQEAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50RWFzdEFzaWFuKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgICAgICBjYXNlIENTU1ZhbHVlSmlzNzg6CiAgICAg
ICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4Owor
ICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpK
aXM3ODsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlSmlzODM6CiAg
ICAgICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczgz
OworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpKaXM4MzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6
CiAgICAgICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okpp
czkwOworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM5MDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlSmlz
MDQ6CiAgICAgICAgICAgICBpZiAodmFyaWFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OkppczA0OworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpKaXMwNDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVl
U2ltcGxpZmllZDoKICAgICAgICAgICAgIGlmICh2YXJpYW50KQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6U2ltcGxpZmllZDsKKyAgICAgICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmllZDsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1ZhbHVlVHJhZGl0aW9uYWw6CiAgICAgICAgICAgICBpZiAodmFyaWFudCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHZhcmlhbnQgPSBG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOworICAgICAgICAgICAgdmFy
aWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpUcmFkaXRpb25hbDsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlRnVsbFdpZHRoOgogICAgICAg
ICAgICAgaWYgKHdpZHRoKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOworICAgICAgICAg
ICAgd2lkdGggPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgogICAg
ICAgICAgICAgaWYgKHdpZHRoKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgd2lkdGggPSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWw7
CisgICAgICAgICAgICB3aWR0aCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJv
cG9ydGlvbmFsOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVSdWJ5
OgogICAgICAgICAgICAgaWYgKHJ1YnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM7CisgICAg
ICAgICAgICBydWJ5ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC03NTgsNDQgKzc1OCw0NCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
Rm9udFZhcmlhbnRFYXN0QXNpYW4oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgfQogCi0gICAgc3dpdGNo
ICh2YXJpYW50LnZhbHVlX29yKEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsKSkg
ewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgc3dp
dGNoICh2YXJpYW50LnZhbHVlX29yKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpO
b3JtYWwpKSB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9y
bWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
Nzg6CiAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzNzgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOgogICAgICAgICB2YWx1ZXMtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUppczgzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpKaXM5MDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpKaXM5MDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6CiAgICAgICAgIHZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlSmlzMDQpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6U2ltcGxpZmllZDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTaW1wbGlmaWVk
KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpUcmFkaXRpb25hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpUcmFkaXRpb25hbDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUcmFkaXRpb25hbCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHdpZHRoLnZhbHVlX29yKEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6Ok5vcm1hbDoKKyAgICBzd2l0Y2ggKHdpZHRoLnZhbHVlX29yKFBBTDo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsKSkgeworICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6RnVsbDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGdWxsV2lkdGgpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0
aW9uYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRp
b25hbDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQcm9wb3J0aW9uYWxXaWR0aCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIHN3aXRjaCAocnVieS52YWx1ZV9vcihGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6Tm9ybWFsOgorICAgIHN3aXRjaCAocnVieS52YWx1ZV9vcihQQUw6OkZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsKSkgeworICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudEVhc3RBc2lhblJ1Ynk6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpZZXM6CiAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUnVieSkpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25E
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
RGF0YS5jcHAKaW5kZXggZGNhZWE4NjdkM2YzNjc3ZmI5MTJjZjNiNTg1OTZhMzIyMWJkZjQxNi4u
ZWJhZmUzZmFjNjNiOTcxYjkxOWU5MWZiNTBjYzEyZjFiZDYzZDFjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3Bw
CkBAIC0xMDAsMTUgKzEwMCwxNSBAQCBSZWN0RWRnZXM8Qm9yZGVyRWRnZT4gY2FsY3VsYXRlQm9y
ZGVyRWRnZXMoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCBwaXhlbAogICAgIH07CiB9
CiAKLXN0ZDo6cGFpcjxCb3hTaWRlLCBCb3hTaWRlPiBhZGphY2VudFNpZGVzRm9yU2lkZShCb3hT
aWRlIHNpZGUpCitzdGQ6OnBhaXI8UEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGU+IGFkamFjZW50
U2lkZXNGb3JTaWRlKFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIHN3aXRjaCAoc2lkZSkgewot
ICAgIGNhc2UgQm94U2lkZTo6VG9wOiByZXR1cm4geyBCb3hTaWRlOjpMZWZ0LCBCb3hTaWRlOjpS
aWdodCB9OwotICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOiByZXR1cm4geyBCb3hTaWRlOjpMZWZ0
LCBCb3hTaWRlOjpSaWdodCB9OwotICAgIGNhc2UgQm94U2lkZTo6TGVmdDogcmV0dXJuIHsgQm94
U2lkZTo6VG9wLCBCb3hTaWRlOjpCb3R0b20gfTsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OiBy
ZXR1cm4geyBCb3hTaWRlOjpUb3AsIEJveFNpZGU6OkJvdHRvbSB9OworICAgIGNhc2UgUEFMOjpC
b3hTaWRlOjpUb3A6IHJldHVybiB7IFBBTDo6Qm94U2lkZTo6TGVmdCwgUEFMOjpCb3hTaWRlOjpS
aWdodCB9OworICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206IHJldHVybiB7IFBBTDo6Qm94
U2lkZTo6TGVmdCwgUEFMOjpCb3hTaWRlOjpSaWdodCB9OworICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpMZWZ0OiByZXR1cm4geyBQQUw6OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpCb3R0b20g
fTsKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6IHJldHVybiB7IFBBTDo6Qm94U2lkZTo6
VG9wLCBQQUw6OkJveFNpZGU6OkJvdHRvbSB9OwogICAgIH0KLSAgICByZXR1cm4geyBCb3hTaWRl
OjpMZWZ0LCBCb3hTaWRlOjpSaWdodCB9OworICAgIHJldHVybiB7IFBBTDo6Qm94U2lkZTo6TGVm
dCwgUEFMOjpCb3hTaWRlOjpSaWdodCB9OwogfQogCiBCb3hEZWNvcmF0aW9uRGF0YTo6Qm94RGVj
b3JhdGlvbkRhdGEoKSA9IGRlZmF1bHQ7CkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBCb3hEZWNv
cmF0aW9uRGF0YTo6aGFzQm9yZGVyKCkgY29uc3QKICAgICBpZiAoaGFzQm9yZGVySW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVz
KSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGF1
dG8mIGVkZ2UgPSBtX2JvcmRlckVkZ2VzW3NpZGVdOwogICAgICAgICBpZiAoZWRnZS5zdHlsZSgp
ICE9IEJvcmRlclN0eWxlOjpOb25lICYmIGVkZ2Uud2lkdGgoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTM1LDcgKzEzNSw3IEBAIGJvb2wgQm94RGVjb3JhdGlvbkRhdGE6OmJvcmRl
ck9ic2N1cmVzQmFja2dyb3VuZCgpIGNvbnN0CiAgICAgLy8gQmFpbCBpZiB3ZSBoYXZlIGFueSBi
b3JkZXItaW1hZ2UgZm9yIG5vdy4gV2UgY291bGQgbG9vayBhdCB0aGUgaW1hZ2UgYWxwaGEgdG8g
aW1wcm92ZSB0aGlzLgogICAgIC8vIEZJWE1FOiBDaGVjayBib3JkZXItaW1hZ2UuCiAKLSAgICBm
b3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6
OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGlmICghbV9ib3JkZXJFZGdlcy5hdChzaWRlKS5vYnNj
dXJlc0JhY2tncm91bmQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0x
NDUsMTAgKzE0NSwxMCBAQCBib29sIEJveERlY29yYXRpb25EYXRhOjpib3JkZXJPYnNjdXJlc0Jh
Y2tncm91bmQoKSBjb25zdAogCiBib29sIEJveERlY29yYXRpb25EYXRhOjpib3JkZXJPYnNjdXJl
c0JhY2tncm91bmRFZGdlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAogewot
ICAgIGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6
IFBBTDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgYXV0byYgY3VyckVkZ2UgPSBtX2JvcmRlckVk
Z2VzLmF0KHNpZGUpOwogICAgICAgICAvLyBGSVhNRTogZm9yIHZlcnRpY2FsIHRleHQKLSAgICAg
ICAgZmxvYXQgYXhpc1NjYWxlID0gKHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94
U2lkZTo6Qm90dG9tKSA/IGNvbnRleHRTY2FsZS5oZWlnaHQoKSA6IGNvbnRleHRTY2FsZS53aWR0
aCgpOworICAgICAgICBmbG9hdCBheGlzU2NhbGUgPSAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRv
cCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tKSA/IGNvbnRleHRTY2FsZS5oZWlnaHQo
KSA6IGNvbnRleHRTY2FsZS53aWR0aCgpOwogICAgICAgICBpZiAoIWN1cnJFZGdlLm9ic2N1cmVz
QmFja2dyb3VuZEVkZ2UoYXhpc1NjYWxlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uRGF0YS5oCmluZGV4IDEzYjMyODZmYzdlNjRlM2M3N2JhYzQyMmY1NGIyOWU4YjY5NmJh
ZWYuLjEzMTE0ZTk4NDExZTA2N2RkNTIwZjlmOWUwZDE5MzZlYTY4ZmYwYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5o
CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKIFJlY3RFZGdlczxCb3JkZXJFZGdlPiBjYWxj
dWxhdGVCb3JkZXJFZGdlcyhjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0IHBpeGVsU25hcHBpbmdG
YWN0b3IsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZUxv
Z2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsKIAotc3RkOjpwYWlyPEJveFNpZGUsIEJveFNpZGU+IGFk
amFjZW50U2lkZXNGb3JTaWRlKEJveFNpZGUpOworc3RkOjpwYWlyPFBBTDo6Qm94U2lkZSwgUEFM
OjpCb3hTaWRlPiBhZGphY2VudFNpZGVzRm9yU2lkZShQQUw6OkJveFNpZGUpOwogCiBpbmxpbmUg
UmVjdEVkZ2VzPGZsb2F0PiBib3JkZXJXaWR0aHMoY29uc3QgUmVjdEVkZ2VzPEJvcmRlckVkZ2U+
JiBlZGdlcykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IGJiMThhNjNhYjk5MGM0YWUzYmRj
YjkwMzI5YzMxNjlhYmI1ZmEyYTAuLjE1MjdjMGUzYjZmMDQzYzAyYjdhNmI3N2QxMjk2OTBiZGQ0
ZmVmMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtOTAsMjQgKzkwLDI0IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiAhZmlyc3RSYWRpdXMuaXNaZXJvKCkgfHwgIXNlY29uZFJhZGl1cy5p
c1plcm8oKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUhhc1VubWF0Y2hl
ZENvbG9yc0F0Q29ybmVyKEJvcmRlclN0eWxlLCBCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lk
ZSk7Ci0gICAgc3RhdGljIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKEJveFNpZGUsIEJv
eFNpZGUgYWRqYWNlbnRTaWRlLCBCb3JkZXJTdHlsZSwgQm9yZGVyU3R5bGUgYWRqYWNlbnRTdHls
ZSk7Ci0gICAgc3RhdGljIEZsb2F0Um91bmRlZFJlY3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJv
cmRlcihjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSk7Ci0gICAg
c3RhdGljIHZvaWQgY2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihCb3JkZXJTdHlsZSwgQm94U2lk
ZSwgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUhhc1VubWF0Y2hlZENvbG9y
c0F0Q29ybmVyKEJvcmRlclN0eWxlLCBQQUw6OkJveFNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2Vu
dFNpZGUpOworICAgIHN0YXRpYyBib29sIGJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShQQUw6OkJv
eFNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUsIEJvcmRlclN0eWxlLCBCb3JkZXJTdHls
ZSBhZGphY2VudFN0eWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdCBjYWxjdWxhdGVB
ZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBQ
QUw6OkJveFNpZGUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3Io
Qm9yZGVyU3R5bGUsIFBBTDo6Qm94U2lkZSwgQ29sb3ImKTsKIAogICAgIEZsb2F0UmVjdCBib3Jk
ZXJJbm5lclJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKGNvbnN0IFBhaW50aW5nQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUsIEJveFNp
ZGUgYWRqYWNlbnRTaWRlKSBjb25zdDsKLSAgICBib29sIGNvbG9yTmVlZHNBbnRpQWxpYXNBdENv
cm5lcihCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3Q7Ci0gICAgYm9vbCB3aWxs
QmVPdmVyZHJhd24oQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0OwotICAgIGJv
b2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wg
YWxsb3dPdmVyZHJhdykgY29uc3Q7CisgICAgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKFBBTDo6
Qm94U2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3Q7CisgICAgYm9vbCBjb2xv
ck5lZWRzQW50aUFsaWFzQXRDb3JuZXIoUEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNl
bnRTaWRlKSBjb25zdDsKKyAgICBib29sIHdpbGxCZU92ZXJkcmF3bihQQUw6OkJveFNpZGUsIFBB
TDo6Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0OworICAgIGJvb2wgam9pblJlcXVpcmVzTWl0
cmUoUEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBib29sIGFsbG93T3Zl
cmRyYXcpIGNvbnN0OwogCi0gICAgdm9pZCBjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdD
b250ZXh0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlLCBib29sIGZpcnN0RWRnZU1hdGNoZXMs
IGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0OworICAgIHZvaWQgY2xpcEJvcmRlclNpZGVQ
b2x5Z29uKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9y
ZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgUEFMOjpCb3hTaWRlLCBi
b29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0OwogCi0g
ICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgQm94U2lkZSwgQ29sb3IsIEJvcmRlclN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwg
ZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJvb2wgYW50aWFsaWFzKSBjb25zdDsKLSAgICB2b2lkIGRy
YXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBib3Jk
ZXJSZWN0LCBjb25zdCBQYXRoJiBib3JkZXJQYXRoLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRy
YXdUaGlja25lc3MsIEJveFNpZGUsIENvbG9yLCBCb3JkZXJTdHlsZSkgY29uc3Q7CisgICAgdm9p
ZCBkcmF3TGluZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
UEFMOjpCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBm
bG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0OworICAgIHZvaWQgZHJh
d0JveFNpZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGJvcmRl
clJlY3QsIGNvbnN0IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJh
d1RoaWNrbmVzcywgUEFMOjpCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUpIGNvbnN0OwogCi0g
ICAgdm9pZCBwYWludE9uZUJvcmRlclNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9y
ZGVyLCBjb25zdCBGbG9hdFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlLCBjb25zdCBQYXRoKiwgYm9v
bCBhbnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdDsKKyAgICB2b2lk
IHBhaW50T25lQm9yZGVyU2lkZShQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNv
bnN0IEZsb2F0UmVjdCYgc2lkZVJlY3QsIFBBTDo6Qm94U2lkZSwgY29uc3QgUGF0aCosIGJvb2wg
YW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3Q7CiAgICAgdm9pZCBw
YWludEJvcmRlclNpZGVzKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IG91dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgRmxvYXRT
aXplIGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50LCBCb3hTaWRlU2V0LCBib29sIGFudGlhbGlh
cywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IgPSBudWxscHRyKSBjb25zdDsKICAgICB2b2lk
IHBhaW50VHJhbnNsdWNlbnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJC
b3JkZXIsIEZsb2F0U2l6ZSBpbm5lckJvcmRlckJsZWVkQWRqdXN0bWVudCwgQm94U2lkZVNldCwg
Ym9vbCBhbnRpYWxpYXMpIGNvbnN0OwogCkBAIC0xMjAsNyArMTIwLDcgQEAgcHJpdmF0ZToKIAog
Ly8gQm9yZGVyU3R5bGU6Ok91dHNldCBkYXJrZW5zIHRoZSBib3R0b20gYW5kIHJpZ2h0IChhbmQg
bWF5YmUgbGlnaHRlbnMgdGhlIHRvcCBhbmQgbGVmdCkKIC8vIEJvcmRlclN0eWxlOjpJbnNldCBk
YXJrZW5zIHRoZSB0b3AgYW5kIGxlZnQgKGFuZCBtYXliZSBsaWdodGVucyB0aGUgYm90dG9tIGFu
ZCByaWdodCkKLWJvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xv
cnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFj
ZW50U2lkZSkKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xv
cnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUpCiB7CiAgICAgLy8gVGhlc2Ugc3R5bGVzIG1hdGNoIGF0IHRoZSB0
b3AvbGVmdCBhbmQgYm90dG9tL3JpZ2h0LgogICAgIGlmIChzdHlsZSA9PSBCb3JkZXJTdHlsZTo6
SW5zZXQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBzdHlsZSA9PSBCb3JkZXJT
dHlsZTo6UmlkZ2UgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCkgewpAQCAtMTMzLDcg
KzEzMyw3IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xv
cnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEJvcmRlclBhaW50ZXI6OmNvbG9yc01hdGNoQXRDb3JuZXIoQm94U2lkZSBzaWRlLCBC
b3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3QKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6Y29sb3JzTWF0
Y2hBdENvcm5lcihQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSkg
Y29uc3QKIHsKICAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICBhdXRvJiBh
ZGphY2VudEVkZ2UgPSBtX2VkZ2VzLmF0KGFkamFjZW50U2lkZSk7CkBAIC0xNDcsNyArMTQ3LDcg
QEAgYm9vbCBCb3JkZXJQYWludGVyOjpjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUgc2lkZSwg
Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnMKICAgICByZXR1cm4gIWJvcmRlclN0eWxlSGFzVW5t
YXRjaGVkQ29sb3JzQXRDb3JuZXIoZWRnZS5zdHlsZSgpLCBzaWRlLCBhZGphY2VudFNpZGUpOwog
fQogCi1ib29sIEJvcmRlclBhaW50ZXI6OmNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcihCb3hT
aWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdAorYm9vbCBCb3JkZXJQYWludGVy
Ojpjb2xvck5lZWRzQW50aUFsaWFzQXRDb3JuZXIoUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0CiB7CiAgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQo
c2lkZSk7CiAgICAgYXV0byYgYWRqYWNlbnRFZGdlID0gbV9lZGdlcy5hdChhZGphY2VudFNpZGUp
OwpAQCAtMTY0LDcgKzE2NCw3IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6Y29sb3JOZWVkc0FudGlB
bGlhc0F0Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpCiAgICAgcmV0dXJu
IGJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIoZWRnZS5zdHlsZSgpLCBzaWRl
LCBhZGphY2VudFNpZGUpOwogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0ZUJvcmRl
clN0eWxlQ29sb3IoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQ29sb3ImIGNvbG9y
KQordm9pZCBCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKEJvcmRlclN0
eWxlIHN0eWxlLCBQQUw6OkJveFNpZGUgc2lkZSwgQ29sb3ImIGNvbG9yKQogewogICAgIEFTU0VS
VChzdHlsZSA9PSBCb3JkZXJTdHlsZTo6SW5zZXQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91
dHNldCk7CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0
ZUJvcmRlclN0eWxlQ29sb3IoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQwogCiAg
ICAgZW51bSBPcGVyYXRpb24geyBEYXJrZW4sIExpZ2h0ZW4gfTsKIAotICAgIE9wZXJhdGlvbiBv
cGVyYXRpb24gPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0
KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47Cisg
ICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNp
ZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0
KSA/IERhcmtlbiA6IExpZ2h0ZW47CiAKICAgICAvLyBIZXJlIHdlIHdpbGwgZGFya2VuIHRoZSBi
b3JkZXIgZGVjb3JhdGlvbiBjb2xvciB3aGVuIG5lZWRlZC4gVGhpcyB3aWxsIHlpZWxkIGEgc2lt
aWxhciBiZWhhdmlvciBhcyBpbiBGRi4KICAgICBpZiAob3BlcmF0aW9uID09IERhcmtlbikgewpA
QCAtMTg3LDExICsxODcsMTEgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjYWxjdWxhdGVCb3JkZXJT
dHlsZUNvbG9yKEJvcmRlclN0eWxlIHN0eWxlLCBCb3hTaWRlIHNpZGUsIEMKIH0KIAogLy8gVGhp
cyBhc3N1bWVzIHRoYXQgd2UgZHJhdyBpbiBvcmRlcjogdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0
LgotYm9vbCBCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24oQm94U2lkZSBzaWRlLCBCb3hT
aWRlIGFkamFjZW50U2lkZSkgY29uc3QKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6d2lsbEJlT3ZlcmRy
YXduKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdAog
ewogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgotICAgIGNhc2Ug
Qm94U2lkZTo6Qm90dG9tOiB7CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6Qm90dG9tOiB7CiAgICAgICAgIGF1dG8mIGVkZ2UgPSBtX2VkZ2VzLmF0
KHNpZGUpOwogICAgICAgICBhdXRvJiBhZGphY2VudEVkZ2UgPSBtX2VkZ2VzLmF0KGFkamFjZW50
U2lkZSk7CiAKQEAgLTIwNiwxNSArMjA2LDE1IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6d2lsbEJl
T3ZlcmRyYXduKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0CiAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICBj
YXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgorICAgIGNh
c2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgLy8gVGhlc2UgZHJhdyBsYXN0LCBzbyBh
cmUgbmV2ZXIgb3ZlcmRyYXduLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBCb3JkZXJQYWludGVyOjpib3JkZXJTdHlsZXNSZXF1aXJl
TWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5
bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5bGUpCitib29sIEJvcmRlclBhaW50ZXI6OmJvcmRl
clN0eWxlc1JlcXVpcmVNaXRyZShQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFj
ZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5bGUpCiB7
CiAgICAgaWYgKHN0eWxlID09IEJvcmRlclN0eWxlOjpEb3VibGUgfHwgYWRqYWNlbnRTdHlsZSA9
PSBCb3JkZXJTdHlsZTo6RG91YmxlIHx8IGFkamFjZW50U3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdy
b292ZSB8fCBhZGphY2VudFN0eWxlID09IEJvcmRlclN0eWxlOjpSaWRnZSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMjgsNyArMjI4LDcgQEAgYm9vbCBCb3JkZXJQYWludGVyOjpib3JkZXJT
dHlsZXNSZXF1aXJlTWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwKICAg
ICByZXR1cm4gYm9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihzdHlsZSwgc2lk
ZSwgYWRqYWNlbnRTaWRlKTsKIH0KIAotRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVyOjpj
YWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVy
Qm9yZGVyLCBCb3hTaWRlIHNpZGUpCitGbG9hdFJvdW5kZWRSZWN0IEJvcmRlclBhaW50ZXI6OmNh
bGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJC
b3JkZXIsIFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIC8vIEV4cGFuZCB0aGUgaW5uZXIgYm9y
ZGVyIGFzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGEgcm91bmRlZCByZWN0IChpLmUuIHJhZGlpIGNv
bnRhaW5lZCB3aXRoaW4gZWFjaCBlZGdlKS4KICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbGllcyBv
biB0aGUgZmFjdCB3ZSBvbmx5IGdldCByYWRpaSBub3QgY29udGFpbmVkIHdpdGhpbiBlYWNoIGVk
Z2UgaWYgb25lIG9mIHRoZSByYWRpaQpAQCAtMjQwLDcgKzI0MCw3IEBAIEZsb2F0Um91bmRlZFJl
Y3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBGbG9h
dFJvdW5kZWRSCiAgICAgZmxvYXQgbWF4UmFkaWk7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAg
ICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAg
ICBvdmVyc2hvb3QgPSBuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSArIG5ld1JhZGlpLnRvcFJp
Z2h0KCkud2lkdGgoKSAtIG5ld1JlY3Qud2lkdGgoKTsKICAgICAgICAgaWYgKG92ZXJzaG9vdCA+
IDApIHsKICAgICAgICAgICAgIEFTU0VSVCghKG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpICYm
IG5ld1JhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSkpOwpAQCAtMjU1LDcgKzI1NSw3IEBAIEZsb2F0
Um91bmRlZFJlY3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihj
b25zdCBGbG9hdFJvdW5kZWRSCiAgICAgICAgICAgICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRp
aSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2Fz
ZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkuYm90
dG9tTGVmdCgpLndpZHRoKCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkgLSBuZXdS
ZWN0LndpZHRoKCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAgICBB
U1NFUlQoIShuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSAmJiBuZXdSYWRpaS5ib3R0b21S
aWdodCgpLndpZHRoKCkpKTsKQEAgLTI3Miw3ICsyNzIsNyBAQCBGbG9hdFJvdW5kZWRSZWN0IEJv
cmRlclBhaW50ZXI6OmNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29uc3QgRmxvYXRSb3Vu
ZGVkUgogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0
OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICBvdmVyc2hvb3QgPSBuZXdS
YWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKyBuZXdSYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkg
LSBuZXdSZWN0LmhlaWdodCgpOwogICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgewogICAgICAg
ICAgICAgQVNTRVJUKCEobmV3UmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICYmIG5ld1JhZGlpLmJv
dHRvbUxlZnQoKS5oZWlnaHQoKSkpOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIEZsb2F0Um91bmRlZFJl
Y3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBGbG9h
dFJvdW5kZWRSCiAgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG1heFJhZGlpKTsKICAgICAg
ICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hT
aWRlOjpSaWdodDoKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkudG9wUmlnaHQoKS5oZWln
aHQoKSArIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkgLSBuZXdSZWN0LmhlaWdodCgp
OwogICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgewogICAgICAgICAgICAgQVNTRVJUKCEobmV3
UmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdo
dCgpKSk7CkBAIC0zMDgsNyArMzA4LDcgQEAgRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVy
OjpjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFIKICAgICBy
ZXR1cm4gRmxvYXRSb3VuZGVkUmVjdCB7IG5ld1JlY3QsIG5ld1JhZGlpIH07CiB9CiAKLWJvb2wg
Qm9yZGVyUGFpbnRlcjo6am9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFk
amFjZW50U2lkZSwgYm9vbCBhbGxvd092ZXJkcmF3KSBjb25zdAorYm9vbCBCb3JkZXJQYWludGVy
Ojpqb2luUmVxdWlyZXNNaXRyZShQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFj
ZW50U2lkZSwgYm9vbCBhbGxvd092ZXJkcmF3KSBjb25zdAogewogICAgIGF1dG8mIGVkZ2UgPSBt
X2VkZ2VzLmF0KHNpZGUpOwogICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IG1fZWRnZXMuYXQoYWRq
YWNlbnRTaWRlKTsKQEAgLTMyOCw3ICszMjgsNyBAQCBib29sIEJvcmRlclBhaW50ZXI6OmpvaW5S
ZXF1aXJlc01pdHJlKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wgYQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGJvcmRlclJlY3QsIGNvbnN0IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxv
YXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUg
Ym9yZGVyU3R5bGUpIGNvbnN0Cit2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBh
dGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm9y
ZGVyUmVjdCwgY29uc3QgUGF0aCYgYm9yZGVyUGF0aCwgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBk
cmF3VGhpY2tuZXNzLCBQQUw6OkJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxl
IGJvcmRlclN0eWxlKSBjb25zdAogewogICAgIGlmICh0aGlja25lc3MgPD0gMCkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNp
ZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICBw
YWludGluZ0NvbnRleHQuY29udGV4dC5kcmF3UmVjdChib3JkZXJSZWN0KTsKIH0KIAotdm9pZCBC
b3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWlu
dGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSBzaWRlLCBib29sIGZpcnN0RWRn
ZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0Cit2b2lkIEJvcmRlclBhaW50
ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIGlubmVyQm9yZGVyLCBQQUw6OkJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRj
aGVzLCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKSBjb25zdAogewogICAgIGNvbnN0IEZsb2F0UmVj
dCYgb3V0ZXJSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgIGNvbnN0IEZsb2F0UmVjdCYg
aW5uZXJSZWN0ID0gaW5uZXJCb3JkZXIucmVjdCgpOwpAQCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQg
Qm9yZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFp
bnRpbmdDb250ZXh0LCBjb25zCiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7CiAgICAgcXVh
ZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOwogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNh
c2UgQm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKICAgICAgICAg
cXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CkBAIC01
MDIsNyArNTAyLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24o
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAgICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWlu
WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCksIHF1YWRbMl0pOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQm94U2lkZTo6
TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKQEAgLTUxNSw3ICs1MTUs
NyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0Nv
bnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAgICAgICAgZmluZEludGVyc2VjdGlv
bihvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCks
IGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwg
cXVhZFsyXSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206Cisg
ICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAgLTUyOCw3ICs1MjgsNyBAQCB2
b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRl
clJlY3QubWF4WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIGlubmVy
UmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwgcXVhZFsy
XSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKG91dGVy
UmVjdC5tYXhYTWluWUNvcm5lcigpKTsKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5u
ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChp
bm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAgICAgcXVhZFswXSwKICAgICAgICAgcXVhZFsxXSwKICAgICAg
ICAgcXVhZFsyXSwKLSAgICAgICAgc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hT
aWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkgOiBGbG9h
dFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSksCisgICAgICAgIHNpZGUgPT0gUEFMOjpC
b3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQo
cXVhZFszXS54KCksIHF1YWRbMl0ueSgpKSA6IEZsb2F0UG9pbnQocXVhZFsyXS54KCksIHF1YWRb
M10ueSgpKSwKICAgICAgICAgcXVhZFszXQogICAgIH07CiAgICAgYm9vbCB3YXNBbnRpYWxpYXNl
ZCA9IHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOwpAQCAtNTY2LDcg
KzU2Niw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50
aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zCiAKICAgICBWZWN0b3I8RmxvYXRQb2lu
dD4gc2Vjb25kUXVhZCA9IHsKICAgICAgICAgcXVhZFswXSwKLSAgICAgICAgc2lkZSA9PSBCb3hT
aWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbMF0u
eCgpLCBxdWFkWzFdLnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSks
CisgICAgICAgIHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNp
ZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQocXVhZFswXS54KCksIHF1YWRbMV0ueSgpKSA6IEZsb2F0
UG9pbnQocXVhZFsxXS54KCksIHF1YWRbMF0ueSgpKSwKICAgICAgICAgcXVhZFsxXSwKICAgICAg
ICAgcXVhZFsyXSwKICAgICAgICAgcXVhZFszXQpAQCAtNTc4LDcgKzU3OCw3IEBAIHZvaWQgQm9y
ZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFpbnRp
bmdDb250ZXh0LCBjb25zCiAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50
aWFsaWFzKHdhc0FudGlhbGlhc2VkKTsKIH0KIAotdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGlu
ZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVy
U3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBh
bnRpYWxpYXMpIGNvbnN0Cit2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQ
YWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBQ
QUw6OkJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxlIGJvcmRlclN0eWxlLCBm
bG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJvb2wgYW50aWFsaWFz
KSBjb25zdAogewogICAgIGF1dG8gZHJhd0JvcmRlclJlY3QgPSBbJl0oY29uc3QgRmxvYXRSZWN0
JiByZWN0KSB7CiAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKQEAgLTU4Niw3ICs1ODYsNyBA
QCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4
dC5kcmF3UmVjdChyZWN0KTsKICAgICB9OwogCi0gICAgYXV0byBkcmF3TGluZUZvciA9IFsmXShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIEJveFNpZGUgc2lkZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5
bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRqYWNlbnQpIHsKKyAgICBhdXRvIGRyYXdMaW5lRm9yID0g
WyZdKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIEJvcmRlclN0eWxl
IGJvcmRlclN0eWxlLCBjb25zdCBGbG9hdFNpemUmIGFkamFjZW50KSB7CiAgICAgICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKHBhaW50aW5nQ29udGV4dCwgcmVjdCwgc2lkZSwgY29sb3IsIGJvcmRlclN0eWxlLCBh
ZGphY2VudC53aWR0aCgpLCBhZGphY2VudC5oZWlnaHQoKSwgYW50aWFsaWFzKTsKQEAgLTYwMSw3
ICs2MDEsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgIGZsb2F0IHkyID0gcmVjdC5t
YXhZKCk7CiAgICAgZmxvYXQgdGhpY2tuZXNzOwogICAgIGZsb2F0IGxlbmd0aDsKLSAgICBpZiAo
c2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20pIHsKKyAgICBp
ZiAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90
dG9tKSB7CiAgICAgICAgIHRoaWNrbmVzcyA9IHkyIC0geTE7CiAgICAgICAgIGxlbmd0aCA9IHgy
IC0geDE7CiAgICAgfSBlbHNlIHsKQEAgLTY0MSwxOSArNjQxLDE5IEBAIHZvaWQgQm9yZGVyUGFp
bnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0
LCBjb25zdCBGCiAgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMoYW50aWFsaWFzKTsKIAogICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAg
ICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpUb3A6CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEsIGxlbmd0aCwg
ZWRnZS5vdXRlcldpZHRoKCkgfSk7CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4
MSwgeTIgLSBlZGdlLmlubmVyV2lkdGgoKSwgbGVuZ3RoLCBlZGdlLmlubmVyV2lkdGgoKSB9KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Qm90dG9t
OgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgICAg
ICBkcmF3Qm9yZGVyUmVjdCh7IHgxLCB5MiAtIGVkZ2Uub3V0ZXJXaWR0aCgpLCBsZW5ndGgsIGVk
Z2Uub3V0ZXJXaWR0aCgpIH0pOwogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHsgeDEs
IHkxLCBsZW5ndGgsIGVkZ2UuaW5uZXJXaWR0aCgpIH0pOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEs
IGVkZ2Uub3V0ZXJXaWR0aCgpLCBsZW5ndGggfSk7CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRl
clJlY3QoeyB4MiAtIGVkZ2UuaW5uZXJXaWR0aCgpLCB5MSwgZWRnZS5pbm5lcldpZHRoKCksIGxl
bmd0aCB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lk
ZTo6UmlnaHQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAg
ICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MiAtIGVkZ2Uub3V0ZXJXaWR0aCgpLCB5MSwgZWRn
ZS5vdXRlcldpZHRoKCksIGxlbmd0aCB9KTsKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVj
dCh7IHgxLCB5MSwgZWRnZS5pbm5lcldpZHRoKCksIGxlbmd0aCB9KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTY3NSwyOCArNjc1LDI4IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xp
bmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAK
ICAgICAgICAgICAgIEZsb2F0UmVjdCBwYWludEJvcmRlclJlY3Q7CiAgICAgICAgICAgICBzd2l0
Y2ggKHNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICAgICAg
Y2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNldDEsIHkx
LCAoeDIgLSBtaXRyZU9mZnNldDMpIC0gKHgxICsgbWl0cmVPZmZzZXQxKSwgdGhpcmRPZlRoaWNr
bmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihw
YWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFj
ZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwogCiAgICAgICAgICAgICAgICAgcGFp
bnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0
cmVPZmZzZXQyLCB5MiAtIHRoaXJkT2ZUaGlja25lc3MsICh4MiAtIG1pdHJlT2Zmc2V0NCkgLSAo
eDEgKyBtaXRyZU9mZnNldDIpLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3Ip
OwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9y
ZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJp
Z1RoaXJkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJveFNp
ZGU6OkxlZnQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAg
ICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJl
Y3QoeDEsIHkxICsgbWl0cmVPZmZzZXQxLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9m
ZnNldDMpIC0gKHkxICsgbWl0cmVPZmZzZXQxKSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAg
ICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxl
OjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkp
OwogCiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBp
eGVscyhMYXlvdXRSZWN0KHgyIC0gdGhpcmRPZlRoaWNrbmVzcywgeTEgKyBtaXRyZU9mZnNldDIs
IHRoaXJkT2ZUaGlja25lc3MsICh5MiAtIG1pdHJlT2Zmc2V0NCkgLSAoeTEgKyBtaXRyZU9mZnNl
dDIpKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBh
aW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNl
bnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAgIGNhc2UgUEFM
OjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQyLCB5MSwgKHgy
IC0gbWl0cmVPZmZzZXQ0KSAtICh4MSArIG1pdHJlT2Zmc2V0MiksIHRoaXJkT2ZUaGlja25lc3Mp
LCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRC
b3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFC
aWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIAogICAgICAgICAgICAgICAgIHBhaW50Qm9y
ZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJlT2Zm
c2V0MSwgeTIgLSB0aGlyZE9mVGhpY2tuZXNzLCAoeDIgLSBtaXRyZU9mZnNldDMpIC0gKHgxICsg
bWl0cmVPZmZzZXQxKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsKICAg
ICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0
eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGly
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpS
aWdodDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAg
ICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3Qo
eDEsIHkxICsgbWl0cmVPZmZzZXQyLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9mZnNl
dDQpIC0gKHkxICsgbWl0cmVPZmZzZXQyKSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
ICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpT
b2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwog
CkBAIC03MzAsMTYgKzczMCwxNiBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94
U2lkZShQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgICAgICBm
bG9hdCBvZmZzZXQzID0gMDsKICAgICAgICAgZmxvYXQgb2Zmc2V0NCA9IDA7CiAKLSAgICAgICAg
aWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMSA8IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gfHwgc2lkZSA9
PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSkKKyAgICAgICAgaWYgKCgo
c2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6TGVmdCkg
JiYgYWRqYWNlbnRXaWR0aDEgPCAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpCb3R0b20g
fHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQog
ICAgICAgICAgICAgb2Zmc2V0MSA9IGZsb29yVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMSAv
IDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6
OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkgfHwg
KChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApKQorICAgICAgICBpZiAoKChzaWRlID09IFBBTDo6Qm94U2lkZTo6
VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMiA8IDAp
IHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IFBBTDo6Qm94U2lk
ZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyID4gMCkpCiAgICAgICAgICAgICBvZmZzZXQyID0g
Y2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7
CiAKLSAgICAgICAgaWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRl
OjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0
b20gfHwgc2lkZSA9PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPCAwKSkKKyAg
ICAgICAgaWYgKCgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94
U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hT
aWRlOjpCb3R0b20gfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdp
ZHRoMSA8IDApKQogICAgICAgICAgICAgb2Zmc2V0MyA9IGZsb29yVG9EZXZpY2VQaXhlbChmYWJz
KGFkamFjZW50V2lkdGgxKSAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAo
KChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFj
ZW50V2lkdGgyID4gMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJv
eFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMiA8IDApKQorICAgICAgICBpZiAoKChzaWRl
ID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBz
aWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCiAgICAg
ICAgICAgICBvZmZzZXQ0ID0gY2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICAgICAgZmxvYXQgYWRqdXN0ZWRYID0gY2VpbFRvRGV2
aWNlUGl4ZWwoKHgxICsgeDIpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtNzUxLDE5ICs3
NTEsMTkgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJveFNpZGUoUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgeTIgPSByb3VuZFRvRGV2
aWNlUGl4ZWwoeTIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgICAgICBzd2l0Y2ggKHNpZGUp
IHsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpUb3A6CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSAr
IG9mZnNldDEsIHkxKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNldDIsIGFkanVzdGVkWSkpLCBzaWRl
LCBzMSwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKICAg
ICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgxICsgb2Zmc2V0Mywg
YWRqdXN0ZWRZKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNldDQsIHkyKSksIHNpZGUsIHMyLCBGbG9h
dFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFM
OjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoeDEsIHkxICsgb2Zmc2V0MSksIEZsb2F0UG9pbnQoYWRqdXN0ZWRYLCB5MiAtIG9mZnNl
dDIpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdIYWxmLCBhZGphY2VudDJCaWdI
YWxmKSk7CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludChhZGp1
c3RlZFgsIHkxICsgb2Zmc2V0MyksIEZsb2F0UG9pbnQoeDIsIHkyIC0gb2Zmc2V0NCkpLCBzaWRl
LCBzMiwgRmxvYXRTaXplKGFkamFjZW50MVNtYWxsSGFsZiwgYWRqYWNlbnQyU21hbGxIYWxmKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAg
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICBkcmF3TGluZUZvcihG
bG9hdFJlY3QoRmxvYXRQb2ludCh4MSArIG9mZnNldDEsIHkxKSwgRmxvYXRQb2ludCh4MiAtIG9m
ZnNldDIsIGFkanVzdGVkWSkpLCBzaWRlLCBzMiwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYs
IGFkamFjZW50MkJpZ0hhbGYpKTsKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChG
bG9hdFBvaW50KHgxICsgb2Zmc2V0MywgYWRqdXN0ZWRZKSwgRmxvYXRQb2ludCh4MiAtIG9mZnNl
dDQsIHkyKSksIHNpZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2Vu
dDJTbWFsbEhhbGYpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6
OlJpZ2h0OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBk
cmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSwgeTEgKyBvZmZzZXQxKSwgRmxvYXRQ
b2ludChhZGp1c3RlZFgsIHkyIC0gb2Zmc2V0MikpLCBzaWRlLCBzMiwgRmxvYXRTaXplKGFkamFj
ZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKICAgICAgICAgICAgIGRyYXdMaW5lRm9y
KEZsb2F0UmVjdChGbG9hdFBvaW50KGFkanVzdGVkWCwgeTEgKyBvZmZzZXQzKSwgRmxvYXRQb2lu
dCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNpZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxI
YWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzk4LDI1
ICs3OTgsMjUgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJveFNpZGUoUGFpbnRp
bmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgVmVjdG9yPEZsb2F0
UG9pbnQ+IHF1YWQ7CiAgICAgICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAg
ICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9KTsKICAg
ICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFk
amFjZW50V2lkdGgxLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVu
ZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkyIH0pOwogICAg
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDIsIDApLCB5MSB9KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAg
ICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFk
amFjZW50V2lkdGgxLCAwKSwgeTEgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVu
ZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0pOwogICAg
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsg
eDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDIsIDApIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4
MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSB9KTsKICAgICAgICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGph
Y2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hT
aWRlOjpSaWdodDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFj
ZW50V2lkdGgxLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEs
IHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7CiAgICAgICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNl
bnRXaWR0aDIsIDApIH0pOwpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6
ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25z
dCBGCiAgICAgfQogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZShQ
YWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
b3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBG
bG9hdFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlIHNpZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGJvb2wg
YW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3QKK3ZvaWQgQm9yZGVy
UGFpbnRlcjo6cGFpbnRPbmVCb3JkZXJTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2lkZVJlY3QsIFBBTDo6Qm94
U2lkZSBzaWRlLCBjb25zdCBQYXRoKiBwYXRoLCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3Iq
IG92ZXJyaWRlQ29sb3IpIGNvbnN0CiB7CiAgICAgYXV0byYgZWRnZVRvUmVuZGVyID0gbV9lZGdl
cy5hdChzaWRlKTsKICAgICBBU1NFUlQoZWRnZVRvUmVuZGVyLndpZHRoRm9yUGFpbnRpbmcoKSk7
CkBAIC04OTMsNyArODkzLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVz
KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG8KICAgICBpZiAocmVu
ZGVyUmFkaWkpCiAgICAgICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRSZWN0KG91dGVyQm9yZGVy
KTsKIAotICAgIGF1dG8gcGFpbnRPbmVTaWRlID0gWyZdKEJveFNpZGUgc2lkZSkgeworICAgIGF1
dG8gcGFpbnRPbmVTaWRlID0gWyZdKFBBTDo6Qm94U2lkZSBzaWRlKSB7CiAgICAgICAgIGF1dG8m
IGVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOwogICAgICAgICBpZiAoIWVkZ2Uuc2hvdWxkUmVuZGVy
KCkgfHwgIWVkZ2VTZXQuY29udGFpbnMoZWRnZUZsYWdGb3JTaWRlKHNpZGUpKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTkwMywyMiArOTAzLDIyIEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFp
bnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxv
CiAgICAgICAgIEZsb2F0U2l6ZSBzZWNvbmRSYWRpdXM7CiAKICAgICAgICAgc3dpdGNoIChzaWRl
KSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lk
ZTo6VG9wOgogICAgICAgICAgICAgc2lkZVJlY3Quc2V0SGVpZ2h0KGVkZ2Uud2lkdGhGb3JQYWlu
dGluZygpICsgaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQuaGVpZ2h0KCkpOwogICAgICAgICAg
ICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKTsKICAgICAgICAg
ICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFhFZGdlVG8o
c2lkZVJlY3QubWF4WCgpIC0gZWRnZS53aWR0aEZvclBhaW50aW5nKCkgLSBpbm5lckJvcmRlckJs
ZWVkQWRqdXN0bWVudC53aWR0aCgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJC
b3JkZXIucmFkaWkoKS5ib3R0b21SaWdodCgpOwogICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0g
aW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90
dG9tOgogICAgICAgICAgICAgc2lkZVJlY3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAt
IGVkZ2Uud2lkdGhGb3JQYWludGluZygpIC0gaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQuaGVp
Z2h0KCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLmJv
dHRvbUxlZnQoKTsKICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlp
KCkuYm90dG9tUmlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNp
ZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAgICAg
c2lkZVJlY3Quc2V0V2lkdGgoZWRnZS53aWR0aEZvclBhaW50aW5nKCkgKyBpbm5lckJvcmRlckJs
ZWVkQWRqdXN0bWVudC53aWR0aCgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJC
b3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBp
bm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKTsKQEAgLTkyOSwxNyArOTI5LDE3IEBAIHZvaWQg
Qm9yZGVyUGFpbnRlcjo6cGFpbnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5n
Q29udGV4dCwgY29uc3QgRmxvCiAgICAgICAgIHBhaW50T25lQm9yZGVyU2lkZShwYWludGluZ0Nv
bnRleHQsIG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgc2lkZVJlY3QsIHNpZGUsIHVzZVBhdGgg
PyAmcm91bmRlZFBhdGggOiBudWxscHRyLCBhbnRpYWxpYXMsIG92ZXJyaWRlQ29sb3IpOwogICAg
IH07CiAKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6VG9wKTsKLSAgICBwYWludE9uZVNpZGUo
Qm94U2lkZTo6Qm90dG9tKTsKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6TGVmdCk7Ci0gICAg
cGFpbnRPbmVTaWRlKEJveFNpZGU6OlJpZ2h0KTsKKyAgICBwYWludE9uZVNpZGUoUEFMOjpCb3hT
aWRlOjpUb3ApOworICAgIHBhaW50T25lU2lkZShQQUw6OkJveFNpZGU6OkJvdHRvbSk7CisgICAg
cGFpbnRPbmVTaWRlKFBBTDo6Qm94U2lkZTo6TGVmdCk7CisgICAgcGFpbnRPbmVTaWRlKFBBTDo6
Qm94U2lkZTo6UmlnaHQpOwogfQogCiB2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50VHJhbnNsdWNl
bnRCb3JkZXJTaWRlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVy
Qm9yZGVyLCBGbG9hdFNpemUgaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQsIEJveFNpZGVTZXQg
ZWRnZXNUb0RyYXcsIGJvb2wgYW50aWFsaWFzKSBjb25zdAogewogICAgIC8vIHdpbGxCZU92ZXJk
cmF3biBhc3N1bWVzIHRoYXQgd2UgZHJhdyBpbiBvcmRlcjogdG9wLCBib3R0b20sIGxlZnQsIHJp
Z2h0LgotICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gQm94U2lkZSBlbnVtIG9yZGVyLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxCb3hTaWRlLCA0PiBwYWludE9yZGVyU2lk
ZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94U2lkZTo6Qm90dG9tLCBCb3hTaWRlOjpMZWZ0LCBCb3hT
aWRlOjpSaWdodCB9OworICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gUEFMOjpCb3hTaWRl
IGVudW0gb3JkZXIuCisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PFBBTDo6Qm94U2lk
ZSwgND4gcGFpbnRPcmRlclNpZGVzID0geyBQQUw6OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRl
OjpCb3R0b20sIFBBTDo6Qm94U2lkZTo6TGVmdCwgUEFMOjpCb3hTaWRlOjpSaWdodCB9OwogCiAg
ICAgd2hpbGUgKGVkZ2VzVG9EcmF3KSB7CiAgICAgICAgIC8vIEZpbmQgdW5kcmF3biBlZGdlcyBz
aGFyaW5nIGEgY29sb3IuCkBAIC0xMDAwLDEwICsxMDAwLDEwIEBAIHZvaWQgQm9yZGVyUGFpbnRl
cjo6cGFpbnRCb3JkZXJzKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KSBjb25zdAog
ICAgIGJvb2wgaGF2ZUFsbERvdWJsZUVkZ2VzID0gdHJ1ZTsKICAgICBpbnQgbnVtRWRnZXNWaXNp
YmxlID0gNDsKICAgICBib29sIGFsbEVkZ2VzU2hhcmVDb2xvciA9IHRydWU7Ci0gICAgc3RkOjpv
cHRpb25hbDxCb3hTaWRlPiBmaXJzdFZpc2libGVTaWRlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFM
OjpCb3hTaWRlPiBmaXJzdFZpc2libGVTaWRlOwogICAgIEJveFNpZGVTZXQgZWRnZXNUb0RyYXc7
CiAKLSAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNp
ZGUgOiBQQUw6OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGF1dG8mIGN1cnJFZGdlID0gbV9lZGdl
cy5hdChzaWRlKTsKIAogICAgICAgICBpZiAoY3VyckVkZ2Uuc2hvdWxkUmVuZGVyKCkpCkBAIC0x
MDUzLDI0ICsxMDUzLDI0IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRCb3JkZXJzKFBhaW50
aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIGF1dG8g
aW5uZXJUaGlyZFJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgpOwogICAgICAgICAgICAgICAgIGF1
dG8gb3V0ZXJUaGlyZFJlY3QgPSBtX2JvcmRlclJlY3QucmVjdCgpOwogCi0gICAgICAgICAgICAg
ICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgICAgICAgICAgICAgIGZvciAo
YXV0byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICAgICAgICAgICAgICBhdXRv
JiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3V0
ZXJXaWR0aCA9IGVkZ2Uub3V0ZXJXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBp
bm5lcldpZHRoID0gZWRnZS5pbm5lcldpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoc2lkZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlubmVyVGhpcmRSZWN0LnNoaWZ0WUVkZ2VUbyhpbm5lclRoaXJkUmVjdC55KCkgKyBp
bm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNoaWZ0
WUVkZ2VUbyhvdXRlclRoaXJkUmVjdC55KCkgKyBvdXRlcldpZHRoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5zZXRXaWR0aChpbm5lclRoaXJkUmVjdC53
aWR0aCgpIC0gaW5uZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlclRoaXJk
UmVjdC5zZXRXaWR0aChvdXRlclRoaXJkUmVjdC53aWR0aCgpIC0gb3V0ZXJXaWR0aCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0
b206CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5zZXRIZWlnaHQoaW5u
ZXJUaGlyZFJlY3QuaGVpZ2h0KCkgLSBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dGVyVGhpcmRSZWN0LnNldEhlaWdodChvdXRlclRoaXJkUmVjdC5oZWlnaHQoKSAtIG91
dGVyV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5z
aGlmdFhFZGdlVG8oaW5uZXJUaGlyZFJlY3QueCgpICsgaW5uZXJXaWR0aCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRlclRoaXJkUmVjdC5zaGlmdFhFZGdlVG8ob3V0ZXJUaGlyZFJlY3Qu
eCgpICsgb3V0ZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEx
MDgsMjEgKzExMDgsMjEgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlcnMoUGFpbnRp
bmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQpIGNvbnN0CiAgICAgICAgIGlmIChoYXZlQWxsU29s
aWRFZGdlcyAmJiBudW1FZGdlc1Zpc2libGUgIT0gNCAmJiAhbV9ib3JkZXJSZWN0LmlzUm91bmRl
ZCgpICYmIGhhdmVBbHBoYUNvbG9yKSB7CiAgICAgICAgICAgICBQYXRoIHBhdGg7CiAKLSAgICAg
ICAgICAgIGF1dG8gY2FsY3VsYXRlU2lkZVJlY3QgPSBbJl0oY29uc3QgQm9yZGVyRWRnZSYgZWRn
ZSwgQm94U2lkZSBzaWRlKSB7CisgICAgICAgICAgICBhdXRvIGNhbGN1bGF0ZVNpZGVSZWN0ID0g
WyZdKGNvbnN0IEJvcmRlckVkZ2UmIGVkZ2UsIFBBTDo6Qm94U2lkZSBzaWRlKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBzaWRlUmVjdCA9IG1fYm9yZGVyUmVjdC5yZWN0KCk7CiAgICAgICAgICAg
ICAgICAgYXV0byB3aWR0aCA9IGVkZ2Uud2lkdGhGb3JQYWludGluZygpOwogCiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpUb3A6
CisgICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAg
ICAgICAgc2lkZVJlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICAgICAgICAgIHNpZGVSZWN0
LnNoaWZ0WEVkZ2VUbyhzaWRlUmVjdC5tYXhYKCkgLSB3aWR0aCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgorICAgICAg
ICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgICAg
IHNpZGVSZWN0LnNoaWZ0WUVkZ2VUbyhzaWRlUmVjdC5tYXhZKCkgLSB3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoK
KyAgICAgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgICAg
ICAgICAgc2lkZVJlY3Quc2V0V2lkdGgod2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTMwLDcgKzExMzAsNyBAQCB2b2lkIEJvcmRlclBh
aW50ZXI6OnBhaW50Qm9yZGVycyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkgY29u
c3QKICAgICAgICAgICAgICAgICByZXR1cm4gc2lkZVJlY3Q7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gc2lkZSA6IFBBTDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgICAgICAgICBhdXRv
JiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICAgICAgICAgICAgICBpZiAoZWRnZS5zaG91
bGRSZW5kZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZGVSZWN0ID0gY2FsY3Vs
YXRlU2lkZVJlY3QoZWRnZSwgc2lkZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGVjb2Rl
ZERhdGFEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggN2IyYjQ1MDMxY2I1MDUzY2I2NDU2ZDhlYzY0
ZDhiY2M3ZTA2NGU2NS4uYzAwYjJjMzU1YmI0ODdiNWU3Mzc2YjdlMWQyYWMyZTYzM2UzZTgzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNw
cApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkRlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IGFjNGQ4NjEwNDVmYzI5NTJiNjkxOTg3ZGE3Y2VjZWY4MTczMDQ3
NjkuLmE0OTdlMDg5NDU0YTk1NzUwODAxZTlkNmE5ZDMzNzMwMTE1MjE1ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcApAQCAtMjE4LDcgKzIxOCw2IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5EYXRhLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNpbmNsdWRlICJT
ZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUg
IlNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ2xpZW50RGF0YS5oIgog
I2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJDb250YWluZXIuaCIKQEAgLTI3MSw2ICsyNzAsNyBAQAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENhbGxTdGFjay5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1ZNLmg+CiAjaW5jbHVkZSA8Y3RpbWU+CisjaW5jbHVkZSA8cGFsL3RleHQv
U2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CkBAIC0x
NzIyLDcgKzE3MjIsNyBAQCBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgcmV0dXJuIGJ1aWxkZXIgPT0g
dGl0bGUgPyB0aXRsZSA6IGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
dXBkYXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCit2b2lkIERvY3Vt
ZW50Ojp1cGRhdGVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQog
ewogICAgIGlmIChtX3Jhd1RpdGxlID09IHRpdGxlKQogICAgICAgICByZXR1cm47CkBAIC0xNzUz
LDcgKzE3NTMsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQo
KQogICAgICAgICB1cGRhdGVUaXRsZShkb3duY2FzdDxIVE1MVGl0bGVFbGVtZW50PigqbV90aXRs
ZUVsZW1lbnQpLnRleHRXaXRoRGlyZWN0aW9uKCkpOwogICAgIGVsc2UgaWYgKGlzPFNWR1RpdGxl
RWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KSkgewogICAgICAgICAvLyBGSVhNRTogRG9lcyB0aGUg
U1ZHIHRpdGxlIGVsZW1lbnQgaGF2ZSBhIHRleHQgZGlyZWN0aW9uPwotICAgICAgICB1cGRhdGVU
aXRsZSh7IGRvd25jYXN0PFNWR1RpdGxlRWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KS50ZXh0Q29u
dGVudCgpLCBUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CisgICAgICAgIHVwZGF0ZVRpdGxlKHsgZG93
bmNhc3Q8U1ZHVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnRleHRDb250ZW50KCksIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogICAgIH0KIH0KIApAQCAtMzMwOCw3ICszMzA4LDcg
QEAgdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJZk5lZWRlZCgpCiAgICAg
bV9kaWRFbnF1ZXVlRmlyc3RDb250ZW50ZnVsUGFpbnQgPSB0cnVlOwogfQogCi1FeGNlcHRpb25P
cjx2b2lkPiBEb2N1bWVudDo6d3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9jdW1lbnQsIFNlZ21lbnRl
ZFN0cmluZyYmIHRleHQpCitFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6d3JpdGUoRG9jdW1l
bnQqIGVudHJ5RG9jdW1lbnQsIFBBTDo6U2VnbWVudGVkU3RyaW5nJiYgdGV4dCkKIHsKICAgICBp
ZiAobV9hY3RpdmVQYXJzZXJXYXNBYm9ydGVkKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMzM0
MSw3ICszMzQxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRG9jdW1lbnQ6OndyaXRlKERvY3VtZW50
KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8U3RyaW5nPiYmIHN0cmkKICAgICBpZiAoIWlzSFRNTERv
Y3VtZW50KCkgfHwgbV90aHJvd09uRHluYW1pY01hcmt1cEluc2VydGlvbkNvdW50KQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIFNlZ21lbnRl
ZFN0cmluZyB0ZXh0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIHRleHQ7CiAgICAgZm9yIChh
dXRvJiBzdHJpbmcgOiBzdHJpbmdzKQogICAgICAgICB0ZXh0LmFwcGVuZChXVEZNb3ZlKHN0cmlu
ZykpOwogCkBAIC0zMzUzLDcgKzMzNTMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6
d3JpdGVsbihEb2N1bWVudCogZW50cnlEb2N1bWVudCwgVmVjdG9yPFN0cmluZz4mJiBzdAogICAg
IGlmICghaXNIVE1MRG9jdW1lbnQoKSB8fCBtX3Rocm93T25EeW5hbWljTWFya3VwSW5zZXJ0aW9u
Q291bnQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
Ci0gICAgU2VnbWVudGVkU3RyaW5nIHRleHQ7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgdGV4
dDsKICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHN0cmluZ3MpCiAgICAgICAgIHRleHQuYXBwZW5k
KFdURk1vdmUoc3RyaW5nKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDI2N2NjNjM4MDI2
ZDNkNjQ5YzhmNGNkZTc0YzA1ODI2YzA2MjJiMi4uMmU4YTY3MjZiYjczNGI1ZWZhOTkyZjE1ODkx
M2IxYzUzODdjMDNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTQ5LDEzICs0OSwxMyBAQAog
I2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlN0cmluZ1dpdGhE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSAiVXNlckFjdGlvbkVsZW1lbnRT
ZXQuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlZpc2liaWxp
dHlTdGF0ZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBUZXh0U3RyZWFt
OwogfQogCiBuYW1lc3BhY2UgUEFMIHsKK2NsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNzIFNl
c3Npb25JRDsKIH0KIApAQCAtMjA4LDcgKzIwOSw2IEBAIGNsYXNzIFNjcmlwdFJ1bm5lcjsKIGNs
YXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjsKIGNsYXNzIFNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlcjsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2VnbWVudGVkU3RyaW5nOwog
Y2xhc3MgU2VsZWN0b3JRdWVyeTsKIGNsYXNzIFNlbGVjdG9yUXVlcnlDYWNoZTsKIGNsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKQEAgLTY5MSw3ICs2OTEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNhbmNlbFBhcnNpbmcoKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHdyaXRlKERvY3Vt
ZW50KiBlbnRyeURvY3VtZW50LCBTZWdtZW50ZWRTdHJpbmcmJik7CisgICAgRXhjZXB0aW9uT3I8
dm9pZD4gd3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9jdW1lbnQsIFBBTDo6U2VnbWVudGVkU3RyaW5n
JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHdyaXRlKERvY3VtZW50
KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8U3RyaW5nPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25Pcjx2b2lkPiB3cml0ZWxuKERvY3VtZW50KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8
U3RyaW5nPiYmKTsKIApAQCAtOTU5LDcgKzk1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBVc2VkIGJ5
IERPTSBiaW5kaW5nczsgbm8gZGlyZWN0aW9uIGtub3duLgogICAgIGNvbnN0IFN0cmluZyYgdGl0
bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlLnN0cmluZzsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7Ci0gICAgY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYgdGl0bGVXaXRoRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAg
IGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGVXaXRoRGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV90aXRsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbVN0
cmluZyYgZGlyKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaXIoY29uc3Qg
QXRvbVN0cmluZyYpOwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAgcHJpdmF0ZToKICAgICBTZWNvbmRz
IGRvbVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoYm9vbCBoYXNSZWFjaGVkTWF4TmVzdGluZ0xldmVs
KSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgdXBkYXRlVGl0bGVGcm9tVGl0bGVFbGVtZW50KCk7
Ci0gICAgdm9pZCB1cGRhdGVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7CisgICAg
dm9pZCB1cGRhdGVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICB2
b2lkIHVwZGF0ZUJhc2VVUkwoKTsKIAogICAgIFdlYWtQdHI8SFRNTE1ldGFFbGVtZW50PiBkZXRl
cm1pbmVBY3RpdmVUaGVtZUNvbG9yTWV0YUVsZW1lbnQoKTsKQEAgLTE4NTQsOCArMTg1NCw4IEBA
IHByaXZhdGU6CiAgICAgQ29sb3IgbV9hY3RpdmVMaW5rQ29sb3I7CiAgICAgY29uc3Qgc3RkOjp1
bmlxdWVfcHRyPFZpc2l0ZWRMaW5rU3RhdGU+IG1fdmlzaXRlZExpbmtTdGF0ZTsKIAotICAgIFN0
cmluZ1dpdGhEaXJlY3Rpb24gbV90aXRsZTsKLSAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIG1fcmF3
VGl0bGU7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIG1fdGl0bGU7CisgICAgUEFMOjpT
dHJpbmdXaXRoRGlyZWN0aW9uIG1fcmF3VGl0bGU7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGl0
bGVFbGVtZW50OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFYT2JqZWN0Q2FjaGU+IG1fYXhPYmpl
Y3RDYWNoZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKaW5kZXggMjJiNDU2M2E3M2M1
ZTlkOTc3NjJjZGQxOTdmZjQ5NjQ2MTdjNTEzNS4uNDI5NWJiZDM1MWY3ZGYyNjQ0MTFkZjM0NTk4
MTAxMzZjY2I2OTliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKQEAgLTI4LDEw
ICsyOCwxMyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KIAorbmFtZXNwYWNlIFBBTCB7CitjbGFzcyBTZWdtZW50ZWRTdHJpbmc7Cit9CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnRXcml0ZXI7Ci1jbGFzcyBTZWdt
ZW50ZWRTdHJpbmc7CiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI7CiAKIGNsYXNzIERv
Y3VtZW50UGFyc2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRQYXJzZXI+IHsKQEAgLTQ0
LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgp
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIGluc2VydCBpcyB1c2VkIGJ5IGRvY3VtZW50Lndy
aXRlLgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0KFBBTDo6U2VnbWVudGVkU3RyaW5nJiYpID0gMDsKIAogICAg
IC8vIGFwcGVuZEJ5dGVzIGFuZCBmbHVzaCBhcmUgdXNlZCBieSBEb2N1bWVudFdyaXRlciAodGhl
IGxvYWRlcikuCiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEJ5dGVzKERvY3VtZW50V3JpdGVyJiwg
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCA5ODQyMWY0MzAwMzNiNzkyYzdlMjczNWU2MDUwMTUxNzIyYzBlMjYzLi42MDI1
NmI1OGNmODhjOThmMmRlZGQ3ZTU5YjliZGU4N2M3NDE0NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC04ODAsMTcgKzg4MCwxNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEJlaW5nRHJhZ2dlZChi
b29sIGZsYWcpCiAgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRCZWluZ0Ry
YWdnZWQoKnRoaXMsIGZsYWcpOwogfQogCi1pbmxpbmUgU2Nyb2xsQWxpZ25tZW50IHRvU2Nyb2xs
QWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9uKHN0ZDo6b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBv
c2l0aW9uPiBwb3NpdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGJvb2wgaXNMVFIpCitp
bmxpbmUgU2Nyb2xsQWxpZ25tZW50IHRvU2Nyb2xsQWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9u
KHN0ZDo6b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBvc2l0aW9uPiBwb3NpdGlvbiwgUEFMOjpXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgYm9vbCBpc0xUUikKIHsKICAgICBzd2l0Y2ggKHBvc2l0aW9u
LnZhbHVlX29yKFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6TmVhcmVzdCkpIHsKICAgICBjYXNlIFNj
cm9sbExvZ2ljYWxQb3NpdGlvbjo6U3RhcnQ6IHsKICAgICAgICAgc3dpdGNoICh3cml0aW5nTW9k
ZSkgewotICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKLSAgICAgICAgY2Fz
ZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6IHsKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcDogewogICAgICAgICAgICAgcmV0dXJuIGlzTFRSID8gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkxlZnRBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduUmlnaHRBbHdheXM7CiAgICAgICAg
IH0KLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2Ug
V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiB7CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQ6IHsKICAgICAgICAgICAgIHJldHVybiBpc0xUUiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b3BBbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQm90dG9tQWx3YXlzOwogICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC05MDIsMTIgKzkwMiwxMiBAQCBpbmxpbmUgU2Nyb2xsQWxp
Z25tZW50IHRvU2Nyb2xsQWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9uKHN0ZDo6b3B0aW9uYWw8
U2Nyb2xsTAogICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5
czsKICAgICBjYXNlIFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6RW5kOiB7CiAgICAgICAgIHN3aXRj
aCAod3JpdGluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206
Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiB7CisgICAgICAgIGNhc2Ug
UEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5n
TW9kZTo6Qm90dG9tVG9Ub3A6IHsKICAgICAgICAgICAgIHJldHVybiBpc0xUUiA/IFNjcm9sbEFs
aWdubWVudDo6YWxpZ25SaWdodEFsd2F5cyA6IFNjcm9sbEFsaWdubWVudDo6YWxpZ25MZWZ0QWx3
YXlzOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0Ogot
ICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDogeworICAgICAgICBjYXNlIFBB
TDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OlJpZ2h0VG9MZWZ0OiB7CiAgICAgICAgICAgICByZXR1cm4gaXNMVFIgPyBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQm90dG9tQWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFsd2F5
czsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtOTIzLDE4ICs5MjMsMTggQEAgaW5s
aW5lIFNjcm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdubWVudEZvcklubGluZURpcmVjdGlvbihz
dGQ6Om9wdGlvbmFsPFNjcm9sbEwKICAgICB9CiB9CiAKLWlubGluZSBTY3JvbGxBbGlnbm1lbnQg
dG9TY3JvbGxBbGlnbm1lbnRGb3JCbG9ja0RpcmVjdGlvbihzdGQ6Om9wdGlvbmFsPFNjcm9sbExv
Z2ljYWxQb3NpdGlvbj4gcG9zaXRpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoraW5saW5l
IFNjcm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdubWVudEZvckJsb2NrRGlyZWN0aW9uKHN0ZDo6
b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBvc2l0aW9uPiBwb3NpdGlvbiwgUEFMOjpXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKIHsKICAgICBzd2l0Y2ggKHBvc2l0aW9uLnZhbHVlX29yKFNjcm9sbExv
Z2ljYWxQb3NpdGlvbjo6U3RhcnQpKSB7CiAgICAgY2FzZSBTY3JvbGxMb2dpY2FsUG9zaXRpb246
OlN0YXJ0OiB7CiAgICAgICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBX
cml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
VG9wVG9Cb3R0b206CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
cEFsd2F5czsKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgICAg
IGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAgICAgICAgICAgICByZXR1cm4g
U2Nyb2xsQWxpZ25tZW50OjphbGlnbkJvdHRvbUFsd2F5czsKLSAgICAgICAgY2FzZSBXcml0aW5n
TW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRv
UmlnaHQ6CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkxlZnRBbHdh
eXM7Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgICAgICBjYXNl
IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICAgICAgcmV0dXJuIFNjcm9s
bEFsaWdubWVudDo6YWxpZ25SaWdodEFsd2F5czsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTQ1LDEzICs5NDUsMTMgQEAgaW5saW5lIFNj
cm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdubWVudEZvckJsb2NrRGlyZWN0aW9uKHN0ZDo6b3B0
aW9uYWw8U2Nyb2xsTG8KICAgICAgICAgcmV0dXJuIFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50
ZXJBbHdheXM7CiAgICAgY2FzZSBTY3JvbGxMb2dpY2FsUG9zaXRpb246OkVuZDogewogICAgICAg
ICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgogICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Cb3R0b21BbHdheXM7Ci0gICAg
ICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgICAgICBjYXNlIFBBTDo6V3Jp
dGluZ01vZGU6OkJvdHRvbVRvVG9wOgogICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub3BBbHdheXM7Ci0gICAgICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0
OgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICAg
ICAgcmV0dXJuIFNjcm9sbEFsaWdubWVudDo6YWxpZ25SaWdodEFsd2F5czsKLSAgICAgICAgY2Fz
ZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6UmlnaHRUb0xlZnQ6CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkxlZnRBbHdheXM7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDlhNTEyZWZlN2M5YzAxZWY4MjAx
MmNiNDNmOWI2MTE1NTg5NjdhMmEuLjk2YWQ2YzI5YzkwNGI1MDc1OTY4NjYyOTA1Y2M1MWVkODlj
MzFiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTIwMSw3ICsxMjAxLDcgQEAgc3Rh
dGljIFBvc2l0aW9uIHVwc3RyZWFtSWdub3JpbmdFZGl0aW5nQm91bmRhcmllcyhQb3NpdGlvbiBw
b3NpdGlvbikKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKLUlubGluZVJ1bkFuZE9mZnNldCBQ
b3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0
aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CitJbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246
OmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0eSBhZmZpbml0eSwgUEFMOjpUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgYXV0byBjYXJldE9mZnNldCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKIApAQCAtMTM3Nywx
MyArMTM3NywxMyBAQCBJbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbgogICAgIHJldHVybiB7IHJ1biwg
Y2FyZXRPZmZzZXQgfTsKIH0KIAotVGV4dERpcmVjdGlvbiBQb3NpdGlvbjo6cHJpbWFyeURpcmVj
dGlvbigpIGNvbnN0CitQQUw6OlRleHREaXJlY3Rpb24gUG9zaXRpb246OnByaW1hcnlEaXJlY3Rp
b24oKSBjb25zdAogewogICAgIGlmICghbV9hbmNob3JOb2RlIHx8ICFtX2FuY2hvck5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJl
dHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICBpZiAoYXV0byogYmxvY2tGbG93ID0g
bGluZWFnZU9mVHlwZTxSZW5kZXJCbG9ja0Zsb3c+KCptX2FuY2hvck5vZGUtPnJlbmRlcmVyKCkp
LmZpcnN0KCkpCiAgICAgICAgIHJldHVybiBibG9ja0Zsb3ctPnN0eWxlKCkuZGlyZWN0aW9uKCk7
Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICByZXR1cm4gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7CiB9CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCmluZGV4IDljOTk0YzA5NzhjNmE0ODdkN2UyMmJhMGJkNmUwYTQ4OGM1NGJjMWUuLmRk
Y2JjNzEzZTFjNjA4YTJlNzA4YzU1YzQxMjYwYzc4NjE3NTAxNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5oCkBAIC0xNzEsOSArMTcxLDkgQEAgcHVibGljOgogICAgIGJvb2wgcmVuZGVyc0luRGlmZmVy
ZW50UG9zaXRpb24oY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAogICAgIElubGluZVJ1bkFuZE9m
ZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkpIGNvbnN0OwotICAgIElubGluZVJ1bkFu
ZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFy
eURpcmVjdGlvbikgY29uc3Q7CisgICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSwgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0
OwogCi0gICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKCkgY29uc3Q7CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBwb3NpdGlvbnMgdGhhdCBleGlzdCBiZXR3ZWVuIHR3byBwb3NpdGlv
bnMuCiAgICAgc3RhdGljIHVuc2lnbmVkIHBvc2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25zKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYXdE
YXRhRG9jdW1lbnRQYXJzZXIuaAppbmRleCBkZTM4OTkyMWFjNmRjMGUwMGNlNDY5OWI0NzY4YmJh
OGNlYWQ3YmQ5Li41MGE3MGU4NDc3OTJkMDg1OTgyMGU4YzBmNzdkMTk2NDdiMzg2MGQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmF3RGF0YURvY3VtZW50UGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Jhd0RhdGFEb2N1bWVudFBhcnNlci5oCkBAIC00OSw3ICs0OSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGFwcGVuZEJ5dGVzKHdyaXRlciwgbnVsbHB0ciwgMCk7CiAg
ICAgfQogCi0gICAgdm9pZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpIG92ZXJyaWRlCisgICAg
dm9pZCBpbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJikgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzOTc+OiBK
UyBjb2RlIGNhbiBhbHdheXMgY2FsbCBkb2N1bWVudC53cml0ZSwgd2UgbmVlZCB0byBoYW5kbGUg
aXQuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNDYyOGUxZmJl
OWM4OTc3NjNjZGJkMmU0NThmMTM4MWRiMzg1Mjg1NC4uZDYxZmZkNTlmM2RmOWJkZjRiZDY2M2E5
ZThjNWIwNDE2Yzg2ZTljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0
YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9O
b3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLCBhZGphY2VudFdvcmRSYW5nZSwg
c3RkOjpudWxsb3B0KTsKKyAgICAgICAgbV9kb2N1bWVudC5lZGl0b3IoKS5tYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZywgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLCBhZGphY2Vu
dFdvcmRSYW5nZSwgc3RkOjpudWxsb3B0KTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpAQCAtNTAzLDExICs1MDMsMTEgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZv
ckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBhZGRNYXJrZXIoKnByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFs
U3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVw
bGFjZWRCeVJlc3VsdChjb25zdCBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5n
VG9CZVJlcGxhY2VkKQogewogICAgIGF1dG8mIG1hcmtlcnMgPSBtX2RvY3VtZW50Lm1hcmtlcnMo
KTsKICAgICBpZiAobWFya2Vycy5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKQorICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0g
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKQogICAgICAgICAgICAgcmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRp
dmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uID0g
bWFrZUJvdW5kYXJ5UG9pbnQobV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpKTsKICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhFbmRDb250YWluaW5nQ29ycmVjdGlvbikK
ICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uLCAq
dXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uIH0sIENoYXJhY3RlclJhbmdl
KGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKKyAg
ICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyB1cGRhdGVk
UGFyYWdyYXBoU3RhcnRDb250YWluaW5nQ29ycmVjdGlvbiwgKnVwZGF0ZWRQYXJhZ3JhcGhFbmRD
b250YWluaW5nQ29ycmVjdGlvbiB9LCBQQUw6OkNoYXJhY3RlclJhbmdlKGNvcnJlY3Rpb25PZmZz
ZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpKTsKIAogICAgIC8vIENoZWNrIHRv
IHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCiAgICAgaWYgKHBsYWluVGV4dChyZXBsYWNl
bWVudFJhbmdlKSAhPSBhbHRlcm5hdGl2ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggNzVhZDc5MDljMDA2YTFkNDMyMTBl
YmUwNzUwNDk3NWUzMTdhYjE1ZC4uYzlkMWMwN2VmMzE1MGNmM2Q1Nzg4NjM0ZDNkZGIyNDE3ZDAx
ODY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorbmFtZXNwYWNlIFBBTCB7CitzdHJ1Y3QgVGV4dENo
ZWNraW5nUmVzdWx0OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbXBvc2l0
ZUVkaXRDb21tYW5kOwpAQCAtNDUsNyArNDksNiBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwog
CiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmU7CiBzdHJ1Y3QgU2ltcGxlUmFuZ2U7Ci1zdHJ1
Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQog
Ly8gVGhlc2UgYmFja3NsYXNoZXMgYXJlIGZvciBtYWtpbmcgc3R5bGUgY2hlY2tlciBoYXBweS4K
QEAgLTk0LDcgKzk3LDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oY29uc3Qg
U2ltcGxlUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZWRTdHJpbmcpOyB9KQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZh
bHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQgb3V0LgotICAgIGJv
b2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQmLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0
IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyBy
ZXR1cm4gdHJ1ZTsgfSk7CisgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNl
ZEJ5UmVzdWx0KGNvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVzdWx0JiwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURf
UEFSQU0oc3RyaW5nVG9CZVJlcGxhY2VkKTsgcmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYWxTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFs
U3RyaW5nKTsgfSkKIAogICAgIGJvb2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4mLCBFdmVudCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5nZS5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5nZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3YTc0MDQ0MmNmY2Y1N2NkMGY1YmEzMmFhYjBhNjlmZDIyNzg0MWI1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q2hhcmFjdGVyUmFuZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDRikKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2Vu
ZGlmCi0KLSNpZiBVU0UoRk9VTkRBVElPTikKLXR5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFu
Z2U7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQ2hhcmFjdGVyUmFu
Z2UgewotICAgIHVpbnQ2NF90IGxvY2F0aW9uIHsgMCB9OwotICAgIHVpbnQ2NF90IGxlbmd0aCB7
IDAgfTsKLQotICAgIENoYXJhY3RlclJhbmdlKCkgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhwciBD
aGFyYWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKTsKLQotI2lm
IFVTRShDRikKLSAgICBjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2UoQ0ZSYW5nZSk7Ci0gICAgY29u
c3RleHByIG9wZXJhdG9yIENGUmFuZ2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKEZPVU5E
QVRJT04pCi0gICAgY29uc3RleHByIENoYXJhY3RlclJhbmdlKE5TUmFuZ2UpOwotICAgIGNvbnN0
ZXhwciBvcGVyYXRvciBOU1JhbmdlKCkgY29uc3Q7Ci0jZW5kaWYKLX07Ci0KLWNvbnN0ZXhwciBD
aGFyYWN0ZXJSYW5nZTo6Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90
IGxlbmd0aCkKLSAgICA6IGxvY2F0aW9uKGxvY2F0aW9uKQotICAgICwgbGVuZ3RoKGxlbmd0aCkK
LXsKLX0KLQotI2lmIFVTRShDRikKLQotY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0
ZXJSYW5nZShDRlJhbmdlIHJhbmdlKQotICAgIDogQ2hhcmFjdGVyUmFuZ2UocmFuZ2UubG9jYXRp
b24sIHJhbmdlLmxlbmd0aCkKLXsKLSAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0ga0NGTm90
Rm91bmQpOwotfQotCi1jb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2U6Om9wZXJhdG9yIENGUmFuZ2Uo
KSBjb25zdAotewotICAgIENGSW5kZXggbG9jYXRpb25DRiA9IGxvY2F0aW9uOwotICAgIENGSW5k
ZXggbGVuZ3RoQ0YgPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHsgbG9jYXRpb25DRiwgbGVuZ3RoQ0Yg
fTsKLX0KLQotI2VuZGlmCi0KLSNpZiBVU0UoRk9VTkRBVElPTikgJiYgZGVmaW5lZChfX09CSkNf
XykKLQotY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0ZXJSYW5nZShOU1JhbmdlIHJh
bmdlKQotICAgIDogQ2hhcmFjdGVyUmFuZ2UgeyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3Ro
IH0KLXsKLSAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCk7Ci19Ci0KLWNv
bnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6b3BlcmF0b3IgTlNSYW5nZSgpIGNvbnN0Ci17Ci0gICAg
TlNVSW50ZWdlciBsb2NhdGlvbk5TID0gbG9jYXRpb247Ci0gICAgTlNVSW50ZWdlciBsZW5ndGhO
UyA9IGxlbmd0aDsKLSAgICByZXR1cm4geyBsb2NhdGlvbk5TLCBsZW5ndGhOUyB9OwotfQotCi0j
ZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZS5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0YXRpb25BbHRlcm5hdGl2ZS5oCmluZGV4IDYyY2NhMTJlMDVjYzJjNWI5ZjRhMzJmYmZk
M2NhMDRiYjc5YzI1NWYuLmU0YjU0YjMwMjFmNWVmMmQ3YmQ3NTliYWVlYTVjZDEwOWVmY2U5YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFsdGVybmF0aXZlLmgKQEAg
LTI1LDEzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNoYXJhY3RlclJh
bmdlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUmFuZ2UuaD4KICNpbmNsdWRlICJE
aWN0YXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IERpY3Rh
dGlvbkFsdGVybmF0aXZlIHsKLSAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBQQUw6OkNo
YXJhY3RlclJhbmdlIHJhbmdlOwogICAgIERpY3RhdGlvbkNvbnRleHQgY29udGV4dDsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IDk4MGRkZTg1MWYxMDcyM2Q3OGY2NjE5
ODQyNzMyNDhmN2EwZmE1YzQuLjQwOTkzYjM2OGMzNjg0ODhjNzk2NDQyNWVlMjNkNDJlNjlhMGQ0
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMzI1LDE0ICszMjUsMTQgQEAg
RWxlbWVudCogZW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlIHJ1bGUpCiAgICAgcmV0dXJuIGlzPEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpID8gZG93
bmNhc3Q8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgOiBudWxscHRyOwogfQogCi1UZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQor
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQogewogICAgIGF1dG8gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwb3NpdGlv
bi5jb250YWluZXJOb2RlKCkpOwogICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBUZXh0
RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsK
ICAgICBhdXRvIHJlbmRlcmVyID0gYmxvY2stPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJl
cikKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5kaXJl
Y3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCA5NmNlYzk3Y2Y3ZTNi
MTZjZTBmMWMwNWJlNzRkNzIwOGNjYzRkYWI5Li5jYWM2MWI1YjVjNDY0ZGFkOTAwNjJjOGM3MDBj
NThiYmYzNDM3ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtMTMzLDcgKzEzMyw3
IEBAIGJvb2wgaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mKTsKIHVuc2ln
bmVkIG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3Rlcyhjb25zdCBQb3NpdGlvbiYpOwogdm9pZCB1
cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKFBvc2l0aW9uJiwgTm9kZSYpOwogCi1XRUJDT1JF
X0VYUE9SVCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9z
aXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKGNvbnN0IFBvc2l0aW9uJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IFZpc2libGVQb3NpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDE3MjRjZjBl
NTBiYWE1YjliMjQxMzA0ODFlZTcyNGNiNzgyMDdhYTQuLmExNzU4ZDdkODM5OWU2ZDQ2OWQ4NmVh
NzQzNzFiNzRmZmY1NTI1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcyOCw3
ICs3MjgsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0UmVwbAogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIHJhbmdlVG9DaGVjayA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9k
ZVRvQ2hlY2spOwotICAgIGlmIChhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3Jl
YXRlKHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzaygqbm9kZVRvQ2hlY2ssIHsgVGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgfSksIFRleHRDaGVj
a2luZ1Byb2Nlc3NCYXRjaCwgcmFuZ2VUb0NoZWNrLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVj
aykpCisgICAgaWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nLCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgfSksIFBBTDo6
VGV4dENoZWNraW5nUHJvY2Vzc0JhdGNoLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaywgcmFu
Z2VUb0NoZWNrKSkKICAgICAgICAgbV9zcGVsbENoZWNrZXItPnJlcXVlc3RDaGVja2luZ0Zvcihy
ZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCkBAIC0xOTI5LDkgKzE5MjksOSBAQCBXcml0
aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFy
dCgpIGNvbnN0CiAgICAgfQogCiAgICAgc3dpdGNoIChyZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rp
b24oKSkgewotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6TFRSOgorICAgIGNhc2UgUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFI6CiAgICAgICAgIHJldHVybiBXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9S
aWdodDsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OlJUTDoKKyAgICBjYXNlIFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMOgogICAgICAgICByZXR1cm4gV3JpdGluZ0RpcmVjdGlvbjo6UmlnaHRUb0xl
ZnQ7CiAgICAgfQogICAgIApAQCAtMjQxOCw3ICsyNDE4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKSBjb25zdAog
ICAgIHJldHVybiBndWVzc2VzOwogfQogCi1UZXh0Q2hlY2tpbmdHdWVzc2VzIEVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoKQorUEFMOjpUZXh0Q2hlY2tpbmdHdWVz
c2VzIEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoKQogewogICAg
IGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgc3RkOjpvcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2U7CkBAIC0yNDg4LDggKzI0ODgsOCBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
d29yZFN0YXJ0LAogICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsKICAgICBPcHRpb25T
ZXQ8VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9uczsKICAgICBpZiAoaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9u
cy5hZGQoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpOwotICAgIGlmICghdGV4dENoZWNraW5n
T3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpCisgICAgICAgIHRl
eHRDaGVja2luZ09wdGlvbnMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpOwor
ICAgIGlmICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBhZGphY2VudFdvcmRz
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CkBA
IC0yNTAzLDEwICsyNTAzLDEwIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsCiAgICAgaWYgKHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwog
Ci0gICAgICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25z
OworICAgICAgICBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdP
cHRpb25zOwogCiAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcpOworICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CiAKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFD
RU1FTlQpCiAgICAgICAgIGlmIChkb1JlcGxhY2VtZW50CkBAIC0yNTE0LDE0ICsyNTE0LDE0IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsCiAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZCgpCiAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNEYXNo
U3Vic3RpdHV0aW9uRW5hYmxlZCgpCiAgICAgICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAgICAgICAgICAgICAgICB8fCAodGV4dENoZWNraW5nT3B0
aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpKSkKLSAgICAgICAgICAgIHRleHRDaGVja2luZ09w
dGlvbnMuYWRkKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAg
ICB8fCAodGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkpKQor
ICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBl
OjpSZXBsYWNlbWVudCk7CiAjZW5kaWYKLSAgICAgICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25z
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSAmJiAhdGV4dENoZWNraW5nT3B0
aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpCisgICAgICAgIGlm
ICghdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNw
ZWxsaW5nKSAmJiAhdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlJlcGxhY2VtZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICAgICAgICAgIHRleHRDaGVj
a2luZ09wdGlvbnMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAKICAgICAg
ICAgYXV0byBzZW50ZW5jZVN0YXJ0ID0gc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCk7CiAgICAg
ICAgIGF1dG8gc2VudGVuY2VFbmQgPSBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCk7CkBAIC0yNjkw
LDcgKzI2OTAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2Vs
ZWN0aW9uLCBmYWxzZSk7CiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tp
bmdPcHRpb25zLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5n
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50
UmFuZ2UsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCit2
b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRp
b25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxTaW1wbGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpCiB7CiAgICAgaWYgKHBsYXRmb3Jt
RHJpdmVuVGV4dENoZWNrZXJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3MDAsOCAr
MjcwMCw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0
IGJlIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCiAgICAgQVNTRVJUKCFt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCi0g
ICAgYm9vbCBzaG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7Ci0gICAgYm9vbCBzaG91bGRTaG93Q29ycmVjdGlv
blBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpT
aG93Q29ycmVjdGlvblBhbmVsKTsKKyAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENo
ZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwor
ICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsKTsKIAog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc2VsZWN0aW9ucyBhbHJlYWR5IGV4
cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KICAgICBpZiAoIWNsaWVudCgpIHx8ICFzcGVsbGlu
Z1JhbmdlIHx8IChzaG91bGRNYXJrR3JhbW1hciAmJiAhZ3JhbW1hclJhbmdlKSkKQEAgLTI3Mjcs
NyArMjcyNyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgYXV0byYgcGFyYWdyYXBo
UmFuZ2UgPSBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCk7CiAgICAgYXV0byYgY2hl
Y2tpbmdSYW5nZSA9IGFzeW5jaHJvbm91cyA/IHBhcmFncmFwaFJhbmdlIDogcmFuZ2VUb0NoZWNr
OwogICAgIGF1dG8mIHRleHRSZXBsYWNlbWVudFJhbmdlID0gYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSA/ICphdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlIDogcmFuZ2VUb0NoZWNrOwotICAgIGF1
dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRpb25zLCBU
ZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGNoZWNraW5nUmFuZ2UsIHRleHRSZXBsYWNl
bWVudFJhbmdlLCBwYXJhZ3JhcGhSYW5nZSk7CisgICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVj
a1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vz
c0luY3JlbWVudGFsLCBjaGVja2luZ1JhbmdlLCB0ZXh0UmVwbGFjZW1lbnRSYW5nZSwgcGFyYWdy
YXBoUmFuZ2UpOwogICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzM2
LDI0ICsyNzM2LDI0IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIFZl
Y3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBjaGVja1RleHRPZlBh
cmFncmFwaCgqdGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVk
T3B0aW9ucywgcmVzdWx0cywgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAg
ICAgbWFya0FuZFJlcGxhY2VGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpLCByZXN1bHRzKTsK
IH0KIAotc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVj
a2luZ1R5cGUgdHlwZSkKK3N0YXRpYyBib29sIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50VHlw
ZShQQUw6OlRleHRDaGVja2luZ1R5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIFRleHRDaGVja2luZ1R5cGU6Ok5vbmU6Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBl
OjpTcGVsbGluZzoKLSAgICBjYXNlIFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI6CisgICAgY2Fz
ZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6Ok5vbmU6CisgICAgY2FzZSBQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nOgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFy
OgogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5r
OgotICAgIGNhc2UgVGV4dENoZWNraW5nVHlwZTo6UXVvdGU6Ci0gICAgY2FzZSBUZXh0Q2hlY2tp
bmdUeXBlOjpEYXNoOgotICAgIGNhc2UgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ6Ci0g
ICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uOgotICAgIGNhc2UgVGV4dENoZWNr
aW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbDoKKyAgICBjYXNlIFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6TGluazoKKyAgICBjYXNlIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UXVvdGU6CisgICAg
Y2FzZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkRhc2g6CisgICAgY2FzZSBQQUw6OlRleHRDaGVj
a2luZ1R5cGU6OlJlcGxhY2VtZW50OgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uOgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlv
blBhbmVsOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yNzY1LDcgKzI3NjUsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdlRm9y
U3BlbGxDaGVja2luZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbgogICAg
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFj
ZW1lbnQpLT5hcHBseSgpOwogfQogCi1zdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1By
ZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJh
Z3JhcGgsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UpCitzdGF0aWMg
dm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
VGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgUEFMOjpDaGFyYWN0ZXJSYW5n
ZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKIHsKICAgICBSZWYgc2NvcGVOb2RlID0gZG93bmNhc3Q8
Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBoLnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIo
KS5yb290Tm9kZSgpKTsKICAgICBhdXRvIHBhcmFncmFwaENoYXJhY3RlclJhbmdlID0gY2hhcmFj
dGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwg
cGFyYWdyYXBoLnBhcmFncmFwaFJhbmdlKCkpOwpAQCAtMjc4MSw3ICsyNzgxLDcgQEAgc3RhdGlj
IHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBo
KFRleHRDaGVja2luZ1BhcmEKICAgICBwYXJhZ3JhcGggPSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
c3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENoZWNraW5nUmFuZ2UsIG5ld1BhcmFncmFwaFJhbmdl
KTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0
cykKK3ZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0
cykKIHsKICAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3VtZW50KG1fZG9jdW1lbnQpOwog
CkBAIC0yNzg5LDEyICsyNzg5LDEyIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihj
b25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgVGV4
dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChyZXF1ZXN0LmNoZWNraW5nUmFuZ2UoKSwgcmVx
dWVzdC5hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKCksIHJlcXVlc3QucGFyYWdyYXBoUmFuZ2Uo
KSk7CiAKICAgICAvLyBGSVhNRTogTWFyayB0aGlzIGNvbnN0IG9uY2UgTVNWQyBidWcgaXMgZml4
ZWQ6IDxodHRwczovL2RldmVsb3BlcmNvbW11bml0eS52aXN1YWxzdHVkaW8uY29tL2NvbnRlbnQv
cHJvYmxlbS8zMTY3MTMvbXN2Yy1jYW50LWNvbXBpbGUtd2Via2l0cy1vcHRpb25zZXRjb250YWlu
c2FueS5odG1sPi4KLSAgICBib29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCA9IHRleHRDaGVj
a2luZ09wdGlvbnMuY29udGFpbnNBbnkoeyBUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSwgVGV4dENo
ZWNraW5nVHlwZTo6RGFzaCwgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQgfSk7Ci0gICAg
Ym9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKLSAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0g
dGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsK
LSAgICBib29sIHNob3VsZE1hcmtMaW5rID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhU
ZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKTsKLSAgICBib29sIHNob3VsZFNob3dDb3JyZWN0aW9uUGFu
ZWwgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNob3dD
b3JyZWN0aW9uUGFuZWwpOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9uID0gc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCB8fCB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOworICAgIGJvb2wgc2hvdWxkUGVyZm9ybVJlcGxh
Y2VtZW50ID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWluc0FueSh7IFBBTDo6VGV4dENoZWNr
aW5nVHlwZTo6UXVvdGUsIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6RGFzaCwgUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpSZXBsYWNlbWVudCB9KTsKKyAgICBib29sIHNob3VsZE1hcmtTcGVsbGluZyA9
IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZyk7CisgICAgYm9vbCBzaG91bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICBib29sIHNob3Vs
ZE1hcmtMaW5rID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OkxpbmspOworICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRD
aGVja2luZ09wdGlvbnMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVj
dGlvblBhbmVsKTsKKyAgICBib29sIHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiA9IHNob3VsZFNo
b3dDb3JyZWN0aW9uUGFuZWwgfHwgdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOwogI2lmICFVU0UoQVVUT0NPUlJFQ1RJT05fUEFO
RUwpCiAgICAgQVNTRVJUKCFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKTsKICNlbmRpZgpAQCAt
MjgyMCw3ICsyODIwLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNw
ZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGF1dG8gc3Bl
bGxpbmdSYW5nZUVuZE9mZnNldCA9IHBhcmFncmFwaC5jaGVja2luZ0VuZCgpICsgb2Zmc2V0RHVl
VG9SZXBsYWNlbWVudDsKLSAgICAgICAgVGV4dENoZWNraW5nVHlwZSByZXN1bHRUeXBlID0gcmVz
dWx0c1tpXS50eXBlOworICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGUgcmVzdWx0VHlwZSA9
IHJlc3VsdHNbaV0udHlwZTsKICAgICAgICAgYXV0byByZXN1bHRMb2NhdGlvbiA9IHJlc3VsdHNb
aV0ucmFuZ2UubG9jYXRpb24gKyBvZmZzZXREdWVUb1JlcGxhY2VtZW50OwogICAgICAgICBhdXRv
IHJlc3VsdExlbmd0aCA9IHJlc3VsdHNbaV0ucmFuZ2UubGVuZ3RoOwogICAgICAgICBhdXRvIHJl
c3VsdEVuZExvY2F0aW9uID0gcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGg7CkBAIC0yODM0
LDE0ICsyODM0LDE0IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVs
bENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgIC8vIDIuIFJl
c3VsdCBmYWxscyB3aXRoaW4gc3BlbGxpbmdSYW5nZS4KICAgICAgICAgLy8gMy4gVGhlIHdvcmQg
aW4gcXVlc3Rpb24gZG9lc24ndCBlbmQgYXQgYW4gYW1iaWd1b3VzIGJvdW5kYXJ5LiBGb3IgaW5z
dGFuY2UsIHdlIHdvdWxkIG5vdCBtYXJrCiAgICAgICAgIC8vICAgICJ3b3VsZG4nIiBhcyBtaXNz
cGVsbGVkIHJpZ2h0IGFmdGVyIGFwb3N0cm9waGUgaXMgdHlwZWQuCi0gICAgICAgIGlmIChzaG91
bGRNYXJrU3BlbGxpbmcgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0VHlw
ZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZworICAgICAgICBpZiAoc2hvdWxkTWFya1Nw
ZWxsaW5nICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3VsdFR5cGUgPT0gUEFM
OjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZwogICAgICAgICAgICAgJiYgcmVzdWx0TG9jYXRp
b24gPj0gcGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSAmJiByZXN1bHRFbmRMb2NhdGlvbiA8PSBz
cGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeSkg
ewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDApOwogICAgICAgICAgICAgYXV0
byBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHsgcmVzdWx0TG9jYXRpb24s
IHJlc3VsdExlbmd0aCB9KTsKICAgICAgICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKLSAgICAgICAgfSBl
bHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMoeyByZXN1bHRMb2Nh
dGlvbiwgcmVzdWx0TGVuZ3RoIH0pKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dy
YW1tYXIgJiYgcmVzdWx0VHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgJiYg
cGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMoeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVu
Z3RoIH0pKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCk7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGRldGFpbCA6IHJlc3VsdHNbaV0uZGV0YWlscykgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChkZXRhaWwucmFuZ2UubGVuZ3RoID4gMCk7CkBAIC0yODU2LDcgKzI4NTYs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExl
bmd0aCA+IDApOwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCAm
JiAocmVzdWx0RW5kTG9jYXRpb24gPCBhdXRvbWF0aWNSZXBsYWNlbWVudEVuZExvY2F0aW9uCi0g
ICAgICAgICAgICAgICAgfHwgKHJlc3VsdFR5cGUgIT0gVGV4dENoZWNraW5nVHlwZTo6UmVwbGFj
ZW1lbnQgJiYgcmVzdWx0VHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkpCisg
ICAgICAgICAgICAgICAgfHwgKHJlc3VsdFR5cGUgIT0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpS
ZXBsYWNlbWVudCAmJiByZXN1bHRUeXBlICE9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAvLyBBcHBs
eSByZXBsYWNlbWVudCBpZjoKQEAgLTI4NjcsNyArMjg2Nyw3IEBAIHZvaWQgRWRpdG9yOjptYXJr
QW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVj
dG9yPFRlCiAgICAgICAgICAgICBhdXRvIHJhbmdlVG9SZXBsYWNlID0gcGFyYWdyYXBoLnN1YnJh
bmdlKHsgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCB9KTsKIAogICAgICAgICAgICAgLy8g
QWRkaW5nIGxpbmtzIHNob3VsZCBiZSBkb25lIG9ubHkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhleSBh
cmUgdHlwZWQuCi0gICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
OjpMaW5rICYmIHNlbGVjdGlvbk9mZnNldCAhPSByZXN1bHRFbmRMb2NhdGlvbiArIDEpCisgICAg
ICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmsgJiYg
c2VsZWN0aW9uT2Zmc2V0ICE9IHJlc3VsdEVuZExvY2F0aW9uICsgMSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50
IHx8IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiB8fCBzaG91bGRNYXJrTGluaykgfHwgIWRvUmVw
bGFjZW1lbnQpCkBAIC0yODk0LDcgKzI4OTQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxh
Y2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6TGluaykgeworICAgICAgICAg
ICAgaWYgKHJlc3VsdFR5cGUgPT0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSB7CiAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9u
VG9SZXBsYWNlKTsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKQEAgLTI5
MTcsNyArMjkxNyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVs
bENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdExvY2F0aW9uIDwgc2VsZWN0aW9uT2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25PZmZzZXQgKz0gcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1bHRMZW5ndGg7
CiAKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVw
bGFjZW1lbnRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZSh7IHJlc3VsdExvY2F0aW9uLCByZXBs
YWNlbWVudC5sZW5ndGgoKSB9KTsKICAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2U6OkFjY2VwdGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZSk7CiAK
QEAgLTI5NTgsNyArMjk1OCw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0
cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJl
c3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsICpzZWxlY3Rpb24pOwogICAgIFRleHRD
aGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0
UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7Ci0gICAgYXV0byBjaGFuZ2VkUmFuZ2Ug
PSBwYXJhZ3JhcGguc3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3Rh
cnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpKTsKKyAgICBhdXRvIGNoYW5nZWRSYW5nZSA9
IHBhcmFncmFwaC5zdWJyYW5nZShQQUw6OkNoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgYWRkTWFya2VyKGNoYW5n
ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CiAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlKTsKICNl
bHNlCkBAIC0yOTc4LDkgKzI5NzgsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlYwogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KCkgaXMgdHJpZ2dlcmVkIGJ5IHNlbGVjdGlvbiBjaGFuZ2UsIGluIHdoaWNoIGNhc2Ugd2UgY2hl
Y2sgc3BlbGxpbmcgYW5kIGdyYW1tYXIsIGJ1dCBkb24ndCBhdXRvY29ycmVjdCBtaXNzcGVsbGlu
Z3MuCi0gICAgICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRp
b25zIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgfTsKKyAgICAgICAgT3B0aW9uU2V0PFBB
TDo6VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucyB7IFBBTDo6VGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcgfTsKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CisgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNw
ZWxsQ2hlY2tpbmdSYW5nZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CiAgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENo
ZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLCBzcGVsbENoZWNraW5nUmFuZ2UsIGdy
YW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgICAgIHJldHVybjsKQEAg
LTMwMDEsNyArMzAwMSw3IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgaWYgKCFkb2N1
bWVudCgpLm1hcmtlcnMoKS5oYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVk
aXRpbmcoKSAmJiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VN
YXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKSkK
KyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c2hvdWxkUmVtb3ZlTWFya2Vy
c1Vwb25FZGl0aW5nKCkgJiYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3Vs
ZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6
U3BlbGxpbmcpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUg
dGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdl
IHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mCkBAIC0zNjkyLDcgKzM2OTIsNyBA
QCBzdGF0aWMgVmVjdG9yPFNpbXBsZVJhbmdlPiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyB7
IHRleHQgfS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICB3aGlsZSAoc2Nhbm5lclBvc2l0
aW9uIDwgbGVuZ3RoICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjpmaW5kKCZjaGFyYWN0ZXJz
W3NjYW5uZXJQb3NpdGlvbl0sIGxlbmd0aCAtIHNjYW5uZXJQb3NpdGlvbiwgJnJlbGF0aXZlU3Rh
cnRQb3NpdGlvbiwgJnJlbGF0aXZlRW5kUG9zaXRpb24pKSB7CiAgICAgICAgIEFTU0VSVChzY2Fu
bmVyUG9zaXRpb24gKyByZWxhdGl2ZUVuZFBvc2l0aW9uIDw9IGxlbmd0aCk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQocmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCBDaGFyYWN0ZXJSYW5nZShz
Y2FubmVyUG9zaXRpb24gKyByZWxhdGl2ZVN0YXJ0UG9zaXRpb24sIHJlbGF0aXZlRW5kUG9zaXRp
b24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24pKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVz
b2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCBQQUw6OkNoYXJhY3RlclJhbmdlKHNjYW5uZXJQb3Np
dGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiwgcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0
aXZlU3RhcnRQb3NpdGlvbikpKTsKICAgICAgICAgc2Nhbm5lclBvc2l0aW9uICs9IHJlbGF0aXZl
RW5kUG9zaXRpb247CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODAzLDExICszODAz
LDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVj
a2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nKSkgeworICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENo
ZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpIHsKICAgICAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5n
ZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAg
ICByZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNo
b3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6Okdy
YW1tYXIpKSB7CisgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5z
aG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBzZW50ZW5jZVJhbmdlID0gbmV3
U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIHJl
bW92ZU1hcmtlcnMoKnNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAg
ICAgICAgfQpAQCAtMzg2OCw1MSArMzg2OCw1MSBAQCBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3Rh
cnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaQog
ICAgIHJldHVybiBmYWxzZTsKIH0gICAgICAgCiAKLU9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBl
PiBFZGl0b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290RWRp
dGFibGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0
aW9ucykKK09wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRl
eHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0YWJsZUVsZW1lbnQsIE9wdGlv
blNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMpCiB7CiAjaWYg
VVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBib29sIG9ubHlBbGxvd3NUZXh0UmVwbGFjZW1lbnQgPSBmYWxzZTsKICAgICBpZiAoUmVm
UHRyIGhvc3QgPSByb290RWRpdGFibGVFbGVtZW50LnNoYWRvd0hvc3QoKSkKICAgICAgICAgb25s
eUFsbG93c1RleHRSZXBsYWNlbWVudCA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpICYmIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpob3N0KS5pc1NwZWxsY2hlY2tEaXNhYmxlZEV4Y2Vw
dFRleHRSZXBsYWNlbWVudCgpOwogICAgIGlmIChvbmx5QWxsb3dzVGV4dFJlcGxhY2VtZW50KQot
ICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OworICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zID0g
dGV4dENoZWNraW5nT3B0aW9ucyAmIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyb290RWRpdGFibGVFbGVtZW50KTsKICNlbmRpZgog
Ci0gICAgYm9vbCBzaG91bGRNYXJrU3BlbGxpbmcgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRh
aW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKLSAgICBib29sIHNob3VsZE1hcmtHcmFt
bWFyID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFt
bWFyKTsKKyAgICBib29sIHNob3VsZE1hcmtTcGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CisgICAgYm9vbCBzaG91
bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpHcmFtbWFyKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5z
KFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOwotICAgIGJvb2wgc2hvdWxk
Q2hlY2tGb3JDb3JyZWN0aW9uID0gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCB8fCB0ZXh0Q2hl
Y2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pOworICAg
IGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29u
dGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsKTsKKyAgICBi
b29sIHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiA9IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwg
fHwgdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkNv
cnJlY3Rpb24pOwogI2VuZGlmCiAKLSAgICBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hl
Y2tpbmdUeXBlczsKKyAgICBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2lu
Z1R5cGVzOwogICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNraW5nVHlw
ZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKKyAgICAgICAgY2hlY2tpbmdUeXBl
cy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CiAgICAgaWYgKHNob3VsZE1h
cmtHcmFtbWFyKQotICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpH
cmFtbWFyKTsKKyAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBl
OjpHcmFtbWFyKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoc2hvdWxkQ2hl
Y2tGb3JDb3JyZWN0aW9uKQotICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdU
eXBlOjpDb3JyZWN0aW9uKTsKKyAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpDb3JyZWN0aW9uKTsKICAgICBpZiAoc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bCkKLSAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJl
Y3Rpb25QYW5lbCk7CisgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCk7CiAKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQ
TEFDRU1FTlQpCi0gICAgYm9vbCBzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgPSB0ZXh0Q2hlY2tp
bmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKKyAgICBi
b29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFp
bnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCk7CiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCkgewogICAgICAgICBpZiAoIW9ubHlBbGxvd3NUZXh0UmVwbGFjZW1l
bnQpIHsKICAgICAgICAgICAgIGlmIChpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkp
Ci0gICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6TGlu
ayk7CisgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlOjpMaW5rKTsKICAgICAgICAgICAgIGlmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2lu
Z1R5cGU6OlF1b3RlKTsKKyAgICAgICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OlF1b3RlKTsKICAgICAgICAgICAgIGlmIChpc0F1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQo
VGV4dENoZWNraW5nVHlwZTo6RGFzaCk7CisgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5h
ZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKTsKICAgICAgICAgICAgIGlmIChzaG91bGRN
YXJrU3BlbGxpbmcgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCi0g
ICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbik7CisgICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpDb3JyZWN0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkpCi0gICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChU
ZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCk7CisgICAgICAgICAgICBjaGVja2luZ1R5cGVz
LmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKICAgICB9CiAjZW5kaWYK
ICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTM5NDYsNyArMzk0Niw3IEBAIHN0
ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdy
YXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpy
YW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3Vs
dCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JUZXh0
Q2hlY2tpbmdSZXN1bHQoY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkgY29u
c3QKIHsKICAgICBpZiAoIXJlc3VsdC5yYW5nZS5sZW5ndGgpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CkBAIC00MjE3LDcgKzQyMTcsNyBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNo
bWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+Jgog
CiAjZW5kaWYgLy8gRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIAotdm9pZCBFZGl0b3I6Omhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0
ZSkKK3ZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShQQUw6OlRleHRDaGVja2lu
Z1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAppbmRleCAwMWZlMGI1ZTA0NGVmNjNmMjZhNzFiNDcyZWY5OGIxMWMy
MjhiOTFjLi4xNzc2YjI3ZjM0YjVkYWQ3MjQzZTVjZGQ4YTU4ZDUzNGIxYzAyN2VlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRXcml0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgotI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0
L1RleHRDaGVja2luZy5oPgogI2luY2x1ZGUgIlRleHRFdmVudElucHV0VHlwZS5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvckJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5o
IgpAQCAtNTEsNiArNTEsNyBAQCBPQkpDX0NMQVNTIE5TTXV0YWJsZURpY3Rpb25hcnk7CiAKIG5h
bWVzcGFjZSBQQUwgewogY2xhc3MgS2lsbFJpbmc7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0
OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MCw3ICs5MSw2IEBAIHN0cnVjdCBEaWN0
YXRpb25BbHRlcm5hdGl2ZTsKIHN0cnVjdCBGb250QXR0cmlidXRlczsKIHN0cnVjdCBQYXN0ZWJv
YXJkUGxhaW5UZXh0Owogc3RydWN0IFBhc3RlYm9hcmRVUkw7Ci1zdHJ1Y3QgVGV4dENoZWNraW5n
UmVzdWx0OwogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKIHN0cnVjdCBQcm9taXNl
ZEF0dGFjaG1lbnRJbmZvOwpAQCAtMzI1LDIwICszMjUsMjAgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBtaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1pc3NwZWxs
ZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tlZE5vZGUpIGNvbnN0OwogICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBjb25zdDsK
LSAgICBUZXh0Q2hlY2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsKCk7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsKCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1
c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2Rl
KikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwog
ICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpOyAvLyBSZXR1cm5zIGZpcnN0IG1pc3NwZWxsaW5nIHJhbmdlLgogICAg
IHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQg
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGdyYW1tYXJTZWxlY3Rpb24pOwotICAgIHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3Bl
bGxDaGVja1JlcXVlc3QmLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOworICAg
IHZvaWQgbWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmLCBjb25zdCBW
ZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
U3RyaW5nJik7CiAKICAgICBib29sIGlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX292ZXJ3cml0ZU1vZGVFbmFibGVkOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0
b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwogCi0gICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29u
c3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5nUmFuZ2UsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZ3JhbW1hclJhbmdlKTsKKyAgICB2b2lkIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFBBTDo6VGV4dENo
ZWNraW5nVHlwZT4sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1Jh
bmdlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1l
bnRSYW5nZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSk7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAog
I2VuZGlmCkBAIC01NTMsOSArNTUzLDkgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVz
dWx0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFBB
TDo6VGV4dENoZWNraW5nUmVzdWx0KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7Ci0g
ICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQo
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgUEFMOjpUZXh0Q2hlY2tp
bmdSZXN1bHQmKSBjb25zdDsKICAgICBib29sIGlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlOyB9CiAKICAgICB2
b2lkIHNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oYm9vbCBiKSB7IG1faXNHZXR0aW5n
RGljdGlvbmFyeVBvcHVwSW5mbyA9IGI7IH0KQEAgLTU5Niw3ICs1OTYsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Ny
b2xsQWxpZ25tZW50JiA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgUmV2
ZWFsRXh0ZW50T3B0aW9uID0gRG9Ob3RSZXZlYWxFeHRlbnQpOwogICAgIHN0ZDo6b3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZyk7Ci0gICAgT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290RWRpdGFi
bGVFbGVtZW50LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4pOworICAgIE9wdGlvblNldDxQ
QUw6OlRleHRDaGVja2luZ1R5cGU+IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBO
b2RlJiByb290RWRpdGFibGVFbGVtZW50LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBl
Pik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KFRleHRJdGVyYXRv
ckJlaGF2aW9ycykgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggZGIxNjJhNGM1ODk4ZmUyZTk0Mjg5ZjBjOTY4NTAwMDM3NmEzZmIwYy4uYzYw
NWJjYjVlZGVlMDdlNzJkODgzY2Y0YWYzMWJkZjVkODdiMmMxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTY1NCwxMiArNjU0LDEyIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OnRleHRXYXNSZXBsYWNlZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnCiAgICAgfQogfQogCi1UZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9u
OjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkKK1BBTDo6VGV4dERpcmVjdGlvbiBGcmFtZVNl
bGVjdGlvbjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpCiB7CiAgICAgcmV0dXJuIFdlYkNv
cmU6OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkpOwogfQog
Ci1UZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZlNlbGVjdGlvbigpCitQ
QUw6OlRleHREaXJlY3Rpb24gRnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKCkK
IHsKICAgICAvLyBHZXQgYm90IFZpc2libGVQb3NpdGlvbnMgZmlyc3QgYmVjYXVzZSB2aXNpYmxl
U3RhcnQoKSBhbmQgdmlzaWJsZUVuZCgpCiAgICAgLy8gY2FuIGNhdXNlIGxheW91dCwgd2hpY2gg
aGFzIHRoZSBwb3RlbnRpYWwgdG8gaW52YWxpZGF0ZSBsaW5lYm94ZXMuCkBAIC02OTMsNyArNjkz
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24gYWx0
ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3QKICAgICB9IGVsc2UgewogICAgICAgICBzd2l0
Y2ggKGRpcmVjdGlvbikgewogICAgICAgICBjYXNlIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQ6
Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsKQEAg
LTcwMiw3ICs3MDIsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0
ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdAogICAgICAgICAgICAgYmFz
ZUlzU3RhcnQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0
aW9uRGlyZWN0aW9uOjpMZWZ0OgotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2Vs
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgYmFz
ZUlzU3RhcnQgPSBmYWxzZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBiYXNl
SXNTdGFydCA9IHRydWU7CkBAIC03NzYsMjMgKzc3NiwyMyBAQCBWaXNpYmxlUG9zaXRpb24gRnJh
bWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eQogICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQg
YW5kIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgaXM6CiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nRm9y
d2FyZCBhbHdheXMgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseS4KICAgICAvLyBtb2RpZnlFeHRl
bmRpbmdSaWdodCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgZXhj
ZXB0IGZvciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCi0gICAgLy8gaXQgZXh0ZW5kcyBm
b3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFRleHREaXJlY3Rpb246
OkxUUiwKLSAgICAvLyBidXQgaXQgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVu
Y2xvc2luZyBibG9jayBpcyBUZXh0RGlyZWN0aW9uOjpSVEwuCisgICAgLy8gaXQgZXh0ZW5kcyBm
b3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSLAorICAgIC8vIGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0
aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLgogICAgIHN3aXRj
aCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3Jh
bnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4
dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gcG9zLm5leHQo
Q2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
b3MgPSBwb3MucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OgotICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9y
bShwb3MpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3Np
dGlvbihwb3MpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGlu
ZUJvdW5kYXJ5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRl
eHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
KSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4
dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
b3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7CkBAIC04MTAsNyArODEw
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdo
dChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxl
Y3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6
TFRSKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgIHJldHVy
biBwb3M7CiB9CiAKQEAgLTg1Myw3ICs4NTMsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQog
ICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUik7CisgICAgYWRqdXN0UG9zaXRp
b25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKTsKICAgICByZXR1cm4gcG9zOwogfQogCkBAIC04NjUsNyAr
ODY1LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdo
dChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGIKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAg
ICAgICBpZiAoaXNSYW5nZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rp
b24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZT
ZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBw
b3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKQEAg
LTk4OSwyMyArOTg5LDIzIEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
RXh0ZW5kaW5nTGVmdChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgLy8gVGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiBtb2RpZnlFeHRlbmRpbmdMZWZ0IGFuZCBtb2RpZnlFeHRlbmRpbmdC
YWNrd2FyZCBpczoKICAgICAvLyBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBhbHdheXMgZXh0ZW5k
cyBiYWNrd2FyZCBsb2dpY2FsbHkuCiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nTGVmdCBiZWhhdmVz
IHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGV4Y2VwdCBmb3IgZXh0ZW5kaW5n
IGNoYXJhY3RlciBvciB3b3JkLAotICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5
IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6TFRSLAotICAgIC8vIGJ1
dCBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMg
VGV4dERpcmVjdGlvbjo6UlRMLgorICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5
IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsCisgICAg
Ly8gYnV0IGl0IGV4dGVuZHMgZm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9j
ayBpcyBQQUw6OlRleHREaXJlY3Rpb246OlJUTC4KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7
CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgotICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHBvcy5uZXh0
KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
ZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAg
ICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0ocG9zKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVCb3VuZGFyeToKLSAgICAg
ICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIp
CisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChn
cmFudWxhcml0eSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCAhKGRp
cmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBh
ZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCAhKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikpOwogICAgIHJldHVybiBwb3M7CiB9
CiAgICAgICAgCkBAIC0xMDcwLDcgKzEwNzAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcgog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3Np
bmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikpOworICAgIGFkanVzdFBvc2l0aW9uRm9y
VXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSKSk7CiAgICAgcmV0dXJuIHBvczsKIH0KIApAQCAtMTA4Miw3ICsx
MDgyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm8KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5
KSB7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAg
ICAgICBpZiAoaXNSYW5nZSgpKQotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2Vs
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgcG9z
ID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmlu
aXR5KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CkBAIC0x
MjA0LDcgKzEyMDQsNyBAQCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCBGcmFtZVNlbGVjdGlvbjo6
dGV4dFNlbGVjdGlvbkludGVudChFQWx0ZXJhdGlvbiBhbHRlciwgUwogICAgIGJvb2wgZmxpcCA9
IGZhbHNlOwogICAgIGlmIChhbHRlciA9PSBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUp
IHsKICAgICAgICAgaW50ZW50LnR5cGUgPSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25N
b3ZlOwotICAgICAgICBmbGlwID0gaXNSYW5nZSgpICYmIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkg
PT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICBmbGlwID0gaXNSYW5nZSgpICYmIGRpcmVj
dGlvbk9mU2VsZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgfSBlbHNl
CiAgICAgICAgIGludGVudC50eXBlID0gQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uRXh0
ZW5kOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTE0MzMsOCArMTQzMyw4IEBAIGJv
b2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVGV4CiAgICAgICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1
bWVudC0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4
dGVuZGluZ1RvQm91bmRhcnkoKSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRh
cnkoZ3JhbnVsYXJpdHkpKQogICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1c2VyVHJp
Z2dlcmVkKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCB8fCAodGV4dERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlv
bjo6UmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBkaXJl
Y3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpMZWZ0KSkKKyAgICAgICAgICAgIFBBTDo6VGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwor
ICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQg
fHwgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgZGlyZWN0aW9u
ID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMICYmIGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246Okxl
ZnQpKQogICAgICAgICAgICAgICAgIHNldEVuZChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0U3RhcnQocG9zaXRpb24sIHVzZXJU
cmlnZ2VyZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGVk
YWNiNjNjYmViZDNhM2U5M2QzZDBmMWY5NzM5ZWFiYWY3Zjc2NTIuLjAxZmNhMjlkNWY3OTM5Zjk2
NDYzOWIwZjJhNGM0NThjNDlmZjRhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgKQEAgLTI3MSw4ICsyNzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0U2VsZWN0
aW9uV2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0
aW9uU2V0PFNldFNlbGVjdGlvbk9wdGlvbj4sIEN1cnNvckFsaWduT25TY3JvbGwsIFRleHRHcmFu
dWxhcml0eSk7CiAKICAgICB2b2lkIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYsIGJv
b2wgYmFzZVJlbW92ZWQsIGJvb2wgZXh0ZW50UmVtb3ZlZCwgYm9vbCBzdGFydFJlbW92ZWQsIGJv
b2wgZW5kUmVtb3ZlZCk7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCk7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZlNlbGVjdGlvbigpOworICAgIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCk7CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQbGF0Zm9ybShib29sIGlzR2V0U3RhcnQpIGNvbnN0OwogICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydEZvclBsYXRmb3JtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggNTkxMDVkOTM3ZTQ2OWYyZWRhMTkyZWIwYWNjYTgyNjhh
MmMzZTJmMC4uOThiOWMwNGY4NTgwOWIwODFhMjY3NDdhNTY0OTFiYjU3ZjEwZjViOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwZWxsQ2hlY2tSZXF1ZXN0OjpTcGVsbENoZWNrUmVxdWVz
dChjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGF1
dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5n
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gb3B0aW9u
cywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgdHlwZSkKK1NwZWxsQ2hlY2tSZXF1ZXN0OjpTcGVs
bENoZWNrUmVxdWVzdChjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2lt
cGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBw
YXJhZ3JhcGhSYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlPiBvcHRpb25zLCBQQUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUpCiAg
ICAgOiBtX2NoZWNraW5nUmFuZ2UoY2hlY2tpbmdSYW5nZSkKICAgICAsIG1fYXV0b21hdGljUmVw
bGFjZW1lbnRSYW5nZShhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKQogICAgICwgbV9wYXJhZ3Jh
cGhSYW5nZShwYXJhZ3JhcGhSYW5nZSkKQEAgLTU0LDcgKzU0LDcgQEAgU3BlbGxDaGVja1JlcXVl
c3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBj
b25zdCBTaW0KIAogU3BlbGxDaGVja1JlcXVlc3Q6On5TcGVsbENoZWNrUmVxdWVzdCgpID0gZGVm
YXVsdDsKIAotUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBTcGVsbENoZWNrUmVxdWVzdDo6Y3Jl
YXRlKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBvcHRpb25zLCBUZXh0Q2hlY2tpbmdQcm9j
ZXNzVHlwZSB0eXBlLCBjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2lt
cGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBw
YXJhZ3JhcGhSYW5nZSkKK1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gU3BlbGxDaGVja1JlcXVl
c3Q6OmNyZWF0ZShPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBvcHRpb25zLCBQQUw6
OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2lu
Z1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29u
c3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKQogewogICAgIFN0cmluZyB0ZXh0ID0gcGxh
aW5UZXh0KGNoZWNraW5nUmFuZ2UpOwogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKQEAgLTYyLDEy
ICs2MiwxMiBAQCBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IFNwZWxsQ2hlY2tSZXF1ZXN0Ojpj
cmVhdGUoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU3BlbGxDaGVja1JlcXVlc3QoY2hlY2tpbmdSYW5nZSwgYXV0b21hdGljUmVwbGFjZW1lbnRS
YW5nZSwgcGFyYWdyYXBoUmFuZ2UsIHRleHQsIG9wdGlvbnMsIHR5cGUpKTsKIH0KIAotY29uc3Qg
VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFNwZWxsQ2hlY2tSZXF1ZXN0OjpkYXRhKCkgY29uc3QK
K2NvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFNwZWxsQ2hlY2tSZXF1ZXN0Ojpk
YXRhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0RGF0YTsKIH0KIAotdm9pZCBTcGVs
bENoZWNrUmVxdWVzdDo6ZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiYgcmVzdWx0cykKK3ZvaWQgU3BlbGxDaGVja1JlcXVlc3Q6OmRpZFN1Y2NlZWQoY29uc3QgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKICAgICBpZiAoIW1fY2hl
Y2tlcikKICAgICAgICAgcmV0dXJuOwpAQCAtODcsMTIgKzg3LDEyIEBAIHZvaWQgU3BlbGxDaGVj
a1JlcXVlc3Q6OmRpZENhbmNlbCgpCiAgICAgbV9jaGVja2VyID0gbnVsbHB0cjsKIH0KIAotdm9p
ZCBTcGVsbENoZWNrUmVxdWVzdDo6c2V0Q2hlY2tlckFuZElkZW50aWZpZXIoU3BlbGxDaGVja2Vy
KiByZXF1ZXN0ZXIsIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCit2
b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpzZXRDaGVja2VyQW5kSWRlbnRpZmllcihTcGVsbENoZWNr
ZXIqIHJlcXVlc3RlciwgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlm
aWVyKQogewogICAgIEFTU0VSVCghbV9jaGVja2VyKTsKICAgICBBU1NFUlQoIW1fcmVxdWVzdERh
dGEuaWRlbnRpZmllcigpKTsKICAgICBtX2NoZWNrZXIgPSByZXF1ZXN0ZXI7Ci0gICAgbV9yZXF1
ZXN0RGF0YS5tX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIG1fcmVxdWVzdERhdGEgPSBQ
QUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhIHsgaWRlbnRpZmllciwgbV9yZXF1ZXN0RGF0YS50
ZXh0KCksIG1fcmVxdWVzdERhdGEuY2hlY2tpbmdUeXBlcygpLCBtX3JlcXVlc3REYXRhLnByb2Nl
c3NUeXBlKCkgfTsKIH0KIAogdm9pZCBTcGVsbENoZWNrUmVxdWVzdDo6cmVxdWVzdGVyRGVzdHJv
eWVkKCkKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNr
aW5nRm9yKFJlZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKICAgICBBU1NFUlQoIXJlcXVlc3QtPmRhdGEoKS5pZGVudGlmaWVyKCkpOwotICAgIGF1dG8g
aWRlbnRpZmllciA9IFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwor
ICAgIGF1dG8gaWRlbnRpZmllciA9IFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI6
OmdlbmVyYXRlKCk7CiAKICAgICBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllciA9IGlkZW50aWZpZXI7
CiAgICAgcmVxdWVzdC0+c2V0Q2hlY2tlckFuZElkZW50aWZpZXIodGhpcywgaWRlbnRpZmllcik7
CkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFJl
ZjxTcGVsbENoZWNrUmVxdWVzdD4mJiByZXF1ZXN0KQogICAgIG1fcmVxdWVzdFF1ZXVlLmFwcGVu
ZChXVEZNb3ZlKHJlcXVlc3QpKTsKIH0KIAotdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFRl
eHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKFBB
TDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKICAgICBBU1NFUlQobV9wcm9j
ZXNzaW5nUmVxdWVzdCk7CiAgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmRhdGEoKS5p
ZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcik7CkBAIC0yMTYsMTQgKzIxNiwxNCBAQCB2b2lkIFNw
ZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRp
ZmllciwgY29uc3QgVmVjdAogICAgICAgICBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdC5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2Vl
ZChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVj
a1N1Y2NlZWQoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBj
b25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIFRl
eHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3REYXRhID0gbV9wcm9jZXNzaW5nUmVxdWVzdC0+
ZGF0YSgpOworICAgIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdERhdGEgPSBt
X3Byb2Nlc3NpbmdSZXF1ZXN0LT5kYXRhKCk7CiAgICAgaWYgKHJlcXVlc3REYXRhLmlkZW50aWZp
ZXIoKSA9PSBpZGVudGlmaWVyKSB7CiAgICAgICAgIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gbWFya2VyVHlwZXM7Ci0gICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2lu
Z1R5cGVzKCkuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKQorICAgICAgICBp
ZiAocmVxdWVzdERhdGEuY2hlY2tpbmdUeXBlcygpLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcpKQogICAgICAgICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCku
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpCisgICAgICAgIGlmIChyZXF1ZXN0
RGF0YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFt
bWFyKSkKICAgICAgICAgICAgIG1hcmtlclR5cGVzLmFkZChEb2N1bWVudE1hcmtlcjo6R3JhbW1h
cik7CiAgICAgICAgIGlmICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVt
b3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5
cGVzKTsKQEAgLTIzMSw5ICsyMzEsOSBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNj
ZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbgogICAgIGRp
ZENoZWNrKGlkZW50aWZpZXIsIHJlc3VsdHMpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6ZGlk
Q2hlY2tDYW5jZWwoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllcikKK3Zv
aWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja0NhbmNlbChQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgZGlkQ2hlY2soaWRlbnRpZmllciwgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4oKSk7CisgICAgZGlkQ2hlY2soaWRlbnRpZmllciwgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggNDMzYjcxMmIwMjI2MzIx
MTVmODNhYTIyN2MwM2IyN2E0YzU0OTUxNC4uMWE2MDBkMjk1NzA2MzFkNTY4MTcxNTYwMWUwNzhm
OGQ2Y2ZiMDRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2ltcGxlUmFuZ2Uu
aCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0Q2hl
Y2tpbmcuaD4KICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCkBA
IC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNwZWxsQ2hlY2tlcjsK
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogCi1jbGFzcyBTcGVsbENoZWNrUmVxdWVzdCBmaW5h
bCA6IHB1YmxpYyBUZXh0Q2hlY2tpbmdSZXF1ZXN0IHsKK2NsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0
IGZpbmFsIDogcHVibGljIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gY3JlYXRlKE9wdGlvblNldDxUZXh0Q2hl
Y2tpbmdUeXBlPiwgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBj
aGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKTsKKyAgICBzdGF0aWMgUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiBjcmVhdGUoT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlw
ZT4sIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsIGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVj
a2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlKTsKICAgICB2aXJ0dWFsIH5TcGVsbENo
ZWNrUmVxdWVzdCgpOwogCiAgICAgY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX2NoZWNraW5nUmFuZ2U7IH0KQEAgLTQ3LDI0ICs0NywyNCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgU2ltcGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2U7IH0KICAgICBFbGVtZW50
KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWRpdGFibGVFbGVt
ZW50LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldENoZWNrZXJBbmRJZGVudGlmaWVyKFNwZWxsQ2hl
Y2tlciosIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKKyAgICB2b2lkIHNldENoZWNr
ZXJBbmRJZGVudGlmaWVyKFNwZWxsQ2hlY2tlciosIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElk
ZW50aWZpZXIpOwogICAgIHZvaWQgcmVxdWVzdGVyRGVzdHJveWVkKCk7CiAgICAgYm9vbCBpc1N0
YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZXI7IH0KIAotICAgIGNvbnN0IFRleHRDaGVj
a2luZ1JlcXVlc3REYXRhJiBkYXRhKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgUEFMOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgZGF0YSgpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAg
IHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpIGZpbmFs
OworICAgIHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1
bHQ+JikgZmluYWw7CiAgICAgdm9pZCBkaWRDYW5jZWwoKSBmaW5hbDsKIAotICAgIFNwZWxsQ2hl
Y2tSZXF1ZXN0KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVS
YW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFn
cmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIFRl
eHRDaGVja2luZ1Byb2Nlc3NUeXBlKTsKKyAgICBTcGVsbENoZWNrUmVxdWVzdChjb25zdCBTaW1w
bGVSYW5nZSYgY2hlY2tpbmdSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGF1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5nZSwgY29uc3QgU3Ry
aW5nJiwgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4sIFBBTDo6VGV4dENoZWNraW5n
UHJvY2Vzc1R5cGUpOwogCiAgICAgU3BlbGxDaGVja2VyKiBtX2NoZWNrZXIgeyBudWxscHRyIH07
CiAgICAgU2ltcGxlUmFuZ2UgbV9jaGVja2luZ1JhbmdlOwogICAgIFNpbXBsZVJhbmdlIG1fYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZTsKICAgICBTaW1wbGVSYW5nZSBtX3BhcmFncmFwaFJhbmdl
OwogICAgIFJlZlB0cjxFbGVtZW50PiBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQ7Ci0gICAgVGV4dENo
ZWNraW5nUmVxdWVzdERhdGEgbV9yZXF1ZXN0RGF0YTsKKyAgICBQQUw6OlRleHRDaGVja2luZ1Jl
cXVlc3REYXRhIG1fcmVxdWVzdERhdGE7CiB9OwogCiBjbGFzcyBTcGVsbENoZWNrZXIgewpAQCAt
ODAsOCArODAsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ0ZvcihSZWY8
U3BlbGxDaGVja1JlcXVlc3Q+JiYpOwogCi0gICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZp
ZXIgbGFzdFJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdElk
ZW50aWZpZXI7IH0KLSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UHJvY2Vz
c2VkSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7
IH0KKyAgICBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGxhc3RSZXF1ZXN0SWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOyB9CisgICAg
UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UHJvY2Vzc2VkSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7IH0KIAogcHJpdmF0
ZToKICAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoY29uc3QgU2ltcGxlUmFuZ2UmKSBj
b25zdDsKQEAgLTg5LDEzICs4OSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGltZXJGaXJlZFRv
UHJvY2Vzc1F1ZXVlZFJlcXVlc3QoKTsKICAgICB2b2lkIGludm9rZVJlcXVlc3QoUmVmPFNwZWxs
Q2hlY2tSZXF1ZXN0PiYmKTsKICAgICB2b2lkIGVucXVldWVSZXF1ZXN0KFJlZjxTcGVsbENoZWNr
UmVxdWVzdD4mJik7Ci0gICAgdm9pZCBkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7Ci0gICAgdm9p
ZCBkaWRDaGVja0NhbmNlbChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcik7Ci0gICAgdm9p
ZCBkaWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mKTsKKyAgICB2b2lkIGRpZENoZWNrU3VjY2VlZChQQUw6OlRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+Jik7CisgICAgdm9pZCBkaWRDaGVja0NhbmNlbChQQUw6OlRleHRDaGVja2luZ1JlcXVl
c3RJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENoZWNrKFBBTDo6VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mKTsKIAog
ICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwotICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlm
aWVyIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOwotICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVu
dGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllciBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBQQUw6OlRleHRD
aGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIG1fbGFzdFByb2Nlc3NlZElkZW50aWZpZXI7CiAKICAg
ICBUaW1lciBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGEzYmM5NjlmYmU3MmE3Yjgw
YmRkNmZiNjkzYTY4ZTEwY2QzM2ZmMDguLmEwYjY5N2QyZmIyNjBlMTVhMTlkMTY1MzNmZDIzM2Y3
MThlOGVhZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgog
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L0NoYXJhY3RlclJhbmdlLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91YnJr
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRCcmVha0l0ZXJhdG9yLmg+CkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmICFVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogCi1zdGF0aWMgdm9pZCBmaW5k
R3JhbW1hdGljYWxFcnJvcnMoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0
ZXh0LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3N0YXRpYyB2b2lkIGZp
bmRHcmFtbWF0aWNhbEVycm9ycyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3
IHRleHQsIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBjaGVja0xvY2F0aW9uID0gMDsgY2hlY2tMb2NhdGlvbiA8IHRleHQubGVu
Z3RoKCk7ICkgewogICAgICAgICBpbnQgYmFkR3JhbW1hckxvY2F0aW9uID0gLTE7CkBAIC02MCw5
ICs2MSw5IEBAIHN0YXRpYyB2b2lkIGZpbmRHcmFtbWF0aWNhbEVycm9ycyhUZXh0Q2hlY2tlckNs
aWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlCiAgICAgICAgIEFTU0VSVChiYWRHcmFt
bWFyTGVuZ3RoID4gMCk7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFk
R3JhbW1hckxlbmd0aCkgPD0gdGV4dC5sZW5ndGgoKSAtIGNoZWNrTG9jYXRpb24gLSBiYWRHcmFt
bWFyTG9jYXRpb24pOwogCi0gICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCBiYWRHcmFtbWFyOwot
ICAgICAgICBiYWRHcmFtbWFyLnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwotICAg
ICAgICBiYWRHcmFtbWFyLnJhbmdlID0gQ2hhcmFjdGVyUmFuZ2UoY2hlY2tMb2NhdGlvbiArIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nUmVzdWx0IGJhZEdyYW1tYXI7CisgICAgICAgIGJhZEdyYW1tYXIudHlwZSA9IFBBTDo6
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKKyAgICAgICAgYmFkR3JhbW1hci5yYW5nZSA9IFBB
TDo6Q2hhcmFjdGVyUmFuZ2UoY2hlY2tMb2NhdGlvbiArIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFk
R3JhbW1hckxlbmd0aCk7CiAgICAgICAgIGJhZEdyYW1tYXIuZGV0YWlscyA9IFdURk1vdmUoYmFk
R3JhbW1hckRldGFpbHMpOwogICAgICAgICByZXN1bHRzLmFwcGVuZChiYWRHcmFtbWFyKTsKIApA
QCAtNzAsNyArNzEsNyBAQCBzdGF0aWMgdm9pZCBmaW5kR3JhbW1hdGljYWxFcnJvcnMoVGV4dENo
ZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBWZQogICAgIH0KIH0KIAotc3Rh
dGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJp
bmdWaWV3IHRleHQsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQorc3RhdGlj
IHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdW
aWV3IHRleHQsIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7CiAg
ICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCk7CiAg
ICAgaWYgKCFpdGVyYXRvcikKQEAgLTkxLDkgKzkyLDkgQEAgc3RhdGljIHZvaWQgZmluZE1pc3Nw
ZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlY3Rv
cjwKICAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA+IDApOwogICAgICAgICAg
ICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB3b3Jk
TGVuZ3RoKTsKIAotICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nOwot
ICAgICAgICAgICAgbWlzc3BlbGxpbmcudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
OwotICAgICAgICAgICAgbWlzc3BlbGxpbmcucmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZSh3b3JkU3Rh
cnQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAg
ICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZzsKKyAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nLnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOworICAgICAgICAg
ICAgbWlzc3BlbGxpbmcucmFuZ2UgPSBQQUw6OkNoYXJhY3RlclJhbmdlKHdvcmRTdGFydCArIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nLnJlcGxhY2VtZW50ID0gY2xpZW50LmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1p
c3NwZWxsZWRXb3JkKHRleHQuc3Vic3RyaW5nKG1pc3NwZWxsaW5nLnJhbmdlLmxvY2F0aW9uLCBt
aXNzcGVsbGluZy5yYW5nZS5sZW5ndGgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CiAgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtaXNzcGVsbGluZyk7CiAgICAgICAgIH0KQEAgLTE1NSw3
ICsxNTYsNyBAQCBjb25zdCBTaW1wbGVSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpwYXJh
Z3JhcGhSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuICptX3BhcmFncmFwaFJhbmdlOwogfQogCi1T
aW1wbGVSYW5nZSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKENoYXJhY3RlclJhbmdl
IHJhbmdlKSBjb25zdAorU2ltcGxlUmFuZ2UgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5n
ZShQQUw6OkNoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAogewogICAgIHJldHVybiByZXNvbHZl
Q2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UoKSwgcmFuZ2UpOwogfQpAQCAtMjU4LDcgKzI1
OSw3IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kTWlzc3BlbGxlZFdvcmRzKE9wZXJh
dGlvbiBvcGVyYXRpb24pIGNvbnN0IC0+IHN0ZDo6CiAgICAgICAgIGlmICghKG1pc3NwZWxsaW5n
TG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2Nh
dGlvbiA8IHRleHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCAmJiBt
aXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9yYW5nZSwgQ2hhcmFjdGVyUmFuZ2UoY3VycmVudENodW5r
T2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpKTsKKyAgICAg
ICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2Us
IFBBTDo6Q2hhcmFjdGVyUmFuZ2UoY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpKTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uID09IE9w
ZXJhdGlvbjo6TWFya0FsbCkKICAgICAgICAgICAgIGFkZE1hcmtlcihtaXNzcGVsbGluZ1Jhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpAQCAtMjk0LDcgKzI5NSw3IEBAIGF1dG8gVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBo
cmFzZShib29sIGNoZWNrCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBzdGQ6OnZhcmlhbnQ8
TWlzc3BlbGxlZFdvcmQsIFVuZ3JhbW1hdGljYWxQaHJhc2U+IGZpcnN0Rm91bmRJdGVtOwotICAg
IEdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbDsKKyAgICBQQUw6OkdyYW1tYXJEZXRhaWwgZ3Jh
bW1hckRldGFpbDsKIAogICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKICAgICBzdGQ6Om9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGVkV29yZFJhbmdlOwpAQCAtMzMyLDMxICszMzMsMzEg
QEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdy
YW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2sKICAgICAgICAgICAgICAgICB1aW50NjRfdCBncmFt
bWFyRGV0YWlsTG9jYXRpb24gPSAwOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyYW1tYXJE
ZXRhaWxJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICBPcHRpb25TZXQ8
VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcyB7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxs
aW5nIH07CisgICAgICAgICAgICAgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBy
ZXN1bHRzOworICAgICAgICAgICAgICAgIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+
IGNoZWNraW5nVHlwZXMgeyBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nIH07CiAgICAg
ICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hcikKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tp
bmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNraW5nVHlwZXMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAg
ICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwogICAgICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS5zdGFydC5kb2N1bWVu
dCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICAgICAgICAgICAgICBm
b3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nICYmIHJlc3VsdC5yYW5nZS5s
b2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LnJhbmdlLmxvY2F0aW9uICsg
cmVzdWx0LnJhbmdlLmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
ICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0
LnJhbmdlLmxvY2F0aW9uICsgcmVzdWx0LnJhbmdlLmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LnJhbmdlLmxlbmd0aCA+
IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdMb2NhdGlvbiA9IHJlc3VsdC5y
YW5nZS5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0g
cGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQucmFuZ2UubG9jYXRpb24sIHJlc3VsdC5y
YW5nZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRX
b3JkLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgcmVz
dWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiByZXN1bHQucmFuZ2UubG9j
YXRpb24gPCBjdXJyZW50RW5kT2Zmc2V0ICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIHJlc3Vs
dC5yYW5nZS5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIgJiYgcmVzdWx0LnJhbmdlLmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAm
JiByZXN1bHQucmFuZ2UubG9jYXRpb24gKyByZXN1bHQucmFuZ2UubGVuZ3RoID4gY3VycmVudFN0
YXJ0T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LnJhbmdl
Lmxlbmd0aCA+IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc3RvcCBh
ZnRlciB0aGUgZmlyc3QgZ3JhbW1hciByZXN1bHQsIHNpbmNlIHRoZXJlIG1pZ2h0IHN0aWxsIGJl
IGEgc3BlbGxpbmcgcmVzdWx0IGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBi
ZWdpbnMgYnV0IGJlZm9yZSB0aGUgZmlyc3QgZGV0YWlsIGluIGl0LCBidXQgd2UgY2FuIHN0b3Ag
aWYgd2UgZmluZCBhIHNlY29uZCBncmFtbWFyIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmb3VuZEdyYW1tYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0
LmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0LmRldGFpbHNbal07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVz
dWx0LmRldGFpbHNbal07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFp
bC0+cmFuZ2UubGVuZ3RoID4gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24gPj0gY3VycmVudFN0
YXJ0T2Zmc2V0ICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+cmFuZ2UubG9jYXRp
b24gKyBkZXRhaWwtPnJhbmdlLmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYmICghZm91bmRH
cmFtbWFyIHx8IHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24g
PCBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdyYW1tYXJEZXRhaWxJbmRleCA9IGo7CkBAIC00MTEsMTQgKzQxMiwxNCBAQCBhdXRvIFRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQ
aHJhc2UoYm9vbCBjaGVjawogICAgIHJldHVybiBmaXJzdEZvdW5kSXRlbTsKIH0KIAotaW50IFRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbiBvcGVy
YXRpb24sIGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIHVpbnQ2
NF90IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2
NF90IGVuZE9mZnNldCkgY29uc3QKK2ludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRVbmdyYW1t
YXRpY2FsUGhyYXNlcyhPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8UEFMOjpHcmFt
bWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIHVpbnQ2NF90IGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2NF90IGVuZE9mZnNldCkgY29uc3QKIHsK
ICAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwg
cmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KICAgICAvLyBP
cHRpb25hbGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFu
Z2UuCiAgICAgdWludDY0X3QgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID0gMDsKICAgICBp
bnQgZWFybGllc3REZXRhaWxJbmRleCA9IC0xOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBncmFtbWFyRGV0YWlscy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBHcmFtbWFyRGV0
YWlsKiBkZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNbaV07CisgICAgICAgIGNvbnN0IFBBTDo6R3Jh
bW1hckRldGFpbCogZGV0YWlsID0gJmdyYW1tYXJEZXRhaWxzW2ldOwogICAgICAgICBBU1NFUlQo
ZGV0YWlsLT5yYW5nZS5sZW5ndGggPiAwKTsKICAgICAgICAgCiAgICAgICAgIHVpbnQ2NF90IGRl
dGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBk
ZXRhaWwtPnJhbmdlLmxvY2F0aW9uOwpAQCAtNDU2LDcgKzQ1Nyw3IEBAIGF1dG8gVGV4dENoZWNr
aW5nSGVscGVyOjpmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uIG9wZXJhdGlvbikg
Y29uc3QgLT4KICAgICAKICAgICAvLyBTdGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBw
YXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3Rh
cnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KICAgICBmb3IgKHVpbnQ2NF90IHN0YXJ0
T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQoKTsgKSB7Ci0g
ICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsKKyAgICAgICAgVmVj
dG9yPFBBTDo6R3JhbW1hckRldGFpbD4gZ3JhbW1hckRldGFpbHM7CiAgICAgICAgIGludCBiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKICAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VM
ZW5ndGggPSAwOwogICAgICAgICBtX2NsaWVudC50ZXh0Q2hlY2tlcigpLT5jaGVja0dyYW1tYXJP
ZlN0cmluZyhwYXJhZ3JhcGgudGV4dCgpLnN1YnN0cmluZyhzdGFydE9mZnNldCksIGdyYW1tYXJE
ZXRhaWxzLCAmYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCAmYmFkR3JhbW1hclBocmFzZUxlbmd0
aCk7CkBAIC00OTUsNyArNDk2LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dFVuZ3JhbW1hdGljYWxQaHJhc2UoKSBjb25zdCAtPiBVbmdyYW1tYXRpY2FsUGgKICAgICByZXR1
cm4gZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbjo6RmluZEZpcnN0KTsKIH0KIAot
VGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3QKK1BB
TDo6VGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrR3JhbW1hcikgY29uc3QK
IHsKICAgICBpZiAoIXVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKQEAgLTUxMSwxNyArNTEyLDE3IEBAIFRleHRDaGVja2luZ0d1ZXNzZXMgVGV4dENoZWNr
aW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQCiAgICAg
aWYgKHBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIE9wdGlvblNldDxUZXh0Q2hlY2tp
bmdUeXBlPiBjaGVja2luZ1R5cGVzIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgfTsKKyAg
ICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgT3B0aW9uU2V0
PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcyB7IFBBTDo6VGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcgfTsKICAgICBpZiAoY2hlY2tHcmFtbWFyKQotICAgICAgICBjaGVja2lu
Z1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICAgICAgY2hlY2tpbmdU
eXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CiAgICAgaWYgKGF1dG8gZnJhbWUgPSBtX3JhbmdlLnN0
YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9j
bGllbnQudGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBlcywgcmVz
dWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3Vs
dHMpIHsKLSAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OlNwZWxs
aW5nICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQucmFuZ2UpKSB7Cisg
ICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
ICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQucmFuZ2UpKSB7CiAgICAg
ICAgICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJp
bmcoKS50b1N0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0
aCgpKTsKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CkBAIC01MzUsNyArNTM2
LDcgQEAgVGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFAKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGZvciAoYXV0byYgcmVzdWx0IDogcmVzdWx0cykgewotICAgICAgICBpZiAocmVzdWx0LnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVja2luZ1Jhbmdl
Q292ZXJlZEJ5KHJlc3VsdC5yYW5nZSkpIHsKKyAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFBB
TDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVja2luZ1Jhbmdl
Q292ZXJlZEJ5KHJlc3VsdC5yYW5nZSkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWls
IDogcmVzdWx0LmRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLnJhbmdl
Lmxlbmd0aCA+IDApOwogICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguY2hlY2tpbmdSYW5n
ZU1hdGNoZXMoeyByZXN1bHQucmFuZ2UubG9jYXRpb24gKyBkZXRhaWwucmFuZ2UubG9jYXRpb24s
IGRldGFpbC5yYW5nZS5sZW5ndGggfSkpIHsKQEAgLTU2NiwyMCArNTY3LDIwIEBAIGJvb2wgVGV4
dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKICAgICBy
ZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENo
ZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3Vs
dHMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit2b2lkIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4
dCwgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgY3VycmVudFNlbGVjdGlvbikKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQog
ICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdU
eXBlcywgY3VycmVudFNlbGVjdGlvbik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
U2VsZWN0aW9uKTsKIAotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3NwZWxsaW5n
czsKLSAgICBpZiAoY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZykpCisgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBtaXNzcGVsbGluZ3M7
CisgICAgaWYgKGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZykpCiAgICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0LCBtaXNzcGVs
bGluZ3MpOwogCiAgICAgLy8gTG9vayBmb3IgZ3JhbW1hdGljYWwgZXJyb3JzIHRoYXQgb2NjdXIg
YmVmb3JlIHRoZSBmaXJzdCBtaXNzcGVsbGluZy4KLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBncmFtbWF0aWNhbEVycm9yczsKLSAgICBpZiAoY2hlY2tpbmdUeXBlcy5jb250YWlucyhU
ZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgeworICAgIFZlY3RvcjxQQUw6OlRleHRDaGVja2lu
Z1Jlc3VsdD4gZ3JhbW1hdGljYWxFcnJvcnM7CisgICAgaWYgKGNoZWNraW5nVHlwZXMuY29udGFp
bnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICB1bnNpZ25lZCBn
cmFtbWFyQ2hlY2tMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogICAgICAgICBmb3IgKGF1dG8mIG1p
c3NwZWxsaW5nIDogbWlzc3BlbGxpbmdzKQogICAgICAgICAgICAgZ3JhbW1hckNoZWNrTGVuZ3Ro
ID0gc3RkOjptaW48dW5zaWduZWQ+KGdyYW1tYXJDaGVja0xlbmd0aCwgbWlzc3BlbGxpbmcucmFu
Z2UubG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmgKaW5kZXggZjU3ZTQ3NTcxYzFiNjE2ZTAwZDVlYWE5MDllZWI0MTUxMTNkYzNkZC4uMDBmMWU1
NzZjNGM2NmIwMzRhZDE3NDFjYmFmMmMwOWIzNWY4MmRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC0yMiw3ICsyMiwxMSBAQAogCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgotI2luY2x1ZGUgIlRl
eHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5oPgorCituYW1l
c3BhY2UgUEFMIHsKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7Cit9CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzIsNyArMzYsNiBAQCBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFRleHRD
aGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotc3RydWN0IFRleHRDaGVj
a2luZ1Jlc3VsdDsKIAogLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgY2xhc3MgdG8gaXRzIG93
biBoZWFkZXIuCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewpAQCAtNDEsNyArNDQsNyBA
QCBwdWJsaWM6CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoKGNvbnN0IFNpbXBsZVJhbmdlJiBj
aGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5n
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIHBhcmFncmFwaFJhbmdlKTsKIAog
ICAgIHVpbnQ2NF90IHJhbmdlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgU2ltcGxlUmFuZ2Ugc3VicmFu
Z2UoQ2hhcmFjdGVyUmFuZ2UpIGNvbnN0OworICAgIFNpbXBsZVJhbmdlIHN1YnJhbmdlKFBBTDo6
Q2hhcmFjdGVyUmFuZ2UpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHVpbnQ2NF90PiBvZmZzZXRU
byhjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgZXhwYW5kUmFuZ2VUb05leHRFbmQo
KTsKIApAQCAtNTcsOSArNjAsOSBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgYXV0b21hdGljUmVw
bGFjZW1lbnRTdGFydCgpIGNvbnN0OwogICAgIHVpbnQ2NF90IGF1dG9tYXRpY1JlcGxhY2VtZW50
TGVuZ3RoKCkgY29uc3Q7CiAKLSAgICBib29sIGNoZWNraW5nUmFuZ2VNYXRjaGVzKENoYXJhY3Rl
clJhbmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5sb2NhdGlvbiA9PSBjaGVja2luZ1N0
YXJ0KCkgJiYgcmFuZ2UubGVuZ3RoID09IGNoZWNraW5nTGVuZ3RoKCk7IH0KLSAgICBib29sIGlz
Q2hlY2tpbmdSYW5nZUNvdmVyZWRCeShDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1
cm4gcmFuZ2UubG9jYXRpb24gPD0gY2hlY2tpbmdTdGFydCgpICYmIHJhbmdlLmxvY2F0aW9uICsg
cmFuZ2UubGVuZ3RoID49IGNoZWNraW5nU3RhcnQoKSArIGNoZWNraW5nTGVuZ3RoKCk7IH0KLSAg
ICBib29sIGNoZWNraW5nUmFuZ2VDb3ZlcnMoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0IHsg
cmV0dXJuIHJhbmdlLmxvY2F0aW9uIDwgY2hlY2tpbmdFbmQoKSAmJiByYW5nZS5sb2NhdGlvbiAr
IHJhbmdlLmxlbmd0aCA+IGNoZWNraW5nU3RhcnQoKTsgfQorICAgIGJvb2wgY2hlY2tpbmdSYW5n
ZU1hdGNoZXMoUEFMOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2Uu
bG9jYXRpb24gPT0gY2hlY2tpbmdTdGFydCgpICYmIHJhbmdlLmxlbmd0aCA9PSBjaGVja2luZ0xl
bmd0aCgpOyB9CisgICAgYm9vbCBpc0NoZWNraW5nUmFuZ2VDb3ZlcmVkQnkoUEFMOjpDaGFyYWN0
ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2UubG9jYXRpb24gPD0gY2hlY2tpbmdT
dGFydCgpICYmIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoID49IGNoZWNraW5nU3RhcnQo
KSArIGNoZWNraW5nTGVuZ3RoKCk7IH0KKyAgICBib29sIGNoZWNraW5nUmFuZ2VDb3ZlcnMoUEFM
OjpDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2UubG9jYXRpb24gPCBj
aGVja2luZ0VuZCgpICYmIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoID4gY2hlY2tpbmdT
dGFydCgpOyB9CiAKICAgICBjb25zdCBTaW1wbGVSYW5nZSYgcGFyYWdyYXBoUmFuZ2UoKSBjb25z
dDsKIApAQCAtODksNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IFVuZ3JhbW1hdGljYWxQ
aHJhc2UgewogICAgICAgICBTdHJpbmcgcGhyYXNlOwogICAgICAgICB1aW50NjRfdCBvZmZzZXQg
eyAwIH07Ci0gICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOworICAgICAgICBQQUw6OkdyYW1t
YXJEZXRhaWwgZGV0YWlsOwogICAgIH07CiAKICAgICBNaXNzcGVsbGVkV29yZCBmaW5kRmlyc3RN
aXNzcGVsbGVkV29yZCgpIGNvbnN0OwpAQCAtOTksMjAgKzEwMiwyMCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFya0FsbE1pc3NwZWxsZWRXb3JkcygpIGNvbnN0
OyAvLyBSZXR1cm5zIHRoZSByYW5nZSBvZiB0aGUgZmlyc3QgbWlzc3BlbGxlZCB3b3JkLgogICAg
IHZvaWQgbWFya0FsbFVuZ3JhbW1hdGljYWxQaHJhc2VzKCkgY29uc3Q7CiAKLSAgICBUZXh0Q2hl
Y2tpbmdHdWVzc2VzIGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFz
ZShib29sIGNoZWNrR3JhbW1hcikgY29uc3Q7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdHdWVzc2Vz
IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNr
R3JhbW1hcikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBPcGVyYXRpb24gOiBi
b29sIHsgRmluZEZpcnN0LCBNYXJrQWxsIH07CiAgICAgc3RkOjpwYWlyPE1pc3NwZWxsZWRXb3Jk
LCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPj4gZmluZE1pc3NwZWxsZWRXb3JkcyhPcGVyYXRp
b24pIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBmaXJzdC4KICAgICBVbmdyYW1tYXRpY2FsUGhyYXNl
IGZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb24pIGNvbnN0OyAvLyBSZXR1cm5zIHRo
ZSBmaXJzdC4KICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKLSAg
ICBpbnQgZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbiwgY29uc3QgVmVjdG9yPEdy
YW1tYXJEZXRhaWw+JiwgdWludDY0X3QgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCB1aW50NjRf
dCBzdGFydE9mZnNldCwgdWludDY0X3QgZW5kT2Zmc2V0KSBjb25zdDsKKyAgICBpbnQgZmluZFVu
Z3JhbW1hdGljYWxQaHJhc2VzKE9wZXJhdGlvbiwgY29uc3QgVmVjdG9yPFBBTDo6R3JhbW1hckRl
dGFpbD4mLCB1aW50NjRfdCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIHVpbnQ2NF90IHN0YXJ0
T2Zmc2V0LCB1aW50NjRfdCBlbmRPZmZzZXQpIGNvbnN0OwogCiAgICAgRWRpdG9yQ2xpZW50JiBt
X2NsaWVudDsKICAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogfTsKIAotdm9pZCBjaGVja1RleHRP
ZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYsIFN0cmluZ1ZpZXcsIE9wdGlvblNldDxUZXh0
Q2hlY2tpbmdUeXBlPiwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKTsKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
VGV4dENoZWNrZXJDbGllbnQmLCBTdHJpbmdWaWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tp
bmdUeXBlPiwgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pOwogCiBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQoY29uc3QgRnJhbWUqKTsKIGJvb2wgcGxhdGZvcm1Ecml2ZW5UZXh0Q2hlY2tlckVuYWJs
ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBmYTBlMGJm
OWJiNWE2NTJjNDFmMjViM2YyNmMxYjQwNGI1NzNkNjZjLi4yN2EyYTU1MTcxMjZiMDNlZjBkNDll
YWY5NzI2YTY3ZjYwMmEwOTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0j
aW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0Qm91bmRh
cmllcy5oPgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUg
IlRleHRQbGFjZWhvbGRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
QEAgLTIwMjUsNyArMjAyNSw3IEBAIGlubGluZSB2b2lkIFNlYXJjaEJ1ZmZlcjo6cHJlcGVuZENv
bnRleHQoU3RyaW5nVmlldyB0ZXh0KQogICAgIHNpemVfdCB3b3JkQm91bmRhcnlDb250ZXh0U3Rh
cnQgPSB0ZXh0Lmxlbmd0aCgpOwogICAgIGlmICh3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpIHsK
ICAgICAgICAgVTE2X0JBQ0tfMSh0ZXh0LCAwLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpOwot
ICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFzdFdvcmRCb3VuZGFy
eUNvbnRleHQodGV4dC5zdWJzdHJpbmcoMCwgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KSk7Cisg
ICAgICAgIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IFBBTDo6c3RhcnRPZkxhc3RXb3JkQm91
bmRhcnlDb250ZXh0KHRleHQuc3Vic3RyaW5nKDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCkp
OwogICAgIH0KIAogICAgIHNpemVfdCB1c2FibGVMZW5ndGggPSBzdGQ6Om1pbihtX2J1ZmZlci5j
YXBhY2l0eSgpIC0gbV9wcmVmaXhMZW5ndGgsIHRleHQubGVuZ3RoKCkgLSB3b3JkQm91bmRhcnlD
b250ZXh0U3RhcnQpOwpAQCAtMjExMyw3ICsyMTEzLDcgQEAgaW5saW5lIGJvb2wgU2VhcmNoQnVm
ZmVyOjppc1dvcmRFbmRNYXRjaChzaXplX3Qgc3RhcnQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiAK
ICAgICAvLyBTdGFydCBzZWFyY2hpbmcgYXQgdGhlIGVuZCBvZiBtYXRjaGVkIHNlYXJjaCwgc28g
dGhhdCBtdWx0aXBsZSB3b3JkIG1hdGNoZXMgc3VjY2VlZC4KICAgICBpbnQgZW5kV29yZDsKLSAg
ICBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5zaXplKCkpLCBzdGFydCArIGxlbmd0aCAtIDEsICZlbmRXb3JkKTsKKyAgICBQQUw6OmZpbmRF
bmRXb3JkQm91bmRhcnkoU3RyaW5nVmlldyhtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUo
KSksIHN0YXJ0ICsgbGVuZ3RoIC0gMSwgJmVuZFdvcmQpOwogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGVuZFdvcmQpID09IHN0YXJ0ICsgbGVuZ3RoOwogfQogCkBAIC0yMTY4LDcgKzIx
NjgsNyBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZFN0YXJ0TWF0Y2goc2l6ZV90
IHN0YXJ0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAogCiAgICAgc2l6ZV90IHdvcmRCcmVha1NlYXJj
aFN0YXJ0ID0gc3RhcnQgKyBsZW5ndGg7CiAgICAgd2hpbGUgKHdvcmRCcmVha1NlYXJjaFN0YXJ0
ID4gc3RhcnQpCi0gICAgICAgIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID0gZmluZE5leHRXb3JkRnJv
bUluZGV4KFN0cmluZ1ZpZXcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkpLCB3b3Jk
QnJlYWtTZWFyY2hTdGFydCwgZmFsc2UgLyogYmFja3dhcmRzICovKTsKKyAgICAgICAgd29yZEJy
ZWFrU2VhcmNoU3RhcnQgPSBQQUw6OmZpbmROZXh0V29yZEZyb21JbmRleChTdHJpbmdWaWV3KG1f
YnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKSwgd29yZEJyZWFrU2VhcmNoU3RhcnQsIGZh
bHNlIC8qIGJhY2t3YXJkcyAqLyk7CiAgICAgcmV0dXJuIHdvcmRCcmVha1NlYXJjaFN0YXJ0ID09
IHN0YXJ0OwogfQogCkBAIC0yMjExLDcgKzIyMTEsNyBAQCBuZXh0TWF0Y2g6CiAgICAgICAgICAg
ICAvLyBkZXRlcm1pbmluZyBpZiBpdCBpcyBhdCBhIHdvcmQgYm91bmRhcnkuCiAgICAgICAgICAg
ICB1bnNpZ25lZCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBtYXRjaFN0YXJ0OwogICAgICAg
ICAgICAgVTE2X0JBQ0tfMShtX2J1ZmZlci5kYXRhKCksIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRT
dGFydCk7Ci0gICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBzdGFydE9mTGFz
dFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyhtX2J1ZmZlci5kYXRhKCksIHdvcmRCb3Vu
ZGFyeUNvbnRleHRTdGFydCkpOworICAgICAgICAgICAgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0
ID0gUEFMOjpzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyhtX2J1ZmZl
ci5kYXRhKCksIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCkpOwogICAgICAgICAgICAgb3Zlcmxh
cCA9IHN0ZDo6bWluKHNpemUgLSAxLCBzdGQ6Om1heChvdmVybGFwLCBzaXplIC0gd29yZEJvdW5k
YXJ5Q29udGV4dFN0YXJ0KSk7CiAgICAgICAgIH0KICAgICAgICAgbWVtY3B5KG1fYnVmZmVyLmRh
dGEoKSwgbV9idWZmZXIuZGF0YSgpICsgc2l6ZSAtIG92ZXJsYXAsIG92ZXJsYXAgKiBzaXplb2Yo
VUNoYXIpKTsKQEAgLTIzODAsNyArMjM4MCw3IEBAIGNvbnN0ZXhwciB1aW50NjRfdCBjbGFtcGVk
QWRkKHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIpCiAgICAgcmV0dXJuIHN1bSA+PSBhID8gc3VtIDog
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwogfQogCi1TaW1wbGVSYW5nZSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBDaGFyYWN0ZXJS
YW5nZSByYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIGJlaGF2aW9ycykKK1NpbXBsZVJhbmdl
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIFBBTDo6Q2hh
cmFjdGVyUmFuZ2UgcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9ycyBiZWhhdmlvcnMpCiB7CiAg
ICAgYXV0byByZXN1bHRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgcmFuZ2UubG9jYXRpb24gPyBzY29w
ZS5lbmQgOiBzY29wZS5zdGFydCwgKHJhbmdlLmxvY2F0aW9uIHx8IHJhbmdlLmxlbmd0aCkgPyBz
Y29wZS5lbmQgOiBzY29wZS5zdGFydCB9OwogICAgIGF1dG8gcmFuZ2VFbmQgPSBjbGFtcGVkQWRk
KHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwpAQCAtMjQ4NCw3ICsyNDg0LDcgQEAgc3Rh
dGljIGNvbnN0ZXhwciBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgZmluZEl0ZXJhdG9yT3B0aW9ucyhG
aW5kT3B0aW9ucyBvcHRpb25zKQogICAgIHJldHVybiBpdGVyYXRvck9wdGlvbnM7CiB9CiAKLXN0
YXRpYyB2b2lkIGZvckVhY2hNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBjb25zdCBGdW5jdGlvbjxib29sKENo
YXJhY3RlclJhbmdlKT4mIG1hdGNoKQorc3RhdGljIHZvaWQgZm9yRWFjaE1hdGNoKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlv
bnMsIGNvbnN0IEZ1bmN0aW9uPGJvb2woUEFMOjpDaGFyYWN0ZXJSYW5nZSk+JiBtYXRjaCkKIHsK
ICAgICBTZWFyY2hCdWZmZXIgYnVmZmVyKHRhcmdldCwgb3B0aW9ucyk7CiAgICAgaWYgKGJ1ZmZl
ci5uZWVkc01vcmVDb250ZXh0KCkpIHsKQEAgLTI1MTEsMTMgKzI1MTEsMTMgQEAgc3RhdGljIHZv
aWQgZm9yRWFjaE1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNpemVfdCBsYXN0Q2hh
cmFjdGVySW5CdWZmZXJPZmZzZXQgPSBmaW5kSXRlcmF0b3IuY2hhcmFjdGVyT2Zmc2V0KCk7CiAg
ICAgICAgICAgICBBU1NFUlQobGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0ID49IG1hdGNoU3Rh
cnRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKG1hdGNoKENoYXJhY3RlclJhbmdlKGxhc3RDaGFy
YWN0ZXJJbkJ1ZmZlck9mZnNldCAtIG1hdGNoU3RhcnRPZmZzZXQsIG5ld01hdGNoTGVuZ3RoKSkp
CisgICAgICAgICAgICBpZiAobWF0Y2goUEFMOjpDaGFyYWN0ZXJSYW5nZShsYXN0Q2hhcmFjdGVy
SW5CdWZmZXJPZmZzZXQgLSBtYXRjaFN0YXJ0T2Zmc2V0LCBuZXdNYXRjaExlbmd0aCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIFNpbXBs
ZVJhbmdlIHJhbmdlRm9yTWF0Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBGaW5kT3B0aW9u
cyBvcHRpb25zLCBDaGFyYWN0ZXJSYW5nZSBtYXRjaCkKK3N0YXRpYyBTaW1wbGVSYW5nZSByYW5n
ZUZvck1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywg
UEFMOjpDaGFyYWN0ZXJSYW5nZSBtYXRjaCkKIHsKICAgICBhdXRvIG5vTWF0Y2hSZXN1bHQgPSBb
Jl0gKCkgewogICAgICAgICBhdXRvJiBib3VuZGFyeSA9IG9wdGlvbnMuY29udGFpbnMoQmFja3dh
cmRzKSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOwpAQCAtMjU0Myw5ICsyNTQzLDkgQEAgc3Rh
dGljIFNpbXBsZVJhbmdlIHJhbmdlRm9yTWF0Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBG
aW5kT3B0aW9ucyBvcHRpb25zLAogCiBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1aW50NjRfdCB0YXJnZXRPZmZzZXQpCiB7Ci0gICAgQ2hhcmFjdGVyUmFuZ2Ug
Y2xvc2VzdE1hdGNoOworICAgIFBBTDo6Q2hhcmFjdGVyUmFuZ2UgY2xvc2VzdE1hdGNoOwogICAg
IHVpbnQ2NF90IGNsb3Nlc3RNYXRjaERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpOwotICAgIGZvckVhY2hNYXRjaChyYW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBb
Jl0gKENoYXJhY3RlclJhbmdlIG1hdGNoKSB7CisgICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJn
ZXQsIG9wdGlvbnMsIFsmXSAoUEFMOjpDaGFyYWN0ZXJSYW5nZSBtYXRjaCkgewogICAgICAgICBh
dXRvIGRpc3RhbmNlID0gW10gKHVpbnQ2NF90IGEsIHVpbnQ2NF90IGIpIC0+IHVpbnQ2NF90IHsK
ICAgICAgICAgICAgIHJldHVybiBzdGQ6OmFicyhzdGF0aWNfY2FzdDxpbnQ2NF90PihhIC0gYikp
OwogICAgICAgICB9OwpAQCAtMjU2OCw4ICsyNTY4LDggQEAgU2ltcGxlUmFuZ2UgZmluZFBsYWlu
VGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5k
T3AKICAgICAvLyBXaGVuIHNlYXJjaGluZyBmb3J3YXJkIHN0b3Agc2luY2Ugd2Ugd2FudCB0aGUg
Zmlyc3QgbWF0Y2guCiAgICAgLy8gV2hlbiBzZWFyY2hpbmcgYmFja3dhcmQga2VlcCBnb2luZyBz
aW5jZSB3ZSB3YW50IHRoZSBsYXN0IG1hdGNoLgogICAgIGJvb2wgc3RvcEFmdGVyRmluZGluZ01h
dGNoID0gIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKTsKLSAgICBDaGFyYWN0ZXJSYW5nZSBs
YXN0TWF0Y2hGb3VuZDsKLSAgICBmb3JFYWNoTWF0Y2gocmFuZ2UsIHRhcmdldCwgb3B0aW9ucywg
WyZdIChDaGFyYWN0ZXJSYW5nZSBtYXRjaCkgeworICAgIFBBTDo6Q2hhcmFjdGVyUmFuZ2UgbGFz
dE1hdGNoRm91bmQ7CisgICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsm
XSAoUEFMOjpDaGFyYWN0ZXJSYW5nZSBtYXRjaCkgewogICAgICAgICBsYXN0TWF0Y2hGb3VuZCA9
IG1hdGNoOwogICAgICAgICByZXR1cm4gc3RvcEFmdGVyRmluZGluZ01hdGNoOwogICAgIH0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggYWI3N2Y0MjA2ZWJhMDQzNTJm
MGQ1MGZlMTIyYjE3ZWUxZTRiOGMxYi4uNzNiZDViNTBmYmRjNDQ3NDBlMGMzMmYyMTc1ZGMyZWE2
ZDc4ZTI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCkBAIC0yNSw3ICsy
NSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmFuZ2UuaCIKKyNp
bmNsdWRlIDxwYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5oPgogI2luY2x1ZGUgIkZpbmRPcHRpb25z
LmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJJbmxpbmVJdGVyYXRvclRleHRCb3guaCIKQEAgLTM5LDEwICszOSwxMCBAQCBjbGFz
cyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiAKIC8vIENoYXJhY3RlciByYW5nZXMgYmFzZWQgb24gY2hh
cmFjdGVycyBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgogV0VCQ09SRV9FWFBPUlQgdWludDY0X3Qg
Y2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMg
PSB7IH0pOwotQ2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3QgQm91bmRhcnlQb2lu
dCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9
KTsKLUNoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29w
ZSwgY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOworUEFM
OjpDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiBzdGFy
dCwgY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOworUEFM
OjpDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUs
IGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9KTsKIEJvdW5k
YXJ5UG9pbnQgcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29w
ZSwgdWludDY0X3QsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9IHsgfSk7Ci1XRUJDT1JFX0VYUE9S
VCBTaW1wbGVSYW5nZSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNj
b3BlLCBDaGFyYWN0ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9KTsKK1dFQkNP
UkVfRVhQT1JUIFNpbXBsZVJhbmdlIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYgc2NvcGUsIFBBTDo6Q2hhcmFjdGVyUmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9
IHsgfSk7CiAKIC8vIFRleHQgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBwbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlv
cnMgPSB7IH0sIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwpAQCAtMjkzLDEyICsyOTMs
MTIgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkTG9va0FoZWFkIHsgdHJ1ZSB9OwogfTsKIAot
aW5saW5lIENoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQm
IHN0YXJ0LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9ycyBi
ZWhhdmlvcnMpCitpbmxpbmUgUEFMOjpDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25z
dCBCb3VuZGFyeVBvaW50JiBzdGFydCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SXRl
cmF0b3JCZWhhdmlvcnMgYmVoYXZpb3JzKQogewogICAgIHJldHVybiB7IGNoYXJhY3RlckNvdW50
KHsgc3RhcnQsIHJhbmdlLnN0YXJ0IH0sIGJlaGF2aW9ycyksIGNoYXJhY3RlckNvdW50KHJhbmdl
LCBiZWhhdmlvcnMpIH07CiB9CiAKLWlubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4
dEl0ZXJhdG9yQmVoYXZpb3JzIGJlaGF2aW9ycykKK2lubGluZSBQQUw6OkNoYXJhY3RlclJhbmdl
IGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgYmVoYXZpb3JzKQogewogICAgIHJldHVy
biBjaGFyYWN0ZXJSYW5nZShzY29wZS5zdGFydCwgcmFuZ2UsIGJlaGF2aW9ycyk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggMmMzZTA3OGEzMmEy
ZmVmMjFkYTRmZWNmOWRkYWRiNzE0MmFlZjMzMy4uYWI5Njk1Y2Q0MzdmY2QzYjEzYmE3MTI4Mjhi
NjdmNjc2OTEzNDUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcApAQCAtMTIwLDE0ICsxMjAsMTQgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBQb3NpdGlv
bigpOwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7Ci0g
ICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJl
Y3Rpb24oKTsKIAogICAgIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9yZGVyQ2FjaGUgb3Jk
ZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gW3J1biwgb2Zmc2V0
XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwog
ICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3Np
dGlvbik7CisgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7
CiAKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogCkBAIC0xMzgs
NyArMTM4LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpIHsK
ICAgICAgICAgICAgICAgICBydW4udHJhdmVyc2VQcmV2aW91c09uTGluZSgpOwogICAgICAgICAg
ICAgICAgIGlmICghcnVuKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQo
KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBQb3NpdGlv
biBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QK
ICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0aGUgbGVmdC4KICAgICAgICAgICAgICAg
ICBhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFr
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1J1bikgewotICAgICAgICAgICAgICAg
ICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb25PbkxlZnQgPSBwcmltYXJ5RGly
ZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlk
YXRlKG1fZGVlcFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBydW5PbkxlZnQg
PSBwb3NpdGlvbk9uTGVmdC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURp
cmVjdGlvbikucnVuOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuT25MZWZ0ICYmIHJ1bk9u
TGVmdC0+bGluZSgpID09IHJ1bi0+bGluZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKCk7CkBAIC0xNzYsMTMgKzE3NiwxMyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9z
aXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIAogICAgICAgICAg
ICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewogICAgICAgICAg
ICAgICAgIGlmICghcHJldmlvdXNSdW4pIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBsb2dp
Y2FsU3RhcnQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUgorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxTdGFydCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIKICAgICAgICAgICAgICAgICAgICAgICAgID8gSW5saW5lSXRl
cmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCks
IG9yZGVyQ2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IElubGluZUl0ZXJhdG9yOjps
YXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2Fj
aGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFN0YXJ0KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBydW4gPSBsb2dpY2FsU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWlu
aW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9mZnNldCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJl
dE9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI0Myw3ICsyNDMsNyBAQCBQb3NpdGlvbiBWaXNp
YmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAg
ICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIg
PyBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKTsK
KyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWF4aW11bUNh
cmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMjg2LDE0ICsyODYsMTQgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZp
c3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwotICAg
IFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9IHAucHJpbWFyeURpcmVjdGlvbigpOwor
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0
aW9uKCk7CiAKICAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUxvZ2ljYWxPcmRlckNhY2hlIG9yZGVy
Q2FjaGU7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIFtydW4sIG9mZnNldF0g
PSBwLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKTsKICAg
ICAgICAgaWYgKCFydW4pCi0gICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRp
b24pOworICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlv
bikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwog
CiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKIApAQCAtMzA0LDcg
KzMwNCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgIGlmICghcmVuZGVyZXItPm5vZGUoKSkgewog
ICAgICAgICAgICAgICAgIHJ1bi50cmF2ZXJzZU5leHRPbkxpbmUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXJ1bikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVw
UG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsK
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBydW4tPmxlZnRtb3N0Q2FyZXRPZmZzZXQoKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMyw3ICszMjMsNyBAQCBQb3NpdGlvbiBWaXNp
YmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgLy8gT3ZlcnNob3QgdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAgICAgIGF1
dG8gbmV4dFJ1biA9IHJ1bi0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFuZXh0UnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBv
c2l0aW9uT25SaWdodCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8g
bmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgUG9zaXRpb24gcG9zaXRpb25PblJpZ2h0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVl
cFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3Np
dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcnVuT25SaWdodCA9IHBvc2l0aW9uT25S
aWdodC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbikucnVu
OwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuT25SaWdodCAmJiBydW5PblJpZ2h0LT5saW5l
KCkgPT0gcnVuLT5saW5lKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRp
b24oKTsKQEAgLTM0MiwxNCArMzQyLDE0IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmln
aHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIAogICAgICAgICAgICAgaWYgKHJ1
bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewogICAgICAgICAgICAgICAgIGlm
ICghbmV4dFJ1bikgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxFbmQgPSBwcmlt
YXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUgorICAgICAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxFbmQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSCiAgICAgICAgICAgICAgICAgICAgICAgICA/IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9u
TGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICA6IElubGluZUl0ZXJhdG9yOjpmaXJzdExlYWZPbkxpbmVJbkxv
Z2ljYWxPcmRlcldpdGhOb2RlKHJ1bi0+bGluZSgpLCBvcmRlckNhY2hlKTsKIAogICAgICAgICAg
ICAgICAgICAgICBpZiAobG9naWNhbEVuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcnVu
ID0gbG9naWNhbEVuZDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+
cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6
IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5t
YXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDEzLDcgKzQxMyw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgbGV2
ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0g
cHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1heGltdW1DYXJl
dE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcnVu
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjM2LDcgKzYzNiw3
IEBAIElubGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNl
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlubGluZVJ1bkFuZE9mZnNldCht
X2FmZmluaXR5KTsKIH0KIAotSW5saW5lUnVuQW5kT2Zmc2V0IFZpc2libGVQb3NpdGlvbjo6aW5s
aW5lUnVuQW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QKK0lu
bGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNldChQQUw6
OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gbV9k
ZWVwUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rp
b24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggYTky
Y2E4MWJjZWZlM2U0NzZjNGM1NDY2MGQ5NzIwODRlZWVjZmFjNi4uY2I5ODQzMDNiZGQxNWE1MWI0
ZGVkOTM1YzM5Zjc0YjM4NTM4YTY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkg
PyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkg
OiAwOyB9CiAKICAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KCkgY29u
c3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGluZVJ1bkFuZE9mZnNldChUZXh0RGlyZWN0
aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OworICAgIElubGluZVJ1bkFuZE9mZnNldCBpbmxp
bmVSdW5BbmRPZmZzZXQoUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0
OwogCiAgICAgc3RydWN0IExvY2FsQ2FyZXRSZWN0IHsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGM2ODJlODI4OTZh
MDVkMmE3ODQzMzg3NzNjYjMwZGNmZDUxYzI0NTAuLmVlNzdkYzcxMDE2ZmUyYWYwODBiYzkxYTUx
MmM1MTJiZmVkZTkzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHRCb3Vu
ZGFyaWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaD4KICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8dW5pY29kZS91YnJrLmg+CkBAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiB2aXN1YWxXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24KIAogICAgIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVGV4dERpcmVj
dGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBibG9ja0Rp
cmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkpOwogICAgIElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgcHJldmlv
dXNseVZpc2l0ZWRSdW47CiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnQgPSB2aXNpYmxlUG9z
aXRpb247CiAgICAgc3RkOjpvcHRpb25hbDxWaXNpYmxlUG9zaXRpb24+IHByZXZpb3VzUG9zaXRp
b247CkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3Jk
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24KIAogICAgICAg
ICBib29sIGlzV29yZEJyZWFrOwogICAgICAgICBib29sIGJveEhhc1NhbWVEaXJlY3Rpb25hbGl0
eUFzQmxvY2sgPSBydW4tPmRpcmVjdGlvbigpID09IGJsb2NrRGlyZWN0aW9uOwotICAgICAgICBi
b29sIG1vdmluZ0JhY2t3YXJkID0gKGRpcmVjdGlvbiA9PSBNb3ZlTGVmdCAmJiBydW4tPmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikgfHwgKGRpcmVjdGlvbiA9PSBNb3ZlUmlnaHQg
JiYgcnVuLT5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAgICBib29s
IG1vdmluZ0JhY2t3YXJkID0gKGRpcmVjdGlvbiA9PSBNb3ZlTGVmdCAmJiBydW4tPmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB8fCAoZGlyZWN0aW9uID09IE1vdmVSaWdo
dCAmJiBydW4tPmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKTsKICAgICAg
ICAgaWYgKChza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ICYmIGJveEhhc1NhbWVEaXJlY3Rpb25h
bGl0eUFzQmxvY2spCiAgICAgICAgICAgICB8fCAoIXNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQg
JiYgbW92aW5nQmFja3dhcmQpKSB7CiAgICAgICAgICAgICBib29sIGxvZ2ljYWxTdGFydEluUmVu
ZGVyZXIgPSBvZmZzZXRJblJ1biA9PSB0ZXh0UnVuLT5zdGFydCgpICYmIHByZXZpb3VzUnVuSW5E
aWZmZXJlbnRMaW5lOwpAQCAtMzk2LDggKzM5Niw4IEBAIFZpc2libGVQb3NpdGlvbiBsZWZ0V29y
ZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBib29sIHNr
CiAgICAgCiAgICAgLy8gRklYTUU6IEhvdyBzaG91bGQgd2UgaGFuZGxlIGEgbm9uLWVkaXRhYmxl
IHBvc2l0aW9uPwogICAgIGlmIChsZWZ0V29yZEJyZWFrLmlzTnVsbCgpICYmIGlzRWRpdGFibGVQ
b3NpdGlvbih2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpIHsKLSAgICAgICAgVGV4
dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBsZWZ0V29yZEJyZWFrID0g
YmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gc3RhcnRPZkVkaXRhYmxlQ29u
dGVudCh2aXNpYmxlUG9zaXRpb24pIDogZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0
aW9uKTsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Cisg
ICAgICAgIGxlZnRXb3JkQnJlYWsgPSBibG9ja0RpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiA/IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKSA6IGVuZE9m
RWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlvbik7CiAgICAgfQogICAgIHJldHVybiBsZWZ0
V29yZEJyZWFrOwogfQpAQCAtNDA5LDggKzQwOSw4IEBAIFZpc2libGVQb3NpdGlvbiByaWdodFdv
cmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgYm9vbCBz
CiAKICAgICAvLyBGSVhNRTogSG93IHNob3VsZCB3ZSBoYW5kbGUgYSBub24tZWRpdGFibGUgcG9z
aXRpb24/CiAgICAgaWYgKHJpZ2h0V29yZEJyZWFrLmlzTnVsbCgpICYmIGlzRWRpdGFibGVQb3Np
dGlvbih2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpIHsKLSAgICAgICAgVGV4dERp
cmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJs
ZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICByaWdodFdvcmRCcmVhayA9IGJs
b2NrRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IGVuZE9mRWRpdGFibGVDb250ZW50
KHZpc2libGVQb3NpdGlvbikgOiBzdGFydE9mRWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlv
bik7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlv
bk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAg
ICAgICByaWdodFdvcmRCcmVhayA9IGJsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSID8gZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKSA6IHN0YXJ0T2ZF
ZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIHJpZ2h0
V29yZEJyZWFrOwogfQpAQCAtNDQ5LDcgKzQ0OSw3IEBAIHVuc2lnbmVkIHN1ZmZpeExlbmd0aEZv
clJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFy
CiAgICAgVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoZm9yd2FyZHNTY2FuUmFuZ2UpOwog
ICAgIHdoaWxlICghZm9yd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIFN0cmluZ1Zp
ZXcgdGV4dCA9IGZvcndhcmRzSXRlcmF0b3IudGV4dCgpOwotICAgICAgICB1bnNpZ25lZCBpID0g
ZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dCk7CisgICAgICAgIHVuc2lnbmVkIGkg
PSBQQUw6OmVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KHRleHQpOwogICAgICAgICBhcHBl
bmQoc3RyaW5nLCB0ZXh0LnN1YnN0cmluZygwLCBpKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCAr
PSBpOwogICAgICAgICBpZiAoaSA8IHRleHQubGVuZ3RoKCkpCkBAIC00NjUsNyArNDY1LDcgQEAg
dW5zaWduZWQgcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGJhY2t3YXJk
c1NjYW5SYW5nZSwgVmVjdG9yPFVDaGEKICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJhY2t3YXJkc1NjYW5SYW5nZSk7CiAgICAgd2hpbGUgKCFi
YWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIFN0cmluZ1ZpZXcgdGV4dCA9IGJh
Y2t3YXJkc0l0ZXJhdG9yLnRleHQoKTsKLSAgICAgICAgaW50IGkgPSBzdGFydE9mTGFzdFdvcmRC
b3VuZGFyeUNvbnRleHQodGV4dCk7CisgICAgICAgIGludCBpID0gUEFMOjpzdGFydE9mTGFzdFdv
cmRCb3VuZGFyeUNvbnRleHQodGV4dCk7CiAgICAgICAgIHByZXBlbmQoc3RyaW5nLCB0ZXh0LnN1
YnN0cmluZyhpKSk7CiAgICAgICAgIHByZWZpeExlbmd0aCArPSB0ZXh0Lmxlbmd0aCgpIC0gaTsK
ICAgICAgICAgaWYgKGkgPiAwKQpAQCAtNTU4LDcgKzU1OCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBC
b3VuZGFyCiAgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoKmZvcndh
cmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQoKTsgZm9yd2FyZHNJdGVyYXRv
ci5hZHZhbmNlKCkpCiAgICAgICAgICAgICBhcHBlbmQoc3RyaW5nLCBmb3J3YXJkc0l0ZXJhdG9y
LnRleHQoKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN0cmluZy5zaXplKCk7Ci0gICAgfSBl
bHNlIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkocG9zaXRpb24uY2hhcmFjdGVy
QmVmb3JlKCkpKSB7CisgICAgfSBlbHNlIGlmIChQQUw6OnJlcXVpcmVzQ29udGV4dEZvcldvcmRC
b3VuZGFyeShwb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpIHsKICAgICAgICAgYXV0byBmb3J3
YXJkc1NjYW5SYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWFyY2hSYW5nZS0+ZW5kLCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpib3VuZGFyeSkpOwogICAgICAgICBzdWZmaXhM
ZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsK
ICAgICB9CkBAIC01OTUsNyArNTk1LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91
bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmMKICAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAw
OwogCi0gICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjLmNoYXJhY3RlckFm
dGVyKCkpKSB7CisgICAgaWYgKFBBTDo6cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMu
Y2hhcmFjdGVyQWZ0ZXIoKSkpIHsKICAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoYm91bmRh
cnlEb2N1bWVudCksIGMpOwogICAgICAgICBpZiAoIWJhY2t3YXJkc1NjYW5SYW5nZSkKICAgICAg
ICAgICAgIHJldHVybiB7IH07CkBAIC02MzgsMTQgKzYzOCwxNCBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2Vh
cmNoRnVuYwogdW5zaWduZWQgc3RhcnRXb3JkQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNp
Z25lZCBvZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9y
ZUNvbnRleHQsIGJvb2wmIG5lZWRNb3JlQ29udGV4dCkKIHsKICAgICBBU1NFUlQob2Zmc2V0KTsK
LSAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmICFzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNv
bnRleHQodGV4dC5zdWJzdHJpbmcoMCwgb2Zmc2V0KSkpIHsKKyAgICBpZiAobWF5SGF2ZU1vcmVD
b250ZXh0ICYmICFQQUw6OnN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0LnN1YnN0
cmluZygwLCBvZmZzZXQpKSkgewogICAgICAgICBuZWVkTW9yZUNvbnRleHQgPSB0cnVlOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CiAgICAg
aW50IHN0YXJ0LCBlbmQ7CiAgICAgVTE2X0JBQ0tfMSh0ZXh0LCAwLCBvZmZzZXQpOwotICAgIGZp
bmRXb3JkQm91bmRhcnkodGV4dCwgb2Zmc2V0LCAmc3RhcnQsICZlbmQpOworICAgIFBBTDo6Zmlu
ZFdvcmRCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsICZzdGFydCwgJmVuZCk7CiAgICAgcmV0dXJuIHN0
YXJ0OwogfQogCkBAIC02NjksMTMgKzY2OSwxMyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZldv
cmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFV29yZFNpZGUgc2lkZSkKIHVuc2lnbmVkIGVu
ZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIHVuc2lnbmVkIG9mZnNldCwgQm91bmRhcnlT
ZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IG1heUhhdmVNb3JlQ29udGV4dCwgYm9vbCYgbmVlZE1v
cmVDb250ZXh0KQogewogICAgIEFTU0VSVChvZmZzZXQgPD0gdGV4dC5sZW5ndGgoKSk7Ci0gICAg
aWYgKG1heUhhdmVNb3JlQ29udGV4dCAmJiBlbmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dCh0
ZXh0LnN1YnN0cmluZyhvZmZzZXQpKSA9PSB0ZXh0Lmxlbmd0aCgpIC0gb2Zmc2V0KSB7CisgICAg
aWYgKG1heUhhdmVNb3JlQ29udGV4dCAmJiBQQUw6OmVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250
ZXh0KHRleHQuc3Vic3RyaW5nKG9mZnNldCkpID09IHRleHQubGVuZ3RoKCkgLSBvZmZzZXQpIHsK
ICAgICAgICAgbmVlZE1vcmVDb250ZXh0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRleHQubGVu
Z3RoKCk7CiAgICAgfQogICAgIG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwogICAgIGludCBlbmQ7
Ci0gICAgZmluZEVuZFdvcmRCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsICZlbmQpOworICAgIFBBTDo6
ZmluZEVuZFdvcmRCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsICZlbmQpOwogICAgIHJldHVybiBlbmQ7
CiB9CiAKQEAgLTY5NywxMiArNjk3LDEyIEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZldvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFV29yZFNpZGUgc2lkZSkKIAogc3RhdGljIHVuc2lnbmVk
IHByZXZpb3VzV29yZFBvc2l0aW9uQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9yZUNvbnRl
eHQsIGJvb2wmIG5lZWRNb3JlQ29udGV4dCkKIHsKLSAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0
ICYmICFzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dC5zdWJzdHJpbmcoMCwgb2Zm
c2V0KSkpIHsKKyAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmICFQQUw6OnN0YXJ0T2ZMYXN0
V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0LnN1YnN0cmluZygwLCBvZmZzZXQpKSkgewogICAgICAg
ICBuZWVkTW9yZUNvbnRleHQgPSB0cnVlOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
bmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZpbmROZXh0V29yZEZyb21JbmRl
eCh0ZXh0LCBvZmZzZXQsIGZhbHNlKTsKKyAgICByZXR1cm4gUEFMOjpmaW5kTmV4dFdvcmRGcm9t
SW5kZXgodGV4dCwgb2Zmc2V0LCBmYWxzZSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c1dvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtNzEyLDEy
ICs3MTIsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZFBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAKIHN0YXRpYyB1bnNpZ25lZCBuZXh0V29yZFBvc2l0
aW9uQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIEJvdW5kYXJ5U2Vh
cmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9yZUNvbnRleHQsIGJvb2wmIG5lZWRNb3Jl
Q29udGV4dCkKIHsKLSAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmIGVuZE9mRmlyc3RXb3Jk
Qm91bmRhcnlDb250ZXh0KHRleHQuc3Vic3RyaW5nKG9mZnNldCkpID09IHRleHQubGVuZ3RoKCkg
LSBvZmZzZXQpIHsKKyAgICBpZiAobWF5SGF2ZU1vcmVDb250ZXh0ICYmIFBBTDo6ZW5kT2ZGaXJz
dFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dC5zdWJzdHJpbmcob2Zmc2V0KSkgPT0gdGV4dC5sZW5n
dGgoKSAtIG9mZnNldCkgewogICAgICAgICBuZWVkTW9yZUNvbnRleHQgPSB0cnVlOwogICAgICAg
ICByZXR1cm4gdGV4dC5sZW5ndGgoKTsKICAgICB9CiAgICAgbmVlZE1vcmVDb250ZXh0ID0gZmFs
c2U7Ci0gICAgcmV0dXJuIGZpbmROZXh0V29yZEZyb21JbmRleCh0ZXh0LCBvZmZzZXQsIHRydWUp
OworICAgIHJldHVybiBQQUw6OmZpbmROZXh0V29yZEZyb21JbmRleCh0ZXh0LCBvZmZzZXQsIHRy
dWUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMTQ2NywxNCArMTQ2NywxNCBAQCBib29sIGlzRW5kT2ZF
ZGl0YWJsZU9yTm9uRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcCkKICAg
ICByZXR1cm4gcC5pc05vdE51bGwoKSAmJiBwLm5leHQoKS5pc051bGwoKTsKIH0KIAotVmlzaWJs
ZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpCitWaXNpYmxlUG9z
aXRpb24gbGVmdEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KQogewotICAgIHJl
dHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbG9naWNhbFN0YXJ0T2ZMaW5l
KGMsIHJlYWNoZWRCb3VuZGFyeSkgOiBsb2dpY2FsRW5kT2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFy
eSk7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IGxv
Z2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpIDogbG9naWNhbEVuZE9mTGluZShj
LCByZWFjaGVkQm91bmRhcnkpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBi
b29sKiByZWFjaGVkQm91bmRhcnkpCitWaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGlu
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IGJvb2wqIHJlYWNoZWRCb3VuZGFyeSkKIHsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5KSA6IGxv
Z2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpOworICAgIHJldHVybiBkaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBsb2dpY2FsRW5kT2ZMaW5lKGMsIHJlYWNo
ZWRCb3VuZGFyeSkgOiBsb2dpY2FsU3RhcnRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5KTsKIH0K
IAogc3RhdGljIGJvb2wgZGlyZWN0aW9uSXNEb3duc3RyZWFtKFNlbGVjdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAppbmRleCBhNmRlNDIx
NTI2ZDQ2ZTI4MmZmNDA3NTRmNzA5Mzg2YmQ5MzMxMGYzLi4yZjk4MGEyNWI1YmIwYjU5YWMwYWVh
MjNmNzFlOWY0NjllZTBmN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgK
QEAgLTYzLDggKzYzLDggQEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0VuZE9mTGluZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKIFZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5ID0gbnVsbHB0cik7CiBW
aXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBi
b29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKTsKIGJvb2wgaXNMb2dpY2FsRW5kT2ZMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotVmlzaWJsZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVk
Qm91bmRhcnkpOwotVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiwgVGV4dERpcmVjdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KTsKK1Zp
c2libGVQb3NpdGlvbiBsZWZ0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
UEFMOjpUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOworVmlzaWJsZVBvc2l0
aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUEFMOjpUZXh0
RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOwogCiAvLyBwYXJhZ3JhcGhzIChwZXJo
YXBzIGEgbWlzbm9tZXIsIGNhbiBiZSBkaXZpZGVkIGJ5IGxpbmUgYnJlYWsgZWxlbWVudHMpCiBX
RUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0KaW5kZXggYzMyNzY4YTlhODEzZmViYWMyMGFjZjcyODVlZDU3ZjY3ZTllMmI5NC4u
ODYyOTMzMmI0YWQ0YjVhMTBkNDE5M2IwNTJhN2YyZWQzMDU1MGI2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtNTAxLDcgKzUwMSw3IEBA
IE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiBjb250ZXh0UmFuZ2UsIE9wCiAgICAgICAgICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+
IGZyYWdtZW50UmFuZ2VzOwogICAgICAgICAgICAgQ0ZJbmRleCBmcmFnbWVudEluZGV4ID0gcXVl
cnlSYW5nZS5zdGFydC5xdWVyeUluZGV4OwogICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXgg
PT0gcXVlcnlSYW5nZS5lbmQucXVlcnlJbmRleCkgewotICAgICAgICAgICAgICAgIENoYXJhY3Rl
clJhbmdlIGZyYWdtZW50UmFuZ2U7CisgICAgICAgICAgICAgICAgUEFMOjpDaGFyYWN0ZXJSYW5n
ZSBmcmFnbWVudFJhbmdlOwogICAgICAgICAgICAgICAgIGZyYWdtZW50UmFuZ2UubG9jYXRpb24g
PSBxdWVyeVJhbmdlLnN0YXJ0Lm9mZnNldDsKICAgICAgICAgICAgICAgICBmcmFnbWVudFJhbmdl
Lmxlbmd0aCA9IHF1ZXJ5UmFuZ2UuZW5kLm9mZnNldCAtIHF1ZXJ5UmFuZ2Uuc3RhcnQub2Zmc2V0
OwogICAgICAgICAgICAgICAgIGZyYWdtZW50UmFuZ2VzLmFwcGVuZChyZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UoaXRlcmF0b3IucmFuZ2UoKSwgZnJhZ21lbnRSYW5nZSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDhjMDE4ZDg1Y2U0
ZmI2Mzg3ZmIwZTE5ZTliMzlmZjNhMTZlNGRlMmIuLmY1YTUwZWY4ODg2NDdmZWQ4YjExYzI3ZjE1
M2ZmYmE1MjY4ZjlhMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5k
VGltZUlucHV0VHlwZS5jcHAKQEAgLTY3LDQ2ICs2Nyw0NiBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogc3RhdGljIGNvbnN0IGludCBtc2VjUGVyTWludXRlID0gNjAgKiAxMDAwOwogc3Rh
dGljIGNvbnN0IGludCBtc2VjUGVyU2Vjb25kID0gMTAwMDsKIAotdm9pZCBCYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGU6OkRhdGVUaW1lRm9ybWF0VmFsaWRhdG9yOjp2aXNpdEZpZWxkKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQpCit2b2lkIEJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZTo6RGF0ZVRpbWVGb3JtYXRWYWxpZGF0b3I6OnZpc2l0RmllbGQoUEFMOjpEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50KQogewogICAgIHN3aXRjaCAoZmllbGRU
eXBlKSB7Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjoKKyAgICBjYXNl
IFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXI6CiAgICAgICAgIG1fcmVzdWx0cy5h
ZGQoRGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzWWVhcik7CiAgICAgICAgIGJy
ZWFrOwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGg6Ci0gICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhTdGFuZEFsb25lOgorICAgIGNhc2UgUEFM
OjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVNb250aFN0YW5kQWxvbmU6CiAgICAgICAgIG1fcmVzdWx0cy5hZGQo
RGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzTW9udGgpOwogICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtPZlllYXI6CisgICAg
Y2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZZZWFyOgogICAgICAgICBt
X3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6Okhhc1dlZWspOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9m
TW9udGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1vbnRo
OgogICAgICAgICBtX3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6
Okhhc0RheSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlUGVyaW9kOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVy
aW9kOgogICAgICAgICBtX3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3Vs
dHM6Okhhc01lcmlkaWVtKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVIb3VyMTE6Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
SG91cjEyOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgor
ICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOgogICAgICAgICBt
X3Jlc3VsdHMuYWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6Okhhc0hvdXIpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIy
MzoKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CisgICAgY2FzZSBQ
QUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgY2FzZSBQQUw6OkRhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6CiAgICAgICAgIG1fcmVzdWx0cy5hZGQoRGF0ZVRp
bWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzSG91cik7CiAgICAgICAgIG1fcmVzdWx0cy5h
ZGQoRGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzTWVyaWRpZW0pOwogICAgICAg
ICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKKyAg
ICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZToKICAgICAgICAgbV9y
ZXN1bHRzLmFkZChEYXRlVGltZUZvcm1hdFZhbGlkYXRpb25SZXN1bHRzOjpIYXNNaW51dGUpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29u
ZDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoKICAgICAg
ICAgbV9yZXN1bHRzLmFkZChEYXRlVGltZUZvcm1hdFZhbGlkYXRpb25SZXN1bHRzOjpIYXNTZWNv
bmQpOwogICAgICAgICBicmVhazsKIApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlOjpEYXRlVGltZUZvcm1hdFZhbGlkYXRvcjo6dmlzaXRGaWVsZChEYXRl
VGltZUZvcm1hCiAKIGJvb2wgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpEYXRlVGltZUZvcm1h
dFZhbGlkYXRvcjo6dmFsaWRhdGVGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3JtYXQsIGNvbnN0IEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZSYgaW5wdXRUeXBlKQogewotICAgIGlmICghRGF0ZVRpbWVG
b3JtYXQ6OnBhcnNlKGZvcm1hdCwgKnRoaXMpKQorICAgIGlmICghUEFMOjpEYXRlVGltZUZvcm1h
dDo6cGFyc2UoZm9ybWF0LCAqdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5wdXRUeXBlLmlzVmFsaWRGb3JtYXQobV9yZXN1bHRzKTsKIH0KQEAgLTU0NCw3ICs1NDQs
NyBAQCBib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0dXBEYXRlVGltZUNob29zZXJQ
YXJhbWV0ZXJzKERhdGVUaW1lQ2hvb3NlclBhcgogICAgIHBhcmFtZXRlcnMuY3VycmVudFZhbHVl
ID0gZWxlbWVudC52YWx1ZSgpOwogCiAgICAgYXV0byogY29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQu
Y29tcHV0ZWRTdHlsZSgpOwotICAgIHBhcmFtZXRlcnMuaXNBbmNob3JFbGVtZW50UlRMID0gY29t
cHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgIHBhcmFt
ZXRlcnMuaXNBbmNob3JFbGVtZW50UlRMID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCkgPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgcGFyYW1ldGVycy51c2VEYXJrQXBwZWFyYW5j
ZSA9IGRvY3VtZW50LnVzZURhcmtBcHBlYXJhbmNlKGNvbXB1dGVkU3R5bGUpOwogCiAgICAgYXV0
byBkYXRlID0gcGFyc2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQudmFsdWUoKSkudmFsdWVfb3Io
RGF0ZUNvbXBvbmVudHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VE
YXRlQW5kVGltZUlucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaAppbmRleCBjNzI5YzkyMmFiMzhiYThkOTRkNDc0NDU3MzNhZGEzMGM1OTVl
Mjc2Li45NzA1YTRkNjg3NjQ4NmUyZmE3Mjg2MTIyMWVjYzM5NDVkNWMyYjU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJEYXRlVGltZUNob29zZXIuaCIKICNpbmNsdWRlICJEYXRlVGltZUNo
b29zZXJDbGllbnQuaCIKICNpbmNsdWRlICJEYXRlVGltZUVkaXRFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRGF0ZVRpbWVGb3JtYXQuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5o
PgogI2luY2x1ZGUgIklucHV0VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApA
QCAtNzksMTEgKzc5LDExIEBAIHByb3RlY3RlZDoKICAgICBib29sIHZhbHVlTWlzc2luZyhjb25z
dCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBEYXRlVGltZUZv
cm1hdFZhbGlkYXRvciBmaW5hbCA6IHB1YmxpYyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVy
IHsKKyAgICBjbGFzcyBEYXRlVGltZUZvcm1hdFZhbGlkYXRvciBmaW5hbCA6IHB1YmxpYyBQQUw6
OkRhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgRGF0
ZVRpbWVGb3JtYXRWYWxpZGF0b3IoKSB7IH0KIAotICAgICAgICB2b2lkIHZpc2l0RmllbGQoRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KTsKKyAgICAgICAgdm9pZCB2aXNpdEZpZWxkKFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KTsKICAgICAgICAgdm9pZCB2aXNpdExp
dGVyYWwoY29uc3QgU3RyaW5nJikgeyB9CiAKICAgICAgICAgYm9vbCB2YWxpZGF0ZUZvcm1hdChj
b25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCmluZGV4IDc1MjMw
MTdiYTcyOTQwNTYzYjc1ZjQ2NmE2OGVkMWNjYjNkZWU4YmEuLmE3ODI2ZGZiOGYyYjE5MTIxZWRk
Y2E5MzE2Y2Y1ZjQyYWU0ZDEyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0
b3J5RG9jdW1lbnQuY3BwCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBGVFBEaXJlY3RvcnlEb2N1
bWVudFBhcnNlcjo6YXBwZW5kKFJlZlB0cjxTdHJpbmdJbXBsPiYmIGlucHV0U291cmNlKQogICAg
IGJvb2wgZm91bmROZXdMaW5lID0gZmFsc2U7CiAKICAgICBtX2Rlc3QgPSBtX2J1ZmZlcjsKLSAg
ICBTZWdtZW50ZWRTdHJpbmcgc3RyaW5nIHsgU3RyaW5nIHsgV1RGTW92ZShpbnB1dFNvdXJjZSkg
fSB9OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIHN0cmluZyB7IFN0cmluZyB7IFdURk1vdmUo
aW5wdXRTb3VyY2UpIH0gfTsKICAgICB3aGlsZSAoIXN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgVUNoYXIgYyA9IHN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKaW5kZXggYTcxYTYzYjEwZDI1Nzg4MjkyMWQ3NTM5NDA2ODFjNjE2ZTJj
MzUzMy4uZjBhMjhiMTA5ZmIzMzdkMDkyMGJiYjk5NWYwYmE3ZmRmNDVjNDQyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTg5OCwxOCArODk4LDE4IEBAIGJvb2wgSFRNTEVs
ZW1lbnQ6Omhhc0RpcmVjdGlvbkF1dG8oKSBjb25zdAogICAgIHJldHVybiAoaGFzVGFnTmFtZShi
ZGlUYWcpICYmIGRpcmVjdGlvbi5pc051bGwoKSkgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZGlyZWN0aW9uLCAiYXV0byIpOwogfQogCi1UZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50
OjpkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbnN0
CitQQUw6OlRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJB
dXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3QKIHsKICAgICBpZiAoIShzZWxmT3JBbmNl
c3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSAmJiBoYXNEaXJlY3Rpb25BdXRvKCkpKSB7CiAgICAg
ICAgIGlzQXV0byA9IGZhbHNlOwotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOwor
ICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgfQogCiAgICAgaXNB
dXRvID0gdHJ1ZTsKICAgICByZXR1cm4gZGlyZWN0aW9uYWxpdHkoKTsKIH0KIAotVGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpIGNvbnN0CitQQUw6OlRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVj
dGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKSBjb25zdAogewog
ICAgIGlmIChpc1RleHRGaWVsZCgpKSB7CiAgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50JiB0ZXh0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pihj
b25zdF9jYXN0PEhUTUxFbGVtZW50Jj4oKnRoaXMpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBUZXh0
RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0
aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgICAgICBVQ2hhckRpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
ID0gdGV4dEVsZW1lbnQudmFsdWUoKS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigmaGFzU3Ryb25n
RGlyZWN0aW9uYWxpdHkpOwogICAgICAgICBpZiAoc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9k
ZSkKICAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlID0gaGFzU3Ryb25n
RGlyZWN0aW9uYWxpdHkgPyAmdGV4dEVsZW1lbnQgOiBudWxscHRyOwotICAgICAgICByZXR1cm4g
KHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/IFRleHREaXJlY3Rpb246OkxUUiA6
IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuICh0ZXh0RGlyZWN0aW9uID09IFVf
TEVGVF9UT19SSUdIVCkgPyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA6IFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMOwogICAgIH0KIAogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZmlyc3RDaGlsZCgp
OwpAQCAtOTQ0LDE0ICs5NDQsMTQgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0
aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGMKICAgICAgICAg
ICAgIGlmIChoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkgewogICAgICAgICAgICAgICAgIGlmIChz
dHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQogICAgICAgICAgICAgICAgICAgICAqc3Ryb25n
RGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSA9IG5vZGUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICh0ZXh0RGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCkgPyBUZXh0RGlyZWN0aW9uOjpM
VFIgOiBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgcmV0dXJuICh0ZXh0RGly
ZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCkgPyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA6IFBB
TDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCB0aGlzKTsKICAgICB9CiAgICAgaWYg
KHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpCiAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25h
bGl0eVRleHROb2RlID0gbnVsbHB0cjsKLSAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOwor
ICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKIH0KIAogdm9pZCBIVE1MRWxlbWVu
dDo6ZGlyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKQEAgLTk2OSw3
ICs5NjksNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVk
QWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudAogewogICAgIEFTU0VSVChzZWxmT3JB
bmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSk7CiAgICAgTm9kZSogc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZTsKLSAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rp
b25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CisgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxp
dHlUZXh0Tm9kZSk7CiAgICAgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShjaGlsZCwgZmFs
c2UpOwogICAgIGlmICghcmVuZGVyZXIoKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLmRpcmVjdGlv
bigpID09IHRleHREaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTk4NCw3ICs5ODQsNyBA
QCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGls
ZEF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudAogdm9pZCBIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkoKQogewogICAgIE5vZGUqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5
VGV4dE5vZGU7Ci0gICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uYWxp
dHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpOworICAgIFBBTDo6VGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uYWxpdHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4
dE5vZGUpOwogICAgIHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkodGhpcywgdHJ1ZSwgc3Ry
b25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSAhPSB0ZXh0RGlyZWN0aW9uKQogICAgICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKaW5kZXgg
Mjg2OTQyODFjMThmNTlhNjg2ZWNmNTEyZDY2ZjdkZjhiOThjNTcxYi4uZWU1ODJkYmIxMDBiZDdj
OGE2YzIxMjUzNWI3NWI0ZGUxNDIxNmUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaApA
QCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaXIo
Y29uc3QgQXRvbVN0cmluZyYpOwogCiAgICAgYm9vbCBoYXNEaXJlY3Rpb25BdXRvKCkgY29uc3Q7
Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShi
b29sJiBpc0F1dG8pIGNvbnN0OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25hbGl0
eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIGlzVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9p
ZCBhZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQo
RWxlbWVudCogY2hpbGQpOwogICAgIHZvaWQgYWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFm
dGVyQ2hpbGRyZW5DaGFuZ2VkKEVsZW1lbnQqIGJlZm9yZUNoYW5nZSwgQ2hpbGRDaGFuZ2U6OlR5
cGUpOwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVj
dGlvbmFsaXR5VGV4dE5vZGU9IDApIGNvbnN0OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZT0gMCkgY29uc3Q7
CiAKICAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZUV2ZW50SGFuZGxlck5hbWVNYXAoRXZlbnRIYW5k
bGVyTmFtZU1hcCYsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhYmxlW10sIHNpemVfdCB0
YWJsZVNpemUpOwogICAgIHN0YXRpYyBFdmVudEhhbmRsZXJOYW1lTWFwIGNyZWF0ZUV2ZW50SGFu
ZGxlck5hbWVNYXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5jcHAKaW5kZXggMTdjMWYzZTA1Yzk5YmQ2YWQ0YWRjZjY3OGQ4M2ZjYWI1
NzNmNThiZC4uMWU4OGEwZDIxZTVhOTE1MmY0MTIyODYzNjNiMGI2NmU5M2E5MDEyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAK
QEAgLTc2OCwxOCArNzY4LDE4IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
ZGlyZWN0aW9uRm9yRm9ybURhdGEoKSBjb25zdAogICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBsaW5lYWdlT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgICAgIGF1dG8m
IHZhbHVlID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIp
OwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAi
cnRsIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJsdHIiKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIHJldHVy
biBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImF1dG8iKSkgewogICAgICAgICAgICAgICAgIGJvb2wg
aXNBdXRvOwogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmRpcmVjdGlvbmFsaXR5SWZo
YXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSOwogICAgIH0oKTsKIAotICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6TFRSID8gImx0ciJfcyA6ICJydGwiX3M7CisgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9zOwogfQogCiBF
eGNlcHRpb25Pcjx2b2lkPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0TWF4TGVuZ3Ro
KGludCBtYXhMZW5ndGgpCkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6YWRqdXN0SW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVu
dFMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgdGV4dEJsb2NrU3R5
bGUuc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUik7CisgICAgICAgIHRleHRCbG9ja1N0
eWxlLnNldERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgfQogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAppbmRleCA0ZTk4NTE3
MGMyODM2ZTYyZjI0MmJkYTM4NDAxNDg1YWMwNzlkMTQ3Li45ZDkzYzE5ODc1MDM3YTE3M2E0YTVj
MjhkNDQ3NTEyODE1Zjg1MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
aXRsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHAKQEAgLTc5LDkgKzc5LDkgQEAgU3RyaW5nIEhUTUxUaXRsZUVsZW1lbnQ6OnRleHQoKSBj
b25zdAogICAgIHJldHVybiBUZXh0Tm9kZVRyYXZlcnNhbDo6Y2hpbGRUZXh0Q29udGVudCgqdGhp
cyk7CiB9CiAKLVN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRU
ZXh0V2l0aERpcmVjdGlvbigpCitQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxl
bWVudDo6Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpCiB7Ci0gICAgYXV0byBkaXJlY3Rpb24g
PSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgYXV0byBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUjsKICAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVk
U3R5bGUoKSkKICAgICAgICAgZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCk7
CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaAppbmRleCA4YzM3
YTg5YjEwOTY3ZjBlYjQ5NzE2MDZhN2VjMDQ1YmU2NzRiMGU0Li41YjhhMDEzMTRhODI1ZDQzZGNj
NDdiZWU5NGFmYjQ4OTQ1ZWVkMTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUaXRsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1l
bnQuaApAQCAtMjMsNyArMjMsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgotI2luY2x1ZGUgIlN0cmluZ1dpdGhEaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDxwYWwv
dGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRleHQoKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CiAK
LSAgICBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0ZXh0V2l0aERpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICBjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24m
IHRleHRXaXRoRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQogCiBwcml2YXRl
OgogICAgIEhUTUxUaXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7
CkBAIC00NCw5ICs0NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9y
KFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCBjaGlsZHJlbkNo
YW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBmaW5hbDsKIAotICAgIFN0cmluZ1dpdGhEaXJlY3Rp
b24gY29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpOworICAgIFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiBjb21wdXRlZFRleHRXaXRoRGlyZWN0aW9uKCk7CiAKLSAgICBTdHJpbmdXaXRoRGlyZWN0
aW9uIG1fdGl0bGU7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIG1fdGl0bGU7CiB9Owog
CiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRnJh
Z21lbnRVUklQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUZyYWdtZW50VVJJ
UGFyc2VyLmNwcAppbmRleCA4OWE0MzIyMmU1Y2ZlOGMxZWQxZDNhNzI5OTM3NDIwMTQyZTE3Yzky
Li4xZTM1M2NkOTFlZDU2MjJiNWY0NmViYzM4NmViMmI0NjdkNDdkZTkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHAKQEAgLTMxLDkgKzMxLDkg
QEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAj
aW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
NGQ1OTUwZTBjYzJiY2NlNGFhMzJkYjI3ZGEzZDgwN2EwMTA5N2Q5NS4uODkzZTY0OGRiMTQwNzAx
OGM0MzY3YzExYmIyZjM1OGIwOWU5MmRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNTcsMjggKzE1
NywyOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRh
dGluZ1N0eWxlKGNvbnN0IFN0cmluZyYgbmV3Rm9udAogICAgIEFTU0VSVChzdGF0ZSgpLmZvbnQu
aXNQb3B1bGF0ZWQoKSk7CiB9CiAKLWlubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6dG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJl
bmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSkgY29uc3QKK2lubGluZSBQQUw6OlRleHREaXJlY3Rp
b24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlKSBjb25zdAogewogICAg
IGF1dG8qIHN0eWxlID0gY29tcHV0ZWRTdHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJ
bmhlcml0ID8gY2FudmFzKCkuZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkgOiBudWxscHRyOwogICAg
IGlmIChjb21wdXRlZFN0eWxlKQogICAgICAgICAqY29tcHV0ZWRTdHlsZSA9IHN0eWxlOwogICAg
IHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBEaXJlY3Rpb246OkluaGVyaXQ6Ci0gICAg
ICAgIHJldHVybiBzdHlsZSA/IHN0eWxlLT5kaXJlY3Rpb24oKSA6IFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICAgICAgcmV0dXJuIHN0eWxlID8gc3R5bGUtPmRpcmVjdGlvbigpIDogUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFI7CiAgICAgY2FzZSBEaXJlY3Rpb246OlJ0bDoKLSAgICAgICAgcmV0dXJu
IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6
UlRMOwogICAgIGNhc2UgRGlyZWN0aW9uOjpMdHI6Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0
aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiB9CiAKIENhbnZhc0RpcmVj
dGlvbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpcmVjdGlvbigpIGNvbnN0CiB7CiAgICAg
aWYgKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkKICAgICAgICAgY2Fu
dmFzKCkuZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRvVGV4
dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbikgPT0gVGV4dERpcmVjdGlvbjo6UlRMID8gQ2Fu
dmFzRGlyZWN0aW9uOjpSdGwgOiBDYW52YXNEaXJlY3Rpb246Okx0cjsKKyAgICByZXR1cm4gdG9U
ZXh0RGlyZWN0aW9uKHN0YXRlKCkuZGlyZWN0aW9uKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJU
TCA/IENhbnZhc0RpcmVjdGlvbjo6UnRsIDogQ2FudmFzRGlyZWN0aW9uOjpMdHI7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IGRvdWJsZSB4LCBkb3VibGUgeSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IG1heFdpZHRoKQpAQCAt
MjA3LDcgKzIwNyw3IEBAIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjptZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgY29uc3QgUmVuZGVyU3R5bGUq
IGNvbXB1dGVkU3R5bGU7CiAgICAgYXV0byBkaXJlY3Rpb24gPSB0b1RleHREaXJlY3Rpb24oc3Rh
dGUoKS5kaXJlY3Rpb24sICZjb21wdXRlZFN0eWxlKTsKICAgICBib29sIG92ZXJyaWRlID0gY29t
cHV0ZWRTdHlsZSAmJiBpc092ZXJyaWRlKGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpOwot
ICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4dCwgMCwgMCwgQWxsb3dSaWdodEV4cGFu
c2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgdHJ1ZSk7CisgICAgVGV4dFJ1biB0ZXh0UnVuKG5v
cm1hbGl6ZWRUZXh0LCAwLCAwLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIGRpcmVjdGlvbiwg
b3ZlcnJpZGUsIHRydWUpOwogICAgIHJldHVybiBtZWFzdXJlVGV4dEludGVybmFsKHRleHRSdW4p
OwogfQogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBkb3VibGUgeCwgZG8KICAgICBj
b25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZTsKICAgICBhdXRvIGRpcmVjdGlvbiA9IHRv
VGV4dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJv
b2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlICYmIGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+
dW5pY29kZUJpZGkoKSk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAw
LCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0cnVlKTsKKyAgICBU
ZXh0UnVuIHRleHRSdW4obm9ybWFsaXplZFRleHQsIDAsIDAsIFBBTDo6QWxsb3dSaWdodEV4cGFu
c2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgdHJ1ZSk7CiAgICAgZHJhd1RleHRVbmNoZWNrZWQo
dGV4dFJ1biwgeCwgeSwgZmlsbCwgbWF4V2lkdGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDZiNDhl
OGNjZjU4ODdmMTg5YjViYTY2ZGE1ZmIzN2UzNzYxMzQ0MTQuLjhkODQxZmZmODgxMGI1NTBkYjVk
N2JiZThjNGYxNDhjM2JiZGY1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC02NSw3ICs2NSw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGRyYXdGb2N1c0lmTmVlZGVkSW50ZXJuYWwoY29uc3QgUGF0aCYsIEVs
ZW1lbnQmKTsKIAotICAgIFRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OkRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRl
ZFN0eWxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvVGV4dERp
cmVjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpEaXJlY3Rpb24sIGNvbnN0IFJl
bmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2ZGVmZWI4MTJjMzcy
MmMzOGVhMmZjOGQwNzkxZmFlMjliMTYwZDZlLi5jYzRlYjk2ZmJmYjkyNzUwMGY0ZTViOTc5NWMw
MWVmZTdiMTJhZmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMzAxLDcgKzMwMSw3IEBA
IFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Zm9udFN0cmluZygp
IGNvbnN0CiAgICAgY29uc3QgYXV0byYgZm9udCA9IHRoaXMtPmZvbnQuZm9udERlc2NyaXB0aW9u
KCk7CiAKICAgICBhdXRvIGl0YWxpYyA9IGZvbnQuaXRhbGljKCkgPyAiaXRhbGljICIgOiAiIjsK
LSAgICBhdXRvIHNtYWxsQ2FwcyA9IGZvbnQudmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFudENh
cHM6OlNtYWxsID8gInNtYWxsLWNhcHMgIiA6ICIiOworICAgIGF1dG8gc21hbGxDYXBzID0gZm9u
dC52YXJpYW50Q2FwcygpID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbCA/ICJzbWFsbC1j
YXBzICIgOiAiIjsKICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmQoaXRhbGljLCBzbWFsbENhcHMs
IGZvbnQuY29tcHV0ZWRQaXhlbFNpemUoKSwgInB4Iik7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9udC5mYW1pbHlDb3VudCgpOyArK2kpIHsKQEAgLTIzOTgsOCArMjM5OCw4IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBkb3VibGUgeCwgZG91YmxlCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBu
b3JtYWxpemVkVGV4dCA9IG5vcm1hbGl6ZVNwYWNlcyh0ZXh0KTsKLSAgICBhdXRvIGRpcmVjdGlv
biA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBUZXh0RGlyZWN0aW9u
OjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6
ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVl
KTsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246
OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
OworICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4dCwgMCwgMCwgUEFMOjpBbGxvd1Jp
Z2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsKICAgICBkcmF3VGV4dFVuY2hl
Y2tlZCh0ZXh0UnVuLCB4LCB5LCBmaWxsLCBtYXhXaWR0aCk7CiB9CiAKQEAgLTI1MjAsOCArMjUy
MCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNr
ZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgZG91CiBSZWY8VGV4dE1ldHJpY3M+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0
ZXh0KQogewogICAgIFN0cmluZyBub3JtYWxpemVkVGV4dCA9IG5vcm1hbGl6ZVNwYWNlcyh0ZXh0
KTsKLSAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246
OlJ0bCkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgVGV4
dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBk
aXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOworICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4
dCwgMCwgMCwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVl
KTsKICAgICByZXR1cm4gbWVhc3VyZVRleHRJbnRlcm5hbCh0ZXh0UnVuKTsKIH0KIApAQCAtMjU1
NSw3ICsyNTU1LDcgQEAgUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjptZWFzdXJlVGV4dEludGVybmFsKGNvbnN0IFRleHRSdW4KICAgICByZXR1cm4gbWV0cmlj
czsKIH0KIAotRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0T2Zm
c2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK0Zsb2F0UG9pbnQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6dGV4dE9mZnNldChmbG9hdCB3aWR0aCwgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBhdXRvJiBmb250TWV0cmljcyA9IGZvbnRQ
cm94eSgpLT5mb250TWV0cmljcygpOwogICAgIEZsb2F0UG9pbnQgb2Zmc2V0OwpAQCAtMjU3Nyw3
ICsyNTc3LDcgQEAgRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0
T2Zmc2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uIGQKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgYm9vbCBpc1JUTCA9IGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7Cisg
ICAgYm9vbCBpc1JUTCA9IGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAg
ICBhdXRvIGFsaWduID0gc3RhdGUoKS50ZXh0QWxpZ247CiAgICAgaWYgKGFsaWduID09IFN0YXJ0
VGV4dEFsaWduKQogICAgICAgICBhbGlnbiA9IGlzUlRMID8gUmlnaHRUZXh0QWxpZ24gOiBMZWZ0
VGV4dEFsaWduOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IGQ0YWUwZTQxMGNjOTUzZTliNmE4N2U0
MjZjM2U5ZjNlZmYzNDI0NDYuLjgxODhhNzAzMzllNmM3MjhlYWI2NTM5YTRkOTYzZTk4MzZkM2Yy
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM5Niw3ICszOTYsNyBAQCBwcml2YXRlOgogICAg
IC8vIFRoZXJlZm9yZSwgYWxsIGZvbnQgb3BlcmF0aW9ucyBtdXN0IHBhc3MgdGhyb3VnaCB0aGUg
cHJveHkuCiAgICAgdmlydHVhbCBjb25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIHsgcmV0dXJu
IG51bGxwdHI7IH0KIAotICAgIEZsb2F0UG9pbnQgdGV4dE9mZnNldChmbG9hdCB3aWR0aCwgVGV4
dERpcmVjdGlvbik7CisgICAgRmxvYXRQb2ludCB0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBQQUw6
OlRleHREaXJlY3Rpb24pOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNYXhTYXZl
Q291bnQgPSAxMDI0ICogMTY7CiAgICAgVmVjdG9yPFN0YXRlLCAxPiBtX3N0YXRlU3RhY2s7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApp
bmRleCBiZWY0MmEyMWVlMmJmMjk1YjlmZTAyNTFjNGJkODlmYThlYjRkNzM3Li4wZjRlYzlmY2M2
Y2Y4NTZlNTlmZjgwMTc4NjY3YjI1YmNmNjY3NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTM2Nyw3ICszNjcsNyBAQCBi
b29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFzSW5zZXJ0aW9uUG9pbnQoKQogICAgIHJldHVybiBt
X2lucHV0Lmhhc0luc2VydGlvblBvaW50KCkgfHwgKHdhc0NyZWF0ZWRCeVNjcmlwdCgpICYmICFt
X2lucHV0LmhhdmVTZWVuRW5kT2ZGaWxlKCkpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6aW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYmIHNvdXJjZSkKK3ZvaWQgSFRNTERvY3VtZW50UGFy
c2VyOjppbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJiBzb3VyY2UpCiB7CiAgICAgaWYgKGlz
U3RvcHBlZCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDhiNGZhODQ1MmFkNzU2ZTI3NTNmNzVkMWVh
YjYzMjE3Y2ZjOGNhNWEuLmFhNTgwNDI3ZGM0ZmFmMjhmZDYyZjRkM2M3ZTY4ZmMzMzVjNTk5YWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5o
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBIVE1M
RG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50Jik7CiAKLSAgICB2b2lkIGluc2VydChTZWdtZW50
ZWRTdHJpbmcmJikgZmluYWw7CisgICAgdm9pZCBpbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcm
JikgZmluYWw7CiAgICAgdm9pZCBhcHBlbmQoUmVmUHRyPFN0cmluZ0ltcGw+JiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgYXBwZW5kU3luY2hyb25vdXNseShSZWZQdHI8U3RyaW5nSW1wbD4mJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmaW5pc2goKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKaW5kZXggYTg5ZmM2MGRjYjE1MmYzYzJm
ODlhNTEyMmY3OTRjNGYzZDkyY2VhMS4uNzEzN2Q2OTNmNmRmOWU0ZmJjOGQ2MTg2YTlmYWRlMGY1
MWExZDExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0
eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBh
cnNlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgYWNj
ZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RhdGljIGJvb2wgY29uc3Vt
ZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNv
ZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxs
b3dlZENoYXJhY3RlciwgVUNoYXImIGNjKQorICAgIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVu
dGl0eShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVk
RW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3RlciwgVUNoYXImIGNjKQogICAgIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25z
dW1lZENoYXJhY3RlcnM7CiAgICAgICAgIEhUTUxFbnRpdHlTZWFyY2ggZW50aXR5U2VhcmNoOwpA
QCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1ib29sIGNvbnN1bWVIVE1M
RW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50
aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlcikKK2Jvb2wgY29uc3VtZUhUTUxFbnRpdHkoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgU3RyaW5nQnVpbGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFj
dGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCiB7CiAgICAgcmV0dXJuIGNv
bnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8SFRNTEVudGl0eVBhcnNlcj4oc291cmNlLCBkZWNvZGVk
RW50aXR5LCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmgKaW5k
ZXggN2Q3OTIyNGM2MTI4NzRlZGRkZmJiZGEyMmNhODM0ODA0Zjk5YjkxYS4uYWNiMmRkZTIyYjYx
MzI5YWU1NzVhZjYyOWQxMjM5M2ZjZDUxOWNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaApAQCAtMjYsMTEgKzI2LDExIEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8cGFsL3RleHQv
U2VnbWVudGVkU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBjb25zdW1l
SFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkRW50aXR5
LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJh
Y3RlciA9ICdcMCcpOworYm9vbCBjb25zdW1lSFRNTEVudGl0eShQQUw6OlNlZ21lbnRlZFN0cmlu
ZyYsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3Rl
cnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7CiAKIC8vIFVzZWQg
YnkgdGhlIFhNTCBwYXJzZXIuICBOb3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBIVE1MIHBhcnNpbmcu
ICBVc2UgY29uc3VtZUhUTUxFbnRpdHkgaW5zdGVhZC4KIHNpemVfdCBkZWNvZGVOYW1lZEVudGl0
eVRvVUNoYXJBcnJheShjb25zdCBjaGFyKiwgVUNoYXIgcmVzdWx0WzRdKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKaW5kZXggOTJkOGJjMzUzOTk5MTRh
MjBhZTllNjRkMmEyMzlmYTc2MWUwNTc2Ny4uNmE4ZjY2ZWUyNTk0NjA5NThlZTY4ZGZmYWM4NmRk
ZTRkNTQzNTEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElu
cHV0U3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3Ry
ZWFtLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9PcmRpbmFsTnVtYmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU1LDEyICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYXBw
ZW5kVG9FbmQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQorICAgIHZvaWQgYXBwZW5kVG9FbmQo
UEFMOjpTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCiAgICAgewogICAgICAgICBtX2xhc3QtPmFw
cGVuZChXVEZNb3ZlKHN0cmluZykpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0QXRDdXJyZW50
SW5zZXJ0aW9uUG9pbnQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQorICAgIHZvaWQgaW5zZXJ0
QXRDdXJyZW50SW5zZXJ0aW9uUG9pbnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCiAg
ICAgewogICAgICAgICBtX2ZpcnN0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOwogICAgIH0KQEAg
LTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrRW5kT2ZGaWxlKCkKICAgICB7
Ci0gICAgICAgIG1fbGFzdC0+YXBwZW5kKFN0cmluZyB7ICZrRW5kT2ZGaWxlTWFya2VyLCAxIH0p
OworICAgICAgICBtX2xhc3QtPmFwcGVuZChTdHJpbmcgeyAmUEFMOjprRW5kT2ZGaWxlTWFya2Vy
LCAxIH0pOwogICAgICAgICBtX2xhc3QtPmNsb3NlKCk7CiAgICAgfQogCkBAIC04NiwxMCArODYs
MTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9sYXN0LT5pc0Nsb3NlZCgpOwogICAgIH0K
IAotICAgIFNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgpIHsgcmV0dXJuIG1fZmlyc3Q7IH0KLSAg
ICBjb25zdCBTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0
OyB9CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSB7IHJldHVybiBtX2ZpcnN0
OyB9CisgICAgY29uc3QgUEFMOjpTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0OyB9CiAKLSAgICB2b2lkIHNwbGl0SW50byhTZWdtZW50ZWRTdHJpbmcmIG5l
eHQpCisgICAgdm9pZCBzcGxpdEludG8oUEFMOjpTZWdtZW50ZWRTdHJpbmcmIG5leHQpCiAgICAg
ewogICAgICAgICBuZXh0ID0gV1RGTW92ZShtX2ZpcnN0KTsKICAgICAgICAgaWYgKG1fbGFzdCA9
PSAmbV9maXJzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KIAotICAgIHZvaWQgbWVyZ2VGcm9tKFNlZ21lbnRlZFN0cmluZyYgbmV4dCkKKyAgICB2b2lk
IG1lcmdlRnJvbShQQUw6OlNlZ21lbnRlZFN0cmluZyYgbmV4dCkKICAgICB7CiAgICAgICAgIG1f
Zmlyc3QuYXBwZW5kKG5leHQpOwogICAgICAgICBpZiAobV9sYXN0ID09ICZuZXh0KSB7CkBAIC0x
MTcsOCArMTE3LDggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTZWdtZW50ZWRT
dHJpbmcgbV9maXJzdDsKLSAgICBTZWdtZW50ZWRTdHJpbmcqIG1fbGFzdDsKKyAgICBQQUw6OlNl
Z21lbnRlZFN0cmluZyBtX2ZpcnN0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nKiBtX2xhc3Q7
CiB9OwogCiBjbGFzcyBJbnNlcnRpb25Qb2ludFJlY29yZCB7CkBAIC0xNDcsNyArMTQ3LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIEhUTUxJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsK
LSAgICBTZWdtZW50ZWRTdHJpbmcgbV9uZXh0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIG1f
bmV4dDsKICAgICBPcmRpbmFsTnVtYmVyIG1fbGluZTsKICAgICBPcmRpbmFsTnVtYmVyIG1fY29s
dW1uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmgKaW5kZXggOGQ3Yjg5ZmE1ZDY0Y2ZjNjQxNDkyMjdmMWNjMWNlZGI1ZGEyNWI3
ZS4uMzI4MmZiYWJjODBhNDNmYzg3OGIyNWQwNmQ3N2Q0NGQ3OWIxM2E3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKQEAgLTI2
LDggKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgot
I2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKIAogICAgIEhUTUxUb2tlbml6ZXIgbV90
b2tlbml6ZXI7CiAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbV9jb2RlYzsK
LSAgICBTZWdtZW50ZWRTdHJpbmcgbV9pbnB1dDsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBt
X2lucHV0OwogICAgIGJvb2wgbV9pbkhlYWRTZWN0aW9uIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9k
b25lQ2hlY2tpbmcgeyBmYWxzZSB9OwogICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5k
ZXggZmE5OWE2MGQ2YTI3OGRkOWQ4MmZmYmU5ZWUyOGE3NzEzNmQzMjAxNS4uZGY5OWQ1NWUwZTEw
ZjNiZWUyNzg0ZmJjYTY1YTlkMDQwZTU1YjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC00OTIsNyArNDkyLDcgQEAgSFRN
TFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIoY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmIG9wdGlvbnMsIGNvbnN0IFUKIHsKIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OmFw
cGVuZFRvRW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQordm9pZCBIVE1MUHJlbG9h
ZFNjYW5uZXI6OmFwcGVuZFRvRW5kKGNvbnN0IFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiB7CiAgICAgbV9zb3VyY2UuYXBwZW5kKHNvdXJjZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCmluZGV4IDM5YzcwNDhjYjE4ZTI0ZTRm
ZWMzYWZlNjJiNGQ5ZjU3NWNjMGYzNDguLjNjY2Y5YmRkYmNiZTlhY2I0ZmI0Nzg2M2Q2OTE2MDMy
M2M3ZWZmMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVs
b2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2Fk
U2Nhbm5lci5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NQcmVsb2FkU2Nhbm5l
ci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJp
bmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04NiwxMiArODYsMTIgQEAgY2xhc3MgSFRNTFByZWxvYWRTY2FubmVy
IHsKIHB1YmxpYzoKICAgICBIVE1MUHJlbG9hZFNjYW5uZXIoY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IDEu
MCk7CiAKLSAgICB2b2lkIGFwcGVuZFRvRW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOworICAg
IHZvaWQgYXBwZW5kVG9FbmQoY29uc3QgUEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKICAgICB2b2lk
IHNjYW4oSFRNTFJlc291cmNlUHJlbG9hZGVyJiwgRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToKICAg
ICBUb2tlblByZWxvYWRTY2FubmVyIG1fc2Nhbm5lcjsKLSAgICBTZWdtZW50ZWRTdHJpbmcgbV9z
b3VyY2U7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9zb3VyY2U7CiAgICAgSFRNTFRva2Vu
aXplciBtX3Rva2VuaXplcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTb3VyY2VUcmFja2VyLmNwcAppbmRleCAyMmRiYTkwYTU4MjBlNmQ3YTFmNzNmNTY5YmFk
NzMwMjYwMTM4MDIzLi40YTc1NTFmNDFlZmRiNjJjMDAxM2MxNWVmNzg3OTJhNWJmMmVhZDQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3Bw
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBIVE1MU291
cmNlVHJhY2tlcjo6c3RhcnRUb2tlbihTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRJbnB1dCwgSFRN
TFRva2VuaXplciYgdG9rZW5pemVyKQordm9pZCBIVE1MU291cmNlVHJhY2tlcjo6c3RhcnRUb2tl
bihQQUw6OlNlZ21lbnRlZFN0cmluZyYgY3VycmVudElucHV0LCBIVE1MVG9rZW5pemVyJiB0b2tl
bml6ZXIpCiB7CiAgICAgaWYgKCFtX3N0YXJ0ZWQpIHsKICAgICAgICAgaWYgKHRva2VuaXplci5u
dW1iZXJPZkJ1ZmZlcmVkQ2hhcmFjdGVycygpKQpAQCAtNDgsNyArNDgsNyBAQCB2b2lkIEhUTUxT
b3VyY2VUcmFja2VyOjpzdGFydFRva2VuKFNlZ21lbnRlZFN0cmluZyYgY3VycmVudElucHV0LCBI
VE1MVG9rZW5pemVyJgogICAgIHRva2VuaXplci5zZXRUb2tlbkF0dHJpYnV0ZUJhc2VPZmZzZXQo
bV90b2tlblN0YXJ0KTsKIH0KIAotdm9pZCBIVE1MU291cmNlVHJhY2tlcjo6ZW5kVG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiBjdXJyZW50SW5wdXQsIEhUTUxUb2tlbml6ZXImIHRva2VuaXplcikKK3Zv
aWQgSFRNTFNvdXJjZVRyYWNrZXI6OmVuZFRva2VuKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBjdXJy
ZW50SW5wdXQsIEhUTUxUb2tlbml6ZXImIHRva2VuaXplcikKIHsKICAgICBBU1NFUlQobV9zdGFy
dGVkKTsKICAgICBtX3N0YXJ0ZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU291cmNlVHJhY2tlci5oCmluZGV4IDNhMjRjZjBmYzYxMDdkZTJmNTgxMTRiNjc2
YjYzMmJlNTYxNzkxYWYuLmM2NzVlNTAzMDBkNGEwNzY4MDEwNDFhYmQyODdiMTliNjM4ZTQzY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuaApA
QCAtMjYsNyArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNlZ21lbnRlZFN0
cmluZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM4LDggKzM4LDggQEAgY2xhc3MgSFRNTFNvdXJjZVRyYWNrZXIg
ewogcHVibGljOgogICAgIEhUTUxTb3VyY2VUcmFja2VyKCkgPSBkZWZhdWx0OwogCi0gICAgdm9p
ZCBzdGFydFRva2VuKFNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKLSAgICB2b2lk
IGVuZFRva2VuKFNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKKyAgICB2b2lkIHN0
YXJ0VG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmLCBIVE1MVG9rZW5pemVyJik7CisgICAgdm9p
ZCBlbmRUb2tlbihQQUw6OlNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKIAogICAg
IFN0cmluZyBzb3VyY2UoY29uc3QgSFRNTFRva2VuJik7CiAgICAgU3RyaW5nIHNvdXJjZShjb25z
dCBIVE1MVG9rZW4mLCB1bnNpZ25lZCBhdHRyaWJ1dGVTdGFydCwgdW5zaWduZWQgYXR0cmlidXRl
RW5kKTsKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Rva2VuU3Rh
cnQ7CiAgICAgdW5zaWduZWQgbV90b2tlbkVuZDsKIAotICAgIFNlZ21lbnRlZFN0cmluZyBtX3By
ZXZpb3VzU291cmNlOwotICAgIFNlZ21lbnRlZFN0cmluZyBtX2N1cnJlbnRTb3VyY2U7CisgICAg
UEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9wcmV2aW91c1NvdXJjZTsKKyAgICBQQUw6OlNlZ21lbnRl
ZFN0cmluZyBtX2N1cnJlbnRTb3VyY2U7CiAKICAgICBTdHJpbmcgbV9jYWNoZWRTb3VyY2VGb3JU
b2tlbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9r
ZW5pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3Bw
CmluZGV4IGQzZWJhNTE0NDVmMzJiNWYzNjBhMTI4NjRhZTcwMTRlZTY5N2VhMDguLmU3MmVhNTM5
NTFhMzBlMDY5YjM2YzA3NTVhMjg5MWMwM2NhMDQ4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIEhUTUxUb2tlbml6
ZXI6OkhUTUxUb2tlbml6ZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCiAKIGlu
bGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKFVDaGFyIGNoYXJh
Y3RlcikKIHsKLSAgICBBU1NFUlQoY2hhcmFjdGVyICE9IGtFbmRPZkZpbGVNYXJrZXIpOworICAg
IEFTU0VSVChjaGFyYWN0ZXIgIT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKTsKICAgICBBU1NFUlQo
aXNBU0NJSShjaGFyYWN0ZXIpKTsKICAgICBMQ2hhciBuYXJyb3dlZENoYXJhY3RlciA9IGNoYXJh
Y3RlcjsKICAgICBtX3Rva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKG5hcnJvd2VkQ2hhcmFjdGVyKTsK
QEAgLTg3LDExICs4NywxMSBAQCBpbmxpbmUgdm9pZCBIVE1MVG9rZW5pemVyOjpidWZmZXJBU0NJ
SUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCiAKIGlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6
OmJ1ZmZlckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCiB7Ci0gICAgQVNTRVJUKGNoYXJhY3Rl
ciAhPSBrRW5kT2ZGaWxlTWFya2VyKTsKKyAgICBBU1NFUlQoY2hhcmFjdGVyICE9IFBBTDo6a0Vu
ZE9mRmlsZU1hcmtlcik7CiAgICAgbV90b2tlbi5hcHBlbmRUb0NoYXJhY3RlcihjaGFyYWN0ZXIp
OwogfQogCi1pbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjplbWl0QW5kUmVzdW1lSW5EYXRhU3Rh
dGUoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCitpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjpl
bWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsK
ICAgICBzYXZlRW5kVGFnTmFtZUlmTmVlZGVkKCk7CiAgICAgbV9zdGF0ZSA9IERhdGFTdGF0ZTsK
QEAgLTEwNiw3ICsxMDYsNyBAQCBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjplbWl0QW5kUmVj
b25zdW1lSW5EYXRhU3RhdGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBI
VE1MVG9rZW5pemVyOjplbWl0RW5kT2ZGaWxlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQoraW5s
aW5lIGJvb2wgSFRNTFRva2VuaXplcjo6ZW1pdEVuZE9mRmlsZShQQUw6OlNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogewogICAgIG1fc3RhdGUgPSBEYXRhU3RhdGU7CiAgICAgaWYgKGhhdmVCdWZm
ZXJlZENoYXJhY3RlclRva2VuKCkpCkBAIC0xMjksNyArMTI5LDcgQEAgaW5saW5lIGJvb2wgSFRN
TFRva2VuaXplcjo6aGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSBjb25zdAogICAgIHJldHVy
biBtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNoYXJhY3RlcjsKIH0KIAotaW5saW5lIGJv
b2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
K2lubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NFbnRpdHkoUEFMOjpTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKIHsKICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxzZTsK
ICAgICBTdHJpbmdCdWlsZGVyIGRlY29kZWRFbnRpdHk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpmbHVzaEJ1ZmZlcmVkRW5kVGFnKCkKICAgICBtX3RlbXBvcmFyeUJ1
ZmZlci5jbGVhcigpOwogfQogCi1ib29sIEhUTUxUb2tlbml6ZXI6OmNvbW1pdFRvUGFydGlhbEVu
ZFRhZyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVUNoYXIgY2hhcmFjdGVyLCBTdGF0ZSBzdGF0
ZSkKK2Jvb2wgSFRNTFRva2VuaXplcjo6Y29tbWl0VG9QYXJ0aWFsRW5kVGFnKFBBTDo6U2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIFVDaGFyIGNoYXJhY3RlciwgU3RhdGUgc3RhdGUpCiB7CiAgICAg
QVNTRVJUKHNvdXJjZS5jdXJyZW50Q2hhcmFjdGVyKCkgPT0gY2hhcmFjdGVyKTsKICAgICBhcHBl
bmRUb1RlbXBvcmFyeUJ1ZmZlcihjaGFyYWN0ZXIpOwpAQCAtMTcxLDcgKzE3MSw3IEBAIGJvb2wg
SFRNTFRva2VuaXplcjo6Y29tbWl0VG9QYXJ0aWFsRW5kVGFnKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBVQ2hhciBjaGFyYWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEhUTUxUb2tl
bml6ZXI6OmNvbW1pdFRvQ29tcGxldGVFbmRUYWcoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiti
b29sIEhUTUxUb2tlbml6ZXI6OmNvbW1pdFRvQ29tcGxldGVFbmRUYWcoUEFMOjpTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKIHsKICAgICBBU1NFUlQoc291cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKSA9
PSAnPicpOwogICAgIGFwcGVuZFRvVGVtcG9yYXJ5QnVmZmVyKCc+Jyk7CkBAIC0xODksNyArMTg5
LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpjb21taXRUb0NvbXBsZXRlRW5kVGFnKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxUb2tlbml6
ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKK2Jvb2wgSFRNTFRva2Vu
aXplcjo6cHJvY2Vzc1Rva2VuKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAg
aWYgKCFtX2J1ZmZlcmVkRW5kVGFnTmFtZS5pc0VtcHR5KCkgJiYgIWluRW5kVGFnQnVmZmVyaW5n
U3RhdGUoKSkgewogICAgICAgICAvLyBXZSBhcmUgYmFjayBoZXJlIGFmdGVyIGVtaXR0aW5nIGEg
Y2hhcmFjdGVyIHRva2VuIHRoYXQgY2FtZSBqdXN0IGJlZm9yZSBhbiBlbmQgdGFnLgpAQCAtMjE3
LDcgKzIxNyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogICAgICAgICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKHRy
dWUpOwogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFRhZ09wZW5TdGF0
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7CiAgICAgICAgIGJ1ZmZlckNoYXJh
Y3RlcihjaGFyYWN0ZXIpOwogICAgICAgICBBRFZBTkNFX1RPKERhdGFTdGF0ZSk7CkBAIC0yMzQs
NyArMjM0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hh
cmFjdGVyUmVmZXJlbmNlSW5SQ0RBVEFTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
JzwnKQogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFJDREFUQUxlc3NU
aGFuU2lnblN0YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICBidWZmZXJDaGFyYWN0ZXIo
Y2hhcmFjdGVyKTsKICAgICAgICAgQURWQU5DRV9UTyhSQ0RBVEFTdGF0ZSk7CkBAIC0yNDksNyAr
MjQ5LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUoUkFXVEVYVFN0YXRlKQogICAgICAgICBpZiAoY2hh
cmFjdGVyID09ICc8JykKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhS
QVdURVhUTGVzc1RoYW5TaWduU3RhdGUpOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRP
ZkZpbGVNYXJrZXIpCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFy
a2VyKQogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIGJ1ZmZl
ckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICBBRFZBTkNFX1RPKFJBV1RFWFRTdGF0ZSk7
CkBAIC0yNTgsMTQgKzI1OCwxNCBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShTY3JpcHREYXRhU3RhdGUp
CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJzwnKQogICAgICAgICAgICAgQURWQU5DRV9QQVNU
X05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFMZXNzVGhhblNpZ25TdGF0ZSk7Ci0gICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpCiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0
YXRlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIEFEVkFO
Q0VfVE8oU2NyaXB0RGF0YVN0YXRlKTsKICAgICBFTkRfU1RBVEUoKQogCiAgICAgQkVHSU5fU1RB
VEUoUExBSU5URVhUU3RhdGUpCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1h
cmtlcikKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpCiAg
ICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFj
dGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIEFEVkFOQ0VfVE8oUExBSU5URVhUU3RhdGUpOwpAQCAt
MzAyLDcgKzMwMiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAg
QURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPCcpOwogICAgICAgICAgICAg
YnVmZmVyQVNDSUlDaGFyYWN0ZXIoJy8nKTsKQEAgLTMyMSw3ICszMjEsNyBAQCBib29sIEhUTUxU
b2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAg
ICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgaWYg
KG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiBjaGFyYWN0ZXIgPT0gJzwnKQog
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwotICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC01
MTAsNyArNTEwLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPCcp
CiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oU2NyaXB0RGF0YUVzY2Fw
ZWRMZXNzVGhhblNpZ25TdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmls
ZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtl
cikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lO
KERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTUyNSw3ICs1MjUsNyBAQCBib29sIEhUTUxUb2tl
bml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgfQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc8JykKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9O
T05fTkVXTElORV9UTyhTY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFy
YWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAt
NTQ0LDcgKzU0NCw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoJz4nKTsK
ICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhU3RhdGUp
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikg
eworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0
ZSk7CiAgICAgICAgIH0KQEAgLTYzNSw3ICs2MzUsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnBy
b2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIGJ1ZmZlckFT
Q0lJQ2hhcmFjdGVyKCc8Jyk7CiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVf
VE8oU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZSk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAg
fQpAQCAtNjUyLDcgKzY1Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIo
JzwnKTsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRh
RG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAg
ICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC02NzMsNyAr
NjczLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPicpOwogICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAg
ICAgICAgfQpAQCAtNzE1LDcgKzcxNSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rv
a2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRS
ZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICBpZiAobV9vcHRpb25zLnVzZVByZUhU
TUw1UGFyc2VyUXVpcmtzICYmIGNoYXJhY3RlciA9PSAnPCcpCiAgICAgICAgICAgICByZXR1cm4g
ZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
a0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9m
RmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVD
T05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTczNyw3ICs3MzcsNyBAQCBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAg
ICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiBjaGFyYWN0ZXIgPT0g
JzwnKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9
CkBAIC03NTgsNyArNzU4LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUlu
RGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIGlmIChtX29wdGlvbnMudXNlUHJlSFRNTDVQYXJz
ZXJRdWlya3MgJiYgY2hhcmFjdGVyID09ICc8JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5k
UmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZG
aWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFy
a2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVf
SU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAtNzgyLDcgKzc4Miw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFT
dGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9m
RmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1h
cmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1F
X0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTgwMSw3ICs4MDEsNyBAQCBib29sIEhUTUxU
b2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAg
ICAgIG1fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnIic7CiAgICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1
ZVN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVN
YXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uZW5kQXR0
cmlidXRlKHNvdXJjZS5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKICAgICAgICAgICAg
IFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwpAQCAtODE5LDcgKzgxOSw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgbV9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICdcJyc7CiAgICAgICAgICAgICBBRFZB
TkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGVWYWx1
ZVN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVN
YXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uZW5kQXR0
cmlidXRlKHNvdXJjZS5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKICAgICAgICAgICAg
IFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwpAQCAtODQxLDcgKzg0MSw3IEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgbV90b2tlbi5lbmRBdHRyaWJ1dGUoc291cmNlLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
KCkpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2Up
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikg
eworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5lbmRBdHRyaWJ1dGUo
c291cmNlLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOwogICAgICAgICAgICAgUkVDT05T
VU1FX0lOKERhdGFTdGF0ZSk7CkBAIC04ODYsNyArODg2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVy
Ojpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1
cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIGlmIChtX29wdGlv
bnMudXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgY2hhcmFjdGVyID09ICc8JykKICAgICAgICAg
ICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKLSAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
UEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAg
ICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAtODk5LDcgKzg5
OSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRTZWxmQ2xvc2luZygpOwogICAgICAgICAg
ICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VF
cnJvcigpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0K
QEAgLTkxNSw3ICs5MTUsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShDb250aW51ZUJvZ3VzQ29tbWVu
dFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+JykKICAgICAgICAgICAgIHJldHVy
biBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0Vu
ZE9mRmlsZU1hcmtlcikKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRh
U3RhdGUoKTsKICAgICAgICAgbV90b2tlbi5hcHBlbmRUb0NvbW1lbnQoY2hhcmFjdGVyKTsKICAg
ICAgICAgQURWQU5DRV9UTyhDb250aW51ZUJvZ3VzQ29tbWVudFN0YXRlKTsKQEAgLTkyNCwyMyAr
OTI0LDIzIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgIEJFR0lOX1NUQVRFKE1hcmt1cERlY2xhcmF0aW9uT3BlblN0YXRlKQog
ICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykgewogICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBzb3VyY2UuYWR2YW5jZVBhc3QoIi0tIik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNl
Z21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFM
OjpTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKSB7CiAgICAgICAgICAgICAgICAgbV90b2tlbi5i
ZWdpbkNvbW1lbnQoKTsKICAgICAgICAgICAgICAgICBTV0lUQ0hfVE8oQ29tbWVudFN0YXJ0U3Rh
dGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRT
dHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBB
TDo6U2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAg
IFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyLCAn
ZCcpKSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5hZHZhbmNlUGFzdExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSgiZG9jdHlwZSIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQ
QUw6OlNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAgICAgICAgICAgU1dJVENIX1RP
KERPQ1RZUEVTdGF0ZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmlu
Zzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpT
ZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgUkVU
VVJOX0lOX0NVUlJFTlRfU1RBVEUoaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09ICdbJyAmJiBzaG91bGRBbGxvd0NEQVRBKCkpIHsK
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLmFkdmFuY2VQYXN0KCJbQ0RBVEFbIik7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkK
ICAgICAgICAgICAgICAgICBTV0lUQ0hfVE8oQ0RBVEFTZWN0aW9uU3RhdGUpOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hD
aGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5UX1NUQVRFKGhhdmVC
dWZmZXJlZENoYXJhY3RlclRva2VuKCkpOwogICAgICAgICB9CiAgICAgICAgIHBhcnNlRXJyb3Io
KTsKQEAgLTk1NCw3ICs5NTQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3Rh
dGUoKTsKICAgICAgICAgfQpAQCAtOTY5LDcgKzk2OSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcGFyc2VF
cnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3Vy
Y2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtl
cikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewog
ICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNv
bnN1bWVJbkRhdGFTdGF0ZSgpOwogICAgICAgICB9CkBAIC05ODEsNyArOTgxLDcgQEAgYm9vbCBI
VE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAg
QkVHSU5fU1RBVEUoQ29tbWVudFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykK
ICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50RW5kRGFzaFN0
YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAg
ICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0
YVN0YXRlKCk7CiAgICAgICAgIH0KQEAgLTk5Miw3ICs5OTIsNyBAQCBib29sIEhUTUxUb2tlbml6
ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFU
RShDb21tZW50RW5kRGFzaFN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICctJykKICAg
ICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDb21tZW50RW5kU3RhdGUpOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUo
KTsKICAgICAgICAgfQpAQCAtMTAxMyw3ICsxMDEzLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2Vu
LmFwcGVuZFRvQ29tbWVudCgnLScpOwogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdM
SU5FX1RPKENvbW1lbnRFbmRTdGF0ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjpr
RW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAg
ICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CiAgICAgICAgIH0KQEAgLTEw
MzMsNyArMTAzMyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4n
KQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUo
KTsKICAgICAgICAgfQpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUoRE9D
VFlQRVN0YXRlKQogICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNoYXJhY3Rlcikp
CiAgICAgICAgICAgICBBRFZBTkNFX1RPKEJlZm9yZURPQ1RZUEVOYW1lU3RhdGUpOwotICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIG1fdG9rZW4uYmVnaW5ET0NUWVBFKCk7CiAgICAgICAgICAgICBtX3Rv
a2VuLnNldEZvcmNlUXVpcmtzKCk7CkBAIC0xMDY2LDcgKzEwNjYsNyBAQCBib29sIEhUTUxUb2tl
bml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAg
IG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVz
dW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtF
bmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAg
IG1fdG9rZW4uYmVnaW5ET0NUWVBFKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVp
cmtzKCk7CkBAIC0xMDgxLDcgKzEwODEsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NU
b2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0
ZXJET0NUWVBFTmFtZVN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPicpCiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7Ci0gICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFj
dGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigp
OwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0
dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTA5NSwyMiArMTA5NSwyMiBA
QCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSkKICAgICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0ZXJET0NUWVBFTmFtZVN0YXRlKTsKICAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSAnPicpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3Vt
ZUluRGF0YVN0YXRlKHNvdXJjZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmls
ZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtl
cikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRG
b3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFT
dGF0ZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KGNoYXJhY3RlciwgJ3AnKSkgewogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UuYWR2
YW5jZVBhc3RMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoInB1YmxpYyIpOwotICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQorICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBQQUw6OlNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAgICAgICAg
ICAgU1dJVENIX1RPKEFmdGVyRE9DVFlQRVB1YmxpY0tleXdvcmRTdGF0ZSk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENo
YXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgUkVUVVJOX0lOX0NVUlJFTlRfU1RBVEUoaGF2ZUJ1
ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbChjaGFyYWN0ZXIsICdzJykpIHsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gc291cmNlLmFkdmFuY2VQYXN0TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCJzeXN0ZW0iKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQog
ICAgICAgICAgICAgICAgIFNXSVRDSF9UTyhBZnRlckRPQ1RZUEVTeXN0ZW1LZXl3b3JkU3RhdGUp
OwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENo
YXJhY3RlcnMpCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVkU3RyaW5n
OjpOb3RFbm91Z2hDaGFyYWN0ZXJzKQogICAgICAgICAgICAgICAgIFJFVFVSTl9JTl9DVVJSRU5U
X1NUQVRFKGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCkpOwogICAgICAgICB9CiAgICAgICAg
IHBhcnNlRXJyb3IoKTsKQEAgLTExMzYsNyArMTEzNiw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tl
bi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRh
dGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmls
ZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tl
bi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJ
bkRhdGFTdGF0ZSgpOwpAQCAtMTE2Miw3ICsxMTYyLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2Vu
LnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0
YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5k
T2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxl
TWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2Vu
LnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUlu
RGF0YVN0YXRlKCk7CkBAIC0xMTgwLDcgKzExODAsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnBy
b2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4u
c2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRh
U3RhdGUoc291cmNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRP
ZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVN
YXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4u
c2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5E
YXRhU3RhdGUoKTsKQEAgLTExOTcsNyArMTE5Nyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJv
Y2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5z
ZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFT
dGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9m
RmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1h
cmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5z
ZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRh
dGFTdGF0ZSgpOwpAQCAtMTIyMSw3ICsxMjIxLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9j
ZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLnNl
dFN5c3RlbUlkZW50aWZpZXJUb0VtcHR5U3RyaW5nKCk7CiAgICAgICAgICAgICBBRFZBTkNFX1BB
U1RfTk9OX05FV0xJTkVfVE8oRE9DVFlQRVN5c3RlbUlkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVp
cmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7
CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uc2V0U3lzdGVtSWRl
bnRpZmllclRvRW1wdHlTdHJpbmcoKTsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVX
TElORV9UTyhET0NUWVBFU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKTsKICAgICAg
ICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAg
ICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEyNzIs
NyArMTI3Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAg
cGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTI5OCw3
ICsxMjk4LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CkBAIC0xMzE2LDcg
KzEzMTYsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJp
bmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEzMzMsNyAr
MTMzMyw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAg
ICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBp
ZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFy
c2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAg
ICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTM0Nyw3ICsx
MzQ3LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgICAgICAgICBBRFZBTkNFX1RPKEFmdGVyRE9DVFlQRVN5c3RlbUlkZW50
aWZpZXJTdGF0ZSk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKQogICAgICAgICAgICAg
cmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwotICAgICAgICBpZiAoY2hh
cmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQ
QUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAg
ICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0
QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEzNTksNyArMTM1OSw3IEBAIGJvb2wgSFRN
TFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgIEJF
R0lOX1NUQVRFKEJvZ3VzRE9DVFlQRVN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+
JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsK
LSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgICAgIHJldHVybiBl
bWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAgICAgICAgQURWQU5DRV9UTyhCb2d1c0RP
Q1RZUEVTdGF0ZSk7CiAgICAgRU5EX1NUQVRFKCkKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIGJvb2wg
SFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAg
IEJFR0lOX1NUQVRFKENEQVRBU2VjdGlvblN0YXRlKQogICAgICAgICBpZiAoY2hhcmFjdGVyID09
ICddJykKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDREFUQVNlY3Rp
b25SaWdodFNxdWFyZUJyYWNrZXRTdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVN
YXJrZXIpCiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVm
ZmVyQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiAgICAgICAgIEFEVkFOQ0VfVE8oQ0RBVEFTZWN0aW9u
U3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2Vu
aXplci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oCmluZGV4
IDVkODE5MWY0NDg5NTQ0MjE1OGNmN2UyNTRhM2ExYzU2ODdhODA0NGMuLmM2NzJlODIyNGZkMzRk
NTM3N2YwZjU5ZWQzNGY4ZDkzOTkwOGVkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVG9rZW5pemVyLmgKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiSFRNTFRva2Vu
LmgiCiAjaW5jbHVkZSAiSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaCIKIAotbmFtZXNwYWNlIFdl
YkNvcmUgewotCituYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MVG9rZW5pemVyIHsKIHB1YmxpYzoKQEAg
LTQwLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgLy8gSWYgd2UgY2FuJ3QgcGFyc2UgYSB3aG9s
ZSB0b2tlbiwgdGhpcyByZXR1cm5zIG51bGwuCiAgICAgY2xhc3MgVG9rZW5QdHI7Ci0gICAgVG9r
ZW5QdHIgbmV4dFRva2VuKFNlZ21lbnRlZFN0cmluZyYpOworICAgIFRva2VuUHRyIG5leHRUb2tl
bihQQUw6OlNlZ21lbnRlZFN0cmluZyYpOwogCiAgICAgLy8gVXNlZCBieSBIVE1MU291cmNlVHJh
Y2tlci4KICAgICB2b2lkIHNldFRva2VuQXR0cmlidXRlQmFzZU9mZnNldCh1bnNpZ25lZCk7CkBA
IC0xNTUsMjIgKzE1NywyMiBAQCBwcml2YXRlOgogICAgICAgICBDREFUQVNlY3Rpb25Eb3VibGVS
aWdodFNxdWFyZUJyYWNrZXRTdGF0ZSwKICAgICB9OwogCi0gICAgYm9vbCBwcm9jZXNzVG9rZW4o
U2VnbWVudGVkU3RyaW5nJik7Ci0gICAgYm9vbCBwcm9jZXNzRW50aXR5KFNlZ21lbnRlZFN0cmlu
ZyYpOworICAgIGJvb2wgcHJvY2Vzc1Rva2VuKFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CisgICAg
Ym9vbCBwcm9jZXNzRW50aXR5KFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CiAKICAgICB2b2lkIHBh
cnNlRXJyb3IoKTsKIAogICAgIHZvaWQgYnVmZmVyQVNDSUlDaGFyYWN0ZXIoVUNoYXIpOwogICAg
IHZvaWQgYnVmZmVyQ2hhcmFjdGVyKFVDaGFyKTsKIAotICAgIGJvb2wgZW1pdEFuZFJlc3VtZUlu
RGF0YVN0YXRlKFNlZ21lbnRlZFN0cmluZyYpOworICAgIGJvb2wgZW1pdEFuZFJlc3VtZUluRGF0
YVN0YXRlKFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CiAgICAgYm9vbCBlbWl0QW5kUmVjb25zdW1l
SW5EYXRhU3RhdGUoKTsKLSAgICBib29sIGVtaXRFbmRPZkZpbGUoU2VnbWVudGVkU3RyaW5nJik7
CisgICAgYm9vbCBlbWl0RW5kT2ZGaWxlKFBBTDo6U2VnbWVudGVkU3RyaW5nJik7CiAKICAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB3ZSB3aWwgZW1pdCBhIGNoYXJhY3RlciB0b2tlbiBiZWZvcmUgZGVh
bGluZyB3aXRoIHRoZSBidWZmZXJlZCBlbmQgdGFnLgogICAgIHZvaWQgZmx1c2hCdWZmZXJlZEVu
ZFRhZygpOwotICAgIGJvb2wgY29tbWl0VG9QYXJ0aWFsRW5kVGFnKFNlZ21lbnRlZFN0cmluZyYs
IFVDaGFyLCBTdGF0ZSk7Ci0gICAgYm9vbCBjb21taXRUb0NvbXBsZXRlRW5kVGFnKFNlZ21lbnRl
ZFN0cmluZyYpOworICAgIGJvb2wgY29tbWl0VG9QYXJ0aWFsRW5kVGFnKFBBTDo6U2VnbWVudGVk
U3RyaW5nJiwgVUNoYXIsIFN0YXRlKTsKKyAgICBib29sIGNvbW1pdFRvQ29tcGxldGVFbmRUYWco
UEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKIAogICAgIHZvaWQgYXBwZW5kVG9UZW1wb3JhcnlCdWZm
ZXIoVUNoYXIpOwogICAgIGJvb2wgdGVtcG9yYXJ5QnVmZmVySXMoY29uc3QgY2hhciopOwpAQCAt
Mjc5LDcgKzI4MSw3IEBAIGlubGluZSBIVE1MVG9rZW4qIEhUTUxUb2tlbml6ZXI6OlRva2VuUHRy
OjpvcGVyYXRvci0+KCkgY29uc3QKICAgICByZXR1cm4gbV90b2tlbjsKIH0KIAotaW5saW5lIEhU
TUxUb2tlbml6ZXI6OlRva2VuUHRyIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKK2lubGluZSBIVE1MVG9rZW5pemVyOjpUb2tlblB0ciBIVE1MVG9rZW5p
emVyOjpuZXh0VG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICByZXR1
cm4gVG9rZW5QdHIocHJvY2Vzc1Rva2VuKHNvdXJjZSkgPyAmbV90b2tlbiA6IG51bGxwdHIpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVw
cm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0lucHV0U3RyZWFtUHJlcHJv
Y2Vzc29yLmgKaW5kZXggMzYxZjY1MzAxNWQxYWNhMzdhY2U3ZjdlMjJhNmZmMmRjZTkwOGY2Yi4u
MTAwNjdhZThkN2JjZTFmMGMyNzQ4NjI4ZWNmZDZhNTUxNWVhM2E4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9JbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5oCkBAIC0y
Nyw3ICsyNyw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCisjaW5jbHVkZSA8cGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYs
NyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHdlIHN1Y2NlZWRlZCBp
biBwZWVraW5nIGF0IHRoZSBuZXh0IGNoYXJhY3Rlci4KICAgICAvLyBUaGUgb25seSB3YXkgd2Ug
Y2FuIGZhaWwgdG8gcGVlayBpcyBpZiB0aGVyZSBhcmUgbm8gbW9yZQogICAgIC8vIGNoYXJhY3Rl
cnMgaW4gfHNvdXJjZXwgKGFmdGVyIGNvbGxhcHNpbmcgXHJcbiwgZXRjKS4KLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgcGVlayhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENo
YXJhY3RlcnMgPSBmYWxzZSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcGVlayhQQUw6OlNlZ21l
bnRlZFN0cmluZyYgc291cmNlLCBib29sIHNraXBOdWxsQ2hhcmFjdGVycyA9IGZhbHNlKQogICAg
IHsKICAgICAgICAgaWYgKFVOTElLRUxZKHNvdXJjZS5pc0VtcHR5KCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjcsMTkgKzY3LDE5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgY2hhcmFjdGVycyBpbiB8c291cmNlfCBh
ZnRlciBhZHZhbmNpbmcuCi0gICAgQUxXQVlTX0lOTElORSBib29sIGFkdmFuY2UoU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIGJvb2wgc2tpcE51bGxDaGFyYWN0ZXJzID0gZmFsc2UpCisgICAgQUxX
QVlTX0lOTElORSBib29sIGFkdmFuY2UoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9v
bCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIHNvdXJjZS5hZHZh
bmNlKCk7CiAgICAgICAgIHJldHVybiBwZWVrKHNvdXJjZSwgc2tpcE51bGxDaGFyYWN0ZXJzKTsK
ICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIGFkdmFuY2VQYXN0Tm9uTmV3bGluZShTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgYWR2YW5jZVBhc3ROb25OZXdsaW5lKFBBTDo6U2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIGJvb2wgc2tpcE51bGxDaGFyYWN0ZXJzID0gZmFsc2UpCiAgICAgewog
ICAgICAgICBzb3VyY2UuYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7CiAgICAgICAgIHJldHVybiBw
ZWVrKHNvdXJjZSwgc2tpcE51bGxDaGFyYWN0ZXJzKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBwcm9jZXNzTmV4dElucHV0Q2hhcmFjdGVyKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBi
b29sIHNraXBOdWxsQ2hhcmFjdGVycykKKyAgICBib29sIHByb2Nlc3NOZXh0SW5wdXRDaGFyYWN0
ZXIoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMp
CiAgICAgewogICAgIFByb2Nlc3NBZ2FpbjoKICAgICAgICAgQVNTRVJUKG1fbmV4dElucHV0Q2hh
cmFjdGVyID09IHNvdXJjZS5jdXJyZW50Q2hhcmFjdGVyKCkpOwpAQCAtMTA5LDcgKzEwOSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyBib29s
IGlzQXRFbmRPZkZpbGUoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCisgICAgc3RhdGljIGJvb2wg
aXNBdEVuZE9mRmlsZShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHNvdXJjZS5pc0Nsb3NlZCgpICYmIHNvdXJjZS5sZW5ndGgoKSA9PSAxOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVu
dC5jcHAKaW5kZXggMTM3NzE1Y2YzNjczZjI2MmFmNThkMjRhM2Q2NWZjZWRiZTJhODU3ZS4uODcy
NDdjZDgxZmU0YTM0MWI1ZTY4MzExMDVlYTA2ZmIxZGUwNjNkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAKQEAgLTMyLDEyICsz
MiwxMiBAQAogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRGF0ZVRpbWVG
aWVsZEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiRGF0ZVRpbWVGaWVsZHNTdGF0ZS5oIgotI2luY2x1
ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCiAjaW5jbHVkZSAiRGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTG9jYWxl
LmgiCiAjaW5jbHVkZSAiU2hhZG93UHNldWRvSWRzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L0RhdGVUaW1lRm9ybWF0Lmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTQ3
LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKERhdGVUaW1lRWRpdEVsZW1lbnQpOwogCi1jbGFzcyBEYXRlVGltZUVkaXRC
dWlsZGVyIGZpbmFsIDogcHJpdmF0ZSBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKK2Ns
YXNzIERhdGVUaW1lRWRpdEJ1aWxkZXIgZmluYWwgOiBwcml2YXRlIFBBTDo6RGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0ZVRpbWVFZGl0
QnVpbGRlcik7CiAKIHB1YmxpYzoKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIC8vIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zOgotICAgIHZv
aWQgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlLCBpbnQpOworICAgIHZvaWQg
dmlzaXRGaWVsZChQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCk7CiAgICAgdm9p
ZCB2aXNpdExpdGVyYWwoY29uc3QgU3RyaW5nJik7CiAKICAgICBEYXRlVGltZUVkaXRFbGVtZW50
JiBtX2VkaXRFbGVtZW50OwpAQCAtNzMsNTEgKzczLDUxIEBAIERhdGVUaW1lRWRpdEJ1aWxkZXI6
OkRhdGVUaW1lRWRpdEJ1aWxkZXIoRGF0ZVRpbWVFZGl0RWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
RGF0CiBib29sIERhdGVUaW1lRWRpdEJ1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmluZyYgZm9ybWF0
U3RyaW5nKQogewogICAgIG1fZWRpdEVsZW1lbnQucmVzZXRGaWVsZHMoKTsKLSAgICByZXR1cm4g
RGF0ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1hdFN0cmluZywgKnRoaXMpOworICAgIHJldHVybiBQ
QUw6OkRhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0aGlzKTsKIH0KIAotdm9p
ZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGUgZmllbGRUeXBlLCBpbnQgY291bnQpCit2b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0
RmllbGQoUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50IGNvdW50
KQogewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fZWRpdEVsZW1lbnQuZG9jdW1lbnQoKTsK
IAogICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlRGF5T2ZNb250aDogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlRGF5T2ZNb250aDogewogICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1l
RGF5RmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZy
YWN0aW9uYWxTZWNvbmQ6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUZyYWN0aW9uYWxTZWNvbmQ6IHsKICAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRl
VGltZU1pbGxpc2Vjb25kRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1l
bnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUhvdXIxMTogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSG91cjExOiB7CiAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVIb3Vy
RmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIDAsIDExKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVIb3VyMTI6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIx
MjogewogICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50LCAxLCAxMikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjIz
OiB7CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6IHsKICAg
ICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMjMpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNDogeworICAg
IGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OiB7CiAgICAgICAgIG1f
ZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQsIG1fZWRpdEVsZW1lbnQsIDEsIDI0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNaW51dGU6IHsKKyAgICBjYXNlIFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZTogewogICAgICAgICBtX2VkaXRFbGVt
ZW50LmFkZEZpZWxkKERhdGVUaW1lTWludXRlRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQs
IG1fZWRpdEVsZW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoOgotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZU1vbnRoU3RhbmRBbG9uZTogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlTW9udGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVN
b250aFN0YW5kQWxvbmU6IHsKICAgICAgICAgY29uc3RleHByIGludCBjb3VudEZvckFiYnJldmlh
dGVkTW9udGggPSAzOwogICAgICAgICBjb25zdGV4cHIgaW50IGNvdW50Rm9yRnVsbE1vbnRoID0g
NDsKICAgICAgICAgY29uc3RleHByIGludCBjb3VudEZvck5hcnJvd01vbnRoID0gNTsKQEAgLTEy
NSwxMiArMTI1LDEyIEBAIHZvaWQgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZChEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50IGNvCiAgICAgICAgIHN3aXRjaCAo
Y291bnQpIHsKICAgICAgICAgY2FzZSBjb3VudEZvck5hcnJvd01vbnRoOgogICAgICAgICBjYXNl
IGNvdW50Rm9yQWJicmV2aWF0ZWRNb250aDogewotICAgICAgICAgICAgYXV0byBmaWVsZCA9IERh
dGVUaW1lU3ltYm9saWNNb250aEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRF
bGVtZW50LCBmaWVsZFR5cGUgPT0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoID8gbV9w
YXJhbWV0ZXJzLmxvY2FsZS5zaG9ydE1vbnRoTGFiZWxzKCkgOiBtX3BhcmFtZXRlcnMubG9jYWxl
LnNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkpOworICAgICAgICAgICAgYXV0byBmaWVsZCA9
IERhdGVUaW1lU3ltYm9saWNNb250aEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2Vk
aXRFbGVtZW50LCBmaWVsZFR5cGUgPT0gUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9u
dGggPyBtX3BhcmFtZXRlcnMubG9jYWxlLnNob3J0TW9udGhMYWJlbHMoKSA6IG1fcGFyYW1ldGVy
cy5sb2NhbGUuc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKSk7CiAgICAgICAgICAgICBtX2Vk
aXRFbGVtZW50LmFkZEZpZWxkKGZpZWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBjYXNlIGNvdW50Rm9yRnVsbE1vbnRoOiB7Ci0gICAgICAgICAgICBhdXRvIGZp
ZWxkID0gRGF0ZVRpbWVTeW1ib2xpY01vbnRoRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQs
IG1fZWRpdEVsZW1lbnQsIGZpZWxkVHlwZSA9PSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9u
dGggPyBtX3BhcmFtZXRlcnMubG9jYWxlLm1vbnRoTGFiZWxzKCkgOiBtX3BhcmFtZXRlcnMubG9j
YWxlLnN0YW5kQWxvbmVNb250aExhYmVscygpKTsKKyAgICAgICAgICAgIGF1dG8gZmllbGQgPSBE
YXRlVGltZVN5bWJvbGljTW9udGhGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0
RWxlbWVudCwgZmllbGRUeXBlID09IFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRo
ID8gbV9wYXJhbWV0ZXJzLmxvY2FsZS5tb250aExhYmVscygpIDogbV9wYXJhbWV0ZXJzLmxvY2Fs
ZS5zdGFuZEFsb25lTW9udGhMYWJlbHMoKSk7CiAgICAgICAgICAgICBtX2VkaXRFbGVtZW50LmFk
ZEZpZWxkKGZpZWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTQwLDIy
ICsxNDAsMjIgQEAgdm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQgY28KICAgICAgICAgfQogICAgIH0KIAot
ICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDogeworICAgIGNhc2UgUEFM
OjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9kOiB7CiAgICAgICAgIG1fZWRpdEVsZW1l
bnQuYWRkRmllbGQoRGF0ZVRpbWVNZXJpZGllbUZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
LCBtX2VkaXRFbGVtZW50LCBtX3BhcmFtZXRlcnMubG9jYWxlLnRpbWVBTVBNTGFiZWxzKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVNlY29uZDogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vj
b25kOiB7CiAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVTZWNvbmRGaWVs
ZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCkpOwogCiAgICAgICAgIGlm
IChtX3BhcmFtZXRlcnMuc2hvdWxkSGF2ZU1pbGxpc2Vjb25kRmllbGQpIHsKICAgICAgICAgICAg
IHZpc2l0TGl0ZXJhbChtX3BhcmFtZXRlcnMubG9jYWxlLmxvY2FsaXplZERlY2ltYWxTZXBhcmF0
b3IoKSk7Ci0gICAgICAgICAgICB2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVG
cmFjdGlvbmFsU2Vjb25kLCAzKTsKKyAgICAgICAgICAgIHZpc2l0RmllbGQoUEFMOjpEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZCwgMyk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVll
YXI6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXI6IHsKICAg
ICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZVllYXJGaWVsZEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAK
aW5kZXggYzMwNzcwN2YzYTcyNGQ2MjA4MDMzNjA4MmNjOGRlNTg3NWE3MGI5Zi4uNGZkNjI2YWZl
OGE3ZWUxZjkyNTBmZjBlZGE2ODc1ZGFmNWM2NDdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0xNjksMTIgKzE2OSwxMiBA
QCB2b2lkIFJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBhdXRvJiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAg
ICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKICAgICBt
dXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbGV4RGlyZWN0aW9u
OjpDb2x1bW4gOiBGbGV4RGlyZWN0aW9uOjpSb3cpOwotICAgIFRleHREaXJlY3Rpb24gb2xkVGV4
dERpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IG9sZFRleHREaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOwogICAgIGlmIChpc1ZlcnRp
Y2FsKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXb3JrIGFyb3VuZCByb3VuZGluZyBpc3N1ZXMgaW4g
UlRMIHZlcnRpY2FsIHNsaWRlcnMuIFdlIHdhbnQgdGhlbSB0bwogICAgICAgICAvLyByZW5kZXIg
aWRlbnRpY2FsbHkgdG8gTFRSIHZlcnRpY2FsIHNsaWRlcnMuIFdlIGNhbiByZW1vdmUgdGhpcyB3
b3JrIGFyb3VuZCB3aGVuCiAgICAgICAgIC8vIHN1YnBpeGVsIHJlbmRlcmluZyBpcyBlbmFibGVk
IG9uIGFsbCBwb3J0cy4KLSAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0RGlyZWN0aW9uKFRleHRE
aXJlY3Rpb246OkxUUik7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihQQUw6
OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgfQogCiAgICAgUmVuZGVyQm94KiB0aHVtYiA9IGlu
cHV0LnNsaWRlclRodW1iRWxlbWVudCgpID8gaW5wdXQuc2xpZGVyVGh1bWJFbGVtZW50KCktPnJl
bmRlckJveCgpIDogbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDViOWEyZDM5MjA0NzkxMGU3
OTUyZjNlNjMyOTJkNzdhOGY5ZmIxZmMuLjYxMTBmNDk2MzI3NmZjMTFhYjAzZmY1N2RkYzllOWRj
NjUyNGEzNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6b3B0aW9u
YWw8U3R5bGU6OkVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShjCiAgICAgbmV3U3R5bGUtPnNldEZsZXhHcm93KDEpOwogICAgIG5ld1N0eWxl
LT5zZXRNaW5XaWR0aChMZW5ndGggeyAwLCBMZW5ndGhUeXBlOjpGaXhlZCB9KTsgLy8gTmVlZGVk
IGZvciBjb3JyZWN0IHNocmlua2luZy4KICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShEaXNwbGF5
VHlwZTo6QmxvY2spOwotICAgIG5ld1N0eWxlLT5zZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbjo6
TFRSKTsKKyAgICBuZXdTdHlsZS0+c2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KTsKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBzaGFkb3cgRE9NIHRvIGJlIGVkaXRhYmxlLCBz
byB3ZSBzZXQgdGhpcyBibG9jayB0byByZWFkLW9ubHkgaW4gY2FzZSB0aGUgaW5wdXQgaXRzZWxm
IGlzIGVkaXRhYmxlLgogICAgIG5ld1N0eWxlLT5zZXRVc2VyTW9kaWZ5KFVzZXJNb2RpZnk6OlJl
YWRPbmx5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJl
ZExpbmVSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQnVmZmVyZWRMaW5lUmVh
ZGVyLmgKaW5kZXggOTMzNGFlNzNlZmU5YjMyOWE5OGZmZGZjODhkMjJlZTIyMGQ0NDVlNi4uNzkw
MTM1ZjM2YTdjZjJmNTIyNGY5NWIwMjY2NmU4NDY5YzY2NWU2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5oCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8
cGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoK
ICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV4dExpbmUoKTsKIAogcHJpdmF0ZToKLSAgICBT
ZWdtZW50ZWRTdHJpbmcgbV9idWZmZXI7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9idWZm
ZXI7CiAgICAgU3RyaW5nQnVpbGRlciBtX2xpbmVCdWZmZXI7CiAgICAgYm9vbCBtX2VuZE9mU3Ry
ZWFtIHsgZmFsc2UgfTsKICAgICBib29sIG1fbWF5YmVTa2lwTEYgeyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCmluZGV4IGFhNjE1N2Ni
YjNjZDIwZGFjZWNmYmMxYWY0OTY2MGM0NTI1NWUxOTcuLjQ1MDkzMTRhMDJhOTgwYWQyODBmODhk
MDg4OGZiNjc4YTRiZGFhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUVG9rZW5pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFRva2VuaXplci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgaW5saW5lIGJvb2wgZW1pdFRva2VuKFdl
YlZUVFRva2VuJiByZXN1bHRUb2tlbiwgY29uc3QgV2ViVlRUVG9rZW4mIHRva2VuKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBhZHZhbmNlQW5kRW1pdFRva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBXZWJWVFRUb2tlbiYgcmVzdWx0VG9rZW4sIGNvbnN0IFdlYlZUVFRv
a2VuJiB0b2tlbikKK2lubGluZSBib29sIGFkdmFuY2VBbmRFbWl0VG9rZW4oUEFMOjpTZWdtZW50
ZWRTdHJpbmcmIHNvdXJjZSwgV2ViVlRUVG9rZW4mIHJlc3VsdFRva2VuLCBjb25zdCBXZWJWVFRU
b2tlbiYgdG9rZW4pCiB7CiAgICAgc291cmNlLmFkdmFuY2UoKTsKICAgICByZXR1cm4gZW1pdFRv
a2VuKHJlc3VsdFRva2VuLCB0b2tlbik7CkBAIC03OCw3ICs3OCw3IEBAIFdlYlZUVFRva2VuaXpl
cjo6V2ViVlRUVG9rZW5pemVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7CiAgICAgLy8gQXBwZW5k
IGFuIEVPRiBtYXJrZXIgYW5kIGNsb3NlIHRoZSBpbnB1dCAic3RyZWFtIi4KICAgICBBU1NFUlQo
IW1faW5wdXQuaXNDbG9zZWQoKSk7Ci0gICAgbV9pbnB1dC5hcHBlbmQoU3RyaW5nIHsgJmtFbmRP
ZkZpbGVNYXJrZXIsIDEgfSk7CisgICAgbV9pbnB1dC5hcHBlbmQoU3RyaW5nIHsgJlBBTDo6a0Vu
ZE9mRmlsZU1hcmtlciwgMSB9KTsKICAgICBtX2lucHV0LmNsb3NlKCk7CiB9CiAKQEAgLTg4LDcg
Kzg4LDcgQEAgYm9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihXZWJWVFRUb2tlbiYgdG9r
ZW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVDaGFyIGNoYXJhY3RlciA9IG1fcHJl
cHJvY2Vzc29yLm5leHRJbnB1dENoYXJhY3RlcigpOwotICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikgeworICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFy
a2VyKSB7CiAgICAgICAgIG1fcHJlcHJvY2Vzc29yLmFkdmFuY2UobV9pbnB1dCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTAsNyArMTEwLDcgQEAgRGF0YVN0YXRlOgogICAg
ICAgICAgICAgLy8gKE9uIHRoZSBuZXh0IGNhbGwgdG8gbmV4dFRva2VuIHdlIHdpbGwgc2VlICc8
JyBhZ2FpbiwgYnV0IHRha2UgdGhlIG90aGVyIGJyYW5jaCBpbiB0aGlzIGlmIGluc3RlYWQuKQog
ICAgICAgICAgICAgcmV0dXJuIGVtaXRUb2tlbih0b2tlbiwgV2ViVlRUVG9rZW46OlN0cmluZ1Rv
a2VuKHJlc3VsdC50b1N0cmluZygpKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNoYXJh
Y3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IFBB
TDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4o
bV9pbnB1dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpTdHJpbmdUb2tlbihyZXN1bHQudG9TdHJpbmco
KSkpOwogICAgIGVsc2UgewogICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7CkBAIC0x
NDMsNyArMTQzLDcgQEAgRXNjYXBlU3RhdGU6CiAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0g
JzwnKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIGVt
aXRUb2tlbih0b2tlbiwgV2ViVlRUVG9rZW46OlN0cmluZ1Rva2VuKHJlc3VsdC50b1N0cmluZygp
KSk7Ci0gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAg
IH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAg
ICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBhZHZhbmNlQW5kRW1pdFRv
a2VuKG1faW5wdXQsIHRva2VuLCBXZWJWVFRUb2tlbjo6U3RyaW5nVG9rZW4ocmVzdWx0LnRvU3Ry
aW5nKCkpKTsKICAgICB9IGVsc2UgewpAQCAtMTcwLDcgKzE3MCw3IEBAIFRhZ1N0YXRlOgogICAg
IH0gZWxzZSBpZiAoaXNBU0NJSURpZ2l0KGNoYXJhY3RlcikpIHsKICAgICAgICAgcmVzdWx0LmFw
cGVuZChjaGFyYWN0ZXIpOwogICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUaW1lc3RhbXBUYWdT
dGF0ZSk7Ci0gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJhY3RlciA9PSBr
RW5kT2ZGaWxlTWFya2VyKSB7CisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNo
YXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgQVNTRVJUKHJlc3Vs
dC5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gYWR2YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0
LCB0b2tlbiwgV2ViVlRUVG9rZW46OlN0YXJ0VGFnKHJlc3VsdC50b1N0cmluZygpKSk7CiAgICAg
fSBlbHNlIHsKQEAgLTE4Myw3ICsxODMsNyBAQCBTdGFydFRhZ1N0YXRlOgogICAgICAgICBXRUJW
VFRfQURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7CiAgICAgZWxzZSBpZiAoY2hh
cmFjdGVyID09ICcuJykKICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdDbGFzc1N0
YXRlKTsKLSAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJhY3RlciA9PSBrRW5k
T2ZGaWxlTWFya2VyKQorICAgIGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVy
ID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0
VG9rZW4obV9pbnB1dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpTdGFydFRhZyhyZXN1bHQudG9TdHJp
bmcoKSkpOwogICAgIGVsc2UgewogICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7CkBA
IC0xOTksNyArMTk5LDcgQEAgU3RhcnRUYWdDbGFzc1N0YXRlOgogICAgICAgICBhZGROZXdDbGFz
cyhjbGFzc2VzLCBidWZmZXIpOwogICAgICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgICAgV0VC
VlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdDbGFzc1N0YXRlKTsKLSAgICB9IGVsc2UgaWYgKGNoYXJh
Y3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICB9IGVs
c2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1h
cmtlcikgewogICAgICAgICBhZGROZXdDbGFzcyhjbGFzc2VzLCBidWZmZXIpOwogICAgICAgICBi
dWZmZXIuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1
dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpTdGFydFRhZyhyZXN1bHQudG9TdHJpbmcoKSwgY2xhc3Nl
cy50b0F0b21TdHJpbmcoKSkpOwpAQCAtMjA5LDE5ICsyMDksMTkgQEAgU3RhcnRUYWdDbGFzc1N0
YXRlOgogICAgIH0KIAogU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGU6Ci0gICAgaWYgKGNoYXJhY3Rl
ciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpCisgICAgaWYgKGNoYXJh
Y3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1dCwgdG9rZW4sIFdlYlZUVFRva2Vu
OjpTdGFydFRhZyhyZXN1bHQudG9TdHJpbmcoKSwgY2xhc3Nlcy50b0F0b21TdHJpbmcoKSwgYnVm
ZmVyLnRvQXRvbVN0cmluZygpKSk7CiAgICAgYnVmZmVyLmFwcGVuZChjaGFyYWN0ZXIpOwogICAg
IFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKIAogRW5kVGFnU3Rh
dGU6Ci0gICAgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVN
YXJrZXIpCisgICAgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBBTDo6a0Vu
ZE9mRmlsZU1hcmtlcikKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1
dCwgdG9rZW4sIFdlYlZUVFRva2VuOjpFbmRUYWcocmVzdWx0LnRvU3RyaW5nKCkpKTsKICAgICBy
ZXN1bHQuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRW5kVGFnU3Rh
dGUpOwogCiBUaW1lc3RhbXBUYWdTdGF0ZToKLSAgICBpZiAoY2hhcmFjdGVyID09ICc+JyB8fCBj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKKyAgICBpZiAoY2hhcmFjdGVyID09ICc+JyB8
fCBjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKQogICAgICAgICByZXR1cm4gYWR2
YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0LCB0b2tlbiwgV2ViVlRUVG9rZW46OlRpbWVzdGFtcFRh
ZyhyZXN1bHQudG9TdHJpbmcoKSkpOwogICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyKTsKICAg
ICBXRUJWVFRfQURWQU5DRV9UTyhUaW1lc3RhbXBUYWdTdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuaAppbmRleCAxMDM3NjdlZTNiODFjNmY3YjVjMzBi
MTkzN2E1N2FkNDhiYTBiNzIzLi5kY2Q2YjhjODViMDZhYmFkN2QwZWM5MzVjMjFmYTQ1MjhkMTY4
YmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXpl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIG5ldmVyU2tpcE51bGxDaGFy
YWN0ZXJzKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKLSAgICBTZWdtZW50ZWRTdHJp
bmcgbV9pbnB1dDsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBtX2lucHV0OwogICAgIElucHV0
U3RyZWFtUHJlcHJvY2Vzc29yPFdlYlZUVFRva2VuaXplcj4gbV9wcmVwcm9jZXNzb3I7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggMjlhMDA2ZmMzMTRlM2QxMTkyNGY2
MGI4NzFiODJlMDYyOGI3MmViZi4uMWIxNWVjNTliN2EwY2VhOWI4MWM4MmUxMWRhNzMyYTJkY2Q3
MGQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMTA4Myw3ICsxMDgzLDcg
QEAgTGF5b3V0U2l6ZSBGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlv
bk9mZnNldChjb25zdCBCb3gmIGxheW91dEIKICAgICByZXR1cm4geyBsZWZ0UG9zaXRpb25PZmZz
ZXQsIHRvcFBvc2l0aW9uT2Zmc2V0IH07CiB9CiAKLWlubGluZSBzdGF0aWMgV3JpdGluZ01vZGUg
dXNlZFdyaXRpbmdNb2RlKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoraW5saW5lIHN0YXRpYyBQQUw6
OldyaXRpbmdNb2RlIHVzZWRXcml0aW5nTW9kZShjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXdyaXRpbmctbW9kZXMtNC8jbG9naWNhbC1k
aXJlY3Rpb24tbGF5b3V0CiAgICAgLy8gRmxvdy1yZWxhdGl2ZSBkaXJlY3Rpb25zIGFyZSBjYWxj
dWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrIG9mIHRoZSBib3guCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJl
YWtlci5jcHAKaW5kZXggOGU5NTViZjczMDI3MGNkNjVlZWI5M2JjZTkwM2I0NmMwNWIyYjY2My4u
MjBhOTQ0MDg4YTYwMTBiZGIwOTk5ZTFjNTM5ODAxNTJhOTY3NDc5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVu
dEJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0h5cGhl
bmF0aW9uLmg+CiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgogI2luY2x1ZGUgIklubGluZVRleHRJ
dGVtLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCkBAIC00NTAsNyArNDUwLDcg
QEAgc3RkOjpvcHRpb25hbDxJbmxpbmVDb250ZW50QnJlYWtlcjo6UGFydGlhbFJ1bj4gSW5saW5l
Q29udGVudEJyZWFrZXI6OnRyeUJyZWFraW4KICAgICAgICAgICAgIGF1dG8gaHlwaGVuV2lkdGgg
PSBJbmxpbmVMYXlvdXRVbml0IHsgZm9udENhc2NhZGUud2lkdGgoVGV4dFJ1biB7IFN0cmluZ1Zp
ZXcgeyBzdHlsZS5oeXBoZW5TdHJpbmcoKSB9IH0pIH07CiAgICAgICAgICAgICBpZiAoY2FuZGlk
YXRlVGV4dFJ1bi5pc092ZXJmbG93aW5nUnVuKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhdmFp
bGFibGVXaWR0aEV4Y2x1ZGluZ0h5cGhlbiA9IGF2YWlsYWJsZVdpZHRoIC0gaHlwaGVuV2lkdGg7
Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlwaGVuIDw9IDAg
fHwgIWVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24oYXZhaWxhYmxlV2lkdGhFeGNsdWRpbmdIeXBo
ZW4sIGZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlV2lkdGhFeGNsdWRpbmdIeXBoZW4gPD0gMCB8fCAhUEFMOjplbm91Z2hXaWR0aEZvckh5cGhl
bmF0aW9uKGF2YWlsYWJsZVdpZHRoRXhjbHVkaW5nSHlwaGVuLCBmb250Q2FzY2FkZS5waXhlbFNp
emUoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAg
bGVmdFNpZGVMZW5ndGggPSBUZXh0VXRpbDo6YnJlYWtXb3JkKGlubGluZVRleHRJdGVtLCBmb250
Q2FzY2FkZSwgY2FuZGlkYXRlUnVuLmxvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlV2lkdGhFeGNsdWRp
bmdIeXBoZW4sIGNhbmRpZGF0ZVRleHRSdW4ubG9naWNhbExlZnQpLmxlbmd0aDsKICAgICAgICAg
ICAgIH0KQEAgLTQ1OCw3ICs0NTgsNyBAQCBzdGQ6Om9wdGlvbmFsPElubGluZUNvbnRlbnRCcmVh
a2VyOjpQYXJ0aWFsUnVuPiBJbmxpbmVDb250ZW50QnJlYWtlcjo6dHJ5QnJlYWtpbgogICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAvLyBBZGp1c3QgYmVmb3JlIGluZGV4
IHRvIGFjY29tbW9kYXRlIHRoZSBsaW1pdC1hZnRlciB2YWx1ZSAoaXQncyB0aGUgbGFzdCBwb3Rl
bnRpYWwgaHlwaGVuIGxvY2F0aW9uIGluIHRoaXMgcnVuKS4KICAgICAgICAgICAgIGF1dG8gaHlw
aGVuQmVmb3JlID0gc3RkOjptaW4obGVmdFNpZGVMZW5ndGgsIHJ1bkxlbmd0aCAtIGxpbWl0QWZ0
ZXIpICsgMTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0aW9uID0gbGFzdEh5cGhl
bkxvY2F0aW9uKFN0cmluZ1ZpZXcoaW5saW5lVGV4dEl0ZW0uaW5saW5lVGV4dEJveCgpLmNvbnRl
bnQoKSkuc3Vic3RyaW5nKGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGlubGluZVRleHRJdGVtLmxl
bmd0aCgpKSwgaHlwaGVuQmVmb3JlLCBzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0aW9uID0gUEFMOjpsYXN0SHlwaGVuTG9jYXRpb24oU3Ry
aW5nVmlldyhpbmxpbmVUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCkuY29udGVudCgpKS5zdWJzdHJp
bmcoaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpLCBoeXBo
ZW5CZWZvcmUsIHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpOwogICAgICAgICAgICAgaWYgKCFoeXBo
ZW5Mb2NhdGlvbiB8fCBoeXBoZW5Mb2NhdGlvbiA8IGxpbWl0QmVmb3JlKQogICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAvLyBoeXBoZW5Mb2NhdGlvbiBpcyByZWxhdGl2
ZSB0byB0aGUgc3RhcnQgb2YgdGhpcyBJbmxpbmVJdGVtVGV4dC4KQEAgLTY0OSw3ICs2NDksNyBA
QCBPcHRpb25TZXQ8SW5saW5lQ29udGVudEJyZWFrZXI6OldvcmRCcmVha1J1bGU+IElubGluZUNv
bnRlbnRCcmVha2VyOjp3b3JkQnJlYWtCZQogICAgICAgICByZXR1cm4geyBXb3JkQnJlYWtSdWxl
OjpBdEFyYml0cmFyeVBvc2l0aW9uV2l0aGluV29yZHMgfTsKIAogICAgIGF1dG8gaW5jbHVkZUh5
cGhlbmF0aW9uSWZBbGxvd2VkID0gWyZdKHN0ZDo6b3B0aW9uYWw8SW5saW5lQ29udGVudEJyZWFr
ZXI6OldvcmRCcmVha1J1bGU+IHdvcmRCcmVha1J1bGUpIC0+IE9wdGlvblNldDxJbmxpbmVDb250
ZW50QnJlYWtlcjo6V29yZEJyZWFrUnVsZT4gewotICAgICAgICBhdXRvIGh5cGhlbmF0aW9uSXNB
bGxvd2VkID0gIW5faHlwaGVuYXRpb25Jc0Rpc2FibGVkICYmIHN0eWxlLmh5cGhlbnMoKSA9PSBI
eXBoZW5zOjpBdXRvICYmIGNhbkh5cGhlbmF0ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKKyAg
ICAgICAgYXV0byBoeXBoZW5hdGlvbklzQWxsb3dlZCA9ICFuX2h5cGhlbmF0aW9uSXNEaXNhYmxl
ZCAmJiBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBQQUw6OmNhbkh5cGhlbmF0
ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKICAgICAgICAgaWYgKGh5cGhlbmF0aW9uSXNBbGxv
d2VkKSB7CiAgICAgICAgICAgICBpZiAod29yZEJyZWFrUnVsZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4geyAqd29yZEJyZWFrUnVsZSwgV29yZEJyZWFrUnVsZTo6QXRIeXBoZW5hdGlvbk9wcG9y
dHVuaXRpZXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVJdGVtc0J1aWxkZXIuY3BwCmlu
ZGV4IDQxZjFiMmY0NTVjOWRiODJiMWU1NzMxMDZhYmQ0Y2MzMTkwZjJjY2YuLjc4ZGY5ZTVkMGQ2
ODY2MjBhZGM2NTM1MDczOGVjNzIyN2NjNDhiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lSXRlbXNCdWlsZGVyLmNwcApAQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBidWlsZEJpZGlQYXJhZ3JhcGgoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCAgU3Ry
aW5nQnVpCiAgICAgICAgIGVsc2UgaWYgKGlubGluZUl0ZW0uaXNJbmxpbmVCb3hTdGFydCgpIHx8
IGlubGluZUl0ZW0uaXNJbmxpbmVCb3hFbmQoKSkgewogICAgICAgICAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy13cml0aW5nLW1vZGVzLyN1bmljb2RlLWJpZGkKICAgICAgICAg
ICAgIGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOwotICAgICAgICAgICAgYXV0byBp
bml0aWF0ZXNDb250cm9sQ2hhcmFjdGVyID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6
TG9naWNhbCAmJiBzdHlsZS51bmljb2RlQmlkaSgpICE9IEVVbmljb2RlQmlkaTo6VUJOb3JtYWw7
CisgICAgICAgICAgICBhdXRvIGluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIgPSBzdHlsZS5ydGxP
cmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gUEFM
OjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsOwogICAgICAgICAgICAgaWYgKCFpbml0aWF0ZXNDb250
cm9sQ2hhcmFjdGVyKSB7CiAgICAgICAgICAgICAgICAgLy8gT3BhcXVlIGl0ZW1zIGRvIG5vdCBo
YXZlIHBvc2l0aW9uIGluIHRoZSBiaWRpIHBhcmFncmFwaC4gVGhleSBpbmhlcml0IHRoZWlyIGJp
ZGkgbGV2ZWwgZnJvbSB0aGUgbmV4dCBpbmxpbmUgaXRlbS4KICAgICAgICAgICAgICAgICBpbmxp
bmVJdGVtT2Zmc2V0TGlzdC51bmNoZWNrZWRBcHBlbmQoeyB9KTsKQEAgLTIwMiwyNCArMjAyLDI0
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEJpZGlQYXJhZ3JhcGgoY29uc3QgSW5saW5lSXRl
bXMmIGlubGluZUl0ZW1zLCAgU3RyaW5nQnVpCiAgICAgICAgICAgICBpbmxpbmVJdGVtT2Zmc2V0
TGlzdC51bmNoZWNrZWRBcHBlbmQoeyBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5sZW5ndGgoKSB9
KTsKICAgICAgICAgICAgIGF1dG8gaXNFbnRlcmluZ0JpZGkgPSBpbmxpbmVJdGVtLmlzSW5saW5l
Qm94U3RhcnQoKTsKICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUudW5pY29kZUJpZGkoKSkgewot
ICAgICAgICAgICAgY2FzZSBFVW5pY29kZUJpZGk6OlVCTm9ybWFsOgorICAgICAgICAgICAgY2Fz
ZSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw6CiAgICAgICAgICAgICAgICAgLy8gVGhlIGJv
eCBkb2VzIG5vdCBvcGVuIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZW1iZWRkaW5nIHdpdGggcmVz
cGVjdCB0byB0aGUgYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0uCiAgICAgICAgICAgICAgICAgLy8g
Rm9yIGlubGluZSBib3hlcywgaW1wbGljaXQgcmVvcmRlcmluZyB3b3JrcyBhY3Jvc3MgYm94IGJv
dW5kYXJpZXMuCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVVbmljb2RlQmlkaTo6RW1iZWQ6Cisg
ICAgICAgICAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZDoKICAgICAgICAgICAgICAg
ICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAoc3R5bGUu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVmdFRvUmlnaHRFbWJlZCA6IHJpZ2h0VG9MZWZ0
RW1iZWQpIDogcG9wRGlyZWN0aW9uYWxGb3JtYXR0aW5nKTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpPdmVycmlkZToKKyAgICAgICAgICAg
IGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Ok92ZXJyaWRlOgogICAgICAgICAgICAgICAgIHBhcmFn
cmFwaENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChzdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBsZWZ0VG9SaWdodE92ZXJyaWRlIDogcmlnaHRUb0xlZnRPdmVy
cmlkZSkgOiBwb3BEaXJlY3Rpb25hbEZvcm1hdHRpbmcpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFVW5pY29kZUJpZGk6Oklzb2xhdGU6CisgICAgICAgICAgICBj
YXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlOgogICAgICAgICAgICAgICAgIHBhcmFncmFw
aENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChzdHlsZS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBsZWZ0VG9SaWdodElzb2xhdGUgOiByaWdodFRvTGVmdElzb2xhdGUp
IDogcG9wRGlyZWN0aW9uYWxJc29sYXRlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ6CisgICAgICAgICAgICBjYXNlIFBB
TDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ6CiAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29u
dGVudEJ1aWxkZXIuYXBwZW5kKGlzRW50ZXJpbmdCaWRpID8gZmlyc3RTdHJvbmdJc29sYXRlIDog
cG9wRGlyZWN0aW9uYWxJc29sYXRlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGU6CisgICAgICAgICAgICBjYXNl
IFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGU6CiAgICAgICAgICAgICAgICAgaWYg
KGlzRW50ZXJpbmdCaWRpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENvbnRlbnRC
dWlsZGVyLmFwcGVuZChmaXJzdFN0cm9uZ0lzb2xhdGUpOwogICAgICAgICAgICAgICAgICAgICBw
YXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gbGVmdFRvUmlnaHRPdmVycmlkZSA6IHJpZ2h0VG9MZWZ0T3ZlcnJpZGUpOwpAQCAtMjYz
LDcgKzI2Myw3IEBAIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpicmVha0FuZENvbXB1dGVCaWRp
TGV2ZWxzKElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKICAgICB9KTsKIAogICAgIFVCaURpTGV2
ZWwgcm9vdEJpZGlMZXZlbCA9IFVCSURJX0RFRkFVTFRfTFRSOwotICAgIGJvb2wgdXNlSGV1cmlz
dGljQmFzZURpcmVjdGlvbiA9IHJvb3QoKS5zdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gRVVuaWNv
ZGVCaWRpOjpQbGFpbnRleHQ7CisgICAgYm9vbCB1c2VIZXVyaXN0aWNCYXNlRGlyZWN0aW9uID0g
cm9vdCgpLnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50
ZXh0OwogICAgIGlmICghdXNlSGV1cmlzdGljQmFzZURpcmVjdGlvbikKICAgICAgICAgcm9vdEJp
ZGlMZXZlbCA9IHJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFVCSURJ
X0xUUiA6IFVCSURJX1JUTDsKIApAQCAtNDc1LDE0ICs0NzUsMTQgQEAgdm9pZCBJbmxpbmVJdGVt
c0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0YXJ0KGNvbnN0IEJveCYgaW5saW5lQm94LCBJbmxp
bmVJdGVtcyYKIHsKICAgICBpbmxpbmVJdGVtcy5hcHBlbmQoeyBpbmxpbmVCb3gsIElubGluZUl0
ZW06OlR5cGU6OklubGluZUJveFN0YXJ0IH0pOwogICAgIGF1dG8mIHN0eWxlID0gaW5saW5lQm94
LnN0eWxlKCk7Ci0gICAgbV9oYXNTZWVuQmlkaUNvbnRlbnQgPSBtX2hhc1NlZW5CaWRpQ29udGVu
dCB8fCAoc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6TG9naWNhbCAmJiBzdHlsZS51bmlj
b2RlQmlkaSgpICE9IEVVbmljb2RlQmlkaTo6VUJOb3JtYWwpOyAKKyAgICBtX2hhc1NlZW5CaWRp
Q29udGVudCA9IG1faGFzU2VlbkJpZGlDb250ZW50IHx8IChzdHlsZS5ydGxPcmRlcmluZygpID09
IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gUEFMOjpFVW5pY29kZUJp
ZGk6OlVCTm9ybWFsKTsgCiB9CiAKIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpoYW5kbGVJbmxp
bmVCb3hFbmQoY29uc3QgQm94JiBpbmxpbmVCb3gsIElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykK
IHsKICAgICBpbmxpbmVJdGVtcy5hcHBlbmQoeyBpbmxpbmVCb3gsIElubGluZUl0ZW06OlR5cGU6
OklubGluZUJveEVuZCB9KTsKICAgICAvLyBJbmxpbmUgYm94IGVuZCBpdGVtIGl0c2VsZiBjYW4g
bm90IHRyaWdnZXIgYmlkaSBjb250ZW50LgotICAgIEFTU0VSVChoYXNTZWVuQmlkaUNvbnRlbnQo
KSB8fCBpbmxpbmVCb3guc3R5bGUoKS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwgfHwg
aW5saW5lQm94LnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBFVW5pY29kZUJpZGk6OlVCTm9ybWFs
KTsKKyAgICBBU1NFUlQoaGFzU2VlbkJpZGlDb250ZW50KCkgfHwgaW5saW5lQm94LnN0eWxlKCku
cnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsIHx8IGlubGluZUJveC5zdHlsZSgpLnVuaWNv
ZGVCaWRpKCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsKIH0KIAogdm9pZCBJbmxp
bmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUxldmVsQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuY3BwCmlu
ZGV4IDI3MWNlNjRiNjNjM2NhMzA3YzBjMWUyNzVkOGY3ZjU0MDM4M2FhMTQuLjBiNTI0YWJkZDZi
NWRmYzJhNDUxNzIwZWNhNmVkY2FiZWMxZDJjNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUu
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIgogI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBMaW5lOjphcHBseVJ1
bkV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGhvcml6b250YWxBdmFpbGFibGVTcGFjZSkKICAg
ICAvLyBDb2xsZWN0IGFuZCBkaXN0cmlidXRlIHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdGllcy4K
ICAgICBzaXplX3QgbGluZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSAwOwogICAgIFZlY3Rvcjxz
aXplX3Q+IHJ1bnNFeHBhbnNpb25PcHBvcnR1bml0aWVzKG1fcnVucy5zaXplKCkpOwotICAgIFZl
Y3RvcjxFeHBhbnNpb25CZWhhdmlvcj4gcnVuc0V4cGFuc2lvbkJlaGF2aW9ycyhtX3J1bnMuc2l6
ZSgpKTsKKyAgICBWZWN0b3I8UEFMOjpFeHBhbnNpb25CZWhhdmlvcj4gcnVuc0V4cGFuc2lvbkJl
aGF2aW9ycyhtX3J1bnMuc2l6ZSgpKTsKICAgICBhdXRvIGxhc3RSdW5JbmRleFdpdGhDb250ZW50
ID0gc3RkOjpvcHRpb25hbDxzaXplX3Q+IHsgfTsKIAogICAgIC8vIExpbmUgc3RhcnQgYmVoYXZl
cyBhcyBpZiB3ZSBoYWQgYW4gZXhwYW5zaW9uIGhlcmUgKGkuZS4gZmlzdCBydW5zIHNob3VsZCBu
b3Qgc3RhcnQgd2l0aCBhbGxvd2luZyBsZWZ0IGV4cGFuc2lvbikuCkBAIC0xMTQsMTUgKzExNCwx
NSBAQCB2b2lkIExpbmU6OmFwcGx5UnVuRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgaG9yaXpv
bnRhbEF2YWlsYWJsZVNwYWNlKQogICAgIGF1dG8gaGFuZ2luZ1RyYWlsaW5nQ29udGVudExlbmd0
aCA9IG1faGFuZ2luZ1RyYWlsaW5nQ29udGVudC5sZW5ndGgoKTsKICAgICBmb3IgKHNpemVfdCBy
dW5JbmRleCA9IDA7IHJ1bkluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytydW5JbmRleCkgewogICAg
ICAgICBhdXRvJiBydW4gPSBtX3J1bnNbcnVuSW5kZXhdOwotICAgICAgICBpbnQgZXhwYW5zaW9u
QmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uOworICAgICAgICBpbnQgZXhwYW5zaW9uQmVoYXZp
b3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb247CiAgICAgICAgIHNpemVfdCBleHBhbnNpb25PcHBv
cnR1bml0aWVzSW5SdW4gPSAwOwogCiAgICAgICAgIC8vIEZJWE1FOiBDaGVjayB3aHkgd2UgZG9u
J3QgYXBwbHkgZXhwYW5zaW9uIHdoZW4gd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWQuCiAgICAgICAg
IGlmIChydW4uaXNUZXh0KCkgJiYgKCFUZXh0VXRpbDo6c2hvdWxkUHJlc2VydmVTcGFjZXNBbmRU
YWJzKHJ1bi5sYXlvdXRCb3goKSkgfHwgaGFuZ2luZ1RyYWlsaW5nQ29udGVudExlbmd0aCkpIHsK
ICAgICAgICAgICAgIGlmIChydW4uaGFzVGV4dENvbWJpbmUoKSkKLSAgICAgICAgICAgICAgICBl
eHBhbnNpb25CZWhhdmlvciA9IEZvcmJpZExlZnRFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFu
c2lvbjsKKyAgICAgICAgICAgICAgICBleHBhbnNpb25CZWhhdmlvciA9IFBBTDo6Rm9yYmlkTGVm
dEV4cGFuc2lvbiB8IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBleHBhbnNpb25CZWhhdmlvciA9IChydW5Jc0FmdGVyRXhwYW5z
aW9uID8gRm9yYmlkTGVmdEV4cGFuc2lvbiA6IEFsbG93TGVmdEV4cGFuc2lvbikgfCBBbGxvd1Jp
Z2h0RXhwYW5zaW9uOworICAgICAgICAgICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yID0gKHJ1bklz
QWZ0ZXJFeHBhbnNpb24gPyBQQUw6OkZvcmJpZExlZnRFeHBhbnNpb24gOiBQQUw6OkFsbG93TGVm
dEV4cGFuc2lvbikgfCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb247CiAgICAgICAgICAgICAgICAg
YXV0byYgdGV4dENvbnRlbnQgPSAqcnVuLnRleHRDb250ZW50KCk7CiAgICAgICAgICAgICAgICAg
Ly8gVHJhaWxpbmcgaGFuZ2luZyB3aGl0ZXNwYWNlIHNlcXVlbmNlIGlzIGlnbm9yZWQgd2hlbiBj
b21wdXRpbmcgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzLgogICAgICAgICAgICAgICAgIGF1
dG8gaGFuZ2luZ1RyYWlsaW5nQ29udGVudEluQ3VycmVudFJ1biA9IHN0ZDo6bWluKHRleHRDb250
ZW50Lmxlbmd0aCwgaGFuZ2luZ1RyYWlsaW5nQ29udGVudExlbmd0aCk7CkBAIC0xNDMsOCArMTQz
LDggQEAgdm9pZCBMaW5lOjphcHBseVJ1bkV4cGFuc2lvbihJbmxpbmVMYXlvdXRVbml0IGhvcml6
b250YWxBdmFpbGFibGVTcGFjZSkKICAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4n
cyB0cmFpbGluZyBleHBhbnNpb24uCiAgICAgaWYgKGxhc3RSdW5JbmRleFdpdGhDb250ZW50ICYm
IHJ1bnNFeHBhbnNpb25PcHBvcnR1bml0aWVzWypsYXN0UnVuSW5kZXhXaXRoQ29udGVudF0pIHsK
ICAgICAgICAgLy8gVHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUg
Zm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9u
ID0gcnVuc0V4cGFuc2lvbkJlaGF2aW9yc1sqbGFzdFJ1bkluZGV4V2l0aENvbnRlbnRdICYgTGVm
dEV4cGFuc2lvbk1hc2s7Ci0gICAgICAgIHJ1bnNFeHBhbnNpb25CZWhhdmlvcnNbKmxhc3RSdW5J
bmRleFdpdGhDb250ZW50XSA9IGxlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lv
bjsKKyAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9uID0gcnVuc0V4cGFuc2lvbkJlaGF2aW9y
c1sqbGFzdFJ1bkluZGV4V2l0aENvbnRlbnRdICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzazsKKyAg
ICAgICAgcnVuc0V4cGFuc2lvbkJlaGF2aW9yc1sqbGFzdFJ1bkluZGV4V2l0aENvbnRlbnRdID0g
bGVhZGluZ0V4cGFuc2lvbiB8IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAgICAgICAgIGlm
IChydW5Jc0FmdGVyRXhwYW5zaW9uKSB7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXN0IHJ1
biBoYXMgYW4gYWZ0ZXIgZXhwYW5zaW9uIChlLmcuIENKSyBpZGVvZ3JhcGgpIHdlIG5lZWQgdG8g
cmVtb3ZlIHRoaXMgdHJhaWxpbmcgZXhwYW5zaW9uIG9wcG9ydHVuaXR5LgogICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFib3V0IHRyYWlsaW5nIGNvbGxhcHNpYmxlIHdoaXRl
c3BhY2UgYXMgYXQgdGhpcyBwb2ludCB3ZSB0cmltbWVkIHRoZW0gYWxsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGlu
ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lTGluZS5oCmluZGV4IGQ0MDdiOTQ1NzgzYzEwNDE5NTg3OTI2ZGRiODNlNzVlNGNkMWMxODMu
LmRiYjYwNjUyNDdjY2M3ZDk4OTJjOThjMDkzN2ZlNjc2MmE5NmI5ZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVMaW5lLmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIElubGluZUxh
eW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAKICAgICAgICAgYm9vbCBzaG91bGRUcmFpbGluZ1doaXRl
c3BhY2VIYW5nKCkgY29uc3Q7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gaW5saW5lRGlyZWN0aW9u
KCkgY29uc3Q7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24oKSBj
b25zdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3Q7CiAg
ICAgICAgIGJvb2wgaGFzVGV4dENvbWJpbmUoKSBjb25zdDsKIApAQCAtMTU2LDcgKzE1Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgSW5saW5lRGlzcGxheTo6Qm94OjpFeHBhbnNpb24gbV9leHBhbnNp
b247CiAgICAgICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgICAgICBib29sIHNob3VsZFRyYWls
aW5nV2hpdGVzcGFjZUhhbmcgeyBmYWxzZSB9OwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBp
bmxpbmVEaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpSVEwgfTsKKyAgICAgICAgICAgIFBBTDo6
VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24geyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCB9
OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nIHsgMCB9OwogICAg
ICAgICAgICAgYm9vbCBoYXNUZXh0Q29tYmluZSB7IGZhbHNlIH07CiAgICAgICAgIH07CkBAIC0y
NzAsNyArMjcwLDcgQEAgaW5saW5lIGJvb2wgTGluZTo6UnVuOjpzaG91bGRUcmFpbGluZ1doaXRl
c3BhY2VIYW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHlsZS5zaG91bGRUcmFpbGluZ1doaXRl
c3BhY2VIYW5nOwogfQogCi1pbmxpbmUgVGV4dERpcmVjdGlvbiBMaW5lOjpSdW46OmlubGluZURp
cmVjdGlvbigpIGNvbnN0CitpbmxpbmUgUEFMOjpUZXh0RGlyZWN0aW9uIExpbmU6OlJ1bjo6aW5s
aW5lRGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHlsZS5pbmxpbmVEaXJlY3Rp
b247CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5o
CmluZGV4IDZmNDRhOGJlMGQyYTA1NDA1NDMxOGQ1OGNiNDljMWYwMmI2ZDM1MDQuLmMzZmExYjM3
YTg2Zjg3NzY5MWU5NmFiNzk3ZmUxYzRkNmQwZGEzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxh
eUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNs
dWRlICJJbmxpbmVSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiVGV4
dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSA8dW5p
Y29kZS91YmlkaS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTE0LDcgKzEx
NCw3IEBAIHN0cnVjdCBCb3ggewogICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dD4mIHRleHQo
KSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KIAogICAgIHN0cnVjdCBFeHBhbnNpb24gewotICAg
ICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IERlZmF1bHRFeHBhbnNpb24gfTsKKyAg
ICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IFBBTDo6RGVmYXVsdEV4cGFu
c2lvbiB9OwogICAgICAgICBMYXlvdXQ6OklubGluZUxheW91dFVuaXQgaG9yaXpvbnRhbEV4cGFu
c2lvbiB7IDAgfTsKICAgICB9OwogICAgIEV4cGFuc2lvbiBleHBhbnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2V4cGFuc2lvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dC9UZXh0VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRVdGlsLmNwcAppbmRl
eCA2NzFmZWVhMjBhZWExMzg2NDQxM2YzYzA0NzNiZDE0OTZmODBmZDQ5Li5lZDMxZGFkOWUyMDYw
NmI4ZmUzNzA3ZDQ5MDI4ODhiNTkxMzdhNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRVdGlsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRV
dGlsLmNwcApAQCAtMTM0LDggKzEzNCw4IEBAIFRleHRVdGlsOjpGYWxsYmFja0ZvbnRMaXN0IFRl
eHRVdGlsOjpmYWxsYmFja0ZvbnRzRm9yUnVuKGNvbnN0IExpbmU6OlJ1biYgcnVuLCBjCiAKICAg
ICBhdXRvIHRleHQgPSAqcnVuLnRleHRDb250ZW50KCk7CiAgICAgaWYgKHRleHQubmVlZHNIeXBo
ZW4pCi0gICAgICAgIGNvbGxlY3RGYWxsYmFja0ZvbnRzKFRleHRSdW4geyBTdHJpbmdWaWV3KHN0
eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpKSwgeyB9LCB7IH0sIERlZmF1bHRFeHBhbnNpb24s
IHN0eWxlLmRpcmVjdGlvbigpIH0pOwotICAgIGNvbGxlY3RGYWxsYmFja0ZvbnRzKFRleHRSdW4g
eyBTdHJpbmdWaWV3KGlubGluZVRleHRCb3guY29udGVudCgpKS5zdWJzdHJpbmcodGV4dC5zdGFy
dCwgdGV4dC5sZW5ndGgpLCB7IH0sIHsgfSwgRGVmYXVsdEV4cGFuc2lvbiwgc3R5bGUuZGlyZWN0
aW9uKCkgfSk7CisgICAgICAgIGNvbGxlY3RGYWxsYmFja0ZvbnRzKFRleHRSdW4geyBTdHJpbmdW
aWV3KHN0eWxlLmh5cGhlblN0cmluZygpLnN0cmluZygpKSwgeyB9LCB7IH0sIFBBTDo6RGVmYXVs
dEV4cGFuc2lvbiwgc3R5bGUuZGlyZWN0aW9uKCkgfSk7CisgICAgY29sbGVjdEZhbGxiYWNrRm9u
dHMoVGV4dFJ1biB7IFN0cmluZ1ZpZXcoaW5saW5lVGV4dEJveC5jb250ZW50KCkpLnN1YnN0cmlu
Zyh0ZXh0LnN0YXJ0LCB0ZXh0Lmxlbmd0aCksIHsgfSwgeyB9LCBQQUw6OkRlZmF1bHRFeHBhbnNp
b24sIHN0eWxlLmRpcmVjdGlvbigpIH0pOwogICAgIHJldHVybiBmYWxsYmFja0ZvbnRzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRl
cmF0b3JCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveC5oCmluZGV4IDgxM2Y1YjBlNjU5MDM0MTNmZjQ2MmU0OWUxZjg5Mzc4MTg2MzZjN2Uu
LjYyZDFmYTk5OWZjNjk1NDAwNGU1M2U0NmVlODIwNjRiMGNiZjNiYmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCkBA
IC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByaWdodG1vc3RDYXJldE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heGltdW1DYXJl
dE9mZnNldCgpIDogbWluaW11bUNhcmV0T2Zmc2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIGNoYXIg
YmlkaUxldmVsKCkgY29uc3Q7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0
aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OlRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIGJv
b2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAKICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBh
dGguaAppbmRleCBlN2VmNmRiYTNhOWQ3MDc4Mzc3NDljZTc4MDI4MjljZmFkMDVjOWE0Li44M2Iz
Y2Q1MDkxZGU2MGZmNDEyZTc5NDRkOTA5YmRmOGRhNTgxNTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94
TW9kZXJuUGF0aC5oCkBAIC0yNTUsNyArMjU1LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVu
dC0+bGluZUZvckJveChib3goKSk7IH0KIAogICAgIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRl
eHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcigpKTsgfQot
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkg
JSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUg
MiA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0K
IAogICAgIFJlZlB0cjxjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudD4gbV9p
bmxpbmVDb250ZW50OwogICAgIHNpemVfdCBtX2JveEluZGV4IHsgMCB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yVGV4dEJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0
Qm94LmNwcAppbmRleCAyNjBjZDk5OGQ1MmQyYWFmNGQ5MjU1MmYwYzJlNmQyMmE2MTQ3ODAwLi4w
NmVmNjRjY2MyYTBiMGY4ZWJlNGJlM2M0OGQ2YWM1ZjAwMTM0ZDE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0
Qm94LmNwcApAQCAtNzcsNyArNzcsNyBAQCBmbG9hdCBUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNl
dCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwog
CiAgICAgYXV0byBbc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0gPSBbJl0gewotICAgICAgICBpZiAo
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpw
YWlyIHsgc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KSwgbGVuZ3RoKCkgfTsKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpciB7IDB1LCBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQp
IH07CiAgICAgfSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwCmluZGV4IDJhMmQ2ZTcz
YmIwNTU2ZTY1Y2YyOThlMTUzZTE3MmY1YTg2NjU5MzQuLjY4Yjc5OGIzYjhmMmI5ODI3NTcxNzMw
NjMwYjc4YTY1ZWI2ODQ0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAKQEAgLTQz
OCw5ICs0MzgsOSBAQCBzdGF0aWMgT3B0aW9uU2V0PEF2b2lkYW5jZVJlYXNvbj4gY2FuVXNlRm9y
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBJbmNsdQogICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKICAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNOb3RMVFIsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b20pCisgICAgaWYgKHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gUEFM
OjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCiAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICBpZiAoc3R5bGUudW5pY29kZUJpZGkoKSAhPSBVQk5vcm1hbCkKKyAgICBpZiAoc3R5
bGUudW5pY29kZUJpZGkoKSAhPSBQQUw6OlVCTm9ybWFsKQogICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaSwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS5ydGxPcmRlcmluZygpICE9IE9yZGVyOjpM
b2dpY2FsKQogICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNS
VExPcmRlcmluZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggYzNkODQ1MGY3MWMyYzM3M2QyYWYxY2NjZmIyMTVh
ZDgxYmY4MGQwYi4uOTI5OTcyZjM5ZDY2Njk4Y2I0MWFiNGMzMzMxMmExZDg4NWMwNjkwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCkBAIC0xODIxLDcgKzE4MjEs
NyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRDdXN0b21IZWFkZXJGaWVsZHMoVmVjdG9yPEN1
c3RvbUhlYWRlckZpZWxkcz4mJiBmaWVsZHMpCiAgICAgbV9jdXN0b21IZWFkZXJGaWVsZHMgPSBX
VEZNb3ZlKGZpZWxkcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKGNvbnN0
IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQordm9pZCBEb2N1bWVudExvYWRlcjo6c2V0VGl0
bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICBpZiAobV9w
YWdlVGl0bGUgPT0gdGl0bGUpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmgKaW5kZXggZmJmNTQ1YzQ2MGU0ZTQ4OWQ4N2IyNWMwZTg1ZWNjY2E0Y2Jm
M2M4Ny4uMjBlZTdjNmIxOTc5ZjY5NDZiNDMzODhlZGUzMmI5NzQ2YTIzYzg5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKQEAgLTQ4LDEwICs0OCwxMCBAQAogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EYXRhLmgiCi0jaW5jbHVkZSAiU3RyaW5nV2l0aERpcmVjdGlvbi5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc3BhdGNoT25sb2FkRXZlbnRzKCk7CiAgICAgYm9vbCB3YXNPbmxvYWREaXNwYXRjaGVk
KCkgeyByZXR1cm4gbV93YXNPbmxvYWREaXNwYXRjaGVkOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0xvYWRpbmdJbkFQSVNlbnNlKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICBj
b25zdCBTdHJpbmcmIG92ZXJyaWRlRW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRl
RW5jb2Rpbmc7IH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGxhc3RDaGVja2VkUmVxdWVzdCgpICB7
IHJldHVybiBtX2xhc3RDaGVja2VkUmVxdWVzdDsgfQogCiAgICAgdm9pZCBzdG9wUmVjb3JkaW5n
UmVzcG9uc2VzKCk7Ci0gICAgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhZ2VUaXRsZTsgfQorICAgIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VUaXRsZTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgVVJMIHVybEZvckhpc3RvcnkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHVybEZvckhpc3RvcnlSZWZsZWN0c0ZhaWx1cmUoKSBjb25zdDsKQEAgLTU3NSw3ICs1NzUs
NyBAQCBwcml2YXRlOgogICAgIC8vIGFuZCBzaG91bGQgYmUgbWVyZ2VkLgogICAgIGJvb2wgbV93
YXNPbmxvYWREaXNwYXRjaGVkIHsgZmFsc2UgfTsKIAotICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24g
bV9wYWdlVGl0bGU7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIG1fcGFnZVRpdGxlOwog
CiAgICAgU3RyaW5nIG1fb3ZlcnJpZGVFbmNvZGluZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudFdyaXRlci5jcHAKaW5kZXggYjA0NmVmMGRlMjA0OGVmZDQzMTk3MDI2MjJiOTZhN2Rm
MmZlYWZhNy4uYTFiYTk0ODc0MmYwNmQzMTdmOWRlZjFjYmJiODQxZjk1MzBjYzgxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCkBAIC00OCwxMCArNDgsMTAgQEAK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luUG9s
aWN5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRT
dHJpbmcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbmtEb2N1bWVudC5o
IgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggM2EwNjRiYzcy
MzFhMzYwMGNjODNkYzU4YTlhMmU3ZmYyZWU5NmIzNS4uNjVkMDAzNjgxNjExN2JhZTgzNDk4MTM2
YjA3ZjRlYTIyMGVjZjQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAK
QEAgLTI3OCw3ICsyNzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKSBmaW5hbCB7IH0KICAgICB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRh
KGNvbnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0
b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JikgZmluYWwgeyB9CiAgICAgdm9pZCByZXF1ZXN0Q2Fu
ZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwgeyB9Ci0g
ICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFRleHRDaGVja2lu
Z1Jlc3VsdCkgZmluYWwgeyB9CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhT
b2Z0U3BhY2VzKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0KSBmaW5hbCB7IH0KIAogICAgIHZvaWQg
cmVnaXN0ZXJVbmRvU3RlcChVbmRvU3RlcCYpIGZpbmFsOwogICAgIHZvaWQgcmVnaXN0ZXJSZWRv
U3RlcChVbmRvU3RlcCYpIGZpbmFsOwpAQCAtMzUwLDcgKzM1MCw3IEBAIHByaXZhdGU6CiAKICAg
ICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSBmaW5hbCB7IHJldHVybiAmbV90ZXh0
Q2hlY2tlckNsaWVudDsgfQogCi0gICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFBBTDo6R3JhbW1hckRldGFpbCYpIGZpbmFsIHsgfQogICAgIHZvaWQgdXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KICAgICB2b2lk
IHNob3dTcGVsbGluZ1VJKGJvb2wpIGZpbmFsIHsgfQogICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hv
d2luZygpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0zNjEsMTkgKzM2MSwxOSBAQCBwcml2
YXRlOgogICAgIGJvb2wgY2FuU2hvd0ZvbnRQYW5lbCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICBjbGFzcyBFbXB0eVRleHRDaGVja2VyQ2xpZW50IGZpbmFsIDogcHVibGlj
IFRleHRDaGVja2VyQ2xpZW50IHsKLSAgICAgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRl
ckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CisgICAgICAgIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rp
b24oUEFMOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgICAgIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5h
bCB7IH0KICAgICAgICAgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CiAg
ICAgICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCosIGludCop
IGZpbmFsIHsgfQogICAgICAgICBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgICAg
IHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiwgaW50KiwgaW50KikgZmluYWwgeyB9CisgICAgICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZT
dHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQq
KSBmaW5hbCB7IH0KIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgICAgIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcs
IE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGZp
bmFsIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KKyAgICAgICAgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdW
aWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpIGZpbmFsIHsgcmV0dXJuIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4oKTsg
fQogI2VuZGlmCiAKICAgICAgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4m
KSBmaW5hbCB7IH0KLSAgICAgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hl
Y2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsOworICAgICAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKSBmaW5hbDsKICAgICB9OwogCiAgICAgRW1wdHlUZXh0Q2hl
Y2tlckNsaWVudCBtX3RleHRDaGVja2VyQ2xpZW50OwpAQCAtNzY3LDcgKzc2Nyw3IEBAIHZvaWQg
RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgp
CiB7CiB9CiAKLXZvaWQgRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZl
VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpCit2b2lkIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYpCiB7CiB9CiAKQEAgLTk2Myw3ICs5NjMsNyBAQCB2b2lkIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQ6OnVwZGF0ZUNhY2hlZERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyJikKIHsKIH0K
IAotdm9pZCBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRo
RGlyZWN0aW9uJiwgY29uc3QgVVJMJikKK3ZvaWQgRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6c2V0
VGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikKIHsKIH0K
IApAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZW5k
SDJQaW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEUKICAgICBjb21w
bGV0aW9uSGFuZGxlcihtYWtlVW5leHBlY3RlZChpbnRlcm5hbEVycm9yKHVybCkpKTsKIH0KIAot
dm9pZCBFbXB0eUVkaXRvckNsaWVudDo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKQordm9pZCBFbXB0eUVkaXRvckNsaWVudDo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApp
bmRleCA1MjI2MTg3MzFkNzU2ZWE0YmY4Yjk2ZGYwMDQzNWY4MzU1OGVlOTFhLi45NzU4Y2UxZTJk
MWRkNTI1YWRiYjY1NDYzYmVhMzMwY2M1NjI3ODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCkBAIC0xMjMsOSArMTIzLDkgQEAgY2xhc3MgRW1wdHlDaHJvbWVDbGllbnQgOiBw
dWJsaWMgQ2hyb21lQ2xpZW50IHsKICAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUm
LCBjb25zdCBJbnRTaXplJikgY29uc3QgZmluYWwgeyB9CiAgICAgdm9pZCBpbnRyaW5zaWNDb250
ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSBjb25zdCBmaW5hbCB7IH0KIAotICAgIHZv
aWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVk
LCBjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSBmaW5hbCB7IH0KKyAgICB2b2lkIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCwgY29uc3Qg
U3RyaW5nJiwgUEFMOjpUZXh0RGlyZWN0aW9uKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgcHJpbnQo
RnJhbWUmLCBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWwgeyB9CisgICAgdm9pZCBw
cmludChGcmFtZSYsIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFsIHsgfQog
CiAgICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUmLCBjb25zdCBTdHJpbmcmLCBE
YXRhYmFzZURldGFpbHMpIGZpbmFsIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlGcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5RnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCAyMjY5OWM5YzUxODMyYTVhYThjODlhYmFiMmZm
YzdlMDk4NWJmYzAwLi40NjMwNDI4MTgwYTkwZjg5NDBhMjJmMWYwZTgyODBmMmJkY2U5MjNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlGcmFtZUxvYWRlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUZyYW1lTG9hZGVyQ2xpZW50LmgKQEAg
LTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRGlkUG9wU3RhdGVXaXRo
aW5QYWdlKCkgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIGZpbmFsOwogICAg
IHZvaWQgZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpIGZpbmFsOwotICAgIHZvaWQg
ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRo
RGlyZWN0aW9uJikgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoc3RkOjpv
cHRpb25hbDxIYXNJbnNlY3VyZUNvbnRlbnQ+LCBzdGQ6Om9wdGlvbmFsPFVzZWRMZWdhY3lUTFM+
KSBmaW5hbDsKICAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBS
ZXNvdXJjZUVycm9yJiwgV2lsbENvbnRpbnVlTG9hZGluZykgZmluYWw7CiAgICAgdm9pZCBkaXNw
YXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbDsKQEAgLTE1MCw3ICsx
NTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVu
dCgpIGZpbmFsOwogCiAgICAgdm9pZCB1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihEb2N1bWVu
dExvYWRlciYpIGZpbmFsOwotICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYsIGNvbnN0IFVSTCYpIGZpbmFsOworICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgUEFMOjpT
dHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikgZmluYWw7CiAKICAgICBTdHJpbmcgdXNl
ckFnZW50KGNvbnN0IFVSTCYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAppbmRleCA1NjYxMDgzODA1NjY0ZTAxMTlmMTFmZmMzMmVhN2UxOTI3ZmM2
NTdiLi5kMmE5OTM3YzYyZjE2ZTg2MGMzMTUwNjM4NGNhNzgwYmE2OWI1NGEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTExNiw3ICsxMTYsNiBAQAogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJTZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLmgiCkBAIC0xMjksNiArMTI4LDcgQEAK
ICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2Vy
LmgiCiAjaW5jbHVkZSA8ZG9tL1NjcmlwdERpc2FsbG93ZWRTY29wZS5oPgorI2luY2x1ZGUgPHBh
bC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxl
ci5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDRmZDYzN2E5MDE0YTVkNDFh
MjI2ZWU0NTkxN2I2YjNlOWE3OTBlYmIuLjg1YjMwYTdkNGNiMjE5MDAxMjc4ZDNiZGQ0Mzg4OGZi
MDJkMmQ1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBA
IC02NSw2ICs2NSwxMCBAQCBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNW
aWV3OwogI2VuZGlmCiAKK25hbWVzcGFjZSBQQUwgeworc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rp
b247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2U7CkBAIC0xMDYsOCArMTEwLDYgQEAgZW51bSBjbGFzcyBMb2NrQmFja0ZvcndhcmRMaXN0
IDogYm9vbDsKIGVudW0gY2xhc3MgUG9saWN5RGVjaXNpb25Nb2RlOwogZW51bSBjbGFzcyBVc2Vk
TGVnYWN5VExTIDogYm9vbDsKIAotc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb247Ci0KIHR5cGVk
ZWYgRnVuY3Rpb248dm9pZCAoUG9saWN5QWN0aW9uLCBQb2xpY3lDaGVja0lkZW50aWZpZXIpPiBG
cmFtZVBvbGljeUZ1bmN0aW9uOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBGcmFtZUxvYWRlckNs
aWVudCB7CkBAIC0xNzMsNyArMTc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaFdpbGxDbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZl
SWNvbigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25z
dCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZFJlY2VpdmVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZChzdGQ6Om9wdGlvbmFsPEhhc0luc2Vj
dXJlQ29udGVudD4sIHN0ZDo6b3B0aW9uYWw8VXNlZExlZ2FjeVRMUz4pID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJy
b3ImLCBXaWxsQ29udGludWVMb2FkaW5nKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKQEAgLTI2Nyw3ICsyNjksNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1l
bnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZERvY3VtZW50TG9hZGVyKERvY3VtZW50
TG9hZGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRo
RGlyZWN0aW9uJiwgY29uc3QgVVJMJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShj
b25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKSA9IDA7CiAKICAgICB2
aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgVVJMJikgY29uc3QgPSAwOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCBiM2FjZjA2YjQ5YTgy
YjJhNGEwOWMxMzVjMDllZjgwM2VhMDdkZDMyLi4wNmE4ZTdlMDMyZTk2OGEzM2E5NTYyYWRjMDc5
YWVhZjM1YThjMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxl
ci5jcHAKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJv
bGxlcjo6c2V0Q3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0pCiAgICAgbV9jdXJyZW50SXRl
bSA9ICZpdGVtOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJvbGxlcjo6c2V0
Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKK3ZvaWQg
RnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJyZW50SXRlbVRpdGxlKGNvbnN0
IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
aWdub3JlcyB0aGUgdGl0bGUncyBkaXJlY3Rpb24uCiAgICAgaWYgKG1fY3VycmVudEl0ZW0pCkBA
IC02NTgsNyArNjU4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6SGlzdG9yeUNvbnRyb2xsZXI6Omlu
aXRpYWxpemVJdGVtKEhpc3RvcnlJdGVtJiBpdGVtKQogICAgIGlmIChvcmlnaW5hbFVSTC5pc0Vt
cHR5KCkpCiAgICAgICAgIG9yaWdpbmFsVVJMID0gYWJvdXRCbGFua1VSTCgpOwogICAgIAotICAg
IFN0cmluZ1dpdGhEaXJlY3Rpb24gdGl0bGUgPSBkb2N1bWVudExvYWRlci0+dGl0bGUoKTsKKyAg
ICBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gdGl0bGUgPSBkb2N1bWVudExvYWRlci0+dGl0bGUo
KTsKIAogICAgIGl0ZW0uc2V0VVJMKHVybCk7CiAgICAgaXRlbS5zZXRUYXJnZXQobV9mcmFtZS50
cmVlKCkudW5pcXVlTmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9I
aXN0b3J5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmgKaW5kZXggMTAzN2RmOThlYzQxNTU0YmZiMWRiNjJiODk2ODJkODM3ZmE2NTYzNy4uMGY5
ZGE2ZjRkMDI2NzQ0MTgwMWMwY2JmZjhlYTJhMmE5ZTg1ODM2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKQEAgLTMxLDYgKzMxLDEwIEBACiAKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogCituYW1lc3BhY2UgUEFMIHsKK3N0cnVjdCBTdHJpbmdXaXRoRGly
ZWN0aW9uOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwpAQCAtMzks
OCArNDMsNiBAQCBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGVudW0gY2xhc3MgU2hv
dWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkIDogdWludDhfdDsKIAotc3RydWN0IFN0cmluZ1dpdGhE
aXJlY3Rpb247Ci0KIGNsYXNzIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJvbGxlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSGlzdG9yeUNvbnRyb2xsZXIpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwpAQCAtNzMsNyArNzUsNyBAQCBwdWJsaWM6CiAKICAgICBIaXN0b3J5SXRl
bSogY3VycmVudEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJdGVtLmdldCgpOyB9CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDdXJyZW50SXRlbShIaXN0b3J5SXRlbSYpOwotICAg
IHZvaWQgc2V0Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7Cisg
ICAgdm9pZCBzZXRDdXJyZW50SXRlbVRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlv
biYpOwogICAgIGJvb2wgY3VycmVudEl0ZW1TaG91bGRCZVJlcGxhY2VkKCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlQ3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKaW5kZXggY2ViZGM1NTdmMTNm
YzRhZmQ4Mjc1Mjk3NzRhZmQ4ZWM0YmVmNDIxMC4uNTQ4YTdhMzdjZjVjNzU1OTJiOTk0MDM3ZjMy
OGJkYTJmZTFkMmYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5o
CkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IGMxM2Y2Y2Y5ZDZlMTc4N2VhNjA1ODlmZTQ2YTJlMTc3ZDkzNzQ4MWQuLjg4ZGEw
ODdkNzMxM2E5NjljYzE0ODRlOGUzMmRjOWRkMDk4ZjY4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKQEAgLTM0MCwxNCArMzQwLDE0IEBAIHZvaWQgQ2hyb21lOjptb3VzZURpZE1vdmVPdmVyRWxl
bWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmCiAgICAgICAg
IG1fcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQu
YWJzb2x1dGVMaW5rVVJMKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogCiAgICAgU3RyaW5nIHRvb2xU
aXA7Ci0gICAgVGV4dERpcmVjdGlvbiB0b29sVGlwRGlyZWN0aW9uOworICAgIFBBTDo6VGV4dERp
cmVjdGlvbiB0b29sVGlwRGlyZWN0aW9uOwogICAgIGdldFRvb2xUaXAocmVzdWx0LCB0b29sVGlw
LCB0b29sVGlwRGlyZWN0aW9uKTsKICAgICBtX2NsaWVudC5tb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MsIHRvb2xUaXAsIHRvb2xUaXBEaXJlY3Rpb24pOwogCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChtX3Bh
Z2UsIHJlc3VsdCwgbW9kaWZpZXJGbGFncyk7CiB9CiAKLXZvaWQgQ2hyb21lOjpnZXRUb29sVGlw
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0
aW9uJiB0b29sVGlwRGlyZWN0aW9uKQordm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbiYg
dG9vbFRpcERpcmVjdGlvbikKIHsKICAgICAvLyBGaXJzdCBwcmlvcml0eSBpcyBhIHBvdGVudGlh
bCB0b29sVGlwIHJlcHJlc2VudGluZyBhIHNwZWxsaW5nIG9yIGdyYW1tYXIgZXJyb3IKICAgICB0
b29sVGlwID0gcmVzdWx0LnNwZWxsaW5nVG9vbFRpcCh0b29sVGlwRGlyZWN0aW9uKTsKQEAgLTM2
NCw3ICszNjQsNyBAQCB2b2lkIENocm9tZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdAogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZvcm0tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9vbFRpcERpcmVjdGlvbiA9IGZvcm0tPnJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9vbFRpcERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3QKICAgICAgICAgICAg
IC8vIEZJWE1FOiBOZWVkIHRvIHBhc3MgdGhpcyBVUkwgdGhyb3VnaCB1c2VyVmlzaWJsZVN0cmlu
ZyBvbmNlIHRoYXQncyBpbiBXZWJDb3JlCiAgICAgICAgICAgICB0b29sVGlwID0gcmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpLnN0cmluZygpOwogICAgICAgICAgICAgLy8gVVJMIGFsd2F5cyBkaXNw
bGF5IGFzIExUUi4KLSAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9u
OjpMVFI7CisgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIENocm9t
ZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRp
cCwgVGV4dERpcmVjdAogICAgICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBkb24ndCB1
c2UgdGV4dCBkaXJlY3Rpb24gaW5mb3JtYXRpb24gZm9yCiAgICAgICAgICAgICAgICAgLy8gQ2hy
b21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudC4gV2UnbGwgd29yayBvbiB0b29sdGlw
IHRleHQKICAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb24gZHVyaW5nIGJpZGkgY2xlYW51cCBp
biBmb3JtIGlucHV0cy4KLSAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gVGV4dERp
cmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCmluZGV4IDM3MjE4MmZlYzYyMGZlZDlkZmU3M2RhODkyMjQ2YWY5MTNjNTUzM2Uu
LjkzOTNlNzg1MmZlNzU2NWJlOTk0NjkzOGEzZTA1OTNkMGIxZTEzMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaApAQCAtMjAyLDcgKzIwMiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBub3Rp
ZnlQb3B1cE9wZW5pbmdPYnNlcnZlcnMoKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0VG9vbFRpcChj
b25zdCBIaXRUZXN0UmVzdWx0JiwgU3RyaW5nJiwgVGV4dERpcmVjdGlvbiYpOworICAgIHZvaWQg
Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiwgU3RyaW5nJiwgUEFMOjpUZXh0RGlyZWN0
aW9uJik7CiAKICAgICBQYWdlJiBtX3BhZ2U7CiAgICAgQ2hyb21lQ2xpZW50JiBtX2NsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDM1ZDI5MGEyODE0MmUyNzBiODE0N2E2
NTE0ODI2OGI0ODVlNmM1NjMuLjJhZTI0ZDU0NzY4MjIyNWI2Mzg4MDA3MTY3NDI0MzVmMDgwNDA1
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMjQwLDkgKzI0MCw5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VC
ZUJ1dHRvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24p
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1
Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50JiwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxh
Z3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5z
aWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBQQUw6OlRleHREaXJl
Y3Rpb24pID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBwcmludChGcmFtZSYsIGNvbnN0IFN0cmlu
Z1dpdGhEaXJlY3Rpb24mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lJiwgY29u
c3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgPSAwOwogCiAgICAgdmlydHVhbCBDb2xvciB1
bmRlcmxheUNvbG9yKCkgY29uc3QgeyByZXR1cm4gQ29sb3IoKTsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
ZGl0b3JDbGllbnQuaAppbmRleCA4MjM3NGU3MjYyYzcwZWE5ZGZlNGQ2NGYyNWFiMTM1YWE2MDMz
M2NmLi5iYTdmODNiZDI0NDgyMDUyNDhmOTIxMzFhNzRmNWJmOGZlYTk5NTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRWRpdG9yQ2xpZW50LmgKQEAgLTI5LDExICsyOSwxNSBAQAogI2luY2x1ZGUgIkVkaXRv
ckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIgog
I2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgotI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2lu
Y2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5oPgogI2luY2x1ZGUgIlVuZG9TdGVwLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVz
cGFjZSBQQUwgeworc3RydWN0IEdyYW1tYXJEZXRhaWw7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogZW51bSBjbGFzcyBET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIDogdWludDhfdDsKQEAgLTQ5
LDcgKzUzLDYgQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBzdHJ1Y3QgR2FwUmVjdHM7Ci1zdHJ1Y3QgR3JhbW1hckRldGFpbDsKIHN0cnVjdCBT
aW1wbGVSYW5nZTsKIAogY2xhc3MgRWRpdG9yQ2xpZW50IHsKQEAgLTk5LDcgKzEwMiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldENsaWVudFBhc3RlYm9hcmREYXRhKGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywg
VmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYgcGFzdGVib2FyZERhdGEpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdp
dGhTb2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoUEFMOjpUZXh0Q2hlY2tpbmdSZXN1
bHQpIHsgfQogCiAgICAgdmlydHVhbCBET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIHJlcXVlc3RET01Q
YXN0ZUFjY2Vzcyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpID0gMDsKIApAQCAtMTc2
LDcgKzE3OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRl
eHRDaGVja2VyKCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFBBTDo6R3JhbW1hckRldGFpbCYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGZmOTgyNTcxMjdhY2I5YmQyNDkzMmJjYmM5YmM3Y2I4YWIxMjAw
ZGIuLjliOTE3MjYxMTc2MWE1MGVhZTBhNzE5OTRjNjU5NGU0MWQxMDFjYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE2NSwxNCArMTY1LDE0IEBAIFBhZ2luYXRpb246Ok1vZGUg
cGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAg
ICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKIAogICAgIGJvb2wgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUgPSBzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOwotICAgIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOworICAgIFBBTDo6
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwogCiAgICAgLy8g
cGFnZWQteCBhbHdheXMgY29ycmVzcG9uZHMgdG8gTGVmdFRvUmlnaHRQYWdpbmF0ZWQgb3IgUmln
aHRUb0xlZnRQYWdpbmF0ZWQuIElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8vIGlzIGhvcml6b250
YWwsIHRoZW4gd2UgdXNlIFRleHREaXJlY3Rpb24gdG8gY2hvb3NlIGJldHdlZW4gdGhvc2Ugb3B0
aW9ucy4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgdmVydGljYWwsIHRoZW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgdmVydGljYWxpdHkgZGljdGF0ZXMgdGhlIGNob2ljZS4KICAgICBpZiAo
b3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlBhZ2VkWCkgewotICAgICAgICBpZiAoKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlICYmIHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB8fCB3
cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgIGlmICgoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgJiYgdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUikgfHwgd3JpdGluZ01vZGUgPT0gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQp
CiAgICAgICAgICAgICByZXR1cm4gUGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ7CiAg
ICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsKICAgICB9CkBA
IC0xODAsNyArMTgwLDcgQEAgUGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9kZUZvclJlbmRl
clN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAvLyBwYWdlZC15IGFsd2F5cyBj
b3JyZXNwb25kcyB0byBUb3BUb0JvdHRvbVBhZ2luYXRlZCBvciBCb3R0b21Ub1RvcFBhZ2luYXRl
ZC4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgaG9yaXpvbnRhbCwgdGhlbiB0aGUgZGly
ZWN0aW9uIG9mIHRoZSBob3Jpem9udGFsaXR5IGRpY3RhdGVzIHRoZSBjaG9pY2UuIElmIHRoZSBX
cml0aW5nTW9kZQogICAgIC8vIGlzIHZlcnRpY2FsLCB0aGVuIHdlIHVzZSBUZXh0RGlyZWN0aW9u
IHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIG9wdGlvbnMuIAotICAgIGlmICh3cml0aW5nTW9kZSA9
PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSAm
JiB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkpCisgICAgaWYgKHdyaXRpbmdN
b2RlID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8ICghaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUgJiYgdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkpCiAg
ICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2luYXRlZDsKICAgICByZXR1
cm4gUGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDU5N2I2NzIzNjU3OGM5ODk1MmE2
YmM3NzQ0ZGFiYjJjNjM0NmVjZjIuLjA2ZjllMDYyMGViZWNiMGZmMmMzMzllNGJmOWFmZWE1OTg4
ZWMxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3Bw
CkBAIC0xNDYsOSArMTQ2LDkgQEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6On5JbnRlcnNlY3Rpb25P
YnNlcnZlcigpCiBTdHJpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJvb3RNYXJnaW4oKSBjb25z
dAogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLSAgICBmb3IgKGF1dG8gc2lk
ZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVz
KSB7CiAgICAgICAgIGF1dG8mIGxlbmd0aCA9IG1fcm9vdE1hcmdpbi5hdChzaWRlKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobGVuZ3RoLmludFZhbHVlKCksIGxlbmd0aC5pc1BlcmNl
bnQoKSA/ICIlIiA6ICJweCIsIHNpZGUgIT0gQm94U2lkZTo6TGVmdCA/ICIgIiA6ICIiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobGVuZ3RoLmludFZhbHVlKCksIGxlbmd0aC5pc1Bl
cmNlbnQoKSA/ICIlIiA6ICJweCIsIHNpZGUgIT0gUEFMOjpCb3hTaWRlOjpMZWZ0ID8gIiAiIDog
IiIpOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKaW5kZXggNTcwNmFkODYyOGZiOWJiMmM0OTg2NTM1YzYzMmQ5ZDJkYWM5MTNl
Zi4uMTEwOTE4YWI2YTBkNWQ1MGY2MzI3OGU3OTJmMTlmYjhhZTlmMDJhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCkBAIC04NjYsNyArODY2LDcgQEAgdW5zaWduZWQgUGFnZTo6Y291bnRGaW5kTWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWcKIAogc3Ry
dWN0IEZpbmRSZXBsYWNlbWVudFJhbmdlIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9v
dDsKLSAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBQQUw6OkNoYXJhY3RlclJhbmdlIHJh
bmdlOwogfTsKIAogc3RhdGljIHZvaWQgcmVwbGFjZVJhbmdlcyhQYWdlJiBwYWdlLCBjb25zdCBW
ZWN0b3I8RmluZFJlcGxhY2VtZW50UmFuZ2U+JiByYW5nZXMsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRUZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1s
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCmluZGV4IDJhZTcwY2IxZGE4NGU4
Y2FkM2VjY2MwYzlmZmVmNDM2ZjhlODlmNjAuLmRmMzlhYWE1ZWI1YTI0ZGUxOTQ4MDExNGNiNDdl
OTc0NWRmNWI2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFt
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwKQEAgLTE2NywxMCArMTY3
LDEwIEBAIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGU6CiAKIEZvbnRSZW5kZXJpbmdNb2RlOgogICB0
eXBlOiB1aW50MzJfdAotICByZWZpbmVkVHlwZTogRm9udFJlbmRlcmluZ01vZGUKKyAgcmVmaW5l
ZFR5cGU6IFBBTDo6Rm9udFJlbmRlcmluZ01vZGUKICAgZGVmYXVsdFZhbHVlOgogICAgIFdlYkNv
cmU6Ci0gICAgICBkZWZhdWx0OiBGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsCisgICAgICBkZWZh
dWx0OiBQQUw6OkZvbnRSZW5kZXJpbmdNb2RlOjpOb3JtYWwKIAogRm9yY2VDb21wb3NpdGluZ01v
ZGU6CiAgIHR5cGU6IGJvb2wKQEAgLTUxNiw3ICs1MTYsNyBAQCBTeXN0ZW1MYXlvdXREaXJlY3Rp
b246CiAgIHJlZmluZWRUeXBlOiBUZXh0RGlyZWN0aW9uCiAgIGRlZmF1bHRWYWx1ZToKICAgICBX
ZWJDb3JlOgotICAgICAgZGVmYXVsdDogVGV4dERpcmVjdGlvbjo6TFRSCisgICAgICBkZWZhdWx0
OiBQQUw6OlRleHREaXJlY3Rpb246OkxUUgogCiBUZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVy
cmlkZUhlaWdodDoKICAgdHlwZTogdWludDMyX3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3NCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5o
CmluZGV4IGRmN2I4ZDVmNzM5ZTBlMDFlN2EzMWFkYmE4ZmUxYzY0YTQxNjE2MzYuLjE1Y2JjOTVj
YzYxZjM1NzYxMDVjNmZiY2FiMWY0OGQxOTYxMjVlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
c0Jhc2UuaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmdCZWhhdmlvclR5cGUu
aCIKICNpbmNsdWRlICJGb250R2VuZXJpY0ZhbWlsaWVzLmgiCiAjaW5jbHVkZSAiRm9udExvYWRU
aW1pbmdPdmVycmlkZS5oIgotI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVk
ZSAiRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWVGbGF0dGVuaW5n
LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlclNjcmlwdGluZ0ZsYWdQb2xpY3kuaCIKQEAgLTQwLDEx
ICszOSwxMiBAQAogI2luY2x1ZGUgIlBERkltYWdlQ2FjaGluZ1BvbGljeS5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNs
dWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvblN1Ym1lbnVJbmNs
dXNpb25CZWhhdmlvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVXNlckludGVy
ZmFjZURpcmVjdGlvblBvbGljeS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1J1bnRpbWVG
bGFncy5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L0ZvbnRSZW5kZXJpbmdNb2RlLmg+CisjaW5jbHVk
ZSA8cGFsL3RleHQvVGV4dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXNjcmlwdC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwCmluZGV4IDY4YzU3NjMwOThhODY5NzZiMWRjYTU4ZTMzN2MwYWQ3NjUxNzc4
MzMuLjdlOGFjYjM5MTQyNmI2MjkxYWJkMWVmN2YxZDc4M2RhODRkYjVmYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmNwcApAQCAtMjY3LDE3ICsyNjcsMTcgQEAgc3RhdGljIExheW91dFVuaXQgY29tcHV0ZVNjcm9s
bFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbmkKICAgICB9
CiB9CiAKLXN0YXRpYyBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gYXhlc0ZsaXBwZWRGb3JXcml0aW5n
TW9kZUFuZERpcmVjdGlvbihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uKQorc3RhdGljIHN0ZDo6cGFpcjxib29sLCBib29sPiBheGVzRmxpcHBlZEZv
cldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uKFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBB
TDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQogewogICAgIC8vIHRleHQtZGlyZWN0aW9u
IGZsaXBzIHRoZSBpbmxpbmUgYXhpcyBhbmQgd3JpdGluZy1tb2RlIGNhbiBmbGlwIHRoZSBibG9j
ayBheGlzLiBXaGV0aGVyIG9yCiAgICAgLy8gbm90IHRoZSB3cml0aW5nLW1vZGUgaXMgdmVydGlj
YWwgZGV0ZXJtaW5lcyB0aGUgcGh5c2ljYWwgb3JpZW50YXRpb24gb2YgdGhlIGJsb2NrIGFuZCBp
bmxpbmUgYXhlcy4KICAgICBib29sIGhhc1ZlcnRpY2FsV3JpdGluZ01vZGUgPSBpc1ZlcnRpY2Fs
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwogICAgIGJvb2wgYmxvY2tBeGlzRmxpcHBlZCA9IGlz
RmxpcHBlZFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKLSAgICBib29sIGlubGluZUF4aXNGbGlw
cGVkID0gdGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpbmxp
bmVBeGlzRmxpcHBlZCA9IHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGhhc1ZlcnRpY2FsV3JpdGluZ01vZGUgPyBibG9j
a0F4aXNGbGlwcGVkIDogaW5saW5lQXhpc0ZsaXBwZWQsIGhhc1ZlcnRpY2FsV3JpdGluZ01vZGUg
PyBpbmxpbmVBeGlzRmxpcHBlZCA6IGJsb2NrQXhpc0ZsaXBwZWQpOwogfQogCi12b2lkIHVwZGF0
ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0
eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3Jk
ZXJCb3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbikKK3ZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5n
RWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5
b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBQQUw6OldyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKIHsKICAg
ICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFNuYXBU
eXBlKCk7CiAgICAgY29uc3QgYXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucyA9IHNj
cm9sbGluZ0VsZW1lbnRCb3gudmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgKaW5kZXggN2E5NGJhODRiOGFhYzUzMWFjNGFkOTQzNmEyZDgwYmJkYjMwYTVkOC4u
YTIzNjNkNmU5MTVmNGM3ZjU0M2NkNGYzY2RjMjU2YWQxM2M0MmEyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKQEAg
LTk3LDcgKzk3LDcgQEAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2YKIC8vIFVwZGF0ZSB0aGUgc25h
cCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRlckJveCBv
ZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCiAvLyB3aGljaCBkZWZpbmVz
IHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3
aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCiAvLyB0aGUgc2Nyb2xsaW5nIGNvbnRh
aW5lcidzIGJvcmRlciBib3guCi12b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFy
ZWEoU2Nyb2xsYWJsZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gs
IGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmll
d3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUsIFRleHREaXJlY3Rp
b24pOwordm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVB
cmVhJiwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJT
dHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9y
ZGVyQm94Q29vcmRpbmF0ZXMsIFBBTDo6V3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbik7
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiB0cywgU25hcE9mZnNldDxUPiBvZmZzZXQpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCmluZGV4IDJkZTY1YzIyZjli
N2Y5NDBlMWViY2ZmYmM0NWVjZDYwNmE0OTljODQuLmQ1YTE0MWYxN2IzNzhhZDFhMzlhM2ZkMzI0
YjljMzc5ZmZlM2E2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWUuY3BwCkBAIC02NTYsNyArNjU2LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlOjpz
ZXRNYWluRnJhbWVDYW5SdWJiZXJCYW5kKFJlY3RFZGdlczxib29sPiBjYW5SdWJiZXJCYW5kKQog
ICAgIG1fc3dpcGVTdGF0ZS5jYW5SdWJiZXJCYW5kID0gY2FuUnViYmVyQmFuZDsKIH0KIAotYm9v
bCBTY3JvbGxpbmdUcmVlOjptYWluRnJhbWVDYW5SdWJiZXJCYW5kT25TaWRlKEJveFNpZGUgc2lk
ZSkKK2Jvb2wgU2Nyb2xsaW5nVHJlZTo6bWFpbkZyYW1lQ2FuUnViYmVyQmFuZE9uU2lkZShQQUw6
OkJveFNpZGUgc2lkZSkKIHsKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zd2lwZVN0YXRlTG9jayB9
OwogICAgIHJldHVybiBtX3N3aXBlU3RhdGUuY2FuUnViYmVyQmFuZC5hdChzaWRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAppbmRleCBjY2QyMjcx
M2I5ODIyOGFlNjAwMTgzZDMwOTQ0ZThhOTJiYjI0M2M1Li44MDk2ODY3YTI5NGY2YTUyNjM4N2M0
OGI4YjhhMjMzOTBhZDQ4YjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZS5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2Fu
IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuIFdpbGwgdXBkYXRlIHdoYXQgZWRnZXMgYWxsb3cg
cnViYmVyLWJhbmRpbmcuCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNYWluRnJhbWVDYW5S
dWJiZXJCYW5kKFJlY3RFZGdlczxib29sPik7Ci0gICAgYm9vbCBtYWluRnJhbWVDYW5SdWJiZXJC
YW5kT25TaWRlKEJveFNpZGUpOworICAgIGJvb2wgbWFpbkZyYW1lQ2FuUnViYmVyQmFuZE9uU2lk
ZShQQUw6OkJveFNpZGUpOwogCiAgICAgYm9vbCBpc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xs
KCkgY29uc3QgeyByZXR1cm4gbV9pc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsOyB9CiAgICAg
dm9pZCBzZXRJc0hhbmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsKGJvb2wgaXNIYW5kbGluZ1Byb2dy
YW1tYXRpY1Njcm9sbCkgeyBtX2lzSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGwgPSBpc0hhbmRs
aW5nUHJvZ3JhbW1hdGljU2Nyb2xsOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVNYWMuaAppbmRleCAzNjdkZjAyYzg0ZWYwYWFjNTliNGNlYTlkN2QwMDg1MmU1
NWUyMTc1Li5iZjU5ZmNkMmJmZDQ0M2JiYTY1NDdkZjJjNDUzMmJjNWFkYTkyOTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgKQEAgLTgxLDEzICs4
MSwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgZmluYWw7CiAgICAgYm9vbCBhbGxvd3NWZXJ0
aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgZmluYWw7CiAg
ICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Bpbm5l
ZE9uU2lkZShCb3hTaWRlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUGlubmVkT25TaWRlKFBB
TDo6Qm94U2lkZSkgY29uc3QgZmluYWw7CiAKICAgICBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBpbm5l
ZFN0YXRlKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5n
KCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpIGNvbnN0
IGZpbmFsOwogCi0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kT25TaWRlKEJveFNpZGUpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNpZGUpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJiwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CiAgICAgdm9p
ZCBkaWRTdG9wUnViYmVyQmFuZEFuaW1hdGlvbigpIGZpbmFsOwogICAgIHZvaWQgcnViYmVyQmFu
ZGluZ1N0YXRlQ2hhbmdlZChib29sKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5kZXggYmYwMTMyZDJkNjQ4MTZmZmFlMTIzMTRmN2I4
MTIyMDQxYTE5YzM2MC4uODExMzA2NmJhNDllY2E0MzI2ZDlkOGRhMzM5MGFiMGM5MDRmYWZlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KQEAg
LTE0NSwyNCArMTQ1LDI0IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYzo6c2Nyb2xsUG9zaXRpb25Jc05vdFJ1YmJlcmJhbmRpbmdFZGdlCiAgICAgYXV0byBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAgICBh
dXRvIG1heGltdW1TY3JvbGxQb3NpdGlvbiA9IHRoaXMtPm1heGltdW1TY3JvbGxQb3NpdGlvbigp
OwogCi0gICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBz
aWRlIDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICBpZiAoIXJ1YmJlcmJhbmRpbmdFZGdl
c1tzaWRlXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN3aXRjaCAoc2lkZSkg
ewotICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6
OlRvcDoKICAgICAgICAgICAgIGlmICh0YXJnZXRQb3NpdGlvbi55KCkgIT0gbWluaW11bVNjcm9s
bFBvc2l0aW9uLnkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICBjYXNlIFBBTDo6
Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBpZiAodGFyZ2V0UG9zaXRpb24ueCgpICE9IG1h
eGltdW1TY3JvbGxQb3NpdGlvbi54KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICBpZiAodGFyZ2V0UG9zaXRp
b24ueSgpICE9IG1heGltdW1TY3JvbGxQb3NpdGlvbi55KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0
OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgIGlmICh0YXJn
ZXRQb3NpdGlvbi54KCkgIT0gbWluaW11bVNjcm9sbFBvc2l0aW9uLngoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjc0LDIyICsyNzQsMjIg
QEAgSW50U2l6ZSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzdHJldGNo
QW1vdW50KCkgY29uc3QKICAgICByZXR1cm4gc3RyZXRjaDsKIH0KIAotYm9vbCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bpbm5lZE9uU2lkZShCb3hTaWRlIHNpZGUp
IGNvbnN0Citib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmlzUGlu
bmVkT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAogewogICAgIHN3aXRjaCAoc2lkZSkg
ewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAg
ICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFBvc2l0aW9uKCkueSgpIDw9IG1p
bmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICBpZiAoIWFsbG93c1ZlcnRpY2Fs
U2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGN1
cnJlbnRTY3JvbGxQb3NpdGlvbigpLnkoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7
Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0Ogog
ICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFBvc2l0aW9uKCkueCgpIDw9
IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0Ogor
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9u
dGFsU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IGN1cnJlbnRTY3JvbGxQb3NpdGlvbigpLngoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCk7CkBAIC0zMTIsMTcgKzMxMiwxNyBAQCBib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QKICAgICByZXR1cm4g
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6YWxsb3dzVmVydGljYWxTY3JvbGxp
bmcoKTsKIH0KIAotYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpz
aG91bGRSdWJiZXJCYW5kT25TaWRlKEJveFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6
OkJveFNpZGUgc2lkZSkgY29uc3QKIHsKICAgICBpZiAoc2Nyb2xsaW5nTm9kZSgpLmlzUm9vdE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ1RyZWUoKS5tYWluRnJhbWVDYW5SdWJiZXJC
YW5kT25TaWRlKHNpZGUpOwogCiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBCb3hTaWRl
OjpUb3A6Ci0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6
OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICByZXR1cm4gYWxs
b3dzVmVydGljYWxTY3JvbGxpbmcoKTsKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6Ci0gICAgY2Fz
ZSBCb3hTaWRlOjpSaWdodDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgIHJldHVybiBhbGxvd3NIb3Jpem9udGFsU2Ny
b2xsaW5nKCk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdJbWFnZS5jcHAKaW5kZXggNmRmZTBkZDNlYTRkYTNhMWY1ZjBmNmM3OWQ2ZDFhM2JmMDBjMzE1
OS4uMmIwNTc0ZWIwMmVmZTUyMTM4NWJlY2NjZjg4YjcyNzliY2ZkY2RlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYp
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JMaW5rKEVsZW1lbnQmLCBVUkwmLCBjb25zdCBTdHJpbmcmLCBUZXh0SW5kaWNhdG9yRGF0YSYs
IEZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JMaW5rKEVsZW1lbnQmLCBVUkwmLCBjb25zdCBTdHJpbmcmLCBUZXh0SW5kaWNhdG9yRGF0YSYs
IFBBTDo6Rm9udFJlbmRlcmluZ01vZGUsIGZsb2F0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCmluZGV4
IDI0NjU0NDA5M2VlZTBmZTM2Y2M5YzMxYTc4ZTdhYmMzMGM0YTkwMjMuLmFmZTIzYjBmYTY5ZTEy
NDM3NDU2MGMzZjgyNjM0NzE5Mjc4NGFkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFn
ZS5oCkBAIC0yNiwxMiArMjYsMTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCi0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNp
bmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvRm9udFJlbmRlcmlu
Z01vZGUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKQEAgLTkxLDcgKzkxLDcgQEAgV0VCQ09SRV9FWFBPUlQgRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSYsIFRleHRJbmRpY2F0b3JEYXQKIFdFQkNPUkVf
RVhQT1JUIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYsIGNvbnN0
IFNpbXBsZVJhbmdlJiwgYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGZhbHNlKTsKIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0LCBQYXRoJik7CiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9ySW1hZ2UoRnJh
bWUmLCBOb2RlJiwgSW50UmVjdCYgaW1hZ2VSZWN0LCBJbnRSZWN0JiBlbGVtZW50UmVjdCk7Ci1E
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiwgVVJMJiwgY29uc3Qg
U3RyaW5nJiBsYWJlbCwgVGV4dEluZGljYXRvckRhdGEmLCBGb250UmVuZGVyaW5nTW9kZSwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpOworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxp
bmsoRWxlbWVudCYsIFVSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwsIFRleHRJbmRpY2F0b3JEYXRh
JiwgUEFMOjpGb250UmVuZGVyaW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwogdm9p
ZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKTsKIAogSW50UG9pbnQgZHJhZ09mZnNldEZv
ckxpbmtEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAKaW5kZXggYmQ2NTlhZjM3MjA5
YjdmNmY5YWY0YWRjNGNmMGFhMDg1Yzc4ZGEzZi4uYmI2ZTNhZDI0YWRhYjY0NDhhNzMwOGMxNWI2
YTIyOTQ5YzljNDI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9h
cmRTY3JvbGxpbmdBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRl
IDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1
LDIwICs2NSwyMCBAQCBSZWN0RWRnZXM8Ym9vbD4gS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6
c2Nyb2xsYWJsZURpcmVjdGlvbnNGcm9tUG9zaXRpb24oRmxvYQogICAgIHJldHVybiBlZGdlczsK
IH0KIAotc3RhdGljIEJveFNpZGUgYm94U2lkZUZvckRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uKQorc3RhdGljIFBBTDo6Qm94U2lkZSBib3hTaWRlRm9yRGlyZWN0aW9uKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBj
YXNlIFNjcm9sbERpcmVjdGlvbjo6U2Nyb2xsVXA6Ci0gICAgICAgIHJldHVybiBCb3hTaWRlOjpU
b3A7CisgICAgICAgIHJldHVybiBQQUw6OkJveFNpZGU6OlRvcDsKICAgICBjYXNlIFNjcm9sbERp
cmVjdGlvbjo6U2Nyb2xsRG93bjoKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJvdHRvbTsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogICAgIGNhc2UgU2Nyb2xsRGlyZWN0
aW9uOjpTY3JvbGxMZWZ0OgotICAgICAgICByZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAgICAgICAg
cmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbjo6U2Ny
b2xsUmlnaHQ6Ci0gICAgICAgIHJldHVybiBCb3hTaWRlOjpSaWdodDsKKyAgICAgICAgcmV0dXJu
IFBBTDo6Qm94U2lkZTo6UmlnaHQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBCb3hTaWRlOjpUb3A7CisgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOwog
fQogCiBzdGF0aWMgRmxvYXRTaXplIHBlcnBlbmRpY3VsYXJBYnNvbHV0ZVVuaXRWZWN0b3IoU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aEJveC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmgKaW5k
ZXggYzA0N2E4OTllZjMzNThkMWYzZGU2MmI4YmRjODYxNDEwMzAzZmI0Ni4uNTQ2YWIxMTFmZmUz
OTUxZDA5ZWE0ZjYwN2RiMzdjMjhhNjNiMWQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGVuZ3RoQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
Qm94LmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUg
IlJlY3RFZGdlcy5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvV3JpdGluZ01vZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaAppbmRleCBkYmRmM2M3NGIxOTVhNTk2YmY0OTQzMmZh
ZTliMzIwZjBiNDMwM2I1Li42ZGVjYTQ5NjU2MjkwODk1YTY2ODM0Nzg0YTI4ODQyMzlmZjExZTA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgKQEAgLTQ1LDcgKzQ1
LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0
IENvbG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGJvb2wgdmlzaWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0Rl
ZmF1bHRBcHBlYXJhbmNlLCBMZW5ndGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlw
ZSBiYWNrZ3JvdW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51
VHlwZSBtZW51VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9w
dXBNZW51U2l6ZU5vcm1hbCkKKyAgICBQb3B1cE1lbnVTdHlsZShjb25zdCBDb2xvciYgZm9yZWdy
b3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBi
b29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5j
ZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBi
b29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3Jv
dW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51
VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6
ZU5vcm1hbCkKICAgICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAg
ICAsIG1fYmFja2dyb3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQp
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGlzcGxheU5vbmUoKSBjb25z
dCB7IHJldHVybiBtX2lzRGlzcGxheU5vbmU7IH0KICAgICBib29sIGhhc0RlZmF1bHRBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0QXBwZWFyYW5jZTsgfQogICAgIExlbmd0
aCB0ZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0SW5kZW50OyB9Ci0gICAgVGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RGlyZWN0aW9uOyB9
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X3RleHREaXJlY3Rpb247IH0KICAgICBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlOyB9CiAgICAgQmFja2dyb3Vu
ZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3Jv
dW5kQ29sb3JUeXBlOyB9CiAgICAgUG9wdXBNZW51VHlwZSBtZW51VHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVudVR5cGU7IH0KQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNEaXNwbGF5Tm9uZTsKICAgICBib29sIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7CiAgICAgTGVu
Z3RoIG1fdGV4dEluZGVudDsKLSAgICBUZXh0RGlyZWN0aW9uIG1fdGV4dERpcmVjdGlvbjsKKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gbV90ZXh0RGlyZWN0aW9uOwogICAgIGJvb2wgbV9oYXNUZXh0
RGlyZWN0aW9uT3ZlcnJpZGU7CiAgICAgQmFja2dyb3VuZENvbG9yVHlwZSBtX2JhY2tncm91bmRD
b2xvclR5cGU7CiAgICAgUG9wdXBNZW51VHlwZSBtX21lbnVUeXBlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9SZWN0RWRnZXMuaAppbmRleCAwZTEyMzAxOTMzNjM1NGQ3Y2VmMjdkMWZkZjdhNzMyMzYwNTE5
ZmFhLi5kMWUzNmEwMjkwYTRkYzhiYmUxNTEyZGNhNjRiYmNjZDMyMGY1NWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWN0RWRnZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9SZWN0RWRnZXMuaApAQCAtMjUsMTggKzI1LDE4IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKICNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRl
IDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ZW51bSBjbGFzcyBCb3hTaWRlRmxhZyA6IHVpbnQ4X3QgewotICAgIFRvcCAgICAgPSAxIDw8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihCb3hTaWRlOjpUb3ApLAotICAgIFJpZ2h0ICAgPSAxIDw8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihCb3hTaWRlOjpSaWdodCksCi0gICAgQm90dG9tICA9IDEgPDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJveFNpZGU6OkJvdHRvbSksCi0gICAgTGVmdCAgICA9IDEg
PDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJveFNpZGU6OkxlZnQpCisgICAgVG9wICAgICA9IDEg
PDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Qm94U2lkZTo6VG9wKSwKKyAgICBSaWdodCAg
ID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpCb3hTaWRlOjpSaWdodCksCisgICAg
Qm90dG9tICA9IDEgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Qm94U2lkZTo6Qm90dG9t
KSwKKyAgICBMZWZ0ICAgID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpCb3hTaWRl
OjpMZWZ0KQogfTsKIAogdXNpbmcgQm94U2lkZVNldCA9IE9wdGlvblNldDxCb3hTaWRlRmxhZz47
CkBAIC01Myw0MCArNTMsNDAgQEAgcHVibGljOgogICAgICAgICA6IG1fc2lkZXMoeyB7IHN0ZDo6
Zm9yd2FyZDxUPih0b3ApLCBzdGQ6OmZvcndhcmQ8VD4ocmlnaHQpLCBzdGQ6OmZvcndhcmQ8VD4o
Ym90dG9tKSwgc3RkOjpmb3J3YXJkPFQ+KGxlZnQpIH0gfSkKICAgICB7IH0KIAotICAgIFQmIGF0
KEJveFNpZGUgc2lkZSkgeyByZXR1cm4gbV9zaWRlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZGUp
XTsgfQotICAgIFQmIG9wZXJhdG9yW10oQm94U2lkZSBzaWRlKSB7IHJldHVybiBtX3NpZGVzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lkZSldOyB9Ci0gICAgVCYgdG9wKCkgeyByZXR1cm4gYXQoQm94
U2lkZTo6VG9wKTsgfQotICAgIFQmIHJpZ2h0KCkgeyByZXR1cm4gYXQoQm94U2lkZTo6UmlnaHQp
OyB9Ci0gICAgVCYgYm90dG9tKCkgeyByZXR1cm4gYXQoQm94U2lkZTo6Qm90dG9tKTsgfQotICAg
IFQmIGxlZnQoKSB7IHJldHVybiBhdChCb3hTaWRlOjpMZWZ0KTsgfQotCi0gICAgY29uc3QgVCYg
YXQoQm94U2lkZSBzaWRlKSBjb25zdCB7IHJldHVybiBtX3NpZGVzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lkZSldOyB9Ci0gICAgY29uc3QgVCYgb3BlcmF0b3JbXShCb3hTaWRlIHNpZGUpIGNvbnN0
IHsgcmV0dXJuIG1fc2lkZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KLSAgICBjb25z
dCBUJiB0b3AoKSBjb25zdCB7IHJldHVybiBhdChCb3hTaWRlOjpUb3ApOyB9Ci0gICAgY29uc3Qg
VCYgcmlnaHQoKSBjb25zdCB7IHJldHVybiBhdChCb3hTaWRlOjpSaWdodCk7IH0KLSAgICBjb25z
dCBUJiBib3R0b20oKSBjb25zdCB7IHJldHVybiBhdChCb3hTaWRlOjpCb3R0b20pOyB9Ci0gICAg
Y29uc3QgVCYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIGF0KEJveFNpZGU6OkxlZnQpOyB9Ci0KLSAg
ICB2b2lkIHNldEF0KEJveFNpZGUgc2lkZSwgY29uc3QgVCYgdikgeyBhdChzaWRlKSA9IHY7IH0K
LSAgICB2b2lkIHNldFRvcChjb25zdCBUJiB0b3ApIHsgc2V0QXQoQm94U2lkZTo6VG9wLCB0b3Ap
OyB9Ci0gICAgdm9pZCBzZXRSaWdodChjb25zdCBUJiByaWdodCkgeyBzZXRBdChCb3hTaWRlOjpS
aWdodCwgcmlnaHQpOyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oY29uc3QgVCYgYm90dG9tKSB7IHNl
dEF0KEJveFNpZGU6OkJvdHRvbSwgYm90dG9tKTsgfQotICAgIHZvaWQgc2V0TGVmdChjb25zdCBU
JiBsZWZ0KSB7IHNldEF0KEJveFNpZGU6OkxlZnQsIGxlZnQpOyB9Ci0KLSAgICBUJiBiZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUod3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0KSk7IH0KLSAg
ICBUJiBhZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGU6OkJsb2NrRW5k
KSk7IH0KLSAgICBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxT
aWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBM
b2dpY2FsQm94U2lkZTo6SW5saW5lU3RhcnQpKTsgfQotICAgIFQmIGVuZChXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIp
IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdy
aXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KLQot
ICAgIGNvbnN0IFQmIGJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1
cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJv
eFNpZGU6OkJsb2NrU3RhcnQpKTsgfQotICAgIGNvbnN0IFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRl
KHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZTo6QmxvY2tFbmQpKTsgfQotICAgIGNvbnN0IFQm
IHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IFRleHREaXJlY3Rpb246OkxUUikgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1Bo
eXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxC
b3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9Ci0gICAgY29uc3QgVCYgZW5kKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUikg
Y29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZs
b3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsg
fQotCi0gICAgdm9pZCBzZXRCZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgeyB0aGlzLT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9Ci0gICAgdm9p
ZCBzZXRBZnRlcihjb25zdCBUJiBhZnRlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhp
cy0+YWZ0ZXIod3JpdGluZ01vZGUpID0gYWZ0ZXI7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGNvbnN0
IFQmIHN0YXJ0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+c3RhcnQod3JpdGluZ01vZGUsIGRpcmVj
dGlvbikgPSBzdGFydDsgfQotICAgIHZvaWQgc2V0RW5kKGNvbnN0IFQmIGVuZCwgV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6
TFRSKSB7IHRoaXMtPmVuZCh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSA9IGVuZDsgfQorICAgIFQm
IGF0KFBBTDo6Qm94U2lkZSBzaWRlKSB7IHJldHVybiBtX3NpZGVzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lkZSldOyB9CisgICAgVCYgb3BlcmF0b3JbXShQQUw6OkJveFNpZGUgc2lkZSkgeyByZXR1
cm4gbV9zaWRlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZGUpXTsgfQorICAgIFQmIHRvcCgpIHsg
cmV0dXJuIGF0KFBBTDo6Qm94U2lkZTo6VG9wKTsgfQorICAgIFQmIHJpZ2h0KCkgeyByZXR1cm4g
YXQoUEFMOjpCb3hTaWRlOjpSaWdodCk7IH0KKyAgICBUJiBib3R0b20oKSB7IHJldHVybiBhdChQ
QUw6OkJveFNpZGU6OkJvdHRvbSk7IH0KKyAgICBUJiBsZWZ0KCkgeyByZXR1cm4gYXQoUEFMOjpC
b3hTaWRlOjpMZWZ0KTsgfQorCisgICAgY29uc3QgVCYgYXQoUEFMOjpCb3hTaWRlIHNpZGUpIGNv
bnN0IHsgcmV0dXJuIG1fc2lkZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KKyAgICBj
b25zdCBUJiBvcGVyYXRvcltdKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdCB7IHJldHVybiBtX3Np
ZGVzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lkZSldOyB9CisgICAgY29uc3QgVCYgdG9wKCkgY29u
c3QgeyByZXR1cm4gYXQoUEFMOjpCb3hTaWRlOjpUb3ApOyB9CisgICAgY29uc3QgVCYgcmlnaHQo
KSBjb25zdCB7IHJldHVybiBhdChQQUw6OkJveFNpZGU6OlJpZ2h0KTsgfQorICAgIGNvbnN0IFQm
IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGF0KFBBTDo6Qm94U2lkZTo6Qm90dG9tKTsgfQorICAg
IGNvbnN0IFQmIGxlZnQoKSBjb25zdCB7IHJldHVybiBhdChQQUw6OkJveFNpZGU6OkxlZnQpOyB9
CisKKyAgICB2b2lkIHNldEF0KFBBTDo6Qm94U2lkZSBzaWRlLCBjb25zdCBUJiB2KSB7IGF0KHNp
ZGUpID0gdjsgfQorICAgIHZvaWQgc2V0VG9wKGNvbnN0IFQmIHRvcCkgeyBzZXRBdChQQUw6OkJv
eFNpZGU6OlRvcCwgdG9wKTsgfQorICAgIHZvaWQgc2V0UmlnaHQoY29uc3QgVCYgcmlnaHQpIHsg
c2V0QXQoUEFMOjpCb3hTaWRlOjpSaWdodCwgcmlnaHQpOyB9CisgICAgdm9pZCBzZXRCb3R0b20o
Y29uc3QgVCYgYm90dG9tKSB7IHNldEF0KFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBib3R0b20pOyB9
CisgICAgdm9pZCBzZXRMZWZ0KGNvbnN0IFQmIGxlZnQpIHsgc2V0QXQoUEFMOjpCb3hTaWRlOjpM
ZWZ0LCBsZWZ0KTsgfQorCisgICAgVCYgYmVmb3JlKFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUs
IFBBTDo6TG9naWNhbEJveFNpZGU6OkJsb2NrU3RhcnQpKTsgfQorICAgIFQmIGFmdGVyKFBBTDo6
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUod3JpdGluZ01vZGUsIFBBTDo6TG9naWNhbEJveFNpZGU6OkJsb2NrRW5kKSk7IH0K
KyAgICBUJiBzdGFydChQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJl
Y3Rpb24pLCBQQUw6OkxvZ2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9CisgICAgVCYgZW5k
KFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVU
b1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIFBBTDo6
TG9naWNhbEJveFNpZGU6OklubGluZUVuZCkpOyB9CisKKyAgICBjb25zdCBUJiBiZWZvcmUoUEFM
OjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNp
ZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6QmxvY2tT
dGFydCkpOyB9CisgICAgY29uc3QgVCYgYWZ0ZXIoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5n
TW9kZSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6QmxvY2tFbmQpKTsgfQorICAgIGNvbnN0IFQmIHN0
YXJ0KFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgY29uc3QgeyByZXR1cm4gYXQobWFwTG9n
aWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlv
biksIFBBTDo6TG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0KSk7IH0KKyAgICBjb25zdCBUJiBl
bmQoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dp
Y2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9u
KSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KKworICAgIHZvaWQgc2V0QmVm
b3JlKGNvbnN0IFQmIGJlZm9yZSwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyB0aGlz
LT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9CisgICAgdm9pZCBzZXRBZnRlcihjb25z
dCBUJiBhZnRlciwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyB0aGlzLT5hZnRlcih3
cml0aW5nTW9kZSkgPSBhZnRlcjsgfQorICAgIHZvaWQgc2V0U3RhcnQoY29uc3QgVCYgc3RhcnQs
IFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyB0aGlzLT5zdGFydCh3cml0aW5nTW9kZSwg
ZGlyZWN0aW9uKSA9IHN0YXJ0OyB9CisgICAgdm9pZCBzZXRFbmQoY29uc3QgVCYgZW5kLCBQQUw6
OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+ZW5kKHdyaXRpbmdNb2RlLCBkaXJlY3Rp
b24pID0gZW5kOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVjdEVkZ2VzJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9zaWRlcyA9PSBvdGhlci5tX3NpZGVzOyB9CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFJlY3RFZGdlcyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2lkZXMg
IT0gb3RoZXIubV9zaWRlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwCmluZGV4IGI3YzE3NjIyNThjYmRjNTQ3NmQ3ZGNhMGFjOTE1NzVhOTQ1YWViMjguLjQ2
NWY5NDk1NmJmZTgyZDQ5MTYyZDc0YzliYWY1OGFkZGJjNjUxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBSZWN0RWRn
ZXM8Ym9vbD4gU2Nyb2xsQW5pbWF0b3I6OmVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZWRnZVBpbm5lZFN0YXRlKCk7CiB9CiAKLWJvb2wgU2Nyb2xs
QW5pbWF0b3I6OmlzUGlubmVkT25TaWRlKEJveFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xs
QW5pbWF0b3I6OmlzUGlubmVkT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAogewogICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmlzUGlubmVkT25TaWRlKHNpZGUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZDUyMWVhM2EzNjNhYWViMDFl
ODdlMjMyZjhmM2NjMjEzM2Y4N2MxMy4uZjdjMDY3ZTk5NDllZGFmZWE3YzYxNzNhZjhhNzliZDY2
OThlMmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0x
NTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICNpZiBIQVZFKFJVQkJFUl9CQU5ESU5HKQogICAgIElu
dFNpemUgc3RyZXRjaEFtb3VudCgpIGNvbnN0IGZpbmFsOwogICAgIFJlY3RFZGdlczxib29sPiBl
ZGdlUGlubmVkU3RhdGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUGlubmVkT25TaWRlKEJv
eFNpZGUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQaW5uZWRPblNpZGUoUEFMOjpCb3hTaWRl
KSBjb25zdCBmaW5hbDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDdiY2NlYmY4MGVjZTc4MTQ3MDJm
YjUxNTFlNGY5NTk1ZDcxZjk5OTIuLmQ5MzBhY2ZjYTBkMDkyMmU2Y2E4MDc3MjAxYzhhODc5Mzk1
MDc3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAg
LTU3NCwyMiArNTc0LDIyIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRvUG9zdFRodW1iTW92ZVNu
YXBwaW5nKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogICAgIHNjcm9sbEFuaW1h
dG9yLT5zY3JvbGxUb1Bvc2l0aW9uV2l0aEFuaW1hdGlvbihwb3NpdGlvbik7CiB9CiAKLWJvb2wg
U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkT25TaWRlKEJveFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wg
U2Nyb2xsYWJsZUFyZWE6OmlzUGlubmVkT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAog
ewogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgIGNhc2Ug
UEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgIGlmICghYWxsb3dzVmVydGljYWxTY3JvbGxpbmco
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRp
b24oKS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOwotICAgIGNhc2UgQm94U2lk
ZTo6Qm90dG9tOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgIGlmICgh
YWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS55KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpOwotICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6
TGVmdDoKICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueCgpIDw9
IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0Ogor
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9u
dGFsU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IHNjcm9sbFBvc2l0aW9uKCkueCgpID49IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKQEAg
LTc3OSwyMyArNzc5LDIzIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxiYXJW
YWx1ZUFuZE92ZXJoYW5nKGZsb2F0IGN1cnJlbnRQb3NpdGlvbiwgZmxvCiAgICAgfQogfQogCi1z
dGQ6Om9wdGlvbmFsPEJveFNpZGU+IFNjcm9sbGFibGVBcmVhOjp0YXJnZXRTaWRlRm9yU2Nyb2xs
RGVsdGEoRmxvYXRTaXplIGRlbHRhLCBTY3JvbGxFdmVudEF4aXMgYXhpcykKK3N0ZDo6b3B0aW9u
YWw8UEFMOjpCb3hTaWRlPiBTY3JvbGxhYmxlQXJlYTo6dGFyZ2V0U2lkZUZvclNjcm9sbERlbHRh
KEZsb2F0U2l6ZSBkZWx0YSwgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCiB7CiAgICAgc3dpdGNoIChh
eGlzKSB7CiAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6CiAgICAgICAgIGlm
IChkZWx0YS53aWR0aCgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpMZWZ0Owor
ICAgICAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKIAogICAgICAgICBpZiAoZGVs
dGEud2lkdGgoKSA+IDApCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6UmlnaHQ7CisgICAg
ICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpSaWdodDsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWw6CiAgICAgICAgIGlmIChkZWx0YS5oZWln
aHQoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOworICAgICAgICAgICAg
cmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOwogCiAgICAgICAgIGlmIChkZWx0YS5oZWlnaHQoKSA+
IDApCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6Qm90dG9tOworICAgICAgICAgICAgcmV0
dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IGFiNzQ1YzRiYmE5ZjIzZTE4
YWJhM2NmMTM2ZTNlOTE1MzEwYjkwNTEuLmMzZGViMDk1YzcyZTMwMTE2NmU1MWY2ZjQ2YTk5ZTQ5
NzdlNTVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAt
MzM3LDEwICszMzcsMTAgQEAgcHVibGljOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgc3RhdGlj
IHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZCBvciB0aGUgc2Ny
b2xsaW5nIHRocmVhZC4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjb21wdXRlU2Ny
b2xsYmFyVmFsdWVBbmRPdmVyaGFuZyhmbG9hdCBjdXJyZW50UG9zaXRpb24sIGZsb2F0IHRvdGFs
U2l6ZSwgZmxvYXQgdmlzaWJsZVNpemUsIGZsb2F0JiBkb3VibGVWYWx1ZSwgZmxvYXQmIG92ZXJo
YW5nQW1vdW50KTsKIAotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJveFNpZGU+IHRhcmdldFNp
ZGVGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUsIFNjcm9sbEV2ZW50QXhpcyk7CisgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiB0YXJnZXRTaWRlRm9yU2Nyb2xsRGVsdGEoRmxv
YXRTaXplLCBTY3JvbGxFdmVudEF4aXMpOwogCiAgICAgLy8gIlBpbm5lZCIgbWVhbnMgc2Nyb2xs
ZWQgYXQgb3IgYmV5b25kIHRoZSBlZGdlLgotICAgIGJvb2wgaXNQaW5uZWRPblNpZGUoQm94U2lk
ZSkgY29uc3Q7CisgICAgYm9vbCBpc1Bpbm5lZE9uU2lkZShQQUw6OkJveFNpZGUpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFJlY3RFZGdlczxib29sPiBlZGdlUGlubmVkU3RhdGUoKSBjb25z
dDsKIAogICAgIC8vIFRydWUgaWYgc2Nyb2xsaW5nIGhhcHBlbnMgYnkgbW92aW5nIGNvbXBvc2l0
aW5nIGxheWVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlci5oCmluZGV4IGM3YTNhMmY4NWVhMGVkNWE3YzZhOTRiZTFiZjM1NzI4
YjE4Yzg4ZjMuLmEzZTk0ODlkYjRjMzNkNTUyZDlhNmExYTQ5N2JiMGNhYTgxZTUwZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXIuaApAQCAtOTUsMTAgKzk1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFNpemUgc3Ry
ZXRjaEFtb3VudCgpIGNvbnN0ID0gMDsKIAogICAgIC8vICJQaW5uZWQiIG1lYW5zIHNjcm9sbGVk
IGF0IG9yIGJleW9uZCB0aGUgZWRnZS4KLSAgICB2aXJ0dWFsIGJvb2wgaXNQaW5uZWRPblNpZGUo
Qm94U2lkZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1Bpbm5lZE9uU2lkZShQQUw6
OkJveFNpZGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlY3RFZGdlczxib29sPiBlZGdlUGlu
bmVkU3RhdGUoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFu
ZE9uU2lkZShCb3hTaWRlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJl
ckJhbmRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbFN0YXJ0UnViYmVyQmFuZEFuaW1hdGlvbigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRT
dG9wUnViYmVyQmFuZEFuaW1hdGlvbigpIHsgfQpAQCAtMjExLDcgKzIxMSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB3aWxsU3RhcnRSdWJiZXJCYW5kQW5pbWF0aW9uKCk7CiAgICAgdm9pZCBkaWRT
dG9wUnViYmVyQmFuZEFuaW1hdGlvbigpOwogCi0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kT25T
aWRlKEJveFNpZGUpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6
OkJveFNpZGUpIGNvbnN0OwogICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFs
KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKICAgICB2b2lk
IHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQppbmRleCBlMzhk
YWY4ODVhMzY0N2MwMGZjNDk5YjA1NGYwZGJkZTk0MzkzN2JhLi40MmYwNGVjMzc2YjAxZmM0ODQ0
YmE2NTExZTM3OWQ2MjJlZmRiZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQpAQCAtMjkwLDcgKzI5MCw3IEBAIExpbmtJbWFnZUxheW91
dDo6TGlua0ltYWdlTGF5b3V0KFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlU3RyaW5nKQog
ICAgIGJvdW5kaW5nUmVjdC5zZXRIZWlnaHQoKHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdSZWN0
LmhlaWdodCgpIC8gMikgKiAyKSk7CiB9CiAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBU
ZXh0SW5kaWNhdG9yRGF0YSYsIEZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcikKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGVsZW1l
bnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNhdG9yRGF0YSYsIFBB
TDo6Rm9udFJlbmRlcmluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIExp
bmtJbWFnZUxheW91dCBsYXlvdXQodXJsLCB0aXRsZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggMGQ5NzEzNmQwYTY0MzMyMDVhZGVjMzU4YWE5MmM0YTliMDY5YjNhNC4uZGE5
ODJhMDhjNjZhYjkwNDkzOGNiNWNkZDFkZmYzMmYxNGMwNjdmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dC5jcHAKQEAgLTM3OCw3ICszNzgsNyBAQCBGbG9hdFNpemUgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0CiAg
ICAgcmV0dXJuIHNpemU7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKICAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVt
R2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZv
bnRTbW9vdGhpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAppbmRleCA0YzdmNDhhNmNm
MDQ3YzMzOTJlZWVkMmYyYzdhOGY1OGFiODUyMWNkLi4wMDgzNWExMDQxZDgzNzdhNjRkNWY0ZGFm
OTZiZWI1M2FhMTg1Y2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjgsNyArMTI4
LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZy
b20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIFBBTDo6Rm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7CiAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZDFjNTM3NDky
OWE2Y2JjMzhiZTBhY2UzNmM3Y2U2Y2Y4YTAwMmJhYS4uZmFmMTE4MTMwYjViM2IzNDk0Y2I4MTJi
Mjc2ZDFmMzQ3Mjk2ZjBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgi
CiAKLSNpbmNsdWRlICJDaGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQv
Q2hhcmFjdGVyUHJvcGVydGllcy5oPgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKQEAgLTEwNSw3ICsxMDUs
NyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVu
aXR5KCkKICAgICBpZiAoIW1fZXhwYW5zaW9uKQogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5ID0gMDsKICAgICBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVu
LnRleHQoKSwgbV9ydW4ubHRyKCkgPyBUZXh0RGlyZWN0aW9uOjpMVFIgOiBUZXh0RGlyZWN0aW9u
OjpSVEwsIG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkpLmZpcnN0OworICAgICAgICB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9y
KCkpLmZpcnN0OwogCiAgICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKICAg
ICAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwpAQCAtMjc2LDkgKzI3Niw5
IEBAIHN0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIENvbnN1bWUgbWFya3MuCi0gICAgYm9vbCBzYXdFbW9qaUdyb3VwQ2FuZGlkYXRlID0gaXNF
bW9qaUdyb3VwQ2FuZGlkYXRlKGJhc2VDaGFyYWN0ZXIpOworICAgIGJvb2wgc2F3RW1vamlHcm91
cENhbmRpZGF0ZSA9IFBBTDo6aXNFbW9qaUdyb3VwQ2FuZGlkYXRlKGJhc2VDaGFyYWN0ZXIpOwog
ICAgIGJvb2wgc2F3Sm9pbmVyID0gZmFsc2U7Ci0gICAgYm9vbCBzYXdSZWdpb25hbEluZGljYXRv
ciA9IGlzRW1vamlSZWdpb25hbEluZGljYXRvcihiYXNlQ2hhcmFjdGVyKTsKKyAgICBib29sIHNh
d1JlZ2lvbmFsSW5kaWNhdG9yID0gUEFMOjppc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IoYmFzZUNo
YXJhY3Rlcik7CiAgICAgd2hpbGUgKGl0ZXJhdG9yIDwgZW5kKSB7CiAgICAgICAgIFVDaGFyMzIg
bmV4dENoYXJhY3RlcjsKICAgICAgICAgdW5zaWduZWQgbWFya0xlbmd0aCA9IDA7CkBAIC0yODYs
MTUgKzI4NiwxNSBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQnlDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciomIGl0ZXJhdG9yLCBjb25zdCBVQwogICAgICAgICBBU1NFUlQoZW5k
ID49IGl0ZXJhdG9yKTsKICAgICAgICAgVTE2X05FWFQoaXRlcmF0b3IsIG1hcmtMZW5ndGgsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihlbmQgLSBpdGVyYXRvciksIG5leHRDaGFyYWN0ZXIpOwogCi0g
ICAgICAgIGlmIChpc1ZhcmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IGlzRW1vamlG
aXR6cGF0cmlja01vZGlmaWVyKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICBpZiAoUEFMOjppc1Zh
cmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IFBBTDo6aXNFbW9qaUZpdHpwYXRyaWNr
TW9kaWZpZXIobmV4dENoYXJhY3RlcikpCiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRy
dWU7CiAKLSAgICAgICAgaWYgKHNhd1JlZ2lvbmFsSW5kaWNhdG9yICYmIGlzRW1vamlSZWdpb25h
bEluZGljYXRvcihuZXh0Q2hhcmFjdGVyKSkgeworICAgICAgICBpZiAoc2F3UmVnaW9uYWxJbmRp
Y2F0b3IgJiYgUEFMOjppc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IobmV4dENoYXJhY3RlcikpIHsK
ICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgICAgIHNhd1JlZ2lv
bmFsSW5kaWNhdG9yID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2F3Sm9pbmVy
ICYmIGlzRW1vamlHcm91cENhbmRpZGF0ZShuZXh0Q2hhcmFjdGVyKSkKKyAgICAgICAgaWYgKHNh
d0pvaW5lciAmJiBQQUw6OmlzRW1vamlHcm91cENhbmRpZGF0ZShuZXh0Q2hhcmFjdGVyKSkKICAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKIAogICAgICAgICBzYXdKb2luZXIgPSBm
YWxzZTsKQEAgLTMyNiw3ICszMjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8VUNo
YXIzMj4gY2FwaXRhbGl6ZWQoVUNoYXIzMiBiYXNlQ2hhcmFjdGVyKQogICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFN5bnRoZXNpemUoYm9vbCBkb250U3lu
dGhlc2l6ZVNtYWxsQ2FwcywgY29uc3QgRm9udCogbmV4dEZvbnQsIFVDaGFyMzIgYmFzZUNoYXJh
Y3Rlciwgc3RkOjpvcHRpb25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZEJhc2UsIEZvbnRWYXJpYW50
Q2FwcyBmb250VmFyaWFudENhcHMsIGJvb2wgZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZykK
K3N0YXRpYyBib29sIHNob3VsZFN5bnRoZXNpemUoYm9vbCBkb250U3ludGhlc2l6ZVNtYWxsQ2Fw
cywgY29uc3QgRm9udCogbmV4dEZvbnQsIFVDaGFyMzIgYmFzZUNoYXJhY3Rlciwgc3RkOjpvcHRp
b25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZEJhc2UsIFBBTDo6Rm9udFZhcmlhbnRDYXBzIGZvbnRW
YXJpYW50Q2FwcywgYm9vbCBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nKQogewogICAgIGlm
IChkb250U3ludGhlc2l6ZVNtYWxsQ2FwcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzU1
LDkgKzM1NSw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRl
eHRSdW5zKCkKICAgICAgICAgY3AgPSBtX3J1bi5jaGFyYWN0ZXJzMTYoKTsKIAogICAgIGF1dG8g
Zm9udFZhcmlhbnRDYXBzID0gbV9mb250LmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDYXBzKCk7
Ci0gICAgYm9vbCBkb250U3ludGhlc2l6ZVNtYWxsQ2FwcyA9ICFzdGF0aWNfY2FzdDxib29sPiht
X2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRoZXNpcygpICYgRm9udFN5bnRoZXNpc1Nt
YWxsQ2Fwcyk7Ci0gICAgYm9vbCBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nID0gZm9udFZh
cmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGwgfHwgZm9udFZhcmlhbnRDYXBz
ID09IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOwotICAgIGJvb2wgZW5nYWdlU21hbGxDYXBz
UHJvY2Vzc2luZyA9IGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgfHwgZm9udFZhcmlhbnRD
YXBzID09IEZvbnRWYXJpYW50Q2Fwczo6U21hbGwgfHwgZm9udFZhcmlhbnRDYXBzID09IEZvbnRW
YXJpYW50Q2Fwczo6UGV0aXRlOworICAgIGJvb2wgZG9udFN5bnRoZXNpemVTbWFsbENhcHMgPSAh
c3RhdGljX2Nhc3Q8Ym9vbD4obV9mb250LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMo
KSAmIFBBTDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2Fwcyk7CisgICAgYm9vbCBlbmdhZ2VBbGxTbWFs
bENhcHNQcm9jZXNzaW5nID0gZm9udFZhcmlhbnRDYXBzID09IFBBTDo6Rm9udFZhcmlhbnRDYXBz
OjpBbGxTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OkFs
bFBldGl0ZTsKKyAgICBib29sIGVuZ2FnZVNtYWxsQ2Fwc1Byb2Nlc3NpbmcgPSBlbmdhZ2VBbGxT
bWFsbENhcHNQcm9jZXNzaW5nIHx8IGZvbnRWYXJpYW50Q2FwcyA9PSBQQUw6OkZvbnRWYXJpYW50
Q2Fwczo6U21hbGwgfHwgZm9udFZhcmlhbnRDYXBzID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQ
ZXRpdGU7CiAKICAgICBpZiAoZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBlbmdhZ2VT
bWFsbENhcHNQcm9jZXNzaW5nKQogICAgICAgICBtX3NtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobV9l
bmQpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgc3RhdGljIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwg
Ym9vbD4gZXhwYW5zaW9uTG9jYXRpb24oYm9vbCBpZGVvZ3JhcGgsIGJvb2wgdHJlYXQKIAogdm9p
ZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkKIHsKLSAg
ICBib29sIGFmdGVyRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0
RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVmdEV4cGFuc2lvbjsKKyAgICBib29sIGFmdGVyRXhw
YW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25N
YXNrKSA9PSBQQUw6OkZvcmJpZExlZnRFeHBhbnNpb247CiAgICAgc2l6ZV90IHJ1bkNvdW50ID0g
bV9jb21wbGV4VGV4dFJ1bnMuc2l6ZSgpOwogICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gKG1f
Zm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5nKCkgfHwgbV9leHBhbnNp
b24pICYmICFtX3J1bi5zcGFjaW5nRGlzYWJsZWQoKTsKLSAgICBib29sIHJ1bkZvcmNlc0xlZnRF
eHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNr
KSA9PSBGb3JjZUxlZnRFeHBhbnNpb247Ci0gICAgYm9vbCBydW5Gb3JjZXNSaWdodEV4cGFuc2lv
biA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUmlnaHRFeHBhbnNpb25NYXNrKSA9PSBG
b3JjZVJpZ2h0RXhwYW5zaW9uOwotICAgIGJvb2wgcnVuRm9yYmlkc0xlZnRFeHBhbnNpb24gPSAo
bV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRM
ZWZ0RXhwYW5zaW9uOwotICAgIGJvb2wgcnVuRm9yYmlkc1JpZ2h0RXhwYW5zaW9uID0gKG1fcnVu
LmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBSaWdodEV4cGFuc2lvbk1hc2spID09IEZvcmJpZFJpZ2h0
RXhwYW5zaW9uOworICAgIGJvb2wgcnVuRm9yY2VzTGVmdEV4cGFuc2lvbiA9IChtX3J1bi5leHBh
bnNpb25CZWhhdmlvcigpICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JjZUxl
ZnRFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JjZXNSaWdodEV4cGFuc2lvbiA9IChtX3J1bi5l
eHBhbnNpb25CZWhhdmlvcigpICYgUEFMOjpSaWdodEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9y
Y2VSaWdodEV4cGFuc2lvbjsKKyAgICBib29sIHJ1bkZvcmJpZHNMZWZ0RXhwYW5zaW9uID0gKG1f
cnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQQUw6
OkZvcmJpZExlZnRFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JiaWRzUmlnaHRFeHBhbnNpb24g
PSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSA9
PSBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uOwogCiAgICAgLy8gV2UgYXJlIGl0ZXJhdGluZyBp
biBnbHlwaCBvcmRlciwgbm90IHN0cmluZyBvcmRlci4gQ29tcGFyZSB0aGlzIHRvIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2VJbnRlcm5hbCgpCiAgICAgZm9yIChzaXplX3QgcnVuSW5kZXggPSAwOyBy
dW5JbmRleCA8IHJ1bkNvdW50OyArK3J1bkluZGV4KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDFkMGU4Nzkw
ZGEzNWMwODFhODBiZWYxYjFlNzFhM2I3ZDlmNTEzN2MuLmVhMzI3NTEzZjUzYTcyMThlMThhNzU2
MzliZDQ1YWFlZjI3YmIzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQ
YXR0ZXJuLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4
dEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjaWYgVVNFKENPUkVfVEVY
VCkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRGVyaXZlRm9udEZy
b21Db250ZXh0IDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBleHBsaWNpdCBEcmF3R2x5cGhzUmVj
b3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObywgRGVyaXZlRm9udEZyb21Db250ZXh0ID0gRGVyaXZlRm9udEZyb21D
b250ZXh0OjpObyk7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9kZSk7CiAKICNpZiBV
U0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05hdGl2ZVRleHQo
Q1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBsaW5lUmVjdCk7
CkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIHZvaWQgcG9wdWxhdGVJbnRl
cm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBh
cmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2
b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYsIFBBTDo6Rm9udFNtb290aGlu
Z01vZGUpOwogICAgIHZvaWQgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKIAogICAgIHZvaWQg
dXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVy
biogPSBudWxscHRyKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKLSAgICBGb250U21vb3Ro
aW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGlu
ZyB9OworICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgUEFMOjpG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAogICAgIHN0cnVjdCBTdGF0ZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDE3YjM1MmY4OTc0MjcyOThmNWRkMGI4
ZGZiOTY5MDc4Nzk1ZDMzN2MuLmZjYTlhNDIyODVjYzUzMDRmN2Q0M2JlODM4ODA2YzcwZDk3Mzk1
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKLSNpbmNsdWRlICJD
aGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVy
dGllcy5oPgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
CiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgpAQCAtOTksNyArOTksNyBAQCBG
b250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgT3JpZ2luIG9y
aWdpbiwgSW50ZXJzdGl0aWFsIGludAogICAgIHBsYXRmb3JtR2x5cGhJbml0KCk7CiAgICAgcGxh
dGZvcm1DaGFyV2lkdGhJbml0KCk7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAg
IGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsICYmIG9yaWVudGF0aW9uRmFsbGJhY2sgPT0gT3JpZW50YXRpb25GYWxsYmFjazo6Tm8pIHsK
KyAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRp
b246OlZlcnRpY2FsICYmIG9yaWVudGF0aW9uRmFsbGJhY2sgPT0gT3JpZW50YXRpb25GYWxsYmFj
azo6Tm8pIHsKICAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBmb250Q2FjaGVGb3JWZXJ0aWNhbERh
dGEgPyBmb250Q2FjaGVGb3JWZXJ0aWNhbERhdGEtPnZlcnRpY2FsRGF0YShwbGF0Zm9ybURhdGEp
IDogRm9udENhY2hlOjpzaW5nbGV0b24oKS52ZXJ0aWNhbERhdGEocGxhdGZvcm1EYXRhKTsKICAg
ICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IG1fdmVydGljYWxEYXRhLmdldCgpICYmIG1fdmVy
dGljYWxEYXRhLT5oYXNWZXJ0aWNhbE1ldHJpY3MoKTsKICAgICB9CkBAIC00NTIsNyArNDUyLDcg
QEAgY29uc3QgRm9udCYgRm9udDo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0
CiB7CiAgICAgRGVyaXZlZEZvbnRzJiBkZXJpdmVkRm9udERhdGEgPSBlbnN1cmVEZXJpdmVkRm9u
dERhdGEoKTsKICAgICBpZiAoIWRlcml2ZWRGb250RGF0YS52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRp
b25Gb250KSB7Ci0gICAgICAgIGF1dG8gdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSA9IEZvbnRQ
bGF0Zm9ybURhdGE6OmNsb25lV2l0aE9yaWVudGF0aW9uKG1fcGxhdGZvcm1EYXRhLCBGb250T3Jp
ZW50YXRpb246Okhvcml6b250YWwpOworICAgICAgICBhdXRvIHZlcnRpY2FsUmlnaHRQbGF0Zm9y
bURhdGEgPSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihtX3BsYXRmb3Jt
RGF0YSwgUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwpOwogICAgICAgICBkZXJpdmVk
Rm9udERhdGEudmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCA9IGNyZWF0ZSh2ZXJ0aWNhbFJp
Z2h0UGxhdGZvcm1EYXRhLCBvcmlnaW4oKSwgSW50ZXJzdGl0aWFsOjpObywgVmlzaWJpbGl0eTo6
VmlzaWJsZSwgT3JpZW50YXRpb25GYWxsYmFjazo6WWVzKTsKICAgICB9CiAgICAgQVNTRVJUKGRl
cml2ZWRGb250RGF0YS52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250ICE9IHRoaXMpOwpAQCAt
NTU3LDcgKzU1Nyw3IEBAIFJlZlB0cjxGb250PiBGb250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hCiB9CiAKICNpZiAhVVNFKENP
UkVfVEVYVCkKLUdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcm
LCBTdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uKSBjb25zdAorR2x5cGhCdWZmZXJBZHZhbmNlIEZv
bnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9v
bCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlv
bikgY29uc3QKIHsKICAgICByZXR1cm4gbWFrZUdseXBoQnVmZmVyQWR2YW5jZSgpOwogfQpAQCAt
NjQzLDEzICs2NDMsMTMgQEAgdm9pZCBGb250OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNo
ZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCi1ib29sIEZv
bnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRD
YXBzIGZvbnRWYXJpYW50Q2FwcywgVUNoYXIzMikgY29uc3QKK2Jvb2wgRm9udDo6dmFyaWFudENh
cHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhQQUw6OkZvbnRWYXJpYW50Q2FwcyBmb250
VmFyaWFudENhcHMsIFVDaGFyMzIpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChmb250VmFyaWFudENh
cHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0g
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRDYXBzOjpTbWFsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgpAQCAtNjg5LDcgKzY4OSw3IEBAIGJvb2wgRm9udDo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsCiAgICAgICAgIGF1dG8gY29kZVBvaW50ID0gKml0OwogICAgICAgICArK2l0
OwogCi0gICAgICAgIGlmIChpdCAhPSBlbmQgJiYgaXNWYXJpYXRpb25TZWxlY3RvcigqaXQpKSB7
CisgICAgICAgIGlmIChpdCAhPSBlbmQgJiYgUEFMOjppc1ZhcmlhdGlvblNlbGVjdG9yKCppdCkp
IHsKICAgICAgICAgICAgIGlmICghcGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChjb2RlUG9pbnQs
ICppdCkpIHsKICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIGNoYXJhY3RlcnMgaW5kaXZpZHVh
bGx5LgogICAgICAgICAgICAgICAgIGlmICghc3VwcG9ydHNDb2RlUG9pbnQoY29kZVBvaW50KSB8
fCAhc3VwcG9ydHNDb2RlUG9pbnQoKml0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCA5ZmM0ZWE4MmViYmM3N2VhZDkwMTA4NTQzODA4MjllMTViYmFiNmY0Li43
ZmI4MDA5MzE5ZDNhMWY0NDAzMzIxNWIyYWEyMjMxZjY3ZjNmMjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gY29uc3RfY2FzdDxGb250Kj4odGhpcyk7CiAgICAgfQogCi0gICAgYm9vbCB2
YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2Fwcywg
VUNoYXIzMikgY29uc3Q7CisgICAgYm9vbCB2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9y
U3ludGhlc2lzKFBBTDo6Rm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyKSBjb25zdDsKIAogICAgIGNv
bnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdDsKICAgICBjb25z
dCBGb250JiB1cHJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3Q7CkBAIC0xODUsNyArMTg1LDcg
QEAgcHVibGljOgogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ1RGb250UmVmIGdl
dENURm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQotICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGdldENGU3RyaW5nQXR0cmlidXRlcyhib29sIGVuYWJs
ZUtlcm5pbmcsIEZvbnRPcmllbnRhdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlKSBjb25z
dDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMo
Ym9vbCBlbmFibGVLZXJuaW5nLCBQQUw6OkZvbnRPcmllbnRhdGlvbiwgY29uc3QgQXRvbVN0cmlu
ZyYgbG9jYWxlKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5
U21hbGxDYXBzKCkgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRC
eUFsbFNtYWxsQ2FwcygpIGNvbnN0OwogICAgIGNvbnN0IEJpdFZlY3RvciYgZ2x5cGhzU3VwcG9y
dGVkQnlQZXRpdGVDYXBzKCkgY29uc3Q7CkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKLSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWdu
ZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJl
c1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0
RGlyZWN0aW9uKSBjb25zdDsKKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFuc2Zvcm1z
KEdseXBoQnVmZmVyJiwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVn
aW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHRE
aXJlY3Rpb24pIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhl
IGdseXBocyBhcmUgT1QtU1ZHIGdseXBocy4KICAgICBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4g
ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCB1bnNpZ25lZCBjb3VudCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmlu
ZGV4IDllYzU0ZjYzYjNhYmNlOWQwM2VhNjYwZWZmMTVkYTM5OTYyMzUyMDIuLmM1M2Q2MjI0YjI3
ZTQwZjBiYjQxNzk0NjlkODRjOTUxNmVmNGM5OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xNzYsNyArMTc2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgdW5zaWduZWQgZmlyc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24u
c2NyaXB0KCkpIDw8IDE1CiAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNj
cmlwdGlvbi5zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZygpKSA8PCAxNAogICAgICAg
ICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMoKSkgPDwgMTMKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRlc2NyaXB0aW9uLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50KSA8
PCAxMgorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uZm9u
dFN0eWxlQXhpcygpID09IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudCkgPDwgMTIKICAgICAgICAg
ICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLm9wdGljYWxTaXppbmcoKSkg
PDwgMTEKICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnRl
eHRSZW5kZXJpbmdNb2RlKCkpIDw8IDkKICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRlc2NyaXB0aW9uLmZvbnRTeW50aGVzaXMoKSkgPDwgNgpAQCAtMzEyLDcgKzMxMiw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3Rv
ciBjYW4gaGF2ZSBhIHVuaWZpZWQgbm90aW9uIG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZv
bnQtZmFjZS4KICAgICAvLyBJdCBjb21lcyBpbnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBm
b250LWZhY2Ugd2hpY2ggc2hhcmVzIGEgZmFtaWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9u
dC4KLSAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyk7CisgICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgUEFMOjpBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4g
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBGb250Q3JlYXRpb25Db250ZXh0JiA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
PSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggNmMxZDM0NzNkNTc1MThhYjgzMTgy
MjhhOTA0NzhjNzJiZWFhNDc4MC4uZDc1NTdlNWUxYzMwZWY2MDRhZjI5NGRkNzk5OTU2ZTkyMjEy
YTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAKLSNpbmNsdWRlICJDaGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5j
bHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oPgogI2luY2x1ZGUgIkNvbXBsZXhU
ZXh0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0zMDEsNyArMzAxLDcgQEAgZmxvYXQgRm9udENhc2Nh
ZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxi
YWNrRm9udHMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdW
aWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAogewogICAg
IGlmICh0ZXh0LmlzTnVsbCgpIHx8IHRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTMzOSw3ICszMzksNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
KFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aQogR2x5cGhEYXRhIEZv
bnRDYXNjYWRlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBib29sIG1pcnJvciwg
Rm9udFZhcmlhbnQgdmFyaWFudCkgY29uc3QKIHsKICAgICBpZiAodmFyaWFudCA9PSBBdXRvVmFy
aWFudCkgewotICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBG
b250VmFyaWFudENhcHM6OlNtYWxsKSB7CisgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi52
YXJpYW50Q2FwcygpID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbCkgewogICAgICAgICAg
ICAgVUNoYXIzMiB1cHBlckMgPSB1X3RvdXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAodXBwZXJD
ICE9IGMpIHsKICAgICAgICAgICAgICAgICBjID0gdXBwZXJDOwpAQCAtNzI2LDkgKzcyNiw5IEBA
IEZvbnRDYXNjYWRlOjpDb2RlUGF0aCBGb250Q2FzY2FkZTo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0
aChjb25zdCBVQ2hhciogY2hhcmFjdGVyCiAgICAgICAgICAgICBpZiAoc3VwcGxlbWVudGFyeUNo
YXJhY3RlciA8PSAweDFGMUZGKQogICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUGF0aDo6Q29t
cGxleDsKIAotICAgICAgICAgICAgaWYgKGlzRW1vamlGaXR6cGF0cmlja01vZGlmaWVyKHN1cHBs
ZW1lbnRhcnlDaGFyYWN0ZXIpKQorICAgICAgICAgICAgaWYgKFBBTDo6aXNFbW9qaUZpdHpwYXRy
aWNrTW9kaWZpZXIoc3VwcGxlbWVudGFyeUNoYXJhY3RlcikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIENvZGVQYXRoOjpDb21wbGV4OwotICAgICAgICAgICAgaWYgKGlzRW1vamlHcm91cENhbmRp
ZGF0ZShzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgaWYgKFBBTDo6aXNF
bW9qaUdyb3VwQ2FuZGlkYXRlKHN1cHBsZW1lbnRhcnlDaGFyYWN0ZXIpKSB7CiAgICAgICAgICAg
ICAgICAgcHJldmlvdXNDaGFyYWN0ZXJJc0Vtb2ppR3JvdXBDYW5kaWRhdGUgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtOTYzLDE1ICs5NjMsMTUg
QEAgYm9vbCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCiAg
ICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQorc3RkOjpwYWlyPHVuc2ln
bmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBBTDo6VGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ip
CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9
IChleHBhbnNpb25CZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhw
YW5zaW9uOwotICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0RXhwYW5zaW9uTWFzaykg
PT0gRm9yY2VMZWZ0RXhwYW5zaW9uKSB7CisgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4
cGFuc2lvbkJlaGF2aW9yICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JiaWRM
ZWZ0RXhwYW5zaW9uOworICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBh
bnNpb25NYXNrKSA9PSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbikgewogICAgICAgICArK2NvdW50
OwogICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGRpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ld
KSkgewogICAgICAgICAgICAgICAgIGNvdW50Kys7CkBAIC05ODgsMTAgKzk4OCwxMCBAQCBzdGQ6
OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoY29uc3QgTAogICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4
cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVJpZ2h0RXhwYW5z
aW9uKSB7CisgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAm
IFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmNlUmlnaHRFeHBhbnNpb24pIHsK
ICAgICAgICAgKytjb3VudDsKICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAg
fSBlbHNlIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFJpZ2h0
RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkUmlnaHRFeHBhbnNpb24pIHsKKyAgICB9IGVsc2UgaWYg
KGlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgUEFMOjpSaWdodEV4cGFu
c2lvbk1hc2spID09IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb24pIHsKICAgICAgICAgQVNTRVJU
KGNvdW50KTsKICAgICAgICAgLS1jb3VudDsKICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZh
bHNlOwpAQCAtOTk5LDE2ICs5OTksMTYgQEAgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IEwKICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoY291bnQsIGlzQWZ0ZXJFeHBhbnNpb24pOwogfQogCi1zdGQ6
OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KQorc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uQmVoYXZpb3IpCiB7CiAgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dy
YXBocyA9IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwotICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IChleHBhbnNpb25C
ZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhwYW5zaW9uOwotICAg
IGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0RXhwYW5zaW9uTWFzaykgPT0gRm9yY2VMZWZ0
RXhwYW5zaW9uKSB7CisgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4cGFuc2lvbkJlaGF2
aW9yICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9u
OworICAgIGlmICgoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9
PSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbikgewogICAgICAgICArK2NvdW50OwogICAgICAgICBp
c0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOwogICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CkBAIC0xMDUxLDEwICsxMDUxLDEw
IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVCiAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9u
ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uICYm
IChleHBhbnNpb25CZWhhdmlvciAmIFJpZ2h0RXhwYW5zaW9uTWFzaykgPT0gRm9yY2VSaWdodEV4
cGFuc2lvbikgeworICAgIGlmICghaXNBZnRlckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZp
b3IgJiBQQUw6OlJpZ2h0RXhwYW5zaW9uTWFzaykgPT0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9u
KSB7CiAgICAgICAgICsrY291bnQ7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwot
ICAgIH0gZWxzZSBpZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZpb3IgJiBS
aWdodEV4cGFuc2lvbk1hc2spID09IEZvcmJpZFJpZ2h0RXhwYW5zaW9uKSB7CisgICAgfSBlbHNl
IGlmIChpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFBBTDo6UmlnaHRF
eHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uKSB7CiAgICAgICAgIEFT
U0VSVChjb3VudCk7CiAgICAgICAgIC0tY291bnQ7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24g
PSBmYWxzZTsKQEAgLTEwNjIsNyArMTA2Miw3IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4g
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVCiAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvdW50LCBpc0FmdGVyRXhwYW5zaW9uKTsKIH0KIAot
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3N0ZDo6cGFpcjx1bnNpZ25lZCwg
Ym9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldyBz
dHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBQQUw6OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQogewogICAgIC8vIEZvciBlYWNoIGNoYXJhY3Rlciwg
aXRlcmF0aW5nIGZyb20gbGVmdCB0byByaWdodDoKICAgICAvLyAgIElmIGl0IGlzIHJlY29nbml6
ZWQgYXMgYSBzcGFjZSwgaW5zZXJ0IGFuIG9wcG9ydHVuaXR5IGFmdGVyIGl0CkBAIC0xMDczLDEz
ICsxMDczLDEzIEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldyBzdHJpCiAgICAgcmV0dXJuIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJp
bmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGV4cGFuc2lvbkJlaGF2aW9yKTsKIH0KIAotYm9v
bCBGb250Q2FzY2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5n
VmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRDYXNjYWRlOjpsZWZ0RXhw
YW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIGlmICghc3RyaW5nVmlldy5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIzMiBpbml0aWFsQ2hhcmFjdGVyOwotICAgIGlmIChk
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUikgewogICAgICAgICBpbml0aWFsQ2hhcmFjdGVyID0gc3Ry
aW5nVmlld1swXTsKICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGluaXRpYWxDaGFyYWN0ZXIpICYm
IHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19UUkFJTChzdHJpbmdWaWV3WzFdKSkK
ICAgICAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoaW5p
dGlhbENoYXJhY3Rlciwgc3RyaW5nVmlld1sxXSk7CkBAIC0xMDkyLDEzICsxMDkyLDEzIEBAIGJv
b2wgRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24KICAgICByZXR1cm4gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQoKSAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGluaXRpYWxDaGFyYWN0
ZXIpOwogfQogCi1ib29sIEZvbnRDYXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0
cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRD
YXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAoIXN0cmluZ1ZpZXcubGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVDaGFyMzIgZmluYWxDaGFyYWN0
ZXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAo
ZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZpbmFsQ2hh
cmFjdGVyID0gc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMV07CiAgICAgICAgIGlm
IChVMTZfSVNfVFJBSUwoZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAx
ICYmIFUxNl9JU19MRUFEKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdKSkKICAg
ICAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKHN0cmluZ1Zp
ZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdLCBmaW5hbENoYXJhY3Rlcik7CkBAIC0xMzU4LDcg
KzEzNTgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBHbHlwaEJ1ZmZlciYgZwogCiBpbmxpbmUgc3RhdGljIGZsb2F0
IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250JiBmb250RGF0YSwgR2x5cGggZ2x5cGgp
CiB7Ci0gICAgaWYgKGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSB7CisgICAgaWYgKGZvbnREYXRhLnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsK
ICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnREYXRhLmJvdW5kc0ZvckdseXBoKGdseXBo
KTsKICAgICAgICAgcmV0dXJuIGJvdW5kcy54KCkgKyBib3VuZHMud2lkdGgoKSAvIDI7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5k
ZXggNmFmNTgxMmQ4YTcyMmI4ZmRiZDM5MzgxYmQ2NDgzMjc2OWU0ZmEzYS4uODliNzRkMGNhMzZk
MThjOGU2ODliOThiNTJhZjk0Y2FjNjNiN2ZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmLCBmbG9hdCBsZXR0ZXJTcGFjaW5nID0g
MCwgZmxvYXQgd29yZFNwYWNpbmcgPSAwKTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9u
bHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250
LgotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
LCBGb250U21vb3RoaW5nTW9kZSA9IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSA9IFBBTDo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9v
dGhpbmcpOwogCiAgICAgRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBGb250Q2FzY2FkZSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRDYXNjYWRlJik7CkBA
IC0xMjQsMTQgKzEyNCwxNCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIEN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJZkZvbnROb3RS
ZWFkeSB9OwogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20g
PSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCwgQ3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICBz
dGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIHN0
YXRpYyB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKTsKICAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBjb25zdDsK
IAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGlu
ZUV4dGVudHMpIGNvbnN0OwogCiAgICAgZmxvYXQgd2lkdGhPZlRleHRSYW5nZShjb25zdCBUZXh0
UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgZmxvYXQqIG91dFdpZHRoQmVmb3JlUmFuZ2UgPSBudWxscHRyLCBm
bG9hdCogb3V0V2lkdGhBZnRlclJhbmdlID0gbnVsbHB0cikgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBmbG9hdCB3
aWR0aEZvclNpbXBsZVRleHQoU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uID0gVGV4dERp
cmVjdGlvbjo6TFRSKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvclNpbXBsZVRleHQoU3RyaW5n
VmlldyB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikg
Y29uc3Q7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dExheW91dCwgVGV4dExheW91dERlbGV0
ZXI+IGNyZWF0ZUxheW91dChSZW5kZXJUZXh0JiwgZmxvYXQgeFBvcywgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UpIGNvbnN0OwogICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0JiwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cyA9IDApOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICBpbnQgb2Zmc2V0Rm9y
UG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdDsKICAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNv
bnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tID0g
MCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0g
ICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnZh
cmlhbnRDYXBzKCkgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbDsgfQorICAgIGJvb2wgaXNTbWFs
bENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi52YXJpYW50Q2FwcygpID09
IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDsgfQogCiAgICAgZmxvYXQgd29yZFNwYWNpbmco
KSBjb25zdCB7IHJldHVybiBtX3dvcmRTcGFjaW5nOyB9CiAgICAgZmxvYXQgbGV0dGVyU3BhY2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsgfQpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldExldHRlclNwYWNpbmcoZmxvYXQgcykgeyBtX2xldHRlclNw
YWNpbmcgPSBzOyB9CiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKICAgICAKLSAgICBG
b250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVz
Y3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpOyB9CisgICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24ucmVuZGVyaW5n
TW9kZSgpOyB9CiAKICAgICBib29sIGVuYWJsZUtlcm5pbmcoKSBjb25zdCB7IHJldHVybiBtX2Vu
YWJsZUtlcm5pbmc7IH0KICAgICBib29sIHJlcXVpcmVzU2hhcGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcmVxdWlyZXNTaGFwaW5nOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHVibGljOgogICAgIC8v
IEEgc3RkOjpudWxsb3B0IHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgImZvbnQtc3R5bGU6IG5vcm1h
bCIuCiAgICAgc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGl0YWxpYygpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLml0YWxpYygpOyB9CiAgICAgRm9udFNlbGVjdGlv
blZhbHVlIHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndlaWdodCgp
OyB9Ci0gICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKTsgfQorICAgIFBBTDo6Rm9udFdpZHRoVmFy
aWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi53aWR0
aFZhcmlhbnQoKTsgfQogCiAgICAgYm9vbCBpc1BsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udHMtPmlzRm9yUGxhdGZvcm1Gb250KCk7IH0KIApAQCAtMTg1LDEyICsxODUsMTIgQEAg
cHVibGljOgogCiAgICAgLy8gUmV0dXJucyAodGhlIG51bWJlciBvZiBvcHBvcnR1bml0aWVzLCB3
aGV0aGVyIHRoZSBsYXN0IGV4cGFuc2lvbiBpcyBhIHRyYWlsaW5nIGV4cGFuc2lvbikKICAgICAv
LyBJZiB0aGVyZSBhcmUgbm8gb3Bwb3J0dW5pdGllcywgdGhlIGJvb2wgd2lsbCBiZSB0cnVlIGlm
ZiB3ZSBhcmUgZm9yYmlkZGluZyBsZWFkaW5nIGV4cGFuc2lvbnMuCi0gICAgc3RhdGljIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJpbmdWaWV3
LCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3RhdGljIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJpbmdWaWV3LCBQ
QUw6OlRleHREaXJlY3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAgLy8gV2hl
dGhlciBvciBub3QgdGhlcmUgaXMgYW4gZXhwYW5zaW9uIG9wcG9ydHVuaXR5IGp1c3QgYmVmb3Jl
IHRoZSBmaXJzdCBjaGFyYWN0ZXIKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB0YWtl
IGEgaXNBZnRlckV4cGFuc2lvbiBmbGFnOyB0aGlzIGFzc3VtZXMgdGhhdCBpc0FmdGVyRXhwYW5z
aW9uIGlzIGZhbHNlCi0gICAgc3RhdGljIGJvb2wgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0
cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24pOwotICAgIHN0YXRpYyBib29sIHJpZ2h0RXhwYW5zaW9u
T3Bwb3J0dW5pdHkoU3RyaW5nVmlldywgVGV4dERpcmVjdGlvbik7CisgICAgc3RhdGljIGJvb2wg
bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbik7
CisgICAgc3RhdGljIGJvb2wgcmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3LCBQ
QUw6OlRleHREaXJlY3Rpb24pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0
U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29s
IHNob3VsZFVzZVNtb290aGluZygpOwpAQCAtMjM3LDggKzIzNyw4IEBAIHByaXZhdGU6CiAgICAg
aW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0
IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICB2b2lkIGFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCi0g
ICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBFeHBhbnNpb25CZWhhdmlvcik7Ci0gICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9v
bD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3RhdGlj
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVy
bmFsKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQQUw6OlRleHREaXJlY3Rpb24sIFBB
TDo6RXhwYW5zaW9uQmVoYXZpb3IpOworICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgUEFMOjpUZXh0RGlyZWN0aW9uLCBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yKTsK
IAogICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3MgQ29t
cGxleFRleHRDb250cm9sbGVyOwpAQCAtMjg3LDkgKzI4Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBhZHZhbmNlZFRleHRSZW5kZXJpbmdNb2RlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8g
dGV4dFJlbmRlcmluZ01vZGUgPSBtX2ZvbnREZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgp
OwotICAgICAgICBpZiAodGV4dFJlbmRlcmluZ01vZGUgPT0gVGV4dFJlbmRlcmluZ01vZGU6Okdl
b21ldHJpY1ByZWNpc2lvbiB8fCB0ZXh0UmVuZGVyaW5nTW9kZSA9PSBUZXh0UmVuZGVyaW5nTW9k
ZTo6T3B0aW1pemVMZWdpYmlsaXR5KQorICAgICAgICBpZiAodGV4dFJlbmRlcmluZ01vZGUgPT0g
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uIHx8IHRleHRSZW5kZXJp
bmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0eSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAodGV4dFJlbmRlcmluZ01vZGUgPT0g
VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQpCisgICAgICAgIGlmICh0ZXh0UmVuZGVy
aW5nTW9kZSA9PSBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNwZWVkKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoRlJFRVRZUEUp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzAxLDkgKzMwMSw5IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBjb21wdXRlRW5hYmxlS2VybmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvIGtl
cm5pbmcgPSBtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCk7Ci0gICAgICAgIGlmIChrZXJuaW5n
ID09IEtlcm5pbmc6Ok5vcm1hbCkKKyAgICAgICAgaWYgKGtlcm5pbmcgPT0gUEFMOjpLZXJuaW5n
OjpOb3JtYWwpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGtlcm5pbmcg
PT0gS2VybmluZzo6Tm9TaGlmdCkKKyAgICAgICAgaWYgKGtlcm5pbmcgPT0gUEFMOjpLZXJuaW5n
OjpOb1NoaWZ0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gYWR2
YW5jZWRUZXh0UmVuZGVyaW5nTW9kZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKaW5k
ZXggNjcwY2Q5MjRiODBkMWI0NzU2N2Q2MDRkMjFlM2JmNDNiNzY2MGIzYy4uMmUwMDVjOWUyNTcz
ODE0ZWNiMDM0ZmJkZGIxYjFmMTc2ZGRkY2MwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKQEAg
LTUzLDkgKzUzLDkgQEAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24pID09IHNpemVvZihTYW1lU2l6ZUFzRm9udENhc2NhZGVEZXMKIAogRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbigpCiAgICAgOiBtX2lzQWJzb2x1dGVTaXpl
KGZhbHNlKQotICAgICwgbV9rZXJuaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihLZXJuaW5nOjpB
dXRvKSkKKyAgICAsIG1fa2VybmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpLZXJuaW5n
OjpBdXRvKSkKICAgICAsIG1fa2V5d29yZFNpemUoMCkKLSAgICAsIG1fZm9udFNtb290aGluZyhz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcpKQor
ICAgICwgbV9mb250U21vb3RoaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRTbW9v
dGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nKSkKICAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNl
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDA4YmQ5MDY2OTQ3OWIyZDYyZjk5YjliNjc4
NGExNWUxZDUyZGMyMzQuLmRiMzBkZTRlODY5Nzc2ZjIxYmQ4MDFjZDU5ODNkNTI4M2Y5YWU2Yzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIC8vIG9u
bHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGZvbnQgZmFt
aWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKICAgICBib29sIHVzZUZpeGVkRGVm
YXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgpID09IDEgJiYgZmlyc3RGYW1p
bHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KIAotICAgIEtlcm5pbmcga2VybmluZygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KKyAgICBQQUw6Oktl
cm5pbmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6S2VybmluZz4o
bV9rZXJuaW5nKTsgfQogICAgIHVuc2lnbmVkIGtleXdvcmRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9rZXl3b3JkU2l6ZTsgfQogICAgIENTU1ZhbHVlSUQga2V5d29yZFNpemVBc0lkZW50aWZpZXIo
KSBjb25zdAogICAgIHsKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
aWRlbnRpZmllciA9PSBDU1NWYWx1ZUludmFsaWQgfHwgKGlkZW50aWZpZXIgPj0gQ1NTVmFsdWVY
eFNtYWxsICYmIGlkZW50aWZpZXIgPD0gQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSkpOwogICAgICAg
ICByZXR1cm4gaWRlbnRpZmllcjsKICAgICB9Ci0gICAgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTbW9vdGhpbmdNb2RlPiht
X2ZvbnRTbW9vdGhpbmcpOyB9CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZSBmb250U21vb3Ro
aW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250U21vb3RoaW5nTW9kZT4o
bV9mb250U21vb3RoaW5nKTsgfQogICAgIGJvb2wgaXNTcGVjaWZpZWRGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1NwZWNpZmllZEZvbnQ7IH0KIAogICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1f
ZmFtaWxpZXNbMF0gPSBmYW1pbHk7IH0KQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RmFtaWxpZXMoY29uc3QgUmVmQ291bnRlZEFycmF5PEF0b21TdHJpbmc+JiBmYW1pbGll
cykgeyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0KICAgICB2b2lkIHNldFNwZWNpZmllZFNpemUo
ZmxvYXQgcykgeyBtX3NwZWNpZmllZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KICAgICB2b2lk
IHNldElzQWJzb2x1dGVTaXplKGJvb2wgcykgeyBtX2lzQWJzb2x1dGVTaXplID0gczsgfQotICAg
IHZvaWQgc2V0S2VybmluZyhLZXJuaW5nIGtlcm5pbmcpIHsgbV9rZXJuaW5nID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGtlcm5pbmcpOyB9CisgICAgdm9pZCBzZXRLZXJuaW5nKFBBTDo6S2Vybmlu
ZyBrZXJuaW5nKSB7IG1fa2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsg
fQogICAgIHZvaWQgc2V0S2V5d29yZFNpemUodW5zaWduZWQgc2l6ZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChzaXplIDw9IDgpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAg
c3RhdGljX2Fzc2VydChDU1NWYWx1ZVdlYmtpdFh4eExhcmdlIC0gQ1NTVmFsdWVYeFNtYWxsICsg
MSA9PSA4LCAiTWF4aW11bSBrZXl3b3JkIHNpemUgc2hvdWxkIGJlIDguIik7CiAgICAgICAgIHNl
dEtleXdvcmRTaXplKGlkZW50aWZpZXIgPyBpZGVudGlmaWVyIC0gQ1NTVmFsdWVYeFNtYWxsICsg
MSA6IDApOwogICAgIH0KLSAgICB2b2lkIHNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
bW9vdGhpbmcpOyB9CisgICAgdm9pZCBzZXRGb250U21vb3RoaW5nKFBBTDo6Rm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzbW9vdGhpbmcpOyB9CiAgICAgdm9pZCBzZXRJc1NwZWNpZmllZEZvbnQoYm9vbCBpc1NwZWNp
ZmllZEZvbnQpIHsgbV9pc1NwZWNpZmllZEZvbnQgPSBpc1NwZWNpZmllZEZvbnQ7IH0KIAogI2lm
IEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCkBAIC0xMjAsMTggKzEyMCwxOCBAQCBwdWJsaWM6CiAK
ICAgICAvLyBJbml0aWFsIHZhbHVlcyBmb3IgZm9udCBwcm9wZXJ0aWVzLgogICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaW5pdGlhbEl0YWxpYygpIHsgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0YXRpYyBGb250U3R5bGVBeGlzIGluaXRpYWxGb250U3R5
bGVBeGlzKCkgeyByZXR1cm4gRm9udFN0eWxlQXhpczo6c2xudDsgfQorICAgIHN0YXRpYyBQQUw6
OkZvbnRTdHlsZUF4aXMgaW5pdGlhbEZvbnRTdHlsZUF4aXMoKSB7IHJldHVybiBQQUw6OkZvbnRT
dHlsZUF4aXM6OnNsbnQ7IH0KICAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxX
ZWlnaHQoKSB7IHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOyB9CiAgICAgc3RhdGljIEZvbnRT
ZWxlY3Rpb25WYWx1ZSBpbml0aWFsU3RyZXRjaCgpIHsgcmV0dXJuIG5vcm1hbFN0cmV0Y2hWYWx1
ZSgpOyB9Ci0gICAgc3RhdGljIEZvbnRTbWFsbENhcHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0
dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsgfQotICAgIHN0YXRpYyBLZXJuaW5nIGluaXRpYWxLZXJu
aW5nKCkgeyByZXR1cm4gS2VybmluZzo6QXV0bzsgfQotICAgIHN0YXRpYyBGb250U21vb3RoaW5n
TW9kZSBpbml0aWFsRm9udFNtb290aGluZygpIHsgcmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpB
dXRvU21vb3RoaW5nOyB9Ci0gICAgc3RhdGljIFRleHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0
UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRl
cmluZzsgfQotICAgIHN0YXRpYyBGb250U3ludGhlc2lzIGluaXRpYWxGb250U3ludGhlc2lzKCkg
eyByZXR1cm4gRm9udFN5bnRoZXNpc1dlaWdodCB8IEZvbnRTeW50aGVzaXNTdHlsZSB8IEZvbnRT
eW50aGVzaXNTbWFsbENhcHM7IH0KLSAgICBzdGF0aWMgRm9udFZhcmlhbnRQb3NpdGlvbiBpbml0
aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFs
OyB9Ci0gICAgc3RhdGljIEZvbnRWYXJpYW50Q2FwcyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJl
dHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsgfQotICAgIHN0YXRpYyBGb250VmFyaWFudEFs
dGVybmF0ZXMgaW5pdGlhbFZhcmlhbnRBbHRlcm5hdGVzKCkgeyByZXR1cm4gRm9udFZhcmlhbnRB
bHRlcm5hdGVzOjpOb3JtYWw7IH0KLSAgICBzdGF0aWMgRm9udE9wdGljYWxTaXppbmcgaW5pdGlh
bE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZDsgfQor
ICAgIHN0YXRpYyBQQUw6OkZvbnRTbWFsbENhcHMgaW5pdGlhbFNtYWxsQ2FwcygpIHsgcmV0dXJu
IFBBTDo6Rm9udFNtYWxsQ2Fwczo6T2ZmOyB9CisgICAgc3RhdGljIFBBTDo6S2VybmluZyBpbml0
aWFsS2VybmluZygpIHsgcmV0dXJuIFBBTDo6S2VybmluZzo6QXV0bzsgfQorICAgIHN0YXRpYyBQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlIGluaXRpYWxGb250U21vb3RoaW5nKCkgeyByZXR1cm4gUEFM
OjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzsgfQorICAgIHN0YXRpYyBQQUw6OlRl
eHRSZW5kZXJpbmdNb2RlIGluaXRpYWxUZXh0UmVuZGVyaW5nTW9kZSgpIHsgcmV0dXJuIFBBTDo6
VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOyB9CisgICAgc3RhdGljIFBBTDo6
Rm9udFN5bnRoZXNpcyBpbml0aWFsRm9udFN5bnRoZXNpcygpIHsgcmV0dXJuIFBBTDo6Rm9udFN5
bnRoZXNpc1dlaWdodCB8IFBBTDo6Rm9udFN5bnRoZXNpc1N0eWxlIHwgUEFMOjpGb250U3ludGhl
c2lzU21hbGxDYXBzOyB9CisgICAgc3RhdGljIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbiBpbml0
aWFsVmFyaWFudFBvc2l0aW9uKCkgeyByZXR1cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpO
b3JtYWw7IH0KKyAgICBzdGF0aWMgUEFMOjpGb250VmFyaWFudENhcHMgaW5pdGlhbFZhcmlhbnRD
YXBzKCkgeyByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDsgfQorICAgIHN0YXRp
YyBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcyBpbml0aWFsVmFyaWFudEFsdGVybmF0ZXMoKSB7
IHJldHVybiBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOyB9CisgICAgc3RhdGlj
IFBBTDo6Rm9udE9wdGljYWxTaXppbmcgaW5pdGlhbE9wdGljYWxTaXppbmcoKSB7IHJldHVybiBQ
QUw6OkZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkOyB9CiAgICAgc3RhdGljIGNvbnN0IEF0b21T
dHJpbmcmIGluaXRpYWxTcGVjaWZpZWRMb2NhbGUoKSB7IHJldHVybiBudWxsQXRvbSgpOyB9CiAg
ICAgc3RhdGljIEZvbnRQYWxldHRlIGluaXRpYWxGb250UGFsZXR0ZSgpIHsgcmV0dXJuIHsgRm9u
dFBhbGV0dGU6OlR5cGU6Ok5vcm1hbCwgbnVsbEF0b20oKSB9OyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXgg
YTI0MmQzNjVmODlkYmE5YzdkYWQ4MGY2OTg3Y2I0NWRmY2Y0YWRlOC4uZWQwM2YyOWZiZmUzYTQ5
ZWEwYTczYTg0NTE3MDYxY2Y1OWI5MWRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTI5NCwxMCArMjk0LDEw
IEBAIHN0YXRpYyBib29sIHNob3VsZElnbm9yZVJvdGF0aW9uKFVDaGFyMzIgY2hhcmFjdGVyKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25D
SktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pL
R2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3QgR2x5cGhEYXRhJiBkYXRhKQorc3Rh
dGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRh
dGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgUEFMOjpOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBjb25zdCBHbHlwaERhdGEmIGRhdGEpCiB7CiAgICAgYm9vbCBzeW50aGV0aWNPYmxp
cXVlID0gZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCk7Ci0gICAg
aWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfHwgc2hv
dWxkSWdub3JlUm90YXRpb24oY2hhcmFjdGVyKSkgeworICAgIGlmIChvcmllbnRhdGlvbiA9PSBQ
QUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfHwgc2hvdWxkSWdub3JlUm90YXRp
b24oY2hhcmFjdGVyKSkgewogICAgICAgICBHbHlwaERhdGEgdXByaWdodERhdGEgPSBkYXRhLmZv
bnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKICAgICAgICAgLy8gSWYgdGhlIGdseXBocyBhcmUgdGhlIHNhbWUsIHRoZW4gd2Uga25v
dyB3ZSBjYW4ganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGggcm90YXRlZCB2ZXJ0aWNhbGx5
CiAgICAgICAgIC8vIHRvIGJlIHVwcmlnaHQuIEZvciBzeW50aGV0aWMgb2JsaXF1ZSwgaG93ZXZl
ciwgd2Ugd2lsbCBhbHdheXMgcmV0dXJuIHRoZSB1cHJpZ2h0RGF0YSB0byBlbnN1cmUKQEAgLTMx
MCw3ICszMTAsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3Rl
cldpdGhHbHlwaE9yaWVudGF0aW9uKFVDaGFyMzIgY2hhcmFjdAogICAgICAgICAvLyBnbHlwaCwg
c28gd2UgZmFsbCBiYWNrIHRvIHRoZSB1cHJpZ2h0IGRhdGEgYW5kIHVzZSB0aGUgaG9yaXpvbnRh
bCBnbHlwaC4KICAgICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnQpCiAgICAgICAgICAgICByZXR1
cm4gdXByaWdodERhdGE7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PSBOb25DSktHbHlw
aE9yaWVudGF0aW9uOjpNaXhlZCkgeworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gUEFM
OjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCkgewogICAgICAgICBHbHlwaERhdGEgdmVy
dGljYWxSaWdodERhdGEgPSBkYXRhLmZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQo
KS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIAogICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBhIGJha2VkLWluIHJvdGF0ZWQgZ2x5cGgsIHdlIHdpbGwgdXNlIGl0IHVubGVzcyBzeW50
aGV0aWNPYmxpcXVlIGlzIHNldC4gSWYKQEAgLTM1OCw3ICszNTgsNyBAQCBHbHlwaERhdGEgRm9u
dENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0
ZXIsIGNvbnN0CiAgICAgaWYgKHN5c3RlbUZhbGxiYWNrU2hvdWxkQmVJbnZpc2libGUpCiAgICAg
ICAgIHN5c3RlbUZhbGxiYWNrRm9udCA9IGNvbnN0X2Nhc3Q8Rm9udCo+KCZzeXN0ZW1GYWxsYmFj
a0ZvbnQtPmludmlzaWJsZUZvbnQoKSk7CiAKLSAgICBpZiAoc3lzdGVtRmFsbGJhY2tGb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwg
JiYgIXN5c3RlbUZhbGxiYWNrRm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKQorICAgIGlmIChzeXN0ZW1GYWxs
YmFja0ZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50
YXRpb246OlZlcnRpY2FsICYmICFzeXN0ZW1GYWxsYmFja0ZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhz
KCkgJiYgRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkKICAg
ICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7CiAKICAgICBHbHlwaERhdGEg
ZmFsbGJhY2tHbHlwaERhdGE7CkBAIC0zNjcsNyArMzY3LDcgQEAgR2x5cGhEYXRhIEZvbnRDYXNj
YWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgY2hhcmFjdGVyLCBj
b25zdAogICAgIGVsc2UKICAgICAgICAgZmFsbGJhY2tHbHlwaERhdGEgPSBzeXN0ZW1GYWxsYmFj
a0ZvbnQtPnZhcmlhbnRGb250KGRlc2NyaXB0aW9uLCB2YXJpYW50KS0+Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGNoYXJhY3Rlcik7CiAKLSAgICBpZiAoZmFsbGJhY2tHbHlwaERhdGEuZm9udCAmJiBm
YWxsYmFja0dseXBoRGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPmlzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgeworICAgIGlmIChmYWxsYmFja0dseXBoRGF0YS5mb250
ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsICYmICFmYWxsYmFja0dseXBoRGF0YS5m
b250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKICAgICAgICAgaWYgKHZhcmlhbnQg
PT0gTm9ybWFsVmFyaWFudCAmJiAhRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
Y2hhcmFjdGVyKSkKICAgICAgICAgICAgIGZhbGxiYWNrR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9y
Tm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oY2hhcmFjdGVyLCBkZXNjcmlwdGlv
bi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGZhbGxiYWNrR2x5cGhEYXRhKTsKICAgICB9CkBA
IC00MjcsNyArNDI3LDcgQEAgR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZv
clZhcmlhbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXMKICAgICAgICAgICAgIGRh
dGEuZm9udCA9ICZkYXRhLmZvbnQtPmludmlzaWJsZUZvbnQoKTsKIAogICAgICAgICBpZiAodmFy
aWFudCA9PSBOb3JtYWxWYXJpYW50KSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS5mb250LT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYg
IWRhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7CisgICAgICAgICAgICBp
ZiAoZGF0YS5mb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKGNoYXJhY3RlcikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihjaGFyYWN0ZXIsIGRlc2Ny
aXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSk7CiAKQEAgLTQ4Miw3ICs0ODIs
NyBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5z
aWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBpZiAoIWZvbnQgfHwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQorICAgIGlmICghZm9udCB8fCBmb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoZGVzaXJlZFZpc2liaWxp
dHkgPT0gRmFsbGJhY2tWaXNpYmlsaXR5OjpJbnZpc2libGUgJiYgZm9udC0+dmlzaWJpbGl0eSgp
ID09IEZvbnQ6OlZpc2liaWxpdHk6OlZpc2libGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAppbmRleCA3YjQ3YmZkMTUzOGNm
OWUzNjk5MzQ2NTU0NzkxMTBiZDhjZjAwODM5Li40ZDA0YWQxZDMyNGNiZTNhNTJhZDA2OGJjMjI5
Y2Y1NTlkMTlmOGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAKQEAgLTM5LDMxICszOSwzMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBGb250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigpCiAgICAgOiBtX2ZvbnRQ
YWxldHRlKHsgRm9udFBhbGV0dGU6OlR5cGU6Ok5vcm1hbCwgbnVsbEF0b20oKSB9KQogICAgICwg
bV9mb250U2VsZWN0aW9uUmVxdWVzdCB7IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxX
ZWlnaHQoKSwgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFN0cmV0Y2goKSwgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEl0YWxpYygpIH0KLSAgICAsIG1fb3JpZW50YXRpb24o
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkpCi0gICAg
LCBtX25vbkNKS0dseXBoT3JpZW50YXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vbkNKS0ds
eXBoT3JpZW50YXRpb246Ok1peGVkKSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KHN0YXRpY19jYXN0
PHVuc2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQotICAgICwgbV9yZW5k
ZXJpbmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFs
KSkKLSAgICAsIG1fdGV4dFJlbmRlcmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVGV4dFJlbmRl
cmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKSkKKyAgICAsIG1fb3JpZW50YXRpb24oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSkKKyAgICAs
IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpOb25D
SktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCkpCisgICAgLCBtX3dpZHRoVmFyaWFudChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUEFMOjpGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpKQorICAg
ICwgbV9yZW5kZXJpbmdNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRSZW5kZXJp
bmdNb2RlOjpOb3JtYWwpKQorICAgICwgbV90ZXh0UmVuZGVyaW5nKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZykpCiAgICAgLCBt
X3NjcmlwdChVU0NSSVBUX0NPTU1PTikKLSAgICAsIG1fZm9udFN5bnRoZXNpcyhGb250U3ludGhl
c2lzV2VpZ2h0IHwgRm9udFN5bnRoZXNpc1N0eWxlIHwgRm9udFN5bnRoZXNpc1NtYWxsQ2FwcykK
LSAgICAsIG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKSkKLSAgICAsIG1fdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50TGlnYXR1
cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50UG9zaXRpb24oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRDYXBzKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudENhcHM6Ok5vcm1hbCkpCi0gICAgLCBtX3Zh
cmlhbnROdW1lcmljRmlndXJlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVy
aWNGaWd1cmU6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnROdW1lcmljU3BhY2luZyhzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsKSkKLSAgICAs
IG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnROdW1lcmljT3JkaW5h
bChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFs
KSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbCkpCi0gICAgLCBtX3Zhcmlh
bnRBbHRlcm5hdGVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudEFsdGVybmF0ZXM6
Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCkpCi0gICAgLCBtX3Zh
cmlhbnRFYXN0QXNpYW5XaWR0aChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lhblJ1Ynkoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsKSkKLSAgICAs
IG1fb3B0aWNhbFNpemluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9wdGljYWxTaXppbmc6
OkVuYWJsZWQpKQotICAgICwgbV9mb250U3R5bGVBeGlzKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmluaXRpYWxGb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6aXRhbCkKLSAgICAsIG1f
c2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFsbG93
VXNlckluc3RhbGxlZEZvbnRzOjpObykpCisgICAgLCBtX2ZvbnRTeW50aGVzaXMoUEFMOjpGb250
U3ludGhlc2lzV2VpZ2h0IHwgUEFMOjpGb250U3ludGhlc2lzU3R5bGUgfCBQQUw6OkZvbnRTeW50
aGVzaXNTbWFsbENhcHMpCisgICAgLCBtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCisgICAgLCBt
X3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6
OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50SGlzdG9yaWNh
bExpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudExpZ2F0dXJl
czo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQorICAgICwg
bV92YXJpYW50UG9zaXRpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnRQ
b3NpdGlvbjo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudENhcHMoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJp
Y0ZpZ3VyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1
cmU6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnROdW1lcmljU3BhY2luZyhzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpKQorICAgICwg
bV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJpY09y
ZGluYWwoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bDo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsKSkK
KyAgICAsIG1fdmFyaWFudEFsdGVybmF0ZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50RWFzdEFzaWFuVmFy
aWFudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpKQorICAgICwg
bV92YXJpYW50RWFzdEFzaWFuUnVieShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFy
aWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkpCisgICAgLCBtX29wdGljYWxTaXppbmcoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVuYWJsZWQpKQorICAgICwg
bV9mb250U3R5bGVBeGlzKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxGb250U3R5bGVB
eGlzKCkgPT0gUEFMOjpGb250U3R5bGVBeGlzOjppdGFsKQorICAgICwgbV9zaG91bGRBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpBbGxvd1VzZXJJbnN0
YWxsZWRGb250czo6Tm8pKQogICAgICwgbV9zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2lu
ZyhmYWxzZSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnREZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmgKaW5kZXggNjgxOWEyMWE1ZWEwZTNjMmJkYjYwMzhkYTYyNzEyMzQz
NjJhMDI0NS4uNjkyYjRiYjc2OWVjNGZjOGVmMjA0OWNkYmQxOWRhMmIyOTgwNTIyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgK
QEAgLTI1LDExICsyNSwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb250UGFsZXR0
ZS5oIgotI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVj
dGlvbkFsZ29yaXRobS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1
ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0ZvbnRSZW5k
ZXJpbmdNb2RlLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIApAQCAtNTAsMzQgKzUwLDM0IEBAIHB1YmxpYzoKICAgICBGb250U2Vs
ZWN0aW9uVmFsdWUgc3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlvblJlcXVl
c3Qud2lkdGg7IH0KICAgICBGb250U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC53ZWlnaHQ7IH0KICAgICBGb250U2VsZWN0aW9uUmVx
dWVzdCBmb250U2VsZWN0aW9uUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdGlv
blJlcXVlc3Q7IH0KLSAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmluZ01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7
IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJpbmdNb2RlPihtX3RleHRSZW5kZXJpbmcpOyB9Cisg
ICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250UmVuZGVyaW5nTW9kZT4obV9yZW5kZXJpbmdNb2RlKTsgfQor
ICAgIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxQQUw6OlRleHRSZW5kZXJpbmdNb2RlPihtX3RleHRSZW5kZXJpbmcp
OyB9CiAgICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQogICAgIGNvbnN0IEF0b21TdHJpbmcmIGNvbXB1dGVk
TG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0gLy8gVGhpcyBpcyB3aGF0IHlvdSBz
aG91bGQgYmUgdXNpbmcgZm9yIHRoaW5ncyBsaWtlIHRleHQgc2hhcGluZyBhbmQgZm9udCBmYWxs
YmFjawogICAgIGNvbnN0IEF0b21TdHJpbmcmIHNwZWNpZmllZExvY2FsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY2lmaWVkTG9jYWxlOyB9IC8vIFRoaXMgaXMgd2hhdCB5b3Ugc2hvdWxkIGJlIHVz
aW5nIGZvciB3ZWItZXhwb3NlZCB0aGluZ3MgbGlrZSAtd2Via2l0LWxvY2FsZQogCi0gICAgRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9u
dE9yaWVudGF0aW9uPihtX29yaWVudGF0aW9uKTsgfQotICAgIE5vbkNKS0dseXBoT3JpZW50YXRp
b24gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5v
bkNKS0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KLSAgICBG
b250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRXaWR0aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIFBBTDo6Rm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250
T3JpZW50YXRpb24+KG1fb3JpZW50YXRpb24pOyB9CisgICAgUEFMOjpOb25DSktHbHlwaE9yaWVu
dGF0aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7
IH0KKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0K
ICAgICBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVTZXR0aW5nczsgfQogICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0
aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhdGlvblNldHRp
bmdzOyB9Ci0gICAgRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQotICAgIEZvbnRW
YXJpYW50TGlnYXR1cmVzIHZhcmlhbnRDb21tb25MaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29tbW9uTGlnYXR1cmVz
KTsgfQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1f
dmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVy
ZXMgdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk7IH0K
LSAgICBGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50
Q29udGV4dHVhbEFsdGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudFBvc2l0aW9u
PihtX3ZhcmlhbnRQb3NpdGlvbik7IH0KLSAgICBGb250VmFyaWFudENhcHMgdmFyaWFudENhcHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENh
cHMpOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnROdW1lcmljRmlndXJl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiht
X3ZhcmlhbnROdW1lcmljRmlndXJlKTsgfQotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcg
dmFyaWFudE51bWVyaWNTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZh
cmlhbnROdW1lcmljU3BhY2luZz4obV92YXJpYW50TnVtZXJpY1NwYWNpbmcpOyB9Ci0gICAgRm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb24gdmFyaWFudE51bWVyaWNGcmFjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uPihtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24pOyB9Ci0gICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCB2YXJpYW50
TnVtZXJpY09yZGluYWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51
bWVyaWNPcmRpbmFsPihtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCk7IH0KLSAgICBGb250VmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+KG1fdmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyk7IH0KLSAgICBGb250VmFyaWFudEFsdGVybmF0ZXMgdmFyaWFu
dEFsdGVybmF0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEFsdGVy
bmF0ZXM+KG1fdmFyaWFudEFsdGVybmF0ZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50IHZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PihtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
KTsgfQotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lhbldpZHRo
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4o
bV92YXJpYW50RWFzdEFzaWFuV2lkdGgpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
IHZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZh
cmlhbnRFYXN0QXNpYW5SdWJ5PihtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KTsgfQotICAgIEZvbnRW
YXJpYW50U2V0dGluZ3MgdmFyaWFudFNldHRpbmdzKCkgY29uc3QKKyAgICBQQUw6OkZvbnRTeW50
aGVzaXMgZm9udFN5bnRoZXNpcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9u
dFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXMgdmFyaWFudENvbW1vbkxpZ2F0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyk7IH0K
KyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudExpZ2F0dXJl
cz4obV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyk7IH0KKyAgICBQQUw6OkZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50SGlzdG9yaWNh
bExpZ2F0dXJlcyk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnRDb250
ZXh0dWFsQWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXM+KG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKTsgfQorICAgIFBB
TDo6Rm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50UG9zaXRpb24+KG1fdmFyaWFudFBvc2l0aW9uKTsg
fQorICAgIFBBTDo6Rm9udFZhcmlhbnRDYXBzIHZhcmlhbnRDYXBzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudENhcHM+KG1fdmFyaWFudENhcHMpOyB9CisgICAg
UEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmUgdmFyaWFudE51bWVyaWNGaWd1cmUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZT4obV92
YXJpYW50TnVtZXJpY0ZpZ3VyZSk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNp
bmcgdmFyaWFudE51bWVyaWNTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFM
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPihtX3ZhcmlhbnROdW1lcmljU3BhY2luZyk7IH0K
KyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlhbnROdW1lcmljRnJhY3Rp
b24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uPihtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24pOyB9CisgICAgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNPcmRpbmFsIHZhcmlhbnROdW1lcmljT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4obV92YXJpYW50TnVtZXJp
Y09yZGluYWwpOyB9CisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyB2YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4obV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJv
KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzIHZhcmlhbnRBbHRlcm5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM+KG1f
dmFyaWFudEFsdGVybmF0ZXMpOyB9CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4obV92YXJpYW50RWFzdEFzaWFuVmFyaWFu
dCk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggdmFyaWFudEVhc3RBc2lh
bldpZHRoKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoPihtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aCk7IH0KKyAgICBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuUnVieSB2YXJpYW50RWFzdEFzaWFuUnVieSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5PihtX3ZhcmlhbnRFYXN0QXNp
YW5SdWJ5KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5ncyB2YXJpYW50U2V0dGluZ3Mo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHsgdmFyaWFudENvbW1vbkxpZ2F0dXJlcygp
LAogICAgICAgICAgICAgdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSwKQEAgLTk1LDkg
Kzk1LDkgQEAgcHVibGljOgogICAgICAgICAgICAgdmFyaWFudEVhc3RBc2lhbldpZHRoKCksCiAg
ICAgICAgICAgICB2YXJpYW50RWFzdEFzaWFuUnVieSgpIH07CiAgICAgfQotICAgIEZvbnRPcHRp
Y2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250
T3B0aWNhbFNpemluZz4obV9vcHRpY2FsU2l6aW5nKTsgfQotICAgIEZvbnRTdHlsZUF4aXMgZm9u
dFN0eWxlQXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0eWxlQXhpcyA/IEZvbnRTdHlsZUF4
aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50OyB9Ci0gICAgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyk7IH0KKyAgICBQQUw6OkZvbnRPcHRpY2FsU2l6aW5nIG9wdGljYWxTaXppbmcoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRPcHRpY2FsU2l6aW5nPihtX29wdGlj
YWxTaXppbmcpOyB9CisgICAgUEFMOjpGb250U3R5bGVBeGlzIGZvbnRTdHlsZUF4aXMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRTdHlsZUF4aXMgPyBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0YWwgOiBQ
QUw6OkZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0KKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZv
bnRzIHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4obV9zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7IH0KICAgICBib29sIHNob3VsZERpc2FibGVMaWdhdHVyZXNGb3JTcGFjaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZzsgfQog
ICAgIEZvbnRQYWxldHRlIGZvbnRQYWxldHRlKCkgY29uc3QgeyByZXR1cm4gbV9mb250UGFsZXR0
ZTsgfQogCkBAIC0xMDYsMzMgKzEwNiwzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdHJldGNo
KEZvbnRTZWxlY3Rpb25WYWx1ZSBzdHJldGNoKSB7IG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2lk
dGggPSBzdHJldGNoOyB9CiAgICAgdm9pZCBzZXRJc0l0YWxpYyhib29sIGlzSXRhbGljKSB7IHNl
dEl0YWxpYyhpc0l0YWxpYyA/IHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB7IGl0
YWxpY1ZhbHVlKCkgfSA6IHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB7IH0pOyB9
CiAgICAgdm9pZCBzZXRXZWlnaHQoRm9udFNlbGVjdGlvblZhbHVlIHdlaWdodCkgeyBtX2ZvbnRT
ZWxlY3Rpb25SZXF1ZXN0LndlaWdodCA9IHdlaWdodDsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5n
TW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtb2RlKTsgfQotICAgIHZvaWQgc2V0VGV4dFJlbmRlcmluZ01vZGUoVGV4
dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7IG1fdGV4dFJlbmRlcmluZyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihyZW5kZXJpbmcpOyB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvcmllbnRhdGlvbik7IH0KLSAgICB2b2lkIHNldE5vbkNKS0dseXBoT3JpZW50YXRpb24o
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX25vbkNKS0dseXBoT3JpZW50
YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZW50YXRpb24pOyB9Ci0gICAgdm9pZCBz
ZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpIHsgbV93aWR0aFZh
cmlhbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od2lkdGhWYXJpYW50KTsgfSAvLyBNYWtlIHN1
cmUgbmV3IGNhbGxlcnMgb2YgdGhpcyBzeW5jIHdpdGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JU
ZXh0Q29tYmluZSgpIQorICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShQQUw6OkZvbnRSZW5kZXJp
bmdNb2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1v
ZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9kZShQQUw6OlRleHRSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZykgeyBtX3RleHRSZW5kZXJpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmVuZGVyaW5nKTsgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oUEFMOjpGb250T3JpZW50YXRp
b24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihv
cmllbnRhdGlvbik7IH0KKyAgICB2b2lkIHNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oUEFMOjpO
b25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRh
dGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcmllbnRhdGlvbik7IH0KKyAgICB2b2lkIHNl
dFdpZHRoVmFyaWFudChQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KSB7IG1fd2lk
dGhWYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdpZHRoVmFyaWFudCk7IH0gLy8gTWFr
ZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRoaXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6Omlz
Rm9yVGV4dENvbWJpbmUoKSEKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNwZWNpZmllZExv
Y2FsZShjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBzZXRGZWF0dXJlU2V0dGluZ3MoRm9u
dEZlYXR1cmVTZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fZmVhdHVyZVNldHRpbmdzID0gV1RGTW92
ZShzZXR0aW5ncyk7IH0KICAgICB2b2lkIHNldFZhcmlhdGlvblNldHRpbmdzKEZvbnRWYXJpYXRp
b25TZXR0aW5ncyYmIHNldHRpbmdzKSB7IG1fdmFyaWF0aW9uU2V0dGluZ3MgPSBXVEZNb3ZlKHNl
dHRpbmdzKTsgfQotICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzIGZvbnRT
eW50aGVzaXMpIHsgbV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQotICAgIHZvaWQg
c2V0VmFyaWFudENvbW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7
IG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlh
bnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50SGlz
dG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFu
dEhpc3RvcmljYWxMaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0K
LSAgICB2b2lkIHNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0
dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50UG9zaXRpb24oRm9u
dFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50KSB7IG1fdmFyaWFudFBvc2l0aW9uID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50Q2FwcyhGb250VmFy
aWFudENhcHMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDYXBzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShGb250VmFyaWFu
dE51bWVyaWNGaWd1cmUgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRmlndXJlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1Nw
YWNpbmcoRm9udFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVy
aWNTcGFjaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBz
ZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIHZhcmlh
bnQpIHsgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZh
cmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbCB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNPcmRpbmFsID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvKEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
Ci0gICAgdm9pZCBzZXRWYXJpYW50QWx0ZXJuYXRlcyhGb250VmFyaWFudEFsdGVybmF0ZXMgdmFy
aWFudCkgeyBtX3ZhcmlhbnRBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlh
bnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQgdmFyaWFudCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50RWFzdEFz
aWFuV2lkdGgoRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1fdmFyaWFudEVh
c3RBc2lhbldpZHRoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9p
ZCBzZXRWYXJpYW50RWFzdEFzaWFuUnVieShGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFu
dCkgeyBtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlh
bnQpOyB9Ci0gICAgdm9pZCBzZXRPcHRpY2FsU2l6aW5nKEZvbnRPcHRpY2FsU2l6aW5nIHNpemlu
ZykgeyBtX29wdGljYWxTaXppbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6aW5nKTsgfQot
ICAgIHZvaWQgc2V0Rm9udFN0eWxlQXhpcyhGb250U3R5bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5
bGVBeGlzID0gYXhpcyA9PSBGb250U3R5bGVBeGlzOjppdGFsOyB9Ci0gICAgdm9pZCBzZXRTaG91
bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyhBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cykgeyBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsg
fQorICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhQQUw6OkZvbnRTeW50aGVzaXMgZm9udFN5bnRo
ZXNpcykgeyBtX2ZvbnRTeW50aGVzaXMgPSBmb250U3ludGhlc2lzOyB9CisgICAgdm9pZCBzZXRW
YXJpYW50Q29tbW9uTGlnYXR1cmVzKFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkg
eyBtX3ZhcmlhbnRDb21tb25MaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFu
dCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJp
YW50SGlzdG9yaWNhbExpZ2F0dXJlcyhQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnQp
IHsgbV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKFBBTDo6
Rm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFy
aWFudFBvc2l0aW9uKFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbiB2YXJpYW50KSB7IG1fdmFyaWFu
dFBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBz
ZXRWYXJpYW50Q2FwcyhQQUw6OkZvbnRWYXJpYW50Q2FwcyB2YXJpYW50KSB7IG1fdmFyaWFudENh
cHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNldFZhcmlh
bnROdW1lcmljRmlndXJlKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlIHZhcmlhbnQpIHsg
bV92YXJpYW50TnVtZXJpY0ZpZ3VyZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsg
fQorICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZyB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNTcGFjaW5nID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gdmFyaWFudCkgeyBtX3ZhcmlhbnRO
dW1lcmljRnJhY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2
b2lkIHNldFZhcmlhbnROdW1lcmljT3JkaW5hbChQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGlu
YWwgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhQ
QUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnQpIHsgbV92YXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAg
dm9pZCBzZXRWYXJpYW50QWx0ZXJuYXRlcyhQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcyB2YXJp
YW50KSB7IG1fdmFyaWFudEFsdGVybmF0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFu
dCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuVmFyaWFudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudEVh
c3RBc2lhbldpZHRoKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB2YXJpYW50KSB7IG1f
dmFyaWFudEVhc3RBc2lhbldpZHRoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
CisgICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuUnVieShQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieSB2YXJpYW50KSB7IG1fdmFyaWFudEVhc3RBc2lhblJ1YnkgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNldE9wdGljYWxTaXppbmcoUEFMOjpGb250
T3B0aWNhbFNpemluZyBzaXppbmcpIHsgbV9vcHRpY2FsU2l6aW5nID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHNpemluZyk7IH0KKyAgICB2b2lkIHNldEZvbnRTdHlsZUF4aXMoUEFMOjpGb250U3R5
bGVBeGlzIGF4aXMpIHsgbV9mb250U3R5bGVBeGlzID0gYXhpcyA9PSBQQUw6OkZvbnRTdHlsZUF4
aXM6Oml0YWw7IH0KKyAgICB2b2lkIHNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKFBB
TDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
IHsgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7IH0KICAgICB2b2lkIHNldFNob3VsZERp
c2FibGVMaWdhdHVyZXNGb3JTcGFjaW5nKGJvb2wgc2hvdWxkRGlzYWJsZUxpZ2F0dXJlc0ZvclNw
YWNpbmcpIHsgbV9zaG91bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZyA9IHNob3VsZERpc2Fi
bGVMaWdhdHVyZXNGb3JTcGFjaW5nOyB9CiAgICAgdm9pZCBzZXRGb250UGFsZXR0ZShGb250UGFs
ZXR0ZSBmb250UGFsZXR0ZSkgeyBtX2ZvbnRQYWxldHRlID0gZm9udFBhbGV0dGU7IH0KIApAQCAt
MTU1LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgRm9udFNlbGVjdGlvblJlcXVlc3QgbV9mb250
U2VsZWN0aW9uUmVxdWVzdDsKICAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7IDAgfTsgLy8gQ29t
cHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXplIGFuZCB0aGUgem9v
bSBmYWN0b3IuCiAgICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6IDE7IC8vIEZvbnRPcmllbnRh
dGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9uIGEgaG9yaXpvbnRhbCBsaW5l
IG9yIGEgdmVydGljYWwgbGluZS4KLSAgICB1bnNpZ25lZCBtX25vbkNKS0dseXBoT3JpZW50YXRp
b24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25seSB1c2VkIGJ5IHZlcnRpY2Fs
IHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRpb24gZm9yIG5vbi1pZGVvZ3Jh
cGggZ2x5cGhzLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA6IDE7IC8v
IFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiAtIE9ubHkgdXNlZCBieSB2ZXJ0aWNhbCB0ZXh0
LiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IG9yaWVudGF0aW9uIGZvciBub24taWRlb2dyYXBoIGds
eXBocy4KICAgICB1bnNpZ25lZCBtX3dpZHRoVmFyaWFudCA6IDI7IC8vIEZvbnRXaWR0aFZhcmlh
bnQKICAgICB1bnNpZ25lZCBtX3JlbmRlcmluZ01vZGUgOiAxOyAvLyBVc2VkIHRvIHN3aXRjaCBi
ZXR3ZWVuIENHIGFuZCBHREkgdGV4dCBvbiBXaW5kb3dzLgogICAgIHVuc2lnbmVkIG1fdGV4dFJl
bmRlcmluZyA6IDI7IC8vIFRleHRSZW5kZXJpbmdNb2RlCkBAIC0yOTQsMTIyICsyOTQsMTIyIEBA
IHN0ZDo6b3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBGb250RGVzY3JpcHRpb246OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29tcHV0ZWRTaXplKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250T3JpZW50YXRpb24+IG9yaWVu
dGF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250T3JpZW50YXRpb24+IG9yaWVudGF0
aW9uOwogICAgIGRlY29kZXIgPj4gb3JpZW50YXRpb247CiAgICAgaWYgKCFvcmllbnRhdGlvbikK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Tm9uQ0pL
R2x5cGhPcmllbnRhdGlvbj4gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbjsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbjsK
ICAgICBkZWNvZGVyID4+IG5vbkNKS0dseXBoT3JpZW50YXRpb247CiAgICAgaWYgKCFub25DSktH
bHlwaE9yaWVudGF0aW9uKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxGb250V2lkdGhWYXJpYW50PiB3aWR0aFZhcmlhbnQ7CisgICAgc3RkOjpvcHRp
b25hbDxQQUw6OkZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRoVmFyaWFudDsKICAgICBkZWNvZGVyID4+
IHdpZHRoVmFyaWFudDsKICAgICBpZiAoIXdpZHRoVmFyaWFudCkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFJlbmRlcmluZ01vZGU+IHJlbmRl
cmluZ01vZGU7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRSZW5kZXJpbmdNb2RlPiByZW5k
ZXJpbmdNb2RlOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5nTW9kZTsKICAgICBpZiAoIXJlbmRl
cmluZ01vZGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlv
bmFsPFRleHRSZW5kZXJpbmdNb2RlPiB0ZXh0UmVuZGVyaW5nTW9kZTsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBBTDo6VGV4dFJlbmRlcmluZ01vZGU+IHRleHRSZW5kZXJpbmdNb2RlOwogICAgIGRlY29k
ZXIgPj4gdGV4dFJlbmRlcmluZ01vZGU7CiAgICAgaWYgKCF0ZXh0UmVuZGVyaW5nTW9kZSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFN5bnRo
ZXNpcz4gZm9udFN5bnRoZXNpczsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFN5bnRoZXNp
cz4gZm9udFN5bnRoZXNpczsKICAgICBkZWNvZGVyID4+IGZvbnRTeW50aGVzaXM7CiAgICAgaWYg
KCFmb250U3ludGhlc2lzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gdmFyaWFudENvbW1vbkxpZ2F0dXJlczsK
KyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHZhcmlhbnRDb21t
b25MaWdhdHVyZXM7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50Q29tbW9uTGlnYXR1cmVzOwogICAg
IGlmICghdmFyaWFudENvbW1vbkxpZ2F0dXJlcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHZhcmlhbnREaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudExp
Z2F0dXJlcz4gdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXM7CiAgICAgZGVjb2RlciA+PiB2
YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKICAgICBpZiAoIXZhcmlhbnREaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXM7
CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzPiB2YXJpYW50SGlz
dG9yaWNhbExpZ2F0dXJlczsKICAgICBkZWNvZGVyID4+IHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1
cmVzOwogICAgIGlmICghdmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVz
PiB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXM7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZv
bnRWYXJpYW50TGlnYXR1cmVzPiB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXM7CiAgICAgZGVj
b2RlciA+PiB2YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXM7CiAgICAgaWYgKCF2YXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50UG9zaXRpb24+IHZhcmlhbnRQb3NpdGlvbjsKKyAgICBz
dGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbj4gdmFyaWFudFBvc2l0aW9uOwog
ICAgIGRlY29kZXIgPj4gdmFyaWFudFBvc2l0aW9uOwogICAgIGlmICghdmFyaWFudFBvc2l0aW9u
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250
VmFyaWFudENhcHM+IHZhcmlhbnRDYXBzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFy
aWFudENhcHM+IHZhcmlhbnRDYXBzOwogICAgIGRlY29kZXIgPj4gdmFyaWFudENhcHM7CiAgICAg
aWYgKCF2YXJpYW50Q2FwcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiB2YXJpYW50TnVtZXJpY0ZpZ3Vy
ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiB2YXJp
YW50TnVtZXJpY0ZpZ3VyZTsKICAgICBkZWNvZGVyID4+IHZhcmlhbnROdW1lcmljRmlndXJlOwog
ICAgIGlmICghdmFyaWFudE51bWVyaWNGaWd1cmUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IHZhcmlh
bnROdW1lcmljU3BhY2luZzsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnROdW1l
cmljU3BhY2luZz4gdmFyaWFudE51bWVyaWNTcGFjaW5nOwogICAgIGRlY29kZXIgPj4gdmFyaWFu
dE51bWVyaWNTcGFjaW5nOwogICAgIGlmICghdmFyaWFudE51bWVyaWNTcGFjaW5nKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbj4gdmFyaWFudE51bWVyaWNGcmFjdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFs
PFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IHZhcmlhbnROdW1lcmljRnJhY3Rpb247
CiAgICAgZGVjb2RlciA+PiB2YXJpYW50TnVtZXJpY0ZyYWN0aW9uOwogICAgIGlmICghdmFyaWFu
dE51bWVyaWNGcmFjdGlvbikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4gdmFyaWFudE51bWVyaWNPcmRp
bmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPiB2
YXJpYW50TnVtZXJpY09yZGluYWw7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50TnVtZXJpY09yZGlu
YWw7CiAgICAgaWYgKCF2YXJpYW50TnVtZXJpY09yZGluYWwpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRa
ZXJvPiB2YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gdmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzsK
ICAgICBkZWNvZGVyID4+IHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm87CiAgICAgaWYgKCF2YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEFsdGVybmF0ZXM+IHZhcmlhbnRBbHRlcm5hdGVz
OworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM+IHZhcmlhbnRB
bHRlcm5hdGVzOwogICAgIGRlY29kZXIgPj4gdmFyaWFudEFsdGVybmF0ZXM7CiAgICAgaWYgKCF2
YXJpYW50QWx0ZXJuYXRlcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2YXJpYW50RWFzdEFzaWFu
VmFyaWFudDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50PiB2YXJpYW50RWFzdEFzaWFuVmFyaWFudDsKICAgICBkZWNvZGVyID4+IHZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50OwogICAgIGlmICghdmFyaWFudEVhc3RBc2lhblZhcmlhbnQpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFz
dEFzaWFuV2lkdGg+IHZhcmlhbnRFYXN0QXNpYW5XaWR0aDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4gdmFyaWFudEVhc3RBc2lhbldpZHRoOwogICAg
IGRlY29kZXIgPj4gdmFyaWFudEVhc3RBc2lhbldpZHRoOwogICAgIGlmICghdmFyaWFudEVhc3RB
c2lhbldpZHRoKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRp
b25hbDxGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHZhcmlhbnRFYXN0QXNpYW5SdWJ5OworICAg
IHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHZhcmlhbnRFYXN0
QXNpYW5SdWJ5OwogICAgIGRlY29kZXIgPj4gdmFyaWFudEVhc3RBc2lhblJ1Ynk7CiAgICAgaWYg
KCF2YXJpYW50RWFzdEFzaWFuUnVieSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgIHN0ZDo6b3B0aW9uYWw8Rm9udE9wdGljYWxTaXppbmc+IG9wdGljYWxTaXppbmc7CisgICAg
c3RkOjpvcHRpb25hbDxQQUw6OkZvbnRPcHRpY2FsU2l6aW5nPiBvcHRpY2FsU2l6aW5nOwogICAg
IGRlY29kZXIgPj4gb3B0aWNhbFNpemluZzsKICAgICBpZiAoIW9wdGljYWxTaXppbmcpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRTdHlsZUF4
aXM+IGZvbnRTdHlsZUF4aXM7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRTdHlsZUF4aXM+
IGZvbnRTdHlsZUF4aXM7CiAgICAgZGVjb2RlciA+PiBmb250U3R5bGVBeGlzOwogICAgIGlmICgh
Zm9udFN0eWxlQXhpcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6
b3B0aW9uYWw8QWxsb3dVc2VySW5zdGFsbGVkRm9udHM+IHNob3VsZEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4g
c2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7CiAgICAgZGVjb2RlciA+PiBzaG91bGRBbGxv
d1VzZXJJbnN0YWxsZWRGb250czsKICAgICBpZiAoIXNob3VsZEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAppbmRleCA0OTRiMDQ3
YTQ1YTg0ZTQzOTRmNWFmMzJkMGU1OWM2ZTgzMDI2ZTNjLi5kOTVhMzkzOGRiODg2NmMzZmFhNGQ4
MDYwOGEyMzIzYjBhOWJhMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMzksNyArMzksNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxWYWx1ZVR5
cGU+IG1ha2VPcHRpb25hbAogICAgIHJldHVybiAqcG9pbnRlcjsKIH0KIAotRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lk
dGhWYXJpYW50IHdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01v
ZGUsIGNvbnN0IENyZWF0aW9uRGF0YSogY3JlYXRpb25EYXRhKQorRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljT2JsaXF1ZSwgUEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFBBTDo6Rm9u
dFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJl
bmRlcmluZ01vZGUsIGNvbnN0IENyZWF0aW9uRGF0YSogY3JlYXRpb25EYXRhKQogICAgIDogbV9z
aXplKHNpemUpCiAgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQogICAgICwgbV93aWR0
aFZhcmlhbnQod2lkdGhWYXJpYW50KQpAQCAtNTEsNyArNTEsNyBAQCBGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aQogfQogCiAjaWYgIVVTRShGUkVFVFlQRSkKLUZvbnRQbGF0Zm9ybURhdGEgRm9udFBs
YXRmb3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
c291cmNlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCitGb250UGxhdGZvcm1EYXRhIEZv
bnRQbGF0Zm9ybURhdGE6OmNsb25lV2l0aE9yaWVudGF0aW9uKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHNvdXJjZSwgUEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAgRm9u
dFBsYXRmb3JtRGF0YSBjb3B5KHNvdXJjZSk7CiAgICAgY29weS5tX29yaWVudGF0aW9uID0gb3Jp
ZW50YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKaW5kZXggMzBkZmFhMmQyZjg1YTlmN2NkYTIwMDgyOWRlMTk5YjE0ZTg0
YjIxOS4uYWRjYTJkYTY0ZWUwMTc4ODU5Mjc0YmY2M2ZjNzc1ZWFiY2QxZTliNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApA
QCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNs
dWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMDks
MTAgKzEwOSwxMCBAQCBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoKTsKIAotICAgIEZvbnRQ
bGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiA9IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwg
Rm9udFdpZHRoVmFyaWFudCA9IEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCwgVGV4dFJl
bmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcsIGNvbnN0
IENyZWF0aW9uRGF0YSogPSBudWxscHRyKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNp
emUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBQQUw6OkZvbnRP
cmllbnRhdGlvbiA9IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBQQUw6OkZvbnRX
aWR0aFZhcmlhbnQgPSBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCwgUEFMOjpU
ZXh0UmVuZGVyaW5nTW9kZSA9IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVy
aW5nLCBjb25zdCBDcmVhdGlvbkRhdGEqID0gbnVsbHB0cik7CiAKICNpZiBVU0UoQ09SRV9URVhU
KQotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9ybURhdGEoUmV0YWluUHRyPENURm9udFJl
Zj4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2UsIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhv
cml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lk
dGgsIFRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVy
aW5nLCBjb25zdCBDcmVhdGlvbkRhdGEqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQg
Rm9udFBsYXRmb3JtRGF0YShSZXRhaW5QdHI8Q1RGb250UmVmPiYmLCBmbG9hdCBzaXplLCBib29s
IHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIFBB
TDo6Rm9udE9yaWVudGF0aW9uID0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwsIFBB
TDo6Rm9udFdpZHRoVmFyaWFudCA9IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRo
LCBQQUw6OlRleHRSZW5kZXJpbmdNb2RlID0gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1Rl
eHRSZW5kZXJpbmcsIGNvbnN0IENyZWF0aW9uRGF0YSogPSBudWxscHRyKTsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQpAQCAtMTI5LDEwICsxMjksMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBVU0UoRlJFRVRZUEUpCi0gICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2Vf
dCosIFJlZlB0cjxGY1BhdHRlcm4+JiYsIGZsb2F0IHNpemUsIGJvb2wgZml4ZWRXaWR0aCwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbik7
CisgICAgRm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCosIFJlZlB0cjxGY1BhdHRl
cm4+JiYsIGZsb2F0IHNpemUsIGJvb2wgZml4ZWRXaWR0aCwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIFBBTDo6Rm9udE9yaWVudGF0aW9uKTsKICNlbmRpZgogCi0g
ICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgY2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYsIEZvbnRPcmllbnRhdGlvbik7CisgICAgc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGEgY2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIFBBTDo6
Rm9udE9yaWVudGF0aW9uKTsKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhT
eW50aGV0aWNPYmxpcXVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sKTsKICAgICBzdGF0
aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
LCBmbG9hdCk7CiAKQEAgLTE3NCwxMCArMTc0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN5bnRo
ZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KICAgICBib29sIHN5
bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KICAg
ICBib29sIGlzQ29sb3JCaXRtYXBGb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbG9yQml0bWFw
Rm9udDsgfQotICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZW50YXRpb247IH0KLSAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGhWYXJpYW50OyB9Ci0gICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4
dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHRSZW5kZXJpbmdNb2RlOyB9Ci0g
ICAgYm9vbCBpc0ZvclRleHRDb21iaW5lKCkgY29uc3QgeyByZXR1cm4gd2lkdGhWYXJpYW50KCkg
IT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOyB9IC8vIEtlZXAgaW4gc3luYyB3aXRo
IGNhbGxlcnMgb2YgRm9udERlc2NyaXB0aW9uOjpzZXRXaWR0aFZhcmlhbnQoKS4KKyAgICBQQUw6
OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRp
b247IH0KKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aFZhcmlhbnQ7IH0KKyAgICBQQUw6OlRleHRSZW5kZXJpbmdNb2RlIHRleHRS
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UmVuZGVyaW5nTW9kZTsgfQorICAg
IGJvb2wgaXNGb3JUZXh0Q29tYmluZSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoVmFyaWFudCgpICE9
IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOyB9IC8vIEtlZXAgaW4gc3luYyB3
aXRoIGNhbGxlcnMgb2YgRm9udERlc2NyaXB0aW9uOjpzZXRXaWR0aFZhcmlhbnQoKS4KIAogICAg
IFN0cmluZyBmYW1pbHlOYW1lKCkgY29uc3Q7CiAgICAgVmVjdG9yPEZvbnRWYXJpYXRpb25BeGlz
PiB2YXJpYXRpb25BeGVzKFNob3VsZExvY2FsaXplQXhpc05hbWVzKSBjb25zdDsKQEAgLTI4NCw5
ICsyODQsOSBAQCBwcml2YXRlOgogCiAgICAgZmxvYXQgbV9zaXplIHsgMCB9OwogCi0gICAgRm9u
dE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBGb250T3JpZW50YXRpb246Okhvcml6b250YWwg
fTsKLSAgICBGb250V2lkdGhWYXJpYW50IG1fd2lkdGhWYXJpYW50IHsgRm9udFdpZHRoVmFyaWFu
dDo6UmVndWxhcldpZHRoIH07Ci0gICAgVGV4dFJlbmRlcmluZ01vZGUgbV90ZXh0UmVuZGVyaW5n
TW9kZSB7IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyB9OworICAgIFBBTDo6
Rm9udE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCB9OworICAgIFBBTDo6Rm9udFdpZHRoVmFyaWFudCBtX3dpZHRoVmFyaWFudCB7IFBB
TDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoIH07CisgICAgUEFMOjpUZXh0UmVuZGVy
aW5nTW9kZSBtX3RleHRSZW5kZXJpbmdNb2RlIHsgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0
b1RleHRSZW5kZXJpbmcgfTsKIAogICAgIC8vIFRoaXMgaXMgY29uY2VwdHVhbGx5IGNvbnN0LCBi
dXQgd2UgY2FuJ3QgbWFrZSBpdCBhY3R1YWxseSBjb25zdCwKICAgICAvLyBiZWNhdXNlIEZvbnRQ
bGF0Zm9ybURhdGEgaXMgdXNlZCBhcyBhIGtleSBpbiBhIEhhc2hNYXAuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGhtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0aW9uQWxnb3JpdGht
LmgKaW5kZXggNGQ1YjgwYTExMWMzYTNiMzM0MmNjM2ZhYmM5MDI5MTM2OGE5NzI4Ny4uMTcxN2U4
MzViMDg2NWMxZjkwZmUwZDhlY2YyYWIxM2FiMmY5ODY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaApA
QCAtMjUsOCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlRleHRGbGFncy5o
IgogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4K
ICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggZTM3YjcxNTU3MTQwNjBiZmViN2FkYjAx
ODlmYWJlZGY3OWYxNjgxNC4uZjBiNzRjNTRhMmNlZTA2YjAzNTRkNjRiMmYxNTQxNDdjNTIwNWRi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZp
bHRlckltYWdlLmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTA5LDcgKzUwOSw3IEBAIEZs
b2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1
biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUEFMOjpG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKICAgICBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2lu
dCwgZm9udFNtb290aGluZ01vZGUpOwogfQpAQCAtNTIxLDI0ICs1MjEsMjQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBUZXh0UnVuJgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbikKIHsKLSAgICBCaWRpUmVzb2x2ZXI8VGV4dEJveEl0ZXJhdG9yLCBCaWRp
Q2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7Ci0gICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhC
aWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwor
ICAgIFBBTDo6QmlkaVJlc29sdmVyPFRleHRCb3hJdGVyYXRvciwgUEFMOjpCaWRpQ2hhcmFjdGVy
UnVuPiBiaWRpUmVzb2x2ZXI7CisgICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJpZGlT
dGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSk7CiAgICAg
YmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhUZXh0Qm94SXRl
cmF0b3IoJnJ1biwgMCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIHNob3VsZCBi
ZSByZXZlcnNlZC4gV2Ugc2hvdWxkIHBhc3MgQmlkaVJ1bkxpc3QKICAgICAvLyB0byBCaWRpUmVz
b2x2ZXIgaW4gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgotICAgIEJpZGlSdW5MaXN0PEJpZGlDaGFy
YWN0ZXJSdW4+JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5ydW5zKCk7CisgICAgUEFMOjpCaWRp
UnVuTGlzdDxQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5y
dW5zKCk7CiAgICAgYmlkaVJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShUZXh0Qm94SXRl
cmF0b3IoJnJ1biwgcnVuLmxlbmd0aCgpKSk7CiAKICAgICBpZiAoIWJpZGlSdW5zLnJ1bkNvdW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UG9pbnQgY3VyclBvaW50ID0gcG9pbnQ7
Ci0gICAgQmlkaUNoYXJhY3RlclJ1biogYmlkaVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7Cisg
ICAgUEFMOjpCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsK
ICAgICB3aGlsZSAoYmlkaVJ1bikgewogICAgICAgICBUZXh0UnVuIHN1YnJ1biA9IHJ1bi5zdWJS
dW4oYmlkaVJ1bi0+c3RhcnQoKSwgYmlkaVJ1bi0+c3RvcCgpIC0gYmlkaVJ1bi0+c3RhcnQoKSk7
CiAgICAgICAgIGJvb2wgaXNSVEwgPSBiaWRpUnVuLT5sZXZlbCgpICUgMjsKLSAgICAgICAgc3Vi
cnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rp
b246OkxUUik7CisgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb24oaXNSVEwgPyBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKTsKICAgICAgICAgc3VicnVu
LnNldERpcmVjdGlvbmFsT3ZlcnJpZGUoYmlkaVJ1bi0+ZGlyT3ZlcnJpZGUoZmFsc2UpKTsKIAog
ICAgICAgICBhdXRvIGFkdmFuY2UgPSBmb250LmRyYXdUZXh0KCp0aGlzLCBzdWJydW4sIGN1cnJQ
b2ludCwgMCwgc3RkOjpudWxsb3B0LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRl
eCAzZDhkM2E3MTI1M2UzNjMwZjhkOTVjZGRkNDA5NmJiNjQyMjg5YmY5Li5mNjc0NzMwMTQ3MWM0
YTAzOGZiNTgwMzk5ZDJkMzg2NDFlNTk0NzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNDc5LDExICs0NzksMTEgQEAg
cHVibGljOgogICAgIC8vIFRleHQKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNt
b290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgUEFMOjpGb250
U21vb3RoaW5nTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAotICAgIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNt
b290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCisgICAgdmlydHVhbCB2b2lkIGRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmdNb2RlKQogICAgIHsKICAgICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNz
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNz
Q29udGV4dC5oCmluZGV4IDljODczNmUxNTQ0MWZiNjI4ZTc3MDY1OGY1NzYyODQ4YjZhZmQzOTgu
LjEwN2ExZGFmMDRmNjFjOWZlZWQ4YjkzYWJhNGMxYmNkNGViZmM1NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRTaXplIGRyYXdUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7
IHJldHVybiB7IH07IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgUEFMOjpGb250
U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CiAKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0
ZDo6bnVsbG9wdCkgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBmaW5hbCB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4NjUx
YzVmZWE0NjZhNC4uMDU5MTVjZDA0YWNjZjM0MjljYTFhNzBlNTBmYzc0OTJmNjM0M2RjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5j
cHAKQEAgLTQ5NSw3ICs0OTUsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3RGcm9tUG9seWdvbihjb25zdCBGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24mCiB9CiAKIFBhdGgg
UGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyRGF0YSwK
LSAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorICAgIGZsb2F0IG91
dGxpbmVPZmZzZXQsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFBBTDo6V3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIEFTU0VSVChi
b3JkZXJEYXRhLmhhc0JvcmRlclJhZGl1cygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCmluZGV4IDUwMDA0MWEyZDY0MThjODA0NzVi
MTc1NjE0NzY4ZmNiZmE2NDNlMjQuLjRhMmM5ZWY5NDQ1MWE4NmI0YjFlODgwNTllODBmN2NhMGI3
MjliZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhV
dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgUGF0aFV0aWxpdGllc19oCiAKICNp
bmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwv
dGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFBhdGggcGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBW
ZWN0b3I8UGF0aD4gcGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgcmFkaXVzKTsKIAotICAgIHN0YXRpYyBQYXRoIHBhdGhXaXRo
U2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGNv
bnN0IEJvcmRlckRhdGEmLCBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGlyZWN0aW9uLCBXcml0
aW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHN0YXRpYyBQYXRoIHBhdGhX
aXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGNvbnN0IEJvcmRlckRhdGEmLCBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBQQUw6OlRleHREaXJlY3Rp
b24sIFBBTDo6V3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAppbmRleCAxZDQ3ZDY1
ZDY4MjQ2MjZlMTU5Mjg4MDBmNDY5N2MyNzZjYjI3NjM0Li5lODU1YWNhOGE5Mzc4ZDZlZDA1NTdl
MjYzNDNhMzA1ZWFlNWRkMzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UZXh0UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dFJ1bi5oCkBAIC0yNSw4ICsyNSw4IEBACiAjZGVmaW5lIFRleHRSdW5faAogCiAjaW5jbHVk
ZSAiVGFiU2l6ZS5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgotI2luY2x1ZGUgIldyaXRpbmdN
b2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CisjaW5jbHVkZSA8cGFsL3Rl
eHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IEdseXBoRGF0YTsKIGNs
YXNzIFRleHRSdW4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGV4cGxpY2l0IFRleHRSdW4oY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxv
YXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBE
ZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246
OkxUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2Nh
bkZvckNvZGVQYXRoID0gdHJ1ZSkKKyAgICBleHBsaWNpdCBUZXh0UnVuKGNvbnN0IFN0cmluZyYg
dGV4dCwgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIFBBTDo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24sIFBBTDo6
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiwgYm9vbCBk
aXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRo
ID0gdHJ1ZSkKICAgICAgICAgOiBtX3RleHQodGV4dCkKICAgICAgICAgLCBtX3RhYlNpemUoMCkK
ICAgICAgICAgLCBtX3hwb3MoeHBvcykKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoIW1fdGV4dC5pc051bGwoKSk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgVGV4dFJ1
bihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24g
PSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNp
b24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRp
cmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgg
PSB0cnVlKQorICAgIGV4cGxpY2l0IFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBmbG9h
dCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFs
T3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQog
ICAgICAgICA6IFRleHRSdW4oc3RyaW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIHhw
b3MsIGV4cGFuc2lvbiwgZXhwYW5zaW9uQmVoYXZpb3IsIGRpcmVjdGlvbiwgZGlyZWN0aW9uYWxP
dmVycmlkZSwgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKQogICAgIHsKICAgICB9CkBAIC0xMDEs
MTYgKzEwMSwxNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1f
eHBvczsgfQogICAgIHZvaWQgc2V0WFBvcyhmbG9hdCB4UG9zKSB7IG1feHBvcyA9IHhQb3M7IH0K
ICAgICBmbG9hdCBleHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbjsgfQotICAg
IEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9l
eHBhbnNpb25CZWhhdmlvcjsgfQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pOyB9Ci0gICAg
Ym9vbCBydGwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2Rp
cmVjdGlvbikgPT0gVGV4dERpcmVjdGlvbjo6UlRMOyB9Ci0gICAgYm9vbCBsdHIoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbikgPT0gVGV4dERp
cmVjdGlvbjo6TFRSOyB9CisgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhh
dmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uQmVoYXZpb3I7IH0KKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpU
ZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7IH0KKyAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMOyB9CisgICAgYm9vbCBsdHIoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxQQUw6OlRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUjsgfQogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsgfQogICAgIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNv
ZGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGg7IH0KICAg
ICBib29sIHNwYWNpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZVNwYWNpbmc7
IH0KIAogICAgIHZvaWQgZGlzYWJsZVNwYWNpbmcoKSB7IG1fZGlzYWJsZVNwYWNpbmcgPSB0cnVl
OyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9k
aXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsgfQorICAgIHZvaWQg
c2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsgfQogICAgIHZvaWQgc2V0RGlyZWN0
aW9uYWxPdmVycmlkZShib29sIG92ZXJyaWRlKSB7IG1fZGlyZWN0aW9uYWxPdmVycmlkZSA9IG92
ZXJyaWRlOyB9CiAgICAgdm9pZCBzZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoYm9vbCBzY2Fu
KSB7IG1fY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gc2NhbjsgfQogICAgIFN0cmluZ1ZpZXcg
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCBjOGI1NmVhZjJkNjU5N2M4
NWZlNzc4YTQ2MDFjOGVjYjQzZGI4Mzg0Li41NjdkYzM3ZTRmNWNiZWViZjg4YjdiZTQ3YTcwOWU3
NjRiMWRlMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldpZHRoSXRlcmF0b3IuaCIKIAotI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRp
ZXMuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmg+CiAjaW5jbHVk
ZSAiQ29tcG9zZWRDaGFyYWN0ZXJDbHVzdGVyVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCkBAIC00MSw3ICs0MSw3IEBAIFdpZHRoSXRl
cmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNlCiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2ZhbGxiYWNrRm9udHMo
ZmFsbGJhY2tGb250cykKICAgICAsIG1fZXhwYW5zaW9uKHJ1bi5leHBhbnNpb24oKSkKLSAgICAs
IG1faXNBZnRlckV4cGFuc2lvbigocnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhwYW5z
aW9uTWFzaykgPT0gRm9yYmlkTGVmdEV4cGFuc2lvbikKKyAgICAsIG1faXNBZnRlckV4cGFuc2lv
bigocnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQ
QUw6OkZvcmJpZExlZnRFeHBhbnNpb24pCiAgICAgLCBtX2FjY291bnRGb3JHbHlwaEJvdW5kcyhh
Y2NvdW50Rm9yR2x5cGhCb3VuZHMpCiAgICAgLCBtX2VuYWJsZUtlcm5pbmcoZm9udC5lbmFibGVL
ZXJuaW5nKCkpCiAgICAgLCBtX3JlcXVpcmVzU2hhcGluZyhmb250LnJlcXVpcmVzU2hhcGluZygp
KQpAQCAtNTIsNyArNTIsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZQogICAgIGlmICghbV9l
eHBhbnNpb24pCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwogICAgIGVs
c2UgewotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENh
c2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIo
KSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRleHREaXJlY3Rpb246OlJUTCwgcnVuLmV4cGFuc2lv
bkJlaGF2aW9yKCkpLmZpcnN0OworICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4
dCgpLCBtX3J1bi5sdHIoKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEwsIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKIAogICAgICAgICBp
ZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiAgICAgICAgICAgICBtX2V4cGFuc2lvblBl
ck9wcG9ydHVuaXR5ID0gMDsKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgV2lkdGhJdGVyYXRv
cjo6YXBwbHlJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEdseXBoQnVm
ZmVyQWR2CiAKICAgICBBU1NFUlQobGFzdEdseXBoQ291bnQgfHwgKCF3aWR0aChtX2xlZnRvdmVy
SW5pdGlhbEFkdmFuY2UpICYmICFoZWlnaHQobV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlKSkpOwog
Ci0gICAgaWYgKG1fcnVuLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBsYXN0
R2x5cGhDb3VudCkgeworICAgIGlmIChtX3J1bi5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTCAmJiBsYXN0R2x5cGhDb3VudCkgewogICAgICAgICBhdXRvJiB2aXN1YWxseUxh
c3RBZHZhbmNlID0gKmdseXBoQnVmZmVyLmFkdmFuY2VzKGxhc3RHbHlwaENvdW50KTsKICAgICAg
ICAgZXhwYW5kV2l0aEluaXRpYWxBZHZhbmNlKHZpc3VhbGx5TGFzdEFkdmFuY2UsIG1fbGVmdG92
ZXJJbml0aWFsQWR2YW5jZSk7CiAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSB3aWR0aChtX2xl
ZnRvdmVySW5pdGlhbEFkdmFuY2UpOwogICAgICAgICBtX2xlZnRvdmVySW5pdGlhbEFkdmFuY2Ug
PSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7CiAgICAgfQogCi0gICAgaWYgKG1fcnVuLmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgIG1fbGVmdG92ZXJJbml0aWFsQWR2
YW5jZSA9IGluaXRpYWxBZHZhbmNlOwogICAgIGVsc2UgewogICAgICAgICBpZiAobGFzdEdseXBo
Q291bnQpIHsKQEAgLTI4MSw3ICsyODEsNyBAQCBpbmxpbmUgdm9pZCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoQnVmZgogICAg
ICAgICB1bnNpZ25lZCBhZHZhbmNlTGVuZ3RoID0gY2x1c3Rlckxlbmd0aDsKICAgICAgICAgaWYg
KGN1cnJlbnRDaGFyYWN0ZXJJbmRleCArIGFkdmFuY2VMZW5ndGggPT0gbV9ydW4ubGVuZ3RoKCkp
CiAgICAgICAgICAgICBtX2xhc3RDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRDaGFyYWN0ZXJJbmRl
eDsKLSAgICAgICAgYm9vbCBjaGFyYWN0ZXJNdXN0RHJhd1NvbWV0aGluZyA9ICFpc0RlZmF1bHRJ
Z25vcmFibGVDb2RlUG9pbnQoY2hhcmFjdGVyKTsKKyAgICAgICAgYm9vbCBjaGFyYWN0ZXJNdXN0
RHJhd1NvbWV0aGluZyA9ICFQQUw6OmlzRGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludChjaGFyYWN0
ZXIpOwogI2lmIFVTRShGUkVFVFlQRSkKICAgICAgICAgLy8gRnJlZXR5cGUgYmFzZWQgcG9ydHMg
b25seSBvdmVycmlkZSB0aGUgY2hhcmFjdGVycyB3aXRoIERlZmF1bHRfSWdub3JhYmxlIHVuaWNv
ZGUgcHJvcGVydHkgd2hlbiB0aGUgZm9udAogICAgICAgICAvLyBkb2Vzbid0IHN1cHBvcnQgdGhl
IGNvZGUgcG9pbnQuIFdlIHNob3VsZCBpZ25vcmUgdGhlbSBhdCB0aGlzIHBvaW50IHRvIGVuc3Vy
ZSB0aGV5IGFyZSBub3QgZGlzcGxheWVkLgpAQCAtMzg1LDEwICszODUsMTAgQEAgYXV0byBXaWR0
aEl0ZXJhdG9yOjpjYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBHbHlwaEJ1ZmYKICAgICAgICAgICAgIGlmICghbV9ydW4ubHRyKCkpCiAgICAgICAgICAg
ICAgICAgc3RkOjpzd2FwKGlzTGVmdG1vc3RDaGFyYWN0ZXIsIGlzUmlnaHRtb3N0Q2hhcmFjdGVy
KTsKIAotICAgICAgICAgICAgYm9vbCBmb3JjZUxlZnRFeHBhbnNpb24gPSBpc0xlZnRtb3N0Q2hh
cmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2sp
ID09IEZvcmNlTGVmdEV4cGFuc2lvbjsKLSAgICAgICAgICAgIGJvb2wgZm9yY2VSaWdodEV4cGFu
c2lvbiA9IGlzUmlnaHRtb3N0Q2hhcmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigp
ICYgUmlnaHRFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVJpZ2h0RXhwYW5zaW9uOwotICAgICAgICAg
ICAgYm9vbCBmb3JiaWRMZWZ0RXhwYW5zaW9uID0gaXNMZWZ0bW9zdENoYXJhY3RlciAmJiAobV9y
dW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0
RXhwYW5zaW9uOwotICAgICAgICAgICAgYm9vbCBmb3JiaWRSaWdodEV4cGFuc2lvbiA9IGlzUmln
aHRtb3N0Q2hhcmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUmlnaHRFeHBh
bnNpb25NYXNrKSA9PSBGb3JiaWRSaWdodEV4cGFuc2lvbjsKKyAgICAgICAgICAgIGJvb2wgZm9y
Y2VMZWZ0RXhwYW5zaW9uID0gaXNMZWZ0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhwYW5zaW9u
QmVoYXZpb3IoKSAmIFBBTDo6TGVmdEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yY2VMZWZ0RXhw
YW5zaW9uOworICAgICAgICAgICAgYm9vbCBmb3JjZVJpZ2h0RXhwYW5zaW9uID0gaXNSaWdodG1v
c3RDaGFyYWN0ZXIgJiYgKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OlJpZ2h0RXhw
YW5zaW9uTWFzaykgPT0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOworICAgICAgICAgICAgYm9v
bCBmb3JiaWRMZWZ0RXhwYW5zaW9uID0gaXNMZWZ0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhw
YW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6TGVmdEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yYmlk
TGVmdEV4cGFuc2lvbjsKKyAgICAgICAgICAgIGJvb2wgZm9yYmlkUmlnaHRFeHBhbnNpb24gPSBp
c1JpZ2h0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6
UmlnaHRFeHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uOwogCiAgICAg
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udENh
c2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAgICAgICAg
ICAgICBib29sIGlzSWRlb2dyYXBoID0gZXhwYW5kQXJvdW5kSWRlb2dyYXBocyAmJiBGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCmluZGV4IDE3Mjc0YmZjMzQ5ZDQzOWRiMzI2NzdmMWFlZWE2ZjI1YTViYTc2M2EuLjlh
YzM2NWQ0NTdiMTM2YWU1MmNlOTFiMzFhYWQyM2RjOTdjYmJkNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKQEAgLTc5LDE4ICs3OSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kT3Bl
blR5cGVGZWF0dXJlKENGTXV0YWJsZUFycmF5UmVmIGZlYXR1cmVzLCBjb25zdCBGb250RgogdHlw
ZWRlZiBIYXNoTWFwPEZvbnRUYWcsIGludCwgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFy
YWN0ZXJUYWdIYXNoVHJhaXRzPiBGZWF0dXJlc01hcDsKIHR5cGVkZWYgSGFzaE1hcDxGb250VGFn
LCBmbG9hdCwgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoVHJhaXRz
PiBWYXJpYXRpb25zTWFwOwogCi1zdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0
aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiB2YXJpYW50U2V0dGlu
Z3MpCitzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50
cyhjb25zdCBQQUw6OkZvbnRWYXJpYW50U2V0dGluZ3MmIHZhcmlhbnRTZXR0aW5ncykKIHsKICAg
ICBGZWF0dXJlc01hcCByZXN1bHQ7CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5jb21t
b25MaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRh
ZygibGlnYSIpLCAxKTsKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiY2xpZyIp
LCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKICAgICAgICAgcmVzdWx0
LmFkZChmb250RmVhdHVyZVRhZygibGlnYSIpLCAwKTsKICAgICAgICAgcmVzdWx0LmFkZChmb250
RmVhdHVyZVRhZygiY2xpZyIpLCAwKTsKICAgICAgICAgYnJlYWs7CkBAIC05OSwxMiArOTksMTIg
QEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMo
Y29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRT
ZXR0aW5ncy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIHJlc3Vs
dC5hZGQoZm9udEZlYXR1cmVUYWcoImRsaWciKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm86CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImRsaWciKSwg
MCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xMTIsMTIgKzExMiwxMiBAQCBz
dGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25z
dCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRp
bmdzLmhpc3RvcmljYWxMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVz
OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChm
b250RmVhdHVyZVRhZygiaGxpZyIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
OjpObzoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiaGxpZyIpLCAwKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTEyNSwxMiArMTI1LDEyIEBAIHN0YXRpYyBG
ZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRW
YXJpYW50U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuY29u
dGV4dHVhbEFsdGVybmF0ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVh
dHVyZVRhZygiY2FsdCIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoK
ICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiY2FsdCIpLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTEzOCwxMiArMTM4LDEyIEBAIHN0YXRpYyBGZWF0dXJl
c01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50
U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MucG9zaXRpb24p
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQ
b3NpdGlvbjo6U3Vic2NyaXB0OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJz
dWJzIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246
OlN1cGVyc2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNj
cmlwdDoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygic3VwcyIpLCAxKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTE1MSwyNCArMTUxLDI0IEBAIHN0YXRpYyBG
ZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRW
YXJpYW50U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuY2Fw
cykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGw6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImMyc2MiKSwgMSk7CiAgICAg
ICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKICAgICAgICAgcmVzdWx0LmFkZChmb250
RmVhdHVyZVRhZygic21jcCIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQ
ZXRpdGU6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImMycGMiKSwgMSk7CiAg
ICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgogICAgICAgICByZXN1bHQuYWRk
KGZvbnRGZWF0dXJlVGFnKCJwY2FwIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpV
bmljYXNlOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJ1bmljIiksIDEpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgogICAgICAgICByZXN1bHQuYWRkKGZv
bnRGZWF0dXJlVGFnKCJ0aXRsIiksIDEpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpA
QCAtMTc2LDEyICsxNzYsMTIgQEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0
dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljRmlndXJlKSB7Ci0gICAgY2FzZSBGb250
VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljRmlndXJlOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZl
YXR1cmVUYWcoImxudW0iKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgogICAgICAgICByZXN1bHQuYWRkKGZv
bnRGZWF0dXJlVGFnKCJvbnVtIiksIDEpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpA
QCAtMTg5LDEyICsxODksMTIgQEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0
dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljU3BhY2luZykgewotICAgIGNhc2UgRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNTcGFjaW5nOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKICAgICAgICAg
cmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygicG51bSIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM6CiAgICAg
ICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInRudW0iKSwgMSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CkBAIC0yMDIsMTIgKzIwMiwxMiBAQCBzdGF0aWMgRmVhdHVyZXNNYXAg
Y29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRp
bmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNGcmFjdGlv
bikgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbDoKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlv
bnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZy
YWN0aW9uczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiZnJhYyIpLCAxKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3Rh
Y2tlZEZyYWN0aW9uczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246
OlN0YWNrZWRGcmFjdGlvbnM6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImFm
cmMiKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yMTUsOSArMjE1LDkg
QEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMo
Y29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRT
ZXR0aW5ncy5udW1lcmljT3JkaW5hbCkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3Jk
aW5hbDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpO
b3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bDo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6CiAg
ICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoIm9yZG4iKSwgMSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yMjUsOSArMjI1LDkgQEAgc3RhdGljIEZlYXR1cmVzTWFw
IGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0
aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5udW1lcmljU2xhc2hl
ZFplcm8pIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw6CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Olll
czoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86OlllczoKICAg
ICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiemVybyIpLCAxKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKQEAgLTIzNSw5ICsyMzUsOSBAQCBzdGF0aWMgRmVhdHVyZXNNYXAg
Y29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRp
bmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmFsdGVybmF0ZXMpIHsK
LSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6CiAgICAgICAgIHJlc3VsdC5hZGQo
Zm9udEZlYXR1cmVUYWcoImhpc3QiKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CkBAIC0yNDUsMjQgKzI0NSwyNCBAQCBzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVT
ZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAog
ICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblZhcmlhbnQpIHsKLSAgICBjYXNl
IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRG
ZWF0dXJlVGFnKCJqcDc4IiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWco
ImpwODMiKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50OjpKaXM5MDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM5MDoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygianA5MCIpLCAx
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OkppczA0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0
OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJqcDA0IiksIDEpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmll
ZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVk
OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJzbXBsIiksIDEpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9u
YWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9u
YWw6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInRyYWQiKSwgMSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yNzAsMTIgKzI3MCwxMiBAQCBzdGF0aWMgRmVh
dHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFy
aWFudFNldHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RB
c2lhbldpZHRoKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOgogICAgICAgICByZXN1
bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJmd2lkIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOgogICAgICAgICByZXN1
bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJwd2lkIiksIDEpOwogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgpAQCAtMjgzLDkgKzI4Myw5IEBAIHN0YXRpYyBGZWF0dXJlc01hcCBjb21wdXRlRmVh
dHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmCiAgICAg
fQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuUnVieSkgewotICAgIGNh
c2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVh
c3RBc2lhblJ1Ynk6OlllczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygicnVi
eSIpLCAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTUzOCw4ICs1MzgsOCBA
QCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmln
aW5hbEZvbnQsIGNvbnN0IEZvbnREZXNjcgogICAgIGF1dG8gZm9udFNlbGVjdGlvblJlcXVlc3Qg
PSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICBhdXRvIGZvbnRT
dHlsZUF4aXMgPSBmb250RGVzY3JpcHRpb24uZm9udFN0eWxlQXhpcygpOwogCi0gICAgYm9vbCBm
b3JjZU9wdGljYWxTaXppbmdPbiA9IGZvbnRPcHRpY2FsU2l6aW5nID09IEZvbnRPcHRpY2FsU2l6
aW5nOjpFbmFibGVkICYmIGZvbnRUeXBlLnZhcmlhdGlvblR5cGUgPT0gRm9udFR5cGU6OlZhcmlh
dGlvblR5cGU6OlRydWVUeXBlR1ggJiYgZGVmYXVsdFZhbHVlcy5jb250YWlucyh7eydvJywgJ3An
LCAncycsICd6J319KTsKLSAgICBib29sIGZvcmNlVmFyaWF0aW9ucyA9IGRlZmF1bHRWYWx1ZXMu
Y29udGFpbnMoe3sndycsICdnJywgJ2gnLCAndCd9fSkgfHwgZGVmYXVsdFZhbHVlcy5jb250YWlu
cyh7eyd3JywgJ2QnLCAndCcsICdoJ319KSB8fCAoZm9udFN0eWxlQXhpcyA9PSBGb250U3R5bGVB
eGlzOjppdGFsICYmIGRlZmF1bHRWYWx1ZXMuY29udGFpbnMoe3snaScsICd0JywgJ2EnLCAnbCd9
fSkpIHx8IChmb250U3R5bGVBeGlzID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgZGVmYXVsdFZh
bHVlcy5jb250YWlucyh7eydzJywgJ2wnLCAnbicsICd0J319KSk7CisgICAgYm9vbCBmb3JjZU9w
dGljYWxTaXppbmdPbiA9IGZvbnRPcHRpY2FsU2l6aW5nID09IFBBTDo6Rm9udE9wdGljYWxTaXpp
bmc6OkVuYWJsZWQgJiYgZm9udFR5cGUudmFyaWF0aW9uVHlwZSA9PSBGb250VHlwZTo6VmFyaWF0
aW9uVHlwZTo6VHJ1ZVR5cGVHWCAmJiBkZWZhdWx0VmFsdWVzLmNvbnRhaW5zKHsgeyAnbycsICdw
JywgJ3MnLCAneicgfSB9KTsKKyAgICBib29sIGZvcmNlVmFyaWF0aW9ucyA9IGRlZmF1bHRWYWx1
ZXMuY29udGFpbnMoeyB7ICd3JywgJ2cnLCAnaCcsICd0JyB9IH0pIHx8IGRlZmF1bHRWYWx1ZXMu
Y29udGFpbnMoeyB7ICd3JywgJ2QnLCAndCcsICdoJyB9IH0pIHx8IChmb250U3R5bGVBeGlzID09
IFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbCAmJiBkZWZhdWx0VmFsdWVzLmNvbnRhaW5zKHsgeyAn
aScsICd0JywgJ2EnLCAnbCcgfSB9KSkgfHwgKGZvbnRTdHlsZUF4aXMgPT0gUEFMOjpGb250U3R5
bGVBeGlzOjpzbG50ICYmIGRlZmF1bHRWYWx1ZXMuY29udGFpbnMoeyB7ICdzJywgJ2wnLCAnbics
ICd0JyB9IH0pKTsKICAgICBjb25zdCBhdXRvJiB2YXJpYXRpb25zID0gZm9udERlc2NyaXB0aW9u
LnZhcmlhdGlvblNldHRpbmdzKCk7CiAKICAgICBjb25zdCBhdXRvJiBmZWF0dXJlcyA9IGZvbnRE
ZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKTsKQEAgLTU1MSw5ICs1NTEsOSBAQCBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZvbnQs
IGNvbnN0IEZvbnREZXNjcgogICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgZm9udFR5cGUu
dHJhY2tpbmdUeXBlID09IEZvbnRUeXBlOjpUcmFja2luZ1R5cGU6Ok1hbnVhbCBoZXJlLCBidXQg
aW4gb3JkZXIgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBz
eXN0ZW0sIHdlIGRvbid0LgogICAgIGJvb2wgbm9Gb250RmVhdHVyZVNldHRpbmdzID0gZmVhdHVy
ZXMuaXNFbXB0eSgpOwogICAgIGJvb2wgbm9Gb250VmFyaWF0aW9uU2V0dGluZ3MgPSAhZm9yY2VW
YXJpYXRpb25zICYmIHZhcmlhdGlvbnMuaXNFbXB0eSgpOwotICAgIGJvb2wgdGV4dFJlbmRlcmlu
Z01vZGVJc0F1dG8gPSB0ZXh0UmVuZGVyaW5nTW9kZSA9PSBUZXh0UmVuZGVyaW5nTW9kZTo6QXV0
b1RleHRSZW5kZXJpbmc7CisgICAgYm9vbCB0ZXh0UmVuZGVyaW5nTW9kZUlzQXV0byA9IHRleHRS
ZW5kZXJpbmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5n
OwogICAgIGJvb2wgdmFyaWFudFNldHRpbmdzSXNOb3JtYWwgPSB2YXJpYW50U2V0dGluZ3MuaXNB
bGxOb3JtYWwoKTsKLSAgICBib29sIGRvbnROZWVkVG9BcHBseU9wdGljYWxTaXppbmcgPSBmb250
T3B0aWNhbFNpemluZyA9PSBGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCAmJiAhZm9yY2VPcHRp
Y2FsU2l6aW5nT247CisgICAgYm9vbCBkb250TmVlZFRvQXBwbHlPcHRpY2FsU2l6aW5nID0gZm9u
dE9wdGljYWxTaXppbmcgPT0gUEFMOjpGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCAmJiAhZm9y
Y2VPcHRpY2FsU2l6aW5nT247CiAgICAgYm9vbCBmb250RmFjZURvZXNudFNwZWNpZnlGZWF0dXJl
cyA9ICFmb250Q3JlYXRpb25Db250ZXh0LmZvbnRGYWNlRmVhdHVyZXMoKSB8fCBmb250Q3JlYXRp
b25Db250ZXh0LmZvbnRGYWNlRmVhdHVyZXMoKS0+aXNFbXB0eSgpOwogICAgIGlmIChub0ZvbnRG
ZWF0dXJlU2V0dGluZ3MgJiYgbm9Gb250VmFyaWF0aW9uU2V0dGluZ3MgJiYgdGV4dFJlbmRlcmlu
Z01vZGVJc0F1dG8gJiYgdmFyaWFudFNldHRpbmdzSXNOb3JtYWwgJiYgZG9udE5lZWRUb0FwcGx5
T3B0aWNhbFNpemluZyAmJiBmb250RmFjZURvZXNudFNwZWNpZnlGZWF0dXJlcyAmJiAhc2hvdWxk
RGlzYWJsZUxpZ2F0dXJlc0ZvclNwYWNpbmcgJiYgZG9udE5lZWRUb0FwcGx5Rm9udFBhbGV0dGVz
KSB7CiAjaWYgSEFWRShDVEZPTlRDUkVBVEVGT1JDSEFSQUNURVJTV0lUSExBTkdVQUdFQU5ET1BU
SU9OKQpAQCAtNjEzLDcgKzYxMyw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0
Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgICAg
IH0KICAgICAgICAgYXBwbHlWYXJpYXRpb24oe3sndycsICdnJywgJ2gnLCAndCd9fSwgd2VpZ2h0
KTsKICAgICAgICAgYXBwbHlWYXJpYXRpb24oe3sndycsICdkJywgJ3QnLCAnaCd9fSwgd2lkdGgp
OwotICAgICAgICBpZiAoZm9udFN0eWxlQXhpcyA9PSBGb250U3R5bGVBeGlzOjppdGFsKQorICAg
ICAgICBpZiAoZm9udFN0eWxlQXhpcyA9PSBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0YWwpCiAgICAg
ICAgICAgICBhcHBseVZhcmlhdGlvbih7eydpJywgJ3QnLCAnYScsICdsJ319LCAxKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYXBwbHlWYXJpYXRpb24oe3sncycsICdsJywgJ24nLCAndCd9
fSwgc2xvcGUpOwpAQCAtNjM2LDcgKzYzNiw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBh
cmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAg
ICAgICAgIGFwcGx5RmVhdHVyZShuZXdGZWF0dXJlLmtleSwgbmV3RmVhdHVyZS52YWx1ZSk7CiAK
ICAgICAvLyBTdGVwIDExOiBPdGhlciBwcm9wZXJ0aWVzCi0gICAgaWYgKHRleHRSZW5kZXJpbmdN
b2RlID09IFRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZVNwZWVkKSB7CisgICAgaWYgKHRleHRS
ZW5kZXJpbmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQpIHsK
ICAgICAgICAgYXBwbHlGZWF0dXJlKGZvbnRGZWF0dXJlVGFnKCJsaWdhIiksIDApOwogICAgICAg
ICBhcHBseUZlYXR1cmUoZm9udEZlYXR1cmVUYWcoImNsaWciKSwgMCk7CiAgICAgICAgIGFwcGx5
RmVhdHVyZShmb250RmVhdHVyZVRhZygiZGxpZyIpLCAwKTsKQEAgLTY5MSw3ICs2OTEsNyBAQCBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5h
bEZvbnQsIGNvbnN0IEZvbnREZXNjcgogCiAgICAgLy8gU3RlcCA5OiBmb250LW9wdGljYWwtc2l6
aW5nCiAgICAgLy8gRklYTUU6IEFwcGx5IHRoaXMgYmVmb3JlIGZvbnQtdmFyaWF0aW9uLXNldHRp
bmdzCi0gICAgaWYgKGZvcmNlT3B0aWNhbFNpemluZ09uIHx8IHRleHRSZW5kZXJpbmdNb2RlID09
IFRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHkpIHsKKyAgICBpZiAoZm9yY2VP
cHRpY2FsU2l6aW5nT24gfHwgdGV4dFJlbmRlcmluZ01vZGUgPT0gUEFMOjpUZXh0UmVuZGVyaW5n
TW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5KSB7CiAjaWYgSEFWRShDT1JFVEVYVF9BVVRPX09QVElD
QUxfU0laSU5HKQogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdldCgp
LCBrQ1RGb250T3B0aWNhbFNpemVBdHRyaWJ1dGUsIENGU1RSKCJhdXRvIikpOwogI2Vsc2UKQEAg
LTY5OSw3ICs2OTksNyBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250
KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIGNvbnN0IEZvbnREZXNjcgogICAgICAgICBhdXRvIHNp
emVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckNHRmxvYXRUeXBlLCAmc2l6ZSkpOwogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1
ZShhdHRyaWJ1dGVzLmdldCgpLCBrQ1RGb250T3B0aWNhbFNpemVBdHRyaWJ1dGUsIHNpemVOdW1i
ZXIuZ2V0KCkpOwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChmb250T3B0aWNhbFNpemluZyA9PSBG
b250T3B0aWNhbFNpemluZzo6RGlzYWJsZWQpIHsKKyAgICB9IGVsc2UgaWYgKGZvbnRPcHRpY2Fs
U2l6aW5nID09IFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkRpc2FibGVkKSB7CiAjaWYgSEFWRShD
T1JFVEVYVF9BVVRPX09QVElDQUxfU0laSU5HKQogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1
ZShhdHRyaWJ1dGVzLmdldCgpLCBrQ1RGb250T3B0aWNhbFNpemVBdHRyaWJ1dGUsIENGU1RSKCJu
b25lIikpOwogI2VuZGlmCkBAIC04MzcsOCArODM3LDggQEAgU3ludGhlc2lzUGFpciBjb21wdXRl
TmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiBmb250LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGYKICAgICAgICAgICAgIGFjdHVhbFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZv
bnQpOwogICAgIH0KIAotICAgIGJvb2wgbmVlZHNTeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlw
dGlvbi5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAoZGVzaXJlZFRy
YWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0
Qm9sZCk7Ci0gICAgYm9vbCBuZWVkc1N5bnRoZXRpY09ibGlxdWUgPSAoZm9udERlc2NyaXB0aW9u
LmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkgJiYgKGRlc2lyZWRUcmFpdHMg
JiBrQ1RGb250VHJhaXRJdGFsaWMpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0SXRh
bGljKTsKKyAgICBib29sIG5lZWRzU3ludGhldGljQm9sZCA9IChmb250RGVzY3JpcHRpb24uZm9u
dFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAoZGVzaXJlZFRyYWl0
cyAmIGtDVEZvbnRUcmFpdEJvbGQpICYmICEoYWN0dWFsVHJhaXRzICYga0NURm9udFRyYWl0Qm9s
ZCk7CisgICAgYm9vbCBuZWVkc1N5bnRoZXRpY09ibGlxdWUgPSAoZm9udERlc2NyaXB0aW9uLmZv
bnRTeW50aGVzaXMoKSAmIFBBTDo6Rm9udFN5bnRoZXNpc1N0eWxlKSAmJiAoZGVzaXJlZFRyYWl0
cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOwogCiAgICAgcmV0dXJuIFN5bnRoZXNpc1BhaXIobmVlZHNTeW50aGV0aWNCb2xkLCBu
ZWVkc1N5bnRoZXRpY09ibGlxdWUpOwogfQpAQCAtODYyLDEzICs4NjIsMTMgQEAgY2xhc3MgRm9u
dERhdGFiYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgRm9udERhdGFiYXNlJiBzaW5nbGV0b25B
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpCiAgICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Rm9udERhdGFiYXNlPiBkYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFzZT4gZGF0YWJh
c2UoUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzKTsKICAgICAgICAgcmV0dXJuIGRh
dGFiYXNlOwogICAgIH0KIAogICAgIHN0YXRpYyBGb250RGF0YWJhc2UmIHNpbmdsZXRvbkRpc2Fs
bG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxGb250RGF0YWJhc2U+IGRhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpO
byk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGF0YWJhc2U+IGRhdGFiYXNl
KFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKICAgICAgICAgcmV0dXJuIGRhdGFi
YXNlOwogICAgIH0KIApAQCAtODc4LDE0ICs4NzgsMTQgQEAgcHVibGljOgogICAgIHN0cnVjdCBJ
bnN0YWxsZWRGb250IHsKICAgICAgICAgSW5zdGFsbGVkRm9udCgpID0gZGVmYXVsdDsKIAotICAg
ICAgICBJbnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIEFs
bG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorICAgICAgICBJ
bnN0YWxsZWRGb250KENURm9udERlc2NyaXB0b3JSZWYgZm9udERlc2NyaXB0b3IsIFBBTDo6QWxs
b3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiAgICAgICAgICAg
ICA6IGZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yKQogICAgICAgICAgICAgLCBjYXBhYmls
aXRpZXMoY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IpKQogICAg
ICAgICB7CiAjaWYgSEFWRShDVEZPTlRDUkVBVEVGT1JDSEFSQUNURVJTV0lUSExBTkdVQUdFQU5E
T1BUSU9OKQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKICNlbHNlCi0gICAgICAgICAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgIT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICAgICAgaWYgKGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzICE9IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
CiAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5n
ZXQoKSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtOTkxLDcgKzk5MSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFz
ZT47CiAKLSAgICBGb250RGF0YWJhc2UoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpCisgICAgRm9udERhdGFiYXNlKFBBTDo6QWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiAgICAgICAgIDogbV9hbGxvd1VzZXJJbnN0
YWxsZWRGb250cyhhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKICAgICB7CiAgICAgfQpAQCAtOTk5
LDcgKzk5OSw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlw
dG9yc0xvY2s7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxJbnN0YWxsZWRG
b250RmFtaWx5Pj4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMgV1RGX0dVQVJERURfQllf
TE9DSyhtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yc0xvY2spOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBJbnN0YWxsZWRGb250PiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnM7Ci0g
ICAgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250czsKKyAg
ICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHM7
CiB9OwogCiAvLyBCZWNhdXNlIHRoaXMgc3RydWN0IGhvbGRzIGludGVybWVkaWF0ZSB2YWx1ZXMg
d2hpY2ggbWF5IGJlIGluIHRoZSBjb21wcmVzc2VkIC0xIC0gMSBHWCByYW5nZSwgd2UgZG9uJ3Qg
d2FudCB0byB1c2UgdGhlIHJlbGF0aXZlbHkgbGFyZ2UKQEAgLTExNjgsOSArMTE2OCw5IEBAIHN0
YXRpYyBjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChj
b25zdCBGb250RGF0YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRG
b250c1tpbmRleF07CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250
Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6Omdl
dEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlOYW1lLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogewotICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRv
bkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRp
c2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisgICAgYXV0byYgZm9udERhdGFiYXNlID0g
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
IDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
OwogICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1p
bHkoZmFtaWx5TmFtZS5zdHJpbmcoKSk7CiAgICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKQEAgLTExOTgsNyArMTE5OCw3IEBAIHN0YXRpYyBib29sIGlzRG90UHJl
Zml4ZWRGb3JiaWRkZW5Gb250KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICAgICAgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250
cm91bmRlZCIpOwogfQogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRo
RmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVx
dWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwg
ZmxvYXQgc2l6ZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7
CiAgICAgaWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6
ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKQEAgLTEyMDksNyArMTIwOSw3IEBA
IHN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBGb250U2VsCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKICAg
ICB9CiAKLSAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25B
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNh
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOworICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFs
bG93VXNlckluc3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Olll
cyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6
IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsK
ICAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9y
RmFtaWx5KGZhbWlseS5zdHJpbmcoKSk7CiAgICAgaWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBh
Y2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktp
dCwgd2UgY2xhaW0gdG8gYWxzbwpAQCAtMTI1OSw3ICsxMjU5LDcgQEAgc3RhdGljIHZvaWQgaW52
YWxpZGF0ZUZvbnRDYWNoZSgpCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorc3RhdGljIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2l6ZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKIHsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6ZWZmZWN0aXZlRmFtaWx5QXQoKSBpbiBGb250RGVzY3JpcHRpb25Db2NvYS5jcHAKICAgICBz
dGQ6Om9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMzg3LDcgKzEz
ODcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIGlmICghZm9udCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKCkgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgIGlm
IChmb250RGVzY3JpcHRpb24uc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA9PSBQQUw6
OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykKICAgICAgICAgbV9zZWVuRmFtaWxpZXNGb3JQ
cmV3YXJtaW5nLmFkZChGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGZh
bWlseSkpOwogCiAgICAgYXV0byBbc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZV0gPSBj
b21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9s
ZE9ibGlxdWVQYWlyKCk7CkBAIC0xNDMxLDIxICsxNDMxLDIxIEBAIHN0YXRpYyBib29sIGlzVXNl
ckluc3RhbGxlZEZvbnQoQ1RGb250UmVmIGZvbnQpCiAjZW5kaWYKIAogI2lmIEhBVkUoQ1RGT05U
Q1JFQVRFRk9SQ0hBUkFDVEVSU1dJVEhMQU5HVUFHRUFORE9QVElPTikKLXN0YXRpYyBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYgZm9udCwgQ0ZT
dHJpbmdSZWYgbG9jYWxlU3RyaW5nLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
K3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyhDVEZv
bnRSZWYgZm9udCwgQ0ZTdHJpbmdSZWYgbG9jYWxlU3RyaW5nLCBQQUw6OkFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIENGSW5kZXggY292ZXJlZExlbmd0aCA9IDA7Ci0g
ICAgYXV0byBmYWxsYmFja09wdGlvbiA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93
VXNlckluc3RhbGxlZEZvbnRzOjpObyA/IGtDVEZvbnRGYWxsYmFja09wdGlvblN5c3RlbSA6IGtD
VEZvbnRGYWxsYmFja09wdGlvbkRlZmF1bHQ7CisgICAgYXV0byBmYWxsYmFja09wdGlvbiA9IGFs
bG93VXNlckluc3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
ID8ga0NURm9udEZhbGxiYWNrT3B0aW9uU3lzdGVtIDoga0NURm9udEZhbGxiYWNrT3B0aW9uRGVm
YXVsdDsKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzV2l0aExh
bmd1YWdlQW5kT3B0aW9uKGZvbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGNo
YXJhY3RlcnMpLCBsZW5ndGgsIGxvY2FsZVN0cmluZywgZmFsbGJhY2tPcHRpb24sICZjb3ZlcmVk
TGVuZ3RoKSk7CiB9CiAjZWxzZQotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZv
bnRGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBmb250LCBDRlN0cmluZ1JlZiBsb2NhbGVTdHJpbmcs
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JDaGFy
YWN0ZXJzKENURm9udFJlZiBmb250LCBDRlN0cmluZ1JlZiBsb2NhbGVTdHJpbmcsIFBBTDo6QWxs
b3dVc2VySW5zdGFsbGVkRm9udHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0gMDsKICAgICByZXR1cm4gYWRv
cHRDRihDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdlKGZvbnQsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgsIGxvY2FsZVN0cmlu
ZywgJmNvdmVyZWRMZW5ndGgpKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgUmV0YWluUHRyPENURm9u
dFJlZj4gbG9va3VwRmFsbGJhY2tGb250KENURm9udFJlZiBmb250LCBGb250U2VsZWN0aW9uVmFs
dWUgZm9udFdlaWdodCwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBsb29rdXBGYWxs
YmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRTZWxlY3Rpb25WYWx1ZSBmb250V2VpZ2h0LCBj
b25zdCBBdG9tU3RyaW5nJiBsb2NhbGUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+IDApOwogCkBAIC0xNDU5LDcgKzE0NTksNyBA
QCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gbG9va3VwRmFsbGJhY2tGb250KENURm9udFJl
ZiBmb250LCBGb250U2VsZWN0aW9uVmFsdQogI2VuZGlmCiAKICAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZUZvbnRGb3JDaGFyYWN0ZXJzKGZvbnQsIGxvY2FsZVN0cmluZy5nZXQoKSwgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMsIGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgQVNTRVJUKCFpc1VzZXJJ
bnN0YWxsZWRGb250KHJlc3VsdC5nZXQoKSkgfHwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Olllcyk7CisgICAgQVNTRVJUKCFpc1VzZXJJbnN0YWxs
ZWRGb250KHJlc3VsdC5nZXQoKSkgfHwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpB
bGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgLy8gQ2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIHdvbid0IGluY2x1ZGUgbXVsdGlwbGUg
Y29kZSBwb2ludHMuICJMZW5ndGgiIGlzIHRvIGtub3cgaG93IG1hbnkgY29kZSB1bml0cwpAQCAt
MTU1OCw5ICsxNTU4LDkgQEAgc3RkOjpvcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogfQogCi12b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQordm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9u
dHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBQQUw6OkFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewotICAgIGlmIChhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pIHsKKyAgICBpZiAo
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
Tm8pIHsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0cmlidXRlcywga0NURm9udFVz
ZXJJbnN0YWxsZWRBdHRyaWJ1dGUsIGtDRkJvb2xlYW5GYWxzZSk7CiAgICAgICAgIENURm9udEZh
bGxiYWNrT3B0aW9uIGZhbGxiYWNrT3B0aW9uID0ga0NURm9udEZhbGxiYWNrT3B0aW9uU3lzdGVt
OwogICAgICAgICBhdXRvIGZhbGxiYWNrT3B0aW9uTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmZmFsbGJhY2tP
cHRpb24pKTsKQEAgLTE1NjgsNyArMTU2OCw3IEBAIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3Rh
bGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VyCiAg
ICAgfQogfQogCi1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9u
dHMoQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvciwgQ0dGbG9hdCBzaXplLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1JldGFpblB0cjxD
VEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVm
IGZvbnREZXNjcmlwdG9yLCBDR0Zsb2F0IHNpemUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKICAgICBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoYXR0cmlidXRlcy5n
ZXQoKSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAgUmV0
YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udERlc2Ny
aXB0b3JSZWYgZm9udERlc2NyaXAKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRo
Rm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IsIHNpemUsIG51bGxwdHIpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIGlzRm9udE1hdGNoaW5nVXNlckluc3RhbGxlZEZvbnRGYWxsYmFjayhD
VEZvbnRSZWYgZm9udCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGb250TWF0Y2hpbmdVc2VySW5zdGFsbGVkRm9u
dEZhbGxiYWNrKENURm9udFJlZiBmb250LCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGJvb2wgd2lsbEZhbGxiYWNrVG9TeXN0ZW1P
bmx5ID0gZmFsc2U7CiAgICAgaWYgKGF1dG8gZm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlUmVm
ID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShm
b250LCBrQ1RGb250RmFsbGJhY2tPcHRpb25BdHRyaWJ1dGUpKSkpIHsKQEAgLTE1ODgsMTEgKzE1
ODgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzRm9udE1hdGNoaW5nVXNlckluc3RhbGxlZEZv
bnRGYWxsYmFjayhDVEZvbnRSZWYgZm9udCwgQWxsb3cKICAgICAgICAgd2lsbEZhbGxiYWNrVG9T
eXN0ZW1Pbmx5ID0gZm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlID09IGtDVEZvbnRGYWxsYmFj
a09wdGlvblN5c3RlbTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZEZhbGxiYWNrVG9TeXN0ZW1P
bmx5ID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
Ok5vOworICAgIGJvb2wgc2hvdWxkRmFsbGJhY2tUb1N5c3RlbU9ubHkgPSBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cyA9PSBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObzsKICAgICByZXR1
cm4gd2lsbEZhbGxiYWNrVG9TeXN0ZW1Pbmx5ID09IHNob3VsZEZhbGxiYWNrVG9TeXN0ZW1Pbmx5
OwogfQogCi1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMo
Q1RGb250UmVmIGZvbnQsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKQorUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRz
KENURm9udFJlZiBmb250LCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQogewogICAgIGlmIChpc0ZvbnRNYXRjaGluZ1VzZXJJbnN0YWxsZWRGb250
RmFsbGJhY2soZm9udCwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpKQogICAgICAgICByZXR1cm4g
Zm9udDsKQEAgLTE2MDYsMTggKzE2MDYsMTggQEAgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRl
Rm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udFJlZiBmb250LCBBbGxvd1VzZXJJbnN0YWwKICAg
ICByZXR1cm4gZm9udDsKIH0KIAotdm9pZCBhZGRBdHRyaWJ1dGVzRm9yV2ViRm9udHMoQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKK3ZvaWQgYWRkQXR0cmlidXRlc0ZvcldlYkZvbnRzKENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKLSAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKSB7CisgICAgaWYgKGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKSB7CiAg
ICAgICAgIENURm9udEZhbGxiYWNrT3B0aW9uIGZhbGxiYWNrT3B0aW9uID0ga0NURm9udEZhbGxi
YWNrT3B0aW9uU3lzdGVtOwogICAgICAgICBhdXRvIGZhbGxiYWNrT3B0aW9uTnVtYmVyID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50NjRU
eXBlLCAmZmFsbGJhY2tPcHRpb24pKTsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoYXR0
cmlidXRlcywga0NURm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlLCBmYWxsYmFja09wdGlvbk51
bWJlci5nZXQoKSk7CiAgICAgfQogfQogCi1SZXRhaW5QdHI8Q0ZTZXRSZWY+IGluc3RhbGxlZEZv
bnRNYW5kYXRvcnlBdHRyaWJ1dGVzKEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQorUmV0YWluUHRyPENGU2V0UmVmPiBpbnN0YWxsZWRGb250TWFuZGF0b3J5
QXR0cmlidXRlcyhQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKQogewotICAgIGlmIChhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250czo6Tm8pIHsKKyAgICBpZiAoYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0g
UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pIHsKICAgICAgICAgQ0ZUeXBlUmVmIG1h
bmRhdG9yeUF0dHJpYnV0ZXNWYWx1ZXNbXSA9IHsga0NURm9udEZhbWlseU5hbWVBdHRyaWJ1dGUs
IGtDVEZvbnRQb3N0U2NyaXB0TmFtZUF0dHJpYnV0ZSwga0NURm9udEVuYWJsZWRBdHRyaWJ1dGUs
IGtDVEZvbnRVc2VySW5zdGFsbGVkQXR0cmlidXRlLCBrQ1RGb250RmFsbGJhY2tPcHRpb25BdHRy
aWJ1dGUgfTsKICAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZTZXRDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgbWFuZGF0b3J5QXR0cmlidXRlc1ZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChtYW5k
YXRvcnlBdHRyaWJ1dGVzVmFsdWVzKSwgJmtDRlR5cGVTZXRDYWxsQmFja3MpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuaAppbmRleCAwMDM1YWJhMWQzZjQ0OWUyZTRmYTc2NTMxZjBjNDA4OTA1
Zjg1ZDk2Li5mNTBkM2NlMjg2MGVhYjk5MjZlNzlmOGNiMGVkYmZjNTdiNDU5ZWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmgKQEAgLTY1LDEzICs2NSwxMyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRh
ZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVy
VAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRDcmVhdGlvbkNvbnRleHQmLCBib29sIGFw
cGx5V2VpZ2h0V2lkdGhTbG9wZVZhcmlhdGlvbnMgPSB0cnVlKTsKIGVudW0gY2xhc3MgU2hvdWxk
Q29tcHV0ZVBoeXNpY2FsVHJhaXRzIDogYm9vbCB7IE5vLCBZZXMgfTsKIFN5bnRoZXNpc1BhaXIg
Y29tcHV0ZU5lY2Vzc2FyeVN5bnRoZXNpcyhDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA9IFNob3VsZENvbXB1dGVQaHlzaWNhbFRy
YWl0czo6Tm8sIGJvb2wgaXNQbGF0Zm9ybUZvbnQgPSBmYWxzZSk7Ci1SZXRhaW5QdHI8Q1RGb250
UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKK1JldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZSwgZmxv
YXQgc2l6ZSk7CiBGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnRE
ZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYpOwotdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5z
dGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyk7Ci1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFs
bGVkRm9udHMoQ1RGb250RGVzY3JpcHRvclJlZiwgQ0dGbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7Ci1SZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVk
Rm9udHMoQ1RGb250UmVmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Ci12b2lkIGFkZEF0dHJp
YnV0ZXNGb3JXZWJGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKLVJldGFpblB0cjxDRlNldFJlZj4gaW5zdGFsbGVkRm9udE1h
bmRhdG9yeUF0dHJpYnV0ZXMoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwordm9pZCBhZGRBdHRy
aWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVz
LCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKK1JldGFpblB0cjxDVEZvbnRSZWY+IGNy
ZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNp
emUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworUmV0YWluUHRyPENURm9udFJlZj4g
Y3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udFJlZiwgUEFMOjpBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7Cit2b2lkIGFkZEF0dHJpYnV0ZXNGb3JXZWJGb250cyhDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworUmV0
YWluUHRyPENGU2V0UmVmPiBpbnN0YWxsZWRGb250TWFuZGF0b3J5QXR0cmlidXRlcyhQQUw6OkFs
bG93VXNlckluc3RhbGxlZEZvbnRzKTsKIAogVmFyaWF0aW9uRGVmYXVsdHNNYXAgZGVmYXVsdFZh
cmlhdGlvblZhbHVlcyhDVEZvbnRSZWYsIFNob3VsZExvY2FsaXplQXhpc05hbWVzKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNj
cmlwdGlvbkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAppbmRleCA1YTRlY2U2OTI4MWE3ZjY2MWMyNTNmZjc5
NTY1NjcxNzc5OThjZGEwLi5iYmFkYjJjOGI4YzE3ODU0MTA4NjNiY2ZhOWQ3OWZlNDY4NjMyMTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
RGVzY3JpcHRpb25Db2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHN0YXRp
YyBpbmxpbmUgc3RkOjpvcHRpb25hbDxTeXN0ZW1Gb250S2luZD4gbWF0Y2hTeXN0ZW1Gb250VXNl
KGNvbnN0IEF0b21TdHJpbmcmCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGlj
IGlubGluZSBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+PiBzeXN0ZW1Gb250
Q2FzY2FkZUxpc3QoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRv
bVN0cmluZyYgY3NzRmFtaWx5LCBTeXN0ZW1Gb250S2luZCBzeXN0ZW1Gb250S2luZCwgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgaW5saW5l
IFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZvbnRDYXNjYWRl
TGlzdChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5n
JiBjc3NGYW1pbHksIFN5c3RlbUZvbnRLaW5kIHN5c3RlbUZvbnRLaW5kLCBQQUw6OkFsbG93VXNl
ckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIHJldHVybiBT
eXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6c2luZ2xldG9uKCkuY2FzY2FkZUxpc3QoZGVzY3Jp
cHRpb24sIGNzc0ZhbWlseSwgc3lzdGVtRm9udEtpbmQsIGFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcAppbmRleCBmM2U2
ZmJjODgyYTBjMmQ1MTViOGU4ZjYxZjY5YzFkMmUzYmUyMzk3Li42ZTJkMDAxNzk1MTRhOWI5NzIx
NjRhMDQ0YTZlZDJiZjEyN2MwNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29y
ZVRleHQuY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBTeXN0ZW1Gb250RGF0YWJhc2VDb3Jl
VGV4dDo6Y2xlYXIoKQogICAgIG1fbW9ub3NwYWNlRmFtaWxpZXMuY2xlYXIoKTsKIH0KIAotUmV0
YWluUHRyPENURm9udFJlZj4gU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OmNyZWF0ZUZvbnRC
eUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhhdmlvcihDVEZvbnRSZWYg
Zm9udCwgQ0dGbG9hdCB3ZWlnaHQsIENHRmxvYXQgd2lkdGgsIGJvb2wgaXRhbGljLCBmbG9hdCBz
aXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cywgQ0ZT
dHJpbmdSZWYgZGVzaWduKQorUmV0YWluUHRyPENURm9udFJlZj4gU3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQ6OmNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJh
Y2tCZWhhdmlvcihDVEZvbnRSZWYgZm9udCwgQ0dGbG9hdCB3ZWlnaHQsIENHRmxvYXQgd2lkdGgs
IGJvb2wgaXRhbGljLCBmbG9hdCBzaXplLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzLCBDRlN0cmluZ1JlZiBkZXNpZ24pCiB7CiAgICAgYXV0byB3
ZWlnaHROdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckNHRmxvYXRUeXBlLCAmd2VpZ2h0KSk7CiAgICAgYXV0byB3aWR0aE51bWJlciA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyQ0dG
bG9hdFR5cGUsICZ3aWR0aCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHN0YXRpYyBDR0Zsb2F0IG1h
cFdpZHRoKEZvbnRTZWxlY3Rpb25WYWx1ZSB3aWR0aCkKICAgICByZXR1cm4gcGllY2V3aXNlUG9p
bnRzW3N0ZDo6c2l6ZShwaWVjZXdpc2VQb2ludHMpIC0gMV0ub3V0cHV0OwogfQogCi1TeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzIFN5c3RlbUZvbnREYXRh
YmFzZUNvcmVUZXh0OjpzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBTeXN0ZW1Gb250S2lu
ZCBzeXN0ZW1Gb250S2luZCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCitTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0
ZXJzIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lLCBTeXN0ZW1Gb250S2luZCBzeXN0ZW1Gb250S2luZCwgUEFMOjpBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBDYXNjYWRlTGlzdFBhcmFt
ZXRlcnMgcmVzdWx0OwogICAgIHJlc3VsdC5sb2NhbGUgPSBkZXNjcmlwdGlvbi5jb21wdXRlZExv
Y2FsZSgpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpD
YXNjYWRlTGlzdFBhcmFtZXRlcnMgU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OnN5CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
Pj4gU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OmNhc2NhZGVMaXN0KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGNzc0ZhbWlseSwgU3lzdGVt
Rm9udEtpbmQgc3lzdGVtRm9udEtpbmQsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4g
U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OmNhc2NhZGVMaXN0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGNzc0ZhbWlseSwgU3lzdGVtRm9u
dEtpbmQgc3lzdGVtRm9udEtpbmQsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJuIGNhc2NhZGVMaXN0KHN5c3RlbUZvbnRQ
YXJhbWV0ZXJzKGRlc2NyaXB0aW9uLCBjc3NGYW1pbHksIHN5c3RlbUZvbnRLaW5kLCBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyksIHN5c3RlbUZvbnRLaW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250
RGF0YWJhc2VDb3JlVGV4dC5oCmluZGV4IDlhZDFlMGNjNDUwZjBlYWE4Mjk4MTczNTU5NzgwMGFj
MDgwNDk2ZDQuLjI5YWJmNjM5ZjczMDkzOTVmZTI0OWRhNWJmNjQwNzhjYTNmMDMwZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnRE
YXRhYmFzZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaApAQCAtODYsMTMgKzg2LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgQ0dGbG9hdCB3ZWlnaHQgeyAwIH07CiAgICAgICAgIENHRmxvYXQgd2lk
dGggeyAwIH07CiAgICAgICAgIGZsb2F0IHNpemUgeyAwIH07Ci0gICAgICAgIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzIHsgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6Ok5vIH07CisgICAgICAgIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgeyBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyB9Owog
ICAgICAgICBib29sIGl0YWxpYyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIHN0YXRpYyBTeXN0
ZW1Gb250RGF0YWJhc2VDb3JlVGV4dCYgc2luZ2xldG9uKCk7CiAKLSAgICBWZWN0b3I8UmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+PiBjYXNjYWRlTGlzdChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9tU3RyaW5nJiBjc3NGYW1pbHksIFN5c3RlbUZvbnRLaW5kLCBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9y
UmVmPj4gY2FzY2FkZUxpc3QoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmlu
ZyYgY3NzRmFtaWx5LCBTeXN0ZW1Gb250S2luZCwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7CiAKICAgICBTdHJpbmcgc2VyaWZGYW1pbHkoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwogICAg
IFN0cmluZyBzYW5zU2VyaWZGYW1pbHkoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwpAQCAtMTExLDEw
ICsxMTEsMTAgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVTeXN0
ZW1EZXNpZ25Gb250KFN5c3RlbUZvbnRLaW5kLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMm
KTsKICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVUZXh0U3R5bGVGb250KGNvbnN0IENh
c2NhZGVMaXN0UGFyYW1ldGVycyYpOwogCi0gICAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+
IGNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhhdmlv
cihDVEZvbnRSZWYsIENHRmxvYXQgd2VpZ2h0LCBDR0Zsb2F0IHdpZHRoLCBib29sIGl0YWxpYywg
ZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIENGU3RyaW5nUmVmIGRlc2lnbiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250QnlB
cHBseWluZ1dlaWdodFdpZHRoSXRhbGljc0FuZEZhbGxiYWNrQmVoYXZpb3IoQ1RGb250UmVmLCBD
R0Zsb2F0IHdlaWdodCwgQ0dGbG9hdCB3aWR0aCwgYm9vbCBpdGFsaWMsIGZsb2F0IHNpemUsIFBB
TDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIENGU3RyaW5nUmVmIGRlc2lnbiA9IG51bGxwdHIp
OwogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gcmVtb3ZlQ2FzY2Fk
ZUxpc3QoQ1RGb250RGVzY3JpcHRvclJlZik7CiAgICAgc3RhdGljIFZlY3RvcjxSZXRhaW5QdHI8
Q1RGb250RGVzY3JpcHRvclJlZj4+IGNvbXB1dGVDYXNjYWRlTGlzdChDVEZvbnRSZWYsIENGU3Ry
aW5nUmVmIGxvY2FsZSk7Ci0gICAgc3RhdGljIENhc2NhZGVMaXN0UGFyYW1ldGVycyBzeXN0ZW1G
b250UGFyYW1ldGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lLCBTeXN0ZW1Gb250S2luZCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAg
IHN0YXRpYyBDYXNjYWRlTGlzdFBhcmFtZXRlcnMgc3lzdGVtRm9udFBhcmFtZXRlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSwgU3lzdGVtRm9u
dEtpbmQsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCiAgICAgSGFzaE1hcDxDYXNj
YWRlTGlzdFBhcmFtZXRlcnMsIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+
LCBDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Okhhc2gsIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDYXNj
YWRlTGlzdFBhcmFtZXRlcnM+PiBtX3N5c3RlbUZvbnRDYWNoZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGQ0M2JlNjkzMWNhZjExZWFlODBi
NTgwY2NiMmQ5NWEwOTIwNTliNDYuLjY2NGY5MjU5NDA5MjQ0NWU0YWYxYjc1NzUzMmIwMmQ0MWNm
NTViMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAK
QEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRl
cm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbgogICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9k
ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0
KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBm
b250LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgQVNTRVJU
KENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRT
bW9vdGhpbmdNCiAgICAgbV9zbW9vdGhpbmdNb2RlID0gc21vb3RoaW5nTW9kZTsKIAogICAgIG1f
b3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZvbnQpOwotICAg
IGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCkKKyAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKICAgICAgICAgbV9vcmlnaW5hbFRleHRN
YXRyaXggPSBjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0
cml4KTsKIAogICAgIGF1dG8mIGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuc3RhdGUoKTsKQEAgLTMz
OSw3ICszMzksNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhD
R1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgIC8vIGBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBoc2Agd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgb3JpZ2luYWwgYWR2YW5j
ZXMgZnJvbSB0aGUgcmVzdWx0aW5nCiAgICAgLy8gcG9zaXRpb25zIGJ5IGludmVydGluZyB0aGUg
b3BlcmF0aW9ucyBhcHBsaWVkIHRvIHRoZSBvcmlnaW5hbCBhZHZhbmNlcy4KICAgICBhdXRvIHRl
eHRNYXRyaXggPSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKLSAgICBpZiAoZm9udC0+cGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAg
aWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50
YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgIC8vIEtlZXAgdGhpcyBpbiBzeW5jIGFzIHRoZSBp
bnZlcnNlIG9mIGBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnNgLgogICAgICAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMjkxNz4gKGBEcmF3R2x5cGhzUmVj
b3JkZXJgIHNob3VsZCBiZSBhYmxlIHRvIHJlY29yZCtyZXBsYXkgdmVydGljYWwgdGV4dCkKICAg
ICB9CkBAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIEdseXBoc0FuZEFkdmFuY2VzIGZpbHRlck91
dE9UU1ZHR2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBQQUw6
OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1
Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsKICAgICAgICAgbV9v
d25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJlZiBmb250LCBDR0Zs
b2F0IGZvbnRTaXplLCBDVExpbmUKICAgICBtX293bmVyLnRyYW5zbGF0ZShsaW5lUmVjdC5vcmln
aW4ueCwgbGluZVJlY3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CiAgICAgbV9v
d25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRl
eHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNt
b290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIHByZXBhcmVJbnRlcm5hbENv
bnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgUEFM
OjpGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CiAgICAgQ0dDb250ZXh0
U2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwg
MCk7CiAgICAgQ1RMaW5lRHJhdyhsaW5lLCBtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkxNGFlMzVmMmFi
OGVkMmUuLjU5NDE0MmM4Mjc2MWEwOWI1MzczZmJjZDFkNjgxYzUwMzVhMGI1ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRl
Q29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhLCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK0Zv
bnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKICAgICA6IG1fZm9udHMo
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlRm9yUGxhdGZvcm1Gb250KGZvbnREYXRhKSkKICAgICAs
IG1fZW5hYmxlS2VybmluZyhjb21wdXRlRW5hYmxlS2VybmluZygpKQogICAgICwgbV9yZXF1aXJl
c1NoYXBpbmcoY29tcHV0ZVJlcXVpcmVzU2hhcGluZygpKQpAQCAtNzAsNyArNzAsNyBAQCBBZmZp
bmVUcmFuc2Zvcm0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGNvbnN0IEZvbnQmIGZvbnQpCiAg
ICAgcmVzdWx0LnNldEQoLXJlc3VsdC5kKCkpOwogICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhl
dGljT2JsaXF1ZSgpKSB7CiAgICAgICAgIGZsb2F0IG9ibGlxdWVTa2V3ID0gdGFuZihkZWcycmFk
KEZvbnRDYXNjYWRlOjpzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSkpOwotICAgICAgICBpZiAocGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewor
ICAgICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50
YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgICAgICBpZiAoZm9udC5pc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQWZmaW5lVHJhbnNmb3JtKDEs
IG9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSAqIHJlc3VsdDsKICAgICAgICAgICAgIGVsc2UKQEAg
LTkwLDcgKzkwLDcgQEAgQWZmaW5lVHJhbnNmb3JtIGNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeChj
b25zdCBGb250JiBmb250KQogCiBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0ZVZlcnRpY2FsVGV4dE1h
dHJpeChjb25zdCBGb250JiBmb250LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHByZXZpb3VzVGV4
dE1hdHJpeCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGZvbnQsIGZvbnQucGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGZvbnQsIGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgIC8vIFRoZSB0cmFuc2xhdGlvbiBoZXJlICgi
ZSIgYW5kICJmIiBmaWVsZHMpIGFyZSBpcnJlbGV2YW50LCBiZWNhdXNlCiAgICAgLy8gdGhpcyBt
YXRyaXggaXMgaW52ZXJ0ZWQgaW4gZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25z
IHRvIHBsYWNlIHRoZSBnbHlwaHMgaW4gdGhlIENUTSdzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAg
IC8vIEFsbCB3ZSdyZSB0cnlpbmcgdG8gZG8gaGVyZSBpcyByb3RhdGUgdGhlIHRleHQgbWF0cml4
IHNvIGdseXBocyBhcHBlYXIgdmlzdWFsbHkgdXByaWdodC4KQEAgLTE1OSw3ICsxNTksNyBAQCBz
dGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGb250JiBmb250LCBDRwogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxh
dGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKICAgICBWZWN0b3I8Q0dQb2ludCwgMjU2
PiBwb3NpdGlvbnMoY291bnQpOwotICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmll
bnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewogICAgICAgICBT
Y29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9u
dCwgdGV4dE1hdHJpeCksIGNvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4g
dHJhbnNsYXRpb25zKGNvdW50KTsKQEAgLTE4OCw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCBzZXRD
R0ZvbnRSZW5kZXJpbmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBDR0NvbnRl
eHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVsUXVh
bnRpemF0aW9uKTsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIFBBTDo6Rm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBjb25zdCBhdXRvJiBwbGF0Zm9ybURhdGEgPSBmb250
LnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAgLTIwNSwx
NyArMjA1LDE3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA9IHRydWU7CiAKICAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCi0g
ICAgICAgIHNtb290aGluZ01vZGUgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7Cisg
ICAgICAgIHNtb290aGluZ01vZGUgPSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGlu
ZzsKIAogICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgewotICAgIGNhc2UgRm9udFNtb290aGlu
Z01vZGU6OkFudGlhbGlhc2VkOgorICAgIGNhc2UgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QW50
aWFsaWFzZWQ6CiAgICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6Ci0gICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKKyAgICBjYXNlIFBBTDo6
Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9v
dGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgogICAgICAgICBzaG91bGRBbnRpYWxpYXMg
PSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Nt
b290aGluZzoKKyAgICBjYXNlIFBBTDo6Rm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgog
ICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKICAgICAgICAgc2hvdWxkU21vb3RoRm9u
dHMgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CkBAIC0zMjIsMTEgKzMyMiwxMSBAQCBjb25zdCBG
b250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZQogICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYg
YmFzZUNoYXJhY3RlciA8PSAweDA2ZmYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICNlbmRpZgotICAgICAgICBpZiAoZm9udC0+cGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7
CisgICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewogICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dy
YXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikpIHsKICAgICAgICAgICAgICAgICBpZiAoIWZvbnQt
Pmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+
YnJva2VuSWRlb2dyYXBoRm9udCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZvbnREZXNj
cmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlv
bjo6TWl4ZWQpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9u
Q0pLR2x5cGhPcmllbnRhdGlvbigpID09IFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4
ZWQpIHsKICAgICAgICAgICAgICAgICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZv
bnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKICAgICAgICAgICAgICAgICBHbHlw
aCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3Rl
cihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBo
ID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAppbmRl
eCAzNmRkNzBjYjVhNmQyNGVkYzk3MjgwYTc2NDE0N2Q1ODU5YzQyZDU3Li40ZTJkMzc3ZTdkODQx
OTViMWZjNWMxZWMwNjYwMGQ1MzEyZjAxMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKQEAgLTIw
NSw3ICsyMDUsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAgICAgfQogI2VuZGlmCiAg
ICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgIGlmIChw
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQogICAgICAgICBtX2hhc1ZlcnRp
Y2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgp
KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBG
b250OjpwbGF0Zm9ybUluaXQoKQogCiAgICAgQ0dGbG9hdCB4SGVpZ2h0ID0gMDsKICAgICBpZiAo
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkgeworICAgICAgICBpZiAo
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCkgewogICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAi
eCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxp
bmUsIGFuZCB3ZSBuZWVkIHRoZQogICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8g
b25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBi
YXNlbGluZS4KICAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVyKCd4
Jyk7CkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQo
KQogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9CiAKLWJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBw
b3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBz
LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0
c0NoYXJhY3RlckZvclN5bnRoZXNpcyhQQUw6OkZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENh
cHMsIFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewogI2lmIChQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCiAgICAgR2x5cGggZ2x5cGggPSBn
bHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwpAQCAtMjc5LDE5ICsyNzksMTkgQEAgYm9vbCBG
b250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50
Q2FwcyBmb250VmFyaWFudEMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoIChm
b250VmFyaWFudENhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6IHsKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewogICAgICAgICBhdXRvJiBzdXBw
b3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwogICAgICAgICByZXR1cm4gc3Vw
cG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwogICAgIH0KLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50Q2Fwczo6UGV0aXRlOiB7CiAgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBv
cnRlZEJ5UGV0aXRlQ2FwcygpOwogICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwogICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6QWxsU21hbGw6IHsKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFs
bDogewogICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxs
Q2FwcygpOwogICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBv
cnRlZC5nZXQoZ2x5cGgpOwogICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0
aXRlOiB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOiB7CiAgICAg
ICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpOwog
ICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQo
Z2x5cGgpOwogICAgIH0KQEAgLTMwMywxMCArMzAzLDEwIEBAIGJvb2wgRm9udDo6dmFyaWFudENh
cHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlh
bnRDCiAgICAgVU5VU0VEX1BBUkFNKGNoYXJhY3Rlcik7CiAKICAgICBzd2l0Y2ggKGZvbnRWYXJp
YW50Q2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFs
bDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlBl
dGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFy
aWFudC1jYXBzIHZhbHVlcyBsaXN0ZWQgYWJvdmUuCkBAIC00MDQsNyArNDA0LDcgQEAgY29uc3Qg
Qml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKSBjb25zdAog
fQogI2VuZGlmCiAKLXN0YXRpYyBSZWZQdHI8Rm9udD4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoQ1RG
b250UmVmIGZvbnQsIGZsb2F0IHNpemUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgQ1RG
b250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cywgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYywgRm9udFdpZHRoVmFyaWFudCBmb250V2lkdGhWYXJpYW50LCBUZXh0UmVu
ZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YTo6Q3Jl
YXRpb25EYXRhKiBjcmVhdGlvbkRhdGEpCitzdGF0aWMgUmVmUHRyPEZvbnQ+IGNyZWF0ZURlcml2
YXRpdmVGb250KENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBQQUw6OkZvbnRPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cywgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgUEFMOjpGb250V2lkdGhWYXJpYW50IGZv
bnRXaWR0aFZhcmlhbnQsIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUs
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0aW9uRGF0YSogY3JlYXRpb25EYXRhKQogewog
ICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NzYsNyArNTc2LDcg
QEAgZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKIAogICAgIGlmIChwbGF0Zm9ybURhdGEo
KS5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWw7CisgICAgICAgIGJvb2wg
aG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3Jp
ZW50YXRpb246Okhvcml6b250YWw7CiAgICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uID0gaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250
T3JpZW50YXRpb25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7CiAjaWYg
VVNFKENURk9OVEdFVEFEVkFOQ0VTX1dPUktBUk9VTkQpCiAgICAgICAgIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHls
ZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJl
ZDsKQEAgLTU5Myw3ICs1OTMsNyBAQCBmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiAKICNlbmRpZgogCi1HbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6
YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5u
aW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxl
S2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0CitHbHlw
aEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3Ry
aW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0
IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbikgY29uc3QKIHsKICAgICBVTlVTRURfUEFSQU0ocmVxdWlyZXNTaGFwaW5n
KTsKIApAQCAtNjI0LDcgKzYyNCw3IEBAIEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpCiAgICAgLy8g
RklYTUU6IEVuYWJsZSBrZXJuaW5nIGZvciBzaW5nbGUgZ2x5cGhzIHdoZW4gcmRhcjovLzgyMTk1
NDA1IGlzIGZpeGVkCiAgICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hh
cGVXaXRoQ2x1c3RlckNvbXBvc2l0aW9uCiAgICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgJiYgbnVt
YmVyT2ZJbnB1dEdseXBocyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkKLSAgICAgICAg
fCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdo
dFRvTGVmdCA6IDApOworICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4
OyArK2kpCiAgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlw
aEluZGV4KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKQEAgLTcyMSw3ICs3MjEsNyBAQCBH
bHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgdW5zaWduZWQgYmVnaQogICAgIC8vIE9uIHRoZSBvdGhlciBoYW5kLCBDVEZvbnRT
aGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZlciBpbiBsb2dpY2FsIG9yZGVyIGJ1dCByZXR1
cm5zIGl0IGluIHBoeXNpY2FsCiAgICAgLy8gb3JkZXIsIHdoaWNoIG1lYW5zIHRoZSBzZWNvbmQg
cmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3RpbGwgbmVlZHMgdG8gZXhlY3V0ZSB3aGVuCiAg
ICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBiZWluZyB1c2VkLgotICAgIGlmICh0ZXh0RGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdp
bm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4
KTsKIAogICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9IChlbmFibGVLZXJuaW5n
ID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8IGtDVEZvbnRUcmFuc2Zv
cm1BcHBseVNoYXBpbmc7CkBAIC03MzEsNyArNzMxLDcgQEAgR2x5cGhCdWZmZXJBZHZhbmNlIEZv
bnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGJl
Z2kKICNlbmRpZgogCiAgICAgLy8gU2VlIHRoZSBjb21tZW50IGFib3ZlIGluIHRoaXMgZnVuY3Rp
b24gd2hlcmUgdGhlIG90aGVyIGNhbGwgdG8gcmV2ZXJzZSgpIGlzLgotICAgIGlmICh0ZXh0RGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdp
bm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4
KTsKIAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKQEAgLTc3OSw3ICs3NzksNyBAQCBGbG9h
dFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsK
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CiAgICAgQ0dSZWN0IGlnbm9yZWRSZWN0ID0geyB9
OwotICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsID8ga0NURm9udE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RG
b250T3JpZW50YXRpb25Ib3Jpem9udGFsLCAmZ2x5cGgsICZpZ25vcmVkUmVjdCwgMSk7CisgICAg
Ym91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsIDoga0NURm9u
dE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAmaWdub3JlZFJlY3QsIDEpOwogICAgIGJv
dW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7CiAgICAgYm91bmRpbmdCb3guc2V0
V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRQ
bGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCmluZGV4IDU5ZDIxNjY3OWQy
ZmU0YzgwYzY5YWFhNzFmMzkyMWQ2MjU3YWFjOWEuLjgyZTdiNzQ2YTMwNTU2MzA1NGYwMjZkNzY5
NWQ1MzAzMDYyZWY0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0
LmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoUmV0YWluUHRyPENURm9udFJlZj4mJiBmb250LCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwg
VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUsIGNvbnN0IENyZWF0aW9uRGF0YSog
Y3JlYXRpb25EYXRhKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShSZXRhaW5Q
dHI8Q1RGb250UmVmPiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNPYmxpcXVlLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgUEFM
OjpGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZSB0
ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgQ3JlYXRpb25EYXRhKiBjcmVhdGlvbkRhdGEpCiAgICAg
OiBGb250UGxhdGZvcm1EYXRhKHNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUs
IG9yaWVudGF0aW9uLCB3aWR0aFZhcmlhbnQsIHRleHRSZW5kZXJpbmdNb2RlLCBjcmVhdGlvbkRh
dGEpCiB7CiAgICAgQVNTRVJUX0FSRyhmb250LCBmb250KTsKQEAgLTczLDE5ICs3MywxOSBAQCBD
VEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAogfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi1pbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVh
dHVyZVNlbGVjdG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKK2lubGluZSBpbnQgbWFwRm9u
dFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IoUEFMOjpGb250V2lkdGhWYXJpYW50IHZh
cmlhbnQpCiB7CiAgICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgY2FzZSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGg6CisgICAgY2FzZSBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3Vs
YXJXaWR0aDoKICAgICAgICAgcmV0dXJuIGtQcm9wb3J0aW9uYWxUZXh0U2VsZWN0b3I7CiAKLSAg
ICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aDoKKyAgICBjYXNlIFBBTDo6Rm9udFdp
ZHRoVmFyaWFudDo6SGFsZldpZHRoOgogICAgICAgICByZXR1cm4ga0hhbGZXaWR0aFRleHRTZWxl
Y3RvcjsKIAotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKKyAgICBjYXNl
IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKICAgICAgICAgcmV0dXJuIGtUaGly
ZFdpZHRoVGV4dFNlbGVjdG9yOwogCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpRdWFydGVy
V2lkdGg6CisgICAgY2FzZSBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aDoKICAg
ICAgICAgcmV0dXJuIGtRdWFydGVyV2lkdGhUZXh0U2VsZWN0b3I7CiAgICAgfQogCkBAIC0xMTks
NyArMTE5LDcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAg
ICAgQVNTRVJUKG1fZm9udCk7CiAgICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNv
cHlXaXRoQXR0cmlidXRlcyhtX2ZvbnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRv
TGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpKSk7CiAKLSAgICBpZiAobV93
aWR0aFZhcmlhbnQgIT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7CisgICAgaWYg
KG1fd2lkdGhWYXJpYW50ICE9IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7
CiAgICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0ga1RleHRTcGFjaW5nVHlwZTsKICAgICAg
ICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0
dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOwogICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKG1fY3RGb250LmdldCgpKSk7CkBAIC0xNjcsNyArMTY3LDcgQEAgU3RyaW5nIEZvbnRQ
bGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbWFrZVN0cmluZyhm
b250RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAogICAgICAgICAobV9zeW50aGV0aWNCb2xkID8g
IiBzeW50aGV0aWMgYm9sZCIgOiAiIiksCiAgICAgICAgIChtX3N5bnRoZXRpY09ibGlxdWUgPyAi
IHN5bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKLSAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24iIDogIiIpKTsK
KyAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2Fs
ID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIgOiAiIikpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA3MmZjNmQxYTczNDQ2MTQyNWYwY2U1Njdm
NmI4MGMwNDcyMmMwYWExLi5lYzgzOWJmMmJkZTNmZGEyNDk2YjlkY2I2MDk4MjQ2ODZiNWU2NDUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0yOTksNyArMjk5LDcg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVu
ZENsaXBUb0RyYXdpbmdDb21tYW5kcyYgaXQKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdHbHlw
aHM6OkRyYXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZvbnRJZGVudGlmaWVy
LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVm
ZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCitEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBm
b250SWRlbnRpZmllciwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiBnbHlwaHMsIFZl
Y3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiBhZHZhbmNlcywgY29uc3QgRmxvYXRSZWN0
JiBib3VuZHMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCiAgICAgOiBtX2ZvbnRJZGVudGlmaWVyKGZvbnRJZGVudGlm
aWVyKQogICAgICwgbV9nbHlwaHMoV1RGTW92ZShnbHlwaHMpKQogICAgICwgbV9hZHZhbmNlcyhX
VEZNb3ZlKGFkdmFuY2VzKSkKQEAgLTMwOSw3ICszMDksNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5
cGhzKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBmb250SWRlbnRpZmllciwgVmVjdG9yPEds
eXBoQgogewogfQogCi1EcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQorRHJhd0dseXBoczo6RHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBv
aW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQog
ICAgIDogbV9mb250SWRlbnRpZmllcihmb250LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
KQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fc21vb3RoaW5nTW9k
ZShzbW9vdGhpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggZTE0
YTQyOTkzYTBmMmFmZGIyZjRiMTZhMGFhYmY5NWVlMTRkYjM3ZS4uNmRhN2UzMjhkZjZhNjY2ODgx
Zjc1MjZhNmZkMjE0M2MyY2I4YWNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CkBAIC05MjYsOCArOTI2LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEcmF3R2x5cGhzPiBkZWNvZGUoRGVjb2RlciYpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNP
UkVfRVhQT1JUIERyYXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+
JiYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21v
b3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQ
b2ludCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNtb290aGluZ01vZGUpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250JikgY29uc3Q7
CiAKQEAgLTk0Miw3ICs5NDIsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFk
dmFuY2UsIDE2PiBtX2FkdmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKICAgICBGbG9h
dFBvaW50IG1fbG9jYWxBbmNob3I7Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdN
b2RlOworICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlOwogfTsKIAog
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTk4Nyw3ICs5ODcsNyBAQCBzdGQ6Om9wdGlvbmFs
PERyYXdHbHlwaHM+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlm
ICghbG9jYWxBbmNob3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPEZvbnRTbW9vdGhpbmdNb2RlPiBzbW9vdGhpbmdNb2RlOworICAgIHN0ZDo6b3B0
aW9uYWw8UEFMOjpGb250U21vb3RoaW5nTW9kZT4gc21vb3RoaW5nTW9kZTsKICAgICBkZWNvZGVy
ID4+IHNtb290aGluZ01vZGU7CiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CmluZGV4IDJmZDQzZjk5YWUzNTRhZGFkNzNiZDg1ZjE0ZmY1ZWMwYmU0ZmQ5ODQuLjBkNTRlNWIx
Nzc4N2M2NzY1YzkzZDk5ZmY1MWQyZDI1ZTg2YWQ5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTE0NCwxMiArMTQ0LDEyIEBAIHZvaWQgUmVjb3JkZXI6
OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKICAgICByZWNvcmRTZXRNaXRlckxpbWl0
KG1pdGVyTGltaXQpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBz
dGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBSZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQogewogICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdN
b2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwogICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZv
bnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDlhNDAxNDM2
N2RiMWVmNDNiOGE1OWU1MGUzZDQ3MTBmOTNlMDNlYmYuLjYzOGVlZDIwMjdhZTA5M2FhZjY2NjA3
MmI3ZGJmZDg5MWNkMTc5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
aApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5saW5lUGF0
aERhdGEuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0
RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtODgsNyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9k
ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKQEAgLTIyNCw4ICsyMjQsOCBAQCBwcml2YXRlOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggYTVlMmQzYjIwOTg1ZTNlZjk0MWEzMjM1NzU2ZTI4
MGVhY2Q1MTYzYy4uMjUxYjA4NjMwYjM0ZmIyMTE4ZWM3MmFiMTE4YTA2Y2Q0OGJjOWQ2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC0yMDgs
NyArMjA4LDcgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEVuZENsaXBUb0RyYXdpbmdDb21t
YW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogICAgIGFwcGVuZDxFbmRDbGlwVG9E
cmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUp
Cit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
UEFMOjpGb250U21vb3RoaW5nTW9kZSBtb2RlKQogewogICAgIGFwcGVuZDxEcmF3R2x5cGhzPihm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCAzZTZkMDkwMjY5
MDQ2ZjFiMTI0YTM5YzFlMTIxMTAwYjMyNzI2MGM1Li41YmM5M2ViMzk3MDYxMTM1YzkyYjUwMjQw
YTg1MTZmMzQzYjYwZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEJlZ2luQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRFbmRDbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3
R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5j
aG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdJ
bWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3
TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKaW5kZXggYmQxMTNiYjZjMjczMWZhMTlhZGRlZmQzM2E5OWQ0NmJiNGExZjRhMi4uZTc1MGZl
YTM1MDE0ODhiMTY4NjNlZmJkYmMwYzFhNDJlODFlNzZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcApAQCAtNDQsOCArNDQsOCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJgogICAg
IEFTU0VSVChtb2RpZmllZEZvbnREZXNjcmlwdG9yKTsKIAogICAgIGludCBzaXplID0gZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uID0gZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCk7Ci0gICAgRm9udFdpZHRoVmFy
aWFudCB3aWR0aFZhcmlhbnQgPSBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7CisgICAg
UEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKTsKKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50ID0gZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpOwogICAgIGF1dG8gZm9udCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKG1vZGlmaWVkRm9udERlc2NyaXB0b3IuZ2V0KCksIHNp
emUsIG51bGxwdHIpKTsKICAgICBmb250ID0gcHJlcGFyZVBsYXRmb3JtRm9udChmb250LmdldCgp
LCBmb250RGVzY3JpcHRpb24sIGZvbnRDcmVhdGlvbkNvbnRleHQpOwogICAgIEFTU0VSVChmb250
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCmluZGV4IDcxOGI5YmQzMTVlY2M2NzA3ODljNjVj
YmFhYTAzNDkyOTc1ZTcyZDMuLjBlMTdkM2Y2NzA4OTE4MzMxMmIxYjI2MDQ5NGFmM2E4YjVkNWVm
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMjIsOCArMjIsOCBAQAogI2RlZmlu
ZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKIAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkJh
c2UuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAppbmRleCBmYWFiNmUxNGYwMjdh
NDQ0YmQ2ZGUyNzEyZTY2OTU0YTc2NTVkZDFiLi45YWFiYmFiY2IyZTg5MzA4MmQxNGE2ZGVlYTc0
N2ZiOWYyMDkwNDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCkBAIC0zMiw3ICsz
Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gRm9udDo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKGJvb2wgZW5hYmxlS2VybmluZywgRm9udE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUpIGNvbnN0CitS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBGb250OjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoYm9v
bCBlbmFibGVLZXJuaW5nLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxlKSBjb25zdAogewogICAgIENGVHlwZVJlZiBrZXlzWzVdOwogICAg
IENGVHlwZVJlZiB2YWx1ZXNbNV07CkBAIC02OSw3ICs2OSw3IEBAIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IEZvbnQ6OmdldENGU3RyaW5nQXR0cmlidXRlcyhib29sIGVuYWJsZUtlcm5pbmcs
IEZvbnRPCiAgICAgICAgICsrY291bnQ7CiAgICAgfQogCi0gICAgaWYgKG9yaWVudGF0aW9uID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gUEFM
OjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgIGtleXNbY291bnRdID0ga0NU
VmVydGljYWxGb3Jtc0F0dHJpYnV0ZU5hbWU7CiAgICAgICAgIHZhbHVlc1tjb3VudF0gPSBrQ0ZC
b29sZWFuVHJ1ZTsKICAgICAgICAgKytjb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvRHJhZ0ltYWdlSU9TLm1tCmluZGV4IGVhMmU4NjEzNDM1YWFkZmI4YTM4OGMwYzZlNWZlYWU1
YWJmMWI0N2UuLmQwNWU3ZmYyZmYzM2U1YjkyZmZiODBlNTgyNzM0NmZhMzAzOTI3OWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHN0YXRpYyBGb250Q2FzY2FkZSBjYXNjYWRlRm9yU3lzdGVtRm9udChDR0Zsb2F0IHNp
emUpCiAgICAgcmV0dXJuIEZvbnRDYXNjYWRlKEZvbnRQbGF0Zm9ybURhdGEoYWRvcHRDRihDVEZv
bnRDcmVhdGVXaXRoTmFtZSgoQ0ZTdHJpbmdSZWYpZm9udC5mb250TmFtZSwgZm9udC5wb2ludFNp
emUsIG5pbCkpLCBmb250LnBvaW50U2l6ZSkpOwogfQogCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yTGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2F0b3JEYXRhLCBGb250UmVuZGVyaW5n
TW9kZSwgZmxvYXQpCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50
JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFRleHRJbmRpY2F0
b3JEYXRhJiBpbmRpY2F0b3JEYXRhLCBQQUw6OkZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKIHsK
ICAgICAvLyBGSVhNRTogTW9zdCBvZiB0aGlzIGNhbiBnbyBhd2F5IG9uY2Ugd2UgY2FuIHVzZSBV
SVVSTERyYWdQcmV2aWV3VmlldyB1bmNvbmRpdGlvbmFsbHkuCiAgICAgc3RhdGljIGNvbnN0IENH
RmxvYXQgZHJhZ0ltYWdlUGFkZGluZyA9IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHAKaW5kZXggM2RkOTdjMTNlZDc0ZDBhMjdiNmIz
ZjExODdjZGU4YTQwN2NjMWMzNC4uY2ExZTc3NGM3MWQ4OGZhNWE2NDljYzIzNjIzOTcxYWRkYzMy
MDA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdl
b21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2Vv
bWV0cnkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFNlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25H
ZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlCiB9CiAK
IC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBh
dXhpbGxhcnkgc3RydWN0LgotU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVoYXZpb3Is
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZLCBp
bnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBib29s
IGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLCBib29s
IGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlUZXh0LCBp
bnQgcGFnZU51bWJlcikKK1NlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25z
dCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIGJlaGF2aW9yLCBQ
QUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZ
LCBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBi
b29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLCBi
b29sIGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlUZXh0
LCBpbnQgcGFnZU51bWJlcikKICAgICA6IG1fcXVhZChxdWFkKQogICAgICwgbV9iZWhhdmlvcihi
ZWhhdmlvcikKICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmgKaW5kZXggYzhhNGIxZWE4YTEyODY3
NDQxNzg1NmEyYzBjNWI4NDdmOTRhZTY3MC4uOTVhNGJhNzRhOGUxMDQ2OTM5NDAxNTQ2OTEyNWQy
MTVlYjk0OWFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVj
dGlvbkdlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlv
bkdlb21ldHJ5LmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgogI2luY2x1ZGUg
PG9wdGlvbmFsPgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgU2VsZWN0aW9uR2VvbWV0cnko
Y29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IsIGJvb2wgaXNIb3Jp
em9udGFsLCBpbnQgY29sdW1uTnVtYmVyKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92
ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgotICAgIFNl
bGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2
aW9yLCBUZXh0RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wsIGJvb2wsIGJvb2ws
IGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7CisgICAgU2VsZWN0aW9uR2VvbWV0
cnkoY29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IsIFBBTDo6VGV4
dERpcmVjdGlvbiwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBib29sLCBib29sLCBi
b29sLCBib29sLCBib29sLCBib29sLCBpbnQpOwogICAgIFNlbGVjdGlvbkdlb21ldHJ5KCkgPSBk
ZWZhdWx0OwogICAgIH5TZWxlY3Rpb25HZW9tZXRyeSgpID0gZGVmYXVsdDsKIApAQCAtNTYsNyAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2lz
SG9yaXpvbnRhbCA/IHJlY3QoKS55KCkgOiByZWN0KCkueCgpOyB9CiAgICAgaW50IGxvZ2ljYWxI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IHJlY3QoKS5oZWlnaHQoKSA6
IHJlY3QoKS53aWR0aCgpOyB9CiAKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgaW50IG1pblgoKSBjb25zdCB7
IHJldHVybiBtX21pblg7IH0KICAgICBpbnQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WDsg
fQogICAgIGludCBtYXhZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhZOyB9CkBAIC03Nyw3ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExvZ2ljYWxUb3AoaW50KTsKICAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHQoaW50KTsKIAotICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CisgICAgdm9pZCBzZXREaXJl
Y3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVj
dGlvbjsgfQogICAgIHZvaWQgc2V0TWluWChpbnQgbWluWCkgeyBtX21pblggPSBtaW5YOyB9CiAg
ICAgdm9pZCBzZXRNYXhYKGludCBtYXhYKSB7IG1fbWF4WCA9IG1heFg7IH0KICAgICB2b2lkIHNl
dE1heFkoaW50IG1heFkpIHsgbV9tYXhZID0gbWF4WTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZsb2F0UXVhZCBtX3F1YWQ7CiAgICAgU2VsZWN0aW9uUmVuZGVy
aW5nQmVoYXZpb3IgbV9iZWhhdmlvciB7IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpDb2Fs
ZXNjZUJvdW5kaW5nUmVjdHMgfTsKLSAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uIHsgVGV4
dERpcmVjdGlvbjo6TFRSIH07CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uIHsg
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfTsKICAgICBpbnQgbV9taW5YIHsgMCB9OwogICAgIGlu
dCBtX21heFggeyAwIH07CiAgICAgaW50IG1fbWF4WSB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKaW5kZXggM2Q2YWE4MjE5MWVlYmIy
MDU1NWVmZTAzYTMxZGJiODVlMjdmNzliMC4uMTE3YzA5NDgzMTcxNTEzZDFjYjY0NjQ4ZTcwZTA0
MTBmOGM4NDE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlckNsaWVudC4KICAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNo
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgYWxs
b3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZp
bmFsOwotICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShCb3hTaWRlKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIHNob3VsZFJ1YmJlckJhbmRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdCBm
aW5hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCA1M2E0MDc1M2RiNzQ3YzVh
YzRiMWY3YjIxYTlhZDVjMWZmNDVhODM2Li5lOTI2NTFhZjE2Y2ZjMzc4YzQyNzE4YjFjMmZkZDlm
N2IxYjk4NTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tCkBAIC0xODcsNyArMTg3LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNob3VsZFJ1
YmJlckJhbmRPblNpZGUoQm94U2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNo
b3VsZFJ1YmJlckJhbmRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQppbmRleCA4MDBjYzUxMTA3NWFhYjAyMDhlODk2NzM1
YTNlOWJkMWUzMDIyODExLi5jMThiNmM2NzZmNzAzNDBlNjcxNzMzNWZjMjhhYTZlNDQ0MzJhYmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLm1tCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIEZsb2F0U2l6
ZSBkZWx0YUFsaWduZWRUb0RvbWluYW50QXhpcyhGbG9hdFNpemUgZGVsdGEpCiAgICAgcmV0dXJu
IGRlbHRhQWxpZ25lZFRvQXhpcyhkZWx0YSwgZG9taW5hbnRBeGlzKTsKIH0KIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8Qm94U2lkZT4gYWZmZWN0ZWRTaWRlT25Eb21pbmFudEF4aXMoRmxvYXRTaXpl
IGRlbHRhKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiBhZmZlY3RlZFNpZGVP
bkRvbWluYW50QXhpcyhGbG9hdFNpemUgZGVsdGEpCiB7CiAgICAgYXV0byBkb21pbmFudEF4aXMg
PSBkb21pbmFudEF4aXNGYXZvcmluZ1ZlcnRpY2FsKGRlbHRhKTsKICAgICByZXR1cm4gU2Nyb2xs
YWJsZUFyZWE6OnRhcmdldFNpZGVGb3JTY3JvbGxEZWx0YShkZWx0YSwgZG9taW5hbnRBeGlzKTsK
QEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFy
dFJ1YmJlckJhbmRBbmltYXRpb25JZk5lY2Vzc2FyeSgpCiAgICAgc3RhcnRSdWJiZXJCYW5kQW5p
bWF0aW9uKGNvbnRyYWluZWRPZmZzZXQsIGluaXRpYWxWZWxvY2l0eSwgc3RyZXRjaEFtb3VudCk7
CiB9CiAKLWJvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRP
blNpZGUoQm94U2lkZSBzaWRlKSBjb25zdAorYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6c2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNpZGUgc2lkZSkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9jbGllbnQuc2hvdWxkUnViYmVyQmFuZE9uU2lkZShzaWRlKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ1Y2QxMGJmMzQ4NjJjOGVlZWEyYjg0MWM3NWM3ZmRkYTk2ZjlkZmYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmlkaUNvbnRleHQu
aCIKLQotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
U2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVT
aXplQXNCaWRpQ29udGV4dD4gewotICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OwotICAgIHZv
aWQqIHBhcmVudDsKLX07Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4dCkgPT0g
c2l6ZW9mKFNhbWVTaXplQXNCaWRpQ29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9zdGF5X3Nt
YWxsKTsKLQotaW5saW5lIEJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxl
dmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRp
bmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQotICAgIDogbV9sZXZlbChsZXZl
bCkKLSAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fb3ZlcnJpZGUob3ZlcnJp
ZGUpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3BhcmVudChwYXJlbnQpCi17Ci19
Ci0KLWlubGluZSBSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNhY2hlZCh1
bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJp
ZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rpb24sIG92
ZXJyaWRlLCBzb3VyY2UsIHBhcmVudCkpOwotfQotCi1SZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250
ZXh0OjpjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9u
LCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQq
IHBhcmVudCkKLXsKLSAgICBBU1NFUlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBVX1JJR0hU
X1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpKTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAg
IHJldHVybiBjcmVhdGVVbmNhY2hlZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNl
LCBwYXJlbnQpOwotCi0gICAgQVNTRVJUKGxldmVsIDw9IDEpOwotICAgIGlmICghbGV2ZWwpIHsK
LSAgICAgICAgaWYgKCFvdmVycmlkZSkgewotICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IGx0ckNvbnRleHQ7Ci0gICAgICAgICAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgbHRyQ29udGV4dE9uY2VGbGFnOwotICAgICAgICAgICAgc3RkOjpjYWxs
X29uY2UobHRyQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7Ci0gICAgICAgICAgICAgICAgbHRyQ29u
dGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFsc2UsIEZy
b21TdHlsZU9yRE9NLCAwKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuICps
dHJDb250ZXh0LmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKLSAgICAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOwotICAgICAgICBz
dGQ6OmNhbGxfb25jZShsdHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgewotICAgICAg
ICAgICAgbHRyT3ZlcnJpZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZU
X1RPX1JJR0hULCB0cnVlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm4gKmx0ck92ZXJyaWRlQ29udGV4dC5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW92
ZXJyaWRlKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRl
eHQ+PiBydGxDb250ZXh0OwotICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsQ29udGV4
dE9uY2VGbGFnOwotICAgICAgICBzdGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZsYWcsIFsm
XSgpIHsKLSAgICAgICAgICAgIHJ0bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgxLCBV
X1JJR0hUX1RPX0xFRlQsIGZhbHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm4gKnJ0bENvbnRleHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4dDsKLSAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7Ci0gICAg
c3RkOjpjYWxsX29uY2UocnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKLSAgICAg
ICAgcnRsT3ZlcnJpZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9U
T19MRUZULCB0cnVlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICpy
dGxPdmVycmlkZUNvbnRleHQuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmPEJpZGlDb250
ZXh0PiBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29udGV4dCwg
QmlkaUNvbnRleHQqIHBhcmVudCkKLXsKLSAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50ID8gcGFy
ZW50LT5sZXZlbCgpIDogMDsKLSAgICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hUX1RPX0xF
RlQpCi0gICAgICAgIG5ld0xldmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZlbCk7Ci0g
ICAgZWxzZSBpZiAocGFyZW50KQotICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxl
dmVsKG5ld0xldmVsKTsKLSAgICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdMZXZlbCwg
Y29udGV4dC5kaXIoKSwgY29udGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgpLCBwYXJl
bnQpOwotfQotCi0vLyBUaGUgQmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFibGUgLS0g
dGhleSdyZSByZS11c2VkIGZvciByZS1sYXlvdXQgYWZ0ZXIKLS8vIERPTSBtb2RpZmljYXRpb24v
ZWRpdGluZyAtLSBzbyB3ZSBjb3B5IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMsIGFuZAot
Ly8gcmVjYWxjdWxhdGUgdGhlaXIgbGV2ZWxzLgotUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4
dDo6Y29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQotewotICAgIFZl
Y3RvcjxCaWRpQ29udGV4dCosIDY0PiBjb250ZXh0czsKLSAgICBmb3IgKGF1dG8qIGFuY2VzdG9y
ID0gdGhpczsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7Ci0gICAg
ICAgIGlmIChhbmNlc3Rvci0+c291cmNlKCkgIT0gRnJvbVVuaWNvZGUpCi0gICAgICAgICAgICBj
b250ZXh0cy5hcHBlbmQoYW5jZXN0b3IpOwotICAgIH0KLSAgICBBU1NFUlQoY29udGV4dHMuc2l6
ZSgpKTsKLSAgICBhdXRvIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZl
bCgqY29udGV4dHMubGFzdCgpLCBudWxscHRyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb250
ZXh0cy5zaXplKCkgLSAxOyBpOyAtLWkpCi0gICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4
dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0cigpKTsK
LSAgICByZXR1cm4gdG9wQ29udGV4dDsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlD
b250ZXh0JiBjMSwgY29uc3QgQmlkaUNvbnRleHQmIGMyKQotewotICAgIGlmICgmYzEgPT0gJmMy
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5sZXZlbCgp
IHx8IGMxLm92ZXJyaWRlKCkgIT0gYzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBjMi5kaXIo
KSB8fCBjMS5zb3VyY2UoKSAhPSBjMi5zb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghYzEucGFyZW50KCkpCi0gICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7Ci0gICAg
cmV0dXJuIGMyLnBhcmVudCgpICYmICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4ZDkwOWVlYTkxYjYx
OWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1l
bnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsK
LQotLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBC
aWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0
ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZh
bHNlLCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBw
YXJlbnQgPSBudWxscHRyKTsKLQotICAgIEJpZGlDb250ZXh0KiBwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7
IHJldHVybiBtX2xldmVsOyB9Ci0gICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsgfQotICAgIGJvb2wg
b3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlOyB9Ci0gICAgQmlkaUVtYmVkZGlu
Z1NvdXJjZSBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpRW1iZWRkaW5n
U291cmNlPihtX3NvdXJjZSk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxCaWRpQ29udGV4
dD4gY29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKTsKLQotcHJpdmF0
ZToKLSAgICBCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwg
Ym9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCk7
Ci0KLSAgICBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGVVbmNhY2hlZCh1bnNpZ25lZCBj
aGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1Nv
dXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCk7Ci0KLSAgICB1bnNpZ25lZCBtX2xldmVsIDogNjsg
Ly8gVGhlIG1heGltaXVtIGJpZGkgbGV2ZWwgaXMgNjI6IGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cnRzL3RyOS8jRXhwbGljaXRfTGV2ZWxzX2FuZF9EaXJlY3Rpb25zCi0gICAgdW5zaWduZWQgbV9k
aXJlY3Rpb24gOiA1OyAvLyBEaXJlY3Rpb24KLSAgICB1bnNpZ25lZCBtX292ZXJyaWRlIDogMTsK
LSAgICB1bnNpZ25lZCBtX3NvdXJjZSA6IDE7IC8vIEJpZGlFbWJlZGRpbmdTb3VyY2UKLSAgICBS
ZWZQdHI8QmlkaUNvbnRleHQ+IG1fcGFyZW50OwotfTsKLQotaW5saW5lIHVuc2lnbmVkIGNoYXIg
bmV4dEdyZWF0ZXJPZGRMZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQotewotICAgIHJldHVybiAo
bGV2ZWwgKyAxKSB8IDE7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyRXZl
bkxldmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpCi17Ci0gICAgcmV0dXJuIChsZXZlbCArIDIpICYg
fjE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4dCYsIGNvbnN0IEJpZGlD
b250ZXh0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
OWQ5ZTQ2ZTA4NjU2OGRjOTA3YWI1ODRkYzQyNjY4NTcwNWZkY2YwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQmlkaVJlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJCaWRpQ29udGV4dC5oIgotI2luY2x1ZGUgIkJpZGlSdW5M
aXN0LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yPiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlIHsKLXB1
YmxpYzoKLSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNpdGlvbnMuY2xl
YXIoKTsKLSAgICAgICAgbV9jdXJyZW50VHJhbnNpdGlvbiA9IDA7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgc3RhcnRJZ25vcmluZ1NwYWNlcyhjb25zdCBJdGVyYXRvciYgdHJhbnNpdGlvbikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghKG1fdHJhbnNpdGlvbnMuc2l6ZSgpICUgMikpOwotICAgICAg
ICBtX3RyYW5zaXRpb25zLmFwcGVuZCh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0
b3BJZ25vcmluZ1NwYWNlcyhjb25zdCBJdGVyYXRvciYgdHJhbnNpdGlvbikKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3RyYW5zaXRpb25zLnNpemUoKSAlIDIpOwotICAgICAgICBtX3RyYW5zaXRp
b25zLmFwcGVuZCh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBXaGVuIGlnbm9yaW5nIHNw
YWNlcywgdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBuZWVkIGxpbmUg
Ym94ZXMgc3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9yCi0gICAgLy8gaGFyZCBsaW5lIGJyZWFrcyB0
byBlbnN1cmUgdGhhdCB0aGV5J3JlIG5vdCBpZ25vcmVkLgotICAgIHZvaWQgZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLSAgICB7Ci0gICAg
ICAgIEl0ZXJhdG9yIHRyYW5zaXRpb24oMCwgJnJlbmRlcmVyLCAwKTsKLSAgICAgICAgc3RvcEln
bm9yaW5nU3BhY2VzKHRyYW5zaXRpb24pOwotICAgICAgICBzdGFydElnbm9yaW5nU3BhY2VzKHRy
YW5zaXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVf
dCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1l
bnQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygp
IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KLSAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQotICAgIHNpemVfdCBjdXJyZW50
VHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2
b2lkIHNldEN1cnJlbnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1
cnJlbnRUcmFuc2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2b2lkIGluY3JlbWVu
dEN1cnJlbnRUcmFuc2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2b2lk
IGRlY3JlbWVudE51bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5z
aXRpb25zLnNpemUoKSAtIDEpOyB9Ci0gICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQotcHJpdmF0ZToKLSAgICBWZWN0
b3I8SXRlcmF0b3I+IG1fdHJhbnNpdGlvbnM7Ci0gICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRp
b24geyAwIH07Ci19OwotCi0vLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0
eXBpY2FsbHkgdGhlIGVuZCBvZiBhIGxpbmUpIGNhbgotLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVz
ZWQgdG8gcmVzdGFydCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KLXN0cnVjdCBC
aWRpU3RhdHVzIHsKLSAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OwotCi0gICAgLy8gQ3JlYXRl
cyBhIEJpZGlTdGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBk
ZWZhdWx0IGRpcmVjdGlvbi4KLSAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBo
YXMgdHdvIHBvc3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMg
YXQgbGVhc3QgMTkuCi0gICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9v
bCBpc092ZXJyaWRlKQotICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gVV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUKQotICAgICAgICAsIGxhc3RT
dHJvbmcoZW9yKQotICAgICAgICAsIGxhc3QoZW9yKQotICAgICAgICAsIGNvbnRleHQoQmlkaUNv
bnRleHQ6OmNyZWF0ZShkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMCA6IDEsIGVv
ciwgaXNPdmVycmlkZSkpCi0gICAgewotICAgIH0KLQotICAgIEJpZGlTdGF0dXMoVUNoYXJEaXJl
Y3Rpb24gZW9yLCBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlvbiBsYXN0
LCBSZWZQdHI8QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKLSAgICAgICAgOiBlb3IoZW9yKQotICAg
ICAgICAsIGxhc3RTdHJvbmcobGFzdFN0cm9uZykKLSAgICAgICAgLCBsYXN0KGxhc3QpCi0gICAg
ICAgICwgY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBVQ2hh
ckRpcmVjdGlvbiBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKLSAgICBVQ2hhckRpcmVjdGlvbiBs
YXN0U3Ryb25nIHsgVV9PVEhFUl9ORVVUUkFMIH07Ci0gICAgVUNoYXJEaXJlY3Rpb24gbGFzdCB7
IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4dDsKLX07
Ci0KLXN0cnVjdCBCaWRpRW1iZWRkaW5nIHsKLSAgICBCaWRpRW1iZWRkaW5nKFVDaGFyRGlyZWN0
aW9uIGRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCi0gICAgICAgIDogZGly
ZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBzb3VyY2Uoc291cmNlKQotICAgIHsKLSAgICB9
Ci0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgQmlkaUVtYmVkZGluZ1NvdXJj
ZSBzb3VyY2U7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlTdGF0dXMm
IHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCi17Ci0gICAgcmV0dXJuIHN0YXR1
czEuZW9yID09IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0dXMyLmxhc3QgJiYg
c3RhdHVzMS5sYXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAqKHN0YXR1czEuY29u
dGV4dCkgPT0gKihzdGF0dXMyLmNvbnRleHQpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCi17
Ci0gICAgcmV0dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKLX0KLQotc3RydWN0IEJpZGlDaGFy
YWN0ZXJSdW4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEJp
ZGlDaGFyYWN0ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIEJpZGlDb250ZXh0
KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pCi0gICAgICAgIDogbV9zdGFydChz
dGFydCkKLSAgICAgICAgLCBtX3N0b3Aoc3RvcCkKLSAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRl
eHQtPm92ZXJyaWRlKCkpCi0gICAgewotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJf
TkVVVFJBTCkKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOwotCi0gICAg
ICAgIG1fbGV2ZWwgPSBjb250ZXh0LT5sZXZlbCgpOwotCi0gICAgICAgIC8vIGFkZCBsZXZlbCBv
ZiBydW4gKGNhc2VzIEkxICYgSTIpCi0gICAgICAgIGlmIChtX2xldmVsICUgMikgewotICAgICAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVf
QVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAg
ICAgICAgICAgbV9sZXZlbCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAgICAgbV9sZXZlbCsrOwot
ICAgICAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJl
Y3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAgICAgICAgICAgbV9sZXZlbCArPSAy
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQotICAgIHsKLSAg
ICAgICAgLy8gRGVsZXRlIHRoZSBsaW5rZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0
cnVjdG9yIHJlY3Vyc2lvbi4KLSAgICAgICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOwot
ICAgICAgICB3aGlsZSAobmV4dCkKLSAgICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1f
bmV4dCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0OyB9Ci0gICAgdW5zaWduZWQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQotICAg
IHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9Ci0gICAgYm9v
bCByZXZlcnNlZChib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYg
IXZpc3VhbGx5T3JkZXJlZDsgfQotICAgIGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9y
ZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJpZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9Ci0KLSAgICBC
aWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4g
V1RGTW92ZShtX25leHQpOyB9Ci0gICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRp
Q2hhcmFjdGVyUnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQotCi1wcml2
YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7Ci0KLXB1
YmxpYzoKLSAgICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIG1fc3RvcDsKLSAgICB1
bnNpZ25lZCBjaGFyIG1fbGV2ZWw7Ci0gICAgYm9vbCBtX292ZXJyaWRlIDogMTsKLSAgICBib29s
IG1faGFzSHlwaGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEg
bGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2Jq
ZWN0IG9uIDY0LWJpdC4KLX07Ci0KLWVudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgewotICAg
IE5vVmlzdWFsT3ZlcnJpZGUsCi0gICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKLSAgICBW
aXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlCi19OwotCi0vLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0
J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KLS8vIGh0dHA6
Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNl
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKLXB1YmxpYzoK
LSAgICBjb25zdCBJdGVyYXRvciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7
IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVy
YXRvciYgcG9zaXRpb24pIHsgbV9jdXJyZW50ID0gcG9zaXRpb247IH0KLSAgICB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRD
b3VudCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOwotICAgICAgICBtX25l
c3RlZElzb2xhdGVDb3VudCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7Ci0gICAgfQotCi0gICAgdm9p
ZCBpbmNyZW1lbnQoKSB7IHN0YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1l
bnRJbnRlcm5hbCgpOyB9Ci0KLSAgICBCaWRpQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdHVzLmNvbnRleHQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldENvbnRleHQoUmVmUHRy
PEJpZGlDb250ZXh0PiYmIGNvbnRleHQpIHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29u
dGV4dCk7IH0KLQotICAgIHZvaWQgc2V0TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7
IG1fc3RhdHVzLmxhc3QgPSBsYXN0RGlyOyB9Ci0gICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVD
aGFyRGlyZWN0aW9uIGxhc3RTdHJvbmdEaXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RT
dHJvbmdEaXI7IH0KLSAgICB2b2lkIHNldEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsg
bV9zdGF0dXMuZW9yID0gZW9yRGlyOyB9Ci0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25z
dCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9u
IGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQotCi0gICAgY29uc3QgQmlk
aVN0YXR1cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KLSAgICB2b2lkIHNl
dFN0YXR1cyhCaWRpU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQotCi0gICAg
V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGUoKSB7IHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KLQotICAgIC8v
IFRoZSBjdXJyZW50IGFsZ29yaXRobSBoYW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUgbGF5ZXIg
b2YgbmVzdGluZyBhdCBhIHRpbWUuCi0gICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVhY2ggaXNv
bGF0ZWQgc3Bhbiwgd2Ugd2lsbCB3YWxrIGludG8gKGFuZCBpZ25vcmUpIGFsbAotICAgIC8vIGNo
aWxkIGlzb2xhdGVkIHNwYW5zLgotICAgIHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25lc3RlZElz
b2xhdGVDb3VudCsrOyB9Ci0gICAgdm9pZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1fbmVzdGVk
SXNvbGF0ZUNvdW50ID49IDEpOyBtX25lc3RlZElzb2xhdGVDb3VudC0tOyB9Ci0gICAgYm9vbCBp
bklzb2xhdGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQotCi0gICAg
dm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSk7Ci0gICAgYm9v
bCBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwotCi0gICAgdm9pZCBjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBOb1Zp
c3VhbE92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7Ci0KLSAgICBCaWRpUnVu
TGlzdDxSdW4+JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyB1c2VkIHRvIGJlIHBhcnQgb2YgZGVsZXRlUnVucygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9s
YXRpb24uCi0gICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgotICAg
IHZvaWQgbWFya0N1cnJlbnRSdW5FbXB0eSgpIHsgbV9lbXB0eVJ1biA9IHRydWU7IH0KLQotICAg
IHZvaWQgc2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVu
Jiwgc2l6ZV90KTsKLSAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25G
b3JJc29sYXRlZFJ1bihSdW4mKTsKLQotcHJvdGVjdGVkOgotICAgIEJpZGlSZXNvbHZlckJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2
ZXJzIHN1YmNsYXNzaW5nIHRoaXMgbWV0aG9kLCB3ZSBzaG91bGQKLSAgICAvLyBwYXNzIGluIHNv
bWUgc29ydCBvZiBUcmFpdHMgb2JqZWN0IHdoaWNoIGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBm
b3IgYXBwZW5kaW5nLgotICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVk
Q2xhc3MmPigqdGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQotICAgIGJvb2wgbmVlZHNDb250
aW51ZVBhc3RFbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xh
c3MmPigqdGhpcykubmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpOyB9Ci0KLSAgICBJdGVy
YXRvciBtX2N1cnJlbnQ7Ci0gICAgLy8gc29yIGFuZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFu
ZCAiZW5kIG9mIHJ1biIgcmVzcGVjdGl2ZWx5IGFuZCBjb3JyZXBvbmQKLSAgICAvLyB0byBhYnJl
dmlhdGlvbnMgdXNlZCBpbiBVQkEgc3BlYzogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5
LyNCRDcKLSAgICBJdGVyYXRvciBtX3NvcjsgLy8gUG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0
ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgotICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8g
dGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KLSAgICBJdGVyYXRvciBtX2xh
c3Q7Ci0gICAgQmlkaVN0YXR1cyBtX3N0YXR1czsKLSAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVj
dGlvbiB7IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIEl0ZXJhdG9yIGVuZE9mTGluZTsKLSAgICBi
b29sIG1fcmVhY2hlZEVuZE9mTGluZSB7IGZhbHNlIH07Ci0gICAgSXRlcmF0b3IgbV9sYXN0QmVm
b3JlRVQ7IC8vIEJlZm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKLSAgICBib29s
IG1fZW1wdHlSdW4geyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJl
bG9uZyB0byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFzc2VkCi0gICAgLy8gaW50byBj
cmVhdGVCaWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KLSAgICBCaWRpUnVuTGlzdDxSdW4+
IG1fcnVuczsKLQotICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+IG1fd2hp
dGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLQotICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNv
dW50IHsgMCB9OwotICAgIEhhc2hNYXA8UnVuKiwgdW5zaWduZWQ+IG1fd2hpdGVzcGFjZUNvbGxh
cHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW47Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCByYWlz
ZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJEaXJlY3Rp
b24gdG8pOwotICAgIHZvaWQgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0
aW9uIGZyb20pOwotICAgIHZvaWQgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdM
ZXZlbCgpOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24o
VUNoYXJEaXJlY3Rpb24pOwotICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7Ci0gICAg
dm9pZCBpbmNyZW1lbnRJbnRlcm5hbCgpIHsgbV9jdXJyZW50LmluY3JlbWVudCgpOyB9Ci0gICAg
dm9pZCBhcHBlbmRSdW5JbnRlcm5hbCgpOwotICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJ
bnRlcm5hbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFZlY3RvcjxCaWRpRW1iZWRk
aW5nLCA4PiBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KLWNsYXNzIEJpZGlSZXNvbHZlciA6
IHB1YmxpYyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZlcjxJdGVy
YXRvciwgUnVuPj4gewotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgSXNvbGF0ZVJ1bj4KLWNsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRl
IDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyV2l0
aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKLXB1YmxpYzoKLSAgICB+Qmlk
aVJlc29sdmVyV2l0aElzb2xhdGUoKTsKLQotICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKTsK
LSAgICB2b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7Ci0gICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFz
dEVuZEludGVybmFsKCkgY29uc3Q7Ci0gICAgVmVjdG9yPElzb2xhdGVSdW4+JiBpc29sYXRlZFJ1
bnMoKSB7IHJldHVybiBtX2lzb2xhdGVkUnVuczsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxJ
c29sYXRlUnVuPiBtX2lzb2xhdGVkUnVuczsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+Ci1pbmxpbmUgQmlkaVJlc29s
dmVyV2l0aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVzb2x2ZXJX
aXRoSXNvbGF0ZSgpCi17Ci0gICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgcmVzb2x2ZXIgc2hvdWxk
IGhhdmUgaGFuZGxlZCB0aGUgaXNvbGF0ZWQgcnVucy4KLSAgICBBU1NFUlQobV9pc29sYXRlZFJ1
bnMuaXNFbXB0eSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJh
dG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKLXsKLSAgICBpZiAo
IW1fZW1wdHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSBtX3Nvci5vZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9l
b3Iub2Zmc2V0KCk7Ci0KLSAgICAgICAgaWYgKCFlbmRPZkxpbmUuYXRFbmQoKSAmJiBlbmRPZmZz
ZXQgPj0gZW5kT2ZMaW5lLm9mZnNldCgpKSB7Ci0gICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxp
bmUgPSB0cnVlOwotICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2ZMaW5lLm9mZnNldCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKLSAgICAg
ICAgICAgIG1fcnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxSdW4+KHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQgKyAxLCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7Ci0KLSAgICAgICAgbV9lb3IuaW5j
cmVtZW50KCk7Ci0gICAgICAgIG1fc29yID0gbV9lb3I7Ci0gICAgfQotCi0gICAgbV9kaXJlY3Rp
b24gPSBVX09USEVSX05FVVRSQUw7Ci0gICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFM
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFt
ZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVy
aXZlZENsYXNzPjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRkaW5nU291cmNl
IHNvdXJjZSkKLXsKLSAgICAvLyBJc29sYXRlZCBzcGFucyBjb21wdXRlIGJhc2UgZGlyZWN0aW9u
YWxpdHkgZHVyaW5nIHRoZWlyIG93biBVQkEgcnVuLgotICAgIC8vIERvIG5vdCBpbnNlcnQgZmFr
ZSBlbWJlZCBjaGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4gaXNvbGF0ZWQgc3Bhbi4KLSAgICBB
U1NFUlQoIWluSXNvbGF0ZSgpKTsKLQotICAgIEFTU0VSVChkaXIgPT0gVV9QT1BfRElSRUNUSU9O
QUxfRk9STUFUIHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpciA9PSBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJ
TkcgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSk7Ci0gICAgbV9jdXJyZW50RXhw
bGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIsIHNvdXJjZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFt
ZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVy
aXZlZENsYXNzPjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpCi17
Ci0gICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRF
bmQoKSk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFS
SwotICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9VTkRBUllfTkVVVFJBTAotICAgICAg
ICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKLSAgICAgICAg
JiYgbV9zdGF0dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCi0gICAgICAgICYm
IG1fc3RhdHVzLmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIAotICAgICAgICAmJiBt
X3N0YXR1cy5sYXN0ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQotICAgICAgICAmJiBtX3N0
YXR1cy5sYXN0ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCk7Ci0gICAgaWYgKG1fZGlyZWN0
aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5s
YXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRf
VE9fTEVGVDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwg
dHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBS
dW4sIERlcml2ZWRDbGFzcz46Omxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVj
dGlvbiBmcm9tKQotewotICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsK
LSAgICAgICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwotICAg
ICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8g
YXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlk
aS5sYXN0Ci0gICAgICAgIGlmIChmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAg
ICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAotICAgICAgICAgICAg
aWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKLSAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAg
ICAgICBtX2RpcmVjdGlvbiA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0
dXMuZW9yID09IFVfQVJBQklDX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVG
VF9UT19SSUdIVCkgewotICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgfQotICAgICAgICBtX2VvciA9IG1f
bGFzdDsKLSAgICB9Ci0KLSAgICBhcHBlbmRSdW4oKTsKLSAgICBtX2VtcHR5UnVuID0gdHJ1ZTsK
LQotICAgIC8vIHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVy
IGxldmVsIChydWxlIFgxMCkKLSAgICBzZXRMYXN0RGlyKGZyb20pOwotICAgIHNldExhc3RTdHJv
bmdEaXIoZnJvbSk7Ci0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lk
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBs
aWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRv
KQotewotICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKLSAgICAgICAg
Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwotICAgICAgICAvLyBi
aWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRo
ZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0Ci0g
ICAgICAgIGlmICh0byA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgIC8vIGJpZGku
c29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKLSAgICAgICAgICAgIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0
dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0
YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hU
ICYmIGZyb20gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05V
TUJFUgotICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAm
JiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJ
R0hUX1RPX0xFRlQpKQotICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFO
X05VTUJFUiAmJiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9t
ID09IFVfUklHSFRfVE9fTEVGVCkpIHsKLSAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9lb3IgPSBtX2xhc3Q7Ci0gICAgfQotCi0gICAgYXBwZW5kUnVuKCk7Ci0gICAgbV9lbXB0eVJ1
biA9IHRydWU7Ci0KLSAgICBzZXRMYXN0RGlyKHRvKTsKLSAgICBzZXRMYXN0U3Ryb25nRGlyKHRv
KTsKLSAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLWJvb2wgQmlkaVJlc29s
dmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVk
ZGluZygpCi17Ci0gICAgLy8gV2hlbiB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmlu
ZyB0aGUgcGFyZW50IGNvbnRleHQgd2hpY2gKLSAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0
aGUgaXNvbGF0ZWQgY29udGVudCwgaW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCi0gICAgLy8g
V2Ugc2hvdWxkIG5ldmVyIGFjY3J1ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92
ZXIgaXNvbGF0ZWQgY29udGVudC4KLSAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVu
dEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKTsKLQotICAgIGF1dG8gZnJvbUxl
dmVsID0gY29udGV4dCgpLT5sZXZlbCgpOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gdG9Db250
ZXh0ID0gY29udGV4dCgpOwotCi0gICAgZm9yIChhdXRvJiBlbWJlZGRpbmcgOiBtX2N1cnJlbnRF
eHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlKSB7Ci0gICAgICAgIGlmIChlbWJlZGRpbmcuZGlyZWN0
aW9uID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkgewotICAgICAgICAgICAgaWYgKGF1dG8q
IHBhcmVudENvbnRleHQgPSB0b0NvbnRleHQtPnBhcmVudCgpKQotICAgICAgICAgICAgICAgIHRv
Q29udGV4dCA9IHBhcmVudENvbnRleHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hU
X1RPX0xFRlRfRU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUX09WRVJSSURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsKLSAgICAg
ICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfTEVGVF9UT19S
SUdIVF9PVkVSUklERSB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9P
VkVSUklERTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSB0b0NvbnRleHQtPmxl
dmVsKCk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKLSAg
ICAgICAgICAgICAgICBsZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobGV2ZWwpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJFdmVuTGV2ZWwo
bGV2ZWwpOwotICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCi0gICAgICAgICAgICAgICAgdG9D
b250ZXh0ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwg
ZW1iZWRkaW5nLnNvdXJjZSwgdG9Db250ZXh0LmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGF1dG8gdG9MZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKLQotICAgIGlmICh0b0xldmVs
ID4gZnJvbUxldmVsKQotICAgICAgICByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxl
dmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCwgdG9MZXZlbCAlIDIg
PyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOwotICAgIGVsc2UgaWYgKHRvTGV2
ZWwgPCBmcm9tTGV2ZWwpCi0gICAgICAgIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9t
TGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKLQotICAgIHNl
dENvbnRleHQoV1RGTW92ZSh0b0NvbnRleHQpKTsKLQotICAgIG1fY3VycmVudEV4cGxpY2l0RW1i
ZWRkaW5nU2VxdWVuY2UuY2xlYXIoKTsKLQotICAgIHJldHVybiBmcm9tTGV2ZWwgIT0gdG9MZXZl
bDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBEZXJpdmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24o
VUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudCkKLXsKLSAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsK
LSAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgIGlmIChtX3N0
YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgbV9zdGF0dXMubGFz
dCA9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgIGNhc2UgVV9DT01NT05fTlVNQkVS
X1NFUEFSQVRPUjoKLSAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgY2FzZSBVX1dI
SVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgIHN3
aXRjaCAobV9zdGF0dXMubGFzdCkgewotICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKLSAg
ICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKLSAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgY2FzZSBV
X0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9zdGF0
dXMubGFzdCA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFVfRElSX05PTl9TUEFDSU5HX01BUks6Ci0gICAgY2FzZSBVX0JPVU5EQVJZX05FVVRS
QUw6Ci0gICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgotICAgIGNhc2UgVV9MRUZU
X1RPX1JJR0hUX0VNQkVERElORzoKLSAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToK
LSAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKLSAgICBjYXNlIFVfUE9QX0RJUkVD
VElPTkFMX0ZPUk1BVDoKLSAgICAgICAgLy8gaWdub3JlIHRoZXNlCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OwotICAgIH0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZl
ZENsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJp
dmVkQ2xhc3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQotewotICAgIHVuc2lnbmVkIGNoYXIg
bGV2ZWxMb3cgPSAxMjg7Ci0gICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOwotICAgIGZv
ciAoUnVuKiBydW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkg
ewotICAgICAgICBsZXZlbEhpZ2ggPSBzdGQ6Om1heChydW4tPmxldmVsKCksIGxldmVsSGlnaCk7
Ci0gICAgICAgIGxldmVsTG93ID0gc3RkOjptaW4ocnVuLT5sZXZlbCgpLCBsZXZlbExvdyk7Ci0g
ICAgfQotCi0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwy
IGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgotICAgIC8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cnRzL3RyOS8jTDIKLSAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3VuZCBpbiB0
aGUgdGV4dCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCi0gICAgLy8gcmV2
ZXJzZSBhbnkgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRo
YXQgbGV2ZWwgb3IgaGlnaGVyLgotCi0gICAgLy8gUmV2ZXJzaW5nIGlzIG9ubHkgZG9uZSB1cCB0
byB0aGUgbG93ZXN0IG9kZCBsZXZlbC4KLSAgICBpZiAoIShsZXZlbExvdyAlIDIpKQotICAgICAg
ICBsZXZlbExvdysrOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBtX3J1bnMucnVuQ291bnQoKSAt
IDE7Ci0KLSAgICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7Ci0gICAgICAgIHVuc2ln
bmVkIGkgPSAwOwotICAgICAgICBSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOwotICAgICAg
ICB3aGlsZSAoaSA8IGNvdW50KSB7Ci0gICAgICAgICAgICBmb3IgKDtpIDwgY291bnQgJiYgcnVu
ICYmIHJ1bi0+bGV2ZWwoKSA8IGxldmVsSGlnaDsgaSsrKQotICAgICAgICAgICAgICAgIHJ1biA9
IHJ1bi0+bmV4dCgpOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOwotICAgICAgICAg
ICAgZm9yICg7aSA8PSBjb3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpID49IGxldmVsSGlnaDsg
aSsrKQotICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dCgpOwotICAgICAgICAgICAgdW5z
aWduZWQgZW5kID0gaSAtIDE7Ci0gICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoc3RhcnQs
IGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbGV2ZWxIaWdoLS07Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xh
c3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6
Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlv
bk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWspCi17Ci0gICAgQVNTRVJUKG1f
ZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCk7Ci0KLSAgICBpZiAob3ZlcnJpZGUgIT0gTm9W
aXN1YWxPdmVycmlkZSkgewotICAgICAgICBtX2VtcHR5UnVuID0gZmFsc2U7Ci0gICAgICAgIG1f
c29yID0gbV9jdXJyZW50OwotICAgICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci0gICAgICAgIHdo
aWxlIChtX2N1cnJlbnQgIT0gZW5kICYmICFtX2N1cnJlbnQuYXRFbmQoKSkgewotICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBpbmNyZW1lbnQoKTsKLSAgICAgICAg
fQotICAgICAgICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRlID09IFZpc3VhbExlZnRUb1JpZ2h0T3Zl
cnJpZGUgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgIGFwcGVu
ZFJ1bigpOwotICAgICAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1
bigpKTsKLSAgICAgICAgaWYgKG92ZXJyaWRlID09IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUg
JiYgbV9ydW5zLnJ1bkNvdW50KCkpCi0gICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoMCwg
bV9ydW5zLnJ1bkNvdW50KCkgLSAxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
ZW1wdHlSdW4gPSB0cnVlOwotCi0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotCi0gICAgbV9sYXN0
ID0gbV9jdXJyZW50OwotICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOwotICAgIEJpZGlSZXNvbHZl
ckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPiBzdGF0ZUF0RW5kOwotCi0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudDsKLSAgICAgICAg
aWYgKHBhc3RFbmQgJiYgKGhhcmRMaW5lQnJlYWsgfHwgbV9jdXJyZW50LmF0RW5kKCkpKSB7Ci0g
ICAgICAgICAgICBCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKLSAgICAgICAgICAgIGlmICho
YXJkTGluZUJyZWFrKSB7Ci0gICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUg
VW5pY29kZSBCaWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAotICAgICAgICAgICAgICAg
IC8vIFdpbklFIGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyByZXNldCBi
aWRpIHN0YXRlCi0gICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBiaWRpIGNv
bnRyb2wgY2hhcmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCi0gICAgICAgICAgICAgICAgLy8g
RE9NIG5vZGVzIHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5Ci0gICAgICAgICAgICAgICAg
c3RhdGVBdEVuZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGlu
Z0NvbnRleHRzKCkpOwotCi0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRlQXRFbmQu
Y29udGV4dCgpLT5kaXIoKTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVvckRpcihk
aXJDdXJyZW50KTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIoZGlyQ3Vy
cmVudCk7Ci0gICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGlyKGRpckN1
cnJlbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYy0+
cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKLSAgICAgICAg
ICAgICAgICBkaXJDdXJyZW50ID0gYy0+ZGlyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlvbigpOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQotICAgICAgICAgICAgICAgICAg
ICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKLSAgICAgICAgICAg
ICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCi0gICAg
ICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURF
Ci0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX09W
RVJSSURFCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9QT1BfRElSRUNU
SU9OQUxfRk9STUFUKQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBjb250ZXh0KCktPmRp
cigpOwotICAgICAgICAgICAgZWxzZSBpZiAoZGlyQ3VycmVudCA9PSBVX0RJUl9OT05fU1BBQ0lO
R19NQVJLKQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBtX3N0YXR1cy5sYXN0OwotICAg
ICAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIC8vIE91ciBXaW5kb3dzIGJ1aWxk
IGhhc24ndCB1cGRhdGVkIGl0cyBoZWFkZXJzIGZyb20gSUNVIDYuMSwgd2hpY2ggZG9lc24ndCBo
YXZlIHRoZXNlIHN5bWJvbHMuCi0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVfRklSU1Rf
U1RST05HX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMTkpOwotICAgICAg
ICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX0xFRlRfVE9fUklHSFRfSVNPTEFURSA9IHN0YXRpY19j
YXN0PFVDaGFyRGlyZWN0aW9uPigyMCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVf
UklHSFRfVE9fTEVGVF9JU09MQVRFID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIxKTsK
LSAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSA9
IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMik7Ci0jZW5kaWYKLSAgICAgICAgLy8gV2Ug
aWdub3JlIGFsbCBjaGFyYWN0ZXIgZGlyZWN0aW9uYWxpdHkgd2hpbGUgaW4gdW5pY29kZS1iaWRp
OiBpc29sYXRlIHNwYW5zLgotICAgICAgICAvLyBXZSdsbCBoYW5kbGUgb3JkZXJpbmcgdGhlIGlz
b2xhdGVkIGNoYXJhY3RlcnMgaW4gYSBzZWNvbmQgcGFzcy4KLSAgICAgICAgaWYgKGluSXNvbGF0
ZSgpIHx8IGRpckN1cnJlbnQgPT0gVV9GSVJTVF9TVFJPTkdfSVNPTEFURSB8fCBkaXJDdXJyZW50
ID09IFVfTEVGVF9UT19SSUdIVF9JU09MQVRFIHx8IGRpckN1cnJlbnQgPT0gVV9SSUdIVF9UT19M
RUZUX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX1BPUF9ESVJFQ1RJT05BTF9JU09MQVRFKQot
ICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfT1RIRVJfTkVVVFJBTDsKLQotICAgICAgICBBU1NF
UlQobV9zdGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJBTCB8fCBtX2Vvci5hdEVuZCgpKTsKLSAg
ICAgICAgc3dpdGNoIChkaXJDdXJyZW50KSB7Ci0KLSAgICAgICAgLy8gZW1iZWRkaW5nIGFuZCBv
dmVycmlkZXMgKFgxLVg5IGluIHRoZSBCaWRpIHNwZWNzKQotICAgICAgICBjYXNlIFVfUklHSFRf
VE9fTEVGVF9FTUJFRERJTkc6Ci0gICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUX0VNQkVERElO
RzoKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU6Ci0gICAgICAgIGNhc2Ug
VV9MRUZUX1RPX1JJR0hUX09WRVJSSURFOgotICAgICAgICBjYXNlIFVfUE9QX0RJUkVDVElPTkFM
X0ZPUk1BVDoKLSAgICAgICAgICAgIGVtYmVkKGRpckN1cnJlbnQsIEZyb21Vbmljb2RlKTsKLSAg
ICAgICAgICAgIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAvLyBzdHJvbmcgdHlwZXMKLSAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6
Ci0gICAgICAgICAgICBzd2l0Y2gobV9zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNh
c2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAg
ICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25n
ICE9IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9DT01N
T05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVV
VFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVf
V0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJB
TDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05V
TUJFUikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcg
IT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdz
IGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24g
PSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAh
PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQXJhYmljIG51bWJlcnMgYXJlIGFsd2F5cyBvbiBhIGhp
Z2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQoKS0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdo
aWNoIGlzIFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0
U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9s
YXN0IHN0dWZmIHRha2VzIGVtYmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xFRlRf
VE9fUklHSFQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RPX1JJ
R0hUOwotICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFz
dCkgewotICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAgICAg
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJ
Q19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAg
ICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVG
VDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVS
TUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6
Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVO
VF9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6
Ci0gICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAm
JiBjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBV
X0FSQUJJQ19OVU1CRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRf
VE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigp
ID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9
IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBV
X1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3Vy
cmVudDsKLSAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6Ci0KLSAgICAgICAgY2Fz
ZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25n
ICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBsYXN0
IHN0cm9uZyB3YXMgQUwgY2hhbmdlIEVOIHRvIEFOCi0gICAgICAgICAgICAgICAgc3dpdGNoICht
X3N0YXR1cy5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVB
Tl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGQUxMVEhST1VH
SDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9S
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfV0hJ
VEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRS
QUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BF
QU5fTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxh
c3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBzbyB0aGUgbmV1dHJh
bHMgc2hvdWxkIGJlIFIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1p
bmF0ZSB0aGUgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX3N0YXR1cy5sYXN0ID09
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPyBtX2xhc3RCZWZvcmVFVCA6IG1fbGFzdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RP
X0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhIG5ldyBFTiBydW4uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1C
RVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBBTiBydW4uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNvbnRleHQo
KS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2UgYW4gUiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID8g
bV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9u
ZyA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
eHRlbmQgdGhlIFIgcnVuIHRvIGluY2x1ZGUgdGhlIG5ldXRyYWxzLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9U
RVJNSU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgICAgICBtX3N0YXR1cy5l
b3IgPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICBpZiAobV9kaXJlY3Rpb24g
PT0gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
TEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAg
ICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdI
VDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RP
X1JJR0hUKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRf
VE9fTEVGVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICAg
ICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05V
TUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9BUkFCSUNfTlVNQkVSKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfVEVSTUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoK
LSAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAg
IGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfV0hJVEVf
U1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1C
RVIgJiYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNvbnRleHQo
KS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8
IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0dXMubGFzdFN0cm9u
ZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xF
RlQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIHJ1biBiZWZv
cmUgdGhlIG5ldXRyYWxzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRyYWxz
LgotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kaXJlY3Rpb24gPT0gVV9PVEhFUl9O
RVVUUkFMKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5s
YXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRf
VE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgbV9zdGF0
dXMuZW9yID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09
IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklD
X05VTUJFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVN
QkVSX1NFUEFSQVRPUjoKLSAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlO
QVRPUjoKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0ID09IFVfRVVST1BFQU5fTlVNQkVS
KSB7Ci0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgICAgIG1fc3RhdHVz
LmVvciA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3Qg
IT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUikKLSAgICAgICAgICAgICAgICBtX2xhc3RC
ZWZvcmVFVCA9IG1fZW1wdHlSdW4gPyBtX2VvciA6IG1fbGFzdDsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIC8vIGJvdW5kYXJ5IG5ldXRyYWxzIHNob3VsZCBiZSBpZ25vcmVkCi0gICAg
ICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgotICAgICAgICAgICAgaWYgKG1fZW9yID09IG1f
bGFzdCkKLSAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgLy8gbmV1dHJhbHMKLSAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFS
QVRPUjoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIHdlIGRvIHdpdGggbmV3bGluZSBh
bmQgcGFyYWdyYXBoIHNlcGFyYXRvcnMgdGhhdCBjb21lIHRvIGhlcmU/Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBydWxlIEwxLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXN0RW5kICYm
IChtX2VvciA9PSBtX2N1cnJlbnQgfHwgIW5lZWRzQ29udGludWVQYXN0RW5kKCkpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fcmVhY2hlZEVuZE9mTGluZSkgewotICAgICAgICAgICAgICAgIG1fZW9y
ID0gZW5kT2ZMaW5lOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMuZW9yKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0FS
QUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IG1fc3Rh
dHVzLmVvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVG
VF9UT19SSUdIVCA6IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaGFuZGxlIG5ldXRyYWxzIGluIHRoaXMgY2FzZS4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4MTcKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudCA9IGVuZDsKLSAgICAg
ICAgICAgIG1fc3RhdHVzID0gc3RhdGVBdEVuZC5tX3N0YXR1czsKLSAgICAgICAgICAgIG1fc29y
ID0gc3RhdGVBdEVuZC5tX3NvcjsgCi0gICAgICAgICAgICBtX2VvciA9IHN0YXRlQXRFbmQubV9l
b3I7Ci0gICAgICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKLSAgICAgICAgICAg
IG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lOwotICAg
ICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBzdGF0ZUF0RW5kLm1fbGFzdEJlZm9yZUVUOwotICAg
ICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKLSAgICAgICAgICAg
IG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oZGly
Q3VycmVudCk7Ci0gICAgICAgIG1fbGFzdCA9IG1fY3VycmVudDsKLQotICAgICAgICBpZiAobV9l
bXB0eVJ1bikgewotICAgICAgICAgICAgbV9zb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBt
X2VtcHR5UnVuID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmNyZW1lbnQoKTsKLSAg
ICAgICAgaWYgKCFtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgYm9vbCBjb21taXR0ZWQgPSBjb21taXRFeHBsaWNpdEVtYmVkZGluZygp
OwotICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCAmJiBwYXN0RW5kKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jdXJyZW50ID0gZW5kOwotICAgICAgICAgICAgICAgIG1fc3RhdHVzID0gc3RhdGVBdEVu
ZC5tX3N0YXR1czsKLSAgICAgICAgICAgICAgICBtX3NvciA9IHN0YXRlQXRFbmQubV9zb3I7IAot
ICAgICAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsKLSAgICAgICAgICAgICAg
ICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKLSAgICAgICAgICAgICAgICBtX3JlYWNoZWRF
bmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgICAg
ICBtX2xhc3RCZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQ7Ci0gICAgICAgICAg
ICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKLSAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcGFzdEVuZCAmJiAobV9j
dXJyZW50ID09IGVuZCB8fCBtX2N1cnJlbnQuYXRFbmQoKSkpIHsKLSAgICAgICAgICAgIGlmICht
X2VtcHR5UnVuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc3RhdGVBdEVu
ZC5tX3N0YXR1cyA9IG1fc3RhdHVzOwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX3NvciA9IG1f
c29yOwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VvciA9IG1fZW9yOwotICAgICAgICAgICAg
c3RhdGVBdEVuZC5tX2xhc3QgPSBtX2xhc3Q7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fcmVh
Y2hlZEVuZE9mTGluZSA9IG1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgIHN0YXRlQXRF
bmQubV9sYXN0QmVmb3JlRVQgPSBtX2xhc3RCZWZvcmVFVDsKLSAgICAgICAgICAgIHN0YXRlQXRF
bmQubV9lbXB0eVJ1biA9IG1fZW1wdHlSdW47Ci0gICAgICAgICAgICBlbmRPZkxpbmUgPSBtX2xh
c3Q7Ci0gICAgICAgICAgICBwYXN0RW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1fcnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKG1fcnVucy5sYXN0UnVuKCkpOwotICAgIHJlb3Jk
ZXJSdW5zRnJvbUxldmVscygpOwotICAgIGVuZE9mTGluZSA9IEl0ZXJhdG9yKCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRD
bGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+
OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1
biwgc2l6ZV90IHRyYW5zaXRpb24pCi17Ci0gICAgQVNTRVJUKCFtX3doaXRlc3BhY2VDb2xsYXBz
aW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmNvbnRhaW5zKCZydW4pKTsKLSAgICBtX3doaXRl
c3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmFkZCgmcnVuLCB0cmFuc2l0
aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlw
ZW5hbWUgRGVyaXZlZENsYXNzPgotdW5zaWduZWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBEZXJpdmVkQ2xhc3M+Ojp3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25Gb3JJc29sYXRlZFJ1bi50YWtlKCZydW4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5M
aXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ODM4YTI1MmM1YzMyNGRkMzA3ZmQ4ZmU1YjYyY2Q0
OTM5OTJiZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHQgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBCaWRpUnVu
TGlzdF9oCi0jZGVmaW5lIEJpZGlSdW5MaXN0X2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1jbGFz
cyBCaWRpUnVuTGlzdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxpc3QpOwot
cHVibGljOgotICAgIEJpZGlSdW5MaXN0KCkKLSAgICAgICAgOiBtX2xhc3RSdW4obnVsbHB0cikK
LSAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKLSAgICAgICAgLCBtX3J1bkNv
dW50KDApCi0gICAgewotICAgIH0KLQotICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNvbHZlciBu
byBsb25nZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCi0gICAgLy8gdGhlbiB+QmlkaVJ1bkxpc3Qg
c2hvdWxkIGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCi0KLSAgICBSdW4qIGZpcnN0
UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQotICAgIFJ1biogbGFzdFJ1
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQotICAgIFJ1biogbG9naWNhbGx5TGFzdFJ1
bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQotICAgIHVuc2lnbmVkIHJ1
bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQotCi0gICAgdm9pZCBhcHBlbmRS
dW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7Ci0gICAgdm9pZCBwcmVwZW5kUnVuKHN0ZDo6dW5p
cXVlX3B0cjxSdW4+JiYpOwotCi0gICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7Ci0gICAgdm9p
ZCBtb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKik7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9p
ZCByZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKLSAgICB2b2lkIHJl
b3JkZXJSdW5zRnJvbUxldmVscygpOwotCi0gICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0UnVuKFJ1
biogcnVuKSB7IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQotCi0gICAgdm9pZCByZXBsYWNl
UnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpOwot
Ci1wcml2YXRlOgotCi0gICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQtbGlzdCwg
d2hlcmUgdGhlIGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQgYXJlIG9m
IHR5cGUgc3RkOjp1bmlxdWVfcHRyKS4KLSAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJlbG93IHBv
aW50IGludG8gdGhlIHNpbmdseS1saW5rZWQtbGlzdC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVu
PiBtX2ZpcnN0UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAotICAgIFJ1biogbV9sYXN0UnVu
OwotICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOwotICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVu
Pjo6YXBwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQotewotICAgIGlmICghbV9m
aXJzdFJ1bikgewotICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOwotICAgICAgICBt
X2xhc3RSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbGFz
dFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHJ1bikpOwotICAgICAgICBtX2xhc3RSdW4gPSBtX2xhc3RS
dW4tPm5leHQoKTsKLSAgICB9Ci0gICAgbV9ydW5Db3VudCsrOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihzdGQ6OnVu
aXF1ZV9wdHI8UnVuPiYmIHJ1bikKLXsKLSAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsKLQotICAg
IGlmICghbV9sYXN0UnVuKQotICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7Ci0gICAgZWxz
ZQotICAgICAgICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7Ci0gICAgbV9maXJz
dFJ1biA9IFdURk1vdmUocnVuKTsKLSAgICBtX3J1bkNvdW50Kys7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQoUnVu
KiBydW4pCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4pOwotICAgIEFTU0VSVChtX2xhc3RSdW4p
OwotICAgIEFTU0VSVChydW4tPm5leHQoKSk7Ci0KLSAgICBSdW4qIHByZXZpb3VzID0gbnVsbHB0
cjsKLSAgICBSdW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIHdoaWxlIChjdXJy
ZW50ICE9IHJ1bikgewotICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJl
bnQgPSBwcmV2aW91cy0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmICghcHJldmlvdXMpIHsKLSAg
ICAgICAgQVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7Ci0gICAg
ICAgIG1fZmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOwotICAgICAgICBt
X2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VO
ZXh0KCk7Ci0gICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0KCkpOwot
ICAgICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3Zl
UnVuVG9CZWdpbm5pbmcoUnVuKiBydW4pCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4pOwotICAg
IEFTU0VSVChtX2xhc3RSdW4pOwotICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5nZXQoKSk7
Ci0KLSAgICBSdW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICBSdW4qIGN1cnJl
bnQgPSBwcmV2aW91cy0+bmV4dCgpOwotICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikgewotICAg
ICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4
dCgpOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3Vz
LT50YWtlTmV4dCgpOwotICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQoKSk7Ci0g
ICAgaWYgKHJ1biA9PSBtX2xhc3RSdW4pCi0gICAgICAgIG1fbGFzdFJ1biA9IHByZXZpb3VzOwot
Ci0gICAgdGFyZ2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOwotICAgIG1fZmlyc3RS
dW4gPSBXVEZNb3ZlKHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci12b2lkIEJp
ZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1
bkxpc3Q8UnVuPiYgbmV3UnVucykKLXsKLSAgICBBU1NFUlQobmV3UnVucy5ydW5Db3VudCgpKTsK
LSAgICBBU1NFUlQobV9maXJzdFJ1bik7Ci0gICAgQVNTRVJUKHRvUmVwbGFjZSk7Ci0KLSAgICBt
X3J1bkNvdW50ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRpbmcgdGhl
IG5ldyBydW5zIGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCi0KLSAgICAvLyBGaXggdXAgYW55IHBv
aW50ZXJzIHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCi0gICAgaWYgKG1fbGFzdFJ1biA9PSB0b1Jl
cGxhY2UpCi0gICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOwotICAgIGlmICht
X2xvZ2ljYWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQotICAgICAgICBtX2xvZ2ljYWxseUxhc3RS
dW4gPSBuZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKLQotICAgIGlmIChtX2ZpcnN0UnVuLmdl
dCgpID09IHRvUmVwbGFjZSkgewotICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dCht
X2ZpcnN0UnVuLT50YWtlTmV4dCgpKTsKLSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUobmV3
UnVucy5tX2ZpcnN0UnVuKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGaW5kIHRoZSBydW4g
anVzdCBiZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KLSAgICAgICAgUnVu
KiBwcmV2aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChwcmV2aW91
c1J1bi0+bmV4dCgpICE9IHRvUmVwbGFjZSkKLSAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcHJl
dmlvdXNSdW4tPm5leHQoKTsKLSAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKLQotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5leHQoKTsK
LSAgICAgICAgcHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4p
KTsKLSAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtlTmV4dCgp
KTsKLSAgICB9Ci0KLSAgICBuZXdSdW5zLmNsZWFyKCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
dW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKLXsKLSAgICBtX2ZpcnN0UnVuID0g
bnVsbHB0cjsKLSAgICBtX2xhc3RSdW4gPSBudWxscHRyOwotICAgIG1fbG9naWNhbGx5TGFzdFJ1
biA9IG51bGxwdHI7Ci0gICAgbV9ydW5Db3VudCA9IDA7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
dW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQpCi17Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZW5kIDwgbV9ydW5Db3VudCk7
Ci0KLSAgICAvLyBHZXQgdGhlIGl0ZW0gYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgcnVucyB0byBy
ZXZlcnNlIGFuZCBwdXQgaXQgaW4KLSAgICAvLyB8YmVmb3JlU3RhcnR8LiB8Y3Vycnwgc2hvdWxk
IHBvaW50IHRvIHRoZSBmaXJzdCBydW4gdG8gcmV2ZXJzZS4KLSAgICBSdW4qIGN1cnIgPSBtX2Zp
cnN0UnVuLmdldCgpOwotICAgIFJ1biogYmVmb3JlU3RhcnQgPSBudWxscHRyOwotICAgIHVuc2ln
bmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgc3RhcnQ7ICsraSkgewotICAgICAgICBiZWZvcmVT
dGFydCA9IGN1cnI7Ci0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7Ci0gICAgfQotICAgIFJ1
biogc3RhcnRSdW4gPSBjdXJyOwotCi0gICAgZm9yICg7IGkgPCBlbmQ7ICsraSkKLSAgICAgICAg
Y3VyciA9IGN1cnItPm5leHQoKTsKLQotICAgIGlmICghY3Vyci0+bmV4dCgpKQotICAgICAgICBt
X2xhc3RSdW4gPSBzdGFydFJ1bjsKLQotICAgIC8vIFN0YW5kYXJkICJzbGlkaW5nIHdpbmRvdyIg
b2YgMyBwb2ludGVycwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHByZXZpb3VzID0gY3Vyci0+
dGFrZU5leHQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBjdXJyZW50ID0gYmVmb3JlU3Rh
cnQgPyBiZWZvcmVTdGFydC0+dGFrZU5leHQoKSA6IFdURk1vdmUobV9maXJzdFJ1bik7Ci0gICAg
d2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbmV4dCA9IGN1
cnJlbnQtPnRha2VOZXh0KCk7Ci0gICAgICAgIGN1cnJlbnQtPnNldE5leHQoV1RGTW92ZShwcmV2
aW91cykpOwotICAgICAgICBwcmV2aW91cyA9IFdURk1vdmUoY3VycmVudCk7Ci0gICAgICAgIGN1
cnJlbnQgPSBXVEZNb3ZlKG5leHQpOwotICAgIH0KLQotICAgIGlmIChiZWZvcmVTdGFydCkKLSAg
ICAgICAgYmVmb3JlU3RhcnQtPnNldE5leHQoV1RGTW92ZShwcmV2aW91cykpOwotICAgIGVsc2UK
LSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUocHJldmlvdXMpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCaWRpUnVuTGlzdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGI2NTYzYmM4YWVlNmExZmRkMjRiMTI2ZTdlMWRmZmZlNDEzZTM4Yi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaUdyb3VwQ2FuZGlk
YXRlKFVDaGFyMzIgY2hhcmFjdGVyKQotewotI2RlZmluZSBTWU1CT0xTX0FORF9QSUNUT0dSQVBI
U19FWFRFTkRFRF9BIDI5OAotI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNjQKLSNkZWZp
bmUgVUJMT0NLX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EgU1lNQk9MU19BTkRf
UElDVE9HUkFQSFNfRVhURU5ERURfQQotI2Vsc2UKLXN0YXRpY19hc3NlcnQoVUJMT0NLX1NZTUJP
TFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EgPT0gU1lNQk9MU19BTkRfUElDVE9HUkFQSFNf
RVhURU5ERURfQSk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8aW50Pih1Ymxv
Y2tfZ2V0Q29kZShjaGFyYWN0ZXIpKSkgewotICAgIGNhc2UgVUJMT0NLX01JU0NFTExBTkVPVVNf
U1lNQk9MUzoKLSAgICBjYXNlIFVCTE9DS19ESU5HQkFUUzoKLSAgICBjYXNlIFVCTE9DS19NSVND
RUxMQU5FT1VTX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTOgotICAgIGNhc2UgVUJMT0NLX0VNT1RJ
Q09OUzoKLSAgICBjYXNlIFVCTE9DS19UUkFOU1BPUlRfQU5EX01BUF9TWU1CT0xTOgotICAgIGNh
c2UgVUJMT0NLX1NVUFBMRU1FTlRBTF9TWU1CT0xTX0FORF9QSUNUT0dSQVBIUzoKLSAgICBjYXNl
IFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRFRF9BOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNFbW9qaUZpdHpwYXRyaWNrTW9kaWZpZXIoVUNoYXIzMiBj
aGFyYWN0ZXIpCi17Ci0gICAgLy8gVSsxRjNGQiAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRSSUNL
IFRZUEUtMS0yCi0gICAgLy8gVSsxRjNGQyAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRSSUNLIFRZ
UEUtMwotICAgIC8vIFUrMUYzRkQgLSBFTU9KSSBNT0RJRklFUiBGSVRaUEFUUklDSyBUWVBFLTQK
LSAgICAvLyBVKzFGM0ZFIC0gRU1PSkkgTU9ESUZJRVIgRklUWlBBVFJJQ0sgVFlQRS01Ci0gICAg
Ly8gVSsxRjNGRiAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRSSUNLIFRZUEUtNgotCi0gICAgcmV0
dXJuIGNoYXJhY3RlciA+PSAweDFGM0ZCICYmIGNoYXJhY3RlciA8PSAweDFGM0ZGOwotfQotCi1p
bmxpbmUgYm9vbCBpc1ZhcmlhdGlvblNlbGVjdG9yKFVDaGFyMzIgY2hhcmFjdGVyKQotewotICAg
IHJldHVybiBjaGFyYWN0ZXIgPj0gMHhGRTAwICYmIGNoYXJhY3RlciA8PSAweEZFMEY7Ci19Ci0K
LWlubGluZSBib29sIGlzRW1vamlLZXljYXBCYXNlKFVDaGFyMzIgY2hhcmFjdGVyKQotewotICAg
IHJldHVybiAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzknKSB8fCBjaGFyYWN0
ZXIgPT0gJyMnIHx8IGNoYXJhY3RlciA9PSAnKic7Ci19Ci0KLWlubGluZSBib29sIGlzRW1vamlS
ZWdpb25hbEluZGljYXRvcihVQ2hhcjMyIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFj
dGVyID49IDB4MUYxRTYgJiYgY2hhcmFjdGVyIDw9IDB4MUYxRkY7Ci19Ci0KLWlubGluZSBib29s
IGlzRW1vamlXaXRoUHJlc2VudGF0aW9uQnlEZWZhdWx0KFVDaGFyMzIgY2hhcmFjdGVyKQotewot
ICAgIHJldHVybiB1X2hhc0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfRU1PSklfUFJF
U0VOVEFUSU9OKTsKLX0KLQotaW5saW5lIGJvb2wgaXNFbW9qaU1vZGlmaWVyQmFzZShVQ2hhcjMy
IGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gdV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIs
IFVDSEFSX0VNT0pJX01PRElGSUVSX0JBU0UpOwotfQotCi1pbmxpbmUgYm9vbCBpc0RlZmF1bHRJ
Z25vcmFibGVDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIHVfaGFz
QmluYXJ5UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BP
SU5UKTsKLX0KLQotaW5saW5lIGJvb2wgaXNDb250cm9sQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFj
dGVyKQotewotICAgIHJldHVybiB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFjdGVyLCBVQ0hB
Ul9HRU5FUkFMX0NBVEVHT1JZKSA9PSBVX0NPTlRST0xfQ0hBUjsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDNhMThiY2VhMDE3OTYzMGI5MGVlZGM2MjY0MmIzZGE3N2UwYjE2
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0LmgiCi0KLSNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9J
TlBVVF9UWVBFUykKLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBsb3dlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0g
PSB7Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZCwgLy8gYQotICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBiCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUxvY2FsRGF5T2ZXZWVrU3RhbmRBbG9uLCAvLyBjCi0gICAgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZURheU9mTW9udGgsIC8vIGQKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
TG9jYWxEYXlPZldlZWssIC8vIGUKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxp
ZCwgLy8gZgotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb2RpZmllZEp1bGlhbkRheSwg
Ly8gZwotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTIsIC8vIGgKLSAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gaQotICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVJbnZhbGlkLCAvLyBqCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIy
NCwgLy8gawotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBsCi0gICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZSwgLy8gbQotICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBuCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIG8KLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gcAot
ICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lLCAvLyBxCi0gICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHIKLSAgICBEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlU2Vjb25kLCAvLyBzCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIHQKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXh0ZW5kZWRZZWFyLCAv
LyB1Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU5vbkxvY2F0aW9uWm9uZSwgLy8gdgot
ICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZZZWFyLCAvLyB3Ci0gICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHgKLSAgICBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlWWVhciwgLy8geQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVab25lLCAvLyB6
Ci19OwotCi1zdGF0aWMgY29uc3QgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSB1cHBlckNhc2VU
b0ZpZWxkVHlwZU1hcFsyNl0gPSB7Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxp
c2Vjb25kc0luRGF5LCAvLyBBCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IC8vIEIKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gQwotICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZlllYXIsIC8vIEQKLSAgICBEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlRGF5T2ZXZWVrLCAvLyBFCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZURheU9mV2Vla0luTW9udGgsIC8vIEYKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXJh
LCAvLyBHCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMywgLy8gSAotICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBJCi0gICAgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUludmFsaWQsIC8vIEoKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91
cjExLCAvLyBLCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSwg
Ly8gTAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCwgLy8gTQotICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBOCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUludmFsaWQsIC8vIE8KLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxp
ZCwgLy8gUAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXIsIC8vIFEKLSAgICBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gUgotICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVGcmFjdGlvbmFsU2Vjb25kLCAvLyBTCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUludmFsaWQsIC8vIFQKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxp
ZCwgLy8gVQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBWCi0gICAg
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtPZk1vbnRoLCAvLyBXCi0gICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIFgKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlWWVhck9mV2Vla09mWWVhciwgLy8gWQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVS
RkM4MjJab25lLCAvLyBaCi19OwotCi1zdGF0aWMgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBt
YXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjb25zdCBVQ2hhciBjaCkKLXsKLSAgICBpZiAoaXNBU0NJ
SVVwcGVyKGNoKSkKLSAgICAgICAgcmV0dXJuIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwW2NoIC0g
J0EnXTsKLQotICAgIGlmIChpc0FTQ0lJTG93ZXIoY2gpKQotICAgICAgICByZXR1cm4gbG93ZXJD
YXNlVG9GaWVsZFR5cGVNYXBbY2ggLSAnYSddOwotCi0gICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVMaXRlcmFsOwotfQotCi1ib29sIERhdGVUaW1lRm9ybWF0OjpwYXJzZShjb25z
dCBTdHJpbmcmIHNvdXJjZSwgVG9rZW5IYW5kbGVyJiB0b2tlbkhhbmRsZXIpCi17Ci0gICAgZW51
bSBTdGF0ZSB7Ci0gICAgICAgIFN0YXRlSW5RdW90ZSwKLSAgICAgICAgU3RhdGVJblF1b3RlUXVv
dGUsCi0gICAgICAgIFN0YXRlTGl0ZXJhbCwKLSAgICAgICAgU3RhdGVRdW90ZSwKLSAgICAgICAg
U3RhdGVTeW1ib2wsCi0gICAgfSBzdGF0ZSA9IFN0YXRlTGl0ZXJhbDsKLQotICAgIEZpZWxkVHlw
ZSBmaWVsZFR5cGUgPSBGaWVsZFR5cGVMaXRlcmFsOwotICAgIFN0cmluZ0J1aWxkZXIgbGl0ZXJh
bEJ1ZmZlcjsKLSAgICBpbnQgZmllbGRDb3VudGVyID0gMDsKLQotICAgIGZvciAodW5zaWduZWQg
aW50IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2UubGVuZ3RoKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgY29uc3QgVUNoYXIgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICBzd2l0Y2ggKHN0YXRl
KSB7Ci0gICAgICAgIGNhc2UgU3RhdGVJblF1b3RlOgotICAgICAgICAgICAgaWYgKGNoID09ICdc
JycpIHsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlSW5RdW90ZVF1b3RlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaXRlcmFsQnVm
ZmVyLmFwcGVuZChjaCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0YXRl
SW5RdW90ZVF1b3RlOgotICAgICAgICAgICAgaWYgKGNoID09ICdcJycpIHsKLSAgICAgICAgICAg
ICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZCgnXCcnKTsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlSW5RdW90ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZmllbGRUeXBlID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gpOwotICAg
ICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVJbnZhbGlkKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5
cGVMaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwot
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5n
dGgoKSkgewotICAgICAgICAgICAgICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJh
bEJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmNsZWFy
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7Ci0gICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlU3ltYm9sOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBTdGF0ZUxpdGVyYWw6Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykgewotICAg
ICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVRdW90ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmllbGRUeXBlID0gbWFwQ2hhcmFjdGVyVG9G
aWVsZFR5cGUoY2gpOwotICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PSBGaWVsZFR5cGVJbnZh
bGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGZp
ZWxkVHlwZSA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgbGl0ZXJhbEJ1
ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkgewotICAgICAgICAgICAg
ICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsK
LSAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7Ci0gICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
U3ltYm9sOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdGF0ZVF1b3RlOgot
ICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAgICAgc3RhdGUg
PSBjaCA9PSAnXCcnID8gU3RhdGVMaXRlcmFsIDogU3RhdGVJblF1b3RlOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdGF0ZVN5bWJvbDogewotICAgICAgICAgICAgQVNTRVJU
KGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKLSAgICAgICAgICAgIEFTU0VSVChmaWVs
ZFR5cGUgIT0gRmllbGRUeXBlTGl0ZXJhbCk7Ci0gICAgICAgICAgICBBU1NFUlQobGl0ZXJhbEJ1
ZmZlci5pc0VtcHR5KCkpOwotCi0gICAgICAgICAgICBGaWVsZFR5cGUgZmllbGRUeXBlMiA9IG1h
cENoYXJhY3RlclRvRmllbGRUeXBlKGNoKTsKLSAgICAgICAgICAgIGlmIChmaWVsZFR5cGUyID09
IEZpZWxkVHlwZUludmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBpZiAoZmllbGRUeXBlID09IGZpZWxkVHlwZTIpIHsKLSAgICAgICAgICAgICAgICAr
K2ZpZWxkQ291bnRlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0RmllbGQoZmllbGRUeXBlLCBmaWVsZENvdW50
ZXIpOwotCi0gICAgICAgICAgICBpZiAoZmllbGRUeXBlMiA9PSBGaWVsZFR5cGVMaXRlcmFsKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICdcJycpCi0gICAgICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVRdW90ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAgICAgICAgICAgICBzdGF0
ZSA9IFN0YXRlTGl0ZXJhbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpZWxkQ291bnRlciA9IDE7Ci0gICAg
ICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZFR5cGUyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gRmllbGRU
eXBlSW52YWxpZCk7Ci0KLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBTdGF0ZUxpdGVy
YWw6Ci0gICAgY2FzZSBTdGF0ZUluUXVvdGVRdW90ZToKLSAgICAgICAgaWYgKGxpdGVyYWxCdWZm
ZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRMaXRlcmFsKGxpdGVy
YWxCdWZmZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBT
dGF0ZVF1b3RlOgotICAgIGNhc2UgU3RhdGVJblF1b3RlOgotICAgICAgICBpZiAobGl0ZXJhbEJ1
ZmZlci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0
ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2Fz
ZSBTdGF0ZVN5bWJvbDoKLSAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRl
cmFsKTsKLSAgICAgICAgQVNTRVJUKCFsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKTsKLSAgICAgICAg
dG9rZW5IYW5kbGVyLnZpc2l0RmllbGQoZmllbGRUeXBlLCBmaWVsZENvdW50ZXIpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGlzQVNDSUlBbHBoYWJldE9yUXVvdGUoVUNo
YXIgY2gpCi17Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjaCkgfHwgY2ggPT0gJ1wnJzsKLX0K
LQotdm9pZCBEYXRlVGltZUZvcm1hdDo6cXVvdGVBbmRBcHBlbmRMaXRlcmFsKGNvbnN0IFN0cmlu
ZyYgbGl0ZXJhbCwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQotewotICAgIGlmIChsaXRlcmFsLmxl
bmd0aCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsaXRlcmFsLmZpbmQoaXNB
U0NJSUFscGhhYmV0T3JRdW90ZSkgPT0gbm90Rm91bmQpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVu
ZChsaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChsaXRlcmFsLmZp
bmQoJ1wnJykgPT0gbm90Rm91bmQpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZCgnXCcnLCBsaXRl
cmFsLCAnXCcnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXRlcmFsLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGxpdGVyYWxb
aV0gPT0gJ1wnJykKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIicnIik7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnXCcnLCBTdHJpbmcgeyBsaXRlcmFsLnN1
YnN0cmluZyhpKSB9LnJlcGxhY2UoJ1wnJywgIicnIiksICdcJycpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZv
cm1hdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzcyNmRmZmJlMWYzZTE5ZDdhODMxZDc3MDc2
OTNlMTVjNjU2NjdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQuaAorKysgL2Rl
di9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRl
VGltZUZvcm1hdF9oCi0jZGVmaW5lIERhdGVUaW1lRm9ybWF0X2gKLQotI2lmIEVOQUJMRShEQVRF
X0FORF9USU1FX0lOUFVUX1RZUEVTKQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gRGF0ZVRpbWVGb3JtYXQgcGFyc2VzIGRhdGUgdGltZSBmb3Jt
YXQgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbAotLy8gc3RhbmRhcmQgMzUsIExvY2FsZSBE
YXRhIE1hcmt1cCBMYW5ndWFnZSAoTERNTClbMV0uCi0vLyBbMV0gTERNTCBodHRwOi8vdW5pY29k
ZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5zCi1jbGFz
cyBEYXRlVGltZUZvcm1hdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBGaWVsZFR5cGUgewotICAgICAg
ICBGaWVsZFR5cGVJbnZhbGlkLAotICAgICAgICBGaWVsZFR5cGVMaXRlcmFsLAotCi0gICAgICAg
IC8vIEVyYTogQUQKLSAgICAgICAgRmllbGRUeXBlRXJhID0gJ0cnLAotCi0gICAgICAgIC8vIFll
YXI6IDE5OTYKLSAgICAgICAgRmllbGRUeXBlWWVhciA9ICd5JywKLSAgICAgICAgRmllbGRUeXBl
WWVhck9mV2Vla09mWWVhciA9ICdZJywKLSAgICAgICAgRmllbGRUeXBlRXh0ZW5kZWRZZWFyID0g
J3UnLAotCi0gICAgICAgIC8vIFF1YXRlcjogUTIKLSAgICAgICAgRmllbGRUeXBlUXVhdGVyID0g
J1EnLAotICAgICAgICBGaWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lID0gJ3EnLAotCi0gICAgICAg
IC8vIE1vbnRoOiBTZXB0ZW1iZXIKLSAgICAgICAgRmllbGRUeXBlTW9udGggPSAnTScsCi0gICAg
ICAgIEZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSA9ICdMJywKLQotICAgICAgICAvLyBXZWVrOiA0
MgotICAgICAgICBGaWVsZFR5cGVXZWVrT2ZZZWFyID0gJ3cnLAotICAgICAgICBGaWVsZFR5cGVX
ZWVrT2ZNb250aCA9ICdXJywKLQotICAgICAgICAvLyBEYXk6IDEyCi0gICAgICAgIEZpZWxkVHlw
ZURheU9mTW9udGggPSAnZCcsCi0gICAgICAgIEZpZWxkVHlwZURheU9mWWVhciA9ICdEJywKLSAg
ICAgICAgRmllbGRUeXBlRGF5T2ZXZWVrSW5Nb250aCA9ICdGJywKLSAgICAgICAgRmllbGRUeXBl
TW9kaWZpZWRKdWxpYW5EYXkgPSAnZycsCi0KLSAgICAgICAgLy8gV2VlayBEYXk6IFR1ZXNkYXkK
LSAgICAgICAgRmllbGRUeXBlRGF5T2ZXZWVrID0gJ0UnLAotICAgICAgICBGaWVsZFR5cGVMb2Nh
bERheU9mV2VlayA9ICdlJywKLSAgICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFs
b24gPSAnYycsCi0KLSAgICAgICAgLy8gUGVyaW9kOiBBTSBvciBQTQotICAgICAgICBGaWVsZFR5
cGVQZXJpb2QgPSAnYScsCi0KLSAgICAgICAgLy8gSG91cjogNwotICAgICAgICBGaWVsZFR5cGVI
b3VyMTIgPSAnaCcsCi0gICAgICAgIEZpZWxkVHlwZUhvdXIyMyA9ICdIJywKLSAgICAgICAgRmll
bGRUeXBlSG91cjExID0gJ0snLAotICAgICAgICBGaWVsZFR5cGVIb3VyMjQgPSAnaycsCi0KLSAg
ICAgICAgLy8gTWludXRlOiA1OQotICAgICAgICBGaWVsZFR5cGVNaW51dGUgPSAnbScsCi0KLSAg
ICAgICAgLy8gU2Vjb25kOiAxMgotICAgICAgICBGaWVsZFR5cGVTZWNvbmQgPSAncycsCi0gICAg
ICAgIEZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQgPSAnUycsCi0gICAgICAgIEZpZWxkVHlwZU1p
bGxpc2Vjb25kc0luRGF5ID0gJ0EnLAotCi0gICAgICAgIC8vIFpvbmU6IFBEVAotICAgICAgICBG
aWVsZFR5cGVab25lID0gJ3onLAotICAgICAgICBGaWVsZFR5cGVSRkM4MjJab25lID0gJ1onLAot
ICAgICAgICBGaWVsZFR5cGVOb25Mb2NhdGlvblpvbmUgPSAndicsCi0gICAgfTsKLQotICAgIGNs
YXNzIFRva2VuSGFuZGxlciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5Ub2tlbkhh
bmRsZXIoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxkKEZpZWxk
VHlwZSwgaW50IG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgfTsKLQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIGZhaWxlZC4KLSAgICBzdGF0aWMg
Ym9vbCBwYXJzZShjb25zdCBTdHJpbmcmLCBUb2tlbkhhbmRsZXImKTsKLSAgICBzdGF0aWMgdm9p
ZCBxdW90ZUFuZEFwcGVuZExpdGVyYWwoY29uc3QgU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYpOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLSNlbmRpZiAvLyBEYXRlVGlt
ZUZvcm1hdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0ZvbnRS
ZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0ZvbnRSZW5kZXJp
bmdNb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMGFiYTRlODkyYjNjOTk2
ZjYxMWNjM2RiZjI3NWQzYTExODdjYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Gb250UmVuZGVyaW5n
TW9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBUaGlzIHNldHRpbmcgaXMgdXNlZCB0byBwcm92aWRlIHdheXMgb2Ygc3dpdGNo
aW5nIGJldHdlZW4gbXVsdGlwbGUgcmVuZGVyaW5nIG1vZGVzIHRoYXQgbWF5IGhhdmUgZGlmZmVy
ZW50Ci0vLyBtZXRyaWNzLiBJdCBpcyB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkg
dGV4dCBvbiBXaW5kb3dzLgotZW51bSBjbGFzcyBGb250UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3Qg
ewotICAgIE5vcm1hbCwKLSAgICBBbHRlcm5hdGUKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFJlbmRlcmluZ01v
ZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpG
b250UmVuZGVyaW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmluZ01vZGU6Ok5v
cm1hbCwKLSAgICAgICAgV2ViQ29yZTo6Rm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZQotICAg
ID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvSHlwaGVuYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVkMWU1OWE5
NGUzZDIyMzJlMWI3OGJmN2NmZjY0ZDA2MTQ0NDllNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0h5cGhl
bmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBIeXBoZW5hdGlvbl9oCi0jZGVmaW5lIEh5cGhlbmF0aW9uX2gKLQotI2luY2x1ZGUgPHVu
aWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1pbmxpbmUgc3RhdGljIGJvb2wgZW5vdWdoV2lkdGhGb3JIeXBoZW5hdGlvbihm
bG9hdCBhdmFpbGFibGVXaWR0aCwgZmxvYXQgZm9udFBpeGVsU2l6ZSkKLXsKLSAgICAvLyBJZiB0
aGUgbWF4aW11bSB3aWR0aCBhdmFpbGFibGUgZm9yIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBoeXBo
ZW4gaXMgc21hbGwsIHRoZW4gaXQgaXMgdmVyeSB1bmxpa2VseQotICAgIC8vIHRoYXQgYW4gaHlw
aGVuYXRpb24gb3Bwb3J0dW5pdHkgZXhpc3RzLCBzbyBkbyBub3QgYm90aGVyIHRvIGxvb2sgZm9y
IGl0LgotICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCA+IGZvbnRQaXhlbFNpemUgKiA1IC8gNDsK
LQotfQotYm9vbCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmll
cik7Ci1zaXplX3QgbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXcsIHNpemVfdCBiZWZvcmVJ
bmRleCwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEh5cGhlbmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1Mb2NhbGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKaW5kZXggZjQ3MjAwYjU3MjE2OGQ0
ZWVmYWE3NGU5MDc1NzFhZDVjOTJhYjAxOS4uYTc3Y2ZjN2UyOWEyNGZhZDVhY2QyZGIwOTdkYmQw
MjIyMDgyY2Y1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybUxvY2FsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9y
bUxvY2FsZS5jcHAKQEAgLTMyLDE1ICszMiwxNSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTG9jYWxl
LmgiCiAKICNpbmNsdWRlICJEYXRlQ29tcG9uZW50cy5oIgotI2luY2x1ZGUgIkRhdGVUaW1lRm9y
bWF0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0
L0RhdGVUaW1lRm9ybWF0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBVVF9U
WVBFUykKIAotY2xhc3MgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyIDogcHJpdmF0ZSBEYXRlVGltZUZv
cm1hdDo6VG9rZW5IYW5kbGVyIHsKK2NsYXNzIERhdGVUaW1lU3RyaW5nQnVpbGRlciA6IHByaXZh
dGUgUEFMOjpEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEYXRlVGltZVN0cmluZ0J1aWxkZXIpOwogCiBwdWJsaWM6CkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5k
bGVyIGZ1bmN0aW9ucy4KLSAgICB2b2lkIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSwgaW50KSBmaW5hbDsKKyAgICB2b2lkIHZpc2l0RmllbGQoUEFMOjpEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlLCBpbnQpIGZpbmFsOwogICAgIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0
cmluZyYpIGZpbmFsOwogCiAgICAgU3RyaW5nIHplcm9QYWRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
c2l6ZV90IHdpZHRoKTsKQEAgLTcyLDcgKzcyLDcgQEAgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyOjpE
YXRlVGltZVN0cmluZ0J1aWxkZXIoTG9jYWxlJiBsb2NhbGl6ZXIsIGNvbnN0IERhdGVDb21wb24K
IGJvb2wgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyOjpidWlsZChjb25zdCBTdHJpbmcmIGZvcm1hdFN0
cmluZykKIHsKICAgICBtX2J1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGZvcm1hdFN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3JtYXRTdHJpbmcsICp0
aGlzKTsKKyAgICByZXR1cm4gUEFMOjpEYXRlVGltZUZvcm1hdDo6cGFyc2UoZm9ybWF0U3RyaW5n
LCAqdGhpcyk7CiB9CiAKIFN0cmluZyBEYXRlVGltZVN0cmluZ0J1aWxkZXI6Onplcm9QYWRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCB3aWR0aCkKQEAgLTkzLDE0ICs5MywxNCBA
QCB2b2lkIERhdGVUaW1lU3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVyKGludCBudW1iZXIsIHNp
emVfdCB3aWR0aCkKICAgICBtX2J1aWxkZXIuYXBwZW5kKG1fbG9jYWxpemVyLmNvbnZlcnRUb0xv
Y2FsaXplZE51bWJlcih6ZXJvUGFkZGVkTnVtYmVyU3RyaW5nKSk7CiB9CiAKLXZvaWQgRGF0ZVRp
bWVTdHJpbmdCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmll
bGRUeXBlLCBpbnQgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycykKK3ZvaWQgRGF0ZVRpbWVTdHJp
bmdCdWlsZGVyOjp2aXNpdEZpZWxkKFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVs
ZFR5cGUsIGludCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzKQogewogICAgIHN3aXRjaCAoZmll
bGRUeXBlKSB7Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjoKKyAgICBj
YXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXI6CiAgICAgICAgIC8vIEFsd2F5
cyB1c2UgcGFkZGluZyB3aWR0aCBvZiA0IHNvIGl0IG1hdGNoZXMgRGF0ZVRpbWVFZGl0RWxlbWVu
dC4KICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5mdWxsWWVhcigpLCA0KTsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoOgorICAgIGNh
c2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGg6CiAgICAgICAgIGlmIChudW1i
ZXJPZlBhdHRlcm5DaGFyYWN0ZXJzID09IDMpCiAgICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KG1fbG9jYWxpemVyLnNob3J0TW9udGhMYWJlbHMoKVttX2RhdGUubW9udGgoKV0pOwogICAgICAg
ICBlbHNlIGlmIChudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzID09IDQpCkBAIC0xMTAsNyArMTEw
LDcgQEAgdm9pZCBEYXRlVGltZVN0cmluZ0J1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUsIGludAogICAgICAgICAgICAgYXBwZW5kTnVtYmVyKG1f
ZGF0ZS5tb250aCgpICsgMSwgMik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZToKKyAgICBjYXNlIFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZToKICAgICAgICAgaWYg
KG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMgPT0gMykKICAgICAgICAgICAgIG1fYnVpbGRlci5h
cHBlbmQobV9sb2NhbGl6ZXIuc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKVttX2RhdGUubW9u
dGgoKV0pOwogICAgICAgICBlbHNlIGlmIChudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzID09IDQp
CkBAIC0xMjAsNDEgKzEyMCw0MSBAQCB2b2lkIERhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRG
aWVsZChEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50CiAgICAgICAgICAg
ICBhcHBlbmROdW1iZXIobV9kYXRlLm1vbnRoKCkgKyAxLCAyKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aDoK
KyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9udGg6CiAgICAg
ICAgIC8vIEFsd2F5cyB1c2UgcGFkZGluZyB3aWR0aCBvZiAyIHNvIGl0IG1hdGNoZXMgRGF0ZVRp
bWVFZGl0RWxlbWVudC4KICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5tb250aERheSgpLCAy
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdl
ZWtPZlllYXI6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVXZWVrT2ZZ
ZWFyOgogICAgICAgICAvLyBBbHdheXMgdXNlIHBhZGRpbmcgd2lkdGggb2YgMiBzbyBpdCBtYXRj
aGVzIERhdGVUaW1lRWRpdEVsZW1lbnQuCiAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUud2Vl
aygpLCAyKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVBlcmlvZDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlv
ZDoKICAgICAgICAgbV9idWlsZGVyLmFwcGVuZChtX2xvY2FsaXplci50aW1lQU1QTUxhYmVscygp
WyhtX2RhdGUuaG91cigpID49IDEyID8gMSA6IDApXSk7CiAgICAgICAgIHJldHVybjsKLSAgICBj
YXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTI6IHsKKyAgICBjYXNlIFBBTDo6RGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjogewogICAgICAgICBpbnQgaG91cjEyID0gbV9k
YXRlLmhvdXIoKSAlIDEyOwogICAgICAgICBpZiAoIWhvdXIxMikKICAgICAgICAgICAgIGhvdXIx
MiA9IDEyOwogICAgICAgICBhcHBlbmROdW1iZXIoaG91cjEyLCBudW1iZXJPZlBhdHRlcm5DaGFy
YWN0ZXJzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVIb3VyMjM6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVIb3VyMjM6CiAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUuaG91cigpLCBudW1iZXJPZlBh
dHRlcm5DaGFyYWN0ZXJzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIxMToKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZUhvdXIxMToKICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5ob3VyKCkgJSAxMiwgbnVt
YmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycyk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6IHsKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIyNDogewogICAgICAgICBpbnQgaG91cjI0ID0gbV9kYXRlLmhvdXIo
KTsKICAgICAgICAgaWYgKCFob3VyMjQpCiAgICAgICAgICAgICBob3VyMjQgPSAyNDsKICAgICAg
ICAgYXBwZW5kTnVtYmVyKGhvdXIyNCwgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWludXRlOgogICAg
ICAgICBhcHBlbmROdW1iZXIobV9kYXRlLm1pbnV0ZSgpLCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0
ZXJzKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZVNlY29uZDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDoK
ICAgICAgICAgaWYgKCFtX2RhdGUubWlsbGlzZWNvbmQoKSkKICAgICAgICAgICAgIGFwcGVuZE51
bWJlcihtX2RhdGUuc2Vjb25kKCksIG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMpOwogICAgICAg
ICBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVk
UHJpbnRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRh
YmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlMzYxNDcxOTcxZDEyNmYw
MmJjNzNhZDJiNTA1N2Q5ZDMxZjVhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJRdW90ZWRQcmludGFibGUuaCIKLQotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSA3NjsKLQotc3RhdGljIGNvbnN0
IGNoYXIgY3JsZkxpbmVFbmRpbmdbXSA9ICJcclxuIjsKLQotc3RhdGljIHNpemVfdCBsZW5ndGhP
ZkxpbmVFbmRpbmdBdEluZGV4KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5n
dGgsIHNpemVfdCBpbmRleCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpbmRleCA8IGlucHV0TGVuZ3RoKTsKLSAgICBpZiAoaW5wdXRbaW5kZXhdID09ICdcbicpCi0g
ICAgICAgIHJldHVybiAxOyAvLyBTaW5nbGUgTEYuCi0KLSAgICBpZiAoaW5wdXRbaW5kZXhdID09
ICdccicpIHsKLSAgICAgICAgaWYgKChpbmRleCArIDEpID09IGlucHV0TGVuZ3RoIHx8IGlucHV0
W2luZGV4ICsgMV0gIT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiAxOyAvLyBTaW5nbGUgQ1Ig
KENsYXNzaWMgTWFjIE9TKS4KLSAgICAgICAgcmV0dXJuIDI7IC8vIENSLUxGLgotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCi17Ci0gICAgcmV0dXJuIHF1b3RlZFByaW50
YWJsZUVuY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7Ci19Ci0KLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVfdCBp
bnB1dExlbmd0aCkKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gb3V0OwotICAgIG91dC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGlucHV0TGVuZ3RoKTsKLSAgICBzaXplX3QgY3VycmVudExpbmVMZW5n
dGggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7ICsraSkgewot
ICAgICAgICBib29sIGlzTGFzdENoYXJhY3RlciA9IChpID09IGlucHV0TGVuZ3RoIC0gMSk7Ci0g
ICAgICAgIHVpbnQ4X3QgY3VycmVudENoYXJhY3RlciA9IGlucHV0W2ldOwotICAgICAgICBib29s
IHJlcXVpcmVzRW5jb2RpbmcgPSBmYWxzZTsKLSAgICAgICAgLy8gQWxsIG5vbi1wcmludGFibGUg
QVNDSUkgY2hhcmFjdGVycyBhbmQgPSByZXF1aXJlIGVuY29kaW5nLgotICAgICAgICBpZiAoKGN1
cnJlbnRDaGFyYWN0ZXIgPCAnICcgfHwgY3VycmVudENoYXJhY3RlciA+ICd+JyB8fCBjdXJyZW50
Q2hhcmFjdGVyID09ICc9JykgJiYgY3VycmVudENoYXJhY3RlciAhPSAnXHQnKQotICAgICAgICAg
ICAgcmVxdWlyZXNFbmNvZGluZyA9IHRydWU7Ci0KLSAgICAgICAgLy8gU3BhY2UgYW5kIHRhYiBj
aGFyYWN0ZXJzIGhhdmUgdG8gYmUgZW5jb2RlZCBpZiB0aGV5IGFwcGVhciBhdCB0aGUgZW5kIG9m
IGEgbGluZS4KLSAgICAgICAgaWYgKCFyZXF1aXJlc0VuY29kaW5nICYmIChjdXJyZW50Q2hhcmFj
dGVyID09ICdcdCcgfHwgY3VycmVudENoYXJhY3RlciA9PSAnICcpICYmIChpc0xhc3RDaGFyYWN0
ZXIgfHwgbGVuZ3RoT2ZMaW5lRW5kaW5nQXRJbmRleChpbnB1dCwgaW5wdXRMZW5ndGgsIGkgKyAx
KSkpCi0gICAgICAgICAgICByZXF1aXJlc0VuY29kaW5nID0gdHJ1ZTsKLQotICAgICAgICAvLyBF
bmQgb2YgbGluZSBzaG91bGQgYmUgY29udmVydGVkIHRvIENSLUxGIHNlcXVlbmNlcy4KLSAgICAg
ICAgaWYgKCFpc0xhc3RDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGhPZkxp
bmVFbmRpbmcgPSBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGlucHV0LCBpbnB1dExlbmd0aCwg
aSk7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoT2ZMaW5lRW5kaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgb3V0LmFwcGVuZChjcmxmTGluZUVuZGluZywgc3RybGVuKGNybGZMaW5lRW5kaW5nKSk7Ci0g
ICAgICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGggPSAwOwotICAgICAgICAgICAgICAgIGkg
Kz0gKGxlbmd0aE9mTGluZUVuZGluZyAtIDEpOyAvLyAtMSBiZWNhdXNlIHdlJ2xsICsrIGluIHRo
ZSBmb3IoKSBhYm92ZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHNpemVfdCBsZW5ndGhPZkVuY29kZWRDaGFyYWN0ZXIgPSAx
OwotICAgICAgICBpZiAocmVxdWlyZXNFbmNvZGluZykKLSAgICAgICAgICAgIGxlbmd0aE9mRW5j
b2RlZENoYXJhY3RlciArPSAyOwotICAgICAgICBpZiAoIWlzTGFzdENoYXJhY3RlcikKLSAgICAg
ICAgICAgIGxlbmd0aE9mRW5jb2RlZENoYXJhY3RlciArPSAxOyAvLyArIDEgZm9yIHRoZSA9IChz
b2Z0IGxpbmUgYnJlYWspLgotCi0gICAgICAgIC8vIEluc2VydCBhIHNvZnQgbGluZSBicmVhayBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChjdXJyZW50TGluZUxlbmd0aCArIGxlbmd0aE9mRW5j
b2RlZENoYXJhY3RlciA+IG1heGltdW1MaW5lTGVuZ3RoKSB7Ci0gICAgICAgICAgICBvdXQuYXBw
ZW5kKCc9Jyk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKGNybGZMaW5lRW5kaW5nLCBzdHJsZW4o
Y3JsZkxpbmVFbmRpbmcpKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoID0gMDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEZpbmFsbHksIGluc2VydCB0aGUgYWN0dWFsIGNoYXJhY3Rl
cihzKS4KLSAgICAgICAgaWYgKHJlcXVpcmVzRW5jb2RpbmcpIHsKLSAgICAgICAgICAgIG91dC5h
cHBlbmQoJz0nKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4
RGlnaXQoY3VycmVudENoYXJhY3RlcikpOwotICAgICAgICAgICAgb3V0LmFwcGVuZChsb3dlck5p
YmJsZVRvQVNDSUlIZXhEaWdpdChjdXJyZW50Q2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBjdXJy
ZW50TGluZUxlbmd0aCArPSAzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0LmFw
cGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoKys7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3V0OwotfQotCi1WZWN0b3I8dWludDhf
dD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaW5wdXQpCi17
Ci0gICAgcmV0dXJuIHF1b3RlZFByaW50YWJsZURlY29kZShpbnB1dC5kYXRhKCksIGlucHV0LnNp
emUoKSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IG91dDsKLSAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVybiBvdXQ7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkgewotICAgICAgICBjaGFyIGN1
cnJlbnRDaGFyYWN0ZXIgPSBkYXRhW2ldOwotICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAh
PSAnPScpIHsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoY3VycmVudENoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBhcmUgZGVhbGluZyB3
aXRoIGEgJz14eCcgc2VxdWVuY2UuCi0gICAgICAgIGlmIChkYXRhTGVuZ3RoIC0gaSA8IDMpIHsK
LSAgICAgICAgICAgIC8vIFVuZmluaXNoZWQgPSBzZXF1ZW5jZSwgYXBwZW5kIGFzIGlzLgotICAg
ICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIGNoYXIgdXBwZXJDaGFyYWN0ZXIgPSBkYXRhWysraV07
Ci0gICAgICAgIGNoYXIgbG93ZXJDaGFyYWN0ZXIgPSBkYXRhWysraV07Ci0gICAgICAgIGlmICh1
cHBlckNoYXJhY3RlciA9PSAnXHInICYmIGxvd2VyQ2hhcmFjdGVyID09ICdcbicpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCh1cHBlckNoYXJh
Y3RlcikgfHwgIWlzQVNDSUlIZXhEaWdpdChsb3dlckNoYXJhY3RlcikpIHsKLSAgICAgICAgICAg
IC8vIEludmFsaWQgc2VxdWVuY2UsID0gZm9sbG93ZWQgYnkgbm9uIGhleCBkaWdpdHMsIGp1c3Qg
aW5zZXJ0IHRoZSBjaGFyYWN0ZXJzIGFzIGlzLgotICAgICAgICAgICAgb3V0LmFwcGVuZCgnPScp
OwotICAgICAgICAgICAgb3V0LmFwcGVuZCh1cHBlckNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBv
dXQuYXBwZW5kKGxvd2VyQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIG91dC5hcHBlbmQodG9BU0NJSUhleFZhbHVlKHVwcGVyQ2hhcmFjdGVyLCBs
b3dlckNoYXJhY3RlcikpOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjcyNzNiNWY0MjhjMjViYzgzMmUwN2VhNmE4OTE1NWQzOWU2Mjlh
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1WZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5j
b2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50
YWJsZUVuY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IHF1
b3RlZFByaW50YWJsZURlY29kZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKLVZlY3Rvcjx1aW50
OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA4M2Vh
N2FmNzRjMjZjM2U0MTVjZTQ1ODYwYWI3ZThkMWRkZTg5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Nl
Z21lbnRlZFN0cmluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgot
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRQb3NpdGlvbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGluZSB2b2lkIFNl
Z21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjphcHBlbmRUbyhTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KSBjb25zdAotewotICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3RyaW5nKHN0cmluZywgc3RyaW5nLmxl
bmd0aCgpIC0gbGVuZ3RoLCBsZW5ndGgpOwotfQotCi1TZWdtZW50ZWRTdHJpbmcmIFNlZ21lbnRl
ZFN0cmluZzo6b3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYmIG90aGVyKQotewotICAgIG1fY3Vy
cmVudFN1YnN0cmluZyA9IFdURk1vdmUob3RoZXIubV9jdXJyZW50U3Vic3RyaW5nKTsKLSAgICBt
X290aGVyU3Vic3RyaW5ncyA9IFdURk1vdmUob3RoZXIubV9vdGhlclN1YnN0cmluZ3MpOwotCi0g
ICAgbV9pc0Nsb3NlZCA9IG90aGVyLm1faXNDbG9zZWQ7Ci0KLSAgICBtX2N1cnJlbnRDaGFyYWN0
ZXIgPSBvdGhlci5tX2N1cnJlbnRDaGFyYWN0ZXI7Ci0KLSAgICBtX251bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgPSBvdGhlci5tX251bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmc7Ci0gICAgbV9udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7Ci0gICAgbV9jdXJyZW50TGluZSA9IG90aGVy
Lm1fY3VycmVudExpbmU7Ci0KLSAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBvdGhlci5tX2Zhc3RQYXRo
RmxhZ3M7Ci0gICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0g
b3RoZXIubV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uOwotICAgIG1f
YWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9IG90aGVyLm1fYWR2YW5jZUFuZFVw
ZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbjsKLQotICAgIG90aGVyLmNsZWFyKCk7Ci0KLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLXVuc2lnbmVkIFNlZ21lbnRlZFN0cmluZzo6bGVuZ3RoKCkgY29uc3QK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoOwotICAg
IGZvciAoYXV0byYgc3Vic3RyaW5nIDogbV9vdGhlclN1YnN0cmluZ3MpCi0gICAgICAgIGxlbmd0
aCArPSBzdWJzdHJpbmcubGVuZ3RoOwotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXZvaWQgU2Vn
bWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQotewotICAgIGlmICghbV9jdXJy
ZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7Ci0g
ICAgZm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3RyaW5ncykKLSAgICAgICAgc3Vi
c3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgdXBkYXRlQWR2YW5j
ZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmNsZWFyKCkK
LXsKLSAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsKLSAgICBtX290aGVyU3Vic3Ry
aW5ncy5jbGVhcigpOwotCi0gICAgbV9pc0Nsb3NlZCA9IGZhbHNlOwotCi0gICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gMDsKLQotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudFN1YnN0cmluZyA9IDA7Ci0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50TGluZSA9IDA7Ci0gICAgbV9jdXJyZW50TGluZSA9IDA7Ci0KLSAgICB1cGRh
dGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kU3Vic3RyaW5nKFN1YnN0cmluZyYmIHN1YnN0cmlu
ZykKLXsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOwotICAgIGlmICghc3Vic3RyaW5nLmxlbmd0
aCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKQot
ICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdWJzdHJpbmcpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJy
ZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpOwotICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcgPSBXVEZNb3ZlKHN1YnN0cmluZyk7
Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50
Q2hhcmFjdGVyKCk7Ci0gICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Ci0g
ICAgfQotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6cHVzaEJhY2soU3RyaW5nJiYgc3RyaW5n
KQotewotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBhIHN1YnN0cmluZyBmb3IgYW4gZW1wdHkgc3Ry
aW5nLgotICAgIEFTU0VSVChzdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgLy8gVGhlIG5ldyBzdWJz
dHJpbmcgd2Ugd2lsbCBjcmVhdGUgd29uJ3QgaGF2ZSB0aGUgZG9Ob3RFeGNsdWRlTGluZU51bWJl
cnMgc2V0IGFwcHJvcHJpYXRlbHkuCi0gICAgLy8gVGhhdCB3YXMgbG9zdCB3aGVuIHRoZSBjaGFy
YWN0ZXJzIHdlcmUgY29uc3VtZWQgYmVmb3JlIHB1c2hpbmcgdGhlbSBiYWNrLiBCdXQgdGhpcyBk
b2VzCi0gICAgLy8gbm90IG1hdHRlciwgYmVjYXVzZSBjbGllbnRzIG5ldmVyIHVzZSB0aGlzIGZv
ciBuZXdsaW5lcy4gQ2F0Y2ggdGhhdCB3aXRoIHRoaXMgYXNzZXJ0aW9uLgotICAgIEFTU0VSVCgh
c3RyaW5nLmNvbnRhaW5zKCdcbicpKTsKLQotICAgIC8vIFRoZSBjaGFyYWN0ZXJzIGluIHRoZSBz
dHJpbmcgbXVzdCBiZSBwcmV2aW91c2x5IGNvbnN1bWVkIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHNl
Z21lbnRlZCBzdHJpbmcuCi0gICAgQVNTRVJUKHN0cmluZy5sZW5ndGgoKSA8PSBudW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZCgpKTsKLQotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKTsKLSAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCkKLSAg
ICAgICAgbV9vdGhlclN1YnN0cmluZ3MucHJlcGVuZChXVEZNb3ZlKG1fY3VycmVudFN1YnN0cmlu
ZykpOwotICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUoc3RyaW5nKTsKLSAgICBtX251
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgLT0gbV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aDsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRT
dWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOwotICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBv
aW50ZXJzKCk7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjpjbG9zZSgpCi17Ci0gICAgQVNT
RVJUKCFtX2lzQ2xvc2VkKTsKLSAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBTZWdt
ZW50ZWRTdHJpbmc6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nIHsgc3RyaW5nLm1fY3VycmVudFN1YnN0cmluZyB9
KTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290aGVyU3Vic3RyaW5ncykK
LSAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKHN1YnN0cmluZyk7Ci19Ci0KLXZvaWQg
U2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU2VnbWVudGVkU3RyaW5nJiYgc3RyaW5nKQotewotICAg
IGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZy5tX2N1cnJlbnRTdWJzdHJpbmcpKTsKLSAg
ICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290aGVyU3Vic3RyaW5ncykKLSAgICAg
ICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKFdURk1vdmUoc3Vic3RyaW5nKSk7Ci19Ci0KLXZv
aWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGFwcGVu
ZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6
YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGFwcGVuZFN1YnN0cmluZyhTdHJp
bmcgeyBzdHJpbmcgfSk7Ci19Ci0KLVN0cmluZyBTZWdtZW50ZWRTdHJpbmc6OnRvU3RyaW5nKCkg
Y29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBtX2N1cnJlbnRTdWJzdHJp
bmcuYXBwZW5kVG8ocmVzdWx0KTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IG1fb3RoZXJT
dWJzdHJpbmdzKQotICAgICAgICBzdWJzdHJpbmcuYXBwZW5kVG8ocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNl
V2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCkKLXsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIg
PSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2OwotICAgIGRlY3JlbWVu
dEFuZENoZWNrTGVuZ3RoKCk7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlQW5k
VXBkYXRlTGluZU51bWJlcjE2KCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzKTsKLSAgICBwcm9jZXNzUG9zc2libGVOZXdsaW5lKCk7Ci0g
ICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFy
YWN0ZXIxNjsKLSAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpOwotfQotCi1pbmxpbmUgdm9p
ZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0
aG91dFVwZGF0aW5nTGluZU51bWJlcigpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmlu
Zy5sZW5ndGggPT0gMSk7Ci0gICAgaWYgKG1fb3RoZXJTdWJzdHJpbmdzLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0gMDsKLSAgICAgICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gMDsKLSAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JF
bXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRTdWJzdHJp
bmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKLSAgICBtX2N1cnJlbnRTdWJzdHJpbmcg
PSBtX290aGVyU3Vic3RyaW5ncy50YWtlRmlyc3QoKTsKLSAgICAvLyBJZiB3ZSd2ZSBwcmV2aW91
c2x5IGNvbnN1bWVkIHNvbWUgY2hhcmFjdGVycyBvZiB0aGUgbm9uLWN1cnJlbnQgc3RyaW5nLCB3
ZSBub3cgYWNjb3VudCBmb3IgdGhvc2UKLSAgICAvLyBjaGFyYWN0ZXJzIGFzIHBhcnQgb2YgdGhl
IGN1cnJlbnQgc3RyaW5nLCBub3QgYXMgcGFydCBvZiAicHJpb3IgdG8gY3VycmVudCBzdHJpbmcu
IgotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmlu
ZyAtPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKLSAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rl
cigpOwotICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Ci19Ci0KLXZvaWQgU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSk7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycyk7Ci0gICAgcHJvY2Vzc1Bv
c3NpYmxlTmV3bGluZSgpOwotICAgIGFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5n
V2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6
YWR2YW5jZUVtcHR5KCkKLXsKLSAgICBBU1NFUlQoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgp
OwotICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCgh
bV9jdXJyZW50Q2hhcmFjdGVyKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnVwZGF0ZUFk
dmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCkKLXsKLSAg
ICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxKTsKLSAgICBtX2Zhc3RQYXRo
RmxhZ3MgPSBOb0Zhc3RQYXRoOwotICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1i
ZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsKLSAgICBpZiAobV9jdXJyZW50U3Vi
c3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQotICAgICAgICBtX2FkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmds
ZUNoYXJhY3RlclN1YnN0cmluZzsKLSAgICBlbHNlCi0gICAgICAgIG1fYWR2YW5jZUFuZFVwZGF0
ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsKLX0KLQotT3JkaW5h
bE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2N1cnJlbnRMaW5lKTsKLX0KLQot
T3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRDb2x1bW4oKSBjb25zdAotewot
ICAgIHJldHVybiBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG51bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkKCkgLSBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRMaW5lKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEN1cnJlbnRQb3NpdGlvbihP
cmRpbmFsTnVtYmVyIGxpbmUsIE9yZGluYWxOdW1iZXIgY29sdW1uQWZ0cmVQcm9sb2csIGludCBw
cm9sb2dMZW5ndGgpCi17Ci0gICAgbV9jdXJyZW50TGluZSA9IGxpbmUuemVyb0Jhc2VkSW50KCk7
Ci0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG51
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgKyBwcm9sb2dMZW5ndGggLSBjb2x1bW5BZnRyZVBy
b2xvZy56ZXJvQmFzZWRJbnQoKTsKLX0KLQotU2VnbWVudGVkU3RyaW5nOjpBZHZhbmNlUGFzdFJl
c3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3QgY2hhciogbGl0
ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCi17Ci0gICAgY29uc3RleHByIHVu
c2lnbmVkIG1heExlbmd0aCA9IDEwOwotICAgIEFTU0VSVCghc3RyY2hyKGxpdGVyYWwsICdcbicp
KTsKLSAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihsaXRlcmFsKTsKLSAgICBBU1NFUlQobGVuZ3Ro
IDw9IG1heExlbmd0aCk7Ci0gICAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gTm90RW5vdWdoQ2hhcmFjdGVyczsKLSAgICBVQ2hhciBjb25zdW1lZENoYXJhY3Rl
cnNbbWF4TGVuZ3RoXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAg
IGlmIChjaGFyYWN0ZXJNaXNtYXRjaChjaGFyYWN0ZXIsIGxpdGVyYWxbaV0sIGxldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSkpIHsKLSAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgIHB1
c2hCYWNrKFN0cmluZyB7IGNvbnN1bWVkQ2hhcmFjdGVycywgaSB9KTsKLSAgICAgICAgICAgIHJl
dHVybiBEaWROb3RNYXRjaDsKLSAgICAgICAgfQotICAgICAgICBhZHZhbmNlUGFzdE5vbk5ld2xp
bmUoKTsKLSAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzW2ldID0gY2hhcmFjdGVyOwotICAgIH0K
LSAgICByZXR1cm4gRGlkTWF0Y2g7Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjp1cGRhdGVB
ZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCkKLXsKLSAgICBBU1NFUlQoIW1f
Y3VycmVudFN1YnN0cmluZy5sZW5ndGgpOwotICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFjdGVyKTsKLSAgICBtX2Zhc3RQ
YXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOwotICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVO
dW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VFbXB0eTsKLSAgICBtX2Fk
dmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlRW1wdHk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21l
bnRlZFN0cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTdmMTkxNDAzN2Qz
MzViZjk4ZTQ4ZTVkNmY5MzE5MzA5YzI2MGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVk
U3RyaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBzaG91
bGQgbm90IHN0YXJ0IHdpdGggImsiLgotLy8gRklYTUU6IFRoaXMgaXMgYSBzaGFyZWQgdG9rZW5p
emVyIGNvbmNlcHQsIG5vdCBhIFNlZ21lbnRlZFN0cmluZyBjb25jZXB0LCBidXQgdGhpcyBpcyB0
aGUgb25seSBjb21tb24gaGVhZGVyIGZvciBub3cuCi1jb25zdGV4cHIgTENoYXIga0VuZE9mRmls
ZU1hcmtlciA9IDA7Ci0KLWNsYXNzIFNlZ21lbnRlZFN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgU2Vn
bWVudGVkU3RyaW5nKCkgPSBkZWZhdWx0OwotICAgIFNlZ21lbnRlZFN0cmluZyhTdHJpbmcmJik7
Ci0gICAgU2VnbWVudGVkU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU2VnbWVudGVkU3Ry
aW5nKFNlZ21lbnRlZFN0cmluZyYmKSA9IGRlbGV0ZTsKLSAgICBTZWdtZW50ZWRTdHJpbmcoY29u
c3QgU2VnbWVudGVkU3RyaW5nJikgPSBkZWxldGU7Ci0KLSAgICBTZWdtZW50ZWRTdHJpbmcmIG9w
ZXJhdG9yPShTZWdtZW50ZWRTdHJpbmcmJik7Ci0gICAgU2VnbWVudGVkU3RyaW5nJiBvcGVyYXRv
cj0oY29uc3QgU2VnbWVudGVkU3RyaW5nJikgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBjbGVhcigp
OwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHZvaWQgYXBwZW5kKFNlZ21lbnRlZFN0cmluZyYm
KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLQotICAgIHZvaWQg
YXBwZW5kKFN0cmluZyYmKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmKTsKLQotICAg
IHZvaWQgcHVzaEJhY2soU3RyaW5nJiYpOwotCi0gICAgdm9pZCBzZXRFeGNsdWRlTGluZU51bWJl
cnMoKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2N1cnJlbnRTdWJz
dHJpbmcubGVuZ3RoOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBib29s
IGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nsb3NlZDsgfQotCi0gICAgdm9pZCBhZHZh
bmNlKCk7Ci0gICAgdm9pZCBhZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsgLy8gRmFzdGVyIHRoYW4g
Y2FsbGluZyBhZHZhbmNlIHdoZW4gd2Uga25vdyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgbm90
IGEgbmV3bGluZS4KLSAgICB2b2lkIGFkdmFuY2VQYXN0TmV3bGluZSgpOyAvLyBGYXN0ZXIgdGhh
biBjYWxsaW5nIGFkdmFuY2Ugd2hlbiB3ZSBrbm93IHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBh
IG5ld2xpbmUuCi0KLSAgICBlbnVtIEFkdmFuY2VQYXN0UmVzdWx0IHsgRGlkTm90TWF0Y2gsIERp
ZE1hdGNoLCBOb3RFbm91Z2hDaGFyYWN0ZXJzIH07Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoPiBBZHZhbmNlUGFzdFJlc3VsdCBhZHZhbmNlUGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClb
bGVuZ3RoXSkgeyByZXR1cm4gYWR2YW5jZVBhc3Q8bGVuZ3RoLCBmYWxzZT4obGl0ZXJhbCk7IH0K
LSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQ
YXN0TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IGNoYXIgKCZsaXRlcmFsKVtsZW5ndGhd
KSB7IHJldHVybiBhZHZhbmNlUGFzdDxsZW5ndGgsIHRydWU+KGxpdGVyYWwpOyB9Ci0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpIGNvbnN0OwotCi0gICAgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICBVQ2hhciBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOyB9Ci0KLSAgICBPcmRpbmFsTnVtYmVyIGN1cnJl
bnRDb2x1bW4oKSBjb25zdDsKLSAgICBPcmRpbmFsTnVtYmVyIGN1cnJlbnRMaW5lKCkgY29uc3Q7
Ci0KLSAgICAvLyBTZXRzIHZhbHVlIG9mIGxpbmUvY29sdW1uIHZhcmlhYmxlcy4gQ29sdW1uIGlz
IHNwZWNpZmllZCBpbmRpcmVjdGx5IGJ5IGEgcGFyYW1ldGVyIGNvbHVtbkFmdGVyUHJvbG9nCi0g
ICAgLy8gd2hpY2ggaXMgYSB2YWx1ZSBvZiBjb2x1bW4gdGhhdCB3ZSBzaG91bGQgZ2V0IGFmdGVy
IGEgcHJvbG9nIChmaXJzdCBwcm9sb2dMZW5ndGggY2hhcmFjdGVycykgaGFzIGJlZW4gY29uc3Vt
ZWQuCi0gICAgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oT3JkaW5hbE51bWJlciBsaW5lLCBPcmRp
bmFsTnVtYmVyIGNvbHVtbkFmdGVyUHJvbG9nLCBpbnQgcHJvbG9nTGVuZ3RoKTsKLQotcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgU3Vic3RyaW5nIHsKLSAgICAgICAgU3Vic3RyaW5nKCkgPSBkZWZhdWx0
OwotICAgICAgICBTdWJzdHJpbmcoU3RyaW5nJiYpOwotCi0gICAgICAgIFVDaGFyIGN1cnJlbnRD
aGFyYWN0ZXIoKSBjb25zdDsKLSAgICAgICAgVUNoYXIgY3VycmVudENoYXJhY3RlclByZUluY3Jl
bWVudCgpOwotCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgYXBwZW5kVG8oU3RyaW5nQnVpbGRlciYpIGNvbnN0OwotCi0g
ICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAg
ICAgICAgYm9vbCBpczhCaXQ7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIGNvbnN0IExD
aGFyKiBjdXJyZW50Q2hhcmFjdGVyODsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50
Q2hhcmFjdGVyMTY7Ci0gICAgICAgIH07Ci0gICAgICAgIGJvb2wgZG9Ob3RFeGNsdWRlTGluZU51
bWJlcnMgeyB0cnVlIH07Ci0gICAgfTsKLQotICAgIGVudW0gRmFzdFBhdGhGbGFncyB7Ci0gICAg
ICAgIE5vRmFzdFBhdGggPSAwLAotICAgICAgICBVc2U4Qml0QWR2YW5jZUFuZFVwZGF0ZUxpbmVO
dW1iZXJzID0gMSA8PCAwLAotICAgICAgICBVc2U4Qml0QWR2YW5jZSA9IDEgPDwgMSwKLSAgICB9
OwotCi0gICAgdm9pZCBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nJiYpOwotCi0gICAgdm9pZCBw
cm9jZXNzUG9zc2libGVOZXdsaW5lKCk7Ci0gICAgdm9pZCBzdGFydE5ld0xpbmUoKTsKLQotICAg
IHZvaWQgYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKLSAgICB2b2lkIGFkdmFu
Y2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTYoKTsKLSAgICB2b2lkIGFkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVyMTYoKTsKLSAgICB2b2lkIGFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vi
c3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotICAgIHZvaWQgYWR2YW5jZVBhc3RT
aW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLSAgICB2b2lkIGFkdmFuY2VFbXB0eSgpOwotCi0g
ICAgdm9pZCB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOwotICAgIHZvaWQgdXBkYXRl
QWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOwotICAgIHZvaWQgdXBkYXRl
QWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLQot
ICAgIHZvaWQgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBib29sIGNoYXJhY3Rlck1pc21hdGNoKENoYXJhY3Rl
clR5cGUsIGNoYXIsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKTsKLSAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlPiBBZHZhbmNl
UGFzdFJlc3VsdCBhZHZhbmNlUGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClbbGVuZ3RoXSk7Ci0g
ICAgQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3RTbG93Q2FzZShjb25zdCBjaGFyKiBsaXRl
cmFsLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Ci0KLSAgICBTdWJzdHJpbmcgbV9j
dXJyZW50U3Vic3RyaW5nOwotICAgIERlcXVlPFN1YnN0cmluZz4gbV9vdGhlclN1YnN0cmluZ3M7
Ci0KLSAgICBib29sIG1faXNDbG9zZWQgeyBmYWxzZSB9OwotCi0gICAgVUNoYXIgbV9jdXJyZW50
Q2hhcmFjdGVyIHsgMCB9OwotCi0gICAgdW5zaWduZWQgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgeyAwIH07Ci0gICAgaW50IG1f
Y3VycmVudExpbmUgeyAwIH07Ci0KLSAgICB1bnNpZ25lZCBjaGFyIG1fZmFzdFBhdGhGbGFncyB7
IE5vRmFzdFBhdGggfTsKLSAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2FkdmFuY2VXaXRo
b3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rpb24pKCkgeyAmU2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlRW1wdHkgfTsKLSAgICB2b2lkIChTZWdtZW50ZWRTdHJpbmc6OiptX2FkdmFuY2VBbmRVcGRh
dGVMaW5lTnVtYmVyRnVuY3Rpb24pKCkgeyAmU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlRW1wdHkg
fTsKLX07Ci0KLWlubGluZSBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6U3Vic3RyaW5nKFN0
cmluZyYmIHBhc3NlZFN0cmluZykKLSAgICA6IHN0cmluZyhXVEZNb3ZlKHBhc3NlZFN0cmluZykp
Ci0gICAgLCBsZW5ndGgoc3RyaW5nLmxlbmd0aCgpKQotewotICAgIGlmIChsZW5ndGgpIHsKLSAg
ICAgICAgaXM4Qml0ID0gc3RyaW5nLmltcGwoKS0+aXM4Qml0KCk7Ci0gICAgICAgIGlmIChpczhC
aXQpCi0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyOCA9IHN0cmluZy5pbXBsKCktPmNoYXJh
Y3RlcnM4KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIxNiA9
IHN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMxNigpOwotICAgIH0KLX0KLQotaW5saW5lIHVuc2ln
bmVkIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1l
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0cmluZy5sZW5ndGgoKSAtIGxlbmd0aDsKLX0KLQot
QUxXQVlTX0lOTElORSBVQ2hhciBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6Y3VycmVudENo
YXJhY3RlcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0gICAgcmV0dXJuIGlzOEJp
dCA/ICpjdXJyZW50Q2hhcmFjdGVyOCA6ICpjdXJyZW50Q2hhcmFjdGVyMTY7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgVUNoYXIgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OmN1cnJlbnRDaGFyYWN0
ZXJQcmVJbmNyZW1lbnQoKQotewotICAgIEFTU0VSVChsZW5ndGgpOwotICAgIHJldHVybiBpczhC
aXQgPyAqKytjdXJyZW50Q2hhcmFjdGVyOCA6ICorK2N1cnJlbnRDaGFyYWN0ZXIxNjsKLX0KLQot
aW5saW5lIFNlZ21lbnRlZFN0cmluZzo6U2VnbWVudGVkU3RyaW5nKFN0cmluZyYmIHN0cmluZykK
LSAgICA6IG1fY3VycmVudFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpCi17Ci0gICAgaWYgKG1f
Y3VycmVudFN1YnN0cmluZy5sZW5ndGgpIHsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0g
bV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIoKTsKLSAgICAgICAgdXBkYXRlQWR2
YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLSAgICB9Ci19Ci0KLWlubGluZSBTZWdtZW50ZWRTdHJp
bmc6OlNlZ21lbnRlZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICA6IFNlZ21lbnRl
ZFN0cmluZyhTdHJpbmcgeyBzdHJpbmcgfSkKLXsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNl
Z21lbnRlZFN0cmluZzo6ZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKQotewotICAgIEFTU0VSVCht
X2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4gMSk7Ci0gICAgaWYgKFVOTElLRUxZKC0tbV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxKSkKLSAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9u
UG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIo
KQotewotICAgIGlmIChMSUtFTFkobV9mYXN0UGF0aEZsYWdzICYgVXNlOEJpdEFkdmFuY2UpKSB7
Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9ICorK21fY3VycmVudFN1YnN0cmluZy5jdXJy
ZW50Q2hhcmFjdGVyODsKLSAgICAgICAgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgICh0aGlzLT4qbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5n
TGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQotCi1pbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6
OnN0YXJ0TmV3TGluZSgpCi17Ci0gICAgKyttX2N1cnJlbnRMaW5lOwotICAgIG1fbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZCgpOwotfQotCi1pbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnByb2Nlc3NQb3Nz
aWJsZU5ld2xpbmUoKQotewotICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPT0gJ1xuJykKLSAg
ICAgICAgc3RhcnROZXdMaW5lKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6
YWR2YW5jZSgpCi17Ci0gICAgaWYgKExJS0VMWShtX2Zhc3RQYXRoRmxhZ3MgJiBVc2U4Qml0QWR2
YW5jZSkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKTsK
LSAgICAgICAgYm9vbCBsYXN0Q2hhcmFjdGVyV2FzTmV3bGluZSA9IG1fY3VycmVudENoYXJhY3Rl
ciA9PSAnXG4nOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJz
dHJpbmcuY3VycmVudENoYXJhY3Rlcjg7Ci0gICAgICAgIGJvb2wgaGF2ZU9uZUNoYXJhY3Rlckxl
ZnQgPSAtLW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMTsKLSAgICAgICAgaWYgKExJS0VM
WSghKGxhc3RDaGFyYWN0ZXJXYXNOZXdsaW5lIHwgaGF2ZU9uZUNoYXJhY3RlckxlZnQpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJXYXNOZXdsaW5lICYg
ISEobV9mYXN0UGF0aEZsYWdzICYgVXNlOEJpdEFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVycykp
Ci0gICAgICAgICAgICBzdGFydE5ld0xpbmUoKTsKLSAgICAgICAgaWYgKGhhdmVPbmVDaGFyYWN0
ZXJMZWZ0KQotICAgICAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5n
bGVDaGFyYWN0ZXJTdWJzdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICh0
aGlzLT4qbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdE5vbk5ld2xpbmUoKQot
ewotICAgIEFTU0VSVChtX2N1cnJlbnRDaGFyYWN0ZXIgIT0gJ1xuJyk7Ci0gICAgYWR2YW5jZVdp
dGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKLX0KLQotaW5saW5lIHZvaWQgU2VnbWVudGVkU3Ry
aW5nOjphZHZhbmNlUGFzdE5ld2xpbmUoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRDaGFyYWN0
ZXIgPT0gJ1xuJyk7Ci0gICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKSB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCi0g
ICAgICAgICAgICBzdGFydE5ld0xpbmUoKTsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0g
bV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXJQcmVJbmNyZW1lbnQoKTsKLSAgICAg
ICAgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgICh0aGlzLT4qbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpOwotfQot
Ci1pbmxpbmUgdW5zaWduZWQgU2VnbWVudGVkU3RyaW5nOjpudW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudFN1YnN0cmluZyArIG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJh
Y3RlcnNDb25zdW1lZCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBB
TFdBWVNfSU5MSU5FIGJvb2wgU2VnbWVudGVkU3RyaW5nOjpjaGFyYWN0ZXJNaXNtYXRjaChDaGFy
YWN0ZXJUeXBlIGEsIGNoYXIgYiwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpCi17Ci0g
ICAgcmV0dXJuIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSA/ICFpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKGEsIGIpIDogYSAhPSBiOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGhJbmNs
dWRpbmdUZXJtaW5hdG9yLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZT4gU2VnbWVudGVk
U3RyaW5nOjpBZHZhbmNlUGFzdFJlc3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0KGNv
bnN0IGNoYXIgKCZsaXRlcmFsKVtsZW5ndGhJbmNsdWRpbmdUZXJtaW5hdG9yXSkKLXsKLSAgICBj
b25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoID0gbGVuZ3RoSW5jbHVkaW5nVGVybWluYXRvciAtIDE7
Ci0gICAgQVNTRVJUKCFsaXRlcmFsW2xlbmd0aF0pOwotICAgIEFTU0VSVCghc3RyY2hyKGxpdGVy
YWwsICdcbicpKTsKLSAgICBpZiAobGVuZ3RoICsgMSA8IG1fY3VycmVudFN1YnN0cmluZy5sZW5n
dGgpIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5pczhCaXQpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIGlmIChjaGFyYWN0ZXJNaXNtYXRjaChtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJh
Y3RlcjhbaV0sIGxpdGVyYWxbaV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBEaWROb3RNYXRjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyOCArPSBsZW5ndGg7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRD
aGFyYWN0ZXI4OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlck1p
c21hdGNoKG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyMTZbaV0sIGxpdGVyYWxb
aV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBEaWROb3RNYXRjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudFN1YnN0
cmluZy5jdXJyZW50Q2hhcmFjdGVyMTYgKz0gbGVuZ3RoOwotICAgICAgICAgICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gKm1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyMTY7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCAtPSBsZW5ndGg7Ci0gICAg
ICAgIHJldHVybiBEaWRNYXRjaDsKLSAgICB9Ci0gICAgcmV0dXJuIGFkdmFuY2VQYXN0U2xvd0Nh
c2UobGl0ZXJhbCwgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKTsKLX0KLQotaW5saW5lIHZvaWQg
U2VnbWVudGVkU3RyaW5nOjp1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpCi17Ci0gICAg
aWYgKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKSB7Ci0gICAgICAgIGlmIChtX2N1cnJl
bnRTdWJzdHJpbmcuaXM4Qml0KSB7Ci0gICAgICAgICAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBVc2U4
Qml0QWR2YW5jZTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNs
dWRlTGluZU51bWJlcnMpCi0gICAgICAgICAgICAgICAgbV9mYXN0UGF0aEZsYWdzIHw9IFVzZThC
aXRBZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcnM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9mYXN0UGF0aEZsYWdzID0gTm9GYXN0UGF0aDsKLSAgICAgICAgbV9h
ZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIxNjsKLSAgICAgICAgaWYgKG1fY3Vy
cmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycykKLSAgICAgICAgICAgIG1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VBbmRVcGRhdGVMaW5lTnVtYmVyMTY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTY7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgpIHsKLSAgICAgICAgdXBkYXRlQWR2
YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmcoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDJmNDQ4MjAwYzk0NGM0YWUxNGYxMjk4YzM4YjI5MTE4NzM1ZDEzOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
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
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEluIHNvbWUgY2lyY3Vt
c3RhbmNlcyB3ZSB3YW50IHRvIHN0b3JlIGEgU3RyaW5nIGFsb25nIHdpdGggdGhlIFRleHREaXJl
Y3Rpb24KLS8vIG9mIHRoZSBTdHJpbmcgYXMgbGVhcm5lZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRo
ZSBTdHJpbmcuIEZvciBleGFtcGxlLAotLy8gY29uc2lkZXIgc3RvcmluZyB0aGUgdGl0bGUgZGVy
aXZlZCBmcm9tIDx0aXRsZSBkaXI9J3J0bCc+c29tZSB0aXRsZTwvdGl0bGU+Ci0vLyBpbiB0aGUg
aGlzdG9yeS4KLS8vCi0vLyBOb3RlIHRoYXQgaXMgZXhwbGljaXRseSAqbm90KiB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBzdHJpbmcgYXMgbGVhcm5lZAotLy8gZnJvbSB0aGUgY2hhcmFjdGVycyBvZiB0
aGUgc3RyaW5nOyBpdCdzIGV4dHJhIG1ldGFkYXRhIHdlIGhhdmUgZXh0ZXJuYWwKLS8vIHRvIHRo
ZSBzdHJpbmcuCi0KLXN0cnVjdCBTdHJpbmdXaXRoRGlyZWN0aW9uIHsKLSAgICBTdHJpbmcgc3Ry
aW5nOwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uIHsgVGV4dERpcmVjdGlvbjo6TFRSIH07
Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24m
IGEsIGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIGIpCi17Ci0gICAgcmV0dXJuIGEuc3RyaW5n
ID09IGIuc3RyaW5nICYmIGEuZGlyZWN0aW9uID09IGIuZGlyZWN0aW9uOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIGEsIGNvbnN0IFN0cmlu
Z1dpdGhEaXJlY3Rpb24mIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotaW5saW5l
IFN0cmluZ1dpdGhEaXJlY3Rpb24gdHJ1bmNhdGVGcm9tRW5kKGNvbnN0IFN0cmluZ1dpdGhEaXJl
Y3Rpb24mIHN0cmluZywgdW5zaWduZWQgbWF4TGVuZ3RoKQotewotICAgIHJldHVybiB7IHN0cmlu
Zy5zdHJpbmcubGVmdChtYXhMZW5ndGgpLCBzdHJpbmcuZGlyZWN0aW9uIH07Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3VmZml4VHJlZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdWZmaXhUcmVlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGEyNGNlNjAyMGE5YmRkNDllYjUzZDEyZTcxZjU5Mjg5ZDc4N2I1MDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdWZmaXhUcmVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBZGFtIEJhcnRoLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBVbmljb2RlQ29kZWJv
b2sgewotcHVibGljOgotICAgIHN0YXRpYyBpbnQgY29kZVdvcmQoVUNoYXIgYykgeyByZXR1cm4g
YzsgfQotICAgIGVudW0geyBjb2RlU2l6ZSA9IDEgPDwgOCAqIHNpemVvZihVQ2hhcikgfTsKLX07
Ci0KLWNsYXNzIEFTQ0lJQ29kZWJvb2sgewotcHVibGljOgotICAgIHN0YXRpYyBpbnQgY29kZVdv
cmQoVUNoYXIgYykgeyByZXR1cm4gYyAmIChjb2RlU2l6ZSAtIDEpOyB9Ci0gICAgZW51bSB7IGNv
ZGVTaXplID0gMSA8PCAoOCAqIHNpemVvZihjaGFyKSAtIDEpIH07Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlYm9vaz4KLWNsYXNzIFN1ZmZpeFRyZWUgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1ZmZpeFRyZWUpCi1wdWJsaWM6
Ci0gICAgU3VmZml4VHJlZShjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGRlcHRoKQotICAg
ICAgICA6IG1fZGVwdGgoZGVwdGgpCi0gICAgICAgICwgbV9sZWFmKHRydWUpCi0gICAgewotICAg
ICAgICBidWlsZCh0ZXh0KTsKLSAgICB9Ci0KLSAgICBib29sIG1pZ2h0Q29udGFpbihjb25zdCBT
dHJpbmcmIHF1ZXJ5KQotICAgIHsKLSAgICAgICAgTm9kZSogY3VycmVudCA9ICZtX3Jvb3Q7Ci0g
ICAgICAgIGludCBsaW1pdCA9IHN0ZDo6bWluKG1fZGVwdGgsIHF1ZXJ5Lmxlbmd0aCgpKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW1pdDsgKytpKSB7Ci0gICAgICAgICAgICBhdXRv
IGl0ID0gY3VycmVudC0+ZmluZChDb2RlYm9vazo6Y29kZVdvcmQocXVlcnlbaV0pKTsKLSAgICAg
ICAgICAgIGlmIChpdCA9PSBjdXJyZW50LT5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBjdXJyZW50ID0gaXQtPm5vZGU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNsYXNzIE5vZGUgewotICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE5vZGUo
Ym9vbCBpc0xlYWYgPSBmYWxzZSkKLSAgICAgICAgICAgIDogbV9pc0xlYWYoaXNMZWFmKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+Tm9kZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byogY2hpbGQgPSBlbnRyeS5ub2RlOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZCAmJiAhY2hp
bGQtPm1faXNMZWFmKQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2hpbGQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBOb2RlKiYgY2hpbGRBdChpbnQgY29kZVdvcmQp
OwotCi0gICAgICAgIGF1dG8gZmluZChpbnQgY29kZVdvcmQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmZpbmRfaWYobV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVu
ZCgpLCBbY29kZVdvcmRdKGF1dG8mIGVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5LmNvZGVXb3JkID09IGNvZGVXb3JkOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fY2hpbGRyZW4uZW5kKCk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHN0cnVjdCBDaGlsZFdpdGhDb2RlV29yZCB7Ci0gICAgICAgICAgICBp
bnQgY29kZVdvcmQ7Ci0gICAgICAgICAgICBOb2RlKiBub2RlOwotICAgICAgICB9OwotCi0gICAg
ICAgIFZlY3RvcjxDaGlsZFdpdGhDb2RlV29yZD4gbV9jaGlsZHJlbjsKLSAgICAgICAgYm9vbCBt
X2lzTGVhZjsKLSAgICB9OwotCi0gICAgdm9pZCBidWlsZChjb25zdCBTdHJpbmcmIHRleHQpCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGJhc2UgPSAwOyBiYXNlIDwgdGV4dC5sZW5ndGgo
KTsgKytiYXNlKSB7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50ID0gJm1fcm9vdDsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4oYmFzZSArIG1fZGVwdGgsIHRleHQubGVu
Z3RoKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSAwOyBiYXNlICsgb2Zm
c2V0IDwgbGltaXQ7ICsrb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQg
IT0gJm1fbGVhZik7Ci0gICAgICAgICAgICAgICAgTm9kZSomIGNoaWxkID0gY3VycmVudC0+Y2hp
bGRBdChDb2RlYm9vazo6Y29kZVdvcmQodGV4dFtiYXNlICsgb2Zmc2V0XSkpOwotICAgICAgICAg
ICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gYmFzZSArIG9m
ZnNldCArIDEgPT0gbGltaXQgPyAmbV9sZWFmIDogbmV3IE5vZGUoKTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY2hpbGQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBOb2RlIG1fcm9vdDsKLSAgICB1bnNpZ25lZCBtX2RlcHRoOwotCi0gICAgLy8gSW5zdGVhZCBv
ZiBhbGxvY2F0aW5nIGEgZnJlc2ggZW1wdHkgbGVhZiBub2RlIGZvciBldmVyIGxlYWYgaW4gdGhl
IHRyZWUKLSAgICAvLyAodGhlcmUgY2FuIGJlIGEgbG90IG9mIHRoZXNlKSwgd2UgYWxpYXMgYWxs
IHRoZSBsZWF2ZXMgdG8gdGhpcyAic3RhdGljIgotICAgIC8vIGxlYWYgbm9kZS4KLSAgICBOb2Rl
IG1fbGVhZjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvZGVib29rPgotaW5saW5lIGF1dG8g
U3VmZml4VHJlZTxDb2RlYm9vaz46Ok5vZGU6OmNoaWxkQXQoaW50IGNvZGVXb3JkKSAtPiBOb2Rl
KiYKLXsKLSAgICBhdXRvIGl0ID0gZmluZChjb2RlV29yZCk7Ci0gICAgaWYgKGl0ICE9IG1fY2hp
bGRyZW4uZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+bm9kZTsKLSAgICBtX2NoaWxkcmVuLmFw
cGVuZChDaGlsZFdpdGhDb2RlV29yZCB7IGNvZGVXb3JkLCBudWxscHRyIH0pOwotICAgIHJldHVy
biBtX2NoaWxkcmVuLmxhc3QoKS5ub2RlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzgwZmY2ODIwZjA5YTc2MTM3N2YxMmE5NDM5MTI0
YWQyYWFiNDI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBE
b21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKLQotI2luY2x1ZGUgPHVuaWNv
ZGUvdWJyay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVu
c2lnbmVkIGVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcgdGV4dCkKLXsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICB1bnNpZ25lZCBmaXJzdCA9IGk7Ci0gICAg
ICAgIFVDaGFyMzIgY2g7Ci0gICAgICAgIFUxNl9ORVhUKHRleHQsIGksIGxlbmd0aCwgY2gpOwot
ICAgICAgICBpZiAoIXJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmlyc3Q7Ci0gICAgfQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXVuc2ln
bmVkIHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3IHRleHQpCi17Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBsZW5ndGg7IGkgPiAwOyApIHsKLSAgICAgICAgdW5zaWduZWQgbGFzdCA9IGk7Ci0gICAgICAg
IFVDaGFyMzIgY2g7Ci0gICAgICAgIFUxNl9QUkVWKHRleHQsIDAsIGksIGNoKTsKLSAgICAgICAg
aWYgKCFyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpKQotICAgICAgICAgICAgcmV0
dXJuIGxhc3Q7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09B
KQotCi1pbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0
aW9uLCBib29sIGZvcndhcmQpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFr
SXRlcmF0b3IodGV4dCk7Ci0KLSAgICBpZiAoZm9yd2FyZCkgewotICAgICAgICBwb3NpdGlvbiA9
IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7Ci0gICAgICAgIHdoaWxlIChwb3NpdGlvbiAh
PSBVQlJLX0RPTkUpIHsKLSAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhl
IGNoYXJhY3RlciBwcmVjZWVkaW5nIHRoZSBicmVhayBpcyBhbHBoYW51bWVyaWMuCi0gICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8IHRleHQubGVuZ3RoKCkg
JiYgdV9pc2FsbnVtKHRleHRbcG9zaXRpb24gLSAxXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfZm9sbG93aW5nKGl0LCBw
b3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGgoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlv
bik7Ci0gICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBVQlJLX0RPTkUpIHsKLSAgICAgICAgICAg
IC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJy
ZWFrIGlzIGFscGhhbnVtZXJpYy4KLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiB1X2lzYWxu
dW0odGV4dFtwb3NpdGlvbl0pKQotICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQot
ICAgICAgICAgICAgcG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIGZpbmRXb3JkQm91
bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQotewotICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQpOwot
ICAgICplbmQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwotICAgIGlmICgqZW5kIDwg
MCkKLSAgICAgICAgKmVuZCA9IHVicmtfbGFzdChpdCk7Ci0gICAgKnN0YXJ0ID0gdWJya19wcmV2
aW91cyhpdCk7Ci19Ci0KLXZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQs
IGludCBwb3NpdGlvbiwgaW50KiBlbmQpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dCk7Ci0gICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3Np
dGlvbik7Ci0gICAgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsK
LX0KLQotI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmll
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTg3M2FmNGQ3ZDczYzNhZTA5NGRkZmY0NzRkOWRj
YjM1NWFiMTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVGV4dEJvdW5kYXJpZXNfaAotI2RlZmluZSBUZXh0
Qm91bmRhcmllc19oCi0KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgaW5saW5lIGJvb2wgcmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KFVDaGFyMzIgY2hhcmFjdGVyKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgbmVlZGVkIHdoZW4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDY1NiBpcyBmaXhlZC4KLQotICAg
ICAgICAvLyBXZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIGNvbnN0YW50IGlmIHdlIHJlcXVpcmUgYSBu
ZXdlciB2ZXJzaW9uIG9mIHRoZSBJQ1UgaGVhZGVycy4KLSAgICAgICAgY29uc3QgaW50IFdLX1Vf
TEJfQ09ORElUSU9OQUxfSkFQQU5FU0VfU1RBUlRFUiA9IDM3OwotCi0gICAgICAgIGludCBsaW5l
QnJlYWsgPSB1X2dldEludFByb3BlcnR5VmFsdWUoY2hhcmFjdGVyLCBVQ0hBUl9MSU5FX0JSRUFL
KTsKLSAgICAgICAgcmV0dXJuIGxpbmVCcmVhayA9PSBVX0xCX0NPTVBMRVhfQ09OVEVYVCB8fCBs
aW5lQnJlYWsgPT0gV0tfVV9MQl9DT05ESVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSIHx8IGxpbmVC
cmVhayA9PSBVX0xCX0lERU9HUkFQSElDOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGVuZE9mRmly
c3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcpOwotICAgIHVuc2lnbmVkIHN0YXJ0T2ZM
YXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3KTsKLQotICAgIHZvaWQgZmluZFdvcmRC
b3VuZGFyeShTdHJpbmdWaWV3LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKTsK
LSAgICB2b2lkIGZpbmRFbmRXb3JkQm91bmRhcnkoU3RyaW5nVmlldywgaW50IHBvc2l0aW9uLCBp
bnQqIGVuZCk7Ci0gICAgaW50IGZpbmROZXh0V29yZEZyb21JbmRleChTdHJpbmdWaWV3LCBpbnQg
cG9zaXRpb24sIGJvb2wgZm9yd2FyZCk7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgKaW5kZXggZTE4ZWQ1ZjMxZTlh
NmJmMjczMGE4M2YzZjY0NzUyZGM1MjE2ZmVmMC4uMjE5NDJkODk5NDY4OWUyNWRiNDVkZjM2ODg5
YzM1OGZkYmEyYmRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q2hlY2tlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENoZWNrZXJDbGllbnQuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDIyICszNywyMiBAQCBjbGFzcyBUZXh0
Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dENoZWNrZXJDbGllbnQo
KSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJD
aGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRDaGVj
a2luZ1R5cGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChj
b25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdM
ZW5ndGgpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5n
dGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmll
dywgVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3RyaW5nVmlldywgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5n
VHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3RyaW5nVmlldywgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tp
bmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgPSAwOwog
I2VuZGlmCiAKICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUg
bGFuZ3VhZ2VzLCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRo
ZSBsYW5ndWFnZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSBjb3Jy
ZWN0aW9uIHN1Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3MgaW4gbW9yZSB0ZXh0IGluICJjb250
ZXh0IiB0byBhaWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxhbmd1YWdlCiAgICAgLy8gaWRlbnRp
ZmljYXRpb24uIE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vycm91bmRpbmcgdGhlICJ3b3JkIiBm
b3Igd2hpY2ggd2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBzdWdnZXN0aW9ucy4KICAgICB2aXJ0
dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZjZjOGMwOWY5NzFkNTNmNDJmOGNjYWUzMTI4MGMxNzNmZjk0ZDY3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENoZWNraW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
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
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmFuZ2UuaCIKLSNpbmNsdWRlIDx3dGYv
RW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL09wdGlvblNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNz
IFRleHRDaGVja2luZ1R5cGUgOiB1aW50OF90IHsKLSAgICBOb25lICAgICAgICAgICAgICAgICAg
ICA9IDAsCi0gICAgU3BlbGxpbmcgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgR3JhbW1h
ciAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCi0gICAgTGluayAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDIsCi0gICAgUXVvdGUgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgRGFz
aCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDQsCi0gICAgUmVwbGFjZW1lbnQgICAgICAgICAg
ICAgPSAxIDw8IDUsCi0gICAgQ29ycmVjdGlvbiAgICAgICAgICAgICAgPSAxIDw8IDYsCi0gICAg
U2hvd0NvcnJlY3Rpb25QYW5lbCAgICAgPSAxIDw8IDcsCi19OwotCi0jaWYgUExBVEZPUk0oTUFD
KQotdHlwZWRlZiB1aW50NjRfdCBOU1RleHRDaGVja2luZ1R5cGVzOwotV0VCQ09SRV9FWFBPUlQg
TlNUZXh0Q2hlY2tpbmdUeXBlcyBuc1RleHRDaGVja2luZ1R5cGVzKE9wdGlvblNldDxUZXh0Q2hl
Y2tpbmdUeXBlPik7Ci0jZW5kaWYKLQotZW51bSBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB7Ci0g
ICAgVGV4dENoZWNraW5nUHJvY2Vzc0JhdGNoLAotICAgIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNy
ZW1lbnRhbAotfTsKLQotc3RydWN0IEdyYW1tYXJEZXRhaWwgewotICAgIENoYXJhY3RlclJhbmdl
IHJhbmdlOwotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgU3RyaW5nIHVzZXJEZXNj
cmlwdGlvbjsKLX07Ci0KLXN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQgewotICAgIFRleHRDaGVj
a2luZ1R5cGUgdHlwZTsKLSAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKLSAgICBWZWN0b3I8R3Jh
bW1hckRldGFpbD4gZGV0YWlsczsKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7Ci19OwotCi1zdHJ1
Y3QgVGV4dENoZWNraW5nR3Vlc3NlcyB7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAg
ICBib29sIG1pc3NwZWxsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgdW5ncmFtbWF0aWNhbCB7IGZh
bHNlIH07Ci19OwotCi1lbnVtIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyVHlwZSB7IH07
Ci11c2luZyBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXJUeXBlPjsKLQotY2xhc3MgVGV4dENoZWNraW5n
UmVxdWVzdERhdGEgewotICAgIGZyaWVuZCBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsgLy8gRm9y
IGFjY2VzcyB0byBtX2lkZW50aWZpZXIuCi1wdWJsaWM6Ci0gICAgVGV4dENoZWNraW5nUmVxdWVz
dERhdGEoKSA9IGRlZmF1bHQ7Ci0gICAgVGV4dENoZWNraW5nUmVxdWVzdERhdGEoc3RkOjpvcHRp
b25hbDxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVGV4
dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUpCi0gICAgICAgIDogbV90ZXh0IHsgdGV4
dCB9Ci0gICAgICAgICwgbV9pZGVudGlmaWVyIHsgaWRlbnRpZmllciB9Ci0gICAgICAgICwgbV9w
cm9jZXNzVHlwZSB7IHByb2Nlc3NUeXBlIH0KLSAgICAgICAgLCBtX2NoZWNraW5nVHlwZXMgeyBj
aGVja2luZ1R5cGVzIH0KLSAgICB7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxUZXh0Q2hl
Y2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQotICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dDsgfQotICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jaGVja2luZ1R5cGVzOyB9Ci0gICAgVGV4dENoZWNraW5nUHJvY2Vzc1R5
cGUgcHJvY2Vzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NUeXBlOyB9Ci0KLXByaXZh
dGU6Ci0gICAgU3RyaW5nIG1fdGV4dDsKLSAgICBzdGQ6Om9wdGlvbmFsPFRleHRDaGVja2luZ1Jl
cXVlc3RJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7Ci0gICAgVGV4dENoZWNraW5nUHJvY2Vzc1R5
cGUgbV9wcm9jZXNzVHlwZSB7IFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCB9OwotICAg
IE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBtX2NoZWNraW5nVHlwZXM7Ci19OwotCi1jbGFz
cyBUZXh0Q2hlY2tpbmdSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dENoZWNraW5nUmVx
dWVzdD4gewotcHVibGljOgotICAgIHZpcnR1YWwgflRleHRDaGVja2luZ1JlcXVlc3QoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiBkYXRh
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKGNvbnN0IFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoKSA9
IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHRDaGVja2luZ1Byb2Nlc3NU
eXBlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2ViQ29yZTo6
VGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1By
b2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzQmF0Y2gsCi0gICAgICAgIFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Byb2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwKLSAg
ICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdUeXBlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2Vi
Q29yZTo6VGV4dENoZWNraW5nVHlwZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlw
ZTo6Tm9uZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsCi0g
ICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIsCi0gICAgICAgIFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGU6OkxpbmssCi0gICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGU6OlF1b3RlLAotICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwKLSAgICAgICAg
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbiwKLSAgICAgICAgV2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbAotICAgID47Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dERpcmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0
aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZmU5N2RlYTBhNWIwYmU0ODdm
YjgyYjFkYjI1N2QzZTkwMzMxNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBjbGFzcyBUZXh0RGlyZWN0aW9uIDogYm9v
bCB7IExUUiwgUlRMIH07Ci0KLWlubGluZSBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpMVFI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFn
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTM1OTIyNGYwZGI3MGM5YTc3OTM5
OThlZmYxMDQ4MWZjNWQ1MzRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw4MDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxv
cHRpb25hbD4KLSNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWVudW0gY2xhc3MgVGV4dFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsKLSAgICBBdXRv
VGV4dFJlbmRlcmluZywKLSAgICBPcHRpbWl6ZVNwZWVkLAotICAgIE9wdGltaXplTGVnaWJpbGl0
eSwKLSAgICBHZW9tZXRyaWNQcmVjaXNpb24KLX07Ci0KLWVudW0gY2xhc3MgRm9udFNtb290aGlu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBBdXRvU21vb3RoaW5nLAotICAgIE5vU21vb3RoaW5nLAot
ICAgIEFudGlhbGlhc2VkLAotICAgIFN1YnBpeGVsQW50aWFsaWFzZWQKLX07Ci0KLWVudW0gY2xh
c3MgRm9udE9yaWVudGF0aW9uIDogdWludDhfdCB7Ci0gICAgSG9yaXpvbnRhbCwKLSAgICBWZXJ0
aWNhbAotfTsKLQotZW51bSBjbGFzcyBOb25DSktHbHlwaE9yaWVudGF0aW9uIDogdWludDhfdCB7
Ci0gICAgTWl4ZWQsCi0gICAgVXByaWdodAotfTsKLQotZW51bSBFeHBhbnNpb25CZWhhdmlvckZs
YWdzIHsKLSAgICBGb3JiaWRSaWdodEV4cGFuc2lvbiA9IDAgPDwgMCwKLSAgICBBbGxvd1JpZ2h0
RXhwYW5zaW9uID0gMSA8PCAwLAotICAgIEZvcmNlUmlnaHRFeHBhbnNpb24gPSAyIDw8IDAsCi0g
ICAgUmlnaHRFeHBhbnNpb25NYXNrID0gMyA8PCAwLAotCi0gICAgRm9yYmlkTGVmdEV4cGFuc2lv
biA9IDAgPDwgMiwKLSAgICBBbGxvd0xlZnRFeHBhbnNpb24gPSAxIDw8IDIsCi0gICAgRm9yY2VM
ZWZ0RXhwYW5zaW9uID0gMiA8PCAyLAotICAgIExlZnRFeHBhbnNpb25NYXNrID0gMyA8PCAyLAot
Ci0gICAgRGVmYXVsdEV4cGFuc2lvbiA9IEFsbG93UmlnaHRFeHBhbnNpb24gfCBGb3JiaWRMZWZ0
RXhwYW5zaW9uLAotfTsKLXR5cGVkZWYgdW5zaWduZWQgRXhwYW5zaW9uQmVoYXZpb3I7Ci0KLWVu
dW0gRm9udFN5bnRoZXNpc1ZhbHVlcyB7Ci0gICAgRm9udFN5bnRoZXNpc05vbmUgPSAweDAsCi0g
ICAgRm9udFN5bnRoZXNpc1dlaWdodCA9IDB4MSwKLSAgICBGb250U3ludGhlc2lzU3R5bGUgPSAw
eDIsCi0gICAgRm9udFN5bnRoZXNpc1NtYWxsQ2FwcyA9IDB4NAotfTsKLS8vIEZJWE1FOiBVc2Ug
T3B0aW9uU2V0LgotdHlwZWRlZiB1bnNpZ25lZCBGb250U3ludGhlc2lzOwotY29uc3QgdW5zaWdu
ZWQgRm9udFN5bnRoZXNpc1dpZHRoID0gMzsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudExpZ2F0
dXJlcyA6IHVpbnQ4X3QgeyBOb3JtYWwsIFllcywgTm8gfTsKLWVudW0gY2xhc3MgRm9udFZhcmlh
bnRQb3NpdGlvbiA6IHVpbnQ4X3QgeyBOb3JtYWwsIFN1YnNjcmlwdCwgU3VwZXJzY3JpcHQgfTsK
LQotZW51bSBjbGFzcyBGb250VmFyaWFudENhcHMgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0g
ICAgU21hbGwsCi0gICAgQWxsU21hbGwsCi0gICAgUGV0aXRlLAotICAgIEFsbFBldGl0ZSwKLSAg
ICBVbmljYXNlLAotICAgIFRpdGxpbmcKLX07Ci0KLWVudW0gY2xhc3MgRm9udFZhcmlhbnROdW1l
cmljRmlndXJlIDogdWludDhfdCB7Ci0gICAgTm9ybWFsLAotICAgIExpbmluZ051bWJlcnMsCi0g
ICAgT2xkU3R5bGVOdW1iZXJzCi19OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmcgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0gICAgUHJvcG9ydGlvbmFsTnVtYmVycywK
LSAgICBUYWJ1bGFyTnVtYmVycwotfTsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudE51bWVyaWNG
cmFjdGlvbiA6IHVpbnQ4X3QgewotICAgIE5vcm1hbCwKLSAgICBEaWFnb25hbEZyYWN0aW9ucywK
LSAgICBTdGFja2VkRnJhY3Rpb25zCi19OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJpYW50TnVtZXJp
Y09yZGluYWwgOiBib29sIHsgTm9ybWFsLCBZZXMgfTsKLWVudW0gY2xhc3MgRm9udFZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm8gOiBib29sIHsgTm9ybWFsLCBZZXMgfTsKLWVudW0gY2xhc3MgRm9u
dFZhcmlhbnRBbHRlcm5hdGVzIDogYm9vbCB7IE5vcm1hbCwgSGlzdG9yaWNhbEZvcm1zIH07Ci0K
LWVudW0gY2xhc3MgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IDogdWludDhfdCB7Ci0gICAg
Tm9ybWFsLAotICAgIEppczc4LAotICAgIEppczgzLAotICAgIEppczkwLAotICAgIEppczA0LAot
ICAgIFNpbXBsaWZpZWQsCi0gICAgVHJhZGl0aW9uYWwKLX07Ci0KLWVudW0gY2xhc3MgRm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aCA6IHVpbnQ4X3QgewotICAgIE5vcm1hbCwKLSAgICBGdWxsLAot
ICAgIFByb3BvcnRpb25hbAotfTsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudEVhc3RBc2lhblJ1
YnkgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0gICAgWWVzCi19OwotCi1zdHJ1Y3QgRm9udFZh
cmlhbnRTZXR0aW5ncyB7Ci0gICAgRm9udFZhcmlhbnRTZXR0aW5ncygpCi0gICAgICAgIDogY29t
bW9uTGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpCi0gICAgICAgICwgZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKQotICAgICAg
ICAsIGhpc3RvcmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKLSAg
ICAgICAgLCBjb250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KQotICAgICAgICAsIHBvc2l0aW9uKEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbCkKLSAgICAg
ICAgLCBjYXBzKEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsKQotICAgICAgICAsIG51bWVyaWNGaWd1
cmUoRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWwpCi0gICAgICAgICwgbnVtZXJpY1Nw
YWNpbmcoRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsKQotICAgICAgICAsIG51bWVy
aWNGcmFjdGlvbihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsKQotICAgICAgICAs
IG51bWVyaWNPcmRpbmFsKEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCkKLSAgICAg
ICAgLCBudW1lcmljU2xhc2hlZFplcm8oRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5v
cm1hbCkKLSAgICAgICAgLCBhbHRlcm5hdGVzKEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFs
KQotICAgICAgICAsIGVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpOb3JtYWwpCi0gICAgICAgICwgZWFzdEFzaWFuV2lkdGgoRm9udFZhcmlhbnRFYXN0QXNpYW5X
aWR0aDo6Tm9ybWFsKQotICAgICAgICAsIGVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpOb3JtYWwpCi0gICAgewotICAgIH0KLQotICAgIEZvbnRWYXJpYW50U2V0dGluZ3Mo
Ci0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbkxpZ2F0dXJlcywKLSAgICAgICAg
Rm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcywKLSAgICAgICAgRm9u
dFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlcywKLSAgICAgICAgRm9udFZhcmlh
bnRMaWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMsCi0gICAgICAgIEZvbnRWYXJpYW50UG9z
aXRpb24gcG9zaXRpb24sCi0gICAgICAgIEZvbnRWYXJpYW50Q2FwcyBjYXBzLAotICAgICAgICBG
b250VmFyaWFudE51bWVyaWNGaWd1cmUgbnVtZXJpY0ZpZ3VyZSwKLSAgICAgICAgRm9udFZhcmlh
bnROdW1lcmljU3BhY2luZyBudW1lcmljU3BhY2luZywKLSAgICAgICAgRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb24gbnVtZXJpY0ZyYWN0aW9uLAotICAgICAgICBGb250VmFyaWFudE51bWVyaWNP
cmRpbmFsIG51bWVyaWNPcmRpbmFsLAotICAgICAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybyBudW1lcmljU2xhc2hlZFplcm8sCi0gICAgICAgIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBh
bHRlcm5hdGVzLAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgZWFzdEFzaWFu
VmFyaWFudCwKLSAgICAgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCBlYXN0QXNpYW5XaWR0
aCwKLSAgICAgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IGVhc3RBc2lhblJ1YnkpCi0gICAg
ICAgICAgICA6IGNvbW1vbkxpZ2F0dXJlcyhjb21tb25MaWdhdHVyZXMpCi0gICAgICAgICAgICAs
IGRpc2NyZXRpb25hcnlMaWdhdHVyZXMoZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKLSAgICAgICAg
ICAgICwgaGlzdG9yaWNhbExpZ2F0dXJlcyhoaXN0b3JpY2FsTGlnYXR1cmVzKQotICAgICAgICAg
ICAgLCBjb250ZXh0dWFsQWx0ZXJuYXRlcyhjb250ZXh0dWFsQWx0ZXJuYXRlcykKLSAgICAgICAg
ICAgICwgcG9zaXRpb24ocG9zaXRpb24pCi0gICAgICAgICAgICAsIGNhcHMoY2FwcykKLSAgICAg
ICAgICAgICwgbnVtZXJpY0ZpZ3VyZShudW1lcmljRmlndXJlKQotICAgICAgICAgICAgLCBudW1l
cmljU3BhY2luZyhudW1lcmljU3BhY2luZykKLSAgICAgICAgICAgICwgbnVtZXJpY0ZyYWN0aW9u
KG51bWVyaWNGcmFjdGlvbikKLSAgICAgICAgICAgICwgbnVtZXJpY09yZGluYWwobnVtZXJpY09y
ZGluYWwpCi0gICAgICAgICAgICAsIG51bWVyaWNTbGFzaGVkWmVybyhudW1lcmljU2xhc2hlZFpl
cm8pCi0gICAgICAgICAgICAsIGFsdGVybmF0ZXMoYWx0ZXJuYXRlcykKLSAgICAgICAgICAgICwg
ZWFzdEFzaWFuVmFyaWFudChlYXN0QXNpYW5WYXJpYW50KQotICAgICAgICAgICAgLCBlYXN0QXNp
YW5XaWR0aChlYXN0QXNpYW5XaWR0aCkKLSAgICAgICAgICAgICwgZWFzdEFzaWFuUnVieShlYXN0
QXNpYW5SdWJ5KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGlzQWxsTm9ybWFsKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb21tb25MaWdhdHVyZXMgPT0gRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbAotICAgICAgICAgICAgJiYgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9PSBG
b250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBoaXN0b3JpY2FsTGln
YXR1cmVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKLSAgICAgICAgICAgICYmIGNv
bnRleHR1YWxBbHRlcm5hdGVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKLSAgICAg
ICAgICAgICYmIHBvc2l0aW9uID09IEZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgY2FwcyA9PSBGb250VmFyaWFudENhcHM6Ok5vcm1hbAotICAgICAgICAgICAgJiYg
bnVtZXJpY0ZpZ3VyZSA9PSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgbnVtZXJpY1NwYWNpbmcgPT0gRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9y
bWFsCi0gICAgICAgICAgICAmJiBudW1lcmljRnJhY3Rpb24gPT0gRm9udFZhcmlhbnROdW1lcmlj
RnJhY3Rpb246Ok5vcm1hbAotICAgICAgICAgICAgJiYgbnVtZXJpY09yZGluYWwgPT0gRm9udFZh
cmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBudW1lcmljU2xhc2hl
ZFplcm8gPT0gRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbAotICAgICAgICAg
ICAgJiYgYWx0ZXJuYXRlcyA9PSBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgZWFzdEFzaWFuVmFyaWFudCA9PSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
Ok5vcm1hbAotICAgICAgICAgICAgJiYgZWFzdEFzaWFuV2lkdGggPT0gRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBlYXN0QXNpYW5SdWJ5ID09IEZvbnRW
YXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb21tb25MaWdhdHVyZXMgPT0gb3RoZXIuY29tbW9uTGlnYXR1cmVzCi0gICAgICAg
ICAgICAmJiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID09IG90aGVyLmRpc2NyZXRpb25hcnlMaWdh
dHVyZXMKLSAgICAgICAgICAgICYmIGhpc3RvcmljYWxMaWdhdHVyZXMgPT0gb3RoZXIuaGlzdG9y
aWNhbExpZ2F0dXJlcwotICAgICAgICAgICAgJiYgY29udGV4dHVhbEFsdGVybmF0ZXMgPT0gb3Ro
ZXIuY29udGV4dHVhbEFsdGVybmF0ZXMKLSAgICAgICAgICAgICYmIHBvc2l0aW9uID09IG90aGVy
LnBvc2l0aW9uCi0gICAgICAgICAgICAmJiBjYXBzID09IG90aGVyLmNhcHMKLSAgICAgICAgICAg
ICYmIG51bWVyaWNGaWd1cmUgPT0gb3RoZXIubnVtZXJpY0ZpZ3VyZQotICAgICAgICAgICAgJiYg
bnVtZXJpY1NwYWNpbmcgPT0gb3RoZXIubnVtZXJpY1NwYWNpbmcKLSAgICAgICAgICAgICYmIG51
bWVyaWNGcmFjdGlvbiA9PSBvdGhlci5udW1lcmljRnJhY3Rpb24KLSAgICAgICAgICAgICYmIG51
bWVyaWNPcmRpbmFsID09IG90aGVyLm51bWVyaWNPcmRpbmFsCi0gICAgICAgICAgICAmJiBudW1l
cmljU2xhc2hlZFplcm8gPT0gb3RoZXIubnVtZXJpY1NsYXNoZWRaZXJvCi0gICAgICAgICAgICAm
JiBhbHRlcm5hdGVzID09IG90aGVyLmFsdGVybmF0ZXMKLSAgICAgICAgICAgICYmIGVhc3RBc2lh
blZhcmlhbnQgPT0gb3RoZXIuZWFzdEFzaWFuVmFyaWFudAotICAgICAgICAgICAgJiYgZWFzdEFz
aWFuV2lkdGggPT0gb3RoZXIuZWFzdEFzaWFuV2lkdGgKLSAgICAgICAgICAgICYmIGVhc3RBc2lh
blJ1YnkgPT0gb3RoZXIuZWFzdEFzaWFuUnVieTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOyB9Ci0KLSAgICB1bnNpZ25lZCB1bmlxdWVWYWx1ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbW1vbkxpZ2F0dXJlcykg
PDwgMjYKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRpc2NyZXRpb25hcnlM
aWdhdHVyZXMpIDw8IDI0Ci0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihoaXN0
b3JpY2FsTGlnYXR1cmVzKSA8PCAyMgotICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29udGV4dHVhbEFsdGVybmF0ZXMpIDw8IDIwCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb3NpdGlvbikgPDwgMTgKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNhcHMpIDw8IDE1Ci0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihu
dW1lcmljRmlndXJlKSA8PCAxMwotICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bnVtZXJpY1NwYWNpbmcpIDw8IDExCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihudW1lcmljRnJhY3Rpb24pIDw8IDkKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG51bWVyaWNPcmRpbmFsKSA8PCA4Ci0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihudW1lcmljU2xhc2hlZFplcm8pIDw8IDcKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGFsdGVybmF0ZXMpIDw8IDYKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVhc3RBc2lhblZhcmlhbnQpIDw8IDMKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGVhc3RBc2lhbldpZHRoKSA8PCAxCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlYXN0QXNpYW5SdWJ5KSA8PCAwOwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudFNldHRpbmdzPiBk
ZWNvZGUoRGVjb2RlciYpOwotCi0gICAgLy8gRklYTUU6IHRoaXMgd291bGQgYmUgbXVjaCBtb3Jl
IGNvbXBhY3Qgd2l0aCBiaXRmaWVsZHMuCi0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9u
TGlnYXR1cmVzOwotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGRpc2NyZXRpb25hcnlMaWdhdHVy
ZXM7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlczsKLSAgICBG
b250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlczsKLSAgICBGb250VmFyaWFu
dFBvc2l0aW9uIHBvc2l0aW9uOwotICAgIEZvbnRWYXJpYW50Q2FwcyBjYXBzOwotICAgIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZSBudW1lcmljRmlndXJlOwotICAgIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmcgbnVtZXJpY1NwYWNpbmc7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24g
bnVtZXJpY0ZyYWN0aW9uOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgbnVtZXJpY09y
ZGluYWw7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8gbnVtZXJpY1NsYXNoZWRa
ZXJvOwotICAgIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHRlcm5hdGVzOwotICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudCBlYXN0QXNpYW5WYXJpYW50OwotICAgIEZvbnRWYXJpYW50RWFz
dEFzaWFuV2lkdGggZWFzdEFzaWFuV2lkdGg7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
IGVhc3RBc2lhblJ1Ynk7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGb250
VmFyaWFudFNldHRpbmdzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IGNvbW1vbkxpZ2F0dXJlczsKLSAgICBlbmNvZGVyIDw8IGRpc2NyZXRpb25hcnlM
aWdhdHVyZXM7Ci0gICAgZW5jb2RlciA8PCBoaXN0b3JpY2FsTGlnYXR1cmVzOwotICAgIGVuY29k
ZXIgPDwgY29udGV4dHVhbEFsdGVybmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBwb3NpdGlvbjsKLSAg
ICBlbmNvZGVyIDw8IGNhcHM7Ci0gICAgZW5jb2RlciA8PCBudW1lcmljRmlndXJlOwotICAgIGVu
Y29kZXIgPDwgbnVtZXJpY1NwYWNpbmc7Ci0gICAgZW5jb2RlciA8PCBudW1lcmljRnJhY3Rpb247
Ci0gICAgZW5jb2RlciA8PCBudW1lcmljT3JkaW5hbDsKLSAgICBlbmNvZGVyIDw8IG51bWVyaWNT
bGFzaGVkWmVybzsKLSAgICBlbmNvZGVyIDw8IGFsdGVybmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBl
YXN0QXNpYW5WYXJpYW50OwotICAgIGVuY29kZXIgPDwgZWFzdEFzaWFuV2lkdGg7Ci0gICAgZW5j
b2RlciA8PCBlYXN0QXNpYW5SdWJ5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3Rk
OjpvcHRpb25hbDxGb250VmFyaWFudFNldHRpbmdzPiBGb250VmFyaWFudFNldHRpbmdzOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGln
YXR1cmVzPiBjb21tb25MaWdhdHVyZXM7Ci0gICAgZGVjb2RlciA+PiBjb21tb25MaWdhdHVyZXM7
Ci0gICAgaWYgKCFjb21tb25MaWdhdHVyZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzOwotICAgIGRlY29kZXIgPj4gZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKLSAgICBp
ZiAoIWRpc2NyZXRpb25hcnlMaWdhdHVyZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBoaXN0b3JpY2FsTGln
YXR1cmVzOwotICAgIGRlY29kZXIgPj4gaGlzdG9yaWNhbExpZ2F0dXJlczsKLSAgICBpZiAoIWhp
c3RvcmljYWxMaWdhdHVyZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBjb250ZXh0dWFsQWx0ZXJuYXRlczsK
LSAgICBkZWNvZGVyID4+IGNvbnRleHR1YWxBbHRlcm5hdGVzOwotICAgIGlmICghY29udGV4dHVh
bEFsdGVybmF0ZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPEZvbnRWYXJpYW50UG9zaXRpb24+IHBvc2l0aW9uOwotICAgIGRlY29kZXIgPj4gcG9z
aXRpb247Ci0gICAgaWYgKCFwb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRDYXBzPiBjYXBzOwotICAgIGRlY29kZXIg
Pj4gY2FwczsKLSAgICBpZiAoIWNhcHMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZT4gbnVtZXJpY0ZpZ3Vy
ZTsKLSAgICBkZWNvZGVyID4+IG51bWVyaWNGaWd1cmU7Ci0gICAgaWYgKCFudW1lcmljRmlndXJl
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nPiBudW1lcmljU3BhY2luZzsKLSAgICBkZWNvZGVyID4+IG51
bWVyaWNTcGFjaW5nOwotICAgIGlmICghbnVtZXJpY1NwYWNpbmcpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uPiBudW1lcmljRnJhY3Rpb247Ci0gICAgZGVjb2RlciA+PiBudW1lcmljRnJhY3Rpb247Ci0g
ICAgaWYgKCFudW1lcmljRnJhY3Rpb24pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+IG51bWVyaWNPcmRp
bmFsOwotICAgIGRlY29kZXIgPj4gbnVtZXJpY09yZGluYWw7Ci0gICAgaWYgKCFudW1lcmljT3Jk
aW5hbCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+IG51bWVyaWNTbGFzaGVkWmVybzsKLSAgICBk
ZWNvZGVyID4+IG51bWVyaWNTbGFzaGVkWmVybzsKLSAgICBpZiAoIW51bWVyaWNTbGFzaGVkWmVy
bykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzPiBhbHRlcm5hdGVzOwotICAgIGRlY29kZXIgPj4gYWx0ZXJuYXRl
czsKLSAgICBpZiAoIWFsdGVybmF0ZXMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4gZWFzdEFzaWFu
VmFyaWFudDsKLSAgICBkZWNvZGVyID4+IGVhc3RBc2lhblZhcmlhbnQ7Ci0gICAgaWYgKCFlYXN0
QXNpYW5WYXJpYW50KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPiBlYXN0QXNpYW5XaWR0aDsKLSAgICBk
ZWNvZGVyID4+IGVhc3RBc2lhbldpZHRoOwotICAgIGlmICghZWFzdEFzaWFuV2lkdGgpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50
RWFzdEFzaWFuUnVieT4gZWFzdEFzaWFuUnVieTsKLSAgICBkZWNvZGVyID4+IGVhc3RBc2lhblJ1
Ynk7Ci0gICAgaWYgKCFlYXN0QXNpYW5SdWJ5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIHt7Ci0gICAgICAgICpjb21tb25MaWdhdHVyZXMsCi0gICAgICAgICpk
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAotICAgICAgICAqaGlzdG9yaWNhbExpZ2F0dXJlcywKLSAg
ICAgICAgKmNvbnRleHR1YWxBbHRlcm5hdGVzLAotICAgICAgICAqcG9zaXRpb24sCi0gICAgICAg
ICpjYXBzLAotICAgICAgICAqbnVtZXJpY0ZpZ3VyZSwKLSAgICAgICAgKm51bWVyaWNTcGFjaW5n
LAotICAgICAgICAqbnVtZXJpY0ZyYWN0aW9uLAotICAgICAgICAqbnVtZXJpY09yZGluYWwsCi0g
ICAgICAgICpudW1lcmljU2xhc2hlZFplcm8sCi0gICAgICAgICphbHRlcm5hdGVzLAotICAgICAg
ICAqZWFzdEFzaWFuVmFyaWFudCwKLSAgICAgICAgKmVhc3RBc2lhbldpZHRoLAotICAgICAgICAq
ZWFzdEFzaWFuUnVieQotICAgIH19OwotfQotCi1zdHJ1Y3QgRm9udFZhcmlhbnRMaWdhdHVyZXNW
YWx1ZXMgewotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzKAotICAgICAgICBGb250VmFy
aWFudExpZ2F0dXJlcyBjb21tb25MaWdhdHVyZXMsCi0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1
cmVzIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMsCi0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1cmVz
IGhpc3RvcmljYWxMaWdhdHVyZXMsCi0gICAgICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRl
eHR1YWxBbHRlcm5hdGVzKQotICAgICAgICAgICAgOiBjb21tb25MaWdhdHVyZXMoY29tbW9uTGln
YXR1cmVzKQotICAgICAgICAgICAgLCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKGRpc2NyZXRpb25h
cnlMaWdhdHVyZXMpCi0gICAgICAgICAgICAsIGhpc3RvcmljYWxMaWdhdHVyZXMoaGlzdG9yaWNh
bExpZ2F0dXJlcykKLSAgICAgICAgICAgICwgY29udGV4dHVhbEFsdGVybmF0ZXMoY29udGV4dHVh
bEFsdGVybmF0ZXMpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcz4gZGVjb2Rl
KERlY29kZXImKTsKLQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbkxpZ2F0dXJlczsK
LSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwotICAgIEZv
bnRWYXJpYW50TGlnYXR1cmVzIGhpc3RvcmljYWxMaWdhdHVyZXM7Ci0gICAgRm9udFZhcmlhbnRM
aWdhdHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXM7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlczo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBjb21tb25MaWdhdHVyZXM7Ci0gICAgZW5j
b2RlciA8PCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwotICAgIGVuY29kZXIgPDwgaGlzdG9yaWNh
bExpZ2F0dXJlczsKLSAgICBlbmNvZGVyIDw8IGNvbnRleHR1YWxBbHRlcm5hdGVzOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJl
c1ZhbHVlcz4gRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGNvbW1vbkxp
Z2F0dXJlczsKLSAgICBkZWNvZGVyID4+IGNvbW1vbkxpZ2F0dXJlczsKLSAgICBpZiAoIWNvbW1v
bkxpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGRpc2NyZXRpb25hcnlMaWdhdHVyZXM7Ci0gICAg
ZGVjb2RlciA+PiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwotICAgIGlmICghZGlzY3JldGlvbmFy
eUxpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGhpc3RvcmljYWxMaWdhdHVyZXM7Ci0gICAgZGVj
b2RlciA+PiBoaXN0b3JpY2FsTGlnYXR1cmVzOwotICAgIGlmICghaGlzdG9yaWNhbExpZ2F0dXJl
cykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnRMaWdhdHVyZXM+IGNvbnRleHR1YWxBbHRlcm5hdGVzOwotICAgIGRlY29kZXIgPj4g
Y29udGV4dHVhbEFsdGVybmF0ZXM7Ci0gICAgaWYgKCFjb250ZXh0dWFsQWx0ZXJuYXRlcykKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqY29tbW9uTGlnYXR1
cmVzLCAqZGlzY3JldGlvbmFyeUxpZ2F0dXJlcywgKmhpc3RvcmljYWxMaWdhdHVyZXMsICpjb250
ZXh0dWFsQWx0ZXJuYXRlcyB9fTsKLX0KLQotc3RydWN0IEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVl
cyB7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljVmFsdWVzKAotICAgICAgICBGb250VmFyaWFudE51
bWVyaWNGaWd1cmUgZmlndXJlLAotICAgICAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNw
YWNpbmcsCi0gICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZyYWN0aW9uLAotICAg
ICAgICBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGluYWwsCi0gICAgICAgIEZvbnRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvKQotICAgICAgICAgICAgOiBmaWd1cmUo
ZmlndXJlKQotICAgICAgICAgICAgLCBzcGFjaW5nKHNwYWNpbmcpCi0gICAgICAgICAgICAsIGZy
YWN0aW9uKGZyYWN0aW9uKQotICAgICAgICAgICAgLCBvcmRpbmFsKG9yZGluYWwpCi0gICAgICAg
ICAgICAsIHNsYXNoZWRaZXJvKHNsYXNoZWRaZXJvKQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1l
cmljVmFsdWVzPiBkZWNvZGUoRGVjb2RlciYpOwotCi0gICAgRm9udFZhcmlhbnROdW1lcmljRmln
dXJlIGZpZ3VyZTsKLSAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNwYWNpbmc7Ci0gICAg
Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb247Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljT3JkaW5hbCBvcmRpbmFsOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNs
YXNoZWRaZXJvOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRm9udFZhcmlh
bnROdW1lcmljVmFsdWVzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IGZpZ3VyZTsKLSAgICBlbmNvZGVyIDw8IHNwYWNpbmc7Ci0gICAgZW5jb2RlciA8
PCBmcmFjdGlvbjsKLSAgICBlbmNvZGVyIDw8IG9yZGluYWw7Ci0gICAgZW5jb2RlciA8PCBzbGFz
aGVkWmVybzsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnROdW1lcmljVmFsdWVzPiBGb250VmFyaWFudE51bWVyaWNWYWx1ZXM6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmlj
RmlndXJlPiBmaWd1cmU7Ci0gICAgZGVjb2RlciA+PiBmaWd1cmU7Ci0gICAgaWYgKCFmaWd1cmUp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc+IHNwYWNpbmc7Ci0gICAgZGVjb2RlciA+PiBzcGFjaW5nOwot
ICAgIGlmICghc3BhY2luZykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IGZyYWN0aW9uOwotICAgIGRl
Y29kZXIgPj4gZnJhY3Rpb247Ci0gICAgaWYgKCFmcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bD4gb3JkaW5hbDsKLSAgICBkZWNvZGVyID4+IG9yZGluYWw7Ci0gICAgaWYgKCFvcmRpbmFsKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybz4gc2xhc2hlZFplcm87Ci0gICAgZGVjb2RlciA+PiBzbGFz
aGVkWmVybzsKLSAgICBpZiAoIXNsYXNoZWRaZXJvKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIHt7ICpmaWd1cmUsICpzcGFjaW5nLCAqZnJhY3Rpb24sICpvcmRp
bmFsLCAqc2xhc2hlZFplcm8gfX07Ci19Ci0KLXN0cnVjdCBGb250VmFyaWFudEVhc3RBc2lhblZh
bHVlcyB7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXMoCi0gICAgICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50LAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lh
bldpZHRoIHdpZHRoLAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgcnVieSkKLSAg
ICAgICAgICAgIDogdmFyaWFudCh2YXJpYW50KQotICAgICAgICAgICAgLCB3aWR0aCh3aWR0aCkK
LSAgICAgICAgICAgICwgcnVieShydWJ5KQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5W
YWx1ZXM+IGRlY29kZShEZWNvZGVyJik7Ci0KLSAgICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQgdmFyaWFudDsKLSAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIHdpZHRoOwotICAgIEZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgdmFyaWFudDsKLSAgICBlbmNvZGVyIDw8IHdp
ZHRoOwotICAgIGVuY29kZXIgPDwgcnVieTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LXN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM+IEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFsdWVzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4gdmFyaWFudDsKLSAgICBkZWNvZGVyID4+
IHZhcmlhbnQ7Ci0gICAgaWYgKCF2YXJpYW50KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPiB3aWR0aDsK
LSAgICBkZWNvZGVyID4+IHdpZHRoOwotICAgIGlmICghd2lkdGgpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eT4gcnVieTsKLSAgICBkZWNvZGVyID4+IHJ1Ynk7Ci0gICAgaWYgKCFydWJ5KQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICp2YXJpYW50LCAqd2lkdGgsICpy
dWJ5IH19OwotfQotCi1lbnVtIGNsYXNzIEZvbnRXaWR0aFZhcmlhbnQgOiB1aW50OF90IHsKLSAg
ICBSZWd1bGFyV2lkdGgsCi0gICAgSGFsZldpZHRoLAotICAgIFRoaXJkV2lkdGgsCi0gICAgUXVh
cnRlcldpZHRoLAotICAgIExhc3RGb250V2lkdGhWYXJpYW50ID0gUXVhcnRlcldpZHRoCi19Owot
Ci1jb25zdCB1bnNpZ25lZCBGb250V2lkdGhWYXJpYW50V2lkdGggPSAyOwotCi1DT01QSUxFX0FT
U0VSVCghKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250V2lkdGhWYXJpYW50OjpMYXN0Rm9udFdp
ZHRoVmFyaWFudCkgPj4gRm9udFdpZHRoVmFyaWFudFdpZHRoKSwgRm9udFdpZHRoVmFyaWFudFdp
ZHRoX2lzX2NvcnJlY3QpOwotCi1lbnVtIGNsYXNzIEZvbnRTbWFsbENhcHMgOiB1aW50OF90IHsK
LSAgICBPZmYgPSAwLAotICAgIE9uID0gMQotfTsKLQotZW51bSBjbGFzcyBLZXJuaW5nIDogdWlu
dDhfdCB7Ci0gICAgQXV0bywKLSAgICBOb3JtYWwsCi0gICAgTm9TaGlmdAotfTsKLQotZW51bSBj
bGFzcyBGb250T3B0aWNhbFNpemluZyA6IHVpbnQ4X3QgewotICAgIEVuYWJsZWQsCi0gICAgRGlz
YWJsZWQKLX07Ci0KLS8vIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNw
ZWMvZnZhci5odG0jVkFUCi1lbnVtIGNsYXNzIEZvbnRTdHlsZUF4aXMgOiB1aW50OF90IHsKLSAg
ICBzbG50LAotICAgIGl0YWwKLX07Ci0KLWVudW0gY2xhc3MgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgOiB1aW50OF90IHsKLSAgICBObywKLSAgICBZZXMKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dFJlbmRlcmlu
Z01vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlRl
eHRSZW5kZXJpbmdNb2RlLAotICAgIFdlYkNvcmU6OlRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4
dFJlbmRlcmluZywKLSAgICBXZWJDb3JlOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVl
ZCwKLSAgICBXZWJDb3JlOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5LAot
ICAgIFdlYkNvcmU6OlRleHRSZW5kZXJpbmdNb2RlOjpHZW9tZXRyaWNQcmVjaXNpb24KLSAgICA+
OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250U21vb3Ro
aW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6
Rm9udFNtb290aGluZ01vZGUsCi0gICAgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9T
bW9vdGhpbmcsCi0gICAgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nLAot
ICAgIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZCwKLSAgICBXZWJDb3Jl
OjpGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCwKLSAgICBXZWJDb3JlOjpG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRPcmllbnRhdGlvbj4gewotICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udE9yaWVudGF0aW9uLAotICAg
IFdlYkNvcmU6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwKLSAgICBXZWJDb3JlOjpGb250
T3JpZW50YXRpb246OlZlcnRpY2FsCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gewotICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiwK
LSAgICBXZWJDb3JlOjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCwKLSAgICBXZWJDb3Jl
OjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpVcHJpZ2h0Ci0gICAgPjsKLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHsKLSAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TGln
YXR1cmVzLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwsCi0gICAg
V2ViQ29yZTo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllcywKLSAgICBXZWJDb3JlOjpGb250VmFy
aWFudExpZ2F0dXJlczo6Tm8KLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGb250VmFyaWFudFBvc2l0aW9uPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0g
RW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudFBvc2l0aW9uLAotICAgIFdlYkNv
cmU6OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFu
dFBvc2l0aW9uOjpTdWJzY3JpcHQsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6
U3VwZXJzY3JpcHQKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpGb250VmFyaWFudENhcHM+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVz
PAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50Q2FwcywKLSAgICBXZWJDb3JlOjpGb250VmFyaWFu
dENhcHM6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudENhcHM6OlNtYWxsLAotICAg
IFdlYkNvcmU6OkZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGwsCi0gICAgV2ViQ29yZTo6Rm9udFZh
cmlhbnRDYXBzOjpQZXRpdGUsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQZXRp
dGUsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzOjpVbmljYXNlLAotICAgIFdlYkNvcmU6
OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZT4gewotICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmlj
RmlndXJlLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsLAot
ICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVycywKLSAg
ICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVycwotICAg
ID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAg
IFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcsCi0gICAgV2ViQ29yZTo6Rm9udFZh
cmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVt
ZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlh
bnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbj4g
ewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb24sCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rp
b246Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlh
Z29uYWxGcmFjdGlvbnMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246
OlN0YWNrZWRGcmFjdGlvbnMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsPiB7Ci0gICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFs
LAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCwKLSAgICBX
ZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXMKLSAgICA+OwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8sCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybzo6WWVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzPiB7Ci0gICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEFsdGVybmF0ZXMsCi0gICAg
V2ViQ29yZTo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWwsCi0gICAgV2ViQ29yZTo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXMKLSAgICA+OwotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRW
YXJpYW50RWFzdEFzaWFuVmFyaWFudCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Okppczc4LAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
ODMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MCwKLSAg
ICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0LAotICAgIFdlYkNv
cmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmllZCwKLSAgICBXZWJDb3Jl
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsLAotICAgIFdlYkNvcmU6
OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsCi0gICAgPjsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aD4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoOjpOb3JtYWwsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVs
bCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWwK
LSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAot
ICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSwKLSAgICBXZWJDb3JlOjpGb250
VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVh
c3RBc2lhblJ1Ynk6OlllcwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQ+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQsCi0gICAgV2ViQ29yZTo6Rm9u
dFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlh
bnQ6OkhhbGZXaWR0aCwKLSAgICBXZWJDb3JlOjpGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRo
LAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aAotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRTbWFsbENhcHM+
IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRTbWFs
bENhcHMsCi0gICAgV2ViQ29yZTo6Rm9udFNtYWxsQ2Fwczo6T2ZmLAotICAgIFdlYkNvcmU6OkZv
bnRTbWFsbENhcHM6Ok9uCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6S2VybmluZz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0g
ICAgV2ViQ29yZTo6S2VybmluZywKLSAgICBXZWJDb3JlOjpLZXJuaW5nOjpBdXRvLAotICAgIFdl
YkNvcmU6Oktlcm5pbmc6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpLZXJuaW5nOjpOb1NoaWZ0Ci0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udE9w
dGljYWxTaXppbmc+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNv
cmU6OkZvbnRPcHRpY2FsU2l6aW5nLAotICAgIFdlYkNvcmU6OkZvbnRPcHRpY2FsU2l6aW5nOjpF
bmFibGVkLAotICAgIFdlYkNvcmU6OkZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZAotICAgID47
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRTdHlsZUF4
aXM+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRT
dHlsZUF4aXMsCi0gICAgV2ViQ29yZTo6Rm9udFN0eWxlQXhpczo6c2xudCwKLSAgICBXZWJDb3Jl
OjpGb250U3R5bGVBeGlzOjppdGFsCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM+IHsKLSAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkFsbG93VXNlckluc3RhbGxlZEZvbnRz
LAotICAgIFdlYkNvcmU6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObywKLSAgICBXZWJDb3Jl
OjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2Rl
QmlkaS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ5Y2ZlZmU2NmM0Y2NmMzcyM2EwMjM1OWQ0NTcw
NTcwMDFlMjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZUJpZGkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFVuaWNvZGVCaWRpX2gKLSNkZWZpbmUgVW5pY29kZUJpZGlfaAot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRVVuaWNvZGVCaWRpIHsKLSAgICBVQk5vcm1h
bCwKLSAgICBFbWJlZCwKLSAgICBPdmVycmlkZSwKLSAgICBJc29sYXRlLAotICAgIFBsYWludGV4
dCwKLSAgICBJc29sYXRlT3ZlcnJpZGUsCi19OyAKLQotaW5saW5lIGJvb2wgaXNJc29sYXRlZChj
b25zdCBFVW5pY29kZUJpZGkmIHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmljb2RlQmlk
aSA9PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlkZSB8fCB1bmljb2Rl
QmlkaSA9PSBQbGFpbnRleHQ7Ci19Ci0KLWlubGluZSBib29sIGlzT3ZlcnJpZGUoRVVuaWNvZGVC
aWRpIHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmljb2RlQmlkaSA9PSBPdmVycmlkZSB8
fCB1bmljb2RlQmlkaSA9PSBJc29sYXRlT3ZlcnJpZGU7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGUyMDdhMzc0ODQ2MWZkOWYxOTZmOGMzNzkyZjQ4OTU5NTU4MGIyZjQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
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
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKLSNpbmNsdWRl
IDxhcnJheT4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIFdyaXRpbmdNb2Rl
IDogdWludDhfdCB7Ci0gICAgVG9wVG9Cb3R0b20gPSAwLCAvLyBob3Jpem9udGFsLXRiCi0gICAg
Qm90dG9tVG9Ub3AgPSAxLCAvLyBob3Jpem9udGFsLWJ0Ci0gICAgTGVmdFRvUmlnaHQgPSAyLCAv
LyB2ZXJ0aWNhbC1scgotICAgIFJpZ2h0VG9MZWZ0ID0gMywgLy8gdmVydGljYWwtcmwKLX07Ci0K
LWNvbnN0ZXhwciB1bnNpZ25lZCBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHdyaXRpbmdNb2RlKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGRpcmVjdGlvbik7Ci19Ci0KLS8vIERlZmluZSB0aGUgdGV4dCBmbG93IGluIHRlcm1zIG9mIHRo
ZSB3cml0aW5nIG1vZGUgYW5kIHRoZSB0ZXh0IGRpcmVjdGlvbi4gVGhlIGZpcnN0Ci0vLyBwYXJ0
IGlzIHRoZSBsaW5lIGdyb3dpbmcgZGlyZWN0aW9uIGFuZCB0aGUgc2Vjb25kIHBhcnQgaXMgdGhl
IGJsb2NrIGdyb3dpbmcgZGlyZWN0aW9uLgotZW51bSBUZXh0RmxvdyB7Ci0gICAgSW5saW5lRWFz
dEJsb2NrU291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpUb3BUb0Jv
dHRvbSwgVGV4dERpcmVjdGlvbjo6TFRSKSwKLSAgICBJbmxpbmVXZXN0QmxvY2tTb3V0aCA9IG1h
a2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tLCBUZXh0RGlyZWN0
aW9uOjpSVEwpLAotICAgIElubGluZUVhc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFs
aXplcihXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRleHREaXJlY3Rpb246OkxUUiksCi0gICAg
SW5saW5lV2VzdEJsb2NrTm9ydGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2Rl
OjpCb3R0b21Ub1RvcCwgVGV4dERpcmVjdGlvbjo6UlRMKSwKLSAgICBJbmxpbmVTb3V0aEJsb2Nr
RWFzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBU
ZXh0RGlyZWN0aW9uOjpMVFIpLAotICAgIElubGluZVNvdXRoQmxvY2tXZXN0ID0gbWFrZVRleHRG
bG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQsIFRleHREaXJlY3Rpb246OlJU
TCksCi0gICAgSW5saW5lTm9ydGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdy
aXRpbmdNb2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVjdGlvbjo6TFRSKSwKLSAgICBJbmxpbmVO
b3J0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OlJpZ2h0
VG9MZWZ0LCBUZXh0RGlyZWN0aW9uOjpSVEwpCi19OwotCi1jb25zdGV4cHIgaW5saW5lIFRleHRG
bG93IG1ha2VUZXh0RmxvdyhXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRGbG93PihtYWtlVGV4dEZs
b3dJbml0YWxpemVyKHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pKTsKLX0KLQotY29uc3RleHByIHVu
c2lnbmVkIFRleHRGbG93UmV2ZXJzZWRNYXNrID0gMTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBUZXh0
Rmxvd0ZsaXBwZWRNYXNrID0gMjsKLWNvbnN0ZXhwciB1bnNpZ25lZCBUZXh0Rmxvd1ZlcnRpY2Fs
TWFzayA9IDQ7Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1JldmVyc2VkVGV4dEZsb3coVGV4
dEZsb3cgdGV4dGZsb3cpCi17Ci0gICAgcmV0dXJuIHRleHRmbG93ICYgVGV4dEZsb3dSZXZlcnNl
ZE1hc2s7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0ZsaXBwZWRUZXh0RmxvdyhUZXh0
RmxvdyB0ZXh0ZmxvdykKLXsKLSAgICByZXR1cm4gdGV4dGZsb3cgJiBUZXh0Rmxvd0ZsaXBwZWRN
YXNrOwotfQotCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFRleHRGbG93KFRleHRG
bG93IHRleHRmbG93KQotewotICAgIHJldHVybiB0ZXh0ZmxvdyAmIFRleHRGbG93VmVydGljYWxN
YXNrOwotfQotCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgaXNGbGlwcGVkTGluZXNUZXh0RmxvdyhU
ZXh0RmxvdyB0ZXh0ZmxvdykKLXsKLSAgICByZXR1cm4gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZs
b3cpICE9IGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0Zmxvdyk7Ci19Ci0KLS8vIExpbmVzIGhhdmUg
dmVydGljYWwgb3JpZW50YXRpb247IG1vZGVzIHZlcnRpY2FsLWxyIG9yIHZlcnRpY2FsLXJsLgot
Y29uc3RleHByIGlubGluZSBib29sIGlzVmVydGljYWxXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gaXNWZXJ0aWNhbFRleHRGbG93KG1ha2VUZXh0Rmxv
dyh3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Ci19Ci0KLS8vIEJsb2NrIHByb2dy
ZXNzaW9uIGluY3JlYXNlcyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIG5vcm1hbDsgbW9k
ZXMgdmVydGljYWwtcmwgb3IgaG9yaXpvbnRhbC1idC4KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBp
c0ZsaXBwZWRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICByZXR1
cm4gaXNGbGlwcGVkVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0
aW9uOjpMVFIpKTsKLX0KLQotLy8gTGluZXMgaGF2ZSBob3Jpem9udGFsIG9yaWVudGF0aW9uOyBt
b2RlcyBob3Jpem9udGFsLXRiIG9yIGhvcml6b250YWwtYnQuCi1jb25zdGV4cHIgaW5saW5lIGJv
b2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0g
ICAgcmV0dXJuICFpc1ZlcnRpY2FsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotfQotCi0vLyBC
b3R0b20gb2YgdGhlIGxpbmUgb2NjdXJzIGVhcmxpZXIgaW4gdGhlIGJsb2NrOyBtb2RlcyB2ZXJ0
aWNhbC1sciBvciBob3Jpem9udGFsLWJ0LgotY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBl
ZExpbmVzV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi17Ci0gICAgcmV0dXJu
IGlzRmxpcHBlZExpbmVzVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBUZXh0RGly
ZWN0aW9uOjpMVFIpKTsKLX0KLQotZW51bSBjbGFzcyBMb2dpY2FsQm94U2lkZSA6IHVpbnQ4X3Qg
ewotICAgIEJsb2NrU3RhcnQsCi0gICAgSW5saW5lRW5kLAotICAgIEJsb2NrRW5kLAotICAgIElu
bGluZVN0YXJ0Ci19OwotCi1lbnVtIGNsYXNzIEJveFNpZGUgOiB1aW50OF90IHsKLSAgICBUb3As
Ci0gICAgUmlnaHQsCi0gICAgQm90dG9tLAotICAgIExlZnQKLX07Ci0KLWVudW0gY2xhc3MgTG9n
aWNhbEJveENvcm5lciA6IHVpbnQ4X3QgewotICAgIFN0YXJ0U3RhcnQsCi0gICAgU3RhcnRFbmQs
Ci0gICAgRW5kU3RhcnQsCi0gICAgRW5kRW5kCi19OwotCi0vLyBUaGUgbWFwcGluZyBpcyB3aXRo
IHRoZSBmaXJzdCBzdGFydC9lbmQgZ2l2aW5nIHRoZSBibG9jayBheGlzIHNpZGUsCi0vLyBhbmQg
dGhlIHNlY29uZCB0aGUgaW5saW5lLWF4aXMgc2lkZSwgaS5lLiBwYXR0ZXJuZWQgYXMgJ2JvcmRl
ci1ibG9jay1pbmxpbmUtcmFkaXVzJy4KLWVudW0gY2xhc3MgQm94Q29ybmVyIDogdWludDhfdCB7
Ci0gICAgVG9wTGVmdCwKLSAgICBUb3BSaWdodCwKLSAgICBCb3R0b21SaWdodCwKLSAgICBCb3R0
b21MZWZ0Ci19OwotCi1lbnVtIGNsYXNzIExvZ2ljYWxCb3hBeGlzIDogdWludDhfdCB7Ci0gICAg
SW5saW5lLAotICAgIEJsb2NrCi19OwotCi1lbnVtIGNsYXNzIEJveEF4aXMgOiB1aW50OF90IHsK
LSAgICBIb3Jpem9udGFsLAotICAgIFZlcnRpY2FsCi19OwotCi1jb25zdGV4cHIgc3RkOjphcnJh
eTxCb3hTaWRlLCA0PiBhbGxCb3hTaWRlcyA9IHsgQm94U2lkZTo6VG9wLCBCb3hTaWRlOjpSaWdo
dCwgQm94U2lkZTo6Qm90dG9tLCBCb3hTaWRlOjpMZWZ0IH07Ci0KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBpc0hvcml6b250YWxQaHlzaWNhbFNpZGUoQm94U2lkZSBwaHlzaWNhbFNpZGUpCi17Ci0g
ICAgcmV0dXJuIHBoeXNpY2FsU2lkZSA9PSBCb3hTaWRlOjpMZWZ0IHx8IHBoeXNpY2FsU2lkZSA9
PSBCb3hTaWRlOjpSaWdodDsKLX0KLQotY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1pcnJvclBo
eXNpY2FsU2lkZShCb3hTaWRlIHBoeXNpY2FsU2lkZSkKLXsKLSAgICAvLyB0b3AgPC0+IGJvdHRv
bSBhbmQgbGVmdCA8LT4gcmlnaHQgY29udmVyc2lvbgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
b3hTaWRlPigoc3RhdGljX2Nhc3Q8aW50PihwaHlzaWNhbFNpZGUpICsgMikgJSA0KTsKLX0KLQot
Y29uc3RleHByIGlubGluZSBCb3hTaWRlIHJvdGF0ZVBoeXNpY2FsU2lkZShCb3hTaWRlIHBoeXNp
Y2FsU2lkZSkKLXsKLSAgICAvLyB0b3AgPC0+IGxlZnQgYW5kIHJpZ2h0IDwtPiBib3R0b20gY29u
dmVyc2lvbgotICAgIGJvb2wgaG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250YWxQaHlzaWNhbFNp
ZGUocGh5c2ljYWxTaWRlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZT4oKHN0YXRp
Y19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIChob3Jpem9udGFsU2lkZSA/IDEgOiAzKSkgJSA0
KTsKLX0KLQotY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNh
bFNpZGUoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKQotewot
ICAgIEJveFNpZGUgcGh5c2ljYWxTaWRlID0gc3RhdGljX2Nhc3Q8Qm94U2lkZT4obG9naWNhbFNp
ZGUpOwotICAgIGJvb2wgaG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250YWxQaHlzaWNhbFNpZGUo
cGh5c2ljYWxTaWRlKTsKLQotICAgIGlmIChpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpKQot
ICAgICAgICBwaHlzaWNhbFNpZGUgPSByb3RhdGVQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsK
LQotICAgIGlmICgoaG9yaXpvbnRhbFNpZGUgJiYgaXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93
KSkgfHwgKCFob3Jpem9udGFsU2lkZSAmJiBpc0ZsaXBwZWRUZXh0Rmxvdyh0ZXh0ZmxvdykpKQot
ICAgICAgICBwaHlzaWNhbFNpZGUgPSBtaXJyb3JQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsK
LQotICAgIHJldHVybiBwaHlzaWNhbFNpZGU7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgQm94U2lk
ZSBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBM
b2dpY2FsQm94U2lkZSBsb2dpY2FsU2lkZSkKLXsKLSAgICAvLyBTZXQgdGhlIGRpcmVjdGlvbiBz
dWNoIHRoYXQgc2lkZSBpcyBtaXJyb3JlZCBpZiBpc0ZsaXBwZWRXcml0aW5nTW9kZSgpIGlzIHRy
dWUKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGlzRmxpcHBlZFdyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKLSAg
ICByZXR1cm4gbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGlu
Z01vZGUsIGRpcmVjdGlvbiksIGxvZ2ljYWxTaWRlKTsKLX0KLQotY29uc3RleHByIGlubGluZSBC
b3hDb3JuZXIgbWFwTG9naWNhbENvcm5lclRvUGh5c2ljYWxDb3JuZXIoVGV4dEZsb3cgdGV4dGZs
b3csIExvZ2ljYWxCb3hDb3JuZXIgbG9naWNhbEJveENvcm5lcikKLXsKLSAgICBib29sIGlzQmxv
Y2tTdGFydCA9IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJveENvcm5lcjo6U3RhcnRTdGFy
dCB8fCBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0RW5kOwotICAg
IGJvb2wgaXNJbmxpbmVTdGFydCA9IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJveENvcm5l
cjo6U3RhcnRTdGFydCB8fCBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6OkVu
ZFN0YXJ0OwotICAgIGlmIChpc0Jsb2NrU3RhcnQgPT0gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZs
b3cpKSB7Ci0gICAgICAgIGlmIChpc0lubGluZVN0YXJ0ID09IGlzUmV2ZXJzZWRUZXh0Rmxvdyh0
ZXh0ZmxvdykpCi0gICAgICAgICAgICByZXR1cm4gQm94Q29ybmVyOjpCb3R0b21SaWdodDsKLSAg
ICB9IGVsc2UgaWYgKGlzSW5saW5lU3RhcnQgIT0gaXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93
KSkKLSAgICAgICAgcmV0dXJuIEJveENvcm5lcjo6VG9wTGVmdDsKLSAgICBpZiAoaXNCbG9ja1N0
YXJ0ID09IGlzRmxpcHBlZExpbmVzVGV4dEZsb3codGV4dGZsb3cpKQotICAgICAgICByZXR1cm4g
Qm94Q29ybmVyOjpCb3R0b21MZWZ0OwotICAgIHJldHVybiBCb3hDb3JuZXI6OlRvcFJpZ2h0Owot
fQotCi1jb25zdGV4cHIgaW5saW5lIEJveEF4aXMgbWFwTG9naWNhbEF4aXNUb1BoeXNpY2FsQXhp
cyhUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveEF4aXMgbG9naWNhbEF4aXMpCi17Ci0gICAg
aWYgKGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0ZmxvdykpCi0gICAgICAgIHJldHVybiBsb2dpY2Fs
QXhpcyA9PSBMb2dpY2FsQm94QXhpczo6SW5saW5lID8gQm94QXhpczo6VmVydGljYWwgOiBCb3hB
eGlzOjpIb3Jpem9udGFsOwotICAgIHJldHVybiBsb2dpY2FsQXhpcyA9PSBMb2dpY2FsQm94QXhp
czo6SW5saW5lID8gQm94QXhpczo6SG9yaXpvbnRhbCA6IEJveEF4aXM6OlZlcnRpY2FsOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjY2OTZlNGI3NDAzNThjMjVmMjJjYmJhZWRiMDE4NWU0YWU0ZjgzYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5o
IgotCi0jaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9UaW55TFJVQ2FjaGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElD
VS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgVGlueUxSVUNhY2hl
UG9saWN5PEF0b21TdHJpbmcsIFJldGFpblB0cjxDRkxvY2FsZVJlZj4+Ci17Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFRpbnlMUlVDYWNoZTxBdG9tU3RyaW5nLCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+
PiYgY2FjaGUoKQotICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbnlMUlVD
YWNoZTxBdG9tU3RyaW5nLCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+Pj4gY2FjaGU7Ci0gICAgICAg
IHJldHVybiBjYWNoZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0tleU51bGwoY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2Nh
bGVJZGVudGlmaWVyLmlzTnVsbCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0ZM
b2NhbGVSZWY+IGNyZWF0ZVZhbHVlRm9yTnVsbEtleSgpCi0gICAgewotICAgICAgICAvLyBDRiBo
eXBoZW5hdGlvbiBmdW5jdGlvbnMgdXNlIGxvY2FsZSAocmVnaW9uYWwgZm9ybWF0cykgbGFuZ3Vh
Z2UsIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWF0Y2ggcHJpbWFyeSBVSSBsYW5ndWFnZSwK
LSAgICAgICAgLy8gc28gd2UgY2FuJ3QgdXNlIGRlZmF1bHQgbG9jYWxlIGhlcmUuIFNlZSA8cmRh
cjovL3Byb2JsZW0vMTQ4OTc2NjQ+LgotICAgICAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGxv
Y2FsZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVmYXVs
dExhbmd1YWdlKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgICAgICByZXR1cm4gQ0ZT
dHJpbmdJc0h5cGhlbmF0aW9uQXZhaWxhYmxlRm9yTG9jYWxlKGxvY2FsZS5nZXQoKSkgPyBsb2Nh
bGUgOiBudWxscHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+
IGNyZWF0ZVZhbHVlRm9yS2V5KGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi0g
ICAgewotICAgICAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGxvY2FsZSA9IGFkb3B0Q0YoQ0ZM
b2NhbGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbG9jYWxlSWRlbnRpZmllci5zdHJpbmco
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIENGU3RyaW5nSXNI
eXBoZW5hdGlvbkF2YWlsYWJsZUZvckxvY2FsZShsb2NhbGUuZ2V0KCkpID8gbG9jYWxlIDogbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQXRvbVN0cmluZyBjcmVhdGVLZXlGb3JTdG9yYWdl
KGNvbnN0IEF0b21TdHJpbmcmIGtleSkgeyByZXR1cm4ga2V5OyB9Ci19OwotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWJvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21TdHJpbmcmIGxvY2Fs
ZUlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIFRpbnlMUlVDYWNoZVBvbGljeTxBdG9tU3RyaW5n
LCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+Pjo6Y2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7
Ci19Ci0KLXNpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyB0ZXh0LCBzaXplX3Qg
YmVmb3JlSW5kZXgsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi17Ci0gICAg
UmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBUaW55TFJVQ2FjaGVQb2xpY3k8QXRvbVN0
cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj46OmNhY2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZp
ZXIpOwotCi0gICAgQ0ZPcHRpb25GbGFncyBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmllcyA9IDE7
Ci0gICAgQ0ZJbmRleCByZXN1bHQgPSBDRlN0cmluZ0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZv
cmVJbmRleCh0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSwgYmVmb3Jl
SW5kZXgsIENGUmFuZ2VNYWtlKDAsIHRleHQubGVuZ3RoKCkpLCBzZWFyY2hBY3Jvc3NXb3JkQm91
bmRhcmllcywgbG9jYWxlLmdldCgpLCBudWxscHRyKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IGtD
Rk5vdEZvdW5kID8gMCA6IHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5NDAwOTUxN2RhMjdhZjMxMjNhZmEwNmQ0
YjdhMWZjNTJjNTUyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGV4dEJvdW5kYXJpZXMuaCIKLQotI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZTdHJp
bmdUb2tlbml6ZXIuaD4KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8dW5pY29kZS91YnJrLmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx1
bmljb2RlL3VzdHJpbmcuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+Ci0jaW1wb3J0
IDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgotI2ltcG9ydCA8d3RmL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oPgotI2ltcG9ydCA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgIVVTRShBUFBLSVQpCi0KLXN0
YXRpYyBib29sIGlzU2tpcENoYXJhY3RlcihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIGMgPT0g
MHhBMCB8fCBjID09ICdcbicgfHwgYyA9PSAnLicgfHwgYyA9PSAnLCcgfHwgYyA9PSAnIScgIHx8
IGMgPT0gJz8nIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IHVfaXNzcGFjZShjKTsKLX0KLQot
c3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKLXsKLSAgICByZXR1
cm4gYyA9PSAweEEwIHx8IGMgPT0gJ1xuJyB8fCB1X2lzc3BhY2UoYyk7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoVUNoYXIzMiBjKQotewotICAgIC8vIEFtcGVy
c2FuZCBpcyBhbiBleGNlcHRpb24gYWRkZWQgdG8gdHJlYXQgQVQmVCBhcyBhIHNpbmdsZSB3b3Jk
IChzZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjIyNjQ+KS4KLSAgICByZXR1cm4gIUNGQ2hhcmFjdGVy
U2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZD
aGFyYWN0ZXJTZXRBbHBoYU51bWVyaWMpLCBjKSAmJiBjICE9ICcmJzsKLX0KLQotc3RhdGljIGJv
b2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQotewotICAgIHJldHVybiBDRkNoYXJhY3Rl
clNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQoa0NG
Q2hhcmFjdGVyU2V0U3ltYm9sKSwgYyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQW1iaWd1b3VzQm91
bmRhcnlDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gVGhlc2UgYXJlIGNo
YXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0IGNhbiBhcHBl
YXIgd2l0aGluIHdvcmRzLgotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8fCBjaGFyYWN0
ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBoZWJyZXdQdW5j
dHVhdGlvbkdlcnNoYXlpbTsKLX0KLQotc3RhdGljIENGU3RyaW5nVG9rZW5pemVyUmVmIHRva2Vu
aXplckZvclN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCi17Ci0gICAgc3RhdGljIGF1dG8gbG9jYWxl
ID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgY29uc3QgY2hhciogbG9jYWxJRCA9
IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpOwotICAgICAgICBhdXRvIGN1cnJlbnRMb2NhbGVJ
RCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGxvY2FsSUQpLCBzdHJsZW4obG9j
YWxJRCksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7
Ci0gICAgICAgIHJldHVybiBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGN1cnJlbnRMb2NhbGVJRC5nZXQoKSkpOwotICAgIH0oKSk7Ci0KLSAgICBpZiAoIWxvY2Fs
ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDRlJhbmdlIGVudGlyZVJh
bmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSk7ICAgIAotCi0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1Rva2VuaXplclJlZj4+IHRv
a2VuaXplcjsKLSAgICBpZiAoIXRva2VuaXplci5nZXQoKSkKLSAgICAgICAgdG9rZW5pemVyLmdl
dCgpID0gYWRvcHRDRihDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzdHIsIGVudGlyZVJhbmdlLCBrQ0ZTdHJpbmdUb2tlbml6ZXJVbml0V29yZEJvdW5kYXJ5LCBs
b2NhbGUuZ2V0KCkuZ2V0KCkpKTsKLSAgICBlbHNlCi0gICAgICAgIENGU3RyaW5nVG9rZW5pemVy
U2V0U3RyaW5nKHRva2VuaXplci5nZXQoKS5nZXQoKSwgc3RyLCBlbnRpcmVSYW5nZSk7Ci0gICAg
cmV0dXJuIHRva2VuaXplci5nZXQoKS5nZXQoKTsKLX0KLQotLy8gU2ltcGxlIGNhc2U6IEEgd29y
ZCBpcyBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzIGRlbGltaXRlZCBieSBhIHNwZWNpYWwgc2V0IG9m
IHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgotc3RhdGljIHZvaWQgZmluZFNpbXBsZVdvcmRC
b3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBl
bmQpCi17Ci0gICAgQVNTRVJUKHBvc2l0aW9uID49IDApOwotICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSk7Ci0KLSAgICB1bnNpZ25lZCBz
dGFydFBvcyA9IHBvc2l0aW9uOwotICAgIHdoaWxlIChzdGFydFBvcyA+IDApIHsKLSAgICAgICAg
aW50IGkgPSBzdGFydFBvczsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmVTdGFydFBv
czsKLSAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3Mp
OwotICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJCZWZvcmVT
dGFydFBvcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChpID49IDApOwotICAgICAgICAgICAgaWYg
KCFpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIWlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3MpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckJlZm9yZUJlZm9y
ZVN0YXJ0UG9zOwotICAgICAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVm
b3JlQmVmb3JlU3RhcnRQb3MpOwotICAgICAgICAgICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFy
YWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIFUxNl9CQUNLXzEodGV4dCwgMCwgc3RhcnRQb3MpOwot
ICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBlbmRQb3MgPSBwb3NpdGlvbjsKLSAgICB3aGlsZSAo
ZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgewotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAg
ICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7
Ci0gICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlcikpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGkgPSBlbmRQb3M7Ci0gICAgICAgICAgICBVMTZfRldEXzEodGV4
dCwgaSwgdGV4dC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8PSB0ZXh0Lmxlbmd0
aCgpKTsKLSAgICAgICAgICAgIGlmIChpID09IHRleHQubGVuZ3RoKCkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyRW5kUG9zOwotICAg
ICAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSwgY2hhcmFjdGVyQWZ0ZXJF
bmRQb3MpOwotICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKGNo
YXJhY3RlcikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoaXNXb3Jk
RGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRlckVuZFBvcykpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBvcywgdGV4
dC5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIHRleHQgbWF5IGNvbnNpc3Qgb2YgYWxs
IGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3IgYSBzZXJpZXMgb2YgZW1v
amkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCi0gICAgLy8gbWFrZXMgbm8gc2Vuc2Ug
KGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KCkgYmVoYXZpb3IpLgot
ICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgewot
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQ
b3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7Ci0gICAgICAgIGlmIChpc1N5bWJvbENoYXJh
Y3RlcihjaGFyYWN0ZXIpKQotICAgICAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVuZFBvcywgdGV4
dC5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgKnN0YXJ0ID0gc3RhcnRQb3M7Ci0gICAgKmVuZCA9
IGVuZFBvczsKLX0KLQotLy8gQ29tcGxleCBjYXNlOiB1c2UgQ0ZTdHJpbmdUb2tlbml6ZXIgdG8g
ZmluZCB3b3JkIGJvdW5kYXJ5Lgotc3RhdGljIHZvaWQgZmluZENvbXBsZXhXb3JkQm91bmRhcnko
U3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQotewot
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2hhclN0cmluZyA9IHRleHQuY3JlYXRlQ0ZTdHJp
bmdXaXRob3V0Q29weWluZygpOwotCi0gICAgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYgdG9rZW5pemVy
ID0gdG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcuZ2V0KCkpOwotICAgIGlmICghdG9rZW5p
emVyKSB7Ci0gICAgICAgIC8vIEVycm9yIGNyZWF0aW5nIHRva2VuaXplciwgc28ganVzdCB1c2Ug
c2ltcGxlIGZ1bmN0aW9uLgotICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5KHRleHQsIHBv
c2l0aW9uLCBzdGFydCwgZW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENGU3Ry
aW5nVG9rZW5pemVyVG9rZW5UeXBlICB0b2tlbiA9IENGU3RyaW5nVG9rZW5pemVyR29Ub1Rva2Vu
QXRJbmRleCh0b2tlbml6ZXIsIHBvc2l0aW9uKTsKLSAgICBpZiAodG9rZW4gPT0ga0NGU3RyaW5n
VG9rZW5pemVyVG9rZW5Ob25lKSB7Ci0gICAgICAgIC8vIE5vIHRva2VuIGZvdW5kOiBzZWxlY3Qg
ZW50aXJlIGJsb2NrLgotICAgICAgICAvLyBOQjogSSBuZXZlciBoaXQgdGhpcyBzZWN0aW9uIGlu
IGFsbCBteSB0ZXN0aW5nLgotICAgICAgICAqc3RhcnQgPSAwOwotICAgICAgICAqZW5kID0gdGV4
dC5sZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENGUmFuZ2UgcmVzdWx0
ID0gQ0ZTdHJpbmdUb2tlbml6ZXJHZXRDdXJyZW50VG9rZW5SYW5nZSh0b2tlbml6ZXIpOwotICAg
ICpzdGFydCA9IHJlc3VsdC5sb2NhdGlvbjsKLSAgICAqZW5kID0gcmVzdWx0LmxvY2F0aW9uICsg
cmVzdWx0Lmxlbmd0aDsKLX0KLQotI2VuZGlmCi0KLXZvaWQgZmluZFdvcmRCb3VuZGFyeShTdHJp
bmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCi17Ci0jaWYg
VVNFKEFQUEtJVCkKLSAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0LmNyZWF0ZU5TU3RyaW5nV2l0
aG91dENvcHlpbmcoKS5nZXQoKV0pOwotICAgIE5TUmFuZ2UgcmFuZ2UgPSBbYXR0cmlidXRlZFN0
cmluZyBkb3VibGVDbGlja0F0SW5kZXg6c3RkOjptaW48dW5zaWduZWQ+KHBvc2l0aW9uLCB0ZXh0
Lmxlbmd0aCgpIC0gMSldOwotICAgICpzdGFydCA9IHJhbmdlLmxvY2F0aW9uOwotICAgICplbmQg
PSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKLSNlbHNlCi0gICAgdW5zaWduZWQgcG9z
ID0gcG9zaXRpb247Ci0gICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCgpICYmIHBvcykKLSAgICAg
ICAgLS1wb3M7Ci0KLSAgICAvLyBGb3IgY29tcGxleCB0ZXh0IChUaGFpLCBKYXBhbmVzZSwgQ2hp
bmVzZSksIHZpc2libGVfdW5pdHMgd2lsbCBwYXNzIHRoZSB0ZXh0IGluIGFzIGEgCi0gICAgLy8g
c2luZ2xlIGNvbnRpZ3VvdXMgcnVuIG9mIGNoYXJhY3RlcnMsIHByb3ZpZGluZyBhcyBtdWNoIGNv
bnRleHQgYXMgaXMgcG9zc2libGUuCi0gICAgLy8gV2Ugb25seSBuZWVkIG9uZSBjaGFyYWN0ZXIg
dG8gZGV0ZXJtaW5lIGlmIHRoZSB0ZXh0IGlzIGNvbXBsZXguCi0gICAgVUNoYXIzMiBjaDsKLSAg
ICB1bnNpZ25lZCBpID0gcG9zOwotICAgIFUxNl9ORVhUKHRleHQsIGksIHRleHQubGVuZ3RoKCks
IGNoKTsKLSAgICBib29sIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFy
eShjaCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpbXByb3ZlcyBvdXIgd29yZCBib3Vu
ZGFyeSBiZWhhdmlvciwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZ28gZmFyIGVub3VnaC4KLSAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg4NTM5NTE+IFRha2UgY29tcGxleCB3b3JkIGJvdW5kYXJ5
IGZpbmRpbmcgcGF0aCB3aGVuIG5lY2Vzc2FyeQotICAgIGlmICghaXNDb21wbGV4KSB7Ci0gICAg
ICAgIC8vIENoZWNrIGFnYWluIGZvciBjb21wbGV4IHRleHQsIGF0IHRoZSBzdGFydCBvZiB0aGUg
cnVuLgotICAgICAgICBpID0gMDsKLSAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5n
dGgoKSwgY2gpOwotICAgICAgICBpc0NvbXBsZXggPSByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91
bmRhcnkoY2gpOwotICAgIH0KLQotICAgIGlmIChpc0NvbXBsZXgpCi0gICAgICAgIGZpbmRDb21w
bGV4V29yZEJvdW5kYXJ5KHRleHQsIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKLSAgICBlbHNlCi0g
ICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQp
OwotCi0jZGVmaW5lIExPR19XT1JEX0JSRUFLIDAKLSNpZiBMT0dfV09SRF9CUkVBSwotICAgIGF1
dG8gdW5pU3RyaW5nID0gdGV4dC5jcmVhdGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Ci0gICAg
YXV0byBmb3VuZFdvcmQgPSB0ZXh0LnN1YnN0cmluZygqc3RhcnQsICplbmQgLSAqc3RhcnQpLmNy
ZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKLSAgICBOU0xvZyhAIiVzX0JSRUFLICclQCcg
KCVkLCVkKSBpbiAnJUAnICglcCkgYXQgJWQsIGxlbmd0aD0lZCIsIGlzQ29tcGxleCA/ICJDT01Q
TEVYIiA6ICJTSU1QTEUiLCBmb3VuZFdvcmQuZ2V0KCksICpzdGFydCwgKmVuZCwgdW5pU3RyaW5n
LmdldCgpLCB1bmlTdHJpbmcuZ2V0KCksIHBvc2l0aW9uLCB0ZXh0Lmxlbmd0aCgpKTsKLSNlbmRp
ZgotICAgIAotI2VuZGlmCi19Ci0KLXZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3
IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBlbmQpCi17Ci0gICAgaW50IHN0YXJ0OwotICAgIGZp
bmRXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sICZzdGFydCwgZW5kKTsKLX0KLQotaW50IGZp
bmROZXh0V29yZEZyb21JbmRleChTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgYm9vbCBm
b3J3YXJkKQoteyAgIAotI2lmIFVTRShBUFBLSVQpCi0gICAgU3RyaW5nIHRleHRXaXRob3V0VW5w
YWlyZWRTdXJyb2dhdGVzOwotICAgIGlmIChoYXNVbnBhaXJlZFN1cnJvZ2F0ZSh0ZXh0KSkgewot
ICAgICAgICB0ZXh0V2l0aG91dFVucGFpcmVkU3Vycm9nYXRlcyA9IHJlcGxhY2VVbnBhaXJlZFN1
cnJvZ2F0ZXNXaXRoUmVwbGFjZW1lbnRDaGFyYWN0ZXIodGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCkpOwotICAgICAgICB0ZXh0ID0gdGV4dFdpdGhvdXRVbnBhaXJlZFN1cnJvZ2F0ZXM7Ci0g
ICAgfQotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29w
eWluZygpLmdldCgpXSk7Ci0gICAgcmV0dXJuIFthdHRyaWJ1dGVkU3RyaW5nIG5leHRXb3JkRnJv
bUluZGV4OnBvc2l0aW9uIGZvcndhcmQ6Zm9yd2FyZF07Ci0jZWxzZQotICAgIC8vIFRoaXMgdmVy
eSBsaWtlbHkgd29uJ3QgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGUgbm9uLWlQaG9uZSB2ZXJzaW9u
LCBidXQgaXQgd29ya3MKLSAgICAvLyBmb3IgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0IGlzIHVz
ZWQgb24gaVBob25lLCBhbmQgaW4gdGhlIGZ1dHVyZSB3aWxsIGJlCi0gICAgLy8gdHVuZWQgdG8g
aW1wcm92ZSB0aGUgaVBob25lLXNwZWNpZmljIGJlaGF2aW9yIGZvciB0aGUga2V5Ym9hcmQgYW5k
IHRleHQgZWRpdGluZy4KLSAgICBpbnQgcG9zID0gcG9zaXRpb247Ci0gICAgVUJyZWFrSXRlcmF0
b3IqIGJvdW5kYXJ5ID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCk7Ci0gICAgaWYgKGJvdW5kYXJ5
KSB7Ci0gICAgICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAgICAgcG9zID0gdWJya19mb2xsb3dpbmcoYm91bmRhcnksIHBvcyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBvcyA9PSBVQlJLX0RPTkUpCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IHRleHQu
bGVuZ3RoKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9z
KSA8IHRleHQubGVuZ3RoKCkgJiYgKHBvcyA9PSAwIHx8ICFpc1NraXBDaGFyYWN0ZXIodGV4dFtw
b3MgLSAxXSkpICYmIGlzU2tpcENoYXJhY3Rlcih0ZXh0W3Bvc10pKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBwb3MgPSB1YnJr
X3ByZWNlZGluZyhib3VuZGFyeSwgcG9zKTsKLSAgICAgICAgICAgICAgICBpZiAocG9zID09IFVC
UktfRE9ORSkKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gMDsKLSAgICAgICAgICAgIH0gd2hp
bGUgKHBvcyA+IDAgJiYgaXNTa2lwQ2hhcmFjdGVyKHRleHRbcG9zXSkgJiYgIWlzV2hpdGVzcGFj
ZUNoYXJhY3Rlcih0ZXh0W3BvcyAtIDFdKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHBvczsKLSNlbmRpZgotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI1ZGMxNDJkYjFhMzgxMzM2NzZiNWU4MWNjNGFkMjUwZDBiY2YwODYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGV4dENoZWNraW5n
LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5TVGV4dENoZWNraW5nVHlwZXMgbnNUZXh0
Q2hlY2tpbmdUeXBlcyhPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gdHlwZXMpCi17Ci0gICAg
TlNUZXh0Q2hlY2tpbmdUeXBlcyBtYXNrID0gMDsKLSAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKQotICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nOwotICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpH
cmFtbWFyKSkKLSAgICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyOwotICAg
IGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkKLSAgICAgICAgbWFz
ayB8PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rOwotICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpRdW90ZSkpCi0gICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBl
UXVvdGU7Ci0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKQot
ICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZURhc2g7Ci0gICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkKLSAgICAgICAgbWFzayB8PSBO
U1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDsKLSAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpCi0gICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tp
bmdUeXBlQ29ycmVjdGlvbjsKLSAgICByZXR1cm4gbWFzazsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Jp
ZGlSdW4uY3BwCmluZGV4IDYxYWZlZWUzNDRiYjlhMTM3YWQ2N2UwOGIwNzk1Y2ZlZjQ4OTcxNjEu
LmM5MzMzYmQyZmUxYzgzYjQ3Njg1MTUyNTgwZmRhMDk5Y2JhNDE2NDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQmlkaVJ1bi5jcHAKQEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIs
IGJpZGlSdW5Db3VudGVyLCAoIkJpZGlSdW4iKSk7CiAKLUJpZGlSdW46OkJpZGlSdW4odW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEJpZGlDb250
ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXIpCi0gICAgOiBCaWRpQ2hhcmFjdGVyUnVu
KHN0YXJ0LCBzdG9wLCBjb250ZXh0LCBkaXIpCitCaWRpUnVuOjpCaWRpUnVuKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBQQUw6OkJpZGlDb250
ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXIpCisgICAgOiBQQUw6OkJpZGlDaGFyYWN0
ZXJSdW4oc3RhcnQsIHN0b3AsIGNvbnRleHQsIGRpcikKICAgICAsIG1fcmVuZGVyZXIocmVuZGVy
ZXIpCiAgICAgLCBtX2JveChudWxscHRyKQogewpAQCAtNTMsOCArNTMsOCBAQCBCaWRpUnVuOjp+
QmlkaVJ1bigpCiAKIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiBCaWRpUnVuOjp0YWtlTmV4dCgp
CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IG5leHQgPSBCaWRpQ2hh
cmFjdGVyUnVuOjp0YWtlTmV4dCgpOwotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIHJhdyA9IG5leHQu
cmVsZWFzZSgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+IG5l
eHQgPSBQQUw6OkJpZGlDaGFyYWN0ZXJSdW46OnRha2VOZXh0KCk7CisgICAgUEFMOjpCaWRpQ2hh
cmFjdGVyUnVuKiByYXcgPSBuZXh0LnJlbGVhc2UoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmlk
aVJ1bj4gcmVzdWx0ID0gc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+KHN0YXRpY19jYXN0PEJpZGlS
dW4qPihyYXcpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRp
UnVuLmgKaW5kZXggZWQ3NzQ1ZDdkMWZhMGY0ZWIzNjVkYTUyYjZlZDgwYmZlZWRhNTYxZi4uODk2
NzA1ODBhNmYwZTI2OTMxZGRjNWFmZjlmN2E4NTU3ZmNlZTgxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQmlkaVJ1bi5oCkBAIC0yMywyMCArMjMsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlIDxwYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0jaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisKK25hbWVzcGFjZSBQQUwgeworY2xhc3Mg
QmlkaUNvbnRleHQ7Cit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRl
eHQ7CiBjbGFzcyBMZWdhY3lJbmxpbmVCb3g7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKLXN0cnVj
dCBCaWRpUnVuIDogQmlkaUNoYXJhY3RlclJ1biB7Ci0gICAgQmlkaVJ1bih1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgQmlkaUNvbnRleHQqLCBVQ2hhckRpcmVj
dGlvbik7CitzdHJ1Y3QgQmlkaVJ1biA6IFBBTDo6QmlkaUNoYXJhY3RlclJ1biB7CisgICAgQmlk
aVJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgUEFMOjpC
aWRpQ29udGV4dCosIFVDaGFyRGlyZWN0aW9uKTsKICAgICB+QmlkaVJ1bigpOwogCi0gICAgQmlk
aVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpZGlSdW4qPihCaWRpQ2hhcmFjdGVy
UnVuOjpuZXh0KCkpOyB9CisgICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PEJpZGlSdW4qPihQQUw6OkJpZGlDaGFyYWN0ZXJSdW46Om5leHQoKSk7IH0KICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QmlkaVJ1bj4gdGFrZU5leHQoKTsKICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KCkgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogICAgIExlZ2FjeUlubGluZUJveCogYm94KCkgeyBy
ZXR1cm4gbV9ib3g7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Cb3Jk
ZXJFZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQm9yZGVyRWRnZS5oCmluZGV4IGNm
YjJjOTExNzM1ZDcwODNmZDUzMzhhOWJhNWI3ZTUwYWFhOTJkNjguLmNjM2E3ODliODVjOTEwNzA5
MTc0MTZkMDM3MjZlMWE4ZmUxODRjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Cb3JkZXJFZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JvcmRlckVk
Z2UuaApAQCAtNzAsOCArNzAsOCBAQCB1c2luZyBCb3JkZXJFZGdlcyA9IFJlY3RFZGdlczxCb3Jk
ZXJFZGdlPjsKIEJvcmRlckVkZ2VzIGJvcmRlckVkZ2VzKGNvbnN0IFJlbmRlclN0eWxlJiwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUs
IGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsKIAogaW5saW5lIGJvb2wgZWRn
ZXNTaGFyZUNvbG9yKGNvbnN0IEJvcmRlckVkZ2UmIGZpcnN0RWRnZSwgY29uc3QgQm9yZGVyRWRn
ZSYgc2Vjb25kRWRnZSkgeyByZXR1cm4gZmlyc3RFZGdlLmNvbG9yKCkgPT0gc2Vjb25kRWRnZS5j
b2xvcigpOyB9Ci1pbmxpbmUgQm94U2lkZUZsYWcgZWRnZUZsYWdGb3JTaWRlKEJveFNpZGUgc2lk
ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZUZsYWc+KDEgPDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHNpZGUpKTsgfQotaW5saW5lIGJvb2wgaW5jbHVkZXNFZGdlKE9wdGlvblNldDxCb3hT
aWRlRmxhZz4gZmxhZ3MsIEJveFNpZGUgc2lkZSkgeyByZXR1cm4gZmxhZ3MuY29udGFpbnMoZWRn
ZUZsYWdGb3JTaWRlKHNpZGUpKTsgfQoraW5saW5lIEJveFNpZGVGbGFnIGVkZ2VGbGFnRm9yU2lk
ZShQQUw6OkJveFNpZGUgc2lkZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZUZsYWc+KDEg
PDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpZGUpKTsgfQoraW5saW5lIGJvb2wgaW5jbHVkZXNF
ZGdlKE9wdGlvblNldDxCb3hTaWRlRmxhZz4gZmxhZ3MsIFBBTDo6Qm94U2lkZSBzaWRlKSB7IHJl
dHVybiBmbGFncy5jb250YWlucyhlZGdlRmxhZ0ZvclNpZGUoc2lkZSkpOyB9CiAKIGlubGluZSBi
b29sIGluY2x1ZGVzQWRqYWNlbnRFZGdlcyhPcHRpb25TZXQ8Qm94U2lkZUZsYWc+IGZsYWdzKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdu
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50
LmNwcAppbmRleCAyMjNlMDI4ZjJhM2Y3NzdkOWIyMjBjMDkxYTMyZTFhYjA3YzAzMjFmLi5jODg0
YjliNzRlMGVjNmRiZDQ1Y2Y0YWNiOWRjNGU4OGFjM2Q2ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmNwcApAQCAtMTU4LDcgKzE1
OCw3IEBAIHZvaWQgR3JpZEJhc2VsaW5lQWxpZ25tZW50OjpjbGVhcihHcmlkQXhpcyBiYXNlbGlu
ZUF4aXMpCiAgICAgICAgIG1fY29sQXhpc0FsaWdubWVudENvbnRleHQuY2xlYXIoKTsKIH0KIAot
QmFzZWxpbmVHcm91cDo6QmFzZWxpbmVHcm91cChXcml0aW5nTW9kZSBibG9ja0Zsb3csIEl0ZW1Q
b3NpdGlvbiBjaGlsZFByZWZlcmVuY2UpCitCYXNlbGluZUdyb3VwOjpCYXNlbGluZUdyb3VwKFBB
TDo6V3JpdGluZ01vZGUgYmxvY2tGbG93LCBJdGVtUG9zaXRpb24gY2hpbGRQcmVmZXJlbmNlKQog
ICAgIDogbV9tYXhBc2NlbnQoMCksIG1fbWF4RGVzY2VudCgwKSwgbV9pdGVtcygpCiB7CiAgICAg
bV9ibG9ja0Zsb3cgPSBibG9ja0Zsb3c7CkBAIC0xNzMsMzYgKzE3MywzNiBAQCB2b2lkIEJhc2Vs
aW5lR3JvdXA6OnVwZGF0ZShjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGFzY2Vu
dCwgTGF5b3V0VW5pdAogICAgIH0KIH0KIAotYm9vbCBCYXNlbGluZUdyb3VwOjppc09wcG9zaXRl
QmxvY2tGbG93KFdyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3QKK2Jvb2wgQmFzZWxpbmVHcm91
cDo6aXNPcHBvc2l0ZUJsb2NrRmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGJsb2NrRmxvdykgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKLSAgICAg
ICAgcmV0dXJuIG1fYmxvY2tGbG93ID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKLSAgICBj
YXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tGbG93
ID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6
OkxlZnRUb1JpZ2h0OgorICAgICAgICByZXR1cm4gbV9ibG9ja0Zsb3cgPT0gUEFMOjpXcml0aW5n
TW9kZTo6UmlnaHRUb0xlZnQ7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVm
dDoKKyAgICAgICAgcmV0dXJuIG1fYmxvY2tGbG93ID09IFBBTDo6V3JpdGluZ01vZGU6OkxlZnRU
b1JpZ2h0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1ib29sIEJhc2VsaW5lR3JvdXA6OmlzT3J0
aG9nb25hbEJsb2NrRmxvdyhXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0Citib29sIEJhc2Vs
aW5lR3JvdXA6OmlzT3J0aG9nb25hbEJsb2NrRmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxv
dykgY29uc3QKIHsKICAgICBzd2l0Y2ggKGJsb2NrRmxvdykgewotICAgIGNhc2UgV3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOgotICAgICAgICByZXR1cm4gbV9ibG9ja0Zsb3cgIT0gV3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgotICAg
IGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgotICAgICAgICByZXR1cm4gbV9ibG9ja0Zs
b3cgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CisgICAgICAgIHJldHVybiBtX2Jsb2NrRmxvdyAhPSBQQUw6OldyaXRp
bmdNb2RlOjpUb3BUb0JvdHRvbTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1Jp
Z2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHJl
dHVybiBtX2Jsb2NrRmxvdyA9PSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIH0KIAotYm9vbCBCYXNlbGluZUdyb3VwOjppc0NvbXBhdGlibGUoV3JpdGlu
Z01vZGUgY2hpbGRCbG9ja0Zsb3csIEl0ZW1Qb3NpdGlvbiBjaGlsZFByZWZlcmVuY2UpIGNvbnN0
Citib29sIEJhc2VsaW5lR3JvdXA6OmlzQ29tcGF0aWJsZShQQUw6OldyaXRpbmdNb2RlIGNoaWxk
QmxvY2tGbG93LCBJdGVtUG9zaXRpb24gY2hpbGRQcmVmZXJlbmNlKSBjb25zdAogewogICAgIEFT
U0VSVChpc0Jhc2VsaW5lUG9zaXRpb24oY2hpbGRQcmVmZXJlbmNlKSk7CiAgICAgQVNTRVJUKHNp
emUoKSA+IDApOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQmFzZWxpbmVDb250ZXh0Ojp1cGRh
dGVTaGFyZWRHcm91cChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBJdGVtUG9zaXRpb24gcHJlCiAv
LyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzcyMQogQmFz
ZWxpbmVHcm91cCYgQmFzZWxpbmVDb250ZXh0OjpmaW5kQ29tcGF0aWJsZVNoYXJlZEdyb3VwKGNv
bnN0IFJlbmRlckJveCYgY2hpbGQsIEl0ZW1Qb3NpdGlvbiBwcmVmZXJlbmNlKQogewotICAgIFdy
aXRpbmdNb2RlIGJsb2NrRGlyZWN0aW9uID0gY2hpbGQuc3R5bGUoKS53cml0aW5nTW9kZSgpOwor
ICAgIFBBTDo6V3JpdGluZ01vZGUgYmxvY2tEaXJlY3Rpb24gPSBjaGlsZC5zdHlsZSgpLndyaXRp
bmdNb2RlKCk7CiAgICAgZm9yIChhdXRvJiBncm91cCA6IG1fc2hhcmVkR3JvdXBzKSB7CiAgICAg
ICAgIGlmIChncm91cC5pc0NvbXBhdGlibGUoYmxvY2tEaXJlY3Rpb24sIHByZWZlcmVuY2UpKQog
ICAgICAgICAgICAgcmV0dXJuIGdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdubWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWRCYXNlbGluZUFsaWdubWVudC5oCmluZGV4IDMwZTBlYzhmY2RiNDBhMGUzZjJlMDA3ZGE2
NjQ5MGJmOWQwNzdjNWUuLjZhNjdjNGY0YTU3ZTU3YmYwZmY4MmY2NDkyNTk4NjgxNDlkODQ2ZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkdyaWRMYXlvdXRGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2Rl
LmgiCisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKQEAgLTU4LDIxICs1OCwyMSBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJhc2VsaW5lQ29udGV4dDsKLSAg
ICBCYXNlbGluZUdyb3VwKFdyaXRpbmdNb2RlIGJsb2NrRmxvdywgSXRlbVBvc2l0aW9uIGNoaWxk
UHJlZmVyZW5jZSk7CisgICAgQmFzZWxpbmVHcm91cChQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxv
dywgSXRlbVBvc2l0aW9uIGNoaWxkUHJlZmVyZW5jZSk7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdo
ZXRoZXIgYSBiYXNlbGluZS1zaGFyaW5nIGdyb3VwIGlzIGNvbXBhdGlibGUgd2l0aCBhbiBpdGVt
LCBiYXNlZCBvbiBpdHMgJ2Jsb2NrLWZsb3cnIGFuZAogICAgIC8vICdiYXNlbGluZS1wcmVmZXJl
bmNlJwotICAgIGJvb2wgaXNDb21wYXRpYmxlKFdyaXRpbmdNb2RlLCBJdGVtUG9zaXRpb24pIGNv
bnN0OworICAgIGJvb2wgaXNDb21wYXRpYmxlKFBBTDo6V3JpdGluZ01vZGUsIEl0ZW1Qb3NpdGlv
bikgY29uc3Q7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJhc2VsaW5lLXNoYXJp
bmcgZ3JvdXAncyBhc3NvY2lhdGVkIGJsb2NrLWZsb3cgaXMgb3Bwb3NpdGUgKExSIHZzIFJMKSB0
byBwYXJ0aWN1bGFyCiAgICAgLy8gaXRlbSdzIHdyaXRpbmctbW9kZS4KLSAgICBib29sIGlzT3Bw
b3NpdGVCbG9ja0Zsb3coV3JpdGluZ01vZGUgYmxvY2tGbG93KSBjb25zdDsKKyAgICBib29sIGlz
T3Bwb3NpdGVCbG9ja0Zsb3coUEFMOjpXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0OwogCiAg
ICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBiYXNlbGluZS1zaGFyaW5nIGdyb3VwJ3MgYXNz
b2NpYXRlZCBibG9jay1mbG93IGlzIG9ydGhvZ29uYWwgKHZlcnRpY2FsIHZzIGhvcml6b250YWwp
CiAgICAgLy8gdG8gcGFydGljdWxhciBpdGVtJ3Mgd3JpdGluZy1tb2RlLgotICAgIGJvb2wgaXNP
cnRob2dvbmFsQmxvY2tGbG93KFdyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3Q7CisgICAgYm9v
bCBpc09ydGhvZ29uYWxCbG9ja0Zsb3coUEFMOjpXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0
OwogCi0gICAgV3JpdGluZ01vZGUgbV9ibG9ja0Zsb3c7CisgICAgUEFMOjpXcml0aW5nTW9kZSBt
X2Jsb2NrRmxvdzsKICAgICBJdGVtUG9zaXRpb24gbV9wcmVmZXJlbmNlOwogICAgIExheW91dFVu
aXQgbV9tYXhBc2NlbnQ7CiAgICAgTGF5b3V0VW5pdCBtX21heERlc2NlbnQ7CkBAIC0xNTMsNyAr
MTUzLDcgQEAgcHVibGljOgogCiAgICAgLy8gU2V0cyB0aGUgR3JpZCBDb250YWluZXIncyB3cml0
aW5nLW1vZGUgc28gdGhhdCB3ZSBjYW4gYXZvaWQgdGhlIGRlcGVuZGVjeSBvZiB0aGUgTGF5b3V0
R3JpZCBjbGFzcyBmb3IKICAgICAvLyBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ3JpZCBpdGVtIGlz
IG9ydGhvZ29uYWwgb3Igbm90LgotICAgIHZvaWQgc2V0QmxvY2tGbG93KFdyaXRpbmdNb2RlIGJs
b2NrRmxvdykgeyBtX2Jsb2NrRmxvdyA9IGJsb2NrRmxvdzsgfTsKKyAgICB2b2lkIHNldEJsb2Nr
RmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxvdykgeyBtX2Jsb2NrRmxvdyA9IGJsb2NrRmxv
dzsgfTsKIAogICAgIC8vIENsZWFyaW5nIHRoZSBCYXNlbGluZSBBbGlnbm1lbnQgY29udGV4dCBh
bmQgdGhlaXIgaW50ZXJuYWwgY2xhc3NlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLgogICAgIHZvaWQg
Y2xlYXIoR3JpZEF4aXMpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8QmFzZWxpbmVDb250ZXh0PiwgRGVm
YXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVu
c2lnbmVkPj4gQmFzZWxpbmVDb250ZXh0c01hcDsKIAogICAgIC8vIEdyaWQgQ29udGFpbmVyJ3Mg
V3JpdGluZ01vZGUsIHVzZWQgdG8gZGV0ZXJtaW5lIGdyaWQgaXRlbSdzIG9ydGhvZ29uYWxpdHku
Ci0gICAgV3JpdGluZ01vZGUgbV9ibG9ja0Zsb3c7CisgICAgUEFMOjpXcml0aW5nTW9kZSBtX2Js
b2NrRmxvdzsKICAgICBCYXNlbGluZUNvbnRleHRzTWFwIG1fcm93QXhpc0FsaWdubWVudENvbnRl
eHQ7CiAgICAgQmFzZWxpbmVDb250ZXh0c01hcCBtX2NvbEF4aXNBbGlnbm1lbnRDb250ZXh0Owog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCBmNmIx
MWQ5ZDYyOWFjZmJmYjg3ODYwY2I3YjhjZDI4Y2ViYzFiMThiLi41NDQzOWIzZjQ5OTc2OTM2ZmNm
ZGQwNDMwMGUwZWVjMGE0ZWFhOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCkBAIC0yMjcsOSArMjI3LDkgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNl
bGVjdGVkVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLVN0cmlu
ZyBIaXRUZXN0UmVzdWx0OjpzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25z
dAorU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcChQQUw6OlRleHREaXJlY3Rp
b24mIGRpcikgY29uc3QKIHsKLSAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGly
ID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgLy8gUmV0dXJuIHRoZSB0b29sIHRpcCBz
dHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9pbnQsIGlmIGFueS4gT25seSBtYXJrZXJzIGFz
c29jaWF0ZWQgd2l0aCBiYWQgZ3JhbW1hcgogICAgIC8vIGN1cnJlbnRseSBzdXBwbHkgc3RyaW5n
cywgYnV0IG1heWJlIHNvbWVkYXkgbWFya2VycyBhc3NvY2lhdGVkIHdpdGggbWlzc3BlbGxlZCB3
b3JkcyB3aWxsIGFsc28uCiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkKQEAgLTI1OCw5
ICsyNTgsOSBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdAog
ICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CiB9ICAgIAogICAgIAotU3RyaW5nIEhp
dFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKK1N0cmluZyBIaXRU
ZXN0UmVzdWx0Ojp0aXRsZShQQUw6OlRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKLSAgICBk
aXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFI7CiAgICAgLy8gRmluZCB0aGUgdGl0bGUgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIERPTSBu
b2RlLgogICAgIC8vIEZvciA8YXJlYT4gdGFncyBpbiBpbWFnZSBtYXBzLCB3YWxrIHRoZSB0cmVl
IGZvciB0aGUgPGFyZWE+LCBub3QgdGhlIDxpbWc+IHVzaW5nIGl0LgogICAgIGZvciAoTm9kZSog
dGl0bGVOb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsgdGl0bGVOb2RlID0gdGl0
bGVOb2RlLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpKSB7CkBAIC0yNzcsNyArMjc3LDcgQEAgU3Ry
aW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRy
dW5jYXRlZChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6
aW5uZXJUZXh0SWZUcnVuY2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAg
ICAgZm9yIChOb2RlKiB0cnVuY2F0ZWROb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRl
ZE5vZGU7IHRydW5jYXRlZE5vZGUgPSB0cnVuY2F0ZWROb2RlLT5wYXJlbnRJbkNvbXBvc2VkVHJl
ZSgpKSB7CiAgICAgICAgIGlmICghaXM8RWxlbWVudD4oKnRydW5jYXRlZE5vZGUpKQpAQCAtMjk5
LDcgKzI5OSw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChU
ZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkaXIgPSBU
ZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaAppbmRleCAzNWFhODBiNzQ0MDhiMzAwNDJmY2IzNDVmMmU0ZDE5NDJlMjI1OTE3Li40
NDFiZDdmNjI5NTBkMGY4MzY4YjM2MzJkNzMzMDhiNjAzN2EzNmY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTk0LDEwICs5NCwxMCBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc1NlbGVjdGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzcGVs
bGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzcGVsbGluZ1Rvb2xUaXAoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgU3Ry
aW5nIHJlcGxhY2VkU3RyaW5nKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRp
dGxlKFRleHREaXJlY3Rpb24mKSBjb25zdDsKLSAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVuY2F0
ZWQoVGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0aXRs
ZShQQUw6OlRleHREaXJlY3Rpb24mKSBjb25zdDsKKyAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVu
Y2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIGFsdERpc3BsYXlTdHJpbmcoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
dGl0bGVEaXNwbGF5U3RyaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGlt
YWdlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRl
ci5jcHAKaW5kZXggNWMxOWM5MzAwNjAwZTM3N2Q5MmVkNjNmMWU4YjllYTRlNmJjYjZlZi4uNWFh
ZDFiZmIxNjhkNjhmM2QyOTIxODVhMDVhNzlmNmUwZDgzZTEyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcApAQCAtMzE5LDcgKzMxOSw3IEBAIHZv
aWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBj
b25zdCBGaWxsTGF5ZXImIGZpbGxMCiAgICAgLy8gdGhlIHByZXZpb3VzIGxpbmUgbGVmdCBvZmYu
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgIExheW91dFVuaXQgdG90
YWxMb2dpY2FsV2lkdGg7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmRpcmVj
dGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAoYXV0byBi
b3ggPSBtX2lubGluZUJveC5wcmV2aW91c0lubGluZUJveCgpOyBib3g7IGJveC50cmF2ZXJzZVBy
ZXZpb3VzSW5saW5lQm94KCkpCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGJv
eC0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9m
ZnNldE9uTGluZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lF
bGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNC
b3guY3BwCmluZGV4IDQ2ZGNkNDZmZjdkZTI5ODY2YjQ5OThlM2ZjNmM3NTA2OWRiZWViNDcuLjMx
NzlhZjYxM2UwNTdkYjU0MDE4YWJmN2M0ZjQ0NzJiZDE1M2YzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcApAQCAtNzAsNyArNzAsNyBAQCB2
b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhp
cyBhbHdheXMgTFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93
LgotICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4obV9zdHIsIGxpbmVTdHlsZSwgQWxsb3dSaWdodEV4cGFuc2lvbiksIExheW91dFBvaW50KHgo
KSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQueSgpICsgbGluZVN0eWxlLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKG1fc3RyLCBsaW5lU3R5bGUsIFBBTDo6QWxsb3dSaWdo
dEV4cGFuc2lvbiksIExheW91dFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFp
bnRPZmZzZXQueSgpICsgbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKIAogICAg
IC8vIFJlc3RvcmUgdGhlIHJlZ3VsYXIgZmlsbCBjb2xvci4KICAgICBpZiAodGV4dENvbG9yICE9
IGNvbnRleHQuZmlsbENvbG9yKCkpCkBAIC0xMTksNyArMTE5LDcgQEAgSW50UmVjdCBMZWdhY3lF
bGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpIGNvbnN0CiAgICAgY29uc3QgTGVnYWN5Um9vdElu
bGluZUJveCYgcm9vdEJveCA9IHJvb3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3
YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgeyBMYXlvdXRVbml0KHgoKSksIExheW91dFVuaXQo
eSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpLCAw
X2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSB9
OwotICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4obV9zdHIsIGxpbmVTdHlsZSwgQWxsb3dSaWdodEV4cGFuc2lvbiksIHNlbGVj
dGlvblJlY3QpOworICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIGxpbmVTdHlsZSwgUEFMOjpBbGxvd1JpZ2h0RXhw
YW5zaW9uKSwgc2VsZWN0aW9uUmVjdCk7CiAgICAgLy8gRklYTUU6IHVzZSBkaXJlY3Rpb25hbCBw
aXhlbCBzbmFwcGluZyBpbnN0ZWFkLgogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVj
dGlvblJlY3QpOwogfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgTGVnYWN5RWxsaXBzaXNCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAg
IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0
IHRleHQgcnVuIGZsYWdzIGJlbG93LgogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExh
eW91dFVuaXQoeCgpICsgcGFpbnRPZmZzZXQueCgpKSwgcm9vdEJveC5zZWxlY3Rpb25Ub3AoKSAr
IHBhaW50T2Zmc2V0LnkoKSwgMF9sdSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQoKSB9OwotICAg
IFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxl
LCBBbGxvd1JpZ2h0RXhwYW5zaW9uKTsKKyAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKG1fc3RyLCBzdHlsZSwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uKTsK
ICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCk7
CiAgICAgY29udGV4dC5maWxsUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdE
aXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCksIHJ1bi5sdHIoKSksIGMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZUJveC5oCmluZGV4IGE5MjRmNmEyYTIwOWM1NDQ4NmFlNzExZTMyNjgxODJhNjEy
YTEzNDYuLjhhNTRiMWZmMmViOTEyMTc2NWM4Y2RjZThjNTQ0YmUxZGNlYzUyZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKQEAgLTIzLDcgKzIzLDcgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2Mu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
QEAgLTIwOCw4ICsyMDgsOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmJpZGlFbWJlZGRpbmdMZXZlbCgpOyB9CiAg
ICAgdm9pZCBzZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpdGZpZWxkcy5z
ZXRCaWRpRW1iZWRkaW5nTGV2ZWwobGV2ZWwpOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwg
OiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVs
KCkgJSAyID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxU
UjsgfQorICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRp
cmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAgICAgaW50IGNhcmV0TGVm
dG1vc3RPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBj
YXJldE1pbk9mZnNldCgpIDogY2FyZXRNYXhPZmZzZXQoKTsgfQogICAgIGludCBjYXJldFJpZ2h0
bW9zdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNh
cmV0TWF4T2Zmc2V0KCkgOiBjYXJldE1pbk9mZnNldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAppbmRleCAyY2RkZWRiMTVlZjBh
ZTQ4NzgzY2MxY2E3YjM0NGZiMDI0MzQ1MDJlLi5iNzVmMGVmMmRiMzQyZjk3YzJjOWJhZWJmNzA3
MDRkNTQwOWRjY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZUZsb3dCb3guY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBMZWdhY3lJbmxpbmVGbG93
Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUoY29uc3QgR2x5cGhPdmVyZmxvd0FuZEZh
bGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotICAgIGlmIChsaW5lU3R5bGUuZm9udERlc2NyaXB0
aW9uKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsCisgICAgaWYg
KGxpbmVTdHlsZS5mb250RGVzY3JpcHRpb24oKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbAogICAgICAgICB8fCBsaW5lU3R5bGUuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpLmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lSXRlcmF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCmlu
ZGV4IDdjNGI2N2I5MTFjMTY4N2M4MDZjZGY5NDc2ZGFiYzRjNzE4OTQ2MzAuLjM5MDc4Nzc1ZDlm
YTYzYjg1NjUxMmYxMjgzYjQ0NjM5YzI4NzI2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0
IExlZ2FjeUlubGluZUl0ZXJhdAogICAgIHJldHVybiBpdDEub2Zmc2V0KCkgIT0gaXQyLm9mZnNl
dCgpIHx8IGl0MS5yZW5kZXJlcigpICE9IGl0Mi5yZW5kZXJlcigpOwogfQogCi1zdGF0aWMgaW5s
aW5lIFVDaGFyRGlyZWN0aW9uIGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3N0YXRpYyBpbmxpbmUgVUNoYXJE
aXJlY3Rpb24gZW1iZWRDaGFyRnJvbURpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKIHsKLSAgICBpZiAodW5pY29kZUJp
ZGkgPT0gRW1iZWQpCi0gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
UlRMID8gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyA6IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJ
Tkc7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hU
X1RPX0xFRlRfT1ZFUlJJREUgOiBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU7CisgICAgaWYgKHVu
aWNvZGVCaWRpID09IFBBTDo6RW1iZWQpCisgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIDogVV9MRUZU
X1RPX1JJR0hUX0VNQkVERElORzsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMID8gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIDogVV9MRUZUX1RPX1JJR0hU
X09WRVJSSURFOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgT2JzZXJ2ZXI+CkBAIC0xNTQsOCArMTU0
LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChPYnNl
cnZlciogb2JzZXJ2ZXIsIFJlbmRlck9iamVjdCoKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotICAgIEVVbmljb2RlQmlk
aSB1bmljb2RlQmlkaSA9IHN0eWxlLnVuaWNvZGVCaWRpKCk7Ci0gICAgaWYgKHVuaWNvZGVCaWRp
ID09IFVCTm9ybWFsKSB7CisgICAgUEFMOjpFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBzdHls
ZS51bmljb2RlQmlkaSgpOworICAgIGlmICh1bmljb2RlQmlkaSA9PSBQQUw6OlVCTm9ybWFsKSB7
CiAgICAgICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtd3JpdGluZy1tb2Rlcy8j
dW5pY29kZS1iaWRpCiAgICAgICAgIC8vICJUaGUgZWxlbWVudCBkb2VzIG5vdCBvcGVuIGFuIGFk
ZGl0aW9uYWwgbGV2ZWwgb2YgZW1iZWRkaW5nIHdpdGggcmVzcGVjdCB0byB0aGUgYmlkaXJlY3Rp
b25hbCBhbGdvcml0aG0uIgogICAgICAgICAvLyBUaHVzIHdlIGlnbm9yZSBhbnkgcG9zc2libGUg
ZGlyPSBhdHRyaWJ1dGUgb24gdGhlIHNwYW4uCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChPYnNlcnZlciogb2JzZXJ2ZXIs
IFJlbmRlck9iamVjdCoKICAgICB9CiAKICAgICBpZiAoIW9ic2VydmVyLT5pbklzb2xhdGUoKSkK
LSAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oc3R5bGUuZGly
ZWN0aW9uKCksIHVuaWNvZGVCaWRpKSwgRnJvbVN0eWxlT3JET00pOworICAgICAgICBvYnNlcnZl
ci0+ZW1iZWQoZW1iZWRDaGFyRnJvbURpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSwgdW5pY29k
ZUJpZGkpLCBQQUw6OkZyb21TdHlsZU9yRE9NKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIE9ic2Vy
dmVyPgpAQCAtMTgwLDggKzE4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZl
cldpbGxFeGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0CiAgICAgaWYg
KCFvYnNlcnZlciB8fCAhb2JqZWN0IHx8ICFvYmplY3QtPmlzUmVuZGVySW5saW5lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVjdC0+c3R5
bGUoKS51bmljb2RlQmlkaSgpOwotICAgIGlmICh1bmljb2RlQmlkaSA9PSBVQk5vcm1hbCkKKyAg
ICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVjdC0+c3R5bGUoKS51bmljb2Rl
QmlkaSgpOworICAgIGlmICh1bmljb2RlQmlkaSA9PSBQQUw6OlVCTm9ybWFsKQogICAgICAgICBy
ZXR1cm47IC8vIE5vdGhpbmcgdG8gZG8gZm9yIHVuaWNvZGUtYmlkaTogbm9ybWFsCiAgICAgaWYg
KGlzSXNvbGF0ZWQodW5pY29kZUJpZGkpKSB7CiAgICAgICAgIG9ic2VydmVyLT5leGl0SXNvbGF0
ZSgpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZl
cldpbGxFeGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0CiAKICAgICAv
LyBPdGhlcndpc2Ugd2UgcG9wIGFueSBlbWJlZC9vdmVycmlkZSBjaGFyYWN0ZXIgd2UgYWRkZWQg
d2hlbiB3ZSBvcGVuZWQgdGhpcyB0YWcuCiAgICAgaWYgKCFvYnNlcnZlci0+aW5Jc29sYXRlKCkp
Ci0gICAgICAgIG9ic2VydmVyLT5lbWJlZChVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsIEZyb21T
dHlsZU9yRE9NKTsKKyAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFMX0ZP
Uk1BVCwgUEFMOjpGcm9tU3R5bGVPckRPTSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0l0
ZXJhdG9yVGFyZ2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQpAQCAtMzcxLDYgKzM3MSwxMiBAQCBB
TFdBWVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9uIExlZ2FjeUlubGluZUl0ZXJhdG9yOjpkaXJlY3Rp
b24oKSBjb25zdAogICAgIHJldHVybiBVX09USEVSX05FVVRSQUw7CiB9CiAKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFBBTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCiB0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3JlbWVu
dEludGVybmFsKCkKIHsKQEAgLTQzNCw3ICs0NDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbklz
b2xhdGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQogCiAgICAgLy8g
V2UgZG9uJ3QgY2FyZSBpZiB3ZSBlbmNvdW50ZXIgYmlkaSBkaXJlY3Rpb25hbCBvdmVycmlkZXMu
Ci0gICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSkgeyB9
CisgICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgUEFMOjpCaWRpRW1iZWRkaW5nU291cmNl
KSB7IH0KICAgICB2b2lkIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCkgeyB9CiAKICAgICB2b2lk
IGFkZEZha2VSdW5JZk5lY2Vzc2FyeShSZW5kZXJPYmplY3QmIG9iaiwgdW5zaWduZWQgcG9zLCB1
bnNpZ25lZCBlbmQsIFJlbmRlckVsZW1lbnQmIHJvb3QsIElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIpCkBAIC01MDcsNCArNTEzLDQgQEAgaW5saW5lIGJvb2wgSW5saW5lQmlkaVJlc29sdmVy
OjpuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJy
ZW50LnJlbmRlcmVyKCkgPT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCk7CiB9CiAKLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCmluZGV4IDk2NTBkOTRjMmExZjdkMWQwMWZm
YWQwNDhjZmFhZjBlNzVjNTk4NjMuLjQxNDdkMGM3NzY5NGIzYjZkMzE0ZmE3MzM0YTZjN2Q2MTY2
NzVlZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVU
ZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4
dEJveC5jcHAKQEAgLTQ4NiwyMyArNDg2LDIzIEBAIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBM
ZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBsaW5l
U3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJl
cigpKSAmJiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21iaW5l
ZCgpID8gJmRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7
CiB9CiAKLUV4cGFuc2lvbkJlaGF2aW9yIExlZ2FjeUlubGluZVRleHRCb3g6OmV4cGFuc2lvbkJl
aGF2aW9yKCkgY29uc3QKK1BBTDo6RXhwYW5zaW9uQmVoYXZpb3IgTGVnYWN5SW5saW5lVGV4dEJv
eDo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAogewotICAgIEV4cGFuc2lvbkJlaGF2aW9yIGxl
ZnRCZWhhdmlvcjsKKyAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yIGxlZnRCZWhhdmlvcjsKICAg
ICBpZiAoZm9yY2VMZWZ0RXhwYW5zaW9uKCkpCi0gICAgICAgIGxlZnRCZWhhdmlvciA9IEZvcmNl
TGVmdEV4cGFuc2lvbjsKKyAgICAgICAgbGVmdEJlaGF2aW9yID0gUEFMOjpGb3JjZUxlZnRFeHBh
bnNpb247CiAgICAgZWxzZSBpZiAoY2FuSGF2ZUxlZnRFeHBhbnNpb24oKSkKLSAgICAgICAgbGVm
dEJlaGF2aW9yID0gQWxsb3dMZWZ0RXhwYW5zaW9uOworICAgICAgICBsZWZ0QmVoYXZpb3IgPSBQ
QUw6OkFsbG93TGVmdEV4cGFuc2lvbjsKICAgICBlbHNlCi0gICAgICAgIGxlZnRCZWhhdmlvciA9
IEZvcmJpZExlZnRFeHBhbnNpb247CisgICAgICAgIGxlZnRCZWhhdmlvciA9IFBBTDo6Rm9yYmlk
TGVmdEV4cGFuc2lvbjsKIAotICAgIEV4cGFuc2lvbkJlaGF2aW9yIHJpZ2h0QmVoYXZpb3I7Cisg
ICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciByaWdodEJlaGF2aW9yOwogICAgIGlmIChmb3JjZVJp
Z2h0RXhwYW5zaW9uKCkpCi0gICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBGb3JjZVJpZ2h0RXhwYW5z
aW9uOworICAgICAgICByaWdodEJlaGF2aW9yID0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOwog
ICAgIGVsc2UgaWYgKGV4cGFuc2lvbigpICYmIG5leHRMZWFmT25MaW5lKCkgJiYgIW5leHRMZWFm
T25MaW5lKCktPmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBBbGxvd1Jp
Z2h0RXhwYW5zaW9uOworICAgICAgICByaWdodEJlaGF2aW9yID0gUEFMOjpBbGxvd1JpZ2h0RXhw
YW5zaW9uOwogICAgIGVsc2UKLSAgICAgICAgcmlnaHRCZWhhdmlvciA9IEZvcmJpZFJpZ2h0RXhw
YW5zaW9uOworICAgICAgICByaWdodEJlaGF2aW9yID0gUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lv
bjsKIAogICAgIHJldHVybiBsZWZ0QmVoYXZpb3IgfCByaWdodEJlaGF2aW9yOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKaW5kZXggMjczMmZm
MDFmZDliNGI4NTMxZTZkOWU4MGM4MGY4NTc3NjE5ZThjYi4uMzM5YmQ3MmVlMDMyMGNhNjZiNWY1
YzA0ZWNlM2JhY2MyZmFiYzIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5SW5saW5lVGV4dEJveC5oCkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhl
biA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAg
IFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBi
b29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsKIAotICAgIEV4cGFuc2lvbkJlaGF2aW9y
IGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CisgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb25CZWhhdmlvcigpIGNvbnN0OwogCiAgICAgdm9pZCBiZWhhdmVzTGlrZVRleHQoKSBj
b25zdCA9IGRlbGV0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVM
YXlvdXQuY3BwCmluZGV4IDhjZThmMWY3M2MyY2FmMTBiMjdkZDA3OWVlYTMwZDgwYjk5MzIyNDQu
LmI2ODVmZjhmM2I4OWY4NThkOWJmMTUzMDZkZjBkOWRmYzQ3YmQ0MTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJMZWdhY3lMaW5lTGF5b3V0LmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaVJl
c29sdmVyLmg+CiAjaW5jbHVkZSAiQnJlYWtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCkBAIC03MCw3ICs3MCw3
IEBAIExlZ2FjeUxpbmVMYXlvdXQ6On5MZWdhY3lMaW5lTGF5b3V0KCkKICAgICBsaW5lQm94ZXMo
KS5kZWxldGVMaW5lQm94VHJlZSgpOwogfTsKIAotc3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0
aW9uYWxpdHkoVGV4dERpcmVjdGlvbiYgZGlyLCBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyKQor
c3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoUEFMOjpUZXh0RGlyZWN0aW9uJiBk
aXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIpCiB7CiAgICAgd2hpbGUgKCFpdGVyLmF0RW5k
KCkpIHsKICAgICAgICAgaWYgKGl0ZXIuYXRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkKQEAgLTc4LDEx
ICs3OCwxMSBAQCBzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0
aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZQogICAgICAgICBpZiAoVUNoYXIgY3Vy
cmVudCA9IGl0ZXIuY3VycmVudCgpKSB7CiAgICAgICAgICAgICBVQ2hhckRpcmVjdGlvbiBjaGFy
RGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGNo
YXJEaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgZGlyID0g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIGRpciA9IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBjaGFyRGlyZWN0
aW9uID09IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKLSAgICAgICAgICAgICAgICBkaXIgPSBU
ZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC05NSw3ICs5NSw3IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gY3Jl
YXRlUnVuKGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosCiAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8QmlkaVJ1bj4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlci5jb250ZXh0KCks
IHJlc29sdmVyLmRpcigpKTsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5z
Rm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBlbmQs
IFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQordm9pZCBM
ZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KFBBTDo6QmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4qIHJ1bnMsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCiB7CiAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IFJlbmRl
ckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KG9iaikpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3OCw3ICsyNzgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgaW5saW5lIGJvb2wgZW5kc1dpdGhIVE1MU3BhY2VzKGNvbnN0IENoYQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29u
c3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQorc3RhdGljIGJvb2wgcmVhY2hlZEVu
ZE9mVGV4dFJlbmRlcmVyKGNvbnN0IFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
KQogewogICAgIEJpZGlSdW4qIHJ1biA9IGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKICAg
ICBpZiAoIXJ1bikKQEAgLTI5Myw3ICsyOTMsNyBAQCBzdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZU
ZXh0UmVuZGVyZXIoY29uc3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQogICAgIHJl
dHVybiBlbmRzV2l0aEhUTUxTcGFjZXModGV4dC5jaGFyYWN0ZXJzMTYoKSwgcG9zaXRpb24sIGxl
bmd0aCk7CiB9CiAKLUxlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6OmNvbnN0
cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5mbyYg
bGluZUluZm8pCitMZWdhY3lSb290SW5saW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0Ojpjb25zdHJ1
Y3RMaW5lKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5m
byYgbGluZUluZm8pCiB7CiAgICAgQVNTRVJUKGJpZGlSdW5zLmZpcnN0UnVuKCkpOwogCkBAIC0z
NjMsNyArMzYzLDcgQEAgVGV4dEFsaWduTW9kZSBMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25t
ZW50Rm9yTGluZShib29sIGVuZHNXaXRoU29mdEJyZWFrKSBjb24KICNpZiBFTkFCTEUoQ1NTM19U
RVhUKQogICAgIFRleHRKdXN0aWZ5IHRleHRKdXN0aWZ5ID0gc3R5bGUoKS50ZXh0SnVzdGlmeSgp
OwogICAgIGlmIChhbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSAmJiB0ZXh0SnVz
dGlmeSA9PSBUZXh0SnVzdGlmeTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gVGV4dEFsaWduTW9kZTo6TGVmdCA6IFRleHRB
bGlnbk1vZGU6OlJpZ2h0OworICAgICAgICByZXR1cm4gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiA/IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25N
b2RlOjpSaWdodDsKICNlbmRpZgogCiAgICAgaWYgKGVuZHNXaXRoU29mdEJyZWFrKQpAQCAtNjMx
LDggKzYzMSw4IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbkZvckp1
c3RpZmllZFRleHQoQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSCiAKIHZvaWQgTGVnYWN5TGluZUxh
eW91dDo6dXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgY29uc3QgVGV4dEFsaWduTW9kZSYgdGV4dEFsaWduLCBjb25zdCBMZWdhY3lSb290SW5saW5l
Qm94KiByb290SW5saW5lQm94LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9n
aWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiB7Ci0gICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb247Ci0gICAgaWYgKHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVu
aWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b247CisgICAgaWYgKHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVuaWNvZGVCaWRpKCkg
PT0gUEFMOjpQbGFpbnRleHQpCiAgICAgICAgIGRpcmVjdGlvbiA9IHJvb3RJbmxpbmVCb3gtPmRp
cmVjdGlvbigpOwogICAgIGVsc2UKICAgICAgICAgZGlyZWN0aW9uID0gZmxvdy5zdHlsZSgpLmRp
cmVjdGlvbigpOwpAQCAtNjY3LDEzICs2NjcsMTMgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojp1
cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb24K
ICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OlN0YXJ0OgotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAg
ICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERp
cmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRo
LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
LCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6RW5kOgotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAg
ICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0
aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXBk
YXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
LCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCk7CkBAIC03MTksMTMgKzcxOSwxMyBAQCB2b2lkIExlZ2FjeUxpbmVM
YXlvdXQ6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKExlZ2FjeVJvb3RJ
bmxpbmVCbwogICAgIGxpbmVCb3gtPnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlvbihsaW5lTG9n
aWNhbExlZnQsIG5lZWRzV29yZFNwYWNpbmcpOwogfQogCi1zdGF0aWMgaW5saW5lIEV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0Zs
b3cmIGJsb2NrLCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBCaWRpUnVuKiBwcmV2aW91
c1J1biwgQmlkaVJ1biogbmV4dFJ1biwgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIGJvb2wgaXNB
ZnRlckV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3goUmVuZGVyQmxvY2tGbG93JiBibG9jaywgTGVn
YWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4q
IG5leHRSdW4sIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBib29sIGlzQWZ0ZXJFeHBhbnNpb24p
CiB7CiAgICAgLy8gVGF0ZWNodXlva28gaXMgbW9kZWxlZCBhcyB0aGUgT2JqZWN0IFJlcGxhY2Vt
ZW50IENoYXJhY3RlciAoVStGRkZDKSwgd2hpY2ggY2FuIG5ldmVyIGhhdmUgZXhwYW5zaW9uIG9w
cG9ydHVuaXRpZXMgaW5zaWRlIG5vciBpbnRyaW5zaWNhbGx5IGFkamFjZW50IHRvIGl0LgogICAg
IGlmICh0ZXh0Qm94LnJlbmRlcmVyKCkuc3R5bGUoKS50ZXh0Q29tYmluZSgpID09IFRleHRDb21i
aW5lOjpIb3Jpem9udGFsKQotICAgICAgICByZXR1cm4gRm9yYmlkTGVmdEV4cGFuc2lvbiB8IEZv
cmJpZFJpZ2h0RXhwYW5zaW9uOworICAgICAgICByZXR1cm4gUEFMOjpGb3JiaWRMZWZ0RXhwYW5z
aW9uIHwgUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lvbjsKIAotICAgIEV4cGFuc2lvbkJlaGF2aW9y
IHJlc3VsdCA9IDA7CisgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciByZXN1bHQgPSAwOwogICAg
IGJvb2wgc2V0TGVmdEV4cGFuc2lvbiA9IGZhbHNlOwogICAgIGJvb2wgc2V0UmlnaHRFeHBhbnNp
b24gPSBmYWxzZTsKICAgICBpZiAodGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkp
IHsKQEAgLTczOCw3ICs3MzgsNyBAQCBzdGF0aWMgaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0ZsbwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5IGRv
ZXNuJ3QgYWN0dWFsbHkgd29yayBiZWNhdXNlIGl0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgVUJBCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBv
cnR1bml0eShkb3duY2FzdDxSZW5kZXJUZXh0PihsZWFmQ2hpbGQtPnJlbmRlcmVyKCkpLnN0cmlu
Z1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRSaWdodEV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9IEZvcmNlUmlnaHRFeHBhbnNpb247CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9yY2VSaWdodEV4cGFuc2lvbjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
QEAgLTc1Myw3ICs3NTMsNyBAQCBzdGF0aWMgaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0ZsbwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5IGRvZXNu
J3QgYWN0dWFsbHkgd29yayBiZWNhdXNlIGl0IGRvZXNuJ3QgcGVyZm9ybSB0aGUgVUJBCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnJpZ2h0RXhwYW5zaW9uT3Bwb3J0
dW5pdHkoZG93bmNhc3Q8UmVuZGVyVGV4dD4obGVhZkNoaWxkLT5yZW5kZXJlcigpKS5zdHJpbmdW
aWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0TGVmdEV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0IHw9IEZvcmNlTGVmdEV4cGFuc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gUEFMOjpGb3JjZUxlZnRFeHBhbnNpb247CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC03
NjQsNDQgKzc2NCw0NCBAQCBzdGF0aWMgaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lv
bkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0ZsbwogICAgICAgICAgICAgUmVu
ZGVyUnVieUJhc2UmIHJ1YnlCYXNlID0gZG93bmNhc3Q8UmVuZGVyUnVieUJhc2U+KGJsb2NrKTsK
ICAgICAgICAgICAgIGlmICgmdGV4dEJveCA9PSBydWJ5QmFzZS5maXJzdFJvb3RCb3goKS0+Zmly
c3RMZWFmRGVzY2VuZGFudCgpKSB7CiAgICAgICAgICAgICAgICAgc2V0TGVmdEV4cGFuc2lvbiA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVzdWx0IHw9IEZvcmJpZExlZnRFeHBhbnNpb247Cisg
ICAgICAgICAgICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9yYmlkTGVmdEV4cGFuc2lvbjsKICAgICAg
ICAgICAgIH0gaWYgKCZ0ZXh0Qm94ID09IHJ1YnlCYXNlLmZpcnN0Um9vdEJveCgpLT5sYXN0TGVh
ZkRlc2NlbmRhbnQoKSkgewogICAgICAgICAgICAgICAgIHNldFJpZ2h0RXhwYW5zaW9uID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZXN1bHQgfD0gRm9yYmlkUmlnaHRFeHBhbnNpb247CisgICAg
ICAgICAgICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFzZXRMZWZ0RXhwYW5zaW9uKQotICAg
ICAgICByZXN1bHQgfD0gaXNBZnRlckV4cGFuc2lvbiA/IEZvcmJpZExlZnRFeHBhbnNpb24gOiBB
bGxvd0xlZnRFeHBhbnNpb247CisgICAgICAgIHJlc3VsdCB8PSBpc0FmdGVyRXhwYW5zaW9uID8g
UEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uIDogUEFMOjpBbGxvd0xlZnRFeHBhbnNpb247CiAgICAg
aWYgKCFzZXRSaWdodEV4cGFuc2lvbikKLSAgICAgICAgcmVzdWx0IHw9IEFsbG93UmlnaHRFeHBh
bnNpb247CisgICAgICAgIHJlc3VsdCB8PSBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb247CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFwcGx5RXhwYW5zaW9uQmVo
YXZpb3IoTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uQmVoYXZpb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlFeHBhbnNpb25CZWhhdmlv
cihMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbkJlaGF2aW9yKQogewotICAgIHN3aXRjaCAoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0
RXhwYW5zaW9uTWFzaykgewotICAgIGNhc2UgRm9yY2VMZWZ0RXhwYW5zaW9uOgorICAgIHN3aXRj
aCAoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSB7CisgICAgY2Fz
ZSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbjoKICAgICAgICAgdGV4dEJveC5zZXRGb3JjZUxlZnRF
eHBhbnNpb24oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JiaWRMZWZ0RXhwYW5zaW9u
OgorICAgIGNhc2UgUEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uOgogICAgICAgICB0ZXh0Qm94LnNl
dENhbkhhdmVMZWZ0RXhwYW5zaW9uKGZhbHNlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
bGxvd0xlZnRFeHBhbnNpb246CisgICAgY2FzZSBQQUw6OkFsbG93TGVmdEV4cGFuc2lvbjoKICAg
ICAgICAgdGV4dEJveC5zZXRDYW5IYXZlTGVmdEV4cGFuc2lvbih0cnVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBzd2l0Y2ggKGV4cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBh
bnNpb25NYXNrKSB7Ci0gICAgY2FzZSBGb3JjZVJpZ2h0RXhwYW5zaW9uOgorICAgIHN3aXRjaCAo
ZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OlJpZ2h0RXhwYW5zaW9uTWFzaykgeworICAgIGNhc2Ug
UEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOgogICAgICAgICB0ZXh0Qm94LnNldEZvcmNlUmlnaHRF
eHBhbnNpb24oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JiaWRSaWdodEV4cGFuc2lv
bjoKKyAgICBjYXNlIFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb246CiAgICAgICAgIHRleHRCb3gu
c2V0Q2FuSGF2ZVJpZ2h0RXhwYW5zaW9uKGZhbHNlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBbGxvd1JpZ2h0RXhwYW5zaW9uOgorICAgIGNhc2UgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9u
OgogICAgICAgICB0ZXh0Qm94LnNldENhbkhhdmVSaWdodEV4cGFuc2lvbih0cnVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTg5NywxNCArODk3LDE0IEBAIEJpZGlSdW4qIExl
Z2FjeUxpbmVMYXlvdXQ6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50
KExlZ2FjeVJvb3RJCiAgICAgQmlkaVJ1biogcHJldmlvdXNSdW4gPSBudWxscHRyOwogICAgIGZv
ciAoOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7CiAgICAgICAgIGF1dG8gY29tcHV0ZUV4cGFu
c2lvbk9wcG9ydHVuaXRpZXMgPSBbJmV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsICZleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50LCB0ZXh0QWxpZ24sICZpc0FmdGVyRXhwYW5zaW9uXSAoUmVuZGVyQmxv
Y2tGbG93JiBibG9jaywKLSAgICAgICAgICAgIExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gs
IEJpZGlSdW4qIHByZXZpb3VzUnVuLCBCaWRpUnVuKiBuZXh0UnVuLCBTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQorICAgICAgICAgICAgTGVnYWN5SW5saW5l
VGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4qIG5leHRSdW4s
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKHN0cmluZ1ZpZXcuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gRW1wdHkgcnVucyBzaG91bGQgc3RpbGwgcHJvZHVjZSBhbiBlbnRyeSBpbiBl
eHBhbnNpb25PcHBvcnR1bml0aWVzIGxpc3Qgc28gdGhhdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIG1h
dGNoZXMgdGhlIG51bWJlciBvZiBydW5zLgogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMuYXBwZW5kKDApOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gZXhw
YW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KGJsb2NrLCB0ZXh0Qm94LCBwcmV2aW91c1J1
biwgbmV4dFJ1biwgdGV4dEFsaWduLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgIFBB
TDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBleHBhbnNpb25CZWhhdmlv
ckZvcklubGluZVRleHRCb3goYmxvY2ssIHRleHRCb3gsIHByZXZpb3VzUnVuLCBuZXh0UnVuLCB0
ZXh0QWxpZ24sIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICAgICAgYXBwbHlFeHBhbnNpb25C
ZWhhdmlvcih0ZXh0Qm94LCBleHBhbnNpb25CZWhhdmlvcik7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBvcHBvcnR1bml0aWVzSW5SdW47CiAgICAgICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0aWVz
SW5SdW4sIGlzQWZ0ZXJFeHBhbnNpb24pID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQoc3RyaW5nVmlldywgZGlyZWN0aW9uLCBleHBhbnNpb25CZWhhdmlvcik7CkBAIC0x
MDkxLDcgKzEwOTEsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZpbmRGaXJzdFRyYWlsaW5n
U3BhY2UoY29uc3QgUmVuZGVyVGV4dCYgbGFzdFRleHQsIGNvbnN0CiAgICAgcmV0dXJuIGZpcnN0
U3BhY2U7CiB9CiAKLWlubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFp
bGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBj
dXJyZW50Q29udGV4dCkKK2lubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVU
cmFpbGluZ1NwYWNlcyhQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgUEFMOjpC
aWRpQ29udGV4dCogY3VycmVudENvbnRleHQpCiB7CiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3Vu
dCgpCiAgICAgICAgIHx8ICFiaWRpUnVucy5sb2dpY2FsbHlMYXN0UnVuKCktPnJlbmRlcmVyKCku
c3R5bGUoKS5icmVha09ubHlBZnRlcldoaXRlU3BhY2UoKQpAQCAtMTExMywxNyArMTExMywxNyBA
QCBpbmxpbmUgQmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMo
QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZAogICAgIGlmIChmaXJzdFNwYWNlID09IHRyYWlsaW5n
U3BhY2VSdW4tPnN0b3AoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgYm9vbCBzaG91bGRS
ZW9yZGVyID0gdHJhaWxpbmdTcGFjZVJ1biAhPSAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUiA/IGJpZGlSdW5zLmxhc3RSdW4oKSA6IGJpZGlSdW5zLmZpcnN0UnVuKCkpOworICAgIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOworICAgIGJv
b2wgc2hvdWxkUmVvcmRlciA9IHRyYWlsaW5nU3BhY2VSdW4gIT0gKGRpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiA/IGJpZGlSdW5zLmxhc3RSdW4oKSA6IGJpZGlSdW5zLmZpcnN0
UnVuKCkpOwogICAgIGlmIChmaXJzdFNwYWNlICE9IHRyYWlsaW5nU3BhY2VSdW4tPnN0YXJ0KCkp
IHsKLSAgICAgICAgQmlkaUNvbnRleHQqIGJhc2VDb250ZXh0ID0gY3VycmVudENvbnRleHQ7Ci0g
ICAgICAgIHdoaWxlIChCaWRpQ29udGV4dCogcGFyZW50ID0gYmFzZUNvbnRleHQtPnBhcmVudCgp
KQorICAgICAgICBQQUw6OkJpZGlDb250ZXh0KiBiYXNlQ29udGV4dCA9IGN1cnJlbnRDb250ZXh0
OworICAgICAgICB3aGlsZSAoUEFMOjpCaWRpQ29udGV4dCogcGFyZW50ID0gYmFzZUNvbnRleHQt
PnBhcmVudCgpKQogICAgICAgICAgICAgYmFzZUNvbnRleHQgPSBwYXJlbnQ7CiAKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IG5ld1RyYWlsaW5nUnVuID0gbWFrZVVuaXF1ZTxCaWRp
UnVuPihmaXJzdFNwYWNlLCB0cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3AsIHRyYWlsaW5nU3BhY2VS
dW4tPnJlbmRlcmVyKCksIGJhc2VDb250ZXh0LCBVX09USEVSX05FVVRSQUwpOwogICAgICAgICB0
cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3AgPSBmaXJzdFNwYWNlOwogICAgICAgICB0cmFpbGluZ1Nw
YWNlUnVuID0gbmV3VHJhaWxpbmdSdW4uZ2V0KCk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgYmlkaVJ1bnMuYXBwZW5kUnVuKFdURk1vdmUobmV3
VHJhaWxpbmdSdW4pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYmlkaVJ1bnMucHJlcGVu
ZFJ1bihXVEZNb3ZlKG5ld1RyYWlsaW5nUnVuKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBpbmxp
bmUgQmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZAogICAgIGlmICghc2hvdWxkUmVvcmRlcikKICAgICAgICAgcmV0
dXJuIHRyYWlsaW5nU3BhY2VSdW47CiAKLSAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUikgeworICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
IHsKICAgICAgICAgYmlkaVJ1bnMubW92ZVJ1blRvRW5kKHRyYWlsaW5nU3BhY2VSdW4pOwogICAg
ICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX2xldmVsID0gMDsKICAgICB9IGVsc2UgewpAQCAtMTE3
MCw3ICsxMTcwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUlu
SXNvbGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLAogfQogCiAvLyBGSVhNRTogQmlk
aVJlc29sdmVyIHNob3VsZCBoYXZlIHRoaXMgbG9naWMuCi1zdGF0aWMgaW5saW5lIHZvaWQgY29u
c3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIs
IEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0
b3ImIGVuZE9mUnVucywgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KQorc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVjdEJpZGlS
dW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLCBQQUw6OkJpZGlS
dW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVu
ZE9mUnVucywgUEFMOjpWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSwgYm9vbCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIGEg
QmlkaVJ1bkxpc3QgaW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgaW5zdGVhZAogICAgIC8vIG9m
IHRoZSByZXNvbHZlciBvd25pbmcgdGhlIHJ1bnMuCkBAIC0xMTkyLDE5ICsxMTkyLDE5IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJl
c29sdmVyJiB0b3BSZXNvbHZlciwKICAgICAgICAgLy8gdHJlZSB0byBzZWUgd2hpY2ggcGFyZW50
IGlubGluZSBpcyB0aGUgaXNvbGF0ZS4gV2UgY291bGQgY2hhbmdlIGVudGVySXNvbGF0ZQogICAg
ICAgICAvLyB0byB0YWtlIGEgUmVuZGVyT2JqZWN0IGFuZCBkbyB0aGlzIGxvZ2ljIHRoZXJlLCBi
dXQgdGhhdCB3b3VsZCBiZSBhIGxheWVyaW5nCiAgICAgICAgIC8vIHZpb2xhdGlvbiBmb3IgQmlk
aVJlc29sdmVyICh3aGljaCBrbm93cyBub3RoaW5nIGFib3V0IFJlbmRlck9iamVjdCkuCi0gICAg
ICAgIFJlbmRlcklubGluZSogaXNvbGF0ZWRJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KGhpZ2hlc3RDb250YWluaW5nSXNvbGF0ZVdpdGhpblJvb3Qoc3RhcnRPYmplY3QsIGN1cnJlbnRS
b290KSk7CisgICAgICAgIFJlbmRlcklubGluZSogaXNvbGF0ZWRJbmxpbmUgPSBkb3duY2FzdDxS
ZW5kZXJJbmxpbmU+KFBBTDo6aGlnaGVzdENvbnRhaW5pbmdJc29sYXRlV2l0aGluUm9vdChzdGFy
dE9iamVjdCwgY3VycmVudFJvb3QpKTsKICAgICAgICAgQVNTRVJUKGlzb2xhdGVkSW5saW5lKTsK
IAogICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgaXNvbGF0ZWRSZXNvbHZlcjsKLSAgICAgICAg
RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkudW5pY29k
ZUJpZGkoKTsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgICAgIGlmICh1
bmljb2RlQmlkaSA9PSBQbGFpbnRleHQpCisgICAgICAgIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNv
ZGVCaWRpID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKKyAgICAgICAg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgaWYgKHVuaWNvZGVCaWRpID09
IFBBTDo6UGxhaW50ZXh0KQogICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGly
ZWN0aW9uLCBMZWdhY3lJbmxpbmVJdGVyYXRvcihpc29sYXRlZElubGluZSwgJmlzb2xhdGVkUnVu
Lm9iamVjdCwgMCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bmljb2Rl
QmlkaSA9PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlkZSk7CisgICAg
ICAgICAgICBBU1NFUlQodW5pY29kZUJpZGkgPT0gUEFMOjpJc29sYXRlIHx8IHVuaWNvZGVCaWRp
ID09IFBBTDo6SXNvbGF0ZU92ZXJyaWRlKTsKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGlzb2xh
dGVkSW5saW5lLT5zdHlsZSgpLmRpcmVjdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIGlzb2xh
dGVkUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHVu
aWNvZGVCaWRpKSkpOworICAgICAgICBpc29sYXRlZFJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJp
ZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHVuaWNvZGVCaWRpKSkpOwogCiAgICAgICAg
IHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShpc29sYXRlZFJlc29sdmVyLCB0b3BSZXNv
bHZlciwgaXNvbGF0ZWRSdW4ucnVuVG9SZXBsYWNlLCBpc29sYXRlZElubGluZSwgJnN0YXJ0T2Jq
ZWN0KTsKIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVj
dEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLAogICAg
ICAgICAvLyBXZSBzdG9wIGF0IHRoZSBuZXh0IGVuZCBvZiBsaW5lOyB3ZSBtYXkgcmUtZW50ZXIg
dGhpcyBpc29sYXRlIGluIHRoZSBuZXh0IGNhbGwgdG8gY29uc3RydWN0QmlkaVJ1bnMoKS4KICAg
ICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIGVuZCBhbmQgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5IGJlPwogICAgICAgICAvLyBybml3YSBzYXlzIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSBp
cyBqdXN0IGEgV2luSUUgaGFjayBhbmQgY291bGQgYWx3YXlzIGJlIGZhbHNlIGhlcmU/Ci0gICAg
ICAgIGlzb2xhdGVkUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGVuZE9mUnVucywgTm9W
aXN1YWxPdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAgICAgICAgaXNvbGF0
ZWRSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kT2ZSdW5zLCBQQUw6Ok5vVmlzdWFs
T3ZlcnJpZGUsIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBkbyBub3QgZGVsZXRlIHRoZSBydW5zIGZyb20gdGhlIHJlc29sdmVyLgogICAgICAgICAv
LyBXZSdyZSBub3QgZ3VhcmFudGVlZCB0byBnZXQgYW55IEJpZGlSdW5zIGluIHRoZSBwcmV2aW91
cyBzdGVwLiBJZiB3ZSBkb24ndCwgd2UgYWxsb3cgdGhlIHBsYWNlaG9sZGVyCiAgICAgICAgIC8v
IGl0c2VsZiB0byBiZSB0dXJuZWQgaW50byBhbiBJbmxpbmVCb3guIFdlIGNhbid0IHJlbW92ZSBp
dCBoZXJlIHdpdGhvdXQgcG90ZW50aWFsbHkgbG9zaW5nIHRyYWNrIG9mCkBAIC0xMjM3LDcgKzEy
MzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElu
bGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsCiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gY29u
c3RydWN0cyBsaW5lIGJveGVzIGZvciBhbGwgb2YgdGhlIHRleHQgcnVucyBpbiB0aGUgcmVzb2x2
ZXIgYW5kIGNvbXB1dGVzIHRoZWlyIHBvc2l0aW9uLgotTGVnYWN5Um9vdElubGluZUJveCogTGVn
YWN5TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlM
ZXZlbCwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJ
dGVyYXRvciYgZW5kLCBMaW5lSW5mbyYgbGluZUluZm8sIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYg
dmVydGljYWxQb3NpdGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVh
c3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQorTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5
TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZl
bCwgUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGlu
ZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiBsaW5lSW5mbywgVmVydGljYWxQb3NpdGlvbkNhY2hl
JiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7CiAgICAgaWYgKCFiaWRpUnVucy5ydW5D
b3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzMzgsNyArMTMzOCw3IEBAIHZv
aWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBib29sIGhhCiAgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVh
biBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAg
ICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVy
IGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCiAgICAgTGVnYWN5SW5saW5lSXRlcmF0b3Ig
Y2xlYW5MaW5lU3RhcnQ7Ci0gICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOworICAg
IFBBTDo6QmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOwogICAgIGlmICghbGF5b3V0U3Rh
dGUuaXNGdWxsTGF5b3V0KCkgJiYgc3RhcnRMaW5lKQogICAgICAgICBkZXRlcm1pbmVFbmRQb3Np
dGlvbihsYXlvdXRTdGF0ZSwgc3RhcnRMaW5lLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlk
aVN0YXR1cyk7CiAKQEAgLTEzNzgsNyArMTM3OCw3IEBAIGlubGluZSBjb25zdCBMZWdhY3lJbmxp
bmVJdGVyYXRvciYgTGVnYWN5TGluZUxheW91dDo6cmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJ
CiAgICAgcmV0dXJuIG9sZEVuZDsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRS
dW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5M
aW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIHVuc2lnbmVk
IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlv
dXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xl
YW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywg
dW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCiB7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGJvb2wgcGFnaW5hdGVkID0gbGF5b3V0
Q29udGV4dCgpLmxheW91dFN0YXRlKCkgJiYgbGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCkt
PmlzUGFnaW5hdGVkKCk7CkBAIC0xNDMxLDE1ICsxNDMxLDE1IEBAIHZvaWQgTGVnYWN5TGluZUxh
eW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwKICAgICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQogICAgICAgICAgICAgICAgIGxh
c3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5kLnJlbmRlcmVyKCksIGVuZC5vZmZzZXQo
KSwgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmlz
dWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1VzZS5ydGxPcmRlcmluZygp
ID09IE9yZGVyOjpWaXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIgPyBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmlnaHRUb0xlZnRP
dmVycmlkZSkgOiBOb1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAgICAgICAgIFBBTDo6VmlzdWFsRGly
ZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1VzZS5ydGxPcmRlcmluZygpID09IE9y
ZGVyOjpWaXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiA/IFBBTDo6VmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSA6IFBBTDo6VmlzdWFsUmln
aHRUb0xlZnRPdmVycmlkZSkgOiBQQUw6Ok5vVmlzdWFsT3ZlcnJpZGUpOwogCi0gICAgICAgICAg
ICBpZiAoaXNOZXdVQkFQYXJhZ3JhcGggJiYgc3R5bGVUb1VzZS51bmljb2RlQmlkaSgpID09IFBs
YWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgewotICAgICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGVUb1VzZS5kaXJlY3Rpb24oKTsKKyAg
ICAgICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHlsZVRvVXNlLnVuaWNvZGVCaWRp
KCkgPT0gUEFMOjpQbGFpbnRleHQgJiYgIXJlc29sdmVyLmNvbnRleHQoKS0+cGFyZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGVUb1Vz
ZS5kaXJlY3Rpb24oKTsKICAgICAgICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShk
aXJlY3Rpb24sIHJlc29sdmVyLnBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJlc29sdmVy
LnNldFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZVRvVXNlLnVu
aWNvZGVCaWRpKCkpKSk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKFBBTDo6
QmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUoc3R5bGVUb1VzZS51bmljb2RlQmlkaSgp
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlw
IGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0
byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCi0gICAgICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkaVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7CisgICAgICAgICAgICBQQUw6OkJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucyA9IHJlc29sdmVyLnJ1bnMoKTsKICAgICAgICAgICAgIGNv
bnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChyZXNvbHZlciwgYmlkaVJ1bnMsIGVuZCwgb3ZlcnJp
ZGUsIGxheW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkpOwog
ICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVyLnBvc2l0aW9uKCkgPT0gZW5kKTsKIApAQCAtMTUy
Nyw3ICsxNTI3LDcgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRz
SW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogICAgICAgICB9CiAKICAgICAg
ICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUucmVzZXQoKTsKLSAgICAgICAgcmVzb2x2
ZXIuc2V0UG9zaXRpb24oZW5kLCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoZW5kKSk7CisgICAg
ICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKGVuZCwgUEFMOjpudW1iZXJPZklzb2xhdGVBbmNlc3Rv
cnMoZW5kKSk7CiAgICAgfQogCiAgICAgLy8gSW4gY2FzZSB3ZSBhbHJlYWR5IGFkanVzdGVkIHRo
ZSBsaW5lIHBvc2l0aW9ucyBkdXJpbmcgdGhpcyBsYXlvdXQgdG8gYXZvaWQgd2lkb3dzCkBAIC0x
OTYwLDIwICsxOTYwLDIwIEBAIExlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6
OmRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsCiAgICAgaWYgKGxhc3RM
aW5lKSB7CiAgICAgICAgIG1fZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KGxhc3RMaW5lLT5saW5lQm94
Qm90dG9tKCkpOwogICAgICAgICBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyID0gTGVnYWN5SW5s
aW5lSXRlcmF0b3IoJm1fZmxvdywgbGFzdExpbmUtPmxpbmVCcmVha09iaigpLCBsYXN0TGluZS0+
bGluZUJyZWFrUG9zKCkpOwotICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihpdGVyLCBudW1i
ZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOworICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlv
bihpdGVyLCBQQUw6Om51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7CiAgICAgICAgIHJl
c29sdmVyLnNldFN0YXR1cyhsYXN0TGluZS0+bGluZUJyZWFrQmlkaVN0YXR1cygpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0
aW9uKCk7Ci0gICAgICAgIGlmIChzdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQor
ICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24o
KTsKKyAgICAgICAgaWYgKHN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OlBsYWludGV4dCkK
ICAgICAgICAgICAgIGRldGVybWluZURpcmVjdGlvbmFsaXR5KGRpcmVjdGlvbiwgTGVnYWN5SW5s
aW5lSXRlcmF0b3IoJm1fZmxvdywgZmlyc3RJbmxpbmVSZW5kZXJlclNraXBwaW5nRW1wdHkobV9m
bG93KSwgMCkpOwotICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhkaXJlY3Rp
b24sIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSkpOworICAgICAgICByZXNvbHZl
ci5zZXRTdGF0dXMoUEFMOjpCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZSgp
LnVuaWNvZGVCaWRpKCkpKSk7CiAgICAgICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIgPSBM
ZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBmaXJzdElubGluZVJlbmRlcmVyU2tpcHBpbmdF
bXB0eShtX2Zsb3csICZyZXNvbHZlciksIDApOwotICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlv
bihpdGVyLCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOworICAgICAgICByZXNvbHZl
ci5zZXRQb3NpdGlvbihpdGVyLCBQQUw6Om51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7
CiAgICAgfQogICAgIHJldHVybiBjdXJyZW50TGluZTsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5
b3V0OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBM
ZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVh
bkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKK3ZvaWQgTGVnYWN5
TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykK
IHsKICAgICBhdXRvIGl0ZXJhdG9yRm9yRmlyc3REaXJ0eUZsb2F0ID0gW10oTGluZUxheW91dFN0
YXRlOjpGbG9hdExpc3QmIGZsb2F0cykgewogICAgICAgICBhdXRvIGxhc3RDbGVhbkZsb2F0ID0g
ZmxvYXRzLmxhc3RDbGVhbkZsb2F0KCk7CkBAIC0yMDg1LDcgKzIwODUsNyBAQCBib29sIExlZ2Fj
eUxpbmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKExlZ2FjeVJvb3RJ
bmxpbmVCb3gqIHJvbwogICAgIHJldHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAh
PSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChjdXJyZW50RnJhZ21lbnQp
OwogfQogCi1ib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNv
bnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMm
IGVuZExpbmVTdGF0dXMpCitib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IFBB
TDo6QmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cykKIHsKICAgICBpZiAocmVzb2x2ZXIucG9zaXRp
b24oKSA9PSBlbmRMaW5lU3RhcnQpIHsKICAgICAgICAgaWYgKHJlc29sdmVyLnN0YXR1cygpICE9
IGVuZExpbmVTdGF0dXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5TGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlv
dXQuaAppbmRleCAxMmFkN2M5NTgwMzZmMzU1MTI0N2NmNTUwYjIyMDI3NmQzYzZlN2M4Li5lOWFj
NDg3MjBjNWU1YmJkNzA4NDdjYjdiNTE5YjljN2JiYzUzMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKQEAgLTMxLDkgKzMxLDE0IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIK
IAorbmFtZXNwYWNlIFBBTCB7CitjbGFzcyBCaWRpQ29udGV4dDsKK3RlbXBsYXRlIDxjbGFzcyBS
dW4+IGNsYXNzIEJpZGlSdW5MaXN0Oworc3RydWN0IEJpZGlTdGF0dXM7Cit9CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRleHQ7CiBjbGFzcyBGbG9hdGluZ09iamVjdDsK
IGNsYXNzIEZsb2F0V2l0aFJlY3Q7CiBjbGFzcyBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OwpAQCAt
NDYsMTAgKzUxLDggQEAgY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyUnVieVJ1bjsK
IGNsYXNzIExlZ2FjeVJvb3RJbmxpbmVCb3g7CiBjbGFzcyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7
Ci1zdHJ1Y3QgQmlkaVN0YXR1czsKIHN0cnVjdCBXb3JkTWVhc3VyZW1lbnQ7CiAKLXRlbXBsYXRl
IDxjbGFzcyBSdW4+IGNsYXNzIEJpZGlSdW5MaXN0OwogdHlwZWRlZiBWZWN0b3I8V29yZE1lYXN1
cmVtZW50LCA2ND4gV29yZE1lYXN1cmVtZW50czsKIAogY2xhc3MgTGVnYWN5TGluZUxheW91dCB7
CkBAIC02NiwxNCArNjksMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBsYXlvdXRMaW5lQm94ZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwogCi0gICAgTGVnYWN5Um9vdElubGluZUJv
eCogY29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7
CisgICAgTGVnYWN5Um9vdElubGluZUJveCogY29uc3RydWN0TGluZShQQUw6OkJpZGlSdW5MaXN0
PEJpZGlSdW4+JiwgY29uc3QgTGluZUluZm8mKTsKICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRP
bkxpbmUoY29uc3QgRmxvYXRpbmdPYmplY3QmIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZUluZm8mLCBMaW5lV2lkdGgmKTsKICAgICB2b2lk
IGFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiAKICAgICBzaXplX3QgbGluZUNvdW50
KCkgY29uc3Q7CiAgICAgc2l6ZV90IGxpbmVDb3VudFVudGlsKGNvbnN0IExlZ2FjeVJvb3RJbmxp
bmVCb3gqKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlk
aVJ1bkxpc3Q8QmlkaVJ1bj4qLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYsIElu
bGluZUJpZGlSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3Qo
UEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2Jq
ZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlTG9naWNh
bFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IFRleHRBbGlnbk1vZGUm
LCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
ZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKIAogcHJp
dmF0ZToKQEAgLTg5LDIwICs5MiwyMCBAQCBwcml2YXRlOgogICAgIEJpZGlSdW4qIGNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KExlZ2FjeVJvb3RJbmxpbmVCb3gqLCBj
b25zdCBMaW5lSW5mbyYsIFRleHRBbGlnbk1vZGUsIGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQm
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQ
b3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgcmVtb3ZlSW5saW5l
Qm94KEJpZGlSdW4mLCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94JikgY29uc3Q7CiAgICAgdm9p
ZCBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKExlZ2FjeVJvb3RJbmxpbmVC
b3gqLCBCaWRpUnVuKiBmaXJzdFJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
IHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmKTsKLSAgICBpbmxpbmUgQmlk
aVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
LCBCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOworICAgIGlubGluZSBCaWRpUnVuKiBoYW5k
bGVUcmFpbGluZ1NwYWNlcyhQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgUEFM
OjpCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOwogICAgIHZvaWQgYXBwZW5kRmxvYXRpbmdP
YmplY3RUb0xhc3RMaW5lKEZsb2F0aW5nT2JqZWN0Jik7Ci0gICAgTGVnYWN5Um9vdElubGluZUJv
eCogY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5k
LCBMaW5lSW5mbyYsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYsIEJpZGlSdW4qIHRyYWlsaW5nU3Bh
Y2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmKTsKKyAgICBMZWdhY3lSb290SW5saW5lQm94KiBjcmVh
dGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBQQUw6OkJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZCwg
TGluZUluZm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNl
UnVuLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExp
bmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOwogICAgIGlubGluZSBjb25zdCBM
ZWdhY3lJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExh
eW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCBG
bG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgSW5saW5lQmlkaVJlc29s
dmVyJiwgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBvbGRFbmQpOwotICAgIHZvaWQgbGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29s
dmVyJiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBC
aWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcyk7CisgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5
b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0
YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwogICAgIHZvaWQgcmVh
dHRhY2hDbGVhbkxpbmVGbG9hdHMoTGVnYWN5Um9vdElubGluZUJveCYgY2xlYW5MaW5lLCBMYXlv
dXRVbml0IGRlbHRhLCBib29sIGlzRmlyc3RDbGVhbkxpbmUpOwogICAgIHZvaWQgbGlua1RvRW5k
TGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwogICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xl
YW5MaW5lKExlZ2FjeVJvb3RJbmxpbmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJv
eE9uQ2xlYW5MaW5lLCBGbG9hdFdpdGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsIGJvb2wm
IGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKICAgICBMZWdhY3lS
b290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElu
bGluZUJpZGlSZXNvbHZlciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxh
eW91dFN0YXRlJiwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJ
dGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMp
OworICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgTGVnYWN5
Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5l
U3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAgICAgYm9vbCBj
aGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJik7CiAgICAg
Ym9vbCBsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChMZWdhY3lSb290SW5saW5lQm94
KiByb290Qm94LCBMYXlvdXRVbml0IGxpbmVEZWx0YSwgUmVuZGVyRnJhZ21lbnRlZEZsb3cqKSBj
b25zdDsKLSAgICBib29sIG1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElu
bGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3Rh
cnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpOworICAgIGJvb2wgbWF0Y2hlZEVu
ZExpbmUoTGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3Qg
TGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVz
JiBlbmRMaW5lU3RhdHVzKTsKICAgICB2b2lkIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAg
ICAgdm9pZCBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCk7CiAgICAgdm9pZCB1cGRhdGVGcmFn
bWVudEZvckxpbmUoTGVnYWN5Um9vdElubGluZUJveCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwCmluZGV4IDhlMWEwZmJlZjU2
Y2Y2MTBlZDE3ZmFkN2M1ZTg0Y2E2NGM3NWQwMmIuLjc1YWU0YWY3NWQ0ODA0NzZiYjQ1OTBiYjcz
NDUxOWZjNDkyMzhhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lSb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
Um9vdElubGluZUJveC5jcHAKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMZWdhY3lSb290SW5saW5lQm94LmgiCiAKLSNpbmNsdWRlICJCaWRpUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclJ1
YnlUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlZlcnRpY2FsUG9z
aXRpb25DYWNoZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE5
OSwxMCArMTk5LDEwIEBAIHZvaWQgTGVnYWN5Um9vdElubGluZUJveDo6YWRqdXN0UG9zaXRpb24o
ZmxvYXQgZHgsIGZsb2F0IGR5KQogdm9pZCBMZWdhY3lSb290SW5saW5lQm94OjpjaGlsZFJlbW92
ZWQoTGVnYWN5SW5saW5lQm94KiBib3gpCiB7CiAgICAgaWYgKCZib3gtPnJlbmRlcmVyKCkgPT0g
bV9saW5lQnJlYWtPYmopCi0gICAgICAgIHNldExpbmVCcmVha0luZm8obnVsbHB0ciwgMCwgQmlk
aVN0YXR1cygpKTsKKyAgICAgICAgc2V0TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBQQUw6OkJp
ZGlTdGF0dXMoKSk7CiAKICAgICBmb3IgKGF1dG8qIHByZXYgPSBwcmV2Um9vdEJveCgpOyBwcmV2
ICYmIHByZXYtPmxpbmVCcmVha09iaigpID09ICZib3gtPnJlbmRlcmVyKCk7IHByZXYgPSBwcmV2
LT5wcmV2Um9vdEJveCgpKSB7Ci0gICAgICAgIHByZXYtPnNldExpbmVCcmVha0luZm8obnVsbHB0
ciwgMCwgQmlkaVN0YXR1cygpKTsKKyAgICAgICAgcHJldi0+c2V0TGluZUJyZWFrSW5mbyhudWxs
cHRyLCAwLCBQQUw6OkJpZGlTdGF0dXMoKSk7CiAgICAgICAgIHByZXYtPm1hcmtEaXJ0eSgpOwog
ICAgIH0KIH0KQEAgLTU5OCwxMiArNTk4LDEyIEBAIFJlbmRlckJsb2NrRmxvdyYgTGVnYWN5Um9v
dElubGluZUJveDo6YmxvY2tGbG93KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
QmxvY2tGbG93PihyZW5kZXJlcigpKTsKIH0KIAotQmlkaVN0YXR1cyBMZWdhY3lSb290SW5saW5l
Qm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKK1BBTDo6QmlkaVN0YXR1cyBMZWdhY3lS
b290SW5saW5lQm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKIHsgCiAgICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0Vvciks
IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0U3Ry
b25nKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xh
c3QpLCBtX2xpbmVCcmVha0NvbnRleHQuY29weVJlZigpIH07CiB9CiAKLXZvaWQgTGVnYWN5Um9v
dElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWdu
ZWQgYnJlYWtQb3NpdGlvbiwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzKQordm9pZCBMZWdhY3lS
b290SW5saW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNp
Z25lZCBicmVha1Bvc2l0aW9uLCBjb25zdCBQQUw6OkJpZGlTdGF0dXMmIHN0YXR1cykKIHsKICAg
ICBtX2xpbmVCcmVha09iaiA9IG9iamVjdDsKICAgICBtX2xpbmVCcmVha1BvcyA9IGJyZWFrUG9z
aXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElu
bGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3gu
aAppbmRleCBlY2VlMjY0ZGI1YzMyOWY1NGZkZDA4ZWYxOWFhYzA2ZTA4MDQzNmU1Li5lNTliNjQ2
MmU4ODI5YjVmNjVlYzk5NzY1MTZhYjI1NTQwZmMzNDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmgKQEAgLTIwLDExICsyMCwxNSBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGVnYWN5
SW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L0JpZGlDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAorbmFtZXNwYWNl
IFBBTCB7CitzdHJ1Y3QgQmlkaVN0YXR1czsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMzMsNyArMzcsNiBAQCBjbGFzcyBMb2dpY2FsU2VsZWN0
aW9uT2Zmc2V0Q2FjaGVzOwogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogY2xhc3MgUmVuZGVyRnJh
Z21lbnRDb250YWluZXI7CiAKLXN0cnVjdCBCaWRpU3RhdHVzOwogc3RydWN0IEdhcFJlY3RzOwog
CiBjbGFzcyBMZWdhY3lSb290SW5saW5lQm94IDogcHVibGljIExlZ2FjeUlubGluZUZsb3dCb3gs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxMZWdhY3lSb290SW5saW5lQm94PiB7CkBAIC05MSw4ICs5
NCw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIGxpbmVCcmVha09iaigp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrT2JqLmdldCgpOyB9Ci0gICAgQmlkaVN0YXR1cyBs
aW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaW5lQnJlYWtJbmZvKFJl
bmRlck9iamVjdCosIHVuc2lnbmVkIGJyZWFrUG9zLCBjb25zdCBCaWRpU3RhdHVzJik7CisgICAg
UEFMOjpCaWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdDsKKyAgICB2b2lkIHNl
dExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQgYnJlYWtQb3MsIGNvbnN0IFBB
TDo6QmlkaVN0YXR1cyYpOwogCiAgICAgdW5zaWduZWQgbGluZUJyZWFrUG9zKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQnJlYWtQb3M7IH0KICAgICB2b2lkIHNldExpbmVCcmVha1Bvcyh1bnNpZ25l
ZCBwKSB7IG1fbGluZUJyZWFrUG9zID0gcDsgfQpAQCAtMjAyLDcgKzIwNSw3IEBAIHByaXZhdGU6
CiAgICAgLy8gV2hlcmUgdGhpcyBsaW5lIGVuZGVkLiBUaGUgZXhhY3Qgb2JqZWN0IGFuZCB0aGUg
cG9zaXRpb24gd2l0aGluIHRoYXQgb2JqZWN0IGFyZSBzdG9yZWQgc28gdGhhdAogICAgIC8vIHdl
IGNhbiBjcmVhdGUgYW4gTGVnYWN5SW5saW5lSXRlcmF0b3IgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIg
dGhlIGVuZCBvZiB0aGlzIGxpbmUuCiAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fbGluZUJy
ZWFrT2JqOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gbV9saW5lQnJlYWtDb250ZXh0OworICAg
IFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiBtX2xpbmVCcmVha0NvbnRleHQ7CiAKICAgICBMYXlv
dXRVbml0IG1fbGluZVRvcDsKICAgICBMYXlvdXRVbml0IG1fbGluZUJvdHRvbTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGM1NjYyZTZiMDMxYzUzNTFlMDhl
NTg4NDRkYjRiOTkwMzM2NzNhNzguLmQxNGUyZTlhNmI1OWU5Mjg0YmZiZmMxMDU5ZmIxYzYxOTRi
NDM1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzA4
Nyw5ICszMDg3LDkgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25z
dAogICAgIHJldHVybiAiUmVuZGVyQmxvY2siOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykK
K1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdW
aWV3LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgYXV0byB0ZXh0RGlyZWN0aW9uID0g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSOwogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLnJ0bE9y
ZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbDsKICAgICBpZiAoZmxhZ3MgIT0gRGVmYXVsdFRleHRS
dW5GbGFncykgewogICAgICAgICBpZiAoZmxhZ3MgJiBSZXNwZWN0RGlyZWN0aW9uKQpAQCAtMzEw
NiwzNCArMzEwNiwzNCBAQCBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFN0
cmluZ1ZpZXcgc3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUmCiAgICAgcmV0dXJuIFRleHRS
dW4oV1RGTW92ZSh1cGRhdGVkU3RyaW5nKSwgMCwgMCwgZXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9u
LCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK1RleHRS
dW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24s
IFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihTdHJp
bmdWaWV3KHN0cmluZyksIHN0eWxlLCBleHBhbnNpb24sIGZsYWdzKTsKIH0KIAotVGV4dFJ1biBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5n
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihjb25zdCBBdG9tU3RyaW5nJiBhdG9tU3RyaW5nLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7
CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyhhdG9tU3RyaW5nKSwgc3R5
bGUsIGV4cGFuc2lvbiwgZmxhZ3MpOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBj
b25zdHJ1Y3RUZXh0UnVuKHRleHQuc3RyaW5nVmlldygpLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0K
IAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJUZXh0
JiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQmIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBBTDo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHVuc2lnbmVkIHN0b3AgPSBvZmZzZXQg
KyBsZW5ndGg7CiAgICAgQVNTRVJUKHN0b3AgPD0gdGV4dC50ZXh0KCkubGVuZ3RoKCkpOwogICAg
IHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHRleHQuc3RyaW5nVmlldyhvZmZzZXQsIHN0b3ApLCBz
dHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQQUw6OkV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbikKIHsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihTdHJpbmdWaWV3
KGNoYXJhY3RlcnMsIGxlbmd0aCksIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBjb25z
dHJ1Y3RUZXh0UnVuKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVuZ3RoKSwgc3R5bGUsIGV4cGFu
c2lvbik7CiB9CkBAIC0zMzA3LDEyICszMzA3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dEJvcmRlckJveFJlY3RGb3JQYWludGluZyhMYXlvdXRSZWN0JiBwYWludFJlY3QpCiAgICAgaWYg
KHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBMYXlvdXRVbml0
IHlPZmYgPSBzdGQ6Om1heCgwX2x1LCAobGVnZW5kLT5oZWlnaHQoKSAtIFJlbmRlckJveDo6Ym9y
ZGVyQmVmb3JlKCkpIC8gMik7CiAgICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQocGFpbnRSZWN0
LmhlaWdodCgpIC0geU9mZik7Ci0gICAgICAgIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0g
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQorICAgICAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9k
ZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQogICAgICAgICAgICAgcGFpbnRS
ZWN0LnNldFkocGFpbnRSZWN0LnkoKSArIHlPZmYpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIExh
eW91dFVuaXQgeE9mZiA9IHN0ZDo6bWF4KDBfbHUsIChsZWdlbmQtPndpZHRoKCkgLSBSZW5kZXJC
b3g6OmJvcmRlckJlZm9yZSgpKSAvIDIpOwogICAgICAgICBwYWludFJlY3Quc2V0V2lkdGgocGFp
bnRSZWN0LndpZHRoKCkgLSB4T2ZmKTsKLSAgICAgICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUo
KSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgIGlmIChzdHlsZSgpLndyaXRp
bmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCiAgICAgICAgICAgICBw
YWludFJlY3Quc2V0WChwYWludFJlY3QueCgpICsgeE9mZik7CiAgICAgfQogfQpAQCAtMzMyOSwx
MSArMzMyOSwxMSBAQCBMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpwYWludFJlY3RUb0NsaXBPdXRG
cm9tQm9yZGVyKGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdAogICAgIExheW91dFVuaXQgYm9y
ZGVyRXh0ZW50ID0gUmVuZGVyQm94Ojpib3JkZXJCZWZvcmUoKTsKICAgICBpZiAoc3R5bGUoKS5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGNsaXBSZWN0LnNldFgocGFpbnRS
ZWN0LngoKSArIGxlZ2VuZC0+eCgpKTsKLSAgICAgICAgY2xpcFJlY3Quc2V0WShzdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tID8gcGFpbnRSZWN0LnkoKSA6
IHBhaW50UmVjdC55KCkgKyBwYWludFJlY3QuaGVpZ2h0KCkgLSBib3JkZXJFeHRlbnQpOworICAg
ICAgICBjbGlwUmVjdC5zZXRZKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbSA/IHBhaW50UmVjdC55KCkgOiBwYWludFJlY3QueSgpICsgcGFpbnRS
ZWN0LmhlaWdodCgpIC0gYm9yZGVyRXh0ZW50KTsKICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgo
bGVnZW5kLT53aWR0aCgpKTsKICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KGJvcmRlckV4dGVu
dCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY2xpcFJlY3Quc2V0WChzdHlsZSgpLndyaXRpbmdN
b2RlKCkgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0ID8gcGFpbnRSZWN0LngoKSA6IHBhaW50
UmVjdC54KCkgKyBwYWludFJlY3Qud2lkdGgoKSAtIGJvcmRlckV4dGVudCk7CisgICAgICAgIGNs
aXBSZWN0LnNldFgoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6Okxl
ZnRUb1JpZ2h0ID8gcGFpbnRSZWN0LngoKSA6IHBhaW50UmVjdC54KCkgKyBwYWludFJlY3Qud2lk
dGgoKSAtIGJvcmRlckV4dGVudCk7CiAgICAgICAgIGNsaXBSZWN0LnNldFkocGFpbnRSZWN0Lnko
KSArIGxlZ2VuZC0+eSgpKTsKICAgICAgICAgY2xpcFJlY3Quc2V0V2lkdGgoYm9yZGVyRXh0ZW50
KTsKICAgICAgICAgY2xpcFJlY3Quc2V0SGVpZ2h0KGxlZ2VuZC0+aGVpZ2h0KCkpOwpAQCAtMzM2
MCwyOCArMzM2MCwyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRJbnRyaW5zaWNCb3JkZXJGb3JG
aWVsZHNldChMYXlvdXRVbml0IHBhZGRpbmcpCiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmJv
cmRlclRvcCgpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSAhPSBXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgIWludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCkpCisg
ICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSAhPSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0Jv
dHRvbSB8fCAhaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKSkKICAgICAgICAgcmV0dXJuIFJl
bmRlckJveDo6Ym9yZGVyVG9wKCk7CiAgICAgcmV0dXJuIFJlbmRlckJveDo6Ym9yZGVyVG9wKCkg
KyBpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJs
b2NrOjpib3JkZXJMZWZ0KCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgp
ICE9IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCB8fCAhaW50cmluc2ljQm9yZGVyRm9yRmllbGRz
ZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6
OkxlZnRUb1JpZ2h0IHx8ICFpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpKQogICAgICAgICBy
ZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJMZWZ0KCk7CiAgICAgcmV0dXJuIFJlbmRlckJveDo6Ym9y
ZGVyTGVmdCgpICsgaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKTsKIH0KIAogTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6Ym9yZGVyQm90dG9tKCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS53
cml0aW5nTW9kZSgpICE9IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCB8fCAhaW50cmluc2ljQm9y
ZGVyRm9yRmllbGRzZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFBBTDo6
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wIHx8ICFpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgp
KQogICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJCb3R0b20oKTsKICAgICByZXR1cm4g
UmVuZGVyQm94Ojpib3JkZXJCb3R0b20oKSArIGludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCk7
CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmJvcmRlclJpZ2h0KCkgY29uc3QKIHsKLSAg
ICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCB8
fCAhaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5n
TW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0IHx8ICFpbnRyaW5zaWNCb3Jk
ZXJGb3JGaWVsZHNldCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJSaWdodCgp
OwogICAgIHJldHVybiBSZW5kZXJCb3g6OmJvcmRlclJpZ2h0KCkgKyBpbnRyaW5zaWNCb3JkZXJG
b3JGaWVsZHNldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRl
eCAyMWU2MjEwZTU5YzMyN2E4Yzc0MjVhZDQwZjA3MWJkMzMxNzczZTRlLi5kYWVjNTYyMThkMWM2
NzY1OWEwOGE5MzBkZmM1NGYxYmY1ODhmNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaApAQCAtMTk0LDE5ICsxOTQsMTkgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5
bGUmLAotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHRS
dW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOworICAgICAgICBQQUw6OkV4cGFuc2lvbkJl
aGF2aW9yID0gUEFMOjpEZWZhdWx0RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4
dFJ1bkZsYWdzKTsKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFJlbmRlclN0eWxlJiwKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgPSBE
ZWZhdWx0RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKKyAg
ICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVsdEV4cGFuc2lvbiwgVGV4
dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7CiAgICAgc3RhdGljIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAotICAg
ICAgICBFeHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9
IERlZmF1bHRUZXh0UnVuRmxhZ3MpOworICAgICAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yID0g
UEFMOjpEZWZhdWx0RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdz
KTsKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQm
LCBjb25zdCBSZW5kZXJTdHlsZSYsCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVs
dEV4cGFuc2lvbik7CisgICAgICAgIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1
bHRFeHBhbnNpb24pOwogICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyVGV4dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5k
ZXJTdHlsZSYsCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbik7
CisgICAgICAgIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24p
OwogICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAotICAgICAgICBFeHBh
bnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24pOworICAgICAgICBQQUw6OkV4cGFuc2lv
bkJlaGF2aW9yID0gUEFMOjpEZWZhdWx0RXhwYW5zaW9uKTsKICAgICBzdGF0aWMgVGV4dFJ1biBj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiwKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0
RXhwYW5zaW9uKTsKKyAgICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVs
dEV4cGFuc2lvbik7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQoKSBjb25z
dDsKICAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChMYXlvdXRVbml0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZTc0MGQ1MmEyYjAzMmExYTJmNGU0MmZlZGNj
N2QyOTk2Y2VjYWExNS4uYzMzNmI2NGYzMDY2ZTA1MThhZDkwYzNhMTdhMDk4MmFlZTc3NjMxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTc5LDEwICs3OSwxMCBA
QAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRz
Lmg+CiAKQEAgLTMwMTksMjAgKzMwMTksMjAgQEAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBSZW5k
ZXJCb3g6OnJlbmRlckJveEZyYWdtZW50SW5mbyhSZW5kZXJGcmFnbWVudENvbnRhaW5lcioKIHN0
YXRpYyBib29sIHNob3VsZEZsaXBCZWZvcmVBZnRlck1hcmdpbnMoY29uc3QgUmVuZGVyU3R5bGUm
IGNvbnRhaW5pbmdCbG9ja1N0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSkKIHsK
ICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrU3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSAhPSBjaGlsZFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICBXcml0aW5n
TW9kZSBjaGlsZFdyaXRpbmdNb2RlID0gY2hpbGRTdHlsZS0+d3JpdGluZ01vZGUoKTsKKyAgICBQ
QUw6OldyaXRpbmdNb2RlIGNoaWxkV3JpdGluZ01vZGUgPSBjaGlsZFN0eWxlLT53cml0aW5nTW9k
ZSgpOwogICAgIGJvb2wgc2hvdWxkRmxpcCA9IGZhbHNlOwogICAgIHN3aXRjaCAoY29udGFpbmlu
Z0Jsb2NrU3R5bGUud3JpdGluZ01vZGUoKSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgotICAgICAgICBzaG91bGRGbGlwID0gKGNoaWxkV3JpdGluZ01vZGUgPT0gV3JpdGlu
Z01vZGU6OlJpZ2h0VG9MZWZ0KTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOgorICAgICAgICBzaG91bGRGbGlwID0gKGNoaWxkV3JpdGluZ01vZGUgPT0gUEFMOjpXcml0
aW5nTW9kZTo6UmlnaHRUb0xlZnQpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdyaXRpbmdN
b2RlOjpCb3R0b21Ub1RvcDoKLSAgICAgICAgc2hvdWxkRmxpcCA9IChjaGlsZFdyaXRpbmdNb2Rl
ID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpCb3R0b21Ub1RvcDoKKyAgICAgICAgc2hvdWxkRmxpcCA9IChjaGlsZFdyaXRpbmdNb2RlID09
IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgIHNob3VsZEZsaXAgPSAoY2hpbGRX
cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3ApOworICAgIGNhc2UgUEFMOjpX
cml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHNob3VsZEZsaXAgPSAoY2hpbGRXcml0
aW5nTW9kZSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgotICAgICAgICBzaG91bGRGbGlw
ID0gKGNoaWxkV3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wKTsKKyAgICBj
YXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgICAgICBzaG91bGRGbGlwID0g
KGNoaWxkV3JpdGluZ01vZGUgPT0gUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3ApOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3NjksMTQgKzM3NjksMTQgQEAgc3RhdGljIHZvaWQg
Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYg
bG9naWNhbFJpZ2gKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQg
PSBjaGlsZC0+cGFyZW50KCk7Ci0gICAgVGV4dERpcmVjdGlvbiBwYXJlbnREaXJlY3Rpb24gPSBw
YXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHBhcmVu
dERpcmVjdGlvbiA9IHBhcmVudC0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKIAogICAgIC8vIFRoaXMg
bWV0aG9kIGlzIHVzaW5nIGVuY2xvc2luZ0JveCgpIHdoaWNoIGlzIHdyb25nIGZvciBhYnNvbHV0
ZWx5CiAgICAgLy8gcG9zaXRpb25lZCBncmlkIGl0ZW1zLCBhcyB0aGV5IHJlbHkgb24gdGhlIGdy
aWQgYXJlYS4gU28gZm9yIGdyaWQgaXRlbXMgaWYKICAgICAvLyBib3RoICJsZWZ0IiBhbmQgInJp
Z2h0IiBwcm9wZXJ0aWVzIGFyZSAiYXV0byIsIHdlIGNhbiBjb25zaWRlciB0aGF0IG9uZSBvZgog
ICAgIC8vIHRoZW0gKGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uKSBpcyBzaW1wbHkgIjAiLgog
ICAgIGlmIChwYXJlbnQtPmlzUmVuZGVyR3JpZCgpICYmIHBhcmVudCA9PSBjaGlsZC0+Y29udGFp
bmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIpCisgICAgICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIpCiAgICAgICAgICAgICBsb2dpY2FsTGVmdC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpG
aXhlZCwgMCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvZ2ljYWxSaWdodC5zZXRWYWx1
ZShMZW5ndGhUeXBlOjpGaXhlZCwgMCk7CkBAIC0zNzg0LDcgKzM3ODQsNyBAQCBzdGF0aWMgdm9p
ZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3Ro
JiBsb2dpY2FsUmlnaAogICAgIH0KIAogICAgIC8vIEZvciBvcnRob2dvbmFsIGZsb3dzIHdlIGRv
bid0IGNhcmUgd2hldGhlciB0aGUgcGFyZW50IGlzIExUUiBvciBSVEwgYmVjYXVzZSBpdCBkb2Vz
IG5vdCBhZmZlY3QgdGhlIHBvc2l0aW9uIGluIG91ciBpbmxpbmUgYXhpcy4KLSAgICBpZiAocGFy
ZW50RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiB8fCBpc09ydGhvZ29uYWwoKmNoaWxk
LCAqcGFyZW50KSkgeworICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgfHwgaXNPcnRob2dvbmFsKCpjaGlsZCwgKnBhcmVudCkpIHsKICAgICAgICAgTGF5
b3V0VW5pdCBzdGF0aWNQb3NpdGlvbiA9IGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpID8g
Y2hpbGQtPmxheWVyKCktPnN0YXRpY0Jsb2NrUG9zaXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLmJv
cmRlckJlZm9yZSgpIDogY2hpbGQtPmxheWVyKCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkgLSBj
b250YWluZXJCbG9jay5ib3JkZXJMb2dpY2FsTGVmdCgpOwogICAgICAgICBmb3IgKGF1dG8qIGN1
cnJlbnQgPSBwYXJlbnQ7IGN1cnJlbnQgJiYgY3VycmVudCAhPSAmY29udGFpbmVyQmxvY2s7IGN1
cnJlbnQgPSBjdXJyZW50LT5jb250YWluZXIoKSkgewogICAgICAgICAgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KCpjdXJyZW50KSkKQEAgLTM4NzMsNyArMzg3Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1CiAgICAgLy8gVXNlIHRoZSBjb250YWluZXIgYmxvY2sncyBkaXJlY3Rpb24gZXhjZXB0
IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHN0YXRpYyBkaXN0YW5jZQogICAgIC8vIFRoaXMgY29uZm9y
bXMgd2l0aCB0aGUgcmVmZXJlbmNlIHJlc3VsdHMgZm9yIGFic3Bvcy1yZXBsYWNlZC13aWR0aC1t
YXJnaW4tMDAwLmh0bQogICAgIC8vIG9mIHRoZSBDU1MgMi4xIHRlc3Qgc3VpdGUKLSAgICBUZXh0
RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGly
ZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNv
bnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRh
bCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgY29uc3QgTGF5b3V0VW5pdCBib3Jk
ZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCk7CkBAIC00MDA2
LDcgKzQwMDYsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zm
c2V0KExheW91dFVuaXQmIGxvZ2ljYWxMZWZ0UG9zLCBjb25zdAogICAgICAgICBsb2dpY2FsTGVm
dFBvcyArPSAoY2hpbGQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250YWluZXJCbG9j
ay5ib3JkZXJMZWZ0KCkgOiBjb250YWluZXJCbG9jay5ib3JkZXJUb3AoKSk7CiB9CiAKLXZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdp
ZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IGNvbnRhaW5lckJsb2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKK3ZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdp
ZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IGNvbnRhaW5lckJsb2NrLCBQQUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVu
Z3RoIGxvZ2ljYWxMZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNh
bExlZnQsIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1dGVkVmFsdWVzKSBjb25zdApAQCAtNDA3MCw3ICs0MDcwLDcgQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBl
LCBMZW5ndGggbG8KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXNl
IHRoZSBjb250YWluaW5nIGJsb2NrJ3MgZGlyZWN0aW9uIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQg
YmxvY2sncwogICAgICAgICAgICAgICAgIC8vIHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFi
c3Bvcy1ub24tcmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC4KLSAgICAgICAgICAgICAgICBpZiAo
Y29udGFpbmVyRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgICAgICAgICAg
ICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsK
ICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTG9naWNhbExlZnRWYWx1ZSA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIG1hcmdpbkxvZ2ljYWxSaWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2U7IC8v
IHdpbGwgYmUgbmVnYXRpdmUKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA5Myw3ICs0
MDkzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNp
bmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG8KIAogICAgICAgICAgICAgLy8gVXNlIHRo
ZSBjb250YWluaW5nIGJsb2NrJ3MgZGlyZWN0aW9uIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQgYmxv
Y2sncwogICAgICAgICAgICAgLy8gcGVyIENTUyAyLjEgcmVmZXJlbmNlIHRlc3QgYWJzcG9zLW5v
bi1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLgotICAgICAgICAgICAgaWYgKCFpc09ydGhvZ29u
YWwoKnRoaXMsIGNvbnRhaW5lckJsb2NrKSAmJiBjb250YWluZXJEaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6UlRMKQorICAgICAgICAgICAgaWYgKCFpc09ydGhvZ29uYWwoKnRoaXMsIGNvbnRh
aW5lckJsb2NrKSAmJiBjb250YWluZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpS
VEwpCiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IChhdmFpbGFibGVTcGFjZSAr
IGxvZ2ljYWxMZWZ0VmFsdWUpIC0gbWFyZ2luTG9naWNhbExlZnRWYWx1ZSAtIG1hcmdpbkxvZ2lj
YWxSaWdodFZhbHVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTQyMjMsNyArNDIyMyw3
IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNh
bFRvcCwgTGVuZ3RoJiBsb2dpY2FsQm90dG9tCiAKICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIFJU
TCB0aGVuIHdlIG5lZWQgdG8gZmxpcCB0aGUgY29vcmRpbmF0ZSBieSBzZXR0aW5nIHRoZSBsb2dp
Y2FsIGJvdHRvbSBpbnN0ZWFkIG9mIHRoZSBsb2dpY2FsIHRvcC4gVGhhdCBvbmx5IG5lZWRzCiAg
ICAgLy8gdG8gYmUgZG9uZSBpbiBjYXNlIG9mIG9ydGhvZ29uYWwgd3JpdGluZyBtb2RlcywgZm9y
IGhvcml6b250YWwgb25lcyB0aGUgdGV4dCBkaXJlY3Rpb24gb2YgdGhlIHBhcmVudCBkb2VzIG5v
dCBhZmZlY3QgdGhlIGJsb2NrIHBvc2l0aW9uLgotICAgIGlmIChwYXJlbnQtPnN0eWxlKCkuZGly
ZWN0aW9uKCkgIT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIGlzT3J0aG9nb25hbCgqY2hpbGQsICpw
YXJlbnQpKQorICAgIGlmIChwYXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIgJiYgaXNPcnRob2dvbmFsKCpjaGlsZCwgKnBhcmVudCkpCiAgICAgICAg
IGxvZ2ljYWxCb3R0b20uc2V0VmFsdWUoTGVuZ3RoVHlwZTo6Rml4ZWQsIHN0YXRpY0xvZ2ljYWxU
b3ApOwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbFRvcC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpG
aXhlZCwgc3RhdGljTG9naWNhbFRvcCk7CkBAIC00NTI4LDcgKzQ1MjgsNyBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZChMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZQogCiAgICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVz
ZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRo
ZSBjb250YWluZXIgYmxvY2sncy4KLSAgICBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlv
biA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0
aW9uKCk7CiAKICAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCiAgICAgYm9vbCBpc0hvcml6b250
YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwpAQCAtNDU5NCw3ICs0NTk0LDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNh
bEV4dGVudENvbXB1dGVkVmFsdWUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFVz
ZSB0aGUgY29udGFpbmluZyBibG9jaydzIGRpcmVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcGFyZW50
IGJsb2NrJ3MKICAgICAgICAgICAgIC8vIHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFic3Bv
cy1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLgotICAgICAgICAgICAgaWYgKGNvbnRhaW5lckRp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICAgICAgICAgIGlmIChjb250YWlu
ZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsKICAgICAgICAgICAgICAg
ICBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gMDsKICAgICAgICAgICAgICAgICBtYXJnaW5Mb2dp
Y2FsUmlnaHRBbGlhcyA9IGRpZmZlcmVuY2U7IC8vIHdpbGwgYmUgbmVnYXRpdmUKICAgICAgICAg
ICAgIH0gZWxzZSB7CkBAIC00NjQyLDcgKzQ2NDIsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
ZQogICAgICAgICBsb2dpY2FsUmlnaHRWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKGxvZ2ljYWxSaWdo
dCwgY29udGFpbmVyTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IHZh
bHVlRm9yTGVuZ3RoKGxvZ2ljYWxMZWZ0LCBjb250YWluZXJMb2dpY2FsV2lkdGgpOwogICAgICAg
ICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9jayBpcyByaWdodC10by1sZWZ0LCB0aGVuIHB1c2gg
dGhlIGxlZnQgcG9zaXRpb24gYXMgZmFyIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZQotICAgICAg
ICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkgeworICAgICAg
ICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSB7CiAg
ICAgICAgICAgICBpbnQgdG90YWxMb2dpY2FsV2lkdGggPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVu
dCArIGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dpY2FsUmlnaHRWYWx1ZSArICBtYXJnaW5Mb2dpY2Fs
TGVmdEFsaWFzICsgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXM7CiAgICAgICAgICAgICBsb2dpY2Fs
TGVmdFZhbHVlID0gY29udGFpbmVyTG9naWNhbFdpZHRoIC0gKHRvdGFsTG9naWNhbFdpZHRoIC0g
bG9naWNhbExlZnRWYWx1ZSk7CiAgICAgICAgIH0KQEAgLTUxNDAsOSArNTE0MCw5IEBAIExheW91
dFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50CiAgICAgCiAgICAgLy8gV2UgYXJlIHB1dHRpbmcgb3Vyc2VsdmVz
IGludG8gb3VyIHBhcmVudCdzIGNvb3JkaW5hdGUgc3BhY2UuICBJZiB0aGVyZSBpcyBhIGZsaXBw
ZWQgYmxvY2sgbWlzbWF0Y2gKICAgICAvLyBpbiBhIHBhcnRpY3VsYXIgYXhpcywgdGhlbiB3ZSBo
YXZlIHRvIGZsaXAgdGhlIHJlY3QgYWxvbmcgdGhhdCBheGlzLgotICAgIGlmIChzdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0IHx8IHBhcmVudFN0eWxlLT53
cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCkKKyAgICBpZiAoc3R5bGUo
KS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0IHx8IHBhcmVu
dFN0eWxlLT53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQog
ICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKLSAgICBlbHNlIGlmIChz
dHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wIHx8IHBhcmVu
dFN0eWxlLT53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCkKKyAgICBl
bHNlIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9t
VG9Ub3AgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6
Qm90dG9tVG9Ub3ApCiAgICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsK
IAogICAgIHJldHVybiByZWN0OwpAQCAtNTIwMyw5ICs1MjAzLDkgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnQKICAgICAKICAgICAvLyBXZSBhcmUgcHV0dGluZyBvdXJzZWx2ZXMgaW50byBvdXIg
cGFyZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEgZmxpcHBlZCBibG9jayBt
aXNtYXRjaAogICAgIC8vIGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIHdlIGhhdmUgdG8gZmxp
cCB0aGUgcmVjdCBhbG9uZyB0aGF0IGF4aXMuCi0gICAgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUo
KSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2Rl
KCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQorICAgIGlmIChzdHlsZSgpLndyaXRpbmdN
b2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQgfHwgcGFyZW50U3R5bGUtPndy
aXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpCiAgICAgICAgIHJl
Y3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwotICAgIGVsc2UgaWYgKHN0eWxlKCkud3Jp
dGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AgfHwgcGFyZW50U3R5bGUtPndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wKQorICAgIGVsc2UgaWYgKHN0
eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCB8fCBw
YXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1Rv
cCkKICAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogCiAgICAgcmV0
dXJuIHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZTM0MjY3OGQx
YzQzNjM5ODY1NzkwODdhNWM0ZTUyMDMxZDZiMDU0NC4uN2YzMjMwMGFkZWVhN2E2NDY0NDYzOWNh
OWJiNWMyNTU4M2FhNDQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAt
NzU3LDcgKzc1Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXBhaW50TGF5ZXJSZWN0c0Zvcklt
YWdlKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgRmlsbExheWVyJiBsYXllcnMsIGJvb2wgZHJhd2lu
Z0JhY2tncm91bmQpOwogCiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQo
TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIFRleHREaXJlY3Rpb24g
Y29udGFpbmVyRGlyZWN0aW9uLAorICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhVc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrLCBQQUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGly
ZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRp
bmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBs
b2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0
LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmlu
ZGV4IDVjY2YxN2E5Mjc5ZTM1N2Y3ZGY3NTM5NDhiY2Q0ZDc3OWFjMzNiOGUuLjQzNTNkYTJmODdj
MWNkMzc4Mzc1NjAxZjZiZGU4NzkxMWFjNmQ2YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTQ4OCw3ICsxNDg4LDcgQEAg
c3RhdGljIGJvb2wgYm9yZGVyU3R5bGVJc0RvdHRlZE9yRGFzaGVkKEJvcmRlclN0eWxlIHN0eWxl
KQogCiAvLyBCb3JkZXJTdHlsZTo6T3V0c2V0IGRhcmtlbnMgdGhlIGJvdHRvbSBhbmQgcmlnaHQg
KGFuZCBtYXliZSBsaWdodGVucyB0aGUgdG9wIGFuZCBsZWZ0KQogLy8gQm9yZGVyU3R5bGU6Oklu
c2V0IGRhcmtlbnMgdGhlIHRvcCBhbmQgbGVmdCAoYW5kIG1heWJlIGxpZ2h0ZW5zIHRoZSBib3R0
b20gYW5kIHJpZ2h0KQotc3RhdGljIGlubGluZSBib29sIGJvcmRlclN0eWxlSGFzVW5tYXRjaGVk
Q29sb3JzQXRDb3JuZXIoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQm94U2lkZSBh
ZGphY2VudFNpZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVIYXNVbm1hdGNoZWRD
b2xvcnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6
Qm94U2lkZSBhZGphY2VudFNpZGUpCiB7CiAgICAgLy8gVGhlc2Ugc3R5bGVzIG1hdGNoIGF0IHRo
ZSB0b3AvbGVmdCBhbmQgYm90dG9tL3JpZ2h0LgogICAgIGlmIChzdHlsZSA9PSBCb3JkZXJTdHls
ZTo6SW5zZXQgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBzdHlsZSA9PSBCb3Jk
ZXJTdHlsZTo6UmlkZ2UgfHwgc3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCkgewpAQCAtMTUw
MSw3ICsxNTAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGJvcmRlclN0eWxlSGFzVW5tYXRjaGVk
Q29sb3JzQXRDb3JuZXIoQm9yZGVyU3R5bGUgc3R5bGUsIEJveFMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUgc2lk
ZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcykKK3N0YXRp
YyBpbmxpbmUgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6
OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRnZXMpCiB7CiAgICAg
YXV0byYgZWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwogICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IGVk
Z2VzLmF0KGFkamFjZW50U2lkZSk7CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29sb3JzTWF0Y2hBdENvcm5lcihCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRT
aWRlLCBjb25zdAogfQogCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb2xvck5lZWRzQW50aUFsaWFz
QXRDb3JuZXIoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVy
RWRnZXMmIGVkZ2VzKQorc3RhdGljIGlubGluZSBib29sIGNvbG9yTmVlZHNBbnRpQWxpYXNBdENv
cm5lcihQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3Qg
Qm9yZGVyRWRnZXMmIGVkZ2VzKQogewogICAgIGF1dG8mIGVkZ2UgPSBlZGdlcy5hdChzaWRlKTsK
ICAgICBhdXRvJiBhZGphY2VudEVkZ2UgPSBlZGdlcy5hdChhZGphY2VudFNpZGUpOwpAQCAtMTUz
NCwxMSArMTUzNCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29sb3JOZWVkc0FudGlBbGlhc0F0
Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZAogfQogCiAvLyBUaGlzIGFz
c3VtZXMgdGhhdCB3ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuCi1z
dGF0aWMgaW5saW5lIGJvb2wgd2lsbEJlT3ZlcmRyYXduKEJveFNpZGUgc2lkZSwgQm94U2lkZSBh
ZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcykKK3N0YXRpYyBpbmxpbmUgYm9v
bCB3aWxsQmVPdmVyZHJhd24oUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2Vu
dFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcykKIHsKICAgICBzd2l0Y2ggKHNpZGUpIHsK
LSAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbTogeworICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbTog
ewogICAgICAgICBhdXRvJiBlZGdlID0gZWRnZXMuYXQoc2lkZSk7CiAgICAgICAgIGF1dG8mIGFk
amFjZW50RWRnZSA9IGVkZ2VzLmF0KGFkamFjZW50U2lkZSk7CiAKQEAgLTE1NTMsMTUgKzE1NTMs
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHdpbGxCZU92ZXJkcmF3bihCb3hTaWRlIHNpZGUsIEJv
eFNpZGUgYWRqYWNlbnRTaWRlLCBjb25zdCBCb3IKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgotICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6Cisg
ICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0
OgogICAgICAgICAvLyBUaGVzZSBkcmF3IGxhc3QsIHNvIGFyZSBuZXZlciBvdmVyZHJhd24uCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKEJveFNpZGUgc2lkZSwgQm94
U2lkZSBhZGphY2VudFNpZGUsIEJvcmRlclN0eWxlIHN0eWxlLCBCb3JkZXJTdHlsZSBhZGphY2Vu
dFN0eWxlKQorc3RhdGljIGlubGluZSBib29sIGJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShQQUw6
OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5
bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlID09IEJvcmRl
clN0eWxlOjpEb3VibGUgfHwgYWRqYWNlbnRTdHlsZSA9PSBCb3JkZXJTdHlsZTo6RG91YmxlIHx8
IGFkamFjZW50U3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292ZSB8fCBhZGphY2VudFN0eWxlID09
IEJvcmRlclN0eWxlOjpSaWRnZSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTc1LDcgKzE1
NzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKEJveFNp
ZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsCiAgICAgcmV0dXJuIGJvcmRlclN0eWxlSGFz
VW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIoc3R5bGUsIHNpZGUsIGFkamFjZW50U2lkZSk7CiB9CiAK
LXN0YXRpYyBib29sIGpvaW5SZXF1aXJlc01pdHJlKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGph
Y2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgYm9vbCBhbGxvd092ZXJkcmF3KQor
c3RhdGljIGJvb2wgam9pblJlcXVpcmVzTWl0cmUoUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgYm9vbCBhbGxvd092
ZXJkcmF3KQogewogICAgIGF1dG8mIGVkZ2UgPSBlZGdlcy5hdChzaWRlKTsKICAgICBhdXRvJiBh
ZGphY2VudEVkZ2UgPSBlZGdlcy5hdChhZGphY2VudFNpZGUpOwpAQCAtMTU5NSw3ICsxNTk1LDcg
QEAgc3RhdGljIGJvb2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFk
amFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRp
YyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRS
ZWN0JmlubmVyQm9yZGVyLCBCb3hTaWRlIHNpZGUpCitzdGF0aWMgUm91bmRlZFJlY3QgY2FsY3Vs
YXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJvcmRlciwgUEFM
OjpCb3hTaWRlIHNpZGUpCiB7CiAgICAgLy8gRXhwYW5kIHRoZSBpbm5lciBib3JkZXIgYXMgbmVj
ZXNzYXJ5IHRvIG1ha2UgaXQgYSByb3VuZGVkIHJlY3QgKGkuZS4gcmFkaWkgY29udGFpbmVkIHdp
dGhpbiBlYWNoIGVkZ2UpLgogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBmYWN0
IHdlIG9ubHkgZ2V0IHJhZGlpIG5vdCBjb250YWluZWQgd2l0aGluIGVhY2ggZWRnZSBpZiBvbmUg
b2YgdGhlIHJhZGlpCkBAIC0xNjA3LDcgKzE2MDcsNyBAQCBzdGF0aWMgUm91bmRlZFJlY3QgY2Fs
Y3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJvcmRlciwg
QgogICAgIGZsb2F0IG1heFJhZGlpOwogCiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBC
b3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgb3ZlcnNo
b290ID0gbmV3UmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKyBuZXdSYWRpaS50b3BSaWdodCgpLndp
ZHRoKCkgLSBuZXdSZWN0LndpZHRoKCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIShuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAmJiBuZXdSYWRp
aS50b3BSaWdodCgpLndpZHRoKCkpKTsKQEAgLTE2MjIsNyArMTYyMiw3IEBAIHN0YXRpYyBSb3Vu
ZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRSZWN0Jmlu
bmVyQm9yZGVyLCBCCiAgICAgICAgICAgICBuZXdSZWN0LnNldEhlaWdodChtYXhSYWRpaSk7CiAg
ICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkuYm90dG9tTGVm
dCgpLndpZHRoKCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkgLSBuZXdSZWN0Lndp
ZHRoKCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IShuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSAmJiBuZXdSYWRpaS5ib3R0b21SaWdodCgp
LndpZHRoKCkpKTsKQEAgLTE2MzksNyArMTYzOSw3IEBAIHN0YXRpYyBSb3VuZGVkUmVjdCBjYWxj
dWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRSZWN0JmlubmVyQm9yZGVyLCBC
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6Cisg
ICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlp
LnRvcExlZnQoKS5oZWlnaHQoKSArIG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAtIG5l
d1JlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIShuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpKSk7CkBAIC0xNjU0LDcgKzE2NTQsNyBAQCBzdGF0aWMgUm91bmRlZFJl
Y3QgY2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJv
cmRlciwgQgogICAgICAgICAgICAgbmV3UmVjdC5zZXRXaWR0aChtYXhSYWRpaSk7CiAgICAgICAg
IGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICBjYXNlIFBBTDo6Qm94U2lk
ZTo6UmlnaHQ6CiAgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0
KCkgKyBuZXdSYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpIC0gbmV3UmVjdC5oZWlnaHQoKTsK
ICAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsKICAgICAgICAgICAgIEFTU0VSVCghKG5ld1Jh
ZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQo
KSkpOwpAQCAtMTY3Niw3ICsxNjc2LDcgQEAgc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFk
anVzdGVkSW5uZXJCb3JkZXIoY29uc3QgUm91bmRlZFJlY3QmaW5uZXJCb3JkZXIsIEIKIH0KIAog
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPbmVCb3JkZXJTaWRlKEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJv
dW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAot
ICAgIGNvbnN0IExheW91dFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRq
YWNlbnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNpZGUyLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRn
ZXMsIGNvbnN0IFBhdGgqIHBhdGgsCisgICAgY29uc3QgTGF5b3V0UmVjdCYgc2lkZVJlY3QsIFBB
TDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlMSwgUEFMOjpCb3hTaWRl
IGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgY29uc3QgUGF0aCogcGF0
aCwKICAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSwgYm9vbCBh
bnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKQogewogICAgIGF1dG8mIGVkZ2VU
b1JlbmRlciA9IGVkZ2VzLmF0KHNpZGUpOwpAQCAtMTcyMiwyMiArMTcyMiwyMiBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsCiAgICAgfQogfQogCi1zdGF0aWMgTGF5b3V0UmVjdCBjYWxjdWxhdGVT
aWRlUmVjdChjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2Vz
JiBlZGdlcywgQm94U2lkZSBzaWRlKQorc3RhdGljIExheW91dFJlY3QgY2FsY3VsYXRlU2lkZVJl
Y3QoY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRn
ZXMsIFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIExheW91dFJlY3Qgc2lkZVJlY3QgPSBvdXRl
ckJvcmRlci5yZWN0KCk7CiAgICAgZmxvYXQgd2lkdGggPSBlZGdlcy5hdChzaWRlKS53aWR0aEZv
clBhaW50aW5nKCk7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICBjYXNlIEJveFNpZGU6OlRv
cDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICBzaWRlUmVjdC5zZXRIZWln
aHQod2lkdGgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgc2lkZVJlY3Quc2hpZnRYRWRnZVRv
KHNpZGVSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgc2lk
ZVJlY3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0
OgogICAgICAgICBzaWRlUmVjdC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTE3NjAsNyArMTc2MCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
Qm9yZGVyU2lkZXMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvCiAgICAgLy8g
aXMgb25seSB0byBiZSB1c2VkIGZvciBzb2xpZCBib3JkZXJzIGFuZCB0aGUgc2hhcGUgb2YgdGhl
IGJvcmRlciBwYWludGVkIGJ5IGRyYXdCb3hTaWRlRnJvbVBhdGgKICAgICAvLyBvbmx5IGRlcGVu
ZHMgb24gc2lkZVJlY3Qgd2hlbiBwYWludGluZyBzb2xpZCBib3JkZXJzLgogCi0gICAgYXV0byBw
YWludE9uZVNpZGUgPSBbJl0oQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZTEsIEJv
eFNpZGUgYWRqYWNlbnRTaWRlMikgeworICAgIGF1dG8gcGFpbnRPbmVTaWRlID0gWyZdKFBBTDo6
Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlMSwgUEFMOjpCb3hTaWRlIGFk
amFjZW50U2lkZTIpIHsKICAgICAgICAgYXV0byYgZWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwogICAg
ICAgICBpZiAoIWVkZ2Uuc2hvdWxkUmVuZGVyKCkgfHwgIWVkZ2VTZXQuY29udGFpbnMoZWRnZUZs
YWdGb3JTaWRlKHNpZGUpKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3NzAsMjIgKzE3NzAs
MjIgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXJTaWRlcyhHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICAgICAgTGF5b3V0U2l6ZSBzZWNvbmRS
YWRpdXM7CiAKICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6
VG9wOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgc2lkZVJl
Y3Quc2V0SGVpZ2h0KGVkZ2Uud2lkdGhGb3JQYWludGluZygpICsgaW5uZXJCb3JkZXJBZGp1c3Rt
ZW50LnkoKSk7CiAgICAgICAgICAgICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCku
dG9wTGVmdCgpOwogICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gaW5uZXJCb3JkZXIucmFkaWko
KS50b3BSaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6
UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgIHNp
ZGVSZWN0LnNoaWZ0WEVkZ2VUbyhzaWRlUmVjdC5tYXhYKCkgLSBlZGdlLndpZHRoRm9yUGFpbnRp
bmcoKSAtIGlubmVyQm9yZGVyQWRqdXN0bWVudC54KCkpOwogICAgICAgICAgICAgZmlyc3RSYWRp
dXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCk7CiAgICAgICAgICAgICBzZWNv
bmRSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpC
b3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFlFZGdlVG8oc2lkZVJl
Y3QubWF4WSgpIC0gZWRnZS53aWR0aEZvclBhaW50aW5nKCkgLSBpbm5lckJvcmRlckFkanVzdG1l
bnQueSgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJCb3JkZXIucmFkaWkoKS5i
b3R0b21MZWZ0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRp
aSgpLmJvdHRvbVJpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hT
aWRlOjpMZWZ0OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAg
IHNpZGVSZWN0LnNldFdpZHRoKGVkZ2Uud2lkdGhGb3JQYWludGluZygpICsgaW5uZXJCb3JkZXJB
ZGp1c3RtZW50LngoKSk7CiAgICAgICAgICAgICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVyLnJh
ZGlpKCkuYm90dG9tTGVmdCgpOwogICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gaW5uZXJCb3Jk
ZXIucmFkaWkoKS50b3BMZWZ0KCk7CkBAIC0xNzk2LDE4ICsxNzk2LDE4IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyU2lkZXMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvCiAgICAgICAgIHBhaW50T25lQm9yZGVyU2lkZShncmFwaGljc0NvbnRleHQs
IHN0eWxlLCBvdXRlckJvcmRlciwgaW5uZXJCb3JkZXIsIHNpZGVSZWN0LCBzaWRlLCBhZGphY2Vu
dFNpZGUxLCBhZGphY2VudFNpZGUyLCBlZGdlcywgdXNlUGF0aCA/ICZyb3VuZGVkUGF0aCA6IG51
bGxwdHIsIGJsZWVkQXZvaWRhbmNlLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9n
aWNhbFJpZ2h0RWRnZSwgYW50aWFsaWFzLCBvdmVycmlkZUNvbG9yKTsKICAgICB9OwogCi0gICAg
cGFpbnRPbmVTaWRlKEJveFNpZGU6OlRvcCwgQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6UmlnaHQp
OwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpCb3R0b20sIEJveFNpZGU6OkxlZnQsIEJveFNp
ZGU6OlJpZ2h0KTsKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6TGVmdCwgQm94U2lkZTo6VG9w
LCBCb3hTaWRlOjpCb3R0b20pOwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpSaWdodCwgQm94
U2lkZTo6VG9wLCBCb3hTaWRlOjpCb3R0b20pOworICAgIHBhaW50T25lU2lkZShQQUw6OkJveFNp
ZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpMZWZ0LCBQQUw6OkJveFNpZGU6OlJpZ2h0KTsKKyAgICBw
YWludE9uZVNpZGUoUEFMOjpCb3hTaWRlOjpCb3R0b20sIFBBTDo6Qm94U2lkZTo6TGVmdCwgUEFM
OjpCb3hTaWRlOjpSaWdodCk7CisgICAgcGFpbnRPbmVTaWRlKFBBTDo6Qm94U2lkZTo6TGVmdCwg
UEFMOjpCb3hTaWRlOjpUb3AsIFBBTDo6Qm94U2lkZTo6Qm90dG9tKTsKKyAgICBwYWludE9uZVNp
ZGUoUEFMOjpCb3hTaWRlOjpSaWdodCwgUEFMOjpCb3hTaWRlOjpUb3AsIFBBTDo6Qm94U2lkZTo6
Qm90dG9tKTsKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRUcmFuc2x1Y2Vu
dEJvcmRlclNpZGVzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91
bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBJbnRQb2ludCYgaW5uZXJCb3JkZXJBZGp1c3Rt
ZW50LAogICAgIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywgQm94U2lkZVNldCBlZGdlc1RvRHJh
dywgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVM
b2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFs
aWFzKQogewogICAgIC8vIHdpbGxCZU92ZXJkcmF3biBhc3N1bWVzIHRoYXQgd2UgZHJhdyBpbiBv
cmRlcjogdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LgotICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50
IGZyb20gQm94U2lkZSBlbnVtIG9yZGVyLgotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJh
eTxCb3hTaWRlLCA0PiBwYWludE9yZGVyU2lkZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94U2lkZTo6
Qm90dG9tLCBCb3hTaWRlOjpMZWZ0LCBCb3hTaWRlOjpSaWdodCB9OworICAgIC8vIFRoaXMgaXMg
ZGlmZmVyZW50IGZyb20gUEFMOjpCb3hTaWRlIGVudW0gb3JkZXIuCisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PFBBTDo6Qm94U2lkZSwgND4gcGFpbnRPcmRlclNpZGVzID0geyBQQUw6
OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpCb3R0b20sIFBBTDo6Qm94U2lkZTo6TGVmdCwg
UEFMOjpCb3hTaWRlOjpSaWdodCB9OwogCiAgICAgd2hpbGUgKGVkZ2VzVG9EcmF3KSB7CiAgICAg
ICAgIC8vIEZpbmQgdW5kcmF3biBlZGdlcyBzaGFyaW5nIGEgY29sb3IuCkBAIC0xODk1LDEwICsx
ODk1LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjdCYKICAgICBib29sIGhhdmVBbGxEb3VibGVF
ZGdlcyA9IHRydWU7CiAgICAgaW50IG51bUVkZ2VzVmlzaWJsZSA9IDQ7CiAgICAgYm9vbCBhbGxF
ZGdlc1NoYXJlQ29sb3IgPSB0cnVlOwotICAgIHN0ZDo6b3B0aW9uYWw8Qm94U2lkZT4gZmlyc3RW
aXNpYmxlU2lkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Qm94U2lkZT4gZmlyc3RWaXNpYmxl
U2lkZTsKICAgICBCb3hTaWRlU2V0IGVkZ2VzVG9EcmF3OwogCi0gICAgZm9yIChhdXRvIHNpZGUg
OiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykg
ewogICAgICAgICBhdXRvJiBjdXJyRWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwogCiAgICAgICAgIGlm
IChjdXJyRWRnZS5zaG91bGRSZW5kZXIoKSkKQEAgLTE5NTIsMjQgKzE5NTIsMjQgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRSZWN0JgogICAgICAgICAgICAgaWYgKGhhdmVBbGxEb3VibGVFZGdlcykgewog
ICAgICAgICAgICAgICAgIExheW91dFJlY3QgaW5uZXJUaGlyZFJlY3QgPSBvdXRlckJvcmRlci5y
ZWN0KCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBvdXRlclRoaXJkUmVjdCA9IG91dGVy
Qm9yZGVyLnJlY3QoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNp
ZGVzKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVz
KSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb3V0ZXJXaWR0aDsKICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBpbm5lcldpZHRoOwogICAgICAgICAgICAgICAgICAgICBl
ZGdlcy5hdChzaWRlKS5nZXREb3VibGVCb3JkZXJTdHJpcGVXaWR0aHMob3V0ZXJXaWR0aCwgaW5u
ZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2lkZSkgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQ
QUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0
LnNoaWZ0WUVkZ2VUbyhpbm5lclRoaXJkUmVjdC55KCkgKyBpbm5lcldpZHRoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNoaWZ0WUVkZ2VUbyhvdXRlclRoaXJkUmVj
dC55KCkgKyBvdXRlcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5l
clRoaXJkUmVjdC5zZXRXaWR0aChpbm5lclRoaXJkUmVjdC53aWR0aCgpIC0gaW5uZXJXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlclRoaXJkUmVjdC5zZXRXaWR0aChvdXRlclRo
aXJkUmVjdC53aWR0aCgpIC0gb3V0ZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbm5lclRoaXJkUmVjdC5zZXRIZWlnaHQoaW5uZXJUaGlyZFJlY3QuaGVpZ2h0KCkg
LSBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNl
dEhlaWdodChvdXRlclRoaXJkUmVjdC5oZWlnaHQoKSAtIG91dGVyV2lkdGgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6
TGVmdDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbm5lclRoaXJkUmVjdC5zaGlmdFhFZGdlVG8oaW5uZXJUaGly
ZFJlY3QueCgpICsgaW5uZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlclRo
aXJkUmVjdC5zaGlmdFhFZGdlVG8ob3V0ZXJUaGlyZFJlY3QueCgpICsgb3V0ZXJXaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwMDcsNyArMjAwNyw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgTGF5b3V0UmVjdCYKICAgICAgICAgaWYgKGhhdmVBbGxTb2xpZEVkZ2VzICYmIG51bUVk
Z2VzVmlzaWJsZSAhPSA0ICYmICFvdXRlckJvcmRlci5pc1JvdW5kZWQoKSAmJiBoYXZlQWxwaGFD
b2xvcikgewogICAgICAgICAgICAgUGF0aCBwYXRoOwogCi0gICAgICAgICAgICBmb3IgKGF1dG8g
c2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IFBBTDo6
YWxsQm94U2lkZXMpIHsKICAgICAgICAgICAgICAgICBpZiAoZWRnZXMuYXQoc2lkZSkuc2hvdWxk
UmVuZGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBzaWRlUmVjdCA9IGNhbGN1bGF0
ZVNpZGVSZWN0KG91dGVyQm9yZGVyLCBlZGdlcywgc2lkZSk7CiAgICAgICAgICAgICAgICAgICAg
IHBhdGguYWRkUmVjdChzaWRlUmVjdCk7IC8vIEZJWE1FOiBOZWVkIHBpeGVsIHNuYXBwaW5nIGhl
cmUuCkBAIC0yMDQ0LDcgKzIwNDQsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJvcmRlcihjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlY3QmCiB9CiAKIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0
IFBhdGgmIGJvcmRlclBhdGgsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdlcywKLSAgICBmbG9hdCB0
aGlja25lc3MsIGZsb2F0IGRyYXdUaGlja25lc3MsIEJveFNpZGUgc2lkZSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIEJhY2tn
cm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwKKyAgICBmbG9hdCB0aGlja25lc3Ms
IGZsb2F0IGRyYXdUaGlja25lc3MsIFBBTDo6Qm94U2lkZSBzaWRlLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgQmFja2dyb3Vu
ZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLAogICAgIGJvb2wgaW5jbHVkZUxvZ2ljYWxM
ZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkKIHsKICAgICBpZiAodGhpY2tu
ZXNzIDw9IDApCkBAIC0yMTkyLDcgKzIxOTIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAog
fQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJv
cmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVk
Z2VNYXRjaGVzLCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKQorICAgIFBBTDo6Qm94U2lkZSBzaWRl
LCBib29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpCiB7CiAgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7
CiAgICAgY29uc3QgRmxvYXRSZWN0JiBvdXRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KG91dGVyQm9yZGVyLnJlY3QoKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtMjIxNSw3ICsyMjE1
LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXgKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gcXVh
ZDsKICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CiAgICAgc3dpdGNoIChzaWRl
KSB7Ci0gICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoK
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkp
OwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIo
KSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpKTsKQEAgLTIyMjgsNyArMjIyOCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNs
aXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAg
ICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBj
YXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAg
IHF1YWQudW5jaGVja2VkQXBwZW5kKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CkBA
IC0yMjQxLDcgKzIyNDEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVy
U2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICAgICAg
ZmluZEludGVyc2VjdGlvbihvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4
WE1heFlDb3JuZXIoKSwgcXVhZFsyXSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwogICAgICAgICBx
dWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7CiAgICAgICAg
IHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAgLTIy
NTQsNyArMjI1NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRl
UG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgICAgICAgICBmaW5k
SW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1h
eFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4
WUNvcm5lcigpLCBxdWFkWzJdKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6
OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVu
Y2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKQEAgLTIyODMsNyAr
MjI4Myw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdv
bihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgICAgIHF1YWRbMF0sCiAgICAg
ICAgIHF1YWRbMV0sCiAgICAgICAgIHF1YWRbMl0sCi0gICAgICAgIHNpZGUgPT0gQm94U2lkZTo6
VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tID8gRmxvYXRQb2ludChxdWFkWzNdLngoKSwg
cXVhZFsyXS55KCkpIDogRmxvYXRQb2ludChxdWFkWzJdLngoKSwgcXVhZFszXS55KCkpLAorICAg
ICAgICBzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpC
b3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkgOiBGbG9hdFBvaW50
KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSksCiAgICAgICAgIHF1YWRbM10KICAgICB9OwogICAg
IGJvb2wgd2FzQW50aWFsaWFzZWQgPSBncmFwaGljc0NvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7
CkBAIC0yMjkyLDcgKzIyOTIsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9y
ZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogCiAgICAgVmVj
dG9yPEZsb2F0UG9pbnQ+IHNlY29uZFF1YWQgPSB7CiAgICAgICAgIHF1YWRbMF0sCi0gICAgICAg
IHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tID8gRmxvYXRQ
b2ludChxdWFkWzBdLngoKSwgcXVhZFsxXS55KCkpIDogRmxvYXRQb2ludChxdWFkWzFdLngoKSwg
cXVhZFswXS55KCkpLAorICAgICAgICBzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUg
PT0gUEFMOjpCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbMF0ueCgpLCBxdWFkWzFd
LnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSksCiAgICAgICAgIHF1
YWRbMV0sCiAgICAgICAgIHF1YWRbMl0sCiAgICAgICAgIHF1YWRbM10KQEAgLTIzMDgsMTAgKzIz
MDgsMTAgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3Jv
dW5kRWRnZShjb25zdCBGbG9hdFNpemUmIGNvbnRleHQKIHsKICAgICBhdXRvIGVkZ2VzID0gYm9y
ZGVyRWRnZXMoc3R5bGUoKSwgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIAotICAg
IGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6IFBB
TDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgYXV0byYgY3VyckVkZ2UgPSBlZGdlcy5hdChzaWRl
KTsKICAgICAgICAgLy8gRklYTUU6IGZvciB2ZXJ0aWNhbCB0ZXh0Ci0gICAgICAgIGZsb2F0IGF4
aXNTY2FsZSA9IChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkJvdHRv
bSkgPyBjb250ZXh0U2NhbGUuaGVpZ2h0KCkgOiBjb250ZXh0U2NhbGUud2lkdGgoKTsKKyAgICAg
ICAgZmxvYXQgYXhpc1NjYWxlID0gKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9
PSBQQUw6OkJveFNpZGU6OkJvdHRvbSkgPyBjb250ZXh0U2NhbGUuaGVpZ2h0KCkgOiBjb250ZXh0
U2NhbGUud2lkdGgoKTsKICAgICAgICAgaWYgKCFjdXJyRWRnZS5vYnNjdXJlc0JhY2tncm91bmRF
ZGdlKGF4aXNTY2FsZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjMz
MCw3ICsyMzMwLDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNC
YWNrZ3JvdW5kKCkgY29uc3QKIAogICAgIGF1dG8gZWRnZXMgPSBib3JkZXJFZGdlcyhzdHlsZSgp
LCBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCi0gICAgZm9yIChhdXRvIHNpZGUg
OiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykg
ewogICAgICAgICBpZiAoIWVkZ2VzLmF0KHNpZGUpLm9ic2N1cmVzQmFja2dyb3VuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5kZXggMTVmZGY5MzRkZWUyMzZmYzM5M2JhMTkw
MDIwNzYzZjJkNWZkNWI0Mi4uMGQxM2VkNDUyOThjNzllNzIyNjhmZGJiZjc4ZTczMGRmYjE5OGRl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKQEAgLTMxNSwxMCArMzE1LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBmaXhlZEJhY2tncm91
bmRQYWludHNJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIHZvaWQgY2xpcEJvcmRl
clNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJv
cmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJveFNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRF
ZGdlTWF0Y2hlcyk7CisgICAgICAgIFBBTDo6Qm94U2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVz
LCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKTsKIAogICAgIHZvaWQgcGFpbnRPbmVCb3JkZXJTaWRl
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUm91bmRlZFJlY3Qm
IG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsCi0gICAgICAgIGNv
bnN0IExheW91dFJlY3QmIHNpZGVSZWN0LCBCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZTEs
IEJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9yZGVyRWRnZXMmLAorICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBzaWRlUmVjdCwgUEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNl
bnRTaWRlMSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRlckVkZ2VzJiwK
ICAgICAgICAgY29uc3QgUGF0aCosIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgYm9vbCBpbmNs
dWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlLCBib29sIGFu
dGlhbGlhcywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IgPSBudWxscHRyKTsKICAgICB2b2lk
IHBhaW50VHJhbnNsdWNlbnRCb3JkZXJTaWRlcyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91bmRlZFJl
Y3QmIGlubmVyQm9yZGVyLCBjb25zdCBJbnRQb2ludCYgaW5uZXJCb3JkZXJBZGp1c3RtZW50LAog
ICAgICAgICBjb25zdCBCb3JkZXJFZGdlcyYsIEJveFNpZGVTZXQsIEJhY2tncm91bmRCbGVlZEF2
b2lkYW5jZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2Fs
UmlnaHRFZGdlLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKTsKQEAgLTMyNiw3ICszMjYsNyBAQCBw
cml2YXRlOgogICAgICAgICBjb25zdCBJbnRQb2ludCYgaW5uZXJCb3JkZXJBZGp1c3RtZW50LCBj
b25zdCBCb3JkZXJFZGdlcyYsIEJveFNpZGVTZXQsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwK
ICAgICAgICAgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2Fs
UmlnaHRFZGdlLCBib29sIGFudGlhbGlhcyA9IGZhbHNlLCBjb25zdCBDb2xvciogb3ZlcnJpZGVD
b2xvciA9IG51bGxwdHIpOwogICAgIHZvaWQgZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUGF0aCYsIGNvbnN0IEJvcmRlckVkZ2Vz
JiwKLSAgICAgICAgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRl
LCBjb25zdCBSZW5kZXJTdHlsZSYsCisgICAgICAgIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJh
d1RoaWNrbmVzcywgUEFMOjpCb3hTaWRlLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIENv
bG9yLCBCb3JkZXJTdHlsZSwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVM
b2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwogICAgIHZvaWQg
cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3ImLCBjb25zdCBMYXlvdXRSZWN0
Jik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5j
cHAKaW5kZXggNmVjYzBkZTM5NzJkMjc5MDYzZjNjNWU3MzdhNzU4ODEzZjc0M2I0MC4uM2NhNTlj
YmM5NTgzY2NmYjc2MTc5YWJiMTVkNWIyNDQ1MzQwZWE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9p
ZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHRJZk5lZWRlZCgpCiAKICAgICBGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvciA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3Io
KTsKIAotICAgIGRlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCk7IC8vIFdlIGFyZSBnb2luZyB0byBkcmF3IGNvbWJpbmVkIHRleHQgaG9yaXpvbnRh
bGx5LgorICAgIGRlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKFBBTDo6Rm9udE9yaWVudGF0aW9u
OjpIb3Jpem9udGFsKTsgLy8gV2UgYXJlIGdvaW5nIHRvIGRyYXcgY29tYmluZWQgdGV4dCBob3Jp
em9udGFsbHkuCiAKICAgICBGb250Q2FzY2FkZSBob3Jpem9udGFsRm9udChGb250Q2FzY2FkZURl
c2NyaXB0aW9uIHsgZGVzY3JpcHRpb24gfSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLmxldHRlclNw
YWNpbmcoKSwgc3R5bGUoKS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCkpOwogICAgIGhvcml6
b250YWxGb250LnVwZGF0ZShmb250U2VsZWN0b3IpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQg
UmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0SWZOZWVkZWQoKQogICAgICAgICBzaG91bGRV
cGRhdGVGb250ID0gbV9jb21iaW5lRm9udFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92
ZShkZXNjcmlwdGlvbikpOyAvLyBOZWVkIHRvIGNoYW5nZSBmb250IG9yaWVudGF0aW9uIHRvIGhv
cml6b250YWwuCiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE5lZWQgdG8gdHJ5IGNvbXByZXNzZWQg
Z2x5cGhzLgotICAgICAgICBzdGF0aWMgY29uc3QgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnRzW10gPSB7IEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aCwgRm9udFdpZHRoVmFyaWFudDo6
VGhpcmRXaWR0aCwgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoIH07CisgICAgICAgIHN0
YXRpYyBjb25zdCBQQUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50c1tdID0geyBQQUw6
OkZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aCwgUEFMOjpGb250V2lkdGhWYXJpYW50OjpUaGly
ZFdpZHRoLCBQQUw6OkZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aCB9OwogICAgICAgICBm
b3IgKGF1dG8gd2lkdGhWYXJpYW50IDogd2lkdGhWYXJpYW50cykgewogICAgICAgICAgICAgZGVz
Y3JpcHRpb24uc2V0V2lkdGhWYXJpYW50KHdpZHRoVmFyaWFudCk7IC8vIFdoZW4gbW9kaWZ5aW5n
IHRoaXMsIG1ha2Ugc3VyZSB0byBrZWVwIGl0IGluIHN5bmMgd2l0aCBGb250UGxhdGZvcm1EYXRh
Ojppc0ZvclRleHRDb21iaW5lKCkhCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKaW5kZXggN2UxOGZmMGE2ZTVm
ZWE0MmQ2MzZhNDhlMTEwNzJjNjM2MzI3NGI4Yi4uZWEzNDE4ODY0N2UzOWRjY2YyYjgwMWNkM2Fk
YWM1ODcxMGRkZWU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKQEAgLTEwNDMsNyArMTA0Myw3IEBAIHZv
aWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcChGbGV4Qm94SXRl
cmF0b3ImIGl0ZXJhdG9yLCBib29sCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGRvbid0IHN1cHBvcnQgUlRMLgotICAgICAgICBp
ZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSAhPSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlm
IChzdHlsZSgpLmRpcmVjdGlvbigpICE9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gR2V0IHRoZSBsYXN0IGxpbmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAppbmRleCAxZTQz
MmNkNjE2MzA4MTkzMTU5MmVjYmE1YWFjMTU2OTk2ZmMzNzEyLi5mZjQwMDQwODdhMzMwY2Y5NGJh
MzhlY2NjM2I0MjU4NTU4OTc0OGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCkBAIC03NiwxOSArNzYsMTkgQEAgc3RhdGljIFBhdGgg
Y3JlYXRlUmlnaHRBcnJvd1BhdGgoKQogUmVuZGVyRGV0YWlsc01hcmtlcjo6T3JpZW50YXRpb24g
UmVuZGVyRGV0YWlsc01hcmtlcjo6b3JpZW50YXRpb24oKSBjb25zdAogewogICAgIHN3aXRjaCAo
c3R5bGUoKS53cml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0
b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKICAgICAgICAgaWYg
KHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGlz
T3BlbigpID8gRG93biA6IFJpZ2h0OwogICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBEb3duIDog
TGVmdDsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBMZWZ0IDogRG93
bjsKICAgICAgICAgcmV0dXJuIGlzT3BlbigpID8gTGVmdCA6IFVwOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBpc09wZW4oKSA/IFJpZ2h0IDogRG93bjsKICAgICAgICAgcmV0dXJuIGlz
T3BlbigpID8gUmlnaHQgOiBVcDsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoK
KyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgogICAgICAgICBpZiAoc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPcGVu
KCkgPyBVcCA6IFJpZ2h0OwogICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBVcCA6IExlZnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNTQ2M2RmNDQz
N2E4MTlmNTBkMzE0MjFmYTk5OTJjN2UzOWZhMGViMy4uOTkwZDg4YzJjMTUwNjk1NDE4YTE5MmU1
OGQ0NDk5ODFlZGUwYWIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcApAQCAtODIzLDcgKzgyMyw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6aW52YWxpZGF0
ZUNhY2hlZEZpcnN0TGluZVN0eWxlKCkKIAogdm9pZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkK
IHsKLSAgICBBU1NFUlQoc2V0dGluZ3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygp
IHx8IG5ld1N0eWxlLmZvbnREZXNjcmlwdGlvbigpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKCkgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKKyAgICBBU1NFUlQoc2V0dGlu
Z3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpIHx8IG5ld1N0eWxlLmZvbnREZXNj
cmlwdGlvbigpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPT0gUEFMOjpBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250czo6Tm8pOwogCiAgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFs
aXplZFN0eWxlKCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlKSB7CkBA
IC0xNzQ2LDcgKzE3NDYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckVsZW1lbnQ6OmFic29sdXRlQW5j
aG9yUmVjdFdpdGhTY3JvbGxNYXJnaW4oYm9vbCogaW5zaWRlRml4ZWQpCiAgICAgcmV0dXJuIGFi
c29sdXRlQW5jaG9yUmVjdChpbnNpZGVGaXhlZCk7CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6
ZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxl
IGJvcmRlclN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIs
IGJvb2wgYW50aWFsaWFzKSBjb25zdAordm9pZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZvckJv
eFNpZGUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJT
dHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFu
dGlhbGlhcykgY29uc3QKIHsKICAgICBhdXRvIGRyYXdCb3JkZXJSZWN0ID0gWyZncmFwaGljc0Nv
bnRleHRdIChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgewpAQCAtMTc1NSw3ICsxNzU1LDcg
QEAgdm9pZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdS
ZWN0KHJlY3QpOwogICAgIH07CiAKLSAgICBhdXRvIGRyYXdMaW5lRm9yID0gW3RoaXMsICZncmFw
aGljc0NvbnRleHQsIGNvbG9yLCBhbnRpYWxpYXNdIChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEJv
eFNpZGUgc2lkZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRq
YWNlbnQpCisgICAgYXV0byBkcmF3TGluZUZvciA9IFt0aGlzLCAmZ3JhcGhpY3NDb250ZXh0LCBj
b2xvciwgYW50aWFsaWFzXSAoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBQQUw6OkJveFNpZGUgc2lk
ZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRqYWNlbnQpCiAg
ICAgewogICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNzY4LDcgKzE3NjgsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lk
ZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgIGZsb2F0IHky
ID0gcmVjdC5tYXhZKCk7CiAgICAgZmxvYXQgdGhpY2tuZXNzOwogICAgIGZsb2F0IGxlbmd0aDsK
LSAgICBpZiAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20p
IHsKKyAgICBpZiAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94
U2lkZTo6Qm90dG9tKSB7CiAgICAgICAgIHRoaWNrbmVzcyA9IHkyIC0geTE7CiAgICAgICAgIGxl
bmd0aCA9IHgyIC0geDE7CiAgICAgfSBlbHNlIHsKQEAgLTE4MTQsMTMgKzE4MTQsMTMgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEYKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91
bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKIAogICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6
Qm90dG9tOgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKKyAgICAgICAgICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJl
Y3Qoc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxLCB5MSwgbGVuZ3RoLCB0aGly
ZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAgICAgICAgICAgICBkcmF3
Qm9yZGVyUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEsIHkyIC0gdGhp
cmRPZlRoaWNrbmVzcywgbGVuZ3RoLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0
b3IpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6
TGVmdDoKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6TGVmdDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdo
dDoKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KExheW91dFJlY3QoeDEsIHkxLCB0aGlyZE9mVGhpY2tuZXNzLCBsZW5ndGgpLCBkZXZpY2VTY2Fs
ZUZhY3RvcikpOwogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMoTGF5b3V0UmVjdCh4MiAtIHRoaXJkT2ZUaGlja25lc3MsIHkxLCB0aGlyZE9mVGhp
Y2tuZXNzLCBsZW5ndGgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTg0MiwyOCArMTg0MiwyOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5l
Rm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogCiAg
ICAgICAgICAgICBGbG9hdFJlY3QgcGFpbnRCb3JkZXJSZWN0OwogICAgICAgICAgICAgc3dpdGNo
IChzaWRlKSB7Ci0gICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAgIGNh
c2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQxLCB5MSwg
KHgyIC0gbWl0cmVPZmZzZXQzKSAtICh4MSArIG1pdHJlT2Zmc2V0MSksIHRoaXJkT2ZUaGlja25l
c3MpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFp
bnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2Vu
dDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIAogICAgICAgICAgICAgICAgIHBhaW50
Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJl
T2Zmc2V0MiwgeTIgLSB0aGlyZE9mVGhpY2tuZXNzLCAoeDIgLSBtaXRyZU9mZnNldDQpIC0gKHgx
ICsgbWl0cmVPZmZzZXQyKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsK
ICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRl
clN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdU
aGlyZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb3hTaWRl
OjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAg
ICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0
KHgxLCB5MSArIG1pdHJlT2Zmc2V0MSwgdGhpcmRPZlRoaWNrbmVzcywgKHkyIC0gbWl0cmVPZmZz
ZXQzKSAtICh5MSArIG1pdHJlT2Zmc2V0MSkpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6
U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsK
IAogICAgICAgICAgICAgICAgIHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoTGF5b3V0UmVjdCh4MiAtIHRoaXJkT2ZUaGlja25lc3MsIHkxICsgbWl0cmVPZmZzZXQyLCB0
aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBtaXRyZU9mZnNldDQpIC0gKHkxICsgbWl0cmVPZmZzZXQy
KSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWlu
dEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50
MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgICAgICBjYXNlIFBBTDo6
Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICAgICAgICAgIHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJlT2Zmc2V0MiwgeTEsICh4MiAt
IG1pdHJlT2Zmc2V0NCkgLSAoeDEgKyBtaXRyZU9mZnNldDIpLCB0aGlyZE9mVGhpY2tuZXNzKSwg
ZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9y
ZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmln
VGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAKICAgICAgICAgICAgICAgICBwYWludEJvcmRl
clJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNl
dDEsIHkyIC0gdGhpcmRPZlRoaWNrbmVzcywgKHgyIC0gbWl0cmVPZmZzZXQzKSAtICh4MSArIG1p
dHJlT2Zmc2V0MSksIHRoaXJkT2ZUaGlja25lc3MpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAg
ICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHls
ZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6Umln
aHQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICAg
ICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgx
LCB5MSArIG1pdHJlT2Zmc2V0MiwgdGhpcmRPZlRoaWNrbmVzcywgKHkyIC0gbWl0cmVPZmZzZXQ0
KSAtICh5MSArIG1pdHJlT2Zmc2V0MikpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAg
ICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29s
aWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIApA
QCAtMTg5OSwxNiArMTg5OSwxNiBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94
U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICBm
bG9hdCBvZmZzZXQzID0gMDsKICAgICAgICAgZmxvYXQgb2Zmc2V0NCA9IDA7CiAKLSAgICAgICAg
aWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMSA8IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gfHwgc2lkZSA9
PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSkKKyAgICAgICAgaWYgKCgo
c2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6TGVmdCkg
JiYgYWRqYWNlbnRXaWR0aDEgPCAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpCb3R0b20g
fHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQog
ICAgICAgICAgICAgb2Zmc2V0MSA9IGZsb29yVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMSAv
IDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6
OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkgfHwg
KChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApKQorICAgICAgICBpZiAoKChzaWRlID09IFBBTDo6Qm94U2lkZTo6
VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMiA8IDAp
IHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IFBBTDo6Qm94U2lk
ZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyID4gMCkpCiAgICAgICAgICAgICBvZmZzZXQyID0g
Y2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7
CiAKLSAgICAgICAgaWYgKCgoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRl
OjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApIHx8ICgoc2lkZSA9PSBCb3hTaWRlOjpCb3R0
b20gfHwgc2lkZSA9PSBCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDEgPCAwKSkKKyAg
ICAgICAgaWYgKCgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94
U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDEgPiAwKSB8fCAoKHNpZGUgPT0gUEFMOjpCb3hT
aWRlOjpCb3R0b20gfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdp
ZHRoMSA8IDApKQogICAgICAgICAgICAgb2Zmc2V0MyA9IGZsb29yVG9EZXZpY2VQaXhlbChmYWJz
KGFkamFjZW50V2lkdGgxKSAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAo
KChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFj
ZW50V2lkdGgyID4gMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJv
eFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMiA8IDApKQorICAgICAgICBpZiAoKChzaWRl
ID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBh
ZGphY2VudFdpZHRoMiA+IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBz
aWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCiAgICAg
ICAgICAgICBvZmZzZXQ0ID0gY2VpbFRvRGV2aWNlUGl4ZWwoYWRqYWNlbnRXaWR0aDIgLyAyLCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICAgICAgZmxvYXQgYWRqdXN0ZWRYID0gY2VpbFRvRGV2
aWNlUGl4ZWwoKHgxICsgeDIpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwpAQCAtMTkyMCwxOSAr
MTkyMCwxOSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICB5MiA9IHJvdW5kVG9E
ZXZpY2VQaXhlbCh5MiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgICAgIHN3aXRjaCAoc2lk
ZSkgewotICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNp
ZGU6OlRvcDoKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgx
ICsgb2Zmc2V0MSwgeTEpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0MiwgYWRqdXN0ZWRZKSksIHNp
ZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFsZiwgYWRqYWNlbnQyQmlnSGFsZikpOwog
ICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoeDEgKyBvZmZzZXQz
LCBhZGp1c3RlZFkpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0NCwgeTIpKSwgc2lkZSwgczIsIEZs
b2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFjZW50MlNtYWxsSGFsZikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAgY2FzZSBQ
QUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxv
YXRQb2ludCh4MSwgeTEgKyBvZmZzZXQxKSwgRmxvYXRQb2ludChhZGp1c3RlZFgsIHkyIC0gb2Zm
c2V0MikpLCBzaWRlLCBzMSwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJp
Z0hhbGYpKTsKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KGFk
anVzdGVkWCwgeTEgKyBvZmZzZXQzKSwgRmxvYXRQb2ludCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNp
ZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYp
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAg
ICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgIGRyYXdMaW5lRm9y
KEZsb2F0UmVjdChGbG9hdFBvaW50KHgxICsgb2Zmc2V0MSwgeTEpLCBGbG9hdFBvaW50KHgyIC0g
b2Zmc2V0MiwgYWRqdXN0ZWRZKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFs
ZiwgYWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoeDEgKyBvZmZzZXQzLCBhZGp1c3RlZFkpLCBGbG9hdFBvaW50KHgyIC0gb2Zm
c2V0NCwgeTIpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFj
ZW50MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lk
ZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAg
IGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgxLCB5MSArIG9mZnNldDEpLCBGbG9h
dFBvaW50KGFkanVzdGVkWCwgeTIgLSBvZmZzZXQyKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRq
YWNlbnQxQmlnSGFsZiwgYWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVG
b3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoYWRqdXN0ZWRYLCB5MSArIG9mZnNldDMpLCBGbG9hdFBv
aW50KHgyLCB5MiAtIG9mZnNldDQpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFs
bEhhbGYsIGFkamFjZW50MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTY3
LDI1ICsxOTY3LDI1IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVGb3JCb3hTaWRlKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGCiAgICAgICAgIFZlY3RvcjxG
bG9hdFBvaW50PiBxdWFkOwogICAgICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7
CiAgICAgICAgIHN3aXRjaCAoc2lkZSkgewotICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAg
ICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7
CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+
KCBhZGphY2VudFdpZHRoMSwgMCksIHkyIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRB
cHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsK
ICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4o
LWFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206
CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+
KCBhZGphY2VudFdpZHRoMSwgMCksIHkxIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRB
cHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9KTsK
ICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4o
LWFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkxIH0pOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAg
Y2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVu
ZCh7IHgxLCB5MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApIH0pOwogICAg
ICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTIgLSBzdGQ6Om1heDxmbG9hdD4o
LWFkamFjZW50V2lkdGgyLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDIsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7CiAgICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MSArIHN0ZDo6bWF4PGZsb2F0Pigg
YWRqYWNlbnRXaWR0aDEsIDApIH0pOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Qm94U2lkZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBh
ZGphY2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7
IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwogICAgICAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oLWFk
amFjZW50V2lkdGgyLCAwKSB9KTsKQEAgLTIxNDIsMTAgKzIxNDIsMTAgQEAgdm9pZCBSZW5kZXJF
bGVtZW50OjpwYWludE91dGxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJl
Y3QmIHBhaW50UmUKICAgICBmbG9hdCBib3R0b21PdXRlciA9IG91dGVyLm1heFkoKTsKICAgICBm
bG9hdCBib3R0b21Jbm5lciA9IHN0ZDo6bWluKGlubmVyLm1heFkoKSwgYm90dG9tT3V0ZXIpOwog
Ci0gICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQobGVmdE91dGVyLCB0b3BPdXRlciksIEZsb2F0UG9pbnQobGVmdElubmVyLCBib3R0b21P
dXRlcikpLCBCb3hTaWRlOjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGlu
ZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwotICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0Nv
bnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KGxlZnRPdXRlciwgdG9wT3V0ZXIpLCBGbG9hdFBv
aW50KHJpZ2h0T3V0ZXIsIHRvcElubmVyKSksIEJveFNpZGU6OlRvcCwgb3V0bGluZUNvbG9yLCBv
dXRsaW5lU3R5bGUsIG91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoKTsKLSAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludChyaWdodElubmVy
LCB0b3BPdXRlciksIEZsb2F0UG9pbnQocmlnaHRPdXRlciwgYm90dG9tT3V0ZXIpKSwgQm94U2lk
ZTo6UmlnaHQsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxp
bmVXaWR0aCk7Ci0gICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQobGVmdE91dGVyLCBib3R0b21Jbm5lciksIEZsb2F0UG9pbnQocmlnaHRP
dXRlciwgYm90dG9tT3V0ZXIpKSwgQm94U2lkZTo6Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG91dGxp
bmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOworICAgIGRyYXdMaW5lRm9yQm94
U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KGxlZnRPdXRlciwgdG9w
T3V0ZXIpLCBGbG9hdFBvaW50KGxlZnRJbm5lciwgYm90dG9tT3V0ZXIpKSwgUEFMOjpCb3hTaWRl
OjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5l
V2lkdGgpOworICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVj
dChGbG9hdFBvaW50KGxlZnRPdXRlciwgdG9wT3V0ZXIpLCBGbG9hdFBvaW50KHJpZ2h0T3V0ZXIs
IHRvcElubmVyKSksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHls
ZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOworICAgIGRyYXdMaW5lRm9yQm94U2lkZShn
cmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KHJpZ2h0SW5uZXIsIHRvcE91dGVy
KSwgRmxvYXRQb2ludChyaWdodE91dGVyLCBib3R0b21PdXRlcikpLCBQQUw6OkJveFNpZGU6OlJp
Z2h0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lk
dGgpOworICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChG
bG9hdFBvaW50KGxlZnRPdXRlciwgYm90dG9tSW5uZXIpLCBGbG9hdFBvaW50KHJpZ2h0T3V0ZXIs
IGJvdHRvbU91dGVyKSksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG91dGxp
bmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwogCiAgICAgaWYgKHVzZVRyYW5z
cGFyZW5jeUxheWVyKQogICAgICAgICBncmFwaGljc0NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IGI4ZWRh
MjRjMjAxZjFlZjYzNWNlZWNiYmUyMDJiYmMyZjc4MzkwMWQuLjNmZGExMzk0MjI2NDAzZTI4YmM5
NDFhODBkMzdjZTVjOGVhOWVkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaApAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0NvdW50ZXJO
b2RlTWFwKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb3VudGVyTm9kZU1hcDsgfQogICAgIHZvaWQg
c2V0SGFzQ291bnRlck5vZGVNYXAoYm9vbCBmKSB7IG1faGFzQ291bnRlck5vZGVNYXAgPSBmOyB9
CiAKLSAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmLCBCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lk
dGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSkgY29uc3Q7
CisgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiwgUEFMOjpCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50
V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSkgY29u
c3Q7CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAgIHZvaWQgYWRqdXN0Q29tcHV0
ZWRGb250U2l6ZXNPbkJsb2NrcyhmbG9hdCBzaXplLCBmbG9hdCB2aXNpYmxlV2lkdGgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKaW5kZXggODc4NWYyMjk5YzgwZDM5NDZlOGZmZDIxNjYyZDAyOTIxOTQ2MzFmNy4uMjkyMmUx
OTNkNjcyODAzYjY1YmI1YTkwNDc4YTk3MzY5M2FiZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNw
bGF5ZWRGaWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKICAgICAgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW4oZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIEFsbG93Umln
aHRFeHBhbnNpb24sIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUp
OworICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGRpc3BsYXllZEZp
bGVuYW1lLCBzdHlsZSgpLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIFJlc3BlY3REaXJlY3Rp
b24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICAgICAgaW50IGljb25IZWlnaHQgPSBub2RlSGVpZ2h0KHVwbG9hZEJ1dHRvbigpKTsK
QEAgLTIwNSwxMCArMjA1LDEwIEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljCiAgICAgY29uc3Qg
U3RyaW5nIGNoYXJhY3RlckFzU3RyaW5nID0gU3RyaW5nKCZjaGFyYWN0ZXIsIDEpOwogICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMgY29uc3RfY2FzdCBieSBtYWtpbmcgY29uc3Ry
dWN0VGV4dFJ1biB0YWtlIGEgY29uc3QgUmVuZGVyT2JqZWN0Ki4KLSAgICBmbG9hdCBtaW5EZWZh
dWx0TGFiZWxXaWR0aCA9IGRlZmF1bHRXaWR0aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1
Y3RUZXh0UnVuKGNoYXJhY3RlckFzU3RyaW5nLCBzdHlsZSgpLCBBbGxvd1JpZ2h0RXhwYW5zaW9u
KSk7CisgICAgZmxvYXQgbWluRGVmYXVsdExhYmVsV2lkdGggPSBkZWZhdWx0V2lkdGhOdW1DaGFy
cyAqIGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihjaGFyYWN0ZXJBc1N0cmluZywgc3R5bGUo
KSwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uKSk7CiAKICAgICBjb25zdCBTdHJpbmcgbGFiZWwg
PSB0aGVtZSgpLmZpbGVMaXN0RGVmYXVsdExhYmVsKGlucHV0RWxlbWVudCgpLm11bHRpcGxlKCkp
OwotICAgIGZsb2F0IGRlZmF1bHRMYWJlbFdpZHRoID0gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0
UnVuKGxhYmVsLCBzdHlsZSgpLCBBbGxvd1JpZ2h0RXhwYW5zaW9uKSk7CisgICAgZmxvYXQgZGVm
YXVsdExhYmVsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4obGFiZWwsIHN0eWxl
KCksIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbikpOwogICAgIGlmIChIVE1MSW5wdXRFbGVtZW50
KiBidXR0b24gPSB1cGxvYWRCdXR0b24oKSkKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYnV0
dG9uUmVuZGVyZXIgPSBidXR0b24tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBkZWZhdWx0TGFi
ZWxXaWR0aCArPSBidXR0b25SZW5kZXJlci0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBh
ZnRlckJ1dHRvblNwYWNpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmNwcAppbmRleCA2MWYyMTM1NmEyZWM2NDg3MjMxNjAzNmU2OTgwNWVmYTA3NTYx
M2MxLi5jNzFkZTYzMjM5MDc5ZjA1YzI4NTU3ZDA4ODU1ZTBhM2E3OGE5NmMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTQyLDggKzQy
LDggQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01v
ZGUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUu
aD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CkBAIC00OTAsNyArNDkwLDcg
QEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6aXNIb3Jpem9udGFsRmxvdygpIGNvbnN0CiBib29s
IFJlbmRlckZsZXhpYmxlQm94Ojppc0xlZnRUb1JpZ2h0RmxvdygpIGNvbnN0CiB7CiAgICAgaWYg
KGlzQ29sdW1uRmxvdygpKQotICAgICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5nTW9kZSgpID09
IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSB8fCBzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0OworICAgICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5nTW9k
ZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8IHN0eWxlKCkud3JpdGluZ01v
ZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDsKICAgICByZXR1cm4gc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgXiAoc3R5bGUoKS5mbGV4RGlyZWN0aW9uKCkgPT0g
RmxleERpcmVjdGlvbjo6Um93UmV2ZXJzZSk7CiB9CiAKQEAgLTY3NywyMiArNjc3LDIyIEBAIHN0
ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVNYWluQXhp
c0V4dGVudEZvckNoaWxkKFJlbmRlCiAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVMb2dpY2FsV2lk
dGhJbkZyYWdtZW50VXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwg
KnRoaXMsIGZyYWdtZW50KSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsK
IH0KIAotV3JpdGluZ01vZGUgUmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01v
ZGUoKSBjb25zdAorUEFMOjpXcml0aW5nTW9kZSBSZW5kZXJGbGV4aWJsZUJveDo6dHJhbnNmb3Jt
ZWRXcml0aW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgV3JpdGluZ01vZGUgbW9kZSA9IHN0eWxlKCku
d3JpdGluZ01vZGUoKTsKKyAgICBQQUw6OldyaXRpbmdNb2RlIG1vZGUgPSBzdHlsZSgpLndyaXRp
bmdNb2RlKCk7CiAgICAgaWYgKCFpc0NvbHVtbkZsb3coKSkKICAgICAgICAgcmV0dXJuIG1vZGU7
CiAgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9C
b3R0b206Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6Ci0gICAgICAgIHJldHVy
biBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFdyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodCA6IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpM
ZWZ0VG9SaWdodDoKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAg
cmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gV3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tIDogV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOworICAgIGNhc2UgUEFMOjpXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcDoKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
UEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgOiBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRv
TGVmdDsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2Ug
UEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHJldHVybiBzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIDog
UEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207CisgICAgcmV0dXJu
IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZs
ZXhpYmxlQm94OjpmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0CkBAIC03MTIsMTMgKzcxMiwx
MyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVCb3JkZXJFbmQoKSBj
b25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9yZGVyQmVmb3Jl
KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSkgewotICAg
IGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVybiBib3JkZXJUb3AoKTsKLSAgICBjYXNlIFdy
aXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRv
bVRvVG9wOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5n
TW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdo
dDoKICAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpS
aWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAg
ICAgICByZXR1cm4gYm9yZGVyUmlnaHQoKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC03MjgsMTMgKzcyOCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpm
bG93QXdhcmVCb3JkZXJCZWZvcmUoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJv
eDo6Zmxvd0F3YXJlQm9yZGVyQWZ0ZXIoKSBjb25zdAogewogICAgIHN3aXRjaCAodHJhbnNmb3Jt
ZWRXcml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206Cisg
ICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKICAgICAgICAgcmV0dXJuIGJv
cmRlckJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNh
c2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAgICAgICAgIHJldHVybiBib3JkZXJU
b3AoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHQoKTsK
LSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGlu
Z01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICByZXR1cm4gYm9yZGVyTGVmdCgpOwogICAgIH0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc1OCwxMyArNzU4LDEzIEBAIExheW91dFVu
aXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZVBhZGRpbmdFbmQoKSBjb25zdAogTGF5b3V0
VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlUGFkZGluZ0JlZm9yZSgpIGNvbnN0CiB7
CiAgICAgc3dpdGNoICh0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFdyaXRp
bmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOgogICAgICAgICByZXR1cm4gcGFkZGluZ1RvcCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6
OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAg
ICAgICAgIHJldHVybiBwYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVm
dFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKICAgICAg
ICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAgICAgICAgcmV0
dXJuIHBhZGRpbmdSaWdodCgpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTc3NCwxMyArNzc0LDEzIEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2Fy
ZVBhZGRpbmdCZWZvcmUoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxv
d0F3YXJlUGFkZGluZ0FmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3Jp
dGluZ01vZGUoKSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNh
c2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVybiBwYWRkaW5n
Qm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQ
QUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIHBhZGRpbmdUb3Ao
KTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6V3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gcGFkZGluZ1JpZ2h0KCk7Ci0g
ICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdDoKICAgICAgICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCk7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODA0LDEzICs4MDQsMTMgQEAgTGF5b3V0VW5p
dCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luRW5kRm9yQ2hpbGQoY29uc3QgUmVu
ZGVyQm94JiBjaGlsZCkKIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZU1h
cmdpbkJlZm9yZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoICh0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgog
ICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luVG9wKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAg
ICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6
OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CiAg
ICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5MZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAg
ICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblJpZ2h0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aAppbmRleCA4NThhYjk4ZjkyMTQxNmNjNGYxZmI0ZDBiMjk4MzBjZDY1M2QyNmE5Li4yZDg5ODA2
MjkyZjk5MzY1YmZlMWYwYWQyZGIxOTJmNmNmYTI0MTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaApAQCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbEhl
aWdodCk7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlTWFpbkF4aXNFeHRl
bnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBTaXplVHlwZSwgY29uc3QgTGVuZ3RoJiBzaXpl
KTsKLSAgICBXcml0aW5nTW9kZSB0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7CisgICAg
UEFMOjpXcml0aW5nTW9kZSB0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgZmxv
d0F3YXJlQm9yZGVyRW5kKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJC
ZWZvcmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFnbWVudGVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
Z21lbnRlZEZsb3cuY3BwCmluZGV4IDI2NWI4OTRmMzNmMmExM2E0MmNkZDg1MDI4OWM2ODgwY2Y5
NGFlOWMuLmRjODE4NTk3OTcyMjBhMzMxMDRjOTI3MGJkZGUzYzQ2ZTk1MjA1NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcApAQCAt
MTY3LDcgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0ZUxvZ2ljYWxX
aWR0aCgpCiAgICAgLy8gSWYgdGhlIGZyYWdtZW50cyBoYXZlIG5vbi11bmlmb3JtIGxvZ2ljYWwg
d2lkdGhzLCB0aGVuIGluc2VydCBpbnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIFJlbmRlckZyYWdt
ZW50ZWRGbG93LgogICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkgewog
ICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnQtPnBhZ2VM
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCAt
IGZyYWdtZW50TG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0g
c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IDBfbHUgOiBs
b2dpY2FsV2lkdGggLSBmcmFnbWVudExvZ2ljYWxXaWR0aDsKICAgICAgICAgZnJhZ21lbnQtPnNl
dFJlbmRlckJveEZyYWdtZW50SW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwgZnJhZ21lbnRMb2dpY2Fs
V2lkdGgsIGZhbHNlKTsKICAgICB9CiB9CkBAIC04NDIsNyArODQyLDcgQEAgdm9pZCBSZW5kZXJG
cmFnbWVudGVkRmxvdzo6dXBkYXRlRnJhZ21lbnRzRnJhZ21lbnRlZEZsb3dQb3J0aW9uUmVjdCgp
CiAgICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFn
ZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbEhlaWdo
dCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZyYWdtZW50ZWRGbG93OjptYXhMb2dpY2Fs
SGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0LCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRnJh
Z21lbnRlZEZsb3dDb250ZW50KCkpOwogCi0gICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0
KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2lj
YWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50
TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOworICAgICAgICBMYXlvdXRSZWN0
IGZyYWdtZW50UmVjdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOwog
CiAgICAgICAgIGZyYWdtZW50LT5zZXRGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0KGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3QudHJhbnNwb3Nl
ZFJlY3QoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5k
ZXggOGNmNGZlMjVjMDBmY2ZkOTIwYmFiM2E2ZTcyMWU3MjYyNzM4YjUzZS4uYWI2MDQwNGFiNjA1
MjM3OWY3ZjM2ZDkwMWQ3MzE4NDMyMDdjNjRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBMCiAgICAgICAgIGJvdHRvbVJpZ2h0Lm1vdmUoMCwgLTIgKiBvdXRsaW5lT2Zmc2V0KTsK
ICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSAtb3V0bGluZVdpZHRoOwogICAgIH0KLSAgICBkcmF3
TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9t
UmlnaHQpLCBCb3hTaWRlOjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNl
bnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOworICAgIGRyYXdMaW5lRm9yQm94
U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBB
TDo6Qm94U2lkZTo6TGVmdCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lk
dGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKICAgICAKICAgICAvLyByaWdodCBlZGdl
CiAgICAgdG9wTGVmdCA9IG91dGxpbmVCb3hSZWN0Lm1heFhNaW5ZQ29ybmVyKCk7CkBAIC0xMDM3
LDcgKzEwMzcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAgICAgICBib3R0b21SaWdo
dC5tb3ZlKG91dGxpbmVXaWR0aCwgLTIgKiBvdXRsaW5lT2Zmc2V0KTsKICAgICAgICAgYWRqYWNl
bnRXaWR0aDIgPSAtb3V0bGluZVdpZHRoOwogICAgIH0KLSAgICBkcmF3TGluZUZvckJveFNpZGUo
Z3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRl
OjpSaWdodCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGph
Y2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3ND
b250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBQQUw6OkJveFNpZGU6OlJp
Z2h0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50
V2lkdGgyLCBhbnRpYWxpYXMpOwogCiAgICAgLy8gdXBwZXIgZWRnZQogICAgIGlmICh0aGlzTGlu
ZS54KCkgPCBwcmV2aW91c0xpbmUueCgpKSB7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgTAogICAgICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSAtb3V0bGluZVdp
ZHRoOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkamFjZW50V2lkdGgyID0gb3V0bGlu
ZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9h
dFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpUb3AsIG91dGxpbmVDb2xvciwg
b3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlhcyk7
CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0
b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRsaW5lQ29sb3IsIG91
dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOwog
ICAgIH0KICAgICAKICAgICBpZiAocHJldmlvdXNMaW5lLm1heFgoKSA8IHRoaXNMaW5lLm1heFgo
KSkgewpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGlu
ZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEwKICAgICAg
ICAgYm90dG9tUmlnaHQgPSBvdXRsaW5lQm94UmVjdC5tYXhYTWluWUNvcm5lcigpOwogICAgICAg
ICBib3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwgMCk7CiAgICAgICAgIGFkamFjZW50V2lk
dGgyID0gb3V0bGluZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3ND
b250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpUb3AsIG91
dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIs
IGFudGlhbGlhcyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
IEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRs
aW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBh
bnRpYWxpYXMpOwogICAgIH0KIAogICAgIGlmICh0aGlzTGluZS54KCkgPT0gdGhpc0xpbmUubWF4
WCgpKSB7CkBAIC0xMDc1LDcgKzEwNzUsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRs
aW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAg
ICAgICBib3R0b21SaWdodCA9IG91dGxpbmVCb3hSZWN0Lm1heFhNaW5ZQ29ybmVyKCk7CiAgICAg
ICAgIGJvdHRvbVJpZ2h0Lm1vdmUob3V0bGluZVdpZHRoLCAwKTsKICAgICAgICAgYWRqYWNlbnRX
aWR0aDIgPSBvdXRsaW5lV2lkdGg7Ci0gICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGlj
c0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIEJveFNpZGU6OlRvcCwg
b3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGphY2VudFdpZHRo
MiwgYW50aWFsaWFzKTsKKyAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4
dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJpZ2h0KSwgUEFMOjpCb3hTaWRlOjpUb3AsIG91
dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIs
IGFudGlhbGlhcyk7CiAgICAgfQogCiAgICAgLy8gbG93ZXIgZWRnZQpAQCAtMTA5MCw3ICsxMDkw
LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEwKICAgICAgICAgICAgIGFkamFjZW50V2lkdGgy
ID0gLW91dGxpbmVXaWR0aDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhZGphY2VudFdp
ZHRoMiA9IG91dGxpbmVXaWR0aDsKLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNz
Q29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJpZ2h0KSwgQm94U2lkZTo6Qm90dG9t
LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lk
dGgyLCBhbnRpYWxpYXMpOworICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBQQUw6OkJveFNpZGU6OkJvdHRv
bSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGphY2VudFdp
ZHRoMiwgYW50aWFsaWFzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG5leHRMaW5lLm1heFgoKSA8
IHRoaXNMaW5lLm1heFgoKSkgewpAQCAtMTEwNCw3ICsxMTA0LDcgQEAgdm9pZCBSZW5kZXJJbmxp
bmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEwKICAgICAgICAgYm90dG9tUmlnaHQgPSBvdXRsaW5lQm94UmVjdC5tYXhYTWF4WUNv
cm5lcigpOwogICAgICAgICBib3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwgb3V0bGluZVdp
ZHRoKTsKICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSBvdXRsaW5lV2lkdGg7Ci0gICAgICAgIGRy
YXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0
b21SaWdodCksIEJveFNpZGU6OkJvdHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFk
amFjZW50V2lkdGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICAgICAgZHJhd0xp
bmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJp
Z2h0KSwgUEFMOjpCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBh
ZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlhcyk7CiAgICAgfQogCiAgICAg
aWYgKHRoaXNMaW5lLngoKSA9PSB0aGlzTGluZS5tYXhYKCkpIHsKQEAgLTExMTQsNyArMTExNCw3
IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBMCiAgICAgICAgIGJvdHRvbVJpZ2h0ID0gb3V0bGlu
ZUJveFJlY3QubWF4WE1heFlDb3JuZXIoKTsKICAgICAgICAgYm90dG9tUmlnaHQubW92ZShvdXRs
aW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CiAgICAgICAgIGFkamFjZW50V2lkdGgyID0gb3V0bGlu
ZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9h
dFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVDb2xv
ciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlh
cyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVj
dCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBvdXRsaW5lQ29s
b3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxp
YXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggMDkyNWQ4MjhmOGFhNWE1YjBjYjRmMmQyNzg2OGIwZmEyOTUyYmFlZi4uZmY4ODU4M2Q3
MmIxYjU0MjE5NDkyMjUyYzNiYmNlODJlYjIzM2QzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC01MjI5LDggKzUyMjksOCBAQCBzdGF0aWMgYm9vbCBoYXNW
aXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIpCiAKIHN0YXRpYyBib29sIHN0eWxlSGFzU21vb3RoaW5nVGV4dE1vZGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewotICAgIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUg
PSBzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCk7Ci0gICAgcmV0dXJuIHNt
b290aGluZ01vZGUgPT0gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfHwgc21vb3Ro
aW5nTW9kZSA9PSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDsKKyAgICBQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUgPSBzdHlsZS5mb250RGVzY3JpcHRp
b24oKS5mb250U21vb3RoaW5nKCk7CisgICAgcmV0dXJuIHNtb290aGluZ01vZGUgPT0gUEFMOjpG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB8fCBzbW9vdGhpbmdNb2RlID09IFBBTDo6
Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ7CiB9CiAKIC8vIENvbnN0cmFp
biB0aGUgZGVwdGggYW5kIGJyZWFkdGggb2YgdGhlIHNlYXJjaCBmb3IgcGVyZm9ybWFuY2UuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKaW5kZXggZjI5NTA0YTJmMzJlODVhZDU4MzI3ZjY2YTM0YjE5MTI4YjZkNjg3OC4uOWE0ZjM5
OTM2YTM5YmFiYTY5NTA0NDI3YTJiYjk2ZjkxZjVjZmEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMTgyLDcgKzE4
Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2hvdWxkUGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0CiAgICAgY2FzZSBVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9s
aWN5OjpDb250ZW50OgogICAgICAgICByZXR1cm4gc3R5bGUoKS5zaG91bGRQbGFjZVZlcnRpY2Fs
U2Nyb2xsYmFyT25MZWZ0KCk7CiAgICAgY2FzZSBVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5
OjpTeXN0ZW06Ci0gICAgICAgIHJldHVybiBzZXR0aW5ncygpLnN5c3RlbUxheW91dERpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzKCkuc3lz
dGVtTGF5b3V0RGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBzdHlsZSgpLnNob3VsZFBsYWNl
VmVydGljYWxTY3JvbGxiYXJPbkxlZnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAppbmRleCBmYTFhZWE0NDgwNGNi
NTE5M2EwNGI5ZThlZDViNTAwMjBjM2NhY2Q2Li42ODA5ZTY3MDFjOTI2NjZlZmZhM2E2MDUxZGEy
OTgxMjg4NzE5NDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxPcmlnaW4oKQogICAgIEFTU0VS
VChib3gpOwogCiAgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92
ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkgLyp8fCBib3gtPnN0eWxlKCkud3JpdGluZ01vZGUoKSA9
PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQqLykKKyAgICBpZiAoc2hvdWxkUGxhY2VWZXJ0aWNh
bFNjcm9sbGJhck9uTGVmdCgpIC8qfHwgYm94LT5zdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFM
OjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQqLykKICAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVy
ZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgaW50IHNjcm9sbGFibGVUb3BP
dmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwog
ICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNj
cm9sbGFibGVUb3BPdmVyZmxvdykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCmluZGV4IDljMDdjODA5YjkwMTM5NDAyOTY1MjM3MjZhZDdmMzQ4MDJhNzUyYmQu
LjdmZjcxZmFkNjM4NTIxNThmY2M1YmMwMzMxNDNjZjQzZDZkM2U2NWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIGlmICh0ZXh0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRleHQg
PSBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4dCwgJyAnKTsKLSAgICAgICAgICAgIGF1
dG8gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGV4dCwgc3R5bGUoKSwgQWxsb3dSaWdodEV4
cGFuc2lvbik7CisgICAgICAgICAgICBhdXRvIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRl
eHQsIHN0eWxlKCksIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbik7CiAgICAgICAgICAgICB3aWR0
aCA9IHN0ZDo6bWF4KHdpZHRoLCBzZWxlY3RGb250KCkud2lkdGgodGV4dFJ1bikpOwogICAgICAg
ICB9CiAgICAgICAgIC8vIEZJWE1FOiBJcyBjZWlsaW5nIHJpZ2h0IGhlcmUsIG9yIHNob3VsZCB3
ZSBiZSBkb2luZyBzb21lIGtpbmQgb2Ygcm91bmRpbmcgaW5zdGVhZD8KQEAgLTQyMiw3ICs0MjIs
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5z
ZXRGaWxsQ29sb3IodGV4dENvbG9yKTsKIAotICAgIFRleHRSdW4gdGV4dFJ1bihpdGVtVGV4dCwg
MCwgMCwgQWxsb3dSaWdodEV4cGFuc2lvbiwgaXRlbVN0eWxlLmRpcmVjdGlvbigpLCBpc092ZXJy
aWRlKGl0ZW1TdHlsZS51bmljb2RlQmlkaSgpKSwgdHJ1ZSk7CisgICAgVGV4dFJ1biB0ZXh0UnVu
KGl0ZW1UZXh0LCAwLCAwLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIGl0ZW1TdHlsZS5kaXJl
Y3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUudW5pY29kZUJpZGkoKSksIHRydWUpOwogICAg
IEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwogICAgIExheW91
dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJbmRleCk7CiAg
ICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1biwgJml0ZW1TdHlsZSwgaXRl
bUZvbnQsIHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3Bw
CmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMwOGQ2YjM5MTU1NWY3YzUyMzZiNjQyZjguLjU0ZjU5YTM5
ZmUwMGJjNzU5ZmViYmRiZmYyYjkzNjYzYjFlMjBiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIlJl
bmRlclRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlN0
eWxlSW5oZXJpdGVkRGF0YS5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCisjaW5jbHVkZSA8
cGFsL3RleHQvVW5pY29kZUJpZGkuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgpAQCAtNzQsMTAgKzc0LDEwIEBAIFJlbmRlclN0eWxlIFJlbmRlckxpc3RJdGVtOjpjb21w
dXRlTWFya2VyU3R5bGUoKSBjb25zdAogICAgIC8vIG90aGVyd2lzZSBzZXQgaW4gdGhlIHVzZXIt
YWdlbnQgc3R5bGVzaGVldCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IDo6YmVmb3JlOjptYXJrZXIg
b3IKICAgICAvLyA6OmFmdGVyOjptYXJrZXIuIFNlZSBidWdzLndlYmtpdC5vcmcvYi8yMTg4OTcu
CiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnMpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50TnVtZXJpY1NwYWNpbmcoUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1
bGFyTnVtYmVycyk7CiAgICAgbWFya2VyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CiAgICAgbWFya2VyU3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwotICAgIG1hcmtlclN0eWxlLnNldFVuaWNvZGVC
aWRpKEVVbmljb2RlQmlkaTo6SXNvbGF0ZSk7CisgICAgbWFya2VyU3R5bGUuc2V0VW5pY29kZUJp
ZGkoUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGUpOwogICAgIG1hcmtlclN0eWxlLnNldFdoaXRl
U3BhY2UoV2hpdGVTcGFjZTo6UHJlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRUZXh0VHJhbnNmb3Jt
KFRleHRUcmFuc2Zvcm06Ok5vbmUpOwogICAgIHJldHVybiBtYXJrZXJTdHlsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCBiMTM0NmExMDViNzMyOGU1
OGY1ZmJhN2U5ODA5MjZjYTE5OTgxZTkwLi5lNGQwMzRmNTBjODllNzVjMzM3NWI0YjkyMzQ5MDIx
MzliNTQxZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFy
cXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
CkBAIC0xMDMsMTMgKzEwMywxMyBAQCBNYXJxdWVlRGlyZWN0aW9uIFJlbmRlck1hcnF1ZWU6OmRp
cmVjdGlvbigpIGNvbnN0CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIENTUzMgImF1dG8iIHZh
bHVlIGZvciBkZXRlcm1pbmluZyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtYXJxdWVlLgogICAgIC8v
IEZvciBub3cganVzdCBtYXAgTWFycXVlZURpcmVjdGlvbjo6QXV0byB0byBNYXJxdWVlRGlyZWN0
aW9uOjpCYWNrd2FyZAogICAgIE1hcnF1ZWVEaXJlY3Rpb24gcmVzdWx0ID0gbV9sYXllci0+cmVu
ZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVEaXJlY3Rpb24oKTsKLSAgICBUZXh0RGlyZWN0aW9uIGRp
ciA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyID0gbV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmRpcmVjdGlvbigp
OwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QXV0bykKICAgICAgICAgcmVz
dWx0ID0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgaWYgKHJlc3VsdCA9PSBNYXJx
dWVlRGlyZWN0aW9uOjpGb3J3YXJkKQotICAgICAgICByZXN1bHQgPSAoZGlyID09IFRleHREaXJl
Y3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodCA6IE1hcnF1ZWVEaXJlY3Rpb246
OkxlZnQ7CisgICAgICAgIHJlc3VsdCA9IChkaXIgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
ID8gTWFycXVlZURpcmVjdGlvbjo6UmlnaHQgOiBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0OwogICAg
IGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQpCi0gICAgICAgIHJlc3Vs
dCA9IChkaXIgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSA/IE1hcnF1ZWVEaXJlY3Rpb246OkxlZnQg
OiBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgcmVzdWx0ID0gKGRpciA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0IDogTWFycXVlZURp
cmVjdGlvbjo6UmlnaHQ7CiAgICAgCiAgICAgLy8gTm93IHdlIGhhdmUgdGhlIHJlYWwgZGlyZWN0
aW9uLiAgTmV4dCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGluY3JlbWVudCBpcyBuZWdhdGl2ZS4K
ICAgICAvLyBJZiBzbywgdGhlbiB3ZSByZXZlcnNlIHRoZSBkaXJlY3Rpb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCAwZjUxMTY1Y2VhYjdkYTZm
ZmE1M2VjZTZjOGJkNWIwYjk2OTA0MWMzLi43MTIxNGY0ZGRhNzNiMzI2YjZjMGZjOThjMzNlNjlk
NDAwNWY1YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAKQEAgLTEzMiwxNiArMTMyLDE2IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVy
U3R5bGUoKQogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBub3QgcmVzcGVjdCB0
aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLAogICAgICAgICAvLyBz
byB3ZSBtdXN0IGFkanVzdCBvdXIgb3duIHN0eWxlIHRvIG1hdGNoLgogICAgICAgICBpbm5lclN0
eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpMZWZ0KTsKLSAgICAgICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSAobV9idXR0b25UZXh0ICYmIG1fYnV0dG9uVGV4dC0+dGV4dCgpLmRl
ZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19MRUZUKSA/IFRleHREaXJlY3Rp
b246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYgbV9idXR0b25UZXh0LT50ZXh0KCkuZGVmYXVs
dFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgaW5uZXJTdHlsZS5z
ZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIH0g
ZWxzZSBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1BbGlnbm1lbnRG
b2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKSkgewotICAgICAgICBpbm5lclN0eWxlLnNldFRl
eHRBbGlnbihzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFRleHRB
bGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodCk7Ci0gICAgICAgIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uOwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGk7CisgICAg
ICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6
UmlnaHQpOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgICAgICBQ
QUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaTsKICAgICAgICAgaWYgKG11bHRpcGxlKCkgJiYg
c2VsZWN0ZWRPcHRpb25Db3VudCgqdGhpcykgIT0gMSkgewotICAgICAgICAgICAgZGlyZWN0aW9u
ID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS5kZWZhdWx0V3JpdGluZ0Rp
cmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0
RGlyZWN0aW9uOjpMVFI7Ci0gICAgICAgICAgICB1bmljb2RlQmlkaSA9IFVCTm9ybWFsOworICAg
ICAgICAgICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQo
KS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBQQUw6OlRl
eHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAg
dW5pY29kZUJpZGkgPSBQQUw6OlVCTm9ybWFsOwogICAgICAgICB9IGVsc2UgaWYgKG1fb3B0aW9u
U3R5bGUpIHsKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG1fb3B0aW9uU3R5bGUtPmRpcmVjdGlv
bigpOwogICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBtX29wdGlvblN0eWxlLT51bmljb2RlQmlk
aSgpOwpAQCAtNTc0LDcgKzU3NCw3IEBAIGNvbnN0IGludCBlbmRPZkxpbmVQYWRkaW5nID0gMjsK
IAogTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAog
ewotICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkg
JiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKKyAgICBpZiAo
KHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCB8fCBzdHlsZSgp
LmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpICYmIHN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgLy8gRm9y
IHRoZXNlIGFwcGVhcmFuY2UgdmFsdWVzLCB0aGUgdGhlbWUgYXBwbGllcyBwYWRkaW5nIHRvIGxl
YXZlIHJvb20gZm9yIHRoZQogICAgICAgICAvLyBkcm9wLWRvd24gYnV0dG9uLiBCdXQgbGVhdmlu
ZyByb29tIGZvciB0aGUgYnV0dG9uIGluc2lkZSB0aGUgcG9wdXAgbWVudSBpdHNlbGYKICAgICAg
ICAgLy8gbG9va3Mgc3RyYW5nZSwgc28gd2UgcmV0dXJuIGEgc21hbGwgZGVmYXVsdCBwYWRkaW5n
IHRvIGF2b2lkIGhhdmluZyBhIGxhcmdlIGVtcHR5CkBAIC01ODgsNyArNTg4LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogCiBMYXlvdXRV
bml0IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewotICAgIGlm
ICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0IHx8IHN0eWxl
KCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgJiYgc3R5bGUo
KS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKChzdHlsZSgpLmVm
ZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5lZmZlY3RpdmVB
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm4gZW5kT2ZMaW5lUGFk
ZGluZzsKIAogICAgIHJldHVybiBwYWRkaW5nUmlnaHQoKSArIG1faW5uZXJCbG9jay0+cGFkZGlu
Z1JpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmNwcAppbmRleCBlMzk2ZmExMjI4Mjk4ZDUwZDYwZDZhZmY3NmNkNDJjZWUwZTJiYmE0
Li4wODhlMzYyMDc0YjE5N2U1NWE0ODZjNmFiYjhhNTIwNmY5MDk2YWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKQEAgLTYzMSw5
ICs2MzEsOSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1bGVzKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQbwogICAgICAgICBMYXlvdXRVbml0IHJ1
bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKICAgICAgICAgTGF5b3V0VW5p
dCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IDBfbHUgOiBjb250ZW50TG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgaW5saW5lRGlyZWN0aW9uU2l6ZSA9IGNvbXB1dGVk
Q29sdW1uV2lkdGgoKTsKLSAgICAgICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKQotICAgICAgICAgICAgPyBsZWZ0VG9SaWdodCA/IEJveFNpZGU6OkxlZnQgOiBC
b3hTaWRlOjpSaWdodAotICAgICAgICAgICAgOiBsZWZ0VG9SaWdodCA/IEJveFNpZGU6OlRvcCA6
IEJveFNpZGU6OkJvdHRvbTsKKyAgICAgICAgUEFMOjpCb3hTaWRlIGJveFNpZGUgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpCisgICAgICAgICAgICA/IGxlZnRUb1JpZ2h0ID8gUEFMOjpCb3hT
aWRlOjpMZWZ0IDogUEFMOjpCb3hTaWRlOjpSaWdodAorICAgICAgICAgICAgOiBsZWZ0VG9SaWdo
dCA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRlOjpCb3R0b207CiAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgICAgIC8v
IE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCkBAIC02NzQsNyArNjc0LDcgQEAgdm9pZCBSZW5k
ZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG8KIAogICAgICAgICBydWxlUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwog
Ci0gICAgICAgIEJveFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0
b3BUb0JvdHRvbSA/IEJveFNpZGU6OlRvcCA6IEJveFNpZGU6OkJvdHRvbSA6IHRvcFRvQm90dG9t
ID8gQm94U2lkZTo6TGVmdCA6IEJveFNpZGU6OlJpZ2h0OworICAgICAgICBQQUw6OkJveFNpZGUg
Ym94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0b3BUb0JvdHRvbSA/IFBBTDo6
Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRlOjpCb3R0b20gOiB0b3BUb0JvdHRvbSA/IFBBTDo6
Qm94U2lkZTo6TGVmdCA6IFBBTDo6Qm94U2lkZTo6UmlnaHQ7CiAKICAgICAgICAgTGF5b3V0U2l6
ZSBzdGVwKDBfbHUsIHRvcFRvQm90dG9tID8gY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdh
cCA6IC0oY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdhcCkpOwogICAgICAgICBpZiAoIWlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCmluZGV4IGQ2MWFjZDNjZDg2ZTcxYzc0YjAxODcxMjQxNmUzNzExZmZkYzQwNzgu
LjNmNGM1NDg1ZDAwNmU4NGNlMzhmZWYyMzZmODA4YWM3NDU5ZTQ2NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xODc5LDcgKzE4NzksNyBAQCBSZW5k
ZXJGcmFnbWVudGVkRmxvdyogUmVuZGVyT2JqZWN0Ojpsb2NhdGVFbmNsb3NpbmdGcmFnbWVudGVk
RmxvdygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9j
ay0+ZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVuZGVy
T2JqZWN0OjpjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKGNvbnN0IEJvcmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgQm94U2lkZSYgc2lkZSwgQ29sb3ImIGNvbG9yKQordm9pZCBSZW5kZXJPYmplY3Q6
OmNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoY29uc3QgQm9yZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBQQUw6OkJveFNpZGUmIHNpZGUsIENvbG9yJiBjb2xvcikKIHsKICAgICBBU1NFUlQoc3R5bGUg
PT0gQm9yZGVyU3R5bGU6Okluc2V0IHx8IHN0eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQpOwog
CkBAIC0xODg5LDcgKzE4ODksNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y2FsY3VsYXRlQm9yZGVy
U3R5bGVDb2xvcihjb25zdCBCb3JkZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJveAogCiAgICAgZW51
bSBPcGVyYXRpb24geyBEYXJrZW4sIExpZ2h0ZW4gfTsKIAotICAgIE9wZXJhdGlvbiBvcGVyYXRp
b24gPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpMZWZ0KSA9PSAo
c3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47CisgICAgT3Bl
cmF0aW9uIG9wZXJhdGlvbiA9IChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0g
UEFMOjpCb3hTaWRlOjpMZWZ0KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERh
cmtlbiA6IExpZ2h0ZW47CiAKICAgICAvLyBIZXJlIHdlIHdpbGwgZGFya2VuIHRoZSBib3JkZXIg
ZGVjb3JhdGlvbiBjb2xvciB3aGVuIG5lZWRlZC4gVGhpcyB3aWxsIHlpZWxkIGEgc2ltaWxhciBi
ZWhhdmlvciBhcyBpbiBGRi4KICAgICBpZiAob3BlcmF0aW9uID09IERhcmtlbikgewpAQCAtMjMx
NSw3ICsyMzE1LDcgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRy
aWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgICAgICBpZiAoZ2VvbWV0
cmllc1tqXS5iZWhhdmlvcigpID09IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRp
dmlkdWFsUXVhZHMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgcHJldmlv
dXNSZWN0ID0gZ2VvbWV0cmllc1tqIC0gMV07Ci0gICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5
Tm90UmVhY2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJl
Y3Rpb246OkxUUiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwgKHByZXZpb3VzUmVj
dC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlvdXNSZWN0LmNvbnRh
aW5zU3RhcnQoKSk7CisgICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdodEVk
Z2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
ICYmIHByZXZpb3VzUmVjdC5jb250YWluc0VuZCgpKSB8fCAocHJldmlvdXNSZWN0LmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMICYmIHByZXZpb3VzUmVjdC5jb250YWluc1N0
YXJ0KCkpOwogICAgICAgICBpZiAocHJldmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaW50IGFkanVzdGVkV2lkdGggPSBnZW9tZXRy
aWVzW2pdLmxvZ2ljYWxMZWZ0KCkgLSBwcmV2aW91c1JlY3QubG9naWNhbExlZnQoKTsKQEAgLTIz
MzIsMTAgKzIzMzIsMTAgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25HZW9t
ZXRyaWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmIChzZWxlY3Rpb25HZW9tZXRyeS5iZWhhdmlvcigpID09IFNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFRl
eHREaXJlY3Rpb246OlJUTCAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0ZpcnN0T25MaW5lKCkpIHsK
KyAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKSkgewogICAg
ICAgICAgICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0TG9naWNhbFdpZHRoKHNlbGVjdGlvbkdlb21l
dHJ5LmxvZ2ljYWxXaWR0aCgpICsgc2VsZWN0aW9uR2VvbWV0cnkubG9naWNhbExlZnQoKSAtIHNl
bGVjdGlvbkdlb21ldHJ5Lm1pblgoKSk7CiAgICAgICAgICAgICBzZWxlY3Rpb25HZW9tZXRyeS5z
ZXRMb2dpY2FsTGVmdChzZWxlY3Rpb25HZW9tZXRyeS5taW5YKCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiAm
JiBzZWxlY3Rpb25HZW9tZXRyeS5pc0xhc3RPbkxpbmUoKSkKKyAgICAgICAgfSBlbHNlIGlmIChz
ZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiAm
JiBzZWxlY3Rpb25HZW9tZXRyeS5pc0xhc3RPbkxpbmUoKSkKICAgICAgICAgICAgIHNlbGVjdGlv
bkdlb21ldHJ5LnNldExvZ2ljYWxXaWR0aChzZWxlY3Rpb25HZW9tZXRyeS5tYXhYKCkgLSBzZWxl
Y3Rpb25HZW9tZXRyeS5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBkNDk5ODc4NzJlZjM0MTAzYWMwZTgyNGQ3MWYzOTRj
NmViY2U5N2QzLi5iYWE2YjdlMDJjMjhiYmI4NDY5MGMyN2U0N2E3YmJhODIxN2E5MzdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC03NjIsNyArNzYyLDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dEJp
dChib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91
dChiKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJGcmFnbWVudGVkRmxvdyogbG9jYXRlRW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVCb3Jk
ZXJTdHlsZUNvbG9yKGNvbnN0IEJvcmRlclN0eWxlJiwgY29uc3QgQm94U2lkZSYsIENvbG9yJik7
CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihjb25zdCBCb3JkZXJT
dHlsZSYsIGNvbnN0IFBBTDo6Qm94U2lkZSYsIENvbG9yJik7CiAKICAgICBzdGF0aWMgRnJhZ21l
bnRlZEZsb3dTdGF0ZSBjb21wdXRlZEZyYWdtZW50ZWRGbG93U3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAK
aW5kZXggYTZiYmRiNDVmMzdlMmExYmE0NDVhN2M0MTMxYjU1Yzg4OTA0NjZjYi4uZjYwZjI0OTA5
NGE1ZTMxZWQzZjYzMGUyODkyYmQ1YzMzYjhmZDBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBMYXlvdXRVbml0
IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcCgpIGNvbnN0CiAgICAgTGF5b3V0VW5pdCByZXN1
bHQgPSBjb21wdXRlZENTU1BhZGRpbmdUb3AoKTsKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdCArIChz
dHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tID8gaW50cmlu
c2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOworICAgIHJldHVy
biByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tID8gaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2ljUGFkZGluZ0Fm
dGVyKCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0JvdHRvbSgp
IGNvbnN0CkBAIC0zMDMsNyArMzAzLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBh
ZGRpbmdCb3R0b20oKSBjb25zdAogICAgIExheW91dFVuaXQgcmVzdWx0ID0gY29tcHV0ZWRDU1NQ
YWRkaW5nQm90dG9tKCk7CiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5n
TW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/IGludHJpbnNpY1BhZGRpbmdBZnRl
cigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgKHN0
eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/IGlu
dHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKIH0KIAog
TGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdMZWZ0KCkgY29uc3QKQEAgLTMxMSw3
ICszMTEsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0xlZnQoKSBjb25z
dAogICAgIExheW91dFVuaXQgcmVzdWx0ID0gY29tcHV0ZWRDU1NQYWRkaW5nTGVmdCgpOwogICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6IGludHJpbnNpY1BhZGRp
bmdBZnRlcigpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9
PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUo
KSA6IGludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJs
ZUNlbGw6OnBhZGRpbmdSaWdodCgpIGNvbnN0CkBAIC0zMTksNyArMzE5LDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCgpIGNvbnN0CiAgICAgTGF5b3V0VW5pdCBy
ZXN1bHQgPSBjb21wdXRlZENTU1BhZGRpbmdSaWdodCgpOwogICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQg
KyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGlu
dHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGlu
Z0JlZm9yZSgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCZWZv
cmUoKSBjb25zdApAQCAtMTExNSw3ICsxMTE1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQK
IAogc3RydWN0IENvbGxhcHNlZEJvcmRlciB7CiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9y
ZGVyVmFsdWU7Ci0gICAgQm94U2lkZSBzaWRlOworICAgIFBBTDo6Qm94U2lkZSBzaWRlOwogICAg
IGJvb2wgc2hvdWxkUGFpbnQ7CiAgICAgTGF5b3V0VW5pdCB4MTsKICAgICBMYXlvdXRVbml0IHkx
OwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBC
b3hTaWRlIGJvcmRlclNpZGUsIGJvb2wgc2hvdWxkUGFpbnQsCisgICAgdm9pZCBhZGRCb3JkZXIo
Y29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBQQUw6OkJveFNpZGUgYm9y
ZGVyU2lkZSwgYm9vbCBzaG91bGRQYWludCwKICAgICAgICAgTGF5b3V0VW5pdCB4MSwgTGF5b3V0
VW5pdCB5MSwgTGF5b3V0VW5pdCB4MiwgTGF5b3V0VW5pdCB5MiwgQm9yZGVyU3R5bGUgYm9yZGVy
U3R5bGUpCiAgICAgewogICAgICAgICBpZiAoYm9yZGVyVmFsdWUuZXhpc3RzKCkgJiYgc2hvdWxk
UGFpbnQpIHsKQEAgLTEyNTMsMTAgKzEyNTMsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50Q29sbGFwc2VkQm9yZGVycyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG8K
ICAgICAvLyBXZSBuZXZlciBwYWludCBkaWFnb25hbHMgYXQgdGhlIGpvaW5zLiAgV2Ugc2ltcGx5
IGxldCB0aGUgYm9yZGVyIHdpdGggdGhlIGhpZ2hlc3QKICAgICAvLyBwcmVjZWRlbmNlIHBhaW50
IG9uIHRvcCBvZiBib3JkZXJzIHdpdGggbG93ZXIgcHJlY2VkZW5jZS4gIAogICAgIENvbGxhcHNl
ZEJvcmRlcnMgYm9yZGVyczsKLSAgICBib3JkZXJzLmFkZEJvcmRlcih0b3BWYWwsIEJveFNpZGU6
OlRvcCwgcmVuZGVyVG9wLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJl
Y3QubWF4WCgpLCBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7Ci0gICAgYm9y
ZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBCb3hTaWRlOjpCb3R0b20sIHJlbmRlckJvdHRvbSwg
Ym9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsIGJvcmRlclJl
Y3QubWF4WCgpLCBib3JkZXJSZWN0Lm1heFkoKSwgYm90dG9tU3R5bGUpOwotICAgIGJvcmRlcnMu
YWRkQm9yZGVyKGxlZnRWYWwsIEJveFNpZGU6OkxlZnQsIHJlbmRlckxlZnQsIGJvcmRlclJlY3Qu
eCgpLCBib3JkZXJSZWN0LnkoKSwgYm9yZGVyUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlclJl
Y3QubWF4WSgpLCBsZWZ0U3R5bGUpOwotICAgIGJvcmRlcnMuYWRkQm9yZGVyKHJpZ2h0VmFsLCBC
b3hTaWRlOjpSaWdodCwgcmVuZGVyUmlnaHQsIGJvcmRlclJlY3QubWF4WCgpIC0gcmlnaHRXaWR0
aCwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QubWF4WCgpLCBib3JkZXJSZWN0Lm1heFkoKSwg
cmlnaHRTdHlsZSk7CisgICAgYm9yZGVycy5hZGRCb3JkZXIodG9wVmFsLCBQQUw6OkJveFNpZGU6
OlRvcCwgcmVuZGVyVG9wLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJl
Y3QubWF4WCgpLCBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7CisgICAgYm9y
ZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBQQUw6OkJveFNpZGU6OkJvdHRvbSwgcmVuZGVyQm90
dG9tLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgYm9y
ZGVyUmVjdC5tYXhYKCksIGJvcmRlclJlY3QubWF4WSgpLCBib3R0b21TdHlsZSk7CisgICAgYm9y
ZGVycy5hZGRCb3JkZXIobGVmdFZhbCwgUEFMOjpCb3hTaWRlOjpMZWZ0LCByZW5kZXJMZWZ0LCBi
b3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QueCgpICsgbGVmdFdpZHRo
LCBib3JkZXJSZWN0Lm1heFkoKSwgbGVmdFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihy
aWdodFZhbCwgUEFMOjpCb3hTaWRlOjpSaWdodCwgcmVuZGVyUmlnaHQsIGJvcmRlclJlY3QubWF4
WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QubWF4WCgpLCBib3Jk
ZXJSZWN0Lm1heFkoKSwgcmlnaHRTdHlsZSk7CiAKICAgICBib29sIGFudGlhbGlhcyA9IHNob3Vs
ZEFudGlhbGlhc0xpbmVzKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGE0ZWJhMDgwYzQ1ZjVh
OGFkNjY2OTQ4NWZiOGRhZTA2ODEwNDFiNWIuLmE5OTA1Njk4YjA2YTNkNGIyNTMxZjdmYmZkNmJm
ZmU5MWI1ZTZjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBDZWxsU3BhbiBSZW5kZXJUYWJsZVNl
Y3Rpb246OnNwYW5uZWRDb2x1bW5zKGNvbnN0IExheW91dFJlY3QmIGZsaXBwZWRSZWN0LCBTaG91
bAogICAgIHJldHVybiBDZWxsU3BhbihzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKIH0KIAotdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCb3JkZXIoY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0IHJlY3QsIEJveFNpZGUgc2lk
ZSwgQ1NTUHJvcGVydHlJRCBib3JkZXJDb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIEJv
cmRlclN0eWxlIHRhYmxlQm9yZGVyU3R5bGUpCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFp
bnRSb3dHcm91cEJvcmRlcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYm9vbCBhbnRpYWxp
YXMsIExheW91dFJlY3QgcmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIENTU1Byb3BlcnR5SUQgYm9y
ZGVyQ29sb3IsIEJvcmRlclN0eWxlIGJvcmRlclN0eWxlLCBCb3JkZXJTdHlsZSB0YWJsZUJvcmRl
clN0eWxlKQogewogICAgIGlmICh0YWJsZUJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpIaWRk
ZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTEwOTIsMTQgKzEwOTIsMTQgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJUYWJsZVNlY3Rpb246Om9mZnNldExlZnRGb3JSb3dHcm91cEJvcmRlcihSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwKICAgICByZXR1cm4gcm93R3JvdXBSZWN0LndpZHRoKCkgLSBtX3Jvd1Bvc1ty
b3cgKyAxXSArIChpc0xhc3RSb3cgPyAtb3V0ZXJCb3JkZXJMZWZ0KCZzdHlsZSgpKSA6IDBfbHUp
OwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6b2Zmc2V0VG9wRm9yUm93R3Jv
dXBCb3JkZXIoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBCb3hTaWRlIGJvcmRlclNpZGUsIHVuc2ln
bmVkIHJvdykKK0xheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpvZmZzZXRUb3BGb3JSb3dH
cm91cEJvcmRlcihSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBBTDo6Qm94U2lkZSBib3JkZXJTaWRl
LCB1bnNpZ25lZCByb3cpCiB7CiAgICAgYm9vbCBpc0xhc3RSb3cgPSByb3cgKyAxID09IG1fZ3Jp
ZC5zaXplKCk7CiAgICAgaWYgKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIG1fcm93UG9zW3Jvd10gKyAoIXJvdyAmJiBib3JkZXJTaWRlID09IEJveFNp
ZGU6OlJpZ2h0ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IGlzTGFzdFJvdyAmJiBib3Jk
ZXJTaWRlID09IEJveFNpZGU6OkxlZnQgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiAwX2x1
KTsKKyAgICAgICAgcmV0dXJuIG1fcm93UG9zW3Jvd10gKyAoIXJvdyAmJiBib3JkZXJTaWRlID09
IFBBTDo6Qm94U2lkZTo6UmlnaHQgPyAtb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKCkpIDogaXNMYXN0
Um93ICYmIGJvcmRlclNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0ID8gb3V0ZXJCb3JkZXJUb3Ao
JnN0eWxlKCkpIDogMF9sdSk7CiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQotICAgICAgICByZXR1cm4gKGNlbGwgPyBjZWxsLT55KCkgKyBjZWxsLT5oZWlnaHQoKSA6
IDBfbHUpICsgKGJvcmRlclNpZGUgPT0gQm94U2lkZTo6TGVmdCA/IG91dGVyQm9yZGVyVG9wKCZz
dHlsZSgpKSA6IDBfbHUpOwotICAgIHJldHVybiBib3JkZXJTaWRlID09IEJveFNpZGU6OlJpZ2h0
ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHU7CisgICAgICAgIHJldHVybiAoY2Vs
bCA/IGNlbGwtPnkoKSArIGNlbGwtPmhlaWdodCgpIDogMF9sdSkgKyAoYm9yZGVyU2lkZSA9PSBQ
QUw6OkJveFNpZGU6OkxlZnQgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiAwX2x1KTsKKyAg
ICByZXR1cm4gYm9yZGVyU2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0ID8gLW91dGVyQm9yZGVy
VG9wKCZzdHlsZSgpKSA6IDBfbHU7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9u
Ojp2ZXJ0aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgY29u
c3QgTGF5b3V0UmVjdCYgcm93R3JvdXBSZWN0LCB1bnNpZ25lZCByb3cpCkBAIC0xMTIzLDcgKzEx
MjMsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6aG9yaXpvbnRhbFJvd0dyb3Vw
Qm9yZGVyV2lkdGgoUmVuZGVyVGFibGVDZWxsKiBjZQogICAgIHJldHVybiBtX3Jvd1Bvc1tyb3cg
KyAxXSAtIG1fcm93UG9zW3Jvd10gKyAoaXNMYXN0Um93ID8gb3V0ZXJCb3JkZXJMZWZ0KCZzdHls
ZSgpKSA6ICFyb3cgPyBvdXRlckJvcmRlclJpZ2h0KCZzdHlsZSgpKSA6IDBfbHUpOwogfQogCi12
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcklmUmVxdWlyZWQoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
dW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4sIEJveFNpZGUgYm9yZGVyU2lkZSwgUmVuZGVy
VGFibGVDZWxsKiBjZWxsKQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBC
b3JkZXJJZlJlcXVpcmVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQsIHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1uLCBQQUw6OkJv
eFNpZGUgYm9yZGVyU2lkZSwgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQogewogICAgIGlmICh0YWJs
ZSgpLT5jdXJyZW50Qm9yZGVyVmFsdWUoKS0+cHJlY2VkZW5jZSgpID4gQm9yZGVyUHJlY2VkZW5j
ZTo6Um93R3JvdXApCiAgICAgICAgIHJldHVybjsKQEAgLTExMzMsMjQgKzExMzMsMjQgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCb3JkZXJJZlJlcXVpcmVkKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlz
LT5zdHlsZSgpOwogICAgIGJvb2wgYW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzTGluZXMocGFp
bnRJbmZvLmNvbnRleHQoKSk7CiAgICAgTGF5b3V0UmVjdCByb3dHcm91cFJlY3QgPSBMYXlvdXRS
ZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpOwotICAgIHJvd0dyb3VwUmVjdC5tb3ZlQnkoLUxheW91
dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lkZSA9PSBCb3hTaWRlOjpS
aWdodCkgPyAwX2x1IDogb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKSkpOworICAgIHJvd0dyb3VwUmVj
dC5tb3ZlQnkoLUxheW91dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lk
ZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSA/IDBfbHUgOiBvdXRlckJvcmRlclRvcCgmc3R5bGUp
KSk7CiAKICAgICBzd2l0Y2ggKGJvcmRlclNpZGUpIHsKLSAgICBjYXNlIEJveFNpZGU6OlRvcDoK
KyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICBwYWludFJvd0dyb3VwQm9yZGVy
KHBhaW50SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LngoKSArIG9mZnNl
dExlZnRGb3JSb3dHcm91cEJvcmRlcihjZWxsLCByb3dHcm91cFJlY3QsIHJvdyksIHJvd0dyb3Vw
UmVjdC55KCksIAotICAgICAgICAgICAgaG9yaXpvbnRhbFJvd0dyb3VwQm9yZGVyV2lkdGgoY2Vs
bCwgcm93R3JvdXBSZWN0LCByb3csIGNvbHVtbiksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyVG9w
KCkud2lkdGgoKSkpLCBCb3hTaWRlOjpUb3AsIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsIHN0
eWxlLmJvcmRlclRvcFN0eWxlKCksIHRhYmxlKCktPnN0eWxlKCkuYm9yZGVyVG9wU3R5bGUoKSk7
CisgICAgICAgICAgICBob3Jpem9udGFsUm93R3JvdXBCb3JkZXJXaWR0aChjZWxsLCByb3dHcm91
cFJlY3QsIHJvdywgY29sdW1uKSwgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJUb3AoKS53aWR0aCgp
KSksIFBBTDo6Qm94U2lkZTo6VG9wLCBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCBzdHlsZS5i
b3JkZXJUb3BTdHlsZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclRvcFN0eWxlKCkpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBBTDo6Qm94
U2lkZTo6Qm90dG9tOgogICAgICAgICBwYWludFJvd0dyb3VwQm9yZGVyKHBhaW50SW5mbywgYW50
aWFsaWFzLCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LngoKSArIG9mZnNldExlZnRGb3JSb3dHcm91
cEJvcmRlcihjZWxsLCByb3dHcm91cFJlY3QsIHJvdyksIHJvd0dyb3VwUmVjdC55KCkgKyByb3dH
cm91cFJlY3QuaGVpZ2h0KCksIAotICAgICAgICAgICAgaG9yaXpvbnRhbFJvd0dyb3VwQm9yZGVy
V2lkdGgoY2VsbCwgcm93R3JvdXBSZWN0LCByb3csIGNvbHVtbiksIExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyQm90dG9tKCkud2lkdGgoKSkpLCBCb3hTaWRlOjpCb3R0b20sIENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tQ29sb3IsIHN0eWxlLmJvcmRlckJvdHRvbVN0eWxlKCksIHRhYmxlKCktPnN0eWxl
KCkuYm9yZGVyQm90dG9tU3R5bGUoKSk7CisgICAgICAgICAgICBob3Jpem9udGFsUm93R3JvdXBC
b3JkZXJXaWR0aChjZWxsLCByb3dHcm91cFJlY3QsIHJvdywgY29sdW1uKSwgTGF5b3V0VW5pdChz
dHlsZS5ib3JkZXJCb3R0b20oKS53aWR0aCgpKSksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBzdHlsZS5ib3JkZXJCb3R0b21TdHlsZSgpLCB0YWJs
ZSgpLT5zdHlsZSgpLmJvcmRlckJvdHRvbVN0eWxlKCkpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAg
IHBhaW50Um93R3JvdXBCb3JkZXIocGFpbnRJbmZvLCBhbnRpYWxpYXMsIExheW91dFJlY3Qocm93
R3JvdXBSZWN0LngoKSwgcm93R3JvdXBSZWN0LnkoKSArIG9mZnNldFRvcEZvclJvd0dyb3VwQm9y
ZGVyKGNlbGwsIGJvcmRlclNpZGUsIHJvdyksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyTGVmdCgp
LndpZHRoKCkpLAotICAgICAgICAgICAgdmVydGljYWxSb3dHcm91cEJvcmRlckhlaWdodChjZWxs
LCByb3dHcm91cFJlY3QsIHJvdykpLCBCb3hTaWRlOjpMZWZ0LCBDU1NQcm9wZXJ0eUJvcmRlckxl
ZnRDb2xvciwgc3R5bGUuYm9yZGVyTGVmdFN0eWxlKCksIHRhYmxlKCktPnN0eWxlKCkuYm9yZGVy
TGVmdFN0eWxlKCkpOworICAgICAgICAgICAgdmVydGljYWxSb3dHcm91cEJvcmRlckhlaWdodChj
ZWxsLCByb3dHcm91cFJlY3QsIHJvdykpLCBQQUw6OkJveFNpZGU6OkxlZnQsIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yLCBzdHlsZS5ib3JkZXJMZWZ0U3R5bGUoKSwgdGFibGUoKS0+c3R5bGUo
KS5ib3JkZXJMZWZ0U3R5bGUoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm94U2lkZTo6
UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICBwYWludFJvd0dy
b3VwQm9yZGVyKHBhaW50SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHJvd0dyb3VwUmVjdC54
KCkgKyByb3dHcm91cFJlY3Qud2lkdGgoKSwgcm93R3JvdXBSZWN0LnkoKSArIG9mZnNldFRvcEZv
clJvd0dyb3VwQm9yZGVyKGNlbGwsIGJvcmRlclNpZGUsIHJvdyksIExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyUmlnaHQoKS53aWR0aCgpKSwKLSAgICAgICAgICAgIHZlcnRpY2FsUm93R3JvdXBCb3Jk
ZXJIZWlnaHQoY2VsbCwgcm93R3JvdXBSZWN0LCByb3cpKSwgQm94U2lkZTo6UmlnaHQsIENTU1By
b3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgc3R5bGUuYm9yZGVyUmlnaHRTdHlsZSgpLCB0YWJsZSgp
LT5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7CisgICAgICAgICAgICB2ZXJ0aWNhbFJvd0dy
b3VwQm9yZGVySGVpZ2h0KGNlbGwsIHJvd0dyb3VwUmVjdCwgcm93KSksIFBBTDo6Qm94U2lkZTo6
UmlnaHQsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgc3R5bGUuYm9yZGVyUmlnaHRTdHls
ZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTE1OCwyOSArMTE1OCwyOSBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcklmUmVxdWlyZWQoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZgogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9y
ZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xs
YXBzZWRCb3JkZXJTaWRlIHNpZGUpCitzdGF0aWMgUEFMOjpCb3hTaWRlIHBoeXNpY2FsQm9yZGVy
Rm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xsYXBz
ZWRCb3JkZXJTaWRlIHNpZGUpCiB7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICBjYXNlIENC
U1N0YXJ0OgogICAgICAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBCb3hTaWRlOjpMZWZ0IDogQm94U2lkZTo6UmlnaHQ7Ci0gICAgICAg
IHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCb3hT
aWRlOjpUb3AgOiBCb3hTaWRlOjpCb3R0b207CisgICAgICAgICAgICByZXR1cm4gc3R5bGVGb3JD
ZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpCb3hTaWRlOjpMZWZ0IDog
UEFMOjpCb3hTaWRlOjpSaWdodDsKKyAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRl
OjpCb3R0b207CiAgICAgY2FzZSBDQlNFbmQ6CiAgICAgICAgIGlmIChzdHlsZUZvckNlbGxGbG93
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlRm9y
Q2VsbEZsb3ctPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJveFNpZGU6OlJpZ2h0IDogQm94
U2lkZTo6TGVmdDsKLSAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IEJveFNpZGU6OkJvdHRvbSA6IEJveFNpZGU6OlRvcDsKKyAgICAgICAg
ICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBQ
QUw6OkJveFNpZGU6OlJpZ2h0IDogUEFMOjpCb3hTaWRlOjpMZWZ0OworICAgICAgICByZXR1cm4g
c3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpCb3hTaWRl
OjpCb3R0b20gOiBQQUw6OkJveFNpZGU6OlRvcDsKICAgICBjYXNlIENCU0JlZm9yZToKICAgICAg
ICAgaWYgKHN0eWxlRm9yQ2VsbEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOwotICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxs
Rmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gQm94U2lkZTo6UmlnaHQgOiBCb3hTaWRl
OjpMZWZ0OworICAgICAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOworICAgICAgICBy
ZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpC
b3hTaWRlOjpSaWdodCA6IFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICBjYXNlIENCU0FmdGVyOgog
ICAgICAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpCb3R0b207Ci0gICAgICAgIHJldHVybiBzdHls
ZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCb3hTaWRlOjpMZWZ0IDog
Qm94U2lkZTo6UmlnaHQ7CisgICAgICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpCb3R0b207
CisgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBQQUw6OkJveFNpZGU6OkxlZnQgOiBQQUw6OkJveFNpZGU6OlJpZ2h0OwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQm94U2lk
ZTo6TGVmdDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA4
NWNiMTJkYjkzYmIxOTJhZmI2NTZiMTYxNGQyOWYyZGQ2M2VlMTRhLi42MWM3ZTVlZjA3NTMwZGVl
ZTc0ZmU1ZjdmMzIwYzhiZTZhN2FkNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xNzEsMTEgKzE3MSwxMSBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKICAgICB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludFJvd0dyb3VwQm9yZGVyKGNvbnN0IFBh
aW50SW5mbyYsIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0LCBCb3hTaWRlLCBDU1NQcm9wZXJ0
eUlEIGJvcmRlckNvbG9yLCBCb3JkZXJTdHlsZSwgQm9yZGVyU3R5bGUgdGFibGVCb3JkZXJTdHls
ZSk7Ci0gICAgdm9pZCBwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZChjb25zdCBQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIHVuc2lnbmVkIHJvdywgdW5zaWdu
ZWQgY29sLCBCb3hTaWRlLCBSZW5kZXJUYWJsZUNlbGwqID0gMCk7CisgICAgdm9pZCBwYWludFJv
d0dyb3VwQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYsIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0
LCBQQUw6OkJveFNpZGUsIENTU1Byb3BlcnR5SUQgYm9yZGVyQ29sb3IsIEJvcmRlclN0eWxlLCBC
b3JkZXJTdHlsZSB0YWJsZUJvcmRlclN0eWxlKTsKKyAgICB2b2lkIHBhaW50Um93R3JvdXBCb3Jk
ZXJJZlJlcXVpcmVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2wsIFBBTDo6Qm94U2lkZSwgUmVuZGVyVGFi
bGVDZWxsKiA9IDApOwogICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdEZvclJvd0dyb3VwQm9yZGVy
KFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJlY3QmIHJvd0dyb3VwUmVjdCwgdW5zaWdu
ZWQgcm93KTsKIAotICAgIExheW91dFVuaXQgb2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIoUmVu
ZGVyVGFibGVDZWxsKiwgQm94U2lkZSBib3JkZXJTaWRlLCB1bnNpZ25lZCByb3cpOworICAgIExh
eW91dFVuaXQgb2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIoUmVuZGVyVGFibGVDZWxsKiwgUEFM
OjpCb3hTaWRlIGJvcmRlclNpZGUsIHVuc2lnbmVkIHJvdyk7CiAgICAgTGF5b3V0VW5pdCB2ZXJ0
aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJl
Y3QmIHJvd0dyb3VwUmVjdCwgdW5zaWduZWQgcm93KTsKICAgICBMYXlvdXRVbml0IGhvcml6b250
YWxSb3dHcm91cEJvcmRlcldpZHRoKFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJlY3Qm
IHJvd0dyb3VwUmVjdCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggOGM0MjU0ZWM0Mjk0M2UxMzc4MmM0
N2NkM2JiNmVjZmQ5M2U2NjUxOS4uYzQyNzQzM2Y5OTMzNTA5OTY3NzUwMjdhNDQ0ZjE5ZDAwYmQ4
ZWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMjgsMTQg
KzI4LDE0IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkJyZWFrTGlu
ZXMuaCIKICNpbmNsdWRlICJCcmVha2luZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJDaGFyYWN0ZXJQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oPgog
I2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2lu
Y2x1ZGUgIkh5cGhlbmF0aW9uLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvSHlwaGVuYXRpb24uaD4K
ICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRv
ckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yVGV4dEJv
eC5oIgpAQCAtOTMzLDcgKzkzMyw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0
aChSZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlCiAgICAgVmVj
dG9yPGludCwgOD4gaHlwaGVuTG9jYXRpb25zOwogICAgIEFTU0VSVCh3b3JkLmxlbmd0aCgpID49
IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0aW9uID0gd29y
ZC5sZW5ndGgoKSAtIG1pbmltdW1TdWZmaXhMZW5ndGg7Ci0gICAgd2hpbGUgKChoeXBoZW5Mb2Nh
dGlvbiA9IGxhc3RIeXBoZW5Mb2NhdGlvbih3b3JkLCBoeXBoZW5Mb2NhdGlvbiwgc3R5bGUuY29t
cHV0ZWRMb2NhbGUoKSkpID49IHN0ZDo6bWF4KG1pbmltdW1QcmVmaXhMZW5ndGgsIDFVKSkKKyAg
ICB3aGlsZSAoKGh5cGhlbkxvY2F0aW9uID0gUEFMOjpsYXN0SHlwaGVuTG9jYXRpb24od29yZCwg
aHlwaGVuTG9jYXRpb24sIHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKSA+PSBzdGQ6Om1heChtaW5p
bXVtUHJlZml4TGVuZ3RoLCAxVSkpCiAgICAgICAgIGh5cGhlbkxvY2F0aW9ucy5hcHBlbmQoaHlw
aGVuTG9jYXRpb24pOwogCiAgICAgaWYgKGh5cGhlbkxvY2F0aW9ucy5pc0VtcHR5KCkpCkBAIC0x
MDAyLDcgKzEwMDIsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGbwogICAgIGZsb2F0IG1heFdv
cmRXaWR0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKICAgICB1bnNpZ25l
ZCBtaW5pbXVtUHJlZml4TGVuZ3RoID0gMDsKICAgICB1bnNpZ25lZCBtaW5pbXVtU3VmZml4TGVu
Z3RoID0gMDsKLSAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8gJiYgY2Fu
SHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKSB7CisgICAgaWYgKHN0eWxlLmh5cGhl
bnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIFBBTDo6Y2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVk
TG9jYWxlKCkpKSB7CiAgICAgICAgIG1heFdvcmRXaWR0aCA9IDA7CiAKICAgICAgICAgLy8gTWFw
ICdoeXBoZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06IGF1dG87JyB0byAyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggMGYyODFhMDU3
Y2Y2NTE4MGU0YmU4Njk5MDZlODJjNmIxN2I4MDIwYy4uZTFhZjE4ZGZhMDlmNzcwYjIwNDM2ZTU0
NjFmY2EzMjI0NDgzMTQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRy
b2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgoKQogICAgIGNvbnN0IFVDaGFyIGNoID0gJzAnOwogICAg
IGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKICAgICBjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKHN0ciwgc3R5bGUoKSwgQWxsb3dSaWdodEV4cGFuc2lvbik7CisgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHIsIHN0eWxlKCksIFBBTDo6QWxs
b3dSaWdodEV4cGFuc2lvbik7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1bik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCBjZGIyYjBh
MmQxYjc0MGVjNzIxODUwY2M2NzczN2NjNGM5MTgxNDZhLi44ZGEzMWQ2ZTU4ZGU5ZGY2N2JjNWEy
OGNlMmMwMTE4MjAzOWE0N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCkBAIC03MDUsNyArNzA1LDcgQEAgTGVuZ3RoQm94IFJlbmRlclRoZW1lSU9TOjpw
b3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnMKICAg
ICB9CiAKICAgICBpZiAoc3R5bGUuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkgewotICAgICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6UlRMKQorICAgICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4geyAwLCAwLCAwLCBzdGF0aWNfY2FzdDxpbnQ+
KHBhZGRpbmcgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSB9OwogICAgICAgICByZXR1cm4geyAw
LCBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmcgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSwgMCwg
MCB9OwogICAgIH0KQEAgLTg0Nyw3ICs4NDcsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiBib3gsIGNvbnN0CiAj
ZW5kaWYKIAogICAgIGF1dG8mIHN0eWxlID0gYm94LnN0eWxlKCk7Ci0gICAgYm9vbCBpc1JUTCA9
IHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBib29sIGlzUlRM
ID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgZmxv
YXQgYm9yZGVyVG9wV2lkdGggPSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIEZsb2F0UmVj
dCBjbGlwKHJlY3QueCgpICsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5
bGUuYm9yZGVyVG9wV2lkdGgoKSwgcmVjdC53aWR0aCgpIC0gc3R5bGUuYm9yZGVyTGVmdFdpZHRo
KCkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSBzdHlsZS5ib3Jk
ZXJUb3BXaWR0aCgpIC0gc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCk7CkBA
IC04ODksNyArODg5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRv
bkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYgYm94LCBjb25zdAogCiAgICAgZmxvYXQgc2Vw
YXJhdG9yUG9zaXRpb24gPSBpc1JUTCA/IChjbGlwLngoKSArIE1lbnVMaXN0QnV0dG9uUGFkZGlu
Z0FmdGVyKSA6IChjbGlwLm1heFgoKSAtIE1lbnVMaXN0QnV0dG9uUGFkZGluZ0FmdGVyKTsKIAot
ICAgIGJveC5kcmF3TGluZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoc2VwYXJhdG9yUG9zaXRpb24gLSBib3JkZXJUb3BXaWR0aCwgY2xpcC55KCkp
LCBGbG9hdFBvaW50KHNlcGFyYXRvclBvc2l0aW9uLCBjbGlwLm1heFkoKSkpLCBCb3hTaWRlOjpS
aWdodCwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29s
b3IpLCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAwLCAwKTsKKyAgICBib3guZHJhd0xpbmVGb3JC
b3hTaWRlKHBhaW50SW5mby5jb250ZXh0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KHNlcGFyYXRv
clBvc2l0aW9uIC0gYm9yZGVyVG9wV2lkdGgsIGNsaXAueSgpKSwgRmxvYXRQb2ludChzZXBhcmF0
b3JQb3NpdGlvbiwgY2xpcC5tYXhZKCkpKSwgUEFMOjpCb3hTaWRlOjpSaWdodCwgc3R5bGUudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3Jk
ZXJUb3BTdHlsZSgpLCAwLCAwKTsKIAogICAgIEZsb2F0UmVjdCBidXR0b25DbGlwOwogICAgIGlm
IChpc1JUTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRl
eCBhYTYwZjJlYjJjNDIzMmVjOTBmYTkzZmVhMGZlODA3MDYxYjM1OGMyLi5mMDU5MGQxMTVjOWE1
ODNkNDFjYTIwZGE5YjM3M2Q5ZWMyMWMyOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xNTQ0LDcgKzE1NDQsNyBAQCB2b2lkIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUAogCiB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBib29sIGlzUlRMID0gcmVuZGVyZXIu
c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc1JU
TCA9IHJlbmRlcmVyLnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpS
VEw7CiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIuc3R5
bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci5zdHls
ZSgpLmJvcmRlclRvcFdpZHRoKCksCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVyLnN0
eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclJpZ2h0V2lk
dGgoKSwKQEAgLTE2NTIsNyArMTY1Miw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1l
bnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlKSBjCiBMZW5n
dGhCb3ggUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgU2V0dGluZ3MmKSBjb25zdAogewogICAgIGlmIChzdHlsZS5l
ZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAgIGNvbnN0IGlu
dCogcGFkZGluZyA9IHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUp
LCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAgICBjb25z
dCBpbnQqIHBhZGRpbmcgPSBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSwgc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwogICAg
ICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmdbdG9wUGFkZGluZ10gKiBzdHls
ZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5n
W3JpZ2h0UGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PihwYWRkaW5nW2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9v
bSgpKSwKQEAgLTE2NjMsNyArMTY2Myw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVtZU1hYzo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAgICAg
ICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIChzdHlsZS5jb21wdXRlZEZv
bnRQaXhlbFNpemUoKSAvIGJhc2VGb250U2l6ZSk7CiAgICAgICAgIGZsb2F0IHJpZ2h0UGFkZGlu
ZyA9IGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nQmVmb3JlICsgYXJyb3dQYWRkaW5n
QWZ0ZXIgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7
CiAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0
eWxlLmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFRl
eHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgc3RkOjpzd2FwKHJpZ2h0UGFkZGluZywg
bGVmdFBhZGRpbmcpOwogICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlZFBv
cHVwUGFkZGluZ1RvcCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSksCiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KHJpZ2h0UGFkZGluZyksCkBAIC0xNzE0LDcgKzE3MTQsNyBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IEludFNpegogICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0
aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCiAgICAgc2V0Q29udHJvbFNpemUocG9w
dXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgYnV0dG9uU2l6ZSwgby5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKSk7CiAKLSAgICBwb3B1cEJ1dHRvbi51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uID0gby5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgcG9wdXBCdXR0b24udXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbiA9IG8uc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAKICAgICAvLyBVcGRhdGUg
dGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0YXRl
KHBvcHVwQnV0dG9uLCBvKTsKQEAgLTIxMzIsNyArMjEzMiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgYm94LCBj
b25zdCBQCiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gYWRqdXN0ZWRSZXN1bHRCdXR0b25S
ZWN0KFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qoc25hcHBlZEludFJl
Y3QoaW5wdXRCb3guY29udGVudEJveFJlY3QoKSkpXSk7CiAgICAgLy8gQWRqdXN0IHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSBjb250ZW50IGRpcmVjdGlvbi4KICAgICBmbG9hdCBhZGp1c3RlZFhQb3Np
dGlvbjsKLSAgICBpZiAoYm94LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
UlRMKQorICAgIGlmIChib3guc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCkKICAgICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94
UmVjdCgpLm1heFgoKSAtIGxvY2FsQm91bmRzLnNpemUoKS53aWR0aCgpOwogICAgIGVsc2UKICAg
ICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94UmVjdCgpLngoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBi
MzEzNzM3MmY1ZDUxMDk1NWM5MTM4NDE1OGRiZDllMjZkYzMzM2IyLi5jMzJjZjQxMWM1NjA1NTg3
ODMyMTdkYTRhOGRmNzAxMzQwM2E1YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zMjgsMTMgKzMyOCwxMyBAQCB2b2lkIFJlbmRlclRy
ZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJP
YmplY3QmIG8sCiAgICAgICAgIExheW91dFVuaXQgYm9yZGVyTGVmdCA9IGJveC5ib3JkZXJMZWZ0
KCk7CiAgICAgICAgIGlmIChib3guaXNGaWVsZHNldCgpKSB7CiAgICAgICAgICAgICBjb25zdCBh
dXRvJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihib3gpOwotICAgICAgICAgICAgaWYg
KG8uc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSkKKyAg
ICAgICAgICAgIGlmIChvLnN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbSkKICAgICAgICAgICAgICAgICBib3JkZXJUb3AgLT0gYmxvY2suaW50cmlu
c2ljQm9yZGVyRm9yRmllbGRzZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG8uc3R5bGUoKS53
cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCkKKyAgICAgICAgICAgIGVs
c2UgaWYgKG8uc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OkJvdHRv
bVRvVG9wKQogICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbSAtPSBibG9jay5pbnRyaW5zaWNC
b3JkZXJGb3JGaWVsZHNldCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoby5zdHlsZSgpLndyaXRp
bmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0KQorICAgICAgICAgICAgZWxzZSBp
ZiAoby5zdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQpCiAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCAtPSBibG9jay5pbnRyaW5zaWNCb3JkZXJG
b3JGaWVsZHNldCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoby5zdHlsZSgpLndyaXRpbmdNb2Rl
KCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQorICAgICAgICAgICAgZWxzZSBpZiAoby5z
dHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpCiAg
ICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQgLT0gYmxvY2suaW50cmluc2ljQm9yZGVyRm9yRmll
bGRzZXQoKTsKICAgICAgICAgICAgIAogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRCb3hQYWludGVyLmNwcAppbmRleCA0NzRmN2ViYTc2ODgzNTA2ZjI2NDk0ZDlkZjRl
ZTI3MGYzYzRmYTY3Li42Y2JjNzY1MWFmOTYxMzQ1ZDc2OWUyMTc0ZDVhZWU5YTFhOGYyMDJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0
aW9ucygpCiAgICAgICAgICAgICBpZiAoIXRleHRCb3goKS5pc0hvcml6b250YWwoKSkgewogICAg
ICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZSgwLCBs
b2dpY2FsV2lkdGhCZWZvcmVSYW5nZSk7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25T
ZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRIZWlnaHQobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGV4dEJveCgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rp
b246OlJUTCkgeworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Qm94KCkuZGlyZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3Jh
dGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSwgMCk7
CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRX
aWR0aChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQx
OCw5ICs0MTgsOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lcygpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWlycm9yUlRMU2VnbWVudChm
bG9hdCBsb2dpY2FsV2lkdGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCYgc3RhcnQs
IGZsb2F0IHdpZHRoKQorc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQg
bG9naWNhbFdpZHRoLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCYgc3RhcnQs
IGZsb2F0IHdpZHRoKQogewotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRS
KQorICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAg
IHJldHVybjsKICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCBhNTllZWQ0NGY0YWEz
NDQ2MzcyOGZiNmUyNjExNWQ4OTVlNTQ0NzljLi5jYjNjMzVlMmFjZTkxYzRhN2Q4MTExMTBkMzIz
ZTNmODQ2M2YyNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAK
QEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFkb3dBcHBsaWVy
OjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxv
YXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQs
IGJvb2wgb3BhcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCitTaGFkb3dBcHBsaWVy
OjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxv
YXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQs
IGJvb2wgb3BhcXVlLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKICAgICA6IG1f
Y29udGV4dCB7IGNvbnRleHQgfQogICAgICwgbV9zaGFkb3cgeyBzaGFkb3cgfQogICAgICwgbV9v
bmx5RHJhd3NTaGFkb3cgeyAhaXNMYXN0U2hhZG93SXRlcmF0aW9uKCkgfHwgIWxhc3RTaGFkb3dJ
dGVyYXRpb25TaG91bGREcmF3VGV4dCB9CkBAIC01MCw4ICs1MCw4IEBAIFNoYWRvd0FwcGxpZXI6
OlNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3csCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmbG9hdCBzaGFkb3dYID0g
b3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsID8gc2hhZG93LT54KCku
dmFsdWUoKSA6IHNoYWRvdy0+eSgpLnZhbHVlKCk7Ci0gICAgZmxvYXQgc2hhZG93WSA9IG9yaWVu
dGF0aW9uID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCA/IHNoYWRvdy0+eSgpLnZhbHVl
KCkgOiAtc2hhZG93LT54KCkudmFsdWUoKTsKKyAgICBmbG9hdCBzaGFkb3dYID0gb3JpZW50YXRp
b24gPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgPyBzaGFkb3ctPngoKS52YWx1
ZSgpIDogc2hhZG93LT55KCkudmFsdWUoKTsKKyAgICBmbG9hdCBzaGFkb3dZID0gb3JpZW50YXRp
b24gPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgPyBzaGFkb3ctPnkoKS52YWx1
ZSgpIDogLXNoYWRvdy0+eCgpLnZhbHVlKCk7CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChz
aGFkb3dYLCBzaGFkb3dZKTsKICAgICBhdXRvIHNoYWRvd1JhZGl1cyA9IHNoYWRvdy0+cmFkaXVz
KCk7CiAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CkBAIC0xNDEsNyAr
MTQxLDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGUKICAgICBpZiAoIW9wYXF1ZSkKICAgICAg
ICAgbV9jb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogICAgIHdoaWxlIChzaGFk
b3cpIHsKLSAgICAgICAgU2hhZG93QXBwbGllciBzaGFkb3dBcHBsaWVyKG1fY29udGV4dCwgc2hh
ZG93LCBjb2xvckZpbHRlciwgYm94UmVjdCwgbGFzdFNoYWRvd0l0ZXJhdGlvblNob3VsZERyYXdU
ZXh0LCBvcGFxdWUsIG1fdGV4dEJveElzSG9yaXpvbnRhbCA/IEZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCA6IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOworICAgICAgICBTaGFkb3dBcHBs
aWVyIHNoYWRvd0FwcGxpZXIobV9jb250ZXh0LCBzaGFkb3csIGNvbG9yRmlsdGVyLCBib3hSZWN0
LCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQsIG9wYXF1ZSwgbV90ZXh0Qm94SXNI
b3Jpem9udGFsID8gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgOiBQQUw6OkZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgICAgICBpZiAoIXNoYWRvd0FwcGxpZXIubm90aGlu
Z1RvRHJhdygpKQogICAgICAgICAgICAgcGFpbnRUZXh0T3JFbXBoYXNpc01hcmtzKGZvbnQsIHRl
eHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCB0ZXh0T3JpZ2luICsgc2hh
ZG93QXBwbGllci5leHRyYU9mZnNldCgpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5oCmluZGV4IGU0NTM0Y2JmYmYxODcwMTc2NDc0N2E1ODMzODVkNzk4ZDA3MTU5ODIuLjc4
M2U3ZGRiMjhhNjA2MGQ4NGY1MDNhN2U5MGM2ZTcwZTMwOGIwOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0UGFpbnRlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhEaXNw
bGF5TGlzdENhY2hlLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCBpbmxpbmUgdm9pZCBU
ZXh0UGFpbnRlcjo6c2V0RW1waGFzaXNNYXJrKGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGZsb2F0
IG9mZnNldCwgYwogCiBjbGFzcyBTaGFkb3dBcHBsaWVyIHsKIHB1YmxpYzoKLSAgICBTaGFkb3dB
cHBsaWVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFNoYWRvd0RhdGEqLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBs
YXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQgPSB0cnVlLCBib29sIG9wYXF1ZSA9IGZh
bHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwpOworICAg
IFNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgU2hhZG93RGF0YSosIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMqIGNvbG9yRmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHRleHRSZWN0
LCBib29sIGxhc3RTaGFkb3dJdGVyYXRpb25TaG91bGREcmF3VGV4dCA9IHRydWUsIGJvb2wgb3Bh
cXVlID0gZmFsc2UsIFBBTDo6Rm9udE9yaWVudGF0aW9uID0gUEFMOjpGb250T3JpZW50YXRpb246
Okhvcml6b250YWwpOwogICAgIEZsb2F0U2l6ZSBleHRyYU9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXh0cmFPZmZzZXQ7IH0KICAgICBib29sIG5vdGhpbmdUb0RyYXcoKSBjb25zdCB7IHJldHVy
biBtX25vdGhpbmdUb0RyYXc7IH0KICAgICBib29sIGRpZFNhdmVDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRTYXZlQ29udGV4dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCAzZDlmZjk5NWJiYzM3NDQ3ZmNhODcyMDVkYTkx
NzU5ZjdhNjI5NTk1Li4wODI4ZjIyNGI1M2EwOTQwYjFhNDM2ZDhmODE5MzBkMTFiZDdiZjgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaApA
QCAtMjUsNyArMjUsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCcmVha0xpbmVzLmgi
Ci0jaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9IeXBoZW5hdGlv
bi5oPgogI2luY2x1ZGUgIkxpbmVCcmVha2VyLmgiCiAjaW5jbHVkZSAiTGluZUluZm8uaCIKICNp
bmNsdWRlICJMaW5lTGF5b3V0U3RhdGUuaCIKQEAgLTI2Niw2ICsyNjYsMTUgQEAgaW5saW5lIHZv
aWQgQnJlYWtpbmdDb250ZXh0OjppbmNyZW1lbnQoKQogICAgIG1fYXRTdGFydCA9IGZhbHNlOwog
fQogCisvLyBXaGVuIGlnbm9yaW5nIHNwYWNlcywgdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9y
IG9iamVjdHMgdGhhdCBuZWVkIGxpbmUgYm94ZXMgc3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9yCisv
LyBoYXJkIGxpbmUgYnJlYWtzIHRvIGVuc3VyZSB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCitz
dGF0aWMgdm9pZCBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhMaW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZSYgc3RhdGUsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAg
TGVnYWN5SW5saW5lSXRlcmF0b3IgdHJhbnNpdGlvbigwLCAmcmVuZGVyZXIsIDApOworICAgIHN0
YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsKKyAgICBzdGF0ZS5zdGFydElnbm9y
aW5nU3BhY2VzKHRyYW5zaXRpb24pOworfQorCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6
OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogewogICAgIGlmIChmaXRzT25MaW5lT3JI
YW5nc0F0RW5kKCkpIHsKQEAgLTI4Nyw3ICsyOTYsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0Nv
bnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogICAgICAgICAvLyBuZWVkIHRv
IGNoZWNrIGZvciBmbG9hdHMgdG8gY2xlYXIgLSBzbyBpZiB3ZSdyZSBpZ25vcmluZyBzcGFjZXMs
IHN0b3AgaWdub3JpbmcgdGhlbSBhbmQgYWRkIGEKICAgICAgICAgLy8gcnVuIGZvciB0aGlzIG9i
amVjdC4KICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMgJiYgUmVuZGVyU3R5bGU6OnVzZWRD
bGVhcihicikgIT0gVXNlZENsZWFyOjpOb25lKQotICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhicik7Cisg
ICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2xpbmVXaGl0ZXNw
YWNlQ29sbGFwc2luZ1N0YXRlLCBicik7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgcHJlY2VkZWQg
YnkgY29sbGFwc2luZyBzcGFjZSBhbmQgYXJlIGluIGEgcmlnaHQtYWxpZ25lZCBjb250YWluZXIg
d2UgbmVlZCB0byBlbnN1cmUgdGhlIHNwYWNlIGdldHMKICAgICAgICAgLy8gY29sbGFwc2VkIGF3
YXkgc28gdGhhdCBpdCBkb2Vzbid0IHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhlIGNvbnRhaW5l
cidzIHJpZ2h0LWhhbmQgZWRnZS4KICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgcmVnYXJkbGVz
cyBvZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJlYmFzZWxpbmlu
ZyBhIGxvdCBvZiB0ZXN0IHJlc3VsdHMuCkBAIC0zNzAsNyArMzc5LDcgQEAgaW5saW5lIHZvaWQg
QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVPdXRPZkZsb3dQb3NpdGlvbmVkKFZlY3RvcjxSZW5kZXJC
b3gqPiYgcG9zaXQKICAgICAvLyB0aGVuIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyBhZ2Fpbi4KICAg
ICBpZiAoaXNJbmxpbmVUeXBlIHx8IGJveC5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkg
ewogICAgICAgICBpZiAobV9pZ25vcmluZ1NwYWNlcykKLSAgICAgICAgICAgIG1fbGluZVdoaXRl
c3BhY2VDb2xsYXBzaW5nU3RhdGUuZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMoYm94
KTsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fbGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIGJveCk7CiAgICAgICAgIG1fdHJhaWxpbmdPYmplY3Rz
LmFwcGVuZEJveElmTmVlZGVkKGJveCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBvc2l0aW9uZWRP
YmplY3RzLmFwcGVuZCgmYm94KTsKQEAgLTQzOCw3ICs0NDcsNyBAQCBpbmxpbmUgdm9pZCBCcmVh
a2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKICAgICAgICAgICAgIG1fbGluZUluZm8u
c2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmbV93aWR0aCk7CiAgICAgICAgIGlmIChtX2lnbm9y
aW5nU3BhY2VzKSB7CiAgICAgICAgICAgICBtX3RyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwotICAg
ICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5z
aWRlSWdub3JlZFNwYWNlcygqbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgICAgICAgICAgZW5z
dXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdT
dGF0ZSwgKm1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2Jsb2Nr
U3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgbV9yZXNvbHZlci5wb3NpdGlvbigpLnJlbmRl
cmVyKCkgPT0gbV9jdXJyZW50LnJlbmRlcmVyKCkKICAgICAgICAgICAgICYmIHNob3VsZFNraXBX
aGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBtX2N1cnJlbnQucmVuZGVyZXIoKSwg
bV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSkpIHsKICAgICAgICAgICAgIC8vIExpa2Ug
d2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0byBtYWtlIHN1cmUg
dGhhdCBhbnkKQEAgLTU5Myw3ICs2MDIsNyBAQCBpbmxpbmUgdm9pZCB0cnlIeXBoZW5hdGluZyhS
ZW5kZXJUZXh0JiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgQXRvbQogICAg
IGZsb2F0IGh5cGhlbldpZHRoID0gbWVhc3VyZUh5cGhlbldpZHRoKHRleHQsIGZvbnQpOwogCiAg
ICAgZmxvYXQgbWF4UHJlZml4V2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHhQb3MgLSBoeXBoZW5X
aWR0aCAtIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwotICAgIGlmICghZW5vdWdoV2lkdGhGb3JIeXBo
ZW5hdGlvbihtYXhQcmVmaXhXaWR0aCwgZm9udC5waXhlbFNpemUoKSkpCisgICAgaWYgKCFQQUw6
OmVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24obWF4UHJlZml4V2lkdGgsIGZvbnQucGl4ZWxTaXpl
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0
ZXh0LnN0eWxlKCk7CkBAIC02MDUsNyArNjE0LDcgQEAgaW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRp
bmcoUmVuZGVyVGV4dCYgdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IEF0b20K
ICAgICBpZiAocHJlZml4TGVuZ3RoIDwgbWluaW11bVByZWZpeExlbmd0aCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcHJlZml4TGVuZ3RoID0gbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXco
dGV4dC50ZXh0KCkpLnN1YnN0cmluZyhsYXN0U3BhY2UsIHBvcyAtIGxhc3RTcGFjZSksIHN0ZDo6
bWluKHByZWZpeExlbmd0aCwgcG9zIC0gbGFzdFNwYWNlIC0gbWluaW11bVN1ZmZpeExlbmd0aCkg
KyAxLCBsb2NhbGVJZGVudGlmaWVyKTsKKyAgICBwcmVmaXhMZW5ndGggPSBQQUw6Omxhc3RIeXBo
ZW5Mb2NhdGlvbihTdHJpbmdWaWV3KHRleHQudGV4dCgpKS5zdWJzdHJpbmcobGFzdFNwYWNlLCBw
b3MgLSBsYXN0U3BhY2UpLCBzdGQ6Om1pbihwcmVmaXhMZW5ndGgsIHBvcyAtIGxhc3RTcGFjZSAt
IG1pbmltdW1TdWZmaXhMZW5ndGgpICsgMSwgbG9jYWxlSWRlbnRpZmllcik7CiAgICAgaWYgKCFw
cmVmaXhMZW5ndGggfHwgcHJlZml4TGVuZ3RoIDwgbWluaW11bVByZWZpeExlbmd0aCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjk0LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250
ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wK
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUocmVuZGVyZXIsIG1fbGlu
ZUluZm8pOwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9udENhc2NhZGUo
KTsKICAgICBib29sIGlzRml4ZWRQaXRjaCA9IGZvbnQuaXNGaXhlZFBpdGNoKCk7Ci0gICAgYm9v
bCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBXZWJD
b3JlOjpjYW5IeXBoZW5hdGUoc3R5bGUuY29tcHV0ZWRMb2NhbGUoKSk7CisgICAgYm9vbCBjYW5I
eXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBQQUw6OmNhbkh5
cGhlbmF0ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKICAgICBib29sIGNhbkhhbmdQdW5jdHVh
dGlvbkF0U3RhcnQgPSBzdHlsZS5oYW5naW5nUHVuY3R1YXRpb24oKS5jb250YWlucyhIYW5naW5n
UHVuY3R1YXRpb246OkZpcnN0KTsKICAgICBib29sIGNhbkhhbmdQdW5jdHVhdGlvbkF0RW5kID0g
c3R5bGUuaGFuZ2luZ1B1bmN0dWF0aW9uKCkuY29udGFpbnMoSGFuZ2luZ1B1bmN0dWF0aW9uOjpM
YXN0KTsKICAgICBib29sIGNhbkhhbmdTdG9wT3JDb21tYUF0TGluZUVuZCA9IHN0eWxlLmhhbmdp
bmdQdW5jdHVhdGlvbigpLmNvbnRhaW5zKEhhbmdpbmdQdW5jdHVhdGlvbjo6QWxsb3dFbmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3Rz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAK
aW5kZXggYmUyZmVhMTU0NWFmYTRhNjU1MjZiOWFmNjdiYjQ4OWIzNDQxYjY3NS4uNTgwMDBlZWM1
YTQ0ZWU1OWI2MGQ3YmVhMDIyYWI5YTU2ZDBiNWU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZv
aWQgVHJhaWxpbmdPYmplY3RzOjp1cGRhdGVXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25z
Rm9yVHJhaWxpbmdCb3hlcyhMaW5lCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9i
b3hlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRUcmFuc2l0aW9uID49
IGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25zKCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgdHJhbnNpdGlvbiBmb3IgdGhpcyBib3ggeWV0
LgotICAgICAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxp
bmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgICAgIGVu
c3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0
YXRlLCBtX2JveGVzW2ldKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25zKClbY3VycmVu
dFRyYW5zaXRpb25dLnJlbmRlcmVyKCkgPT0gJihtX2JveGVzW2ldLmdldCgpKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25z
KClbY3VycmVudFRyYW5zaXRpb24gKyAxXS5yZW5kZXJlcigpID09ICYobV9ib3hlc1tpXS5nZXQo
KSkpOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVz
cGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGluZQogICAgICAgICBM
ZWdhY3lJbmxpbmVJdGVyYXRvciBlbmRNaWQoMCwgbV93aGl0ZXNwYWNlLCBwb3MpOwogICAgICAg
ICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5zdGFydElnbm9yaW5nU3BhY2VzKGVuZE1p
ZCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ib3hlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxpbmVCb3hJ
bnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMobGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIG1fYm94
ZXNbaV0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvVHJhaWxpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9U
cmFpbGluZ09iamVjdHMuaAppbmRleCAzNmVhM2JiN2U4ZTgyYjI1MmRkMTUwYTMwNjdiYThkMDdl
NDc3YzJjLi45OTQwZjcxMzVmMTBjMGQzYTdlODk5Mzg3ZWZlMzQ0MDljZjQ5OTJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaApAQCAtMjYs
NiArMjYsMTIgQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIFBBTCB7
Cit0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJlc29sdmVy
OwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIElzb2xhdGVSdW4+
IGNsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlOwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y
PiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOworfQorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIExlZ2FjeUlubGluZUl0ZXJhdG9yOwpAQCAtMzUsMTEgKzQxLDggQEAgY2xh
c3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBCaWRpUnVuOwogc3RydWN0IEJpZGlJc29sYXRlZFJ1bjsK
IAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZl
cjsKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBJc29sYXRlUnVu
PiBjbGFzcyBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTsKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv
cj4gY2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLXR5cGVkZWYgQmlkaVJlc29sdmVy
V2l0aElzb2xhdGU8TGVnYWN5SW5saW5lSXRlcmF0b3IsIEJpZGlSdW4sIEJpZGlJc29sYXRlZFJ1
bj4gSW5saW5lQmlkaVJlc29sdmVyOwotdHlwZWRlZiBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
PExlZ2FjeUlubGluZUl0ZXJhdG9yPiBMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKK3R5
cGVkZWYgUEFMOjpCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRvciwg
QmlkaVJ1biwgQmlkaUlzb2xhdGVkUnVuPiBJbmxpbmVCaWRpUmVzb2x2ZXI7Cit0eXBlZGVmIFBB
TDo6V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRvcj4gTGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7CiAKIGNsYXNzIFRyYWlsaW5nT2JqZWN0cyB7CiBwdWJs
aWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MQmxvY2suY3BwCmluZGV4IGVkOGYyMGY5ODViYWEyNTQ3NDg0MWIyNjhhNDU0OTc5NjRlZjJl
YmUuLmIyZGI0OGNkYjg2MzU4Y2M5NDJkYzFhN2M3OTY2OWQ2ZTg3ZTY3NGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3Bw
CkBAIC04OSw3ICs4OSw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6Om1hdGhBeGlz
SGVpZ2h0KCkgY29uc3QKIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6bWlycm9ySWZO
ZWVkZWQoTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBMYXlvdXRVbml0IGJveFdpZHRoKSBj
b25zdAogewotICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJU
TCkKKyAgICBpZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJU
TCkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gYm94V2lkdGggLSBob3Jpem9udGFs
T2Zmc2V0OwogCiAgICAgcmV0dXJuIGhvcml6b250YWxPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmlu
ZGV4IGFhMWZlNTUyYTE4M2FhZDMyMmJjYjM0ZDEwOGZlMWFhYzEzMzUxNTAuLmFhMzk0YmUyNGEx
NWVhODVkOGRlZTkxNWYzMmU2NjYxNzI1ZjI2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC0yMzcs
NyArMjM3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2cKICAgICAgICAgc2V0TG9naWNhbFdp
ZHRoKHdpZHRoKTsKIAogICAgICAgICAvLyBXZSB0aGVuIG1vdmUgdGhlIGNoaWxkcmVuIHRvIHRh
a2Ugc3BhY2luZyBpbnRvIGFjY291bnQuCi0gICAgICAgIExheW91dFBvaW50IGhvcml6b250YWxT
aGlmdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxlYWRpbmdT
cGFjZVZhbHVlIDogLWxlYWRpbmdTcGFjZVZhbHVlLCAwX2x1KTsKKyAgICAgICAgTGF5b3V0UG9p
bnQgaG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1ZSwgMF9sdSk7
CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0
aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgaG9yaXpvbnRhbFNoaWZ0KTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDZkMzdiZDIwYTVlYTIxMjBi
YWE0YTNlYjU4ZGQ4ODlkZGMzYjkwOTEuLjdiYzY2Y2RkNDQ1NzQ5ZDY5YTg3OWNiNGQ0MWNjZjZh
ZjkwZTgyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBA
IC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNyZWF0ZVBvbHln
b25TaGFwZShWZWN0b3I8RmxvYXRQb2ludD4mJiB2ZXJ0aWNlcywKICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxQb2x5Z29uU2hhcGU+KFdURk1vdmUodmVydGljZXMpLCBmaWxsUnVsZSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRmxvYXRSZWN0IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQorc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgUEFMOjpXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpKQogICAgICAgICByZXR1cm4gcmVjdDsKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGlubGlu
ZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbG9naWMKICAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgUEFMOjpXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpKQogICAgICAgICByZXR1cm4gcG9pbnQ7CkBAIC04NSwxNCArODUsMTQgQEAgc3Rh
dGljIGlubGluZSBGbG9hdFBvaW50IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IGwKICAgICByZXR1cm4gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9naWNhbChjb25z
dCBGbG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorc3RhdGljIGlubGlu
ZSBGbG9hdFNpemUgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
UEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1cm4gc2l6ZTsKICAgICByZXR1cm4g
c2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBl
OjpjcmVhdGVTaGFwZShjb25zdCBCYXNpY1NoYXBlJiBiYXNpY1NoYXBlLCBjb25zdCBMYXlvdXRT
aXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IG1hcmdp
bikKK3N0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVNoYXBlKGNvbnN0IEJhc2lj
U2hhcGUmIGJhc2ljU2hhcGUsIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBQQUw6
OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pCiB7CiAgICAgYm9vbCBob3Jp
em9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7
CiAgICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBsb2dpY2FsQm94
U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7CkBAIC0xNzMsNyArMTczLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgQmFzaWNT
aGFwZSYgYmFzaWNTaGFwZSwgY29uc3QgTGEKICAgICByZXR1cm4gc2hhcGU7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwg
ZmxvYXQgdGhyZXNob2xkLCBjb25zdCBMYXlvdXRSZWN0JiBpbWFnZVIsIGNvbnN0IExheW91dFJl
Y3QmIG1hcmdpblIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pCitzdGQ6
OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2Us
IGZsb2F0IHRocmVzaG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSLCBjb25zdCBMYXlvdXRS
ZWN0JiBtYXJnaW5SLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4p
CiB7CiAgICAgQVNTRVJUKG1hcmdpblIuaGVpZ2h0KCkgPj0gMCk7CiAKQEAgLTIzNiw3ICsyMzYs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFn
ZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShjb25zdCBS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBt
YXJnaW4pCitzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShjb25z
dCBSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IGZsb2F0IG1hcmdpbikKIHsKICAgICBBU1NFUlQocm91bmRlZFJlY3QucmVjdCgpLndpZHRoKCkg
Pj0gMCAmJiByb3VuZGVkUmVjdC5yZWN0KCkuaGVpZ2h0KCkgPj0gMCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaAppbmRleCAyYmNhN2I1MGY0MzY4OTEyY2NjN2Y4MGM4
YTU4MzE4OTE0NjQzMThmLi45Y2JmYTg0M2I5ZjNmZTdlOTFhZjc5MDM4NDY4ZjA3ZDg5YjY3ZDQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1
ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAgICAgICAg
UGF0aCBtYXJnaW5TaGFwZTsKICAgICB9OwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxT
aGFwZT4gY3JlYXRlU2hhcGUoY29uc3QgQmFzaWNTaGFwZSYsIGNvbnN0IExheW91dFNpemUmIGxv
Z2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSosIGZsb2F0IHRocmVz
aG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBtYXJn
aW5SZWN0LCBXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFNoYXBlPiBjcmVhdGVCb3hTaGFwZShjb25zdCBSb3VuZGVkUmVjdCYsIFdyaXRpbmdN
b2RlLCBmbG9hdCBtYXJnaW4pOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNy
ZWF0ZVNoYXBlKGNvbnN0IEJhc2ljU2hhcGUmLCBjb25zdCBMYXlvdXRTaXplJiBsb2dpY2FsQm94
U2l6ZSwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSosIGZsb2F0IHRocmVzaG9s
ZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBtYXJnaW5S
ZWN0LCBQQUw6OldyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8U2hhcGU+IGNyZWF0ZUJveFNoYXBlKGNvbnN0IFJvdW5kZWRSZWN0JiwgUEFMOjpX
cml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKIAogICAgIHZpcnR1YWwgflNoYXBlKCkgPSBkZWZh
dWx0OwogCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAobGluZVRv
cCA8IHJlY3QubWF4WSgpICYmIGxpbmVUb3AgKyBsaW5lSGVpZ2h0ID4gcmVjdC55KCkpIHx8ICgh
bGluZUhlaWdodCAmJiBsaW5lVG9wID09IHJlY3QueSgpKTsKICAgICB9CiAKLSAgICBXcml0aW5n
TW9kZSBtX3dyaXRpbmdNb2RlOworICAgIFBBTDo6V3JpdGluZ01vZGUgbV93cml0aW5nTW9kZTsK
ICAgICBmbG9hdCBtX21hcmdpbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCmluZGV4IGMxYjhjNGEzMzJiOTJlZjY4
OTBjZmZlNmQyNjc2NmZiOWFmMmQ4NmUuLjIwOTQzZjA2NjI1ODVkMWJlODUwNjRmNzAzMDI0N2E5
ZTc3OGVmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZU91dHNpZGVJbmZvLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0
IGdldFNoYXBlSW1hZ2VNYXJnaW5SZWN0KGNvbnN0IFJlbmRlckJveCYgcmVuZGVyQm94LCBjb25z
dCBMYXlvCiAgICAgcmV0dXJuIExheW91dFJlY3QobWFyZ2luQm94T3JpZ2luLCBtYXJnaW5SZWN0
U2l6ZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGVPdXRzaWRlSW5mbzo6Y3Jl
YXRlU2hhcGVGb3JJbWFnZShTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCBzaGFwZUltYWdl
VGhyZXNob2xkLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKSBjb25zdAor
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVTaGFwZUZvcklt
YWdlKFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UsIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQsIFBB
TDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IG1hcmdpbikgY29uc3QKIHsKICAgICBM
YXlvdXRTaXplIGltYWdlU2l6ZSA9IG1fcmVuZGVyZXIuY2FsY3VsYXRlSW1hZ2VJbnRyaW5zaWNE
aW1lbnNpb25zKHN0eWxlSW1hZ2UsIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUsIFJlbmRlcklt
YWdlOjpTY2FsZUJ5RWZmZWN0aXZlWm9vbSk7CiAgICAgc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVy
Q29udGV4dEZvclJlbmRlcmVyKG1fcmVuZGVyZXIsIGltYWdlU2l6ZSwgbV9yZW5kZXJlci5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSk7CkBAIC0xNjksNyArMTY5LDcgQEAgY29uc3QgU2hhcGUmIFNo
YXBlT3V0c2lkZUluZm86OmNvbXB1dGVkU2hhcGUoKSBjb25zdAogICAgIEFTU0VSVChtX3JlbmRl
cmVyLmNvbnRhaW5pbmdCbG9jaygpKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmlu
Z0Jsb2NrU3R5bGUgPSBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpOwogCi0g
ICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBjb250YWluaW5nQmxvY2tTdHlsZS53cml0aW5n
TW9kZSgpOworICAgIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBjb250YWluaW5nQmxv
Y2tTdHlsZS53cml0aW5nTW9kZSgpOwogICAgIGF1dG8gbWFyZ2luID0gWyZdIHsKICAgICAgICAg
YXV0byBzaGFwZU1hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9yZW5kZXJlci5zdHlsZSgp
LnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkgPyBtX3JlbmRlcmVy
LmNvbnRhaW5pbmdCbG9jaygpLT5jb250ZW50V2lkdGgoKSA6IDBfbHUpOwogICAgICAgICByZXR1
cm4gaXNuYW4oc2hhcGVNYXJnaW4pID8gMC4wZiA6IHNoYXBlTWFyZ2luOwpAQCAtMTk5LDI2ICsx
OTksMjYgQEAgY29uc3QgU2hhcGUmIFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVkU2hhcGUoKSBj
b25zdAogICAgIHJldHVybiAqbV9zaGFwZTsKIH0KIAotc3RhdGljIGlubGluZSBMYXlvdXRVbml0
IGJvcmRlckJlZm9yZUluV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYm9yZGVyQmVm
b3JlSW5Xcml0aW5nTW9kZShjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBQQUw6OldyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKQogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpOwot
ICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
Qm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6IHJldHVybiByZW5k
ZXJlci5ib3JkZXJMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6IHJl
dHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
VG9wVG9Cb3R0b206IHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKTsKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9tKCk7
CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDogcmV0dXJuIHJlbmRlcmVy
LmJvcmRlckxlZnQoKTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiBy
ZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQmVmb3JlKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlSW5Xcml0aW5nTW9kZShj
b25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3N0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlSW5Xcml0aW5nTW9kZShj
b25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQog
ewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BU
b0JvdHRvbTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1Rv
cCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIu
Ym9yZGVyQm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0
aW5nTW9kZTo6TGVmdFRvUmlnaHQ6IHJldHVybiByZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci5wYWRkaW5nTGVmdCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiBy
ZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOwor
ICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206IHJldHVybiByZW5kZXJlci5i
b3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKTsKKyAgICBjYXNlIFBBTDo6V3JpdGlu
Z01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9tKCkgKyByZW5k
ZXJlci5wYWRkaW5nQm90dG9tKCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodDogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdMZWZ0
KCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDogcmV0dXJuIHJlbmRl
cmVyLmJvcmRlclJpZ2h0KCkgKyByZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKaW5kZXggOTQ4NDMxNzE5NDdjMDIzMDlhYjdmNGZi
MWI5N2MyNjM4ODJlZTM3MS4uZGVjNjNhNWY0YTcxNGIxNzc2YTZhMWVmZDc5MjczZDNjZGIwOTUz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNoYXBlT3V0
c2lkZUluZm8qIGluZm8oY29uc3QgUmVuZGVyQm94JiBrZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5n
ZXQoJmtleSk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNyZWF0
ZVNoYXBlRm9ySW1hZ2UoU3R5bGVJbWFnZSosIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQsIFdy
aXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gY3JlYXRlU2hhcGVGb3JJbWFnZShTdHlsZUltYWdlKiwgZmxvYXQgc2hhcGVJbWFnZVRocmVz
aG9sZCwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKSBjb25zdDsKIAogICAgIExheW91
dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRPZmZzZXQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9OaW5lUGllY2VJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05p
bmVQaWVjZUltYWdlLmgKaW5kZXggYzM5ZGVjMzM0NDEyZGQ5NTA2MGE1YTE2ZjQyZmY5NDgyYmUz
YmQ0ZS4uZGE2Y2IxMjNlMjIzM2NlZDM4ZjA3MWNmM2ExZjk5ZWQzOTgwYTAzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgKQEAgLTgyLDI0
ICs4MiwyNCBAQCBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsUGllY2UoSW1hZ2VQaWVjZSBwaWVjZSkK
ICAgICByZXR1cm4gcGllY2UgPT0gTGVmdFBpZWNlIHx8IHBpZWNlID09IFJpZ2h0UGllY2UgfHwg
cGllY2UgPT0gTWlkZGxlUGllY2U7CiB9CiAKLWlubGluZSBzdGQ6Om9wdGlvbmFsPEJveFNpZGU+
IGltYWdlUGllY2VIb3Jpem9udGFsU2lkZShJbWFnZVBpZWNlIHBpZWNlKQoraW5saW5lIHN0ZDo6
b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiBpbWFnZVBpZWNlSG9yaXpvbnRhbFNpZGUoSW1hZ2VQaWVj
ZSBwaWVjZSkKIHsKICAgICBpZiAocGllY2UgPT0gVG9wTGVmdFBpZWNlIHx8IHBpZWNlID09IFRv
cFBpZWNlIHx8IHBpZWNlID09IFRvcFJpZ2h0UGllY2UpCi0gICAgICAgIHJldHVybiBCb3hTaWRl
OjpUb3A7CisgICAgICAgIHJldHVybiBQQUw6OkJveFNpZGU6OlRvcDsKIAogICAgIGlmIChwaWVj
ZSA9PSBCb3R0b21MZWZ0UGllY2UgfHwgcGllY2UgPT0gQm90dG9tUGllY2UgfHwgcGllY2UgPT0g
Qm90dG9tUmlnaHRQaWVjZSkKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJvdHRvbTsKKyAgICAg
ICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIH0KIAotaW5saW5lIHN0ZDo6b3B0aW9uYWw8Qm94U2lkZT4gaW1hZ2VQaWVjZVZlcnRpY2Fs
U2lkZShJbWFnZVBpZWNlIHBpZWNlKQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRl
PiBpbWFnZVBpZWNlVmVydGljYWxTaWRlKEltYWdlUGllY2UgcGllY2UpCiB7CiAgICAgaWYgKHBp
ZWNlID09IFRvcExlZnRQaWVjZSB8fCBwaWVjZSA9PSBMZWZ0UGllY2UgfHwgcGllY2UgPT0gQm90
dG9tTGVmdFBpZWNlKQotICAgICAgICByZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAgICAgICAgcmV0
dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKIAogICAgIGlmIChwaWVjZSA9PSBUb3BSaWdodFBpZWNl
IHx8IHBpZWNlID09IFJpZ2h0UGllY2UgfHwgcGllY2UgPT0gQm90dG9tUmlnaHRQaWVjZSkKLSAg
ICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRl
OjpSaWdodDsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA2YjM2MzhkMWE4ZjBlMWU2
NzRhMzVmZTljZjJlM2NiNWVmNmI4ZDBhLi5iZDRlOTMzMDE1YWRjNWJmNDkxNzJjOGY4ODY2OWM1
N2E1ZGI0ZmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKQEAgLTIyNjIsMTMgKzIyNjIsMTMgQEAgQ29sb3IgUmVuZGVyU3R5bGU6OmVmZmVj
dGl2ZUFjY2VudENvbG9yKCkgY29uc3QKIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJTdHlsZTo6
Ym9yZGVyQmVmb3JlKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKLSAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyVG9wKCk7Ci0gICAgY2FzZSBX
cml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0
b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIGJvcmRlckJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAg
ICAgICAgcmV0dXJuIGJvcmRlclJpZ2h0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjI3OCwxMyArMjI3OCwxMyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyU3R5
bGU6OmJvcmRlckJlZm9yZSgpIGNvbnN0CiBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyU3R5bGU6
OmJvcmRlckFmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKLSAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7Ci0gICAgY2Fz
ZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpC
b3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIGJvcmRlclRvcCgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJSaWdodCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6
OlJpZ2h0VG9MZWZ0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CiAg
ICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjMwOCwxMyArMjMwOCwxMyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyU3R5
bGU6OmJvcmRlckVuZCgpIGNvbnN0CiBmbG9hdCBSZW5kZXJTdHlsZTo6Ym9yZGVyQmVmb3JlV2lk
dGgoKSBjb25zdAogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUoKSkgewotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9C
b3R0b206CiAgICAgICAgIHJldHVybiBib3JkZXJUb3BXaWR0aCgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9U
b3A6CiAgICAgICAgIHJldHVybiBib3JkZXJCb3R0b21XaWR0aCgpOwotICAgIGNhc2UgV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmln
aHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0V2lkdGgoKTsKLSAgICBjYXNlIFdyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0
OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHRXaWR0aCgpOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIzMjQsMTMgKzIzMjQsMTMgQEAgZmxvYXQgUmVuZGVyU3R5bGU6
OmJvcmRlckJlZm9yZVdpZHRoKCkgY29uc3QKIGZsb2F0IFJlbmRlclN0eWxlOjpib3JkZXJBZnRl
cldpZHRoKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tV2lkdGgoKTsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJv
dHRvbVRvVG9wOgogICAgICAgICByZXR1cm4gYm9yZGVyVG9wV2lkdGgoKTsKLSAgICBjYXNlIFdy
aXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRU
b1JpZ2h0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHRXaWR0aCgpOwotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0V2lkdGgoKTsKICAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNDEwLDIzICsyNDEwLDIzIEBAIExheW91dEJveEV4dGVu
dCBSZW5kZXJTdHlsZTo6aW1hZ2VPdXRzZXRzKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkg
Y29uc3QKICAgICB9OwogfQogCi1zdGQ6OnBhaXI8Rm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlw
aE9yaWVudGF0aW9uPiBSZW5kZXJTdHlsZTo6Zm9udEFuZEdseXBoT3JpZW50YXRpb24oKQorc3Rk
OjpwYWlyPFBBTDo6Rm9udE9yaWVudGF0aW9uLCBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+
IFJlbmRlclN0eWxlOjpmb250QW5kR2x5cGhPcmllbnRhdGlvbigpCiB7CiAgICAgLy8gRklYTUU6
IFRleHRPcmllbnRhdGlvblNpZGV3YXlzIHNob3VsZCBtYXAgdG8gc2lkZXdheXMtbGVmdCBpbiB2
ZXJ0aWNhbC1sciwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCB5ZXQuCiAKICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHsgRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsLCBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OworICAgICAgICByZXR1
cm4geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgUEFMOjpOb25DSktHbHlwaE9y
aWVudGF0aW9uOjpNaXhlZCB9OwogCiAgICAgc3dpdGNoICh0ZXh0T3JpZW50YXRpb24oKSkgewog
ICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uOjpNaXhlZDoKLSAgICAgICAgcmV0dXJuIHsgRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQgfTsKKyAg
ICAgICAgcmV0dXJuIHsgUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBQQUw6Ok5vbkNK
S0dseXBoT3JpZW50YXRpb246Ok1peGVkIH07CiAgICAgY2FzZSBUZXh0T3JpZW50YXRpb246OlVw
cmlnaHQ6Ci0gICAgICAgIHJldHVybiB7IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIE5vbkNK
S0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfTsKKyAgICAgICAgcmV0dXJuIHsgUEFMOjpGb250
T3JpZW50YXRpb246OlZlcnRpY2FsLCBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmln
aHQgfTsKICAgICBjYXNlIFRleHRPcmllbnRhdGlvbjo6U2lkZXdheXM6Ci0gICAgICAgIHJldHVy
biB7IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6
TWl4ZWQgfTsKKyAgICAgICAgcmV0dXJuIHsgUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250
YWwsIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQgfTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgRm9udE9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsLCBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OworICAg
ICAgICByZXR1cm4geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgUEFMOjpOb25D
SktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OwogICAgIH0KIH0KIApAQCAtMjcxMiw3ICsyNzEy
LDcgQEAgZmxvYXQgUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQoKSBjb25zdAogCiBib29sIFJl
bmRlclN0eWxlOjpzaG91bGRQbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgfHwgd3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ7
CisgICAgcmV0dXJuICghaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpIHx8IHdyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQ7CiB9CiAKIFZlY3RvcjxQYWludFR5cGUsIDM+IFJlbmRlclN0eWxlOjpwYWludFR5cGVz
Rm9yUGFpbnRPcmRlcihQYWludE9yZGVyIG9yZGVyKQpAQCAtMjgwOCw3ICsyODA4LDcgQEAgVXNl
ZENsZWFyIFJlbmRlclN0eWxlOjp1c2VkQ2xlYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikKICAgICBjYXNlIENsZWFyOjpJbmxpbmVTdGFydDoKICAgICBjYXNlIENsZWFyOjpJbmxpbmVF
bmQ6CiAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID0gcmVuZGVyZXIuY29u
dGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChjb250YWlu
aW5nQmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoY29u
dGFpbmluZ0Jsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAg
ICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENs
ZWFyOjpSaWdodCA6IFVzZWRDbGVhcjo6TGVmdDsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFs
dWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENsZWFyOjpMZWZ0IDogVXNlZENsZWFyOjpS
aWdodDsKICAgICB9CkBAIC0yODI5LDcgKzI4MjksNyBAQCBVc2VkRmxvYXQgUmVuZGVyU3R5bGU6
OnVzZWRGbG9hdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIGNhc2UgRmxvYXQ6
OklubGluZVN0YXJ0OgogICAgIGNhc2UgRmxvYXQ6OklubGluZUVuZDoKICAgICAgICAgYXV0byBj
b250YWluaW5nQmxvY2tEaXJlY3Rpb24gPSByZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5
bGUoKS5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0RpcmVjdGlvbiA9
PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tEaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0
ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6OlJpZ2h0IDogVXNlZEZs
b2F0OjpMZWZ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5l
U3RhcnQgPyBVc2VkRmxvYXQ6OkxlZnQgOiBVc2VkRmxvYXQ6OlJpZ2h0OwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNGQxZTc4Yjk0
OTMzMzQxNzVmODJiYzA2OWE5MmQ2Yjc0YWQ2Y2E0ZS4uZmU1YmEzOWY2MzBiN2VmMTEyMDQ2ODUz
MDUzYTcwZWQ4NThjNGVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKQEAgLTY1LDEzICs2NSwxMyBAQAogI2luY2x1ZGUgIlN0eWxlU3Vycm91bmRE
YXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVUcmFuc2Zvcm1EYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVW
aXN1YWxEYXRhLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQv
VGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgIlRvdWNoQWN0
aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCiAjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuaWNvZGVCaWRpLmg+CiAjaW5jbHVk
ZSA8d3RmL0RhdGFSZWYuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMzQ4LDcgKzM0OCw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBMZW5ndGhCb3gmIGNsaXAoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbERhdGEtPmNsaXA7IH0K
ICAgICBib29sIGhhc0NsaXAoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbERhdGEtPmhhc0NsaXA7
IH0KIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEVVbmljb2RlQmlkaT4obV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSk7IH0K
KyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFBBTDo6RVVuaWNvZGVCaWRpPihtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRp
KTsgfQogCiAgICAgQ2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDbGVh
cj4obV9ub25Jbmhlcml0ZWRGbGFncy5jbGVhcik7IH0KICAgICBzdGF0aWMgVXNlZENsZWFyIHVz
ZWRDbGVhcihjb25zdCBSZW5kZXJPYmplY3QmKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgc3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKICAgICBmbG9hdCBjb21wdXRl
ZEZvbnRTaXplKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY29tcHV0ZWRGb250UGl4ZWxTaXplKCkg
Y29uc3Q7Ci0gICAgc3RkOjpwYWlyPEZvbnRPcmllbnRhdGlvbiwgTm9uQ0pLR2x5cGhPcmllbnRh
dGlvbj4gZm9udEFuZEdseXBoT3JpZW50YXRpb24oKTsKKyAgICBzdGQ6OnBhaXI8UEFMOjpGb250
T3JpZW50YXRpb24sIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gZm9udEFuZEdseXBoT3Jp
ZW50YXRpb24oKTsKIAogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBmb250VmFyaWF0aW9uU2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS52YXJpYXRpb25TZXR0aW5n
cygpOyB9CiAgICAgRm9udFNlbGVjdGlvblZhbHVlIGZvbnRXZWlnaHQoKSBjb25zdCB7IHJldHVy
biBmb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKTsgfQpAQCAtMzk0LDggKzM5NCw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICBUZXh0Wm9vbSB0ZXh0Wm9vbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHRab29tPihtX3JhcmVJbmhlcml0ZWREYXRhLT50ZXh0Wm9vbSk7IH0KIAotICAgIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERp
cmVjdGlvbj4obV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24pOyB9Ci0gICAgYm9vbCBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9pbmhlcml0ZWRGbGFncy5k
aXJlY3Rpb24pOyB9CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KICAgICBib29s
IGhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX25vbkluaGVyaXRl
ZEZsYWdzLmhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb247IH0KIAogICAgIGNvbnN0IExlbmd0aCYg
c3BlY2lmaWVkTGluZUhlaWdodCgpIGNvbnN0OwpAQCAtNzkxLDExICs3OTEsMTEgQEAgcHVibGlj
OgogICAgIFRleHRTZWN1cml0eSB0ZXh0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0U2VjdXJpdHk+KG1fcmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0K
ICAgICBJbnB1dFNlY3VyaXR5IGlucHV0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxJbnB1dFNlY3VyaXR5PihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5pbnB1dFNlY3VyaXR5
KTsgfQogCi0gICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxXcml0aW5nTW9kZT4obV9pbmhlcml0ZWRGbGFncy53cml0aW5nTW9kZSk7IH0KLSAg
ICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KLSAgICBib29sIGlzVmVy
dGljYWxXcml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzVmVydGljYWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQotICAgIGJvb2wgaXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUoKSk7IH0KLSAgICBib29sIGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gV2ViQ29yZTo6aXNGbGlwcGVkV3JpdGluZ01vZGUod3JpdGluZ01vZGUo
KSk7IH0KKyAgICBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpXcml0aW5nTW9kZT4obV9pbmhlcml0ZWRGbGFncy53cml0aW5nTW9k
ZSk7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
UEFMOjppc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQorICAgIGJvb2wg
aXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUEFMOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KKyAgICBib29sIGlzRmxpcHBlZExpbmVzV3JpdGlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBQQUw6OmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUoKSk7IH0KKyAgICBib29sIGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gUEFMOjppc0ZsaXBwZWRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQog
CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBpbWFnZU9yaWVudGF0aW9uKCkgY29uc3Q7CiAKQEAgLTk2
Niw3ICs5NjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwKExlbmd0aCYmIHRvcCwgTGVu
Z3RoJiYgcmlnaHQsIExlbmd0aCYmIGJvdHRvbSwgTGVuZ3RoJiYgbGVmdCk7CiAgICAgdm9pZCBz
ZXRDbGlwKExlbmd0aEJveCYmIGJveCkgeyBTRVRfVkFSKG1fdmlzdWFsRGF0YSwgY2xpcCwgV1RG
TW92ZShib3gpKTsgfQogCi0gICAgdm9pZCBzZXRVbmljb2RlQmlkaShFVW5pY29kZUJpZGkgdikg
eyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRpID0gdjsgfQorICAgIHZvaWQgc2V0VW5p
Y29kZUJpZGkoUEFMOjpFVW5pY29kZUJpZGkgdikgeyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNv
ZGVCaWRpID0gdjsgfQogCiAgICAgdm9pZCBzZXRDbGVhcihDbGVhciB2KSB7IG1fbm9uSW5oZXJp
dGVkRmxhZ3MuY2xlYXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KICAgICB2b2lkIHNl
dFRhYmxlTGF5b3V0KFRhYmxlTGF5b3V0VHlwZSB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MudGFi
bGVMYXlvdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KQEAgLTk5NCw3ICs5OTQsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oVGV4dFVuZGVybGlu
ZVBvc2l0aW9uIHBvc2l0aW9uKSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFVu
ZGVybGluZVBvc2l0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pKTsgfQogICAg
IHZvaWQgc2V0VGV4dFVuZGVybGluZU9mZnNldChUZXh0VW5kZXJsaW5lT2Zmc2V0IHRleHRVbmRl
cmxpbmVPZmZzZXQpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0VW5kZXJsaW5l
T2Zmc2V0LCB0ZXh0VW5kZXJsaW5lT2Zmc2V0KTsgfQogICAgIHZvaWQgc2V0VGV4dERlY29yYXRp
b25UaGlja25lc3MoVGV4dERlY29yYXRpb25UaGlja25lc3MgdGV4dERlY29yYXRpb25UaGlja25l
c3MpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVz
cywgdGV4dERlY29yYXRpb25UaGlja25lc3MpOyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4
dERpcmVjdGlvbiB2KSB7IG1faW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHYpOyB9CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9u
IHYpIHsgbV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dik7IH0KICAgICB2b2lkIHNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oYm9vbCB2KSB7IG1f
bm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldERpcmVjdGlvbiA9IHY7IH0KICAgICB2
b2lkIHNldExpbmVIZWlnaHQoTGVuZ3RoJiYpOwogICAgIGJvb2wgc2V0Wm9vbShmbG9hdCk7CkBA
IC0xNTE5LDcgKzE1MTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rpc3BsYXlUYWJsZU9yVGFi
bGVQYXJ0KCkgY29uc3QgeyByZXR1cm4gaXNEaXNwbGF5VGFibGVPclRhYmxlUGFydChkaXNwbGF5
KCkpOyB9CiAgICAgYm9vbCBpc09yaWdpbmFsRGlzcGxheUxpc3RJdGVtVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGlzRGlzcGxheUxpc3RJdGVtVHlwZShvcmlnaW5hbERpc3BsYXkoKSk7IH0KIAotICAg
IGJvb2wgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUpOworICAgIGJvb2wgc2V0V3JpdGluZ01v
ZGUoUEFMOjpXcml0aW5nTW9kZSk7CiAKICAgICBib29sIGhhc0V4cGxpY2l0bHlTZXRXcml0aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNl
dFdyaXRpbmdNb2RlOyB9CiAgICAgdm9pZCBzZXRIYXNFeHBsaWNpdGx5U2V0V3JpdGluZ01vZGUo
Ym9vbCB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldFdyaXRpbmdNb2Rl
ID0gdjsgfQpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIENsZWFy
IGluaXRpYWxDbGVhcigpIHsgcmV0dXJuIENsZWFyOjpOb25lOyB9CiAgICAgc3RhdGljIERpc3Bs
YXlUeXBlIGluaXRpYWxEaXNwbGF5KCkgeyByZXR1cm4gRGlzcGxheVR5cGU6OklubGluZTsgfQot
ICAgIHN0YXRpYyBFVW5pY29kZUJpZGkgaW5pdGlhbFVuaWNvZGVCaWRpKCkgeyByZXR1cm4gVUJO
b3JtYWw7IH0KKyAgICBzdGF0aWMgUEFMOjpFVW5pY29kZUJpZGkgaW5pdGlhbFVuaWNvZGVCaWRp
KCkgeyByZXR1cm4gUEFMOjpVQk5vcm1hbDsgfQogICAgIHN0YXRpYyBQb3NpdGlvblR5cGUgaW5p
dGlhbFBvc2l0aW9uKCkgeyByZXR1cm4gUG9zaXRpb25UeXBlOjpTdGF0aWM7IH0KICAgICBzdGF0
aWMgVmVydGljYWxBbGlnbiBpbml0aWFsVmVydGljYWxBbGlnbigpIHsgcmV0dXJuIFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lOyB9CiAgICAgc3RhdGljIEZsb2F0IGluaXRpYWxGbG9hdGluZygpIHsg
cmV0dXJuIEZsb2F0OjpOb25lOyB9CkBAIC0xNTc3LDggKzE1NzcsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIENhcHRpb25TaWRlIGluaXRpYWxDYXB0aW9uU2lkZSgpIHsgcmV0dXJuIENhcHRpb25T
aWRlOjpUb3A7IH0KICAgICBzdGF0aWMgQ29sdW1uQXhpcyBpbml0aWFsQ29sdW1uQXhpcygpIHsg
cmV0dXJuIENvbHVtbkF4aXM6OkF1dG87IH0KICAgICBzdGF0aWMgQ29sdW1uUHJvZ3Jlc3Npb24g
aW5pdGlhbENvbHVtblByb2dyZXNzaW9uKCkgeyByZXR1cm4gQ29sdW1uUHJvZ3Jlc3Npb246Ok5v
cm1hbDsgfQotICAgIHN0YXRpYyBUZXh0RGlyZWN0aW9uIGluaXRpYWxEaXJlY3Rpb24oKSB7IHJl
dHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBzdGF0aWMgV3JpdGluZ01vZGUgaW5pdGlh
bFdyaXRpbmdNb2RlKCkgeyByZXR1cm4gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOyB9CisgICAg
c3RhdGljIFBBTDo6VGV4dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0aW9uKCkgeyByZXR1cm4gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBzdGF0aWMgUEFMOjpXcml0aW5nTW9kZSBpbml0
aWFsV3JpdGluZ01vZGUoKSB7IHJldHVybiBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTsg
fQogICAgIHN0YXRpYyBUZXh0Q29tYmluZSBpbml0aWFsVGV4dENvbWJpbmUoKSB7IHJldHVybiBU
ZXh0Q29tYmluZTo6Tm9uZTsgfQogICAgIHN0YXRpYyBUZXh0T3JpZW50YXRpb24gaW5pdGlhbFRl
eHRPcmllbnRhdGlvbigpIHsgcmV0dXJuIFRleHRPcmllbnRhdGlvbjo6TWl4ZWQ7IH0KICAgICBz
dGF0aWMgT2JqZWN0Rml0IGluaXRpYWxPYmplY3RGaXQoKSB7IHJldHVybiBPYmplY3RGaXQ6OkZp
bGw7IH0KQEAgLTE5MjUsNyArMTkyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHZl
cnRpY2FsQWxpZ24gOiA0OyAvLyBWZXJ0aWNhbEFsaWduCiAgICAgICAgIHVuc2lnbmVkIGNsZWFy
IDogMzsgLy8gQ2xlYXIKICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gOiAzOyAvLyBQb3NpdGlv
blR5cGUKLSAgICAgICAgdW5zaWduZWQgdW5pY29kZUJpZGkgOiAzOyAvLyBFVW5pY29kZUJpZGkK
KyAgICAgICAgdW5zaWduZWQgdW5pY29kZUJpZGkgOiAzOyAvLyBQQUw6OkVVbmljb2RlQmlkaQog
ICAgICAgICB1bnNpZ25lZCBmbG9hdGluZyA6IDM7IC8vIEZsb2F0CiAgICAgICAgIHVuc2lnbmVk
IHRhYmxlTGF5b3V0IDogMTsgLy8gVGFibGVMYXlvdXRUeXBlCiAKQEAgLTIzNzgsNyArMjM3OCw3
IEBAIGlubGluZSBib29sIFJlbmRlclN0eWxlOjppc0Rpc3BsYXlSZWdpb25UeXBlKCkgY29uc3QK
ICAgICAgICAgfHwgZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpMaXN0SXRlbTsKIH0KIAotaW5s
aW5lIGJvb2wgUmVuZGVyU3R5bGU6OnNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHYpCitpbmxp
bmUgYm9vbCBSZW5kZXJTdHlsZTo6c2V0V3JpdGluZ01vZGUoUEFMOjpXcml0aW5nTW9kZSB2KQog
ewogICAgIGlmICh2ID09IHdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
Y3BwCmluZGV4IDUxM2Y1YWQ0YmZkOWE4OTQyMTQ0YzRhNmUwN2Y4NzAwOGYxYWZiNTIuLjBjYzQz
ZTdhYzZiNWNhNDBlNjUwMzYyZjQ4NmQ2YmI5ZjY1NjcxNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMjA5LDcg
KzIwOSw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRG
b3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlCiB7CiAgICAgLy8gQWx0ZXIgZm9udC1z
aXplIHRvIHRoZSByaWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGluZyB0aGUgZ2x5
cGhzIHRoZW1zZWx2ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBpcyBzcGVjaWZp
ZWQKICAgICBzY2FsaW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlU2Ny
ZWVuRm9udFNpemVTY2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKLSAgICBpZiAoIXNjYWxpbmdGYWN0
b3IgfHwgc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUoKSA9PSBUZXh0
UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uKSB7CisgICAgaWYgKCFzY2FsaW5nRmFj
dG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRSZW5kZXJpbmdNb2RlKCkgPT0gUEFM
OjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAgICAgIHNjYWxp
bmdGYWN0b3IgPSAxOwogICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udENhc2NhZGUoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjIyLDggKzIyMiw4IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5l
VGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlCiAKICAgICAvLyBTVkcgY29udHJvbHMgaXRzIG93biBnbHlwaCBvcmllbnRhdGlvbiwgc28g
ZG9uJ3QgYWxsb3cgd3JpdGluZy1tb2RlCiAgICAgLy8gdG8gYWZmZWN0IGl0LgotICAgIGlmIChm
b250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSAhPSBGb250T3JpZW50YXRpb246Okhvcml6b250
YWwpCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRp
b246Okhvcml6b250YWwpOworICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSAh
PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldE9yaWVudGF0aW9uKFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKTsKIAog
ICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIDAs
IDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVudCgpLmZvbnRTZWxl
Y3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwCmluZGV4IDhmNTIzNjBjYTZhMWNmNmE5ZDJmM2M3ZDc5NTNkZWFiNGJkMmNkZjUu
LmI0YzlhZTdjYzg0NWY5ZWEyOGFhYmZmYmM4ODczNWFkMGVkNTNkOGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtMzg0LDcg
KzM4NCw3IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNWR1RlCiAgICAgVGV4dFJ1biBydW4oU3RyaW5n
VmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKGZyYWdtZW50LmNoYXJhY3Rlck9mZnNl
dCwgZnJhZ21lbnQubGVuZ3RoKQogICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBvbmx5IHJl
bGV2YW50IHdpdGggYWxsb3dUYWJzPXRydWUgKi8KICAgICAgICAgICAgICAgICAsIDAgLyogcGFk
ZGluZywgb25seSByZWxldmFudCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxldmFudCBmb3Ig
U1ZHICovCi0gICAgICAgICAgICAgICAgLCBBbGxvd1JpZ2h0RXhwYW5zaW9uCisgICAgICAgICAg
ICAgICAgLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24KICAgICAgICAgICAgICAgICAsIGRpcmVj
dGlvbigpCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpW
aXN1YWwgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKaW5kZXggMzkwOTFlZjhhZjNkOWIzMDQ4
ZGM3YjJiMmNmNDgyMTE5OTY1ZmM1Yi4uN2I1ODc4NTdjNTE5NzNkZjViYjBhMzM4ZGRjY2ZhNjk3
ZDQzNDIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0
cmljcy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgVGV4dFJ1biBTVkdUZXh0TWV0cmljczo6Y29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25lZCBwb3MKICAgICBU
ZXh0UnVuIHJ1bihTdHJpbmdWaWV3KHRleHQudGV4dCgpKS5zdWJzdHJpbmcocG9zaXRpb24sIGxl
bmd0aCkKICAgICAgICAgICAgICAgICAsIDAgLyogeFBvcywgb25seSByZWxldmFudCB3aXRoIGFs
bG93VGFicz10cnVlICovCiAgICAgICAgICAgICAgICAgLCAwIC8qIHBhZGRpbmcsIG9ubHkgcmVs
ZXZhbnQgZm9yIGp1c3RpZmllZCB0ZXh0LCBub3QgcmVsZXZhbnQgZm9yIFNWRyAqLwotICAgICAg
ICAgICAgICAgICwgQWxsb3dSaWdodEV4cGFuc2lvbgorICAgICAgICAgICAgICAgICwgUEFMOjpB
bGxvd1JpZ2h0RXhwYW5zaW9uCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJlY3Rpb24oKQog
ICAgICAgICAgICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSAvKiBkaXJl
Y3Rpb25hbE92ZXJyaWRlICovKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuY3BwCmluZGV4IGZlZmE0ODVjYWZiZjRiYmM4NGJlOTVmNDU5YTc5OWUyNzY4
ZDY1ZjUuLjczNmIyMGRhNDUyNTc5MTIwY2U3YzJiMGQxYzI1NjQ5NzA5NjA1YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTU0MSw3ICs1
NDEsNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzLCBib29sIGluYwogICAgICAgICBpZiAoaXM8SFRNTEVsZW1l
bnQ+KHN0eWxlZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKICAgICAgICAg
ICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzdHlsZWRFbGVt
ZW50KS5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwotICAgICAg
ICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
OworICAgICAgICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVm
dERlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAg
IGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25PcmlnaW46
OkF1dGhvcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Bh
Z2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVj
dG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0Li4y
OGIyYzQ3ODgxOTU4OTNmNDY2YzIwNmRkMTRjZTVlNGM3N2Q0YjAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25z
dCBTdHlsZVJ1bGVQYWdlCiAKIGJvb2wgUGFnZVJ1bGVDb2xsZWN0b3I6OmlzTGVmdFBhZ2UoaW50
IHBhZ2VJbmRleCkgY29uc3QKIHsKLSAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IG1fcm9vdERp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQg
PSBtX3Jvb3REaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgcmV0dXJu
IChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oCmluZGV4IGU0NTJjNzQ0YTYwNGI0ZTI3
NDExN2Y1NmE3ZGM5MTAxNmY3YjhlNjUuLjVlNGNmMGI1ZDBjOTBmNTVmM2E0MGVhODE5MDViZjdi
ZDhmY2Y2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVj
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuaApAQCAt
MzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgU3R5bGUgewogCiBjbGFzcyBQYWdlUnVsZUNvbGxlY3Rv
ciB7CiBwdWJsaWM6Ci0gICAgUGFnZVJ1bGVDb2xsZWN0b3IoU2NvcGVSdWxlU2V0cyYgcnVsZVNl
dHMsIFRleHREaXJlY3Rpb24gcm9vdERpcmVjdGlvbikKKyAgICBQYWdlUnVsZUNvbGxlY3RvcihT
Y29wZVJ1bGVTZXRzJiBydWxlU2V0cywgUEFMOjpUZXh0RGlyZWN0aW9uIHJvb3REaXJlY3Rpb24p
CiAgICAgICAgIDogbV9ydWxlU2V0cyhydWxlU2V0cykKICAgICAgICAgLCBtX3Jvb3REaXJlY3Rp
b24ocm9vdERpcmVjdGlvbikKICAgICB7IH0KQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRj
aGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBib29sIGlzTGVm
dFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogCiAgICAg
U2NvcGVSdWxlU2V0cyYgbV9ydWxlU2V0czsKLSAgICBUZXh0RGlyZWN0aW9uIG1fcm9vdERpcmVj
dGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gbV9yb290RGlyZWN0aW9uOwogCiAgICAgTWF0
Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
UHJvcGVydHlDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUu
aAppbmRleCA1MWQyMTc2MWM3NTAzM2NhMzM2YzY3ZmE4OTk1ODdhYTAyNjU5NWRmLi40MzY1ZDM5
YTBmZDM1ZTdiMzA0Mzc1NDI5NjE3MjM2OWJmNjk3YmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Q
cm9wZXJ0eUNhc2NhZGUuaApAQCAtNDIsOCArNDIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBJbmNs
dWRlZFByb3BlcnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKIAogICAgIHN0cnVjdCBEaXJl
Y3Rpb24gewotICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247Ci0gICAgICAgIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERp
cmVjdGlvbjsKKyAgICAgICAgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZTsKICAgICB9Owog
CiAgICAgUHJvcGVydHlDYXNjYWRlKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVsLCBJ
bmNsdWRlZFByb3BlcnRpZXMsIERpcmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRq
dXN0ZXIuY3BwCmluZGV4IGY4NTQyMGIxNTU4Nzk5OThhODExNjkzMDU3ODMzODY1OTU0OTIxZWYu
LjQwNTlmYmRlMWIwY2ViYzlkZmYwMmZiODU0YWU2MjBhZDVlNTM3NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC0zNDQsMTAgKzM0NCwxMCBAQCB2b2lkIEFkanVz
dGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdXNlckFn
ZW50QXBwZWFyYW5jZQogICAgICAgICAgICAgc3R5bGUuc2V0V3JpdGluZ01vZGUobV9wYXJlbnRT
dHlsZS53cml0aW5nTW9kZSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qg
c3VwcG9ydCBibG9jay1mbG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0dGlu
ZwotICAgICAgICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gV3JpdGlu
Z01vZGU6OlRvcFRvQm90dG9tLgorICAgICAgICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5n
IG90aGVyIHRoYW4gUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20uCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOCAtIEZsZXhpYmxlIGJv
eCBzdXBwb3J0LgotICAgICAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b20gJiYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Qm94IHx8
IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQm94KSkKLSAgICAgICAgICAg
IHN0eWxlLnNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSk7CisgICAgICAg
IGlmIChzdHlsZS53cml0aW5nTW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9t
ICYmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCB8fCBzdHlsZS5kaXNwbGF5
KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCkpCisgICAgICAgICAgICBzdHlsZS5zZXRXcml0
aW5nTW9kZShQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSk7CiAKICAgICAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1kaXNwbGF5LyN0cmFuc2Zvcm1hdGlvbnMKICAgICAgICAg
Ly8gIkEgcGFyZW50IHdpdGggYSBncmlkIG9yIGZsZXggZGlzcGxheSB2YWx1ZSBibG9ja2lmaWVz
IHRoZSBib3jigJlzIGRpc3BsYXkgdHlwZS4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDA4Zjc5MDQ0NTNhOGEwYTY5YzU4MTJmN2Q2NDMzNzRl
YjlmMjQ1YmEuLmFmOWUwYjYyMmY1YTMwZDY1NTE0MDRkZWZkNDQ5MGQ5ZGFjYzBkMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBAIC0xNTQsNyAr
MTU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNvbnZlcnRHbHlw
aE9yaWVudGF0aW9uKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGlj
IEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oQnVpbGRlclN0
YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGg+
IGNvbnZlcnRMaW5lSGVpZ2h0KEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiwgZmxvYXQg
bXVsdGlwbGllciA9IDEuZik7Ci0gICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29udmVydEZvbnRT
eW50aGVzaXMoQnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgUEFM
OjpGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0
IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIEZvbnRQYWxldHRlIGNvbnZlcnRGb250UGFsZXR0ZShC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIAogICAgIHN0YXRpYyBCcmVha0Jl
dHdlZW4gY29udmVydFBhZ2VCcmVha0JldHdlZW4oQnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFs
dWUmKTsKQEAgLTE1NjQsMjUgKzE1NjQsMjUgQEAgaW5saW5lIHN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
PiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChCdWlsZGVyU3RhdGUmIGIKICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1pbmxpbmUgRm9udFN5bnRoZXNpcyBCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0Rm9udFN5bnRoZXNpcyhCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgUEFMOjpGb250U3ludGhlc2lzIEJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRGb250U3ludGhlc2lzKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBB
U1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgcmV0dXJuIEZvbnRTeW50aGVzaXNOb25lOworICAgICAgICBy
ZXR1cm4gUEFMOjpGb250U3ludGhlc2lzTm9uZTsKICAgICB9CiAKLSAgICBGb250U3ludGhlc2lz
IHJlc3VsdCA9IEZvbnRTeW50aGVzaXNOb25lOworICAgIFBBTDo6Rm9udFN5bnRoZXNpcyByZXN1
bHQgPSBQQUw6OkZvbnRTeW50aGVzaXNOb25lOwogICAgIEFTU0VSVChpczxDU1NWYWx1ZUxpc3Q+
KHZhbHVlKSk7CiAgICAgZm9yIChjb25zdCBDU1NWYWx1ZSYgdiA6IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpKSB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHYpLnZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlV2VpZ2h0OgotICAgICAg
ICAgICAgcmVzdWx0IHw9IEZvbnRTeW50aGVzaXNXZWlnaHQ7CisgICAgICAgICAgICByZXN1bHQg
fD0gUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTVmFsdWVTdHlsZToKLSAgICAgICAgICAgIHJlc3VsdCB8PSBGb250U3ludGhlc2lz
U3R5bGU7CisgICAgICAgICAgICByZXN1bHQgfD0gUEFMOjpGb250U3ludGhlc2lzU3R5bGU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwczoKLSAgICAg
ICAgICAgIHJlc3VsdCB8PSBGb250U3ludGhlc2lzU21hbGxDYXBzOworICAgICAgICAgICAgcmVz
dWx0IHw9IFBBTDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2FwczsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDllZTNhNDI3Nzg3MzJj
NWVhM2RiNWNiNWI2NGMwM2EyMjRmOWYxYzkuLjhhNWVjYWFiZjZhNDg3MTBiMmQ3ZjAwNmYxNmVl
Yzg5OWEzODg2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5o
CkBAIC0xNjI5LDEwICsxNjI5LDEwIEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKEJ1aWxkZXJTdGF0ZSYgYnVpbGRlCiBpbmxpbmUg
dm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJlcyhCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1
aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudENvbW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlh
bnRMaWdhdHVyZXM6Ok5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRIaXN0
b3JpY2FsTGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25MaWdh
dHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEhpc3Rvcmlj
YWxMaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKFBBTDo6Rm9udFZhcmlh
bnRMaWdhdHVyZXM6Ok5vcm1hbCk7CiAgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCkBAIC0xNjYxLDExICsxNjYxLDExIEBA
IGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJp
YyhCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTCiBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxGb250VmFyaWFudE51bWVyaWMoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
CiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKEZvbnRWYXJp
YW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dE51bWVyaWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCk7Ci0gICAg
Zm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb246Ok5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1l
cmljT3JkaW5hbChGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZvbnRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvOjpOb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVt
ZXJpY0ZpZ3VyZShQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51
bWVyaWNGcmFjdGlvbihQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwoUEFMOjpGb250VmFy
aWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86
Ok5vcm1hbCk7CiAgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogfQogCkBAIC0xNjkzLDkgKzE2OTMsOSBAQCBpbmxpbmUgdm9pZCBC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudEVhc3RBc2lhbihCdWlsZGVyU3Rh
dGUmIGJ1aWxkZQogaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZh
cmlhbnRFYXN0QXNpYW4oQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KEZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RB
c2lhbldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eTo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aChQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6Ok5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNp
YW5SdWJ5KFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpOwogICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0K
IApAQCAtMTc5MSw3ICsxNzkxLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUZvbnRTdHlsZShCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmEKICAgICBhdXRv
JiBmb250U3R5bGVWYWx1ZSA9IGRvd25jYXN0PENTU0ZvbnRTdHlsZVZhbHVlPih2YWx1ZSk7CiAg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Rm9udFN0eWxlRnJvbVZhbHVlKGZvbnRTdHlsZVZhbHVlKSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldEZvbnRTdHlsZUF4aXMoZm9udFN0eWxlVmFsdWUuZm9udFN0eWxlVmFsdWUtPnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUl0YWxpYyA/IEZvbnRTdHlsZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlz
OjpzbG50KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhmb250U3R5bGVW
YWx1ZS5mb250U3R5bGVWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSXRhbGljID8gUEFMOjpG
b250U3R5bGVBeGlzOjppdGFsIDogUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KTsKICAgICBidWls
ZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAppbmRleCA5MGM0
N2RiNGM2NmJlZTE5MWYyNzAzMzllNWUzZTVmOWY1YWE5ZjlmLi4yZGRmYThiZjlmNzNhM2E1MDRk
NjJlZmY5ZDUzOWQ5ODU1OWU4MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuY3BwCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBCdWlsZGVyU3RhdGU6OmFkanVz
dFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCkKIAogICAgIG1fc3R5bGUuc2V0VGV4dEFsaWdu
KFRleHRBbGlnbk1vZGU6OkNlbnRlcik7CiAgICAgaWYgKG1fc3R5bGUuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKLSAgICAgICAgbV9zdHlsZS5zZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZTo6
TGVmdFRvUmlnaHQpOworICAgICAgICBtX3N0eWxlLnNldFdyaXRpbmdNb2RlKFBBTDo6V3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0KTsKIH0KIAogdm9pZCBCdWlsZGVyU3RhdGU6OnVwZGF0ZUZvbnQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKaW5kZXggYzUxZjJhZWFk
NDdhYTRiNmRjYzk5ZTEwNzYwMzVjNDY3OWIyYTM3MC4uMTFiOGFjMmFmNDY0ZTQ4NzcwNGE2MjM2
YTRjMGUxNTY5NDNiMjZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0
ZS5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZvbnRTaXplKEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKICAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFpvb20oZik7IH0KICAgICB2b2lkIHNldEVm
ZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldEVmZmVjdGl2
ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUp
OyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9
CiAgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRh
dGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3Jp
ZW50YXRpb24pOyB9CiAKICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERpcnR5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1
bWVudC5jcHAKaW5kZXggMzMxODliZDY0Y2FjYmVkZjkzNjhkMzRmYTlmYjU2NGQ1OGJkMWYzNi4u
ODY2NWEzYWZmMzlkZmNmMGY2ZjdiZGNiOGNhMGFlM2YzOTkxZWFlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcApAQCAtMTExLDcgKzEx
MSw3IEBAIFJlbmRlclN0eWxlIHJlc29sdmVGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9j
dW1lbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZExvY2FsZShkb2N1bWVudC5j
b250ZW50TGFuZ3VhZ2UoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUo
c2V0dGluZ3MuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldE9u
ZUZhbWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFs
bG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6Ok5vKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMoc2V0dGluZ3Muc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IFBBTDo6
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9u
dHM6Ok5vKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlm
aWVyKENTU1ZhbHVlTWVkaXVtKTsKICAgICBpbnQgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChD
U1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAKaW5kZXggNDI3ZGQ4ODU0OGJlZjY0ZjYyYzZl
OWZmY2JiYjE5MjEyNzUxZjQwOS4uMDcyMTcxZGVkZDcwNzNhODc3ZDJhMzc2MGQ1ZTc5M2NlYmQ5
YjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJh
dy5jcHAKQEAgLTEyNiwzMCArMTI2LDMwIEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJl
c29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBmb250RGVzY3JpcHRpb24uc2V0
Rm9udFN0eWxlQXhpcygoZm9udFJhdy5zdHlsZSAmJiBmb250UmF3LnN0eWxlLT5zdHlsZSA9PSBD
U1NWYWx1ZUl0YWxpYykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6c2xu
dCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoKGZvbnRSYXcuc3R5bGUg
JiYgZm9udFJhdy5zdHlsZS0+c3R5bGUgPT0gQ1NTVmFsdWVJdGFsaWMpID8gUEFMOjpGb250U3R5
bGVBeGlzOjppdGFsIDogUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KTsKIAogICAgIGlmIChmb250
UmF3LnZhcmlhbnRDYXBzKSB7CiAgICAgICAgIHN3aXRjaCAoKmZvbnRSYXcudmFyaWFudENhcHMp
IHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6Ok5vcm1hbCk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6Ok5v
cm1hbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2Fw
czoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFu
dENhcHM6OlNtYWxsKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2Fw
cyhQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVBbGxTbWFsbENhcHM6Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OkFs
bFNtYWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlUGV0aXRl
Q2FwczoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFy
aWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6Ci0gICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOworICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKFBBTDo6Rm9udFZhcmlhbnRD
YXBzOjpBbGxQZXRpdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWVVbmljYXNlOgotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZv
bnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OlVuaWNhc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlRpdGxpbmcpOwor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpUaXRsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDBlYTc4ZWFkYWJlOTE1MTlkODU1ZGMzZDkxMjk4NTY5ZjI4Njlk
ZWIuLjExZTZhODlmZGIzOTE5Yjg1MzdjY2JhZDlkMDJjNzU0ODVkYmE5MTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NTYsNyArNDU2LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudChjb25z
dCBFbGVtZW50KiBlbGUKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXpl
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCksIHN0eWxlLmdldCgpLCBkb2N1bWVudCgpKSk7CiAKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGlu
Z3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiAKICAgICBzdHlsZS0+
Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBmMWE3ZTIyMTEyMGU3MWE5
Njk5MWIzMjMzYTM4NTQzMDMxODlkNWIwLi5mOThjYzlhMzA4Mjc4YzE0OTVlNmE5YTZlY2FiMmEy
ZTk1MTY4ZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaApA
QCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgVXNlckludGVyZmFjZURpcmVjdGlv
blBvbGljeSA9IFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k7CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeShVc2VySW50ZXJm
YWNlRGlyZWN0aW9uUG9saWN5KTsKIAotICAgIHVzaW5nIFN5c3RlbUxheW91dERpcmVjdGlvbiA9
IFRleHREaXJlY3Rpb247CisgICAgdXNpbmcgU3lzdGVtTGF5b3V0RGlyZWN0aW9uID0gUEFMOjpU
ZXh0RGlyZWN0aW9uOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN5c3RlbUxheW91dERpcmVj
dGlvbihTeXN0ZW1MYXlvdXREaXJlY3Rpb24pOwogCiAgICAgdXNpbmcgRm9udExvYWRUaW1pbmdP
dmVycmlkZSA9IFdlYkNvcmU6OkZvbnRMb2FkVGltaW5nT3ZlcnJpZGU7CkBAIC0xNDcsNyArMTQ3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgV2ViQ29yZTo6RWRpdGluZ0JlaGF2aW9yVHlwZSBtX29y
aWdpbmFsRWRpdGluZ0JlaGF2aW9yOwogICAgICAgICBXZWJDb3JlOjpTdG9yYWdlQmxvY2tpbmdQ
b2xpY3kgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7CiAgICAgICAgIFdlYkNvcmU6OlVzZXJJbnRl
cmZhY2VEaXJlY3Rpb25Qb2xpY3kgbV91c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5OwotICAg
ICAgICBUZXh0RGlyZWN0aW9uIG1fc3lzdGVtTGF5b3V0RGlyZWN0aW9uOworICAgICAgICBQQUw6
OlRleHREaXJlY3Rpb24gbV9zeXN0ZW1MYXlvdXREaXJlY3Rpb247CiAgICAgICAgIFdlYkNvcmU6
OlBERkltYWdlQ2FjaGluZ1BvbGljeSBtX3BkZkltYWdlQ2FjaGluZ1BvbGljeTsKICAgICAgICAg
V2ViQ29yZTo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIG1fZm9yY2VkQ29sb3JzQXJlSW52ZXJ0
ZWRBY2Nlc3NpYmlsaXR5VmFsdWU7CiAgICAgICAgIFdlYkNvcmU6OkZvcmNlZEFjY2Vzc2liaWxp
dHlWYWx1ZSBtX2ZvcmNlZERpc3BsYXlJc01vbm9jaHJvbWVBY2Nlc3NpYmlsaXR5VmFsdWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggNDJlOWMwZDY4NThlYzkxYzMxOWNi
MjMzNGNlMGIyMjE1MzMxZmE2Yy4uYzBkMjc2OGQwOGU2NzQxYmRiMWRhMWQ3NjkwZTIzNjNiODBh
ZjkwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjU5OSw4ICsyNTk5
LDggQEAgdm9pZCBJbnRlcm5hbHM6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNvbnN0IFN0cmlu
ZyYgY2FuZGlkYXRlLCB1bnNpZ25lZCBsb2NhdGkKICAgICBpZiAoIWNvbnRleHREb2N1bWVudCgp
IHx8ICFjb250ZXh0RG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6Ok5vbmU7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgIHJl
c3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOwogICAgIHJlc3VsdC5yYW5n
ZSA9IHsgbG9jYXRpb24sIGxlbmd0aCB9OwogICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IGNhbmRp
ZGF0ZTsKICAgICBjb250ZXh0RG9jdW1lbnQoKS0+ZWRpdG9yKCkuaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGUocmVzdWx0KTsKQEAgLTM5MTAsNyArMzkxMCw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OnRv
b2xUaXBGcm9tRWxlbWVudChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoJmVsZW1lbnQpOwotICAgIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb247
CiAgICAgcmV0dXJuIHJlc3VsdC50aXRsZShkaXJlY3Rpb24pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lcy5oCmluZGV4IGY3NDkwZjZjNTZjMzYwOWMxMWQ1MGRiNTFlMDkzNjVhMTY2NjgyYzYuLjY0
YWY0MGJkN2E4Mzc4Y2JmNzFmNGM5M2MzNjQ5NDYyYTJjZWQ5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lcy5oCkBAIC0zMCwxMyArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxp
bmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJp
bmdCdWlsZGVyJiBjb25zdW1lZENoYXJhY3RlcnMpCitpbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFy
YWN0ZXJzKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGNvbnN1
bWVkQ2hhcmFjdGVycykKIHsKICAgICBzb3VyY2UucHVzaEJhY2soY29uc3VtZWRDaGFyYWN0ZXJz
LnRvU3RyaW5nKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgot
Ym9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBT
dHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJz
LCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK2Jvb2wgY29uc3VtZUNoYXJhY3Rl
clJlZmVyZW5jZShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBk
ZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlcikKIHsKICAgICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBhZGRpdGlvbmFs
QWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09
ICc+Jyk7CiAgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggN2U2YmY0YWEwMzY1
MWFkNjE3OWEyYmI0OTdmMGFiMzA4ZmNlYTU2Ni4uOGE0YmE2OWM4MTdkNGMyYmI4MDViYmUzZmFh
NDMxMDMxNTgyZjY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1
bWVudFBhcnNlci5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2Vy
OjpjbGVhckN1cnJlbnROb2RlU3RhY2soKQogICAgIH0KIH0KIAotdm9pZCBYTUxEb2N1bWVudFBh
cnNlcjo6aW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYmKQordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
aW5zZXJ0KFBBTDo6U2VnbWVudGVkU3RyaW5nJiYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgK
aW5kZXggMWNkYTk3YzE3NjUwNmQ5NWQ2YjIxMWUxMjExNmZlMjY4N2YxZGIzYy4uNjQwOGIwMjll
MjJkMGRmY2RjYzJjY2JhZjkzZThlOGJlNzUxZDI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVk
ZSAiRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiUGVuZGluZ1Njcmlw
dENsaWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgotI2luY2x1
ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlhNTEVycm9ycy5oIgogI2luY2x1ZGUg
PGxpYnhtbC90cmVlLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgorI2luY2x1ZGUg
PHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgWE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnQmLCBGcmFtZVZpZXcqID0gbnVsbHB0cik7CiAgICAgWE1MRG9j
dW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCYsIEhhc2hNYXA8QXRvbVN0cmluZywgQXRvbVN0
cmluZz4mJiwgY29uc3QgQXRvbVN0cmluZyYsIFBhcnNlckNvbnRlbnRQb2xpY3kpOwogCi0gICAg
dm9pZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpIGZpbmFsOworICAgIHZvaWQgaW5zZXJ0KFBB
TDo6U2VnbWVudGVkU3RyaW5nJiYpIGZpbmFsOwogICAgIHZvaWQgYXBwZW5kKFJlZlB0cjxTdHJp
bmdJbXBsPiYmKSBmaW5hbDsKICAgICB2b2lkIGZpbmlzaCgpIGZpbmFsOwogICAgIHZvaWQgc3Rv
cFBhcnNpbmcoKSBmaW5hbDsKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogCiAgICAgRnJh
bWVWaWV3KiBtX3ZpZXcgeyBudWxscHRyIH07CiAKLSAgICBTZWdtZW50ZWRTdHJpbmcgbV9vcmln
aW5hbFNvdXJjZUZvclRyYW5zZm9ybTsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBtX29yaWdp
bmFsU291cmNlRm9yVHJhbnNmb3JtOwogCiAgICAgUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IG1f
Y29udGV4dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0NhbGxiYWNrcz4gbV9wZW5kaW5n
Q2FsbGJhY2tzOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxBdG9t
U3RyaW5nLCBBdG9tU3RyaW5nPiBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwOwogICAgIEF0b21TdHJp
bmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogCi0gICAgU2VnbWVudGVkU3RyaW5nIG1fcGVuZGlu
Z1NyYzsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CiB9OwogCiAjaWYg
RU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRl
eCA3NmMyZGViYWZkOTFkMTZmOGQ3NzA4OTNmNDg4OTY5MDBkZmUyNmQyLi42ZjA4ZmIxMWY1YjQ3
NzRiODc3OGQ0YjdlZGE1NTI3Njg3ZWUwN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHkKQEAgLTY5MSw3ICs2OTEsMTEgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUo
dHlwZSk6CiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JzogWyc8d3RmL01hY2hTZW5kUmlnaHQuaD4n
XSwKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAgICAg
J01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAorICAgICAgICAnUEFM
OjpGb250U21vb3RoaW5nTW9kZSc6IFsnPFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5oPiddLAogICAg
ICAgICAnUEFMOjpTZXNzaW9uSUQnOiBbJzxwYWwvU2Vzc2lvbklELmg+J10sCisgICAgICAgICdQ
QUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJzogWyc8cGFsL3RleHQvVGV4dENoZWNraW5nLmg+
J10sCisgICAgICAgICdQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCc6IFsnPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4nXSwKKyAgICAgICAgJ1BBTDo6VGV4dENoZWNraW5nVHlwZSc6IFsnPHBh
bC90ZXh0L1RleHRDaGVja2luZy5oPiddLAogICAgICAgICAnUEFMOjpXZWJHUFU6OkFkZHJlc3NN
b2RlJzogWyc8cGFsL2dyYXBoaWNzL1dlYkdQVS9XZWJHUFVBZGRyZXNzTW9kZS5oPiddLAogICAg
ICAgICAnUEFMOjpXZWJHUFU6OkJsZW5kRmFjdG9yJzogWyc8cGFsL2dyYXBoaWNzL1dlYkdQVS9X
ZWJHUFVCbGVuZEZhY3Rvci5oPiddLAogICAgICAgICAnUEFMOjpXZWJHUFU6OkJsZW5kT3BlcmF0
aW9uJzogWyc8cGFsL2dyYXBoaWNzL1dlYkdQVS9XZWJHUFVCbGVuZE9wZXJhdGlvbi5oPiddLApA
QCAtNzcwLDEwICs3NzQsMTAgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAg
ICdXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJzogWyc8V2ViQ29yZS9GaWxlQ2hvb3Nlci5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUn
OiBbJzxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPiddLAogICAgICAgICAnV2ViQ29y
ZTo6Rm9udENoYW5nZXMnOiBbJzxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmg+J10sCi0g
ICAgICAgICdXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSc6IFsnPFdlYkNvcmUvR3JhcGhpY3NU
eXBlcy5oPiddLAorICAgICAgICAnUEFMOjpGb250U21vb3RoaW5nTW9kZSc6IFsnPFdlYkNvcmUv
R3JhcGhpY3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSc6IFsn
PFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R2VuZXJp
Y0N1ZURhdGEnOiBbJzxXZWJDb3JlL0luYmFuZEdlbmVyaWNDdWUuaD4nXSwKLSAgICAgICAgJ1dl
YkNvcmU6OkdyYW1tYXJEZXRhaWwnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+J10s
CisgICAgICAgICdQQUw6OkdyYW1tYXJEZXRhaWwnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xp
ZW50Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQnOiBbJzxXZWJD
b3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkhpZ2hsaWdodFJl
cXVlc3RPcmlnaW5hdGVkSW5BcHAnOiBbJzxXZWJDb3JlL0FwcEhpZ2hsaWdodC5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6SGlnaGxpZ2h0VmlzaWJpbGl0eSc6IFsnPFdlYkNvcmUvSGlnaGxpZ2h0
VmlzaWJpbGl0eS5oPiddLApAQCAtODQwLDkgKzg0NCw2IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBl
KHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQnOiBbJzxX
ZWJDb3JlL0RvY3VtZW50U3RvcmFnZUFjY2Vzcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6U3Vw
cG9ydGVkUGx1Z2luSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvUGx1Z2luRGF0YS5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8nOiBbJzxXZWJDb3JlL0ZyYW1lTG9hZGVy
VHlwZXMuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJzog
Wyc8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlRleHRDaGVj
a2luZ1Jlc3VsdCc6IFsnPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwKLSAgICAgICAg
J1dlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUnOiBbJzxXZWJDb3JlL1RleHRDaGVja2luZy5oPidd
LAogICAgICAgICAnV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEnOiBbJzxXZWJDb3JlL1RleHRJ
bmRpY2F0b3IuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUnOiBbJzxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPiddLAogICAgICAgICAn
V2ViQ29yZTo6VXNlZExlZ2FjeVRMUyc6IFsnPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZUJhc2Uu
aD4nXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1
bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggODdmNGViMWViYTI4NzJlMGNiMGFiOTU5MTZhZmVk
ZTI5ZmNiYTI0NC4uZGQ4NWJmYTAzNjI1NTM4M2ZiMDZkZDg0NGFiZjVhYzQ2NTI5ZDQwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW0KQEAgLTUyMywxNyArNTIzLDE3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RG
b250UmVmPiBjcmVhdGVDVEZvbnQoQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIGZsb2F0IHNp
emUsCiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1lbnRD
b2RlcjxSZWY8V2ViQ29yZTo6Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZvbnRPcmllbnRhdGlvbj4gb3Jp
ZW50YXRpb247CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRPcmllbnRhdGlvbj4gb3JpZW50
YXRpb247CiAgICAgZGVjb2RlciA+PiBvcmllbnRhdGlvbjsKICAgICBpZiAoIW9yaWVudGF0aW9u
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpGb250V2lkdGhWYXJpYW50PiB3aWR0aFZhcmlhbnQ7CisgICAgc3RkOjpvcHRpb25hbDxQ
QUw6OkZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRoVmFyaWFudDsKICAgICBkZWNvZGVyID4+IHdpZHRo
VmFyaWFudDsKICAgICBpZiAoIXdpZHRoVmFyaWFudCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dFJlbmRlcmluZ01vZGU+IHRl
eHRSZW5kZXJpbmdNb2RlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpUZXh0UmVuZGVyaW5nTW9k
ZT4gdGV4dFJlbmRlcmluZ01vZGU7CiAgICAgZGVjb2RlciA+PiB0ZXh0UmVuZGVyaW5nTW9kZTsK
ICAgICBpZiAoIXRleHRSZW5kZXJpbmdNb2RlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKaW5kZXggZDYzZGM1MzliNDdmZDEy
ZjZkMmQ5MjE3Y2NlNzY4YmM2OTYzYWVjMi4uMDczNmFmZmY0ODI4ZmU2ZTJhYTBjYmM3NGZjYjRh
NzhkOTdjN2ZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1Jhbmdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCkBAIC0zNiw3
ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29u
c3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBi
YXNlKQogewogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90Rm91bmQpOwot
ICAgIFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlIHJhbmdlIHsgZWRpdGluZ1JhbmdlLmxvY2F0aW9u
LCBlZGl0aW5nUmFuZ2UubGVuZ3RoIH07CisgICAgUEFMOjpDaGFyYWN0ZXJSYW5nZSByYW5nZSB7
IGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgZWRpdGluZ1JhbmdlLmxlbmd0aCB9OwogCiAgICAgaWYg
KGJhc2UgPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpIHsKICAgICAg
ICAgLy8gT3VyIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBj
YWxsZWQgYnkgaW5wdXQgbWV0aG9kcyB0aGF0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBjMGI2ZWYzZmEzYTJlMTIwNGM2NzdlY2Y4NmFl
Y2JkMTliYjY0ZDdiLi5hY2I5Y2EyZGRjY2JiMTcxMmE4NjgxMTkwYmM3NmY3YWNlNzliMDYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAg
LTMwMCwxMyArMzAwLDEzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDYWNoZVF1ZXJ5T3B0aW9ucz46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYWNoZVF1ZXJ5T3B0aW9uCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxDaGFyYWN0ZXJSYW5nZT46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UpCit2b2lkIEFyZ3VtZW50
Q29kZXI8UEFMOjpDaGFyYWN0ZXJSYW5nZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBQQUw6OkNoYXJhY3RlclJhbmdlJiByYW5nZSkKIHsKICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihyYW5nZS5sb2NhdGlvbik7CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ocmFuZ2UubGVuZ3RoKTsKIH0KIAotc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJS
YW5nZT4gQXJndW1lbnRDb2RlcjxDaGFyYWN0ZXJSYW5nZT46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorc3RkOjpvcHRpb25hbDxQQUw6OkNoYXJhY3RlclJhbmdlPiBBcmd1bWVudENvZGVyPFBB
TDo6Q2hhcmFjdGVyUmFuZ2U+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBsb2NhdGlvbjsKICAgICBkZWNvZGVyID4+IGxvY2F0aW9uOwpA
QCAtMTMxNiw3ICsxMzE2LDcgQEAgc3RkOjpvcHRpb25hbDxTZWxlY3Rpb25HZW9tZXRyeT4gQXJn
dW1lbnRDb2RlcjxTZWxlY3Rpb25HZW9tZXRyeT46OmRlY29kZShEZWNvZGUKICAgICB1aW50MzJf
dCBkaXJlY3Rpb247CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkaXJlY3Rpb24pKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNldERpcmVjdGlv
bigoVGV4dERpcmVjdGlvbilkaXJlY3Rpb24pOworICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNldERp
cmVjdGlvbigoUEFMOjpUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbik7CiAKICAgICBpbnQgaW50VmFs
dWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbnRWYWx1ZSkpCkBAIC0xNzgzLDcgKzE3ODMs
NyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmU+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgRGljdGF0aQogCiBzdGQ6Om9wdGlvbmFsPERpY3RhdGlvbkFs
dGVybmF0aXZlPiBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlPjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7Ci0gICAgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gcmFu
Z2U7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkNoYXJhY3RlclJhbmdlPiByYW5nZTsKICAgICBk
ZWNvZGVyID4+IHJhbmdlOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CkBAIC0xODc5LDE2ICsxODc5LDE2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTaGFyZURh
dGFXaXRoUGFyc2VkVVJMPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNoYXJlRGF0YVdpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkKK3Zv
aWQgQXJndW1lbnRDb2RlcjxQQUw6OkdyYW1tYXJEZXRhaWw+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJiBkZXRhaWwpCiB7CiAgICAgZW5jb2RlciA8
PCBkZXRhaWwucmFuZ2U7CiAgICAgZW5jb2RlciA8PCBkZXRhaWwuZ3Vlc3NlczsKICAgICBlbmNv
ZGVyIDw8IGRldGFpbC51c2VyRGVzY3JpcHRpb247CiB9CiAKLXN0ZDo6b3B0aW9uYWw8R3JhbW1h
ckRldGFpbD4gQXJndW1lbnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitzdGQ6Om9wdGlvbmFsPFBBTDo6R3JhbW1hckRldGFpbD4gQXJndW1lbnRDb2RlcjxQ
QUw6OkdyYW1tYXJEZXRhaWw+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6
Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiByYW5nZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6
Q2hhcmFjdGVyUmFuZ2U+IHJhbmdlOwogICAgIGRlY29kZXIgPj4gcmFuZ2U7CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTE5MDYsNyArMTkwNiw3IEBA
IHN0ZDo6b3B0aW9uYWw8R3JhbW1hckRldGFpbD4gQXJndW1lbnRDb2RlcjxHcmFtbWFyRGV0YWls
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kCiAgICAgcmV0dXJuIHsgeyAqcmFuZ2UsIFdURk1vdmUo
Kmd1ZXNzZXMpLCBXVEZNb3ZlKCp1c2VyRGVzY3JpcHRpb24pIH0gfTsKIH0KIAotdm9pZCBBcmd1
bWVudENvZGVyPFRleHRDaGVja2luZ1JlcXVlc3REYXRhPjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQordm9pZCBBcmd1bWVu
dENvZGVyPFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGE+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVxdWVzdCkKIHsKICAg
ICBlbmNvZGVyIDw8IHJlcXVlc3QuaWRlbnRpZmllcigpOwogICAgIGVuY29kZXIgPDwgcmVxdWVz
dC50ZXh0KCk7CkBAIC0xOTE0LDkgKzE5MTQsOSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8VGV4dENo
ZWNraW5nUmVxdWVzdERhdGE+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGV4dAog
ICAgIGVuY29kZXIgPDwgcmVxdWVzdC5wcm9jZXNzVHlwZSgpOwogfQogCi1ib29sIEFyZ3VtZW50
Q29kZXI8VGV4dENoZWNraW5nUmVxdWVzdERhdGE+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QpCitib29sIEFyZ3VtZW50Q29kZXI8UEFM
OjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBQQUw6
OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQogewotICAgIHN0ZDo6b3B0aW9uYWw8
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAgc3RkOjpvcHRp
b25hbDxQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyPiBpZGVudGlmaWVyOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTkyNCwxOSArMTkyNCwxOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5n
UmVxdWVzdERhdGE+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGV4dENoZWNraQogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE9w
dGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzOworICAgIE9wdGlvblNldDxQ
QUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXM7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjaGVja2luZ1R5cGVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVGV4dENo
ZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGU7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdQcm9j
ZXNzVHlwZSBwcm9jZXNzVHlwZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb2Nlc3NUeXBl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVxdWVzdCA9IFRleHRDaGVja2luZ1Jl
cXVlc3REYXRhIHsgaWRlbnRpZmllciwgdGV4dCwgY2hlY2tpbmdUeXBlcywgcHJvY2Vzc1R5cGUg
fTsKKyAgICByZXF1ZXN0ID0gUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSB7IGlkZW50aWZp
ZXIsIHRleHQsIGNoZWNraW5nVHlwZXMsIHByb2Nlc3NUeXBlIH07CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpCit2b2lkIEFy
Z3VtZW50Q29kZXI8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBlbmNv
ZGVyIDw8IHJlc3VsdC50eXBlOwogICAgIGVuY29kZXIgPDwgcmVzdWx0LnJhbmdlOwpAQCAtMTk0
NCwxOCArMTk0NCwxOCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRleHRDaGVjawogICAgIGVuY29kZXIgPDwg
cmVzdWx0LnJlcGxhY2VtZW50OwogfQogCi1zdGQ6Om9wdGlvbmFsPFRleHRDaGVja2luZ1Jlc3Vs
dD4gQXJndW1lbnRDb2RlcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3N0ZDo6b3B0aW9uYWw8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IEFyZ3VtZW50Q29k
ZXI8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
LSAgICBUZXh0Q2hlY2tpbmdUeXBlIHR5cGU7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlIHR5
cGU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiByYW5nZTsK
KyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Q2hhcmFjdGVyUmFuZ2U+IHJhbmdlOwogICAgIGRlY29k
ZXIgPj4gcmFuZ2U7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEdyYW1tYXJEZXRhaWw+PiBkZXRhaWxzOwor
ICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4+IGRldGFpbHM7CiAg
ICAgZGVjb2RlciA+PiBkZXRhaWxzOwogICAgIGlmICghZGV0YWlscykKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgKaW5kZXggMjVmMDFjMDI5MmEwMTlmMDY3NjI0YmJiNTUzNDAyZGYxYTMzYzViNi4uMGJl
NzZiNDA3NjdlZWRhOGM0NjEyZTM0ZWQyYzgxNDI4YjU4YWU2NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTEwMyw2ICsxMDMsMTMgQEAgY2xh
c3MgTWFjaFNlbmRSaWdodDsKIH0KICNlbmRpZgogCituYW1lc3BhY2UgUEFMIHsKK3N0cnVjdCBD
aGFyYWN0ZXJSYW5nZTsKK3N0cnVjdCBHcmFtbWFyRGV0YWlsOworY2xhc3MgVGV4dENoZWNraW5n
UmVxdWVzdERhdGE7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OworfQorCiAjaWYgVVNFKEFW
Rk9VTkRBVElPTikKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIqIENWUGl4ZWxCdWZmZXJSZWY7
CiAjZW5kaWYKQEAgLTE0MiwxMyArMTQ5LDExIEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNz
IFNwcmluZ1RpbWluZ0Z1bmN0aW9uOwogY2xhc3MgU3RlcHNUaW1pbmdGdW5jdGlvbjsKIGNsYXNz
IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKLWNsYXNzIFRleHRDaGVja2luZ1Jl
cXVlc3REYXRhOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBVc2VyU3R5bGVT
aGVldDsKIAogc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmc7CiBzdHJ1Y3QgQ2FjaGVRdWVyeU9wdGlv
bnM7Ci1zdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2U7CiBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7
CiBzdHJ1Y3QgRGF0YURldGVjdG9yRWxlbWVudEluZm87CiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJu
YXRpdmU7CkBAIC0xNjIsNyArMTY3LDYgQEAgc3RydWN0IFJhd0ZpbGU7CiBzdHJ1Y3QgU2hhcmVE
YXRhOwogc3RydWN0IFNoYXJlRGF0YVdpdGhQYXJzZWRVUkw7CiBzdHJ1Y3QgTGVuZ3RoOwotc3Ry
dWN0IEdyYW1tYXJEZXRhaWw7CiBzdHJ1Y3QgTWltZUNsYXNzSW5mbzsKIHN0cnVjdCBQYXN0ZWJv
YXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKQEAgLTE3MSw3ICsxNzUsNiBAQCBzdHJ1
Y3QgUHJvbWlzZWRBdHRhY2htZW50SW5mbzsKIHN0cnVjdCBSZWNlbnRTZWFyY2g7CiBzdHJ1Y3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIHN0cnVjdCBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnM7
Ci1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owogc3RydWN0IFRleHRJbmRpY2F0b3JEYXRhOwog
c3RydWN0IFRvdWNoQWN0aW9uRGF0YTsKIHN0cnVjdCBWZWxvY2l0eURhdGE7CkBAIC0yNzAsOSAr
MjczLDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDYWNoZVF1
ZXJ5T3B0aW9ucz4gewogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJik7CiB9OwogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDaGFyYWN0ZXJSYW5nZSYp
OwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlPiBkZWNv
ZGUoRGVjb2RlciYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxQQUw6OkNoYXJh
Y3RlclJhbmdlPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBQQUw6
OkNoYXJhY3RlclJhbmdlJik7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UEFMOjpDaGFyYWN0
ZXJSYW5nZT4gZGVjb2RlKERlY29kZXImKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hlSW5mbz4gewpAQCAtNTI3LDE5
ICs1MzAsMTkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTaGFy
ZURhdGFXaXRoUGFyc2VkVVJMPiB7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6U2hhcmVEYXRhV2l0aFBhcnNlZFVSTCYpOwogfTsK
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWls
PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsJik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6R3JhbW1hckRl
dGFpbD4gZGVjb2RlKERlY29kZXImKTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
UEFMOjpHcmFtbWFyRGV0YWlsPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBQQUw6OkdyYW1tYXJEZXRhaWwmKTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQQUw6
OkdyYW1tYXJEZXRhaWw+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0RGF0YSYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGE+IHsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVx
dWVzdERhdGEmKTsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERl
Y29kZXImLCBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CiB9OwogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5n
UmVzdWx0Jik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dENoZWNraW5n
UmVzdWx0PiBkZWNvZGUoRGVjb2RlciYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmKTsKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gZGVjb2RlKERlY29kZXImKTsKIH07CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwCmluZGV4IGYwMDQ1NGViNzI5NjM3
MDBjMTIzY2JkMTQ0ODZlM2YyOWFmMzhkMDIuLmMwMjk5Yzc3ZWMzZWU2MTcwOTk1NzkzOTU0MmE2
MTEwOTUzYTI0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRl
bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUG9wdXBJdGVtLmNwcApAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0
ZW0oKQogICAgIDogbV90eXBlKFR5cGU6Okl0ZW0pCi0gICAgLCBtX3RleHREaXJlY3Rpb24oV2Vi
Q29yZTo6VGV4dERpcmVjdGlvbjo6TFRSKQorICAgICwgbV90ZXh0RGlyZWN0aW9uKFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSKQogICAgICwgbV9oYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUoZmFsc2Up
CiAgICAgLCBtX2lzRW5hYmxlZCh0cnVlKQogICAgICwgbV9pc1NlbGVjdGVkKGZhbHNlKQpAQCAt
NDIsNyArNDIsNyBAQCBXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbSgpCiAKIFdlYlBvcHVwSXRl
bTo6V2ViUG9wdXBJdGVtKFR5cGUgdHlwZSkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV90
ZXh0RGlyZWN0aW9uKFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUikKKyAgICAsIG1fdGV4dERp
cmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAsIG1faGFzVGV4dERpcmVjdGlv
bk92ZXJyaWRlKGZhbHNlKQogICAgICwgbV9pc0VuYWJsZWQodHJ1ZSkKICAgICAsIG1faXNMYWJl
bChmYWxzZSkKQEAgLTUwLDcgKzUwLDcgQEAgV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oVHlw
ZSB0eXBlKQogewogfQogCi1XZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbShUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBi
b29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBjb25z
dCBTdHJpbmcmIGFjY2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9vbCBpc0xhYmVs
LCBib29sIGlzU2VsZWN0ZWQpCitXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbShUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgdGV4dCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGJv
b2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0
IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRleHQsIGJvb2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWws
IGJvb2wgaXNTZWxlY3RlZCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV90ZXh0KHRleHQp
CiAgICAgLCBtX3RleHREaXJlY3Rpb24odGV4dERpcmVjdGlvbikKQEAgLTg2LDcgKzg2LDcgQEAg
c3RkOjpvcHRpb25hbDxXZWJQb3B1cEl0ZW0+IFdlYlBvcHVwSXRlbTo6ZGVjb2RlKElQQzo6RGVj
b2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHQpKQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAotICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gdGV4
dERpcmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbjsKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHRleHREaXJlY3Rpb24pKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0u
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCmluZGV4IDJjMzc1NDVlY2M2
YzcyZjhkZmZiM2IwODFhZTU5ZWU2Yjc5MjU3ZDMuLjY1ODAwNWUxODgxNzg5YjUxMTQ3N2Y3YTRl
YzYwZjJiY2Y4MDY1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVw
SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8V2ViQ29yZS9Xcml0aW5nTW9k
ZS5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8d3RmL0Vu
dW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDQsMTQg
KzQ0LDE0IEBAIHN0cnVjdCBXZWJQb3B1cEl0ZW0gewogCiAgICAgV2ViUG9wdXBJdGVtKCk7CiAg
ICAgV2ViUG9wdXBJdGVtKFR5cGUpOwotICAgIFdlYlBvcHVwSXRlbShUeXBlLCBjb25zdCBTdHJp
bmcmIHRleHQsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92
ZXJyaWRlLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0IFN0cmluZyYgYWNjZXNzaWJpbGl0
eVRleHQsIGJvb2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWwsIGJvb2wgaXNTZWxlY3RlZCk7Cisg
ICAgV2ViUG9wdXBJdGVtKFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgUEFMOjpUZXh0RGlyZWN0
aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5nJiB0b29sVGlw
LCBjb25zdCBTdHJpbmcmIGFjY2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9vbCBp
c0xhYmVsLCBib29sIGlzU2VsZWN0ZWQpOwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVy
JikgY29uc3Q7CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViUG9wdXBJdGVtPiBkZWNvZGUo
SVBDOjpEZWNvZGVyJik7CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV90ZXh0Owot
ICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gbV90ZXh0RGlyZWN0aW9uOworICAgIFBBTDo6VGV4
dERpcmVjdGlvbiBtX3RleHREaXJlY3Rpb247CiAgICAgYm9vbCBtX2hhc1RleHREaXJlY3Rpb25P
dmVycmlkZTsKICAgICBTdHJpbmcgbV90b29sVGlwOwogICAgIFN0cmluZyBtX2FjY2Vzc2liaWxp
dHlUZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KaW5kZXggYmFkNDdjMDc2ZWNkYzVhOGZmMDkwZjY3MTE3ODE1YzdlYzlkNjQ0NS4uNzhjOTYx
YjE1NGFkZjhiZjc3Y2EwNjAyZjUxZWRhMmZlYzk5ZTQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xMzgsNyArMTM4LDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViVmlld1Zpc3VhbElkZW50aWZp
Y2F0aW9uT3ZlcmxheS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgorI2ltcG9y
dCA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2lt
cG9ydCA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4K
QEAgLTUwMyw3ICs1MDMsNyBAQCBzdGF0aWMgdm9pZCBoYXJkd2FyZUtleWJvYXJkQXZhaWxhYmls
aXR5Q2hhbmdlZENhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLAogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRJbmxpbmVNZWRpYVBsYXliYWNrUmVxdWlyZXNQ
bGF5c0lubGluZUF0dHJpYnV0ZSghIVtfY29uZmlndXJhdGlvbiBfaW5saW5lTWVkaWFQbGF5YmFj
a1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGVdKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+
cHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2soISFb
X2NvbmZpZ3VyYXRpb24gYWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2tdICYmIHNo
b3VsZEFsbG93UGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2soKSk7CiAgICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnByZWZlcmVuY2VzKCktPnNldFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3ko
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xp
Y3k6OkNvbnRlbnQpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0
U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpUZXh0
RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+
c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVpbnQzMl90PihQQUw6OlRleHRE
aXJlY3Rpb246OkxUUikpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5z
ZXRBbGxvd1NldHRpbmdBbnlYSFJIZWFkZXJGcm9tRmlsZVVSTHMoc2hvdWxkQWxsb3dTZXR0aW5n
QW55WEhSSGVhZGVyRnJvbUZpbGVVUkxzKCkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVm
ZXJlbmNlcygpLT5zZXRTaG91bGREZWNpZGVQb2xpY3lCZWZvcmVMb2FkaW5nUXVpY2tMb29rUHJl
dmlldyghIVtfY29uZmlndXJhdGlvbiBfc2hvdWxkRGVjaWRlUG9saWN5QmVmb3JlTG9hZGluZ1F1
aWNrTG9va1ByZXZpZXddKTsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQppbmRleCAzZDllODc3YjBj
Yjc1NjU0YjYzOTE2Mzk1NTdmNTJiNjAzOTJjYWM5Li4wZjZjNTNkZmU2MjljYWFmZDJjNGI3Yjlk
M2IwYjk0ZTAyNzNiOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5tbQpAQCAtMzU0MiwyMyArMzU0MiwyMyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpoYW5k
bGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJheTxO
UwogI2VuZGlmCiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlw
ZSBjb3JlVGV4dENoZWNraW5nVHlwZShOU1RleHRDaGVja2luZ1R5cGUgdHlwZSkKK3N0YXRpYyBj
b25zdGV4cHIgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlIGNvcmVUZXh0Q2hlY2tpbmdUeXBlKE5TVGV4
dENoZWNraW5nVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgTlNU
ZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CisgICAgICAgIHJldHVybiBQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OkNvcnJlY3Rpb247CiAgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVu
dDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50
OworICAgICAgICByZXR1cm4gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICAg
ICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOgotICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CisgICAgICAgIHJldHVybiBQQUw6OlRleHRD
aGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpOb25lOwogICAgIH0KIH0KIAotc3RhdGljIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoTlNUZXh0
Q2hlY2tpbmdSZXN1bHQgKm5zUmVzdWx0KQorc3RhdGljIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0
IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdChOU1RleHRDaGVja2lu
Z1Jlc3VsdCAqbnNSZXN1bHQpCiB7Ci0gICAgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0IHJl
c3VsdDsKKyAgICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgcmVzdWx0LnR5
cGUgPSBjb3JlVGV4dENoZWNraW5nVHlwZShuc1Jlc3VsdC5yZXN1bHRUeXBlKTsKICAgICByZXN1
bHQucmFuZ2UgPSBuc1Jlc3VsdC5yYW5nZTsKICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBuc1Jl
c3VsdC5yZXBsYWNlbWVudFN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1RleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1RleHRDaGVja2Vy
LmNwcAppbmRleCAzZjgyNmY1MDY2YmNkZWQ4YmRiZjY3ZjliNWYyNjU3M2FiMzllZWNjLi4yZjU1
NzQwMjIxZWRjNGQ4Y2JlODA3NGI4YWNhYmI3MjEyNjFlNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvVGV4dENoZWNrZXIuY3BwCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgVGV4dENoZWNrZXI6
OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQz
Ml90JiwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBW
ZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgVGV4dENoZWNrZXI6
OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3BlbGxEb2N1bWVudFRhZywgY29u
c3QgU3RyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFBBTDo6R3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
QEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhSZWY8VGV4dENoZWNrZXJDb21wbGV0aW9uPiYmLCBpbnQzMl90KQogfQogCiAjaWYgVVNF
KFVOSUZJRURfVEVYVF9DSEVDS0lORykKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRD
aGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3
LCBpbnQzMl90LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIGJvb2wpCitWZWN0b3I8UEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChT
cGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90LCBPcHRpb25TZXQ8UEFMOjpUZXh0
Q2hlY2tpbmdUeXBlPiwgYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAppbmRleCA1OGMzYWZlMzcz
OTNkODA1NTAxZWE0NjAxNmE1ZDBjMjkzNzcwM2U0Li5hOTNkNTU0MWQyOTcyYzY2MTE1YTgxYTUx
MDUxZGJjMGM0OWE2NGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9UZXh0
Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgKQEAg
LTc3LDE0ICs3NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNwZWxsRG9jdW1lbnRUYWcgdW5p
cXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKTsKICAgICBzdGF0aWMgdm9pZCBjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKFNwZWxsRG9jdW1lbnRUYWcpOwogI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcs
IGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdU
eXBlPiwgYm9vbCBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVkKTsKKyAgICBzdGF0aWMgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERv
Y3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90IGluc2VydGlvblBvaW50LCBPcHRpb25TZXQ8
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgYm9vbCBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVk
KTsKICNlbmRpZgogICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTcGVsbERv
Y3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1t
YXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJf
dCYgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJp
bmcoU3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8UEFMOjpHcmFtbWFy
RGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1h
ckxlbmd0aCk7CiAgICAgc3RhdGljIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpOwogICAgIHN0
YXRpYyB2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKICAgICBzdGF0aWMgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdy
YW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKyAgICBzdGF0aWMg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBQQUw6OkdyYW1tYXJEZXRhaWwm
KTsKICAgICBzdGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChTcGVsbERvY3VtZW50VGFnLCBj
b25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRp
b25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMsIGJvb2wgaW5pdGlhbENhcGl0YWxpemF0
aW9uRW5hYmxlZCk7CiAgICAgc3RhdGljIHZvaWQgbGVhcm5Xb3JkKFNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgc3RhdGljIHZvaWQgaWdub3JlV29yZChTcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1RleHRDaGVja2VyQ29tcGxldGlvbi5jcHAKaW5kZXggOWVjYjhkNzcyNWJlNDg4N2E5
NjM1YmJjMjliNDU1N2IzMWRmMDcxNi4uMmI5OGM5YmI2ZTIzN2VkYzM3N2JkMWVmZTdhZmMxMTU0
Nzc4YjFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXJD
b21wbGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9UZXh0Q2hlY2tlckNv
bXBsZXRpb24uY3BwCkBAIC0zMSwxOSArMzEsMTkgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVJlZjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IFRleHRD
aGVja2VyQ29tcGxldGlvbjo6Y3JlYXRlKFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwg
Y29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBXZWJQYWdlUHJveHkq
IHBhZ2UpCitSZWY8VGV4dENoZWNrZXJDb21wbGV0aW9uPiBUZXh0Q2hlY2tlckNvbXBsZXRpb246
OmNyZWF0ZShUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIGNvbnN0IFBBTDo6VGV4dENo
ZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBXZWJQYWdlUHJveHkqIHBhZ2UpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dENoZWNrZXJDb21wbGV0aW9uKHJlcXVlc3RJRCwg
cmVxdWVzdERhdGEsIHBhZ2UpKTsKIH0KIAotVGV4dENoZWNrZXJDb21wbGV0aW9uOjpUZXh0Q2hl
Y2tlckNvbXBsZXRpb24oVGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBjb25zdCBUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIFdlYlBhZ2VQcm94eSogcGFnZSkKK1Rl
eHRDaGVja2VyQ29tcGxldGlvbjo6VGV4dENoZWNrZXJDb21wbGV0aW9uKFRleHRDaGVja2VyUmVx
dWVzdElEIHJlcXVlc3RJRCwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICA6IG1fcmVxdWVzdElEKHJlcXVlc3RJ
RCkKICAgICAsIG1fcmVxdWVzdERhdGEocmVxdWVzdERhdGEpCiAgICAgLCBtX3BhZ2UocGFnZSkK
IHsKIH0KIAotY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFRleHRDaGVja2VyQ29tcGxl
dGlvbjo6dGV4dENoZWNraW5nUmVxdWVzdERhdGEoKSBjb25zdAorY29uc3QgUEFMOjpUZXh0Q2hl
Y2tpbmdSZXF1ZXN0RGF0YSYgVGV4dENoZWNrZXJDb21wbGV0aW9uOjp0ZXh0Q2hlY2tpbmdSZXF1
ZXN0RGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVxdWVzdERhdGE7CiB9CkBAIC01Myw3
ICs1Myw3IEBAIGludDY0X3QgVGV4dENoZWNrZXJDb21wbGV0aW9uOjpzcGVsbERvY3VtZW50VGFn
KCkKICAgICByZXR1cm4gbV9wYWdlLT5zcGVsbERvY3VtZW50VGFnKCk7CiB9CiAKLXZvaWQgVGV4
dENoZWNrZXJDb21wbGV0aW9uOjpkaWRGaW5pc2hDaGVja2luZ1RleHQoY29uc3QgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgVGV4dENoZWNrZXJDb21wbGV0
aW9uOjpkaWRGaW5pc2hDaGVja2luZ1RleHQoY29uc3QgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5n
UmVzdWx0PiYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQogICAg
ICAgICBkaWRDYW5jZWxDaGVja2luZ1RleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1RleHRDaGVja2VyQ29tcGxldGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmgKaW5kZXggNzJmMmY5OTUzYjZjYWNkNWRhZmRhNmM3
ZGU4NTM2MmE3ODM5MWE3My4uOTUwMDU3YzBkNWM5YjI5MDMwMjg5YzQwNTc0NTY5ZDdkMTZmMzY1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0aW9u
LmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSWRlbnRpZmll
clR5cGVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KKyNpbmNsdWRlIDxw
YWwvdGV4dC9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKQEAgLTM3LDE4ICszNywxOCBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiAK
IGNsYXNzIFRleHRDaGVja2VyQ29tcGxldGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRDaGVj
a2VyQ29tcGxldGlvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VGV4dENoZWNrZXJDb21w
bGV0aW9uPiBjcmVhdGUoVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRD
aGVja2luZ1JlcXVlc3REYXRhJiwgV2ViUGFnZVByb3h5Kik7CisgICAgc3RhdGljIFJlZjxUZXh0
Q2hlY2tlckNvbXBsZXRpb24+IGNyZWF0ZShUZXh0Q2hlY2tlclJlcXVlc3RJRCwgY29uc3QgUEFM
OjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYsIFdlYlBhZ2VQcm94eSopOwogCi0gICAgY29uc3Qg
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHRleHRDaGVja2luZ1JlcXVlc3REYXRh
KCkgY29uc3Q7CisgICAgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgdGV4dENo
ZWNraW5nUmVxdWVzdERhdGEoKSBjb25zdDsKICAgICBTcGVsbERvY3VtZW50VGFnIHNwZWxsRG9j
dW1lbnRUYWcoKTsKLSAgICB2b2lkIGRpZEZpbmlzaENoZWNraW5nVGV4dChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYpIGNvbnN0OworICAgIHZvaWQgZGlkRmluaXNo
Q2hlY2tpbmdUZXh0KGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mKSBjb25z
dDsKICAgICB2b2lkIGRpZENhbmNlbENoZWNraW5nVGV4dCgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIFRleHRDaGVja2VyQ29tcGxldGlvbihUZXh0Q2hlY2tlclJlcXVlc3RJRCwgY29uc3QgV2Vi
Q29yZTo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmLCBXZWJQYWdlUHJveHkqKTsKKyAgICBUZXh0
Q2hlY2tlckNvbXBsZXRpb24oVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0IFBBTDo6VGV4dENo
ZWNraW5nUmVxdWVzdERhdGEmLCBXZWJQYWdlUHJveHkqKTsKIAogICAgIGNvbnN0IFRleHRDaGVj
a2VyUmVxdWVzdElEIG1fcmVxdWVzdElEOwotICAgIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2lu
Z1JlcXVlc3REYXRhIG1fcmVxdWVzdERhdGE7CisgICAgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0RGF0YSBtX3JlcXVlc3REYXRhOwogICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZTBkMzhmMTQ5
MzY5NDZlNmJjNTA2Yzc4ZWFjNWU5MTE1N2RjOTg5OC4uYjc2ZDhmM2Q4NGRjYTc2M2RjMWZhNWUz
ZGYyMzVjMmUyOGZlNjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC02ODMwLDcgKzY4MzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BvcHVwTWVu
dShjb25zdCBJbnRSZWN0JiByZWN0LCB1aW50NjRfdCB0ZXh0RGlyZWN0aW9uLCBjbwogCiAgICAg
Ly8gU2hvd2luZyBhIHBvcHVwIG1lbnUgcnVucyBhIG5lc3RlZCBydW5sb29wLCB3aGljaCBjYW4g
aGFuZGxlIG1lc3NhZ2VzIHRoYXQgY2F1c2UgfHRoaXN8IHRvIGdldCBjbG9zZWQuCiAgICAgUmVm
PFdlYlBhZ2VQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgbV9hY3RpdmVQb3B1cE1lbnUtPnNo
b3dQb3B1cE1lbnUocmVjdCwgc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4odGV4dERpcmVjdGlv
biksIG1fcGFnZVNjYWxlRmFjdG9yLCBpdGVtcywgZGF0YSwgc2VsZWN0ZWRJbmRleCk7CisgICAg
bV9hY3RpdmVQb3B1cE1lbnUtPnNob3dQb3B1cE1lbnUocmVjdCwgc3RhdGljX2Nhc3Q8UEFMOjpU
ZXh0RGlyZWN0aW9uPih0ZXh0RGlyZWN0aW9uKSwgbV9wYWdlU2NhbGVGYWN0b3IsIGl0ZW1zLCBk
YXRhLCBzZWxlY3RlZEluZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVQb3B1cE1l
bnUoKQpAQCAtNzE1Nyw3ICs3MTU3LDcgQEAgU3BlbGxEb2N1bWVudFRhZyBXZWJQYWdlUHJveHk6
OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykK
LXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRl
eHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBpbnQzMl90IGlu
c2VydGlvblBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYWdlUHJv
eHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFBB
TDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2lu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNvbXBsZXRpb25IYW5kbGVyKFRleHRD
aGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIGlu
c2VydGlvblBvaW50LCBjaGVja2luZ1R5cGVzLCBtX2luaXRpYWxDYXBpdGFsaXphdGlvbkVuYWJs
ZWQpKTsKIH0KQEAgLTcxNzEsOSArNzE3MSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2CiAg
ICAgY29tcGxldGlvbkhhbmRsZXIobWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsPiYmLCBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCBiYWRHcmFt
bWFyTGVuZ3RoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFnZVByb3h5OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mJiwgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRp
b24sIGludDMyX3QgYmFkR3JhbW1hckxlbmd0aCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOworICAgIFZlY3RvcjxQQUw6
OkdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOwogICAgIGludDMyX3QgYmFkR3JhbW1hckxv
Y2F0aW9uID0gMDsKICAgICBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGggPSAwOwogICAgIFRleHRD
aGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIGdy
YW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOwpAQCAt
NzE5MCw3ICs3MTkwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV28KICAgICBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnKCks
IG1pc3NwZWxsZWRXb3JkKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0
IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFz
ZSwgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewogICAgIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRh
ZygpLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KQEAgLTcyMTgsMTIgKzcy
MTgsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJiB3b3Jk
KQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29yZCk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hl
Y2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiBy
ZXF1ZXN0LCBpbnQzMl90IGluc2VydGlvblBvaW50KQordm9pZCBXZWJQYWdlUHJveHk6OnJlcXVl
c3RDaGVja2luZ09mU3RyaW5nKFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgY29uc3Qg
UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVxdWVzdCwgaW50MzJfdCBpbnNlcnRpb25Q
b2ludCkKIHsKICAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENo
ZWNrZXJDb21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlzKSwgaW5zZXJ0
aW9uUG9pbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0
KFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hD
aGVja2luZ1RleHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8
UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHQpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlcXVlc3RJRCwgcmVzdWx0KSk7CiB9CkBA
IC05NjE4LDcgKzk2MTgsNyBAQCBOU09iamVjdCAqV2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdAogICAgIHJldHVybiBw
YWdlQ2xpZW50KCkuaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RS
ZXN1bHQoaGl0VGVzdFJlc3VsdCwgdHlwZSwgdXNlckRhdGEpOwogfQogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0
IGFjY2VwdGVkQ2FuZGlkYXRlKQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkQ2Fu
ZGlkYXRlKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogewogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGFjY2VwdGVk
Q2FuZGlkYXRlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4
IGIwNDUzOWQ2MDA1ZDU0M2JjNjJmYjg5MDU5OTY0Njg5MzJhMzNlOTIuLjI1N2U0NzEyZDEyNDQ1
MTdlNjdhY2IxZjZlMzg3OWM3NzQ1NGZkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCkBAIC0xMTAsNyArMTEwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1J1bkphdmFT
Y3JpcHRQYXJhbWV0ZXJzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxUeXBlcy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0
Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1RyYW5zbGF0aW9uQ29udGV4dE1lbnVJbmZvLmg+CkBAIC0xMTgsNiArMTE3LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9U
ZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNs
dWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yMjEs
NiArMjIxLDEwIEBAIGNsYXNzIFVJQ2xpZW50OwogY2xhc3MgVVJMUmVxdWVzdDsKIH0KIAorbmFt
ZXNwYWNlIFBBTCB7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OworfQorCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIGVudW0gY2xhc3MgSW5zcGVjdG9yVGFyZ2V0VHlwZSA6IHVpbnQ4X3Q7CiB9
CkBAIC0zMDcsNyArMzExLDYgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIHN0cnVjdCBT
aGFyZURhdGE7CiBzdHJ1Y3QgU3BlZWNoUmVjb2duaXRpb25FcnJvcjsKIHN0cnVjdCBUZXh0QWx0
ZXJuYXRpdmVXaXRoUmFuZ2U7Ci1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owogc3RydWN0IFRl
eHRSZWNvZ25pdGlvblJlc3VsdDsKIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CiBzdHJ1Y3Qg
V2luZG93RmVhdHVyZXM7CkBAIC0xNDkzLDcgKzE0OTYsNyBAQCBwdWJsaWM6CiAKICAgICBTcGVs
bERvY3VtZW50VGFnIHNwZWxsRG9jdW1lbnRUYWcoKTsKIAotICAgIHZvaWQgZGlkRmluaXNoQ2hl
Y2tpbmdUZXh0KFRleHRDaGVja2VyUmVxdWVzdElELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVzdWx0PiYpOworICAgIHZvaWQgZGlkRmluaXNoQ2hlY2tpbmdUZXh0KFRleHRD
aGVja2VyUmVxdWVzdElELCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7
CiAgICAgdm9pZCBkaWRDYW5jZWxDaGVja2luZ1RleHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQpOwog
ICAgICAgICAKICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihXZWJDb3JlOjpTY3Jv
bGxQaW5uaW5nQmVoYXZpb3IpOwpAQCAtMTU3MSw3ICsxNTc0LDcgQEAgcHVibGljOgogCiAgICAg
TlNPYmplY3QgKmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVz
dWx0KFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+LCB1aW50NjRfdCwgUmVmUHRyPEFQSTo6T2Jq
ZWN0Pik7CiAKLSAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFdlYkNvcmU6OlRleHRD
aGVja2luZ1Jlc3VsdCk7CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShQQUw6OlRl
eHRDaGVja2luZ1Jlc3VsdCk7CiAgICAgdm9pZCBkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgp
OwogCiAgICAgdm9pZCBzZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGludCk7CkBAIC0x
NTg1LDcgKzE1ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnN0YWxsQWN0aXZpdHlTdGF0ZUNo
YW5nZUNvbXBsZXRpb25IYW5kbGVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICNp
ZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29yZTo6VGV4dENoZWNraW5nVHlw
ZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYmKT4mJik7CisgICAg
dm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvblNldDxQ
QUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9p
bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0
PiYmKT4mJik7CiAjZW5kaWYKICAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQzMl90IGluc2VydGlvblBvaW50LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKIApAQCAtMjMyMiwx
MyArMjMyNSwxMyBAQCBwcml2YXRlOgogCiAgICAgLy8gU3BlbGxpbmcgYW5kIGdyYW1tYXIuCiAg
ICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCBtaXNz
cGVsbGluZ0xlbmd0aCk+JiYpOwotICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsPiYmLCBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCBiYWRHcmFt
bWFyTGVuZ3RoKT4mJik7CisgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJp
bmcmIHRleHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFBBTDo6R3JhbW1hckRldGFp
bD4mJiwgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QgYmFkR3JhbW1hckxlbmd0
aCk+JiYpOwogICAgIHZvaWQgc3BlbGxpbmdVSUlzU2hvd2luZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7Ci0gICAgdm9pZCB1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25z
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBQQUw6
OkdyYW1tYXJEZXRhaWwmKTsKICAgICB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQp
OwogICAgIHZvaWQgaWdub3JlV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOwotICAgIHZvaWQgcmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6
OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCk7CisgICAg
dm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hlY2tlclJlcXVlc3RJRCwgY29uc3Qg
UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpOwog
CiAgICAgdm9pZCB0YWtlRm9jdXModWludDhfdCBkaXJlY3Rpb24pOwogICAgIHZvaWQgc2V0VG9v
bFRpcChjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCAwODc3OGFlNjU0NDhiZWNhODAwYjQwZmQzMjgzOGNk
MjNlZDc4YjkzLi5lNGUwNmI2OWFlZDkyNGJiNjI4YWUyMTQzYTE3NTk1ZGRmN2QxNTAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0yODEsMTcgKzI4MSwxNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBT
cGVsbGluZyBhbmQgZ3JhbW1hciBtZXNzYWdlcwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJ
TkcpCi0gICAgQ2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nIHRleHQsIE9wdGlvblNldDxXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBpbnQzMl90IGluc2VydGlvblBv
aW50KSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0cykgU3lu
Y2hyb25vdXMKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgT3B0aW9uU2V0
PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Q
b2ludCkgLT4gKFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0cykgU3luY2hy
b25vdXMKICNlbmRpZgogICAgIENoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmcgdGV4dCkgLT4g
KGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCkg
U3luY2hyb25vdXMKLSAgICBDaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmcgdGV4dCkgLT4gKFZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiByZXN1bHRzLCBpbnQzMl90IGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50MzJfdCBiYWRHcmFtbWFyTGVuZ3RoKSBTeW5jaHJvbm91cworICAgIENoZWNr
R3JhbW1hck9mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoVmVjdG9yPFBBTDo6R3JhbW1hckRldGFp
bD4gcmVzdWx0cywgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QgYmFkR3JhbW1h
ckxlbmd0aCkgU3luY2hyb25vdXMKICAgICBTcGVsbGluZ1VJSXNTaG93aW5nKCkgLT4gKGJvb2wg
aXNTaG93aW5nKSBTeW5jaHJvbm91cwogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoU3RyaW5nIG1pc3NwZWxsZWRXb3JkKQotICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhTdHJpbmcgYmFkR3JhbW1hclBocmFzZSwgc3RydWN0IFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWwgZ3JhbW1hckRldGFpbCkKKyAgICBVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVjdCBQQUw6OkdyYW1tYXJEZXRhaWwg
Z3JhbW1hckRldGFpbCkKICAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5n
IGNvbnRleHQsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8U3RyaW5nPiBndWVz
c2VzKSBTeW5jaHJvbm91cwogICAgIExlYXJuV29yZChTdHJpbmcgd29yZCkKICAgICBJZ25vcmVX
b3JkKFN0cmluZyB3b3JkKQotICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYktpdDo6VGV4
dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0
RGF0YSByZXF1ZXN0LCBpbnQzMl90IGluc2VydGlvblBvaW50KQorICAgIFJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFdlYktpdDo6VGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBQQUw6OlRl
eHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3QsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpCiAK
ICAgICAjIERyYWcgYW5kIGRyb3AgbWVzc2FnZXMKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUG9wdXBNZW51UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBvcHVwTWVudVByb3h5LmgKaW5kZXggNjFkZWUy
ZTRiNjY4MGE0YTdiNjg5YTQwZDA3NGMzZTIyMGM2MTIxYi4uMzM4YzllNWI5MDg5MDQwMjBlNDFh
OTQzOTdmZGZmMjhkYWIxZjY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUG9wdXBNZW51UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQb3B1
cE1lbnVQcm94eS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYlBvcHVwTWVudVByb3h5
X2gKICNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlfaAogCi0jaW5jbHVkZSA8V2ViQ29yZS9Xcml0
aW5nTW9kZS5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNob3dQb3B1
cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgV2ViQ29yZTo6VGV4dERpcmVjdGlv
biwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0
ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgUEFMOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBW
ZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYs
IGludDMyX3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBN
ZW51KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxUcmFja2luZygpIHsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KaW5kZXggMDQ3MzVk
ZGRiZTEyZWNlZTViNWNiM2U4MzY4OTdkNDhiZDBhOWY0NS4uN2EyOThkZDc1M2QzY2JjZDk1M2Ey
OTBlOGUzMjkwNGViMGY2MWJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1RleHRDaGVja2VySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9U
ZXh0Q2hlY2tlcklPUy5tbQpAQCAtMTg5LDEwICsxODksMTAgQEAgc3RhdGljIFJldGFpblB0cjxV
SVRleHRDaGVja2VyPiB0ZXh0Q2hlY2tlckZvcihTcGVsbERvY3VtZW50VGFnIHNwZWxsRG9jdW1l
bnRUYWcKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNw
ZWxsRG9jdW1lbnRUYWcgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBpbnQzMl90
IC8qIGluc2VydGlvblBvaW50ICovLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tp
bmdUeXBlcywgYm9vbCAvKiBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVkICovKQorVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoU3BlbGxEb2N1bWVudFRhZyBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIGlu
dDMyX3QgLyogaW5zZXJ0aW9uUG9pbnQgKi8sIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5
cGU+IGNoZWNraW5nVHlwZXMsIGJvb2wgLyogaW5pdGlhbENhcGl0YWxpemF0aW9uRW5hYmxlZCAq
LykKIHsKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGlmICgh
Y2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpCisgICAg
VmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIGlmICghY2hlY2tp
bmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CiAKICAgICBhdXRvIHRleHRDaGVja2VyID0gdGV4dENoZWNrZXJG
b3Ioc3BlbGxEb2N1bWVudFRhZyk7CkBAIC0yMTQsOCArMjE0LDggQEAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1l
bnRUYWcgc3AKICAgICAgICAgaWYgKG1pc3NwZWxsZWRSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZv
dW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJl
c3VsdDsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsK
KyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICByZXN1bHQu
dHlwZSA9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgIHJlc3VsdC5y
YW5nZSA9IG1pc3NwZWxsZWRSYW5nZTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShy
ZXN1bHQpKTsKIApAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90JiwKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJP
ZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8UEFM
OjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKIHsKICAgICAvLyBpT1MgdXNl
cyBjaGVja1RleHRPZlBhcmFncmFwaCgpIGluc3RlYWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
QEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cgogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFy
RGV0YWlsJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmLCBjb25zdCBQQUw6OkdyYW1tYXJE
ZXRhaWwmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCAx
YTgxY2NlNDQ1NWViMWE3MmIxMGU4ZjI0NzNjNjBhMjkxZWE1OGJhLi42NWU0MjdiZmMyZmNmZWRj
MzA5MDQ1YWQ5YzVmOTI0N2IxMGExMzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMwMDcsNyArMzAw
Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJlY29nbml6ZXIg
KmEsIFVJR2VzdHVyZVJlY29nbml6ZXIgKmIsIFVJCiAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
c2VsZWN0aW9uR2VvbWV0cmllcywgW10gKGF1dG8mIGdlb21ldHJ5KSB7CiAgICAgICAgIGF1dG8g
d2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJS
ZWN0LnJlY3QgPSBnZW9tZXRyeS5yZWN0KCk7Ci0gICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVj
dGlvbiA9IGdlb21ldHJ5LmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxU
UiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmln
aHRUb0xlZnQ7CisgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGdlb21ldHJ5LmRp
cmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9u
TGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgd2Vi
UmVjdC5pc0xpbmVCcmVhayA9IGdlb21ldHJ5LmlzTGluZUJyZWFrKCk7CiAgICAgICAgIHdlYlJl
Y3QuaXNGaXJzdE9uTGluZSA9IGdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKTsKICAgICAgICAgd2Vi
UmVjdC5pc0xhc3RPbkxpbmUgPSBnZW9tZXRyeS5pc0xhc3RPbkxpbmUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KaW5kZXggZTMx
ZGM4MDUyZTJmMDJiNzA4MDNjMzlmZTBmMTExYjM4ODNlMTc1MS4uMDE0MDE4MDdiNjVjYWM4OTFh
MDFjNWUwNzU0NjhjODA3ZGQyODZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KQEAgLTEzOCw3ICsxMzgsNyBAQAogQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIC0gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24p
d3JpdGluZ0RpcmVjdGlvbgogewotICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0
aW9uKCkgPT0gV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSID8gVUlUZXh0V3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogVUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAg
IHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgPyBVSVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBVSVRleHRXcml0
aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiB9CiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rp
b25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5o
CmluZGV4IDQ5NzljZTM5NjQwNGQ2NGI0N2IxNWZlNTE0YWM5NzQ4YTkxZDYyYzEuLmY5YzNiODNi
YTA4Y2I3ZjhjNWZjNDIxNTJkMTIyMTUwODc0ZDNjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
Q29ycmVjdGlvblBhbmVsX2gKICNkZWZpbmUgQ29ycmVjdGlvblBhbmVsX2gKIAotI2ltcG9ydCA8
V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KKyNpbXBvcnQgPHBhbC90ZXh0L1RleHRDaGVja2luZy5o
PgogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KaW5kZXggNGNjMjJkZjAzMDgyNTBiZTI1MDYx
NjIxMmM1ODAzMDdlMjAzMTAyMi4uNTRiMTE3ZGM1ZTNhMDkzODUxOGY0ZTAwODAwMDFlN2MwMDg5
MmY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2Vy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5t
bQpAQCAtMzE5LDkgKzMxOSw5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcoU3BlbGxEb2N1bWVudFRhZyB0YWcpCiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NI
RUNLSU5HKQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3IHRleHQsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiBjaGVja2luZ1R5cGVzLCBib29sIGluaXRpYWxDYXBpdGFsaXphdGlvbkVuYWJsZWQpCitW
ZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4
dCwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlw
ZT4gY2hlY2tpbmdUeXBlcywgYm9vbCBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVkKQogewot
ICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgVmVjdG9yPFBBTDo6
VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB0
ZXh0U3RyaW5nID0gdGV4dC5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CiAgICAgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zID0gQHsKQEAgLTM0MCwxOSArMzQwLDE5IEBAIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERv
Y3VtZW50VGFnIHNwCiAgICAgICAgIEFTU0VSVChpbmNvbWluZ1Jlc3VsdC5yYW5nZS5sb2NhdGlv
biAhPSBOU05vdEZvdW5kKTsKICAgICAgICAgQVNTRVJUKGluY29taW5nUmVzdWx0LnJhbmdlLmxl
bmd0aCA+IDApOwogICAgICAgICBhdXRvIHJlc3VsdFJhbmdlID0gaW5jb21pbmdSZXN1bHQucmFu
Z2U7Ci0gICAgICAgIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKSB7
Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAgICAgcmVz
dWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKKyAgICAgICAgaWYgKHJlc3Vs
dFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgY2hlY2tpbmdUeXBlcy5jb250
YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgeworICAgICAgICAgICAgUEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBQ
QUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdl
ID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwotICAg
ICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAm
JiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7Ci0g
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKKyAgICAgICAgICAg
IFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIE5TQXJyYXkgKmRl
dGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwotICAgICAgICAgICAgcmVz
dWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOworICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1
bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICpp
bmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29t
aW5nRGV0YWlsKTsKLSAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKKyAgICAg
ICAgICAgICAgICBQQUw6OkdyYW1tYXJEZXRhaWwgZGV0YWlsOwogICAgICAgICAgICAgICAgIE5T
VmFsdWUgKmRldGFpbFJhbmdlQXNOU1ZhbHVlID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktl
eTpOU0dyYW1tYXJSYW5nZV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbFJhbmdlQXNO
U1ZhbHVlKTsKICAgICAgICAgICAgICAgICBOU1JhbmdlIGRldGFpbE5TUmFuZ2UgPSBbZGV0YWls
UmFuZ2VBc05TVmFsdWUgcmFuZ2VWYWx1ZV07CkBAIC0zNjYsMzMgKzM2NiwzMyBAQCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3Bl
bGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChk
ZXRhaWwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0
KTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxp
bmsgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkgewot
ICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6TGluazsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1
bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlu
cyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmspKSB7CisgICAgICAgICAgICBQQUw6OlRleHRD
aGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlwZSA9IFBBTDo6VGV4
dENoZWNraW5nVHlwZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNvbWluZ1Jlc3VsdCBV
UkxdIGFic29sdXRlU3RyaW5nXTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90
ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1b3RlKSkgewot
ICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CisgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRh
aW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CisgICAgICAgICAgICBQQUw6OlRl
eHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlwZSA9IFBBTDo6
VGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3Vs
dCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQp
OwotICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFz
aCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7Ci0g
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoOworICAgICAgICB9IGVsc2UgaWYgKHJlc3Vs
dFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5z
KFBBTDo6VGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nUmVzdWx0IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFu
Z2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVw
bGFjZW1lbnRTdHJpbmddOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2Vt
ZW50ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1l
bnQpKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKKyAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50ICYm
IGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVu
dCkpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKKyAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsK
ICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVz
dWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMu
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpIHsKLSAgICAgICAgICAgIFRl
eHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMo
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkgeworICAgICAgICAgICAgUEFMOjpU
ZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBQQUw6
OlRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWlu
Z1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChy
ZXN1bHQpOwpAQCAtNDEwLDcgKzQxMCw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxp
bmdPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90JiwKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0
cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1h
ckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dy
YW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8UEFMOjpH
cmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKIHsKICAgICAvLyBNYWMgdXNlcyBj
aGVja1RleHRPZlBhcmFncmFwaCBpbnN0ZWFkLgogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC00
MzUsNyArNDM1LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHIKICAgICBbW05TU3BlbGxDaGVj
a2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVk
V29yZDptaXNzcGVsbGVkV29yZF07CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJh
ZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit2b2lk
IFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBQQUw6OkdyYW1t
YXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7CiAgICAgQ2hlY2tlZFVpbnQ2NCBlbmRPZlJhbmdl
Q2hlY2tlZCA9IGdyYW1tYXJEZXRhaWwucmFuZ2UubG9jYXRpb247CiAgICAgZW5kT2ZSYW5nZUNo
ZWNrZWQgKz0gZ3JhbW1hckRldGFpbC5yYW5nZS5sZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5oCmluZGV4IDA5MGUxNDk4MjU0
MTNiZDA4M2M3YjQyMjM4ZmUwZmNhODgyY2M0NWYuLjBjNzA3ODBkMWY2YWRlMjc0NjQ0MjZmMzli
NGRkOTQxNTMyOTEyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQb3B1cE1lbnVQcm94eU1hYy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJQb3B1cE1lbnVQcm94eU1hYy5oCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIH0K
ICAgICB+V2ViUG9wdXBNZW51UHJveHlNYWMoKTsKIAotICAgIHZvaWQgc2hvd1BvcHVwTWVudShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBh
Z2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mLCBjb25zdCBQbGF0Zm9y
bVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZv
aWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUEFMOjpUZXh0RGlyZWN0
aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYs
IGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBoaWRlUG9wdXBNZW51KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5j
ZWxUcmFja2luZygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYlBvcHVwTWVudVByb3h5
TWFjKE5TVmlldyAqLCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Jik7CiAKLSAgICB2b2lkIHBv
cHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgTlNGb250ICosIFdlYkNvcmU6OlRl
eHREaXJlY3Rpb24pOworICAgIHZvaWQgcG9wdWxhdGUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRl
bT4mLCBOU0ZvbnQgKiwgUEFMOjpUZXh0RGlyZWN0aW9uKTsKIAogICAgIFJldGFpblB0cjxOU1Bv
cFVwQnV0dG9uQ2VsbD4gbV9wb3B1cDsKICAgICBOU1ZpZXcgKm1fd2ViVmlldzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQppbmRl
eCA4ZWYzYzBkN2ZhNzVmMjJkYjlhMTRkMjA4ZGNlZTc3ZDY5OWNmNGNjLi41NGU3YjUxZDc1ZmRm
YjZiYjdkMDQ5ODE5YmFiYjU2YzY5MGZkOTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCkBAIC01NSw3ICs1NSw3IEBAIFdl
YlBvcHVwTWVudVByb3h5TWFjOjp+V2ViUG9wdXBNZW51UHJveHlNYWMoKQogICAgICAgICBbbV9w
b3B1cCBzZXRDb250cm9sVmlldzpuaWxdOwogfQogCi12b2lkIFdlYlBvcHVwTWVudVByb3h5TWFj
Ojpwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIE5TRm9udCAqZm9u
dCwgVGV4dERpcmVjdGlvbiBtZW51VGV4dERpcmVjdGlvbikKK3ZvaWQgV2ViUG9wdXBNZW51UHJv
eHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgTlNGb250
ICpmb250LCBQQUw6OlRleHREaXJlY3Rpb24gbWVudVRleHREaXJlY3Rpb24pCiB7CiAgICAgaWYg
KG1fcG9wdXApCiAgICAgICAgIFttX3BvcHVwIHJlbW92ZUFsbEl0ZW1zXTsKQEAgLTc1LDkgKzc1
LDkgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVjdG9yPFdl
YlBvcHVwSXRlbT4mIGl0ZW1zLCBOU0ZvbnQgKmYKICAgICAgICAgICAgIE5TTWVudUl0ZW0gKm1l
bnVJdGVtID0gW21fcG9wdXAgbGFzdEl0ZW1dOwogCiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaFN0eWxlID0gYWRvcHROUyhbW05TUGFyYWdy
YXBoU3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV0pOwotICAgICAgICAg
ICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBpdGVtc1tpXS5tX3RleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRv
UmlnaHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAgICAgIE5TV3Jp
dGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gaXRlbXNbaV0ubV90ZXh0RGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmln
aHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgICAgIFtwYXJhZ3Jh
cGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjp3cml0aW5nRGlyZWN0aW9uXTsKLSAgICAg
ICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6bWVudVRleHREaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSID8gTlNUZXh0QWxpZ25tZW50TGVmdCA6IE5TVGV4dEFsaWdubWVu
dFJpZ2h0XTsKKyAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6bWVudVRl
eHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1RleHRBbGlnbm1lbnRM
ZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHRdOwogICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0
YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKICAgICAgICAgICAgICAgICBwYXJhZ3Jh
cGhTdHlsZS5nZXQoKSwgTlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUsCiAgICAgICAgICAg
ICAgICAgZm9udCwgTlNGb250QXR0cmlidXRlTmFtZSwKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBX
ZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4m
IGl0ZW1zLCBOU0ZvbnQgKmYKICAgICB9CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6
OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVt
PiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgZGF0YSwgaW50MzJfdCBzZWxl
Y3RlZEluZGV4KQordm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVwTWVudShjb25z
dCBJbnRSZWN0JiByZWN0LCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgZG91Ymxl
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25z
dCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKIHsK
ICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5Db21t
dW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKICAgICBOU0ZvbnQgKmZvbnQ7CkBAIC0xMjMsMTAg
KzEyMywxMCBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5TWFjOjpzaG93UG9wdXBNZW51KGNvbnN0
IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24gdGV4dAogCiAgICAgW21fcG9wdXAgYXR0YWNo
UG9wVXBXaXRoRnJhbWU6cmVjdCBpblZpZXc6bV93ZWJWaWV3XTsKICAgICBbbV9wb3B1cCBzZWxl
Y3RJdGVtQXRJbmRleDpzZWxlY3RlZEluZGV4XTsKLSAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8g
TlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW21fcG9wdXAgc2V0VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICBOU01lbnUgKm1lbnUg
PSBbbV9wb3B1cCBtZW51XTsKLSAgICBbbWVudSBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b25SaWdodFRvTGVmdF07CisgICAgW21lbnUgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25SaWdodFRvTGVmdF07CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBib3Jyb3dlZCBm
cm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUuCiAgICAgY29u
c3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEzOwpAQCAtMTQxLDE4ICsxNDEsMTgg
QEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0
JiByZWN0LCBUZXh0RGlyZWN0aW9uIHRleHQKICAgICAgICAgaWYgKHRpdGxlRnJhbWUuc2l6ZS53
aWR0aCA8PSAwIHx8IHRpdGxlRnJhbWUuc2l6ZS5oZWlnaHQgPD0gMCkKICAgICAgICAgICAgIHRp
dGxlRnJhbWUgPSByZWN0OwogICAgICAgICBmbG9hdCB2ZXJ0aWNhbE9mZnNldCA9IHJvdW5kZigo
TlNNYXhZKHJlY3QpIC0gTlNNYXhZKHRpdGxlRnJhbWUpKSArIE5TSGVpZ2h0KHRpdGxlRnJhbWUp
KSArIDE7Ci0gICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAg
ICAgICAgICAgICBsb2NhdGlvbiA9IE5TTWFrZVBvaW50KE5TTWluWChyZWN0KSArIHBvcE92ZXJI
b3Jpem9udGFsQWRqdXN0LCBOU01heFkocmVjdCkgLSB2ZXJ0aWNhbE9mZnNldCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhYKHJlY3QpIC0g
cG9wT3Zlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShyZWN0KSAtIHZlcnRpY2FsT2Zmc2V0KTsK
ICAgICB9IGVsc2UgewotICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpCisgICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKQogICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01pblgocmVjdCkgKyBw
b3BVbmRlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShyZWN0KSArIHBvcFVuZGVyVmVydGljYWxB
ZGp1c3QpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9IE5TTWFrZVBvaW50
KE5TTWF4WChyZWN0KSAtIHBvcFVuZGVySG9yaXpvbnRhbEFkanVzdCwgTlNNYXhZKHJlY3QpICsg
cG9wVW5kZXJWZXJ0aWNhbEFkanVzdCk7CiAgICAgfQogICAgIFJldGFpblB0cjxOU1ZpZXc+IGR1
bW15VmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdF0pOwot
ICAgIFtkdW1teVZpZXcuZ2V0KCkgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0
RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRU
b0xlZnRdOworICAgIFtkdW1teVZpZXcuZ2V0KCkgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdF07CiAgICAgW21fd2ViVmlldyBhZGRTdWJ2aWV3OmR1bW15Vmll
dy5nZXQoKV07CiAgICAgbG9jYXRpb24gPSBbZHVtbXlWaWV3IGNvbnZlcnRQb2ludDpsb2NhdGlv
biBmcm9tVmlldzptX3dlYlZpZXddOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQueGNzY2hlbWUgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQu
eGNzY2hlbWUKaW5kZXggNjEwMzliMWM3MTczOGYzMjMzZGI4YjM1OTg0M2M0NGM4M2VmOWM5Zi4u
MjE4ZGIyYjM3Njk5MGM0NThiNWU5ODNiMTVkODJmOWRjNGEzMTg2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViS2l0
Lnhjc2NoZW1lCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai94Y3NoYXJlZGRh
dGEveGNzY2hlbWVzL1dlYktpdC54Y3NjaGVtZQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgPC9U
ZXN0YWJsZXM+CiAgICA8L1Rlc3RBY3Rpb24+CiAgICA8TGF1bmNoQWN0aW9uCi0gICAgICBidWls
ZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKKyAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJE
ZWJ1ZyIKICAgICAgIHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2Vy
Rm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCIgogICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZp
ZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCiAgICAgICBsYXVu
Y2hTdHlsZSA9ICIwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
Y3BwCmluZGV4IDk0MjFkZDIzOGNiNmVjNjNmZTFjMDdkNDczNjFjYjBiNjVmZjQwY2IuLjg4MDUz
NmNhMDBmODRlNjNkM2M2YTUxMWJjMjM3YWMwZjFkMjI3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5kQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzKGNvbnN0IEZsb2F0UgogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhkZXN0aW5hdGlvbikpOwogfQogCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6
OkZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJhd0dseXBocyB7IGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSB9KSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAppbmRleCA3MWZkYjYzZGY0
YWM4NDk3NDcyMzI2OWI3ZjAzZDk5N2I4MTM5ODlkLi41MjkxYzQ5NmQ1OTFlYjU4MDIyZWQ2NWM0
OGRiOTU3M2FhMjFmYmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmgKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZENsaXBQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhj
b25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01v
ZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250
JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdl
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdl
YkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3
UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAzYTFlMDQ5
ZDNkOTNmY2FkYzdiNzNlOTQ5ZGMyODI4MTY2ZGY3MDVjLi4zNDJiMDQ5YjdkNTg2NzUyNDQ4NjVk
NWE2ZTc4ZDNkNTJmZWZiMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzA1LDcgKzcw
NSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNr
ZWQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyRW1iCiAgICAgVU5VU0VEX1BBUkFNKHBsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uKTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIHVuc2ln
bmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRU
ZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBT
dHJpbmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikKIHsKICAgICBSZWZQdHI8QVBJOjpP
YmplY3Q+IHVzZXJEYXRhOwogCkBAIC03MTksNyArNzE5LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RS
ZXN1bHQKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhUaXRsZUxlbmd0aCA9IDEwMDA7
IC8vIENsb3Nlc3QgcG93ZXIgb2YgMTAgYWJvdmUgdGhlIFczQyByZWNvbW1lbmRhdGlvbiBmb3Ig
VGl0bGUgbGVuZ3RoLgogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6cHJpbnQoRnJhbWUmIGZyYW1l
LCBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpwcmludChGcmFtZSYgZnJhbWUsIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0
bGUpCiB7CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUo
ZnJhbWUpOwogICAgIEFTU0VSVCh3ZWJGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggYzkx
ZDNlODFlZTYxNTQ3ZWVlMzFlMGNmNjg4ODRmYTg1Y2ZlODY2OS4uYWMyZDk4ODAzMDA4N2RkOWY0
MDMxMDc1ZWE5ZjBiYmYwYmJiNDAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTQwLDkgKzE0
MCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VC
ZUJ1dHRvbihXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24pIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25D
bGlja2VkKFdlYkNvcmU6OkVsZW1lbnQmLCBXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWdu
ZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBXZWJDb3JlOjpUZXh0RGly
ZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJp
bmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikgZmluYWw7CiAKLSAgICB2b2lkIHByaW50
KFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZp
bmFsOworICAgIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBQQUw6OlN0cmluZ1dp
dGhEaXJlY3Rpb24mKSBmaW5hbDsKIAogICAgIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdl
YkNvcmU6OkZyYW1lJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFdlYkNvcmU6OkRhdGFi
YXNlRGV0YWlscykgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggODFlMzc5ZTMz
ZDFhOWFjZGM4NmVmNWM0YmUyMWE3MjYwZDk0ZDQ4ZS4uZmE0ZTVkY2ExNmJhNjJlMTg3YTllOTMy
M2E3MjM4YzUyZTFkMmI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTQ4MSwxMSArNDgx
LDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQo
KS5zaG91bGRQZXJmb3JtQWN0aW9uSW5UZXh0RmllbGQobV9wYWdlLCBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PihlbGVtZW50KSwgdG9JbnB1dEZpZWxkQWN0aW9uKFdLSW5wdXRGaWVsZEFjdGlv
blR5cGVJbnNlcnREZWxldGUpLCB3ZWJGcmFtZSk7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdUeXBlIHR5cGUpIGNvbnN0Citib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRXJhc2VN
YXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oUEFMOjpUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpIGNv
bnN0CiB7CiAgICAgLy8gVGhpcyBwcmV2ZW50cyBlcmFzaW5nIHNwZWxsaW5nIG1hcmtlcnMgb24g
T1MgWCBMaW9uIG9yIGxhdGVyIHRvIG1hdGNoIEFwcEtpdCBvbiB0aGVzZSBNYWMgT1MgWCB2ZXJz
aW9ucy4KICNpZiBQTEFURk9STShDT0NPQSkKLSAgICByZXR1cm4gdHlwZSAhPSBUZXh0Q2hlY2tp
bmdUeXBlOjpTcGVsbGluZzsKKyAgICByZXR1cm4gdHlwZSAhPSBQQUw6OlRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odHlwZSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC01MTgsNyArNTE4LDcgQEAgU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0
b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJP
ZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYg
Z3JhbW1hckRldGFpbHMsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJM
ZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5n
VmlldyB0ZXh0LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGlu
dCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7CiAgICAgaW50
MzJfdCByZXN1bHRMb2NhdGlvbiA9IC0xOwogICAgIGludDMyX3QgcmVzdWx0TGVuZ3RoID0gMDsK
QEAgLTUzNywxNiArNTM3LDE2IEBAIHN0YXRpYyB1aW50NjRfdCBpbnNlcnRpb25Qb2ludEZyb21D
dXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlCiAKICNpZiBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJF
ZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
T3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCitWZWN0b3I8UEFMOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5n
VmlldyBzdHJpbmdWaWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2lu
Z1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewotICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgVmVjdG9yPFBBTDo6VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3RyaW5nVmlldy50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCksIGNoZWNraW5nVHlwZXMsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVj
a1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOwogICAgIHJldHVybiByZXN1bHRzOwog
fQogCiAjZW5kaWYKIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1t
YXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwg
Y29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewogICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCkpOwogfQpAQCAtNTczLDcgKzU3
Myw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJp
bmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4CiAgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0LCBpbnNl
cnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQ6OlJlcGx5KGd1ZXNzZXMpKTsKIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFRleHRDaGVj
a2luZ1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pCit2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIGF1dG8gcmVxdWVzdElE
ID0gVGV4dENoZWNrZXJSZXF1ZXN0SUQ6OmdlbmVyYXRlKCk7CiAgICAgbV9wYWdlLT5hZGRUZXh0
Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJRCwgcmVxdWVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5k
ZXggNTA2ZDlmNTQxMzhkMzdjYjRjNjRlZDQ2MGY1OWE1YzI4ZmU1MjJhNi4uZjQ5OTcxZGNmMjUz
ZWNlZTMyYWIyZDkzNmM4N2MzNGRhZjM0MTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMTUw
LDI1ICsxNTAsMjUgQEAgcHJpdmF0ZToKIAogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hl
Y2tlcigpIGZpbmFsIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIGJvb2wgc2hvdWxkRXJhc2VNYXJr
ZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQ
QUw6OlRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgaWdub3JlV29yZElu
U3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIGxlYXJuV29yZChj
b25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJp
bmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgp
IGZpbmFsOwogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVk
V29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSBmaW5hbDsKLSAgICB2b2lkIGNoZWNr
R3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWls
PiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIGZpbmFs
OworICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPFBBTDo6
R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFy
TGVuZ3RoKSBmaW5hbDsKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVj
dG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3Ry
aW5nVmlldywgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlw
ZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIGZp
bmFsOworICAgIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3RyaW5nVmlldywgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tp
bmdUeXBlcywgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlv
bikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBmaW5h
bDsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBQQUw6OkdyYW1tYXJEZXRhaWwmKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAgdm9p
ZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIGZpbmFsOwogICAgIGJvb2wgc3BlbGxpbmdVSUlz
U2hvd2luZygpIGZpbmFsOwogICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBmaW5hbDsK
ICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgZmluYWw7CiAgICAgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKLSAgICB2b2lkIHJlcXVl
c3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBX
ZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKKyAgICB2
b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIGZpbmFsOwog
CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgZmlu
YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA0YmRiYmNjZDNmYmM2MjBl
MDc1NDEwNWNlYTA5ZWRkZjA1MTIwYjZiLi5mMGNjZTY1NmYwOWUyYTg3ZDBlMmE2ZmE2NTZiNDk4
MDU2NjM3ZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTU0MSw3ICs1
NDEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkKCkKIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhUaXRsZUxlbmd0aCA9
IDEwMDA7IC8vIENsb3Nlc3QgcG93ZXIgb2YgMTAgYWJvdmUgdGhlIFczQyByZWNvbW1lbmRhdGlv
biBmb3IgVGl0bGUgbGVuZ3RoLgogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZFJlY2VpdmVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKK3ZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFBBTDo6
U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiB7CiAgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXdlYlBhZ2UpCkBAIC0xNDY3LDcgKzE0NjcsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihXZWJD
b3JlOjpEb2N1bWVudExvYWRlciYgbAogICAgIG1fZnJhbWUtPnBhZ2UoKS0+dXBkYXRlQ2FjaGVk
RG9jdW1lbnRMb2FkZXIoc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPihsb2FkZXIpLCAq
bV9mcmFtZS0+Y29yZUZyYW1lKCkpOwogfQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpz
ZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwgY29uc3QgVVJMJiB1cmwp
Cit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dp
dGhEaXJlY3Rpb24mIHRpdGxlLCBjb25zdCBVUkwmIHVybCkKIHsKICAgICBXZWJQYWdlKiB3ZWJQ
YWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIGlmICghd2ViUGFnZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmgKaW5kZXggYmI1MjlkM2FlYzRlMmM3NWYxYTdkZTkxYjEwYjU1ODJkNDUyMmI0
Mi4uZWY5ODhhMzUwZTA2YmY4MzNkMTNhM2ZiNjRmMmUxN2Y4YTk3Njg4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmgKQEAgLTExNCw3ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKSBmaW5hbDsKICAgICB2b2lkIGRpc3BhdGNo
V2lsbENsb3NlKCkgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkKCkgZmluYWw7Ci0gICAgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBXZWJD
b3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbDsKICAgICB2
b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6Okhhc0luc2Vj
dXJlQ29udGVudD4sIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VXNlZExlZ2FjeVRMUz4pIGZpbmFs
OwogICAgIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpXaWxsQ29udGludWVMb2FkaW5nKSBmaW5hbDsKICAg
ICB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
IGZpbmFsOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpIGZpbmFsOwogICAgIHZv
aWQgdXBkYXRlQ2FjaGVkRG9jdW1lbnRMb2FkZXIoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXImKSBm
aW5hbDsKIAotICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERpcmVj
dGlvbiYsIGNvbnN0IFVSTCYpIGZpbmFsOworICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgUEFMOjpT
dHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikgZmluYWw7CiAgICAgCiAgICAgU3RyaW5n
IHVzZXJBZ2VudChjb25zdCBVUkwmKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNr
aW5nQ29udHJvbGxlclByb3h5Lm1tCmluZGV4IGViNTRmMTk2ZDNjYzdiMzI2MDE0ZDBkOGFkMTcz
Y2I5YWUzNzQ2ODQuLmMzNDMwYmZmYTM5MzBhYTZlNTBhMjZiNzQyYjhjNjQ1OTg4YjlhM2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTg5LDcgKzg5LDcg
QEAgc3RkOjpvcHRpb25hbDxUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OlJhbmdlQW5kT2Zm
c2V0PiBUZXh0Q2hlY2tpbmdDb250cm9sbGUKICAgICBpbnQ2NF90IGFkanVzdGVkU3RhcnRMb2Nh
dGlvbiA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGUuc3RhcnQsIHNlbGVjdGlvblJhbmdlLnN0YXJ0
IH0pICsgb2Zmc2V0OwogICAgIGlmIChhZGp1c3RlZFN0YXJ0TG9jYXRpb24gPCAwKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0
ZXJSYW5nZSA9IENoYXJhY3RlclJhbmdlIHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFkanVzdGVk
U3RhcnRMb2NhdGlvbiksIGxlbmd0aCB9OworICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFy
YWN0ZXJSYW5nZSA9IFBBTDo6Q2hhcmFjdGVyUmFuZ2UgeyBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
YWRqdXN0ZWRTdGFydExvY2F0aW9uKSwgbGVuZ3RoIH07CiAKICAgICByZXR1cm4geyB7IHJlc29s
dmVDaGFyYWN0ZXJSYW5nZShzY29wZSwgYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSks
IGFkanVzdGVkU2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubG9jYXRpb24gfSB9OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA1YzNjZmQ0MjM4
NzhiNmNjNTUyMDM1MmZhZDA0NWNjZjU5ZjBjYjAwLi42Y2I3ZGUxNzJmN2ViOTBjZjQ4MjMzODNm
NTVkMTBmMThmOTZjZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcApAQCAtMzk0Miw3ICszOTQyLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVm
ZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKICAgICBzZXR0aW5ncy5z
ZXRWaWRlb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShyZXF1aXJlc1VzZXJHZXN0dXJlRm9y
TWVkaWEgfHwgc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpyZXF1
aXJlc1VzZXJHZXN0dXJlRm9yVmlkZW9QbGF5YmFja0tleSgpKSk7CiAgICAgc2V0dGluZ3Muc2V0
QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUocmVxdWlyZXNVc2VyR2VzdHVyZUZvck1l
ZGlhIHx8IHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cmVxdWly
ZXNVc2VyR2VzdHVyZUZvckF1ZGlvUGxheWJhY2tLZXkoKSkpOwogICAgIHNldHRpbmdzLnNldFVz
ZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VXNlckludGVy
ZmFjZURpcmVjdGlvblBvbGljeT4oc3RvcmUuZ2V0VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6OnVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3lLZXkoKSkpKTsKLSAgICBzZXR0
aW5ncy5zZXRTeXN0ZW1MYXlvdXREaXJlY3Rpb24oc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4o
c3RvcmUuZ2V0VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnN5c3RlbUxheW91
dERpcmVjdGlvbktleSgpKSkpOworICAgIHNldHRpbmdzLnNldFN5c3RlbUxheW91dERpcmVjdGlv
bihzdGF0aWNfY2FzdDxQQUw6OlRleHREaXJlY3Rpb24+KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9y
S2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzeXN0ZW1MYXlvdXREaXJlY3Rpb25LZXkoKSkpKTsKICAg
ICBzZXR0aW5ncy5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHN0YXRpY19jYXN0PFJ1bnRpbWVG
bGFncz4oc3RvcmUuZ2V0VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmphdmFT
Y3JpcHRSdW50aW1lRmxhZ3NLZXkoKSkpKTsKICAgICBzZXR0aW5ncy5zZXRTdG9yYWdlQmxvY2tp
bmdQb2xpY3koc3RhdGljX2Nhc3Q8U3RvcmFnZUJsb2NraW5nUG9saWN5PihzdG9yZS5nZXRVSW50
MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c3RvcmFnZUJsb2NraW5nUG9saWN5S2V5
KCkpKSk7CiAgICAgc2V0dGluZ3Muc2V0RnJhbWVGbGF0dGVuaW5nKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6ZnJhbWVGbGF0dGVuaW5nRW5hYmxlZEtleSgpKSA/
IFdlYkNvcmU6OkZyYW1lRmxhdHRlbmluZzo6RnVsbHlFbmFibGVkIDogV2ViQ29yZTo6RnJhbWVG
bGF0dGVuaW5nOjpEaXNhYmxlZCk7CkBAIC01OTg4LDcgKzU5ODgsNyBAQCB2b2lkIFdlYlBhZ2U6
OmRlbGV0ZVN1cnJvdW5kaW5nKGludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3Vu
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1Jh
bmdlLT5zdGFydC5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAgYXV0byBj
aGFyYWN0ZXJSYW5nZSA9IFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlKFdlYkNvcmU6OmNoYXJhY3Rl
ckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKSArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOworICAg
IGF1dG8gY2hhcmFjdGVyUmFuZ2UgPSBQQUw6OkNoYXJhY3RlclJhbmdlKFdlYkNvcmU6OmNoYXJh
Y3RlckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKSArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwog
ICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKHJvb3ROb2RlKSwgY2hhcmFjdGVyUmFuZ2UpOwogCiAgICAg
dGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CkBA
IC02MzM1LDE0ICs2MzM1LDE0IEBAIGJvb2wgV2ViUGFnZTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgV2ViUGFnZTo6YWRkVGV4dENoZWNraW5nUmVxdWVzdChUZXh0Q2hl
Y2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIFJlZjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiYmIHJlcXVl
c3QpCit2b2lkIFdlYlBhZ2U6OmFkZFRleHRDaGVja2luZ1JlcXVlc3QoVGV4dENoZWNrZXJSZXF1
ZXN0SUQgcmVxdWVzdElELCBSZWY8UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiYmIHJlcXVlc3Qp
CiB7CiAgICAgbV9wZW5kaW5nVGV4dENoZWNraW5nUmVxdWVzdE1hcC5hZGQocmVxdWVzdElELCBX
VEZNb3ZlKHJlcXVlc3QpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hDaGVja2luZ1Rl
eHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiYgcmVzdWx0KQordm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hDaGVja2luZ1RleHQo
VGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+JiByZXN1bHQpCiB7Ci0gICAgUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+
IHJlcXVlc3QgPSBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwLnRha2UocmVxdWVzdElE
KTsKKyAgICBSZWZQdHI8UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gbV9wZW5k
aW5nVGV4dENoZWNraW5nUmVxdWVzdE1hcC50YWtlKHJlcXVlc3RJRCk7CiAgICAgaWYgKCFyZXF1
ZXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTYzNTEsNyArNjM1MSw3IEBAIHZvaWQgV2ViUGFn
ZTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwg
Y29uc3QgVmVjdG9yCiAKIHZvaWQgV2ViUGFnZTo6ZGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KFRleHRD
aGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCkKIHsKLSAgICBSZWZQdHI8VGV4dENoZWNraW5nUmVx
dWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ1RleHRDaGVja2luZ1JlcXVlc3RNYXAudGFrZShyZXF1
ZXN0SUQpOworICAgIFJlZlB0cjxQQUw6OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QgPSBt
X3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwLnRha2UocmVxdWVzdElEKTsKICAgICBpZiAo
IXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCmluZGV4IDI2MmRlNmE0MmE2OTQ5NTMwMjAxYzcyM2RhZTdlNDUyMmM1
NzE2MmEuLmNiNjA2YjdlMDAxOWVhNTk1MjYxYjZlNDMzNzVhZWEwZDAyMzRhNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTE3Niw2ICsxNzYsMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiBlbnVtIGNsYXNzIENyaXRpY2FsIDogdWludDhfdDsKIH0KIAor
bmFtZXNwYWNlIFBBTCB7CitjbGFzcyBUZXh0Q2hlY2tpbmdSZXF1ZXN0Oworc3RydWN0IFRleHRD
aGVja2luZ1Jlc3VsdDsKK30KKwogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBcnJheTsKIH0KQEAg
LTIxOCw3ICsyMjMsNiBAQCBjbGFzcyBTZWxlY3Rpb25EYXRhOwogY2xhc3MgU2VsZWN0aW9uR2Vv
bWV0cnk7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdWJzdGl0dXRlRGF0YTsKLWNsYXNz
IFRleHRDaGVja2luZ1JlcXVlc3Q7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKIGVudW0gU3lu
dGhldGljQ2xpY2tUeXBlIDogaW50OF90OwpAQCAtMjU0LDcgKzI1OCw2IEBAIHN0cnVjdCBNZWRp
YVVzYWdlSW5mbzsKIHN0cnVjdCBQcm9taXNlZEF0dGFjaG1lbnRJbmZvOwogc3RydWN0IFJlcXVl
c3RTdG9yYWdlQWNjZXNzUmVzdWx0Owogc3RydWN0IFJ1bkphdmFTY3JpcHRQYXJhbWV0ZXJzOwot
c3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKIHN0cnVjdCBUZXh0UmVjb2duaXRpb25SZXN1bHQ7
CiBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHM7CiAKQEAgLTExNzAsOCArMTE3Myw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKSBjb25z
dDsKICAgICBib29sIGNhblNob3dSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJikgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFRleHRDaGVja2luZ1JlcXVlc3QoVGV4dENoZWNr
ZXJSZXF1ZXN0SUQsIFJlZjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiYmKTsKLSAgICB2
b2lkIGRpZEZpbmlzaENoZWNraW5nVGV4dChUZXh0Q2hlY2tlclJlcXVlc3RJRCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mKTsKKyAgICB2b2lkIGFkZFRleHRDaGVj
a2luZ1JlcXVlc3QoVGV4dENoZWNrZXJSZXF1ZXN0SUQsIFJlZjxQQUw6OlRleHRDaGVja2luZ1Jl
cXVlc3Q+JiYpOworICAgIHZvaWQgZGlkRmluaXNoQ2hlY2tpbmdUZXh0KFRleHRDaGVja2VyUmVx
dWVzdElELCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAgICAgdm9p
ZCBkaWRDYW5jZWxDaGVja2luZ1RleHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQpOwogCiAjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQpAQCAtMTg0Nyw3ICsxODUwLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRhdGFEZXRlY3RvcnNEaWRDaGFuZ2VVSShXZWJDb3JlOjpQYWdlT3ZlcmxheTo6UGFnZU92
ZXJsYXlJRCk7CiAgICAgdm9pZCBkYXRhRGV0ZWN0b3JzRGlkSGlkZVVJKFdlYkNvcmU6OlBhZ2VP
dmVybGF5OjpQYWdlT3ZlcmxheUlEKTsKIAotICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRh
dGUoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0KTsKKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVk
Q2FuZGlkYXRlKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0KTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCkBAIC0xOTU5LDcgKzE5NjIsNyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UGx1
Z2luVmlldyo+IG1fcGx1Z2luVmlld3M7CiAgICAgYm9vbCBtX2hhc1NlZW5QbHVnaW4geyBmYWxz
ZSB9OwogCi0gICAgSGFzaE1hcDxUZXh0Q2hlY2tlclJlcXVlc3RJRCwgUmVmUHRyPFdlYkNvcmU6
OlRleHRDaGVja2luZ1JlcXVlc3Q+PiBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwOwor
ICAgIEhhc2hNYXA8VGV4dENoZWNrZXJSZXF1ZXN0SUQsIFJlZlB0cjxQQUw6OlRleHRDaGVja2lu
Z1JlcXVlc3Q+PiBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwOwogCiAgICAgYm9vbCBt
X3VzZUZpeGVkTGF5b3V0IHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMzc3MTU5MGVmZDJiNmM1
ZWQ0MDlkMmYzYzlmNTFlNTE1ZDU3MzZmZi4uZjZmYjJkODM1NDljNjU5ZmJmY2UzYmIyNjExNTI5
ZTRhMjc2MDRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0zNjMsNyArMzYzLDcgQEAgR2VuZXJhdGVTeW50aGV0
aWNFZGl0aW5nQ29tbWFuZChlbnVtOnVpbnQ4X3QgV2ViS2l0OjpTeW50aGV0aWNFZGl0aW5nQ29t
bWFuZFR5cGUKICAgICAjIFNwZWxsaW5nIGFuZCBncmFtbWFyLgogICAgIEFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIENoYW5nZVNwZWxsaW5n
VG9Xb3JkKFN0cmluZyB3b3JkKQotICAgIERpZEZpbmlzaENoZWNraW5nVGV4dChXZWJLaXQ6OlRl
eHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4gcmVzdWx0KQorICAgIERpZEZpbmlzaENoZWNraW5nVGV4dChXZWJLaXQ6OlRleHRD
aGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0
PiByZXN1bHQpCiAgICAgRGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KFdlYktpdDo6VGV4dENoZWNrZXJS
ZXF1ZXN0SUQgcmVxdWVzdElEKQogI2lmIFVTRShBUFBLSVQpCiAgICAgVXBwZXJjYXNlV29yZCgp
CkBAIC01MDksNyArNTA5LDcgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0aW5nQ29tbWFuZChlbnVt
OnVpbnQ4X3QgV2ViS2l0OjpTeW50aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUKICAgICBEYXRhRGV0
ZWN0b3JzRGlkQ2hhbmdlVUkoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5SUQgcGFn
ZU92ZXJsYXkpCiAgICAgRGF0YURldGVjdG9yc0RpZEhpZGVVSShXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6UGFnZU92ZXJsYXlJRCBwYWdlT3ZlcmxheSkKIAotICAgIEhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlKHN0cnVjdCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUp
CisgICAgSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoc3RydWN0IFBBTDo6VGV4dENoZWNraW5nUmVz
dWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogCiAgICAgU2V0VXNlU3lzdGVtQXBwZWFyYW5jZShib29s
IHVzZVN5c3RlbUFwcGVhcmFuY2UpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggODZlMDRjNTk2MDJkMzM1ZWQ3MmExYzIx
YTk5MGFkM2UzZDc2NzY4NS4uMTBjNTg5N2JlMDgzN2FjNGRjN2E2NzUxNDQ3NWI0Nzk1NmRjNDg4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KQEAgLTMyODEsNyArMzI4MSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9jdXNlZEVsZW1l
bnRJbmZvcm1hdGlvbj4gV2ViUGFnZTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbigpCiAgICAg
ICAgIGJvb2wgaW5GaXhlZCA9IGZhbHNlOwogICAgICAgICByZW5kZXJlci0+bG9jYWxUb0NvbnRh
aW5lclBvaW50KEZsb2F0UG9pbnQoKSwgbnVsbHB0ciwgVXNlVHJhbnNmb3JtcywgJmluRml4ZWQp
OwogICAgICAgICBpbmZvcm1hdGlvbi5pbnNpZGVGaXhlZFBvc2l0aW9uID0gaW5GaXhlZDsKLSAg
ICAgICAgaW5mb3JtYXRpb24uaXNSVEwgPSByZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIGluZm9ybWF0aW9uLmlzUlRMID0gcmVuZGVy
ZXItPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAKICNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQpAQCAtNDM5OSw3ICs0Mzk5
LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRGVsdGEoaW50NjRfdCBsb2Nh
dGlvbkRlbHRhLCBpbnQ2NF90IGxlbmd0aERlbHQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gbmV3U2VsZWN0aW9uUmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShuZXdTZWxlY3Rpb25M
b2NhdGlvbiwgbmV3U2VsZWN0aW9uTGVuZ3RoKTsKKyAgICBhdXRvIG5ld1NlbGVjdGlvblJhbmdl
ID0gUEFMOjpDaGFyYWN0ZXJSYW5nZShuZXdTZWxlY3Rpb25Mb2NhdGlvbiwgbmV3U2VsZWN0aW9u
TGVuZ3RoKTsKICAgICBhdXRvIHVwZGF0ZWRTZWxlY3Rpb25SYW5nZSA9IHJlc29sdmVDaGFyYWN0
ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpLCBuZXdTZWxlY3Rp
b25SYW5nZSk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodXBkYXRl
ZFNlbGVjdGlvblJhbmdlLCBBZmZpbml0eTo6RG93bnN0cmVhbSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGQ0MTI4MmZjNWRjNjNjMzE3ZTU0YjgyNjBjNTdlMzQ0
Y2EzNmUzMDkuLjY1ZjZjNmI5MzhlZGNkNTc2Y2FmZTI1MjEwZjZjZWNiM2M0MWViZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRl
KEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICB9CiB9CiAKLXZv
aWQgV2ViUGFnZTo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoV2ViQ29yZTo6VGV4dENoZWNraW5n
UmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQordm9pZCBXZWJQYWdlOjpoYW5kbGVBY2NlcHRlZENh
bmRpZGF0ZShQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRGcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9N
aXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlz
Yy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQppbmRleCAwMjY0YjU3YzIzZTJiN2NjODg3YjlkNjBh
MjU2ZjE3NzhhM2FiNGZjLi5hOTVmY2M5YzYxYTBiN2UxNDdlY2MzYTY0YjBlYmU1ZjE0M2U0NzI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0
aW9uYXJ5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViRWxlbWVudERp
Y3Rpb25hcnkubW0KQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgTlNTdHJpbmcqIE5TU3RyaW5n
T3JOaWwoU3RyaW5nIGNvcmVTdHJpbmcpCiAKIC0gKE5TU3RyaW5nICopX3NwZWxsaW5nVG9vbFRp
cAogewotICAgIFRleHREaXJlY3Rpb24gZGlyOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXI7
CiAgICAgcmV0dXJuIE5TU3RyaW5nT3JOaWwoX3Jlc3VsdC0+c3BlbGxpbmdUb29sVGlwKGRpcikp
OwogfQogCkBAIC0yMzYsNyArMjM2LDcgQEAgc3RhdGljIE5TU3RyaW5nKiBOU1N0cmluZ09yTmls
KFN0cmluZyBjb3JlU3RyaW5nKQogCiAtIChOU1N0cmluZyAqKV90aXRsZQogewotICAgIFRleHRE
aXJlY3Rpb24gZGlyOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXI7CiAgICAgcmV0dXJuIE5T
U3RyaW5nT3JOaWwoX3Jlc3VsdC0+dGl0bGUoZGlyKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQppbmRleCAz
ZGViMTI1Zjc5M2Q4YzI2YjhlODBiM2Y4MzdiNGY2YzAzYmVkYzUzLi42ZmMxMWY4ZmFjNDk4Mzg4
MGUzYWMwZThlYzcxM2E4MzhlMTRiN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCkBAIC02OCw4ICs2OCw4IEBA
IHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAgICAgaWYgKCFtX2NsaWVudC0+c2hvdWxk
UG9wT3ZlcigpKQogICAgICAgICBbbV9wb3B1cCBhZGRJdGVtV2l0aFRpdGxlOkAiIl07CiAKLSAg
ICBUZXh0RGlyZWN0aW9uIG1lbnVUZXh0RGlyZWN0aW9uID0gbV9jbGllbnQtPm1lbnVTdHlsZSgp
LnRleHREaXJlY3Rpb24oKTsKLSAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uOm1lbnVUZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBtZW51VGV4dERp
cmVjdGlvbiA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCk7CisgICAgW21f
cG9wdXAgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjptZW51VGV4dERpcmVjdGlvbiA9
PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRd
OwogCiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpbnQgc2l6ZSA9IG1fY2xpZW50LT5saXN0
U2l6ZSgpOwpAQCAtOTIsOCArOTIsOCBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQog
ICAgICAgICB9CiAKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBw
YXJhZ3JhcGhTdHlsZSA9IGFkb3B0TlMoW1tOU1BhcmFncmFwaFN0eWxlIGRlZmF1bHRQYXJhZ3Jh
cGhTdHlsZV0gbXV0YWJsZUNvcHldKTsKLSAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEFsaWdu
bWVudDptZW51VGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1RleHRBbGln
bm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHRdOwotICAgICAgICBOU1dyaXRpbmdEaXJl
Y3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IHN0eWxlLnRleHREaXJlY3Rpb24oKSA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIgPyBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TV3JpdGluZ0Rp
cmVjdGlvblJpZ2h0VG9MZWZ0OworICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50
Om1lbnVUZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNUZXh0QWxp
Z25tZW50TGVmdCA6IE5TVGV4dEFsaWdubWVudFJpZ2h0XTsKKyAgICAgICAgTlNXcml0aW5nRGly
ZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBzdHlsZS50ZXh0RGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TV3Jp
dGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwogICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QmFz
ZVdyaXRpbmdEaXJlY3Rpb246d3JpdGluZ0RpcmVjdGlvbl07CiAgICAgICAgIGlmIChzdHlsZS5o
YXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUoKSkgewogICAgICAgICAgICAgUmV0YWluUHRyPE5TTnVt
YmVyPiB3cml0aW5nRGlyZWN0aW9uVmFsdWUgPSBhZG9wdE5TKFtbTlNOdW1iZXIgYWxsb2NdIGlu
aXRXaXRoSW50ZWdlcjp3cml0aW5nRGlyZWN0aW9uICsgTlNXcml0aW5nRGlyZWN0aW9uT3ZlcnJp
ZGVdKTsKQEAgLTE0MywxNCArMTQzLDE0IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0
IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IHNlbGVjdGVkSW5kZXgpCiAKICAgICBOU1Zp
ZXcqIHZpZXcgPSB2LT5kb2N1bWVudFZpZXcoKTsKIAotICAgIFRleHREaXJlY3Rpb24gdGV4dERp
cmVjdGlvbiA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCk7CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBtX2NsaWVudC0+bWVudVN0eWxlKCkudGV4
dERpcmVjdGlvbigpOwogCiAgICAgW21fcG9wdXAgYXR0YWNoUG9wVXBXaXRoRnJhbWU6ciBpblZp
ZXc6dmlld107CiAgICAgW21fcG9wdXAgc2VsZWN0SXRlbUF0SW5kZXg6c2VsZWN0ZWRJbmRleF07
Ci0gICAgW21fcG9wdXAgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRd
OworICAgIFttX3BvcHVwIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVj
dGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRU
b0xlZnRdOwogCiAgICAgTlNNZW51ICptZW51ID0gW21fcG9wdXAgbWVudV07Ci0gICAgW21lbnUg
c2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDog
TlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFttZW51IHNl
dFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0
IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwogCiAgICAgTlNQ
b2ludCBsb2NhdGlvbjsKICAgICBDVEZvbnRSZWYgZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKQEAgLTE2OCwxMiArMTY4LDEyIEBA
IHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwg
aW50IHNlbGVjdGVkSW5kZXgpCiAgICAgICAgIGF1dG8gZGVmYXVsdEZvbnQgPSBhZG9wdENGKENU
Rm9udENyZWF0ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIENURm9udEdl
dFNpemUoZm9udCksIG5pbCkpOwogICAgICAgICB2ZXJ0T2Zmc2V0ICs9IENURm9udEdldERlc2Nl
bnQoZm9udCkgLSBDVEZvbnRHZXREZXNjZW50KGRlZmF1bHRGb250LmdldCgpKTsKICAgICAgICAg
dmVydE9mZnNldCA9IGZtaW5mKE5TSGVpZ2h0KHIpLCB2ZXJ0T2Zmc2V0KTsKLSAgICAgICAgaWYg
KHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAodGV4dERp
cmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIGxvY2F0aW9u
ID0gTlNNYWtlUG9pbnQoTlNNaW5YKHIpICsgcG9wT3Zlckhvcml6b250YWxBZGp1c3QsIE5TTWF4
WShyKSAtIHZlcnRPZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9
IE5TTWFrZVBvaW50KE5TTWF4WChyKSAtIHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0LCBOU01heFko
cikgLSB2ZXJ0T2Zmc2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAodGV4dERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2lu
dChOU01pblgocikgKyBwb3BVbmRlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShyKSArIHBvcFVu
ZGVyVmVydGljYWxBZGp1c3QpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9
IE5TTWFrZVBvaW50KE5TTWF4WChyKSAtIHBvcFVuZGVySG9yaXpvbnRhbEFkanVzdCwgTlNNYXhZ
KHIpICsgcG9wVW5kZXJWZXJ0aWNhbEFkanVzdCk7CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBQ
b3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgc2Vs
ZWN0ZWRJbmRleCkKICAgICBSZWY8UG9wdXBNZW51TWFjPiBwcm90ZWN0b3IoKnRoaXMpOwogCiAg
ICAgUmV0YWluUHRyPE5TVmlldz4gZHVtbXlWaWV3ID0gYWRvcHROUyhbW05TVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpyXSk7Ci0gICAgW2R1bW15Vmlldy5nZXQoKSBzZXRVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW2R1bW15Vmlldy5nZXQoKSBzZXRVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5T
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKICAgICBbdmlldyBhZGRT
dWJ2aWV3OmR1bW15Vmlldy5nZXQoKV07CiAgICAgbG9jYXRpb24gPSBbZHVtbXlWaWV3IGNvbnZl
cnRQb2ludDpsb2NhdGlvbiBmcm9tVmlldzp2aWV3XTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5k
ZXggYTM2NWQ4ZDg2NGEyMDY5ZTRmYTgyMjFmYTg4MzkyNDYzYmUwNjY2OS4uOWNhNDEzOGUyYTc4
NDI4YWM3OWQ4ODk4ZjUxYjlkN2I3ODM3NzcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTExOCwx
MSArMTE4LDExIEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZFVuYXZhaWxhYmxlUGx1Z2lu
TWVzc2FnZUJlQnV0dG9uKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmluYWw7CiAgICAgdm9pZCB1bmF2YWlsYWJsZVBsdWdp
bkJ1dHRvbkNsaWNrZWQoV2ViQ29yZTo6RWxlbWVudCYsIFdlYkNvcmU6OlJlbmRlckVtYmVkZGVk
T2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmluYWw7Ci0gICAgdm9p
ZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVj
dGlvbikgZmluYWw7CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5n
JiwgUEFMOjpUZXh0RGlyZWN0aW9uKSBmaW5hbDsKIAogICAgIHZvaWQgc2V0VG9vbFRpcChjb25z
dCBTdHJpbmcmKTsKIAotICAgIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWw7CisgICAgdm9pZCBwcmludChXZWJDb3Jl
OjpGcmFtZSYsIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFsOwogICAgIHZv
aWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZU5hbWUsIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscykgZmluYWw7CiAgICAgdm9pZCBy
ZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpIGZpbmFsOwogICAgIHZv
aWQgcmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbiYsIGludDY0X3QgdG90YWxTcGFjZU5lZWRlZCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0K
aW5kZXggYTE3NTFiMDI5ODRmNzdlN2E3YzZkNTViNTk0ZmZiODgwMDA5OGZhZi4uMmY5MGVhNGU1
N2M4NjcwYTI4YTIyYmEwODgzODg5MmM1MzM1ZWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAt
NjI4LDcgKzYyOCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1
dHRvbkNsaWNrZWQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyRW1iCiAgICAgQ2FsbFVJRGVsZWdh
dGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0
b246KSwga2l0KCZlbGVtZW50KSk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIG1v
ZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikKK3ZvaWQg
V2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRp
cCwgUEFMOjpUZXh0RGlyZWN0aW9uKQogewogICAgIGF1dG8gZWxlbWVudCA9IGFkb3B0TlMoW1tX
ZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OnJlc3VsdF0p
OwogICAgIFttX3dlYlZpZXcgX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50OmVsZW1lbnQuZ2V0KCkg
bW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzXTsKQEAgLTY0Miw3ICs2NDIsNyBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXApCiAgICAgICAg
IFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3NldFRvb2xUaXA6dG9vbFRpcF07CiB9CiAK
LXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZ1dp
dGhEaXJlY3Rpb24mKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lJiBmcmFtZSwg
Y29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikKIHsKICAgICBXZWJGcmFtZSAqd2ViRnJh
bWUgPSBraXQoJmZyYW1lKTsKICAgICBpZiAoW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnByaW50RnJhbWU6KV0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCmluZGV4IDQ1ZjdjMWY1Y2E3NDgyZDYwZDliYzc0ZWY2MTZjMzJmZDYyNjc2NDcuLjQ0MGIy
MTc4NmFkZDU3NjU4MTA3N2M0NDk5ZDM4ODdjZTEzOGRmNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBXZWJFZGl0b3JDbGllbnQoV2ViVmlldyAqKTsK
ICAgICB2aXJ0dWFsIH5XZWJFZGl0b3JDbGllbnQoKTsKIAotICAgIHZvaWQgZGlkQ2hlY2tTdWNj
ZWVkKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBOU0FycmF5ICpyZXN1
bHRzKTsKKyAgICB2b2lkIGRpZENoZWNrU3VjY2VlZChQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJ
ZGVudGlmaWVyLCBOU0FycmF5ICpyZXN1bHRzKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpIGZpbmFsOwpAQCAtMTU1LDE0ICsxNTUsMTQgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgcGVyZm9ybVR3b1N0ZXBEcm9wKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21l
bnQmLCBjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYgZGVzdGluYXRpb24sIGJvb2wgaXNNb3Zl
KSBmaW5hbDsKICAgICAKLSAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2Vs
ZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29u
c3QgU3RyaW5nJikgZmluYWw7CiAgICAgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgZmlu
YWw7CiAgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSBmaW5hbDsKICAgICBTdHJp
bmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
JikgZmluYWw7Ci0gICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0
b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50
KiBiYWRHcmFtbWFyTGVuZ3RoKSBmaW5hbDsKLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBPcHRpb25TZXQ8V2Vi
Q29yZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgZmluYWw7Ci0gICAgdm9pZCB1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6
R3JhbW1hckRldGFpbCYpIGZpbmFsOworICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3Ry
aW5nVmlldywgVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBmaW5hbDsKKyAgICBWZWN0b3I8UEFMOjpUZXh0
Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIE9wdGlvblNl
dDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIGZpbmFsOworICAgIHZvaWQgdXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBBTDo6R3Jh
bW1hckRldGFpbCYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIHNob3dTcGVsbGluZ1VJKGJv
b2wgc2hvdykgZmluYWw7CiAgICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgZmluYWw7CkBA
IC0xNzAsMTIgKzE3MCwxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRo
b2RTdGF0ZSgpIGZpbmFsOwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShXZWJDb3JlOjpF
bGVtZW50KikgZmluYWw7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYg
Y3VycmVudFNlbGVjdGlvbikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhQQUw6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2
b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlZpc2libGVT
ZWxlY3Rpb24mKSBmaW5hbDsKICAgICB2b2lkIGhhbmRsZVJlcXVlc3RlZENhbmRpZGF0ZXMoTlNJ
bnRlZ2VyLCBOU0FycmF5PE5TVGV4dENoZWNraW5nUmVzdWx0ICo+ICopOwotICAgIHZvaWQgaGFu
ZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyhXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQpIGZpbmFsOworICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNw
YWNlcyhQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCkgZmluYWw7CiAjZW5kaWYKIAogICAgIHZvaWQg
cmVnaXN0ZXJVbmRvT3JSZWRvU3RlcChXZWJDb3JlOjpVbmRvU3RlcCYsIGJvb2wgaXNSZWRvKTsK
QEAgLTE5Nyw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxXZWJFZGl0b3JVbmRv
VGFyZ2V0PiBtX3VuZG9UYXJnZXQ7CiAgICAgYm9vbCBtX2hhdmVVbmRvUmVkb09wZXJhdGlvbnMg
eyBmYWxzZSB9OwogICAgIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIFJlZjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0Pj4gbV9yZXF1ZXN0
c0luRmxpZ2h0OworICAgIEhhc2hNYXA8UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmll
ciwgUmVmPFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdD4+IG1fcmVxdWVzdHNJbkZsaWdodDsKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYm9vbCBtX2RlbGF5aW5nQ29udGVudENoYW5n
ZU5vdGlmaWNhdGlvbnMgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IGMyYzQwZDNk
MmExMzNmMjgxMzQxNTYwMzRkZTU0MTQxYTRjZTljMzIuLjVlM2Y5M2ZjZWFkNWEzZDI5NGU1YWUx
N2M0MzFkMmQzYTk0MGJmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTg4NSwxMCArODg1LDEw
IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3JtVHdvU3RlcERyb3AoRG9jdW1lbnRGcmFn
bWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJiwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihU
ZXh0Q2hlY2tpbmdUeXBlIHR5cGUpIGNvbnN0Citib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
RXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oUEFMOjpUZXh0Q2hlY2tpbmdUeXBlIHR5
cGUpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBwcmV2ZW50cyBlcmFzaW5nIHNwZWxsaW5nIG1hcmtl
cnMgb24gT1MgWCBMaW9uIG9yIGxhdGVyIHRvIG1hdGNoIEFwcEtpdCBvbiB0aGVzZSBNYWMgT1Mg
WCB2ZXJzaW9ucy4KLSAgICByZXR1cm4gdHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZzsKKyAgICByZXR1cm4gdHlwZSAhPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwog
fQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25z
dCBTdHJpbmcmIHRleHQpCkBAIC05MjQsNyArOTI0LDcgQEAgU3RyaW5nIFdlYkVkaXRvckNsaWVu
dDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
JgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBk
ZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQor
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4
dCwgVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mIGRldGFpbHMsIGludCogYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7CiAgICAgTlNBcnJheSAqZ3JhbW1hckRl
dGFpbHM7CiAgICAgTlNSYW5nZSByYW5nZSA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXSBjaGVja0dyYW1tYXJPZlN0cmluZzp0ZXh0LmNyZWF0ZU5TU3RyaW5nV2l0aG91dENv
cHlpbmcoKS5nZXQoKSBzdGFydGluZ0F0OjAgbGFuZ3VhZ2U6bmlsIHdyYXA6Tk8gaW5TcGVsbERv
Y3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGRldGFpbHM6JmdyYW1tYXJE
ZXRhaWxzXTsKQEAgLTkzNSw3ICs5MzUsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8R3JhbW1hckRldGFpbAogICAg
ICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJhbmdlLmxlbmd0aDsKICAgICBmb3IgKE5TRGljdGlv
bmFyeSAqZGV0YWlsIGluIGdyYW1tYXJEZXRhaWxzKSB7CiAgICAgICAgIEFTU0VSVChkZXRhaWwp
OwotICAgICAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7CisgICAgICAgIFBBTDo6R3Jh
bW1hckRldGFpbCBncmFtbWFyRGV0YWlsOwogICAgICAgICBOU1ZhbHVlICpkZXRhaWxSYW5nZUFz
TlNWYWx1ZSA9IFtkZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hclJhbmdlXTsKICAgICAgICAg
QVNTRVJUKGRldGFpbFJhbmdlQXNOU1ZhbHVlKTsKICAgICAgICAgQVNTRVJUKGRldGFpbFJhbmdl
QXNOU1ZhbHVlLnJhbmdlVmFsdWUubG9jYXRpb24gIT0gTlNOb3RGb3VuZCk7CkBAIC05NDksMjgg
Kzk0OSwyOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3Ry
aW5nVmlldyB0ZXh0LCBWZWN0b3I8R3JhbW1hckRldGFpbAogICAgIH0KIH0KIAotc3RhdGljIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNvcmUoTlNBcnJheSAqaW5jb21pbmdSZXN1bHRzLCBP
cHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcykKK3N0YXRpYyBWZWN0b3I8
UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNvcmUoTlNBcnJheSAqaW5jb21pbmdSZXN1bHRzLCBP
cHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzKQogewotICAgIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgVmVjdG9yPFBBTDo6VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCiAgICAgZm9yIChOU1RleHRDaGVja2luZ1Jlc3VsdCAq
aW5jb21pbmdSZXN1bHQgaW4gaW5jb21pbmdSZXN1bHRzKSB7CiAgICAgICAgIE5TVGV4dENoZWNr
aW5nVHlwZSByZXN1bHRUeXBlID0gW2luY29taW5nUmVzdWx0IHJlc3VsdFR5cGVdOwogICAgICAg
ICBBU1NFUlQoaW5jb21pbmdSZXN1bHQucmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCk7CiAg
ICAgICAgIEFTU0VSVChpbmNvbWluZ1Jlc3VsdC5yYW5nZS5sZW5ndGggPiAwKTsKICAgICAgICAg
YXV0byByZXN1bHRSYW5nZSA9IGluY29taW5nUmVzdWx0LnJhbmdlOwotICAgICAgICBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBjaGVja2luZ1R5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgewotICAgICAgICAgICAgVGV4dENo
ZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmc7CisgICAgICAgIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpTcGVsbGluZykpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0
IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBl
OjpTcGVsbGluZzsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1
bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdUeXBlcy5jb250
YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewotICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IHJlc3VsdDsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4
dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRD
aGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CisgICAgICAgICAgICBQQUw6OlRleHRDaGVja2luZ1Jl
c3VsdCByZXN1bHQ7CiAgICAgICAgICAgICBOU0FycmF5ICpkZXRhaWxzID0gW2luY29taW5nUmVz
dWx0IGdyYW1tYXJEZXRhaWxzXTsKLSAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNr
aW5nVHlwZTo6R3JhbW1hcjsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlOjpHcmFtbWFyOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFu
Z2U7CiAgICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0
YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7Ci0gICAgICAg
ICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CisgICAgICAgICAgICAgICAgUEFMOjpHcmFt
bWFyRGV0YWlsIGRldGFpbDsKICAgICAgICAgICAgICAgICBOU1ZhbHVlICpkZXRhaWxSYW5nZUFz
TlNWYWx1ZSA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFyUmFuZ2VdOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWxSYW5nZUFzTlNWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgTlNSYW5nZSBkZXRhaWxOU1JhbmdlID0gW2RldGFpbFJhbmdlQXNOU1ZhbHVlIHJhbmdl
VmFsdWVdOwpAQCAtOTg0LDMzICs5ODQsMzMgQEAgc3RhdGljIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IGNvcmUoTlNBcnJheSAqaW5jb21pbmdSZXN1bHRzLCBPcHRpb25TZXQ8VGV4dEMKICAg
ICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rICYmIGNoZWNraW5nVHlwZXMu
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpIHsKLSAgICAgICAgICAgIFRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6Okxpbms7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVj
a2luZ1R5cGVMaW5rICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlOjpMaW5rKSkgeworICAgICAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0
OworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6Okxpbms7
CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJl
c3VsdC5yZXBsYWNlbWVudCA9IFtbaW5jb21pbmdSZXN1bHQgVVJMXSBhYnNvbHV0ZVN0cmluZ107
CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwotICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUXVvdGUgJiYgY2hlY2tpbmdUeXBlcy5j
b250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSkpIHsKLSAgICAgICAgICAgIFRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6OlF1b3RlOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hl
Y2tpbmdUeXBlUXVvdGUgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlF1b3RlKSkgeworICAgICAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVz
dWx0OworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlF1
b3RlOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAg
ICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmdd
OwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgfSBlbHNlIGlm
IChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZURhc2ggJiYgY2hlY2tpbmdUeXBlcy5j
b250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkgewotICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5n
VHlwZTo6RGFzaDsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNr
aW5nVHlwZURhc2ggJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5
cGU6OkRhc2gpKSB7CisgICAgICAgICAgICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7
CisgICAgICAgICAgICByZXN1bHQudHlwZSA9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6RGFzaDsK
ICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVz
dWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkgewotICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlw
ZSA9PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBjaGVja2luZ1R5cGVzLmNvbnRh
aW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpKSB7CisgICAgICAgICAgICBQ
QUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICByZXN1bHQu
cmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtp
bmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChyZXN1bHQpOwotICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hl
Y2tpbmdUeXBlQ29ycmVjdGlvbiAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2lu
Z1R5cGU6OkNvcnJlY3Rpb24pKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVz
dWx0OwotICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0
aW9uOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBl
Q29ycmVjdGlvbiAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlw
ZTo6Q29ycmVjdGlvbikpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJl
c3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAg
ICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRT
dHJpbmddOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKQEAgLTEwMjksMTMg
KzEwMjksMTMgQEAgc3RhdGljIE5TVUludGVnZXIgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWwKICAgICByZXR1cm4gY2hhcmFjdGVy
Q291bnQoKnJhbmdlKTsKIH0KIAotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9y
Q2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IGNvcmVDaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQorVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBX
ZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBP
cHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBjb3JlQ2hlY2tpbmdUeXBlcywgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICAgICBOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDogQChpbnNlcnRp
b25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSB9OwogICAgIHJl
dHVybiBjb3JlKFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1N0cmlu
ZzpzdHJpbmcuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpIHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgoKSkgdHlwZXM6KG5zVGV4dENoZWNraW5nVHlwZXMoY29y
ZUNoZWNraW5nVHlwZXMpIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9wdGlvbnM6
b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkg
b3J0aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNvcmVDaGVja2luZ1R5cGVzKTsKIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdy
YW1tYXJEZXRhaWwpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgUEFMOjpH
cmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IEB7
CiAgICAgICAgIE5TR3JhbW1hclJhbmdlOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpncmFtbWFy
RGV0YWlsLnJhbmdlXSwKQEAgLTExNTksNyArMTE1OSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNB
cnJhCiAgICAgW21fd2ViVmlldyBzaG93Q2FuZGlkYXRlczpjYW5kaWRhdGVzIGZvclN0cmluZzpt
X3BhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0LmdldCgpIGluUmVjdDpyZWN0Rm9y
U2VsZWN0aW9uQ2FuZGlkYXRlcyBmb3JTZWxlY3RlZFJhbmdlOm1fcmFuZ2VGb3JDYW5kaWRhdGVz
IHZpZXc6bV93ZWJWaWV3IGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CiB9CiAKLXZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFRleHRDaGVj
a2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5k
bGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0
IGFjY2VwdGVkQ2FuZGlkYXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fd2ViVmll
dyBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghZnJhbWUpCkBAIC0xMTkwLDE1ICsx
MTkwLDE1IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdp
dGhTb2Z0U3BhY2VzKFRleHRDaGVja2luZ1Jlc3VsdCBhCiBAaW50ZXJmYWNlIFdlYkVkaXRvclNw
ZWxsQ2hlY2tSZXNwb25kZXIgOiBOU09iamVjdAogewogICAgIFdlYWtQdHI8V2ViRWRpdG9yQ2xp
ZW50PiBfY2xpZW50OwotICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIF9pZGVudGlm
aWVyOworICAgIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgX2lkZW50aWZpZXI7
CiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9yZXN1bHRzOwogfQotLSAoaWQpaW5pdFdpdGhDbGll
bnQ6KFdlYWtQdHI8V2ViRWRpdG9yQ2xpZW50PiljbGllbnQgaWRlbnRpZmllcjooVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIpaWRlbnRpZmllciByZXN1bHRzOihOU0FycmF5ICopcmVzdWx0
czsKKy0gKGlkKWluaXRXaXRoQ2xpZW50OihXZWFrUHRyPFdlYkVkaXRvckNsaWVudD4pY2xpZW50
IGlkZW50aWZpZXI6KFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIpaWRlbnRpZmll
ciByZXN1bHRzOihOU0FycmF5ICopcmVzdWx0czsKIC0gKHZvaWQpcGVyZm9ybTsKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIFdlYkVkaXRvclNwZWxsQ2hlY2tSZXNwb25kZXIKLS0gKGlkKWluaXRX
aXRoQ2xpZW50OihXZWFrUHRyPFdlYkVkaXRvckNsaWVudD4pY2xpZW50IGlkZW50aWZpZXI6KFRl
eHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKWlkZW50aWZpZXIgcmVzdWx0czooTlNBcnJheSAq
KXJlc3VsdHMKKy0gKGlkKWluaXRXaXRoQ2xpZW50OihXZWFrUHRyPFdlYkVkaXRvckNsaWVudD4p
Y2xpZW50IGlkZW50aWZpZXI6KFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIpaWRl
bnRpZmllciByZXN1bHRzOihOU0FycmF5ICopcmVzdWx0cwogewogICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoVGV4dENoZWNr
aW5nUmVzdWx0IGEKIAogQGVuZAogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNj
ZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5TQXJyYXkgKnJl
c3VsdHMpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKFBBTDo6VGV4dENo
ZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgTlNBcnJheSAqcmVzdWx0cykKIHsK
ICAgICBhdXRvIHJlcXVlc3QgPSBtX3JlcXVlc3RzSW5GbGlnaHQudGFrZShpZGVudGlmaWVyKTsK
ICAgICBBU1NFUlQocmVxdWVzdCk7CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlk
ZW50aWZpZXIsCiAKICNlbmRpZgogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQQUw6OlRleHRDaGVja2luZ1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgQVNTRVJUKHJlcXVlc3QuZGF0YSgpLmlkZW50aWZpZXIoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCBhMjU5OGYzMmZiNzYwYTdkODgzYzlmNGNlZWMxOGNm
NTkxZWI4ZWFkLi43MTQ1ZmVkMDFiZjcxODcxNjQ4N2UyMGU5NjljYjRiZTg3OGI0NzQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTExNiw3ICsxMTYsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKSBmaW5hbDsKICAgICB2b2lkIGRpc3BhdGNo
RGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSBmaW5hbDsKLSAgICB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZVRpdGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbDsKKyAg
ICB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYpIGZpbmFsOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6SGFzSW5zZWN1cmVDb250ZW50Piwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpV
c2VkTGVnYWN5VExTPikgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25h
bExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OldpbGxDb250aW51
ZUxvYWRpbmcpIGZpbmFsOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWw7CkBAIC0yMDMsNyArMjAzLDcgQEAgcHJpdmF0ZToK
ICAgICBSZWY8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVE
YXRhJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBzZXRUaXRsZShjb25zdCBX
ZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikgZmluYWw7CisgICAgdm9p
ZCBzZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKSBm
aW5hbDsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgV1RG
OjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCYpIGZpbmFsOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGNyZWF0ZVBsdWdpbihjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQmLCBjb25zdCBVUkwmLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5tbQppbmRleCBiODQ5ZDJhYWMyYTkzZmJlZTQxNzI5ZjI0YTg2Y2Rj
ZjZiMWZlMDE5Li44ZGEyYzNmZWRhMmU5ODQ1ZjliNTk3MGE0YzViMzIxOGNkNDExNjg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQpAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogCiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFRpdGxlTGVuZ3RoID0gMTAwMDsgLy8gQ2xvc2VzdCBw
b3dlciBvZiAxMCBhYm92ZSB0aGUgVzNDIHJlY29tbWVuZGF0aW9uIGZvciBUaXRsZSBsZW5ndGgu
CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNv
bnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQordm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRo
RGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICBhdXRvIHRydW5jYXRlZFRpdGxlID0gdHJ1bmNhdGVG
cm9tRW5kKHRpdGxlLCBtYXhUaXRsZUxlbmd0aCk7CiAKQEAgLTEzMjAsNyArMTMyMCw3IEBAIFJl
ZjxXZWJDb3JlOjpEb2N1bWVudExvYWRlcj4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZURv
Y3VtZW50TG9hZGVyKGNvbnN0IFdlCiAgICAgcmV0dXJuIFdURk1vdmUobG9hZGVyKTsKIH0KIAot
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5n
V2l0aERpcmVjdGlvbiYgdGl0bGUsIGNvbnN0IFVSTCYgdXJsKQordm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6c2V0VGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwg
Y29uc3QgVVJMJiB1cmwpCiB7CiAgICAgV2ViVmlldyogdmlldyA9IGdldFdlYlZpZXcobV93ZWJG
cmFtZS5nZXQoKSk7CiAgICAgCkBAIC0xNDY1LDcgKzE0NjUsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKICAgICAvLyBsaWtl
IHRoZSBvbmVzIHRoYXQgU2FmYXJpIHVzZXMgZm9yIGJvb2ttYXJrcyBpdCBpcyB0aGUgb25seSB3
YXkgdGhlIERvY3VtZW50TG9hZGVyCiAgICAgLy8gd2lsbCBnZXQgdGhlIHByb3BlciB0aXRsZS4K
ICAgICBpZiAoYXV0byBkb2N1bWVudExvYWRlciA9IFtkYXRhU291cmNlIF9kb2N1bWVudExvYWRl
cl0pCi0gICAgICAgIGRvY3VtZW50TG9hZGVyLT5zZXRUaXRsZSh7IFtkYXRhU291cmNlIHBhZ2VU
aXRsZV0sIFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKKyAgICAgICAgZG9jdW1lbnRM
b2FkZXItPnNldFRpdGxlKHsgW2RhdGFTb3VyY2UgcGFnZVRpdGxlXSwgUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgfSk7CiAKICAgICBpZiAoYXV0byogb3duZXJFbGVtZW50ID0gY29yZUZyYW1lLT5v
d25lckVsZW1lbnQoKSkKICAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnNldENhbkhhdmVTY3Jv
bGxiYXJzKG93bmVyRWxlbWVudC0+c2Nyb2xsaW5nTW9kZSgpICE9IFdlYkNvcmU6OlNjcm9sbGJh
ck1vZGU6OkFsd2F5c09mZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KaW5kZXggMGM3NDRkZGNlYjMzMjZkMDY3MTQ3YTA2ZWI5MTIxZmIxMGU1N2Y0NS4uYjJi
ODYyMTRhOGQ2NGU4NmMyODcwYTQ4YTZmMTc3YTU2NzUwYTVlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtNjg1MiwyMyArNjg1MiwyMyBAQCBzdGF0
aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lICpmcmFtZSwgV2ViRmluZE9wdGlv
bnMgb3B0aW9ucyA9IDApCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotY29uc3RleHByIFdlYkNvcmU6
OlRleHRDaGVja2luZ1R5cGUgY29yZVRleHRDaGVja2luZ1R5cGUoTlNUZXh0Q2hlY2tpbmdUeXBl
IHR5cGUpCitjb25zdGV4cHIgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlIGNvcmVUZXh0Q2hlY2tpbmdU
eXBlKE5TVGV4dENoZWNraW5nVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjoKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CisgICAgICAgIHJldHVybiBQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVS
ZXBsYWNlbWVudDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6OlJl
cGxhY2VtZW50OworICAgICAgICByZXR1cm4gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNl
bWVudDsKICAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOgotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CisgICAgICAgIHJldHVybiBQ
QUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOworICAgICAgICByZXR1cm4gUEFM
OjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOwogICAgIH0KIH0KIAotc3RhdGljIFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1
bHQoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5zUmVzdWx0KQorc3RhdGljIFBBTDo6VGV4dENoZWNr
aW5nUmVzdWx0IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdChOU1Rl
eHRDaGVja2luZ1Jlc3VsdCAqbnNSZXN1bHQpCiB7Ci0gICAgV2ViQ29yZTo6VGV4dENoZWNraW5n
UmVzdWx0IHJlc3VsdDsKKyAgICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAg
cmVzdWx0LnR5cGUgPSBjb3JlVGV4dENoZWNraW5nVHlwZShuc1Jlc3VsdC5yZXN1bHRUeXBlKTsK
ICAgICByZXN1bHQucmFuZ2UgPSBuc1Jlc3VsdC5yYW5nZTsKICAgICByZXN1bHQucmVwbGFjZW1l
bnQgPSBuc1Jlc3VsdC5yZXBsYWNlbWVudFN0cmluZzsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5k
ZXggYmNmMDMyOTU1YmUyZWJkZmZlNjkzZDhhOGJiZDgyYmY5NDJmOWQ5OS4uMjQzZDQ5NTUzMjUx
OThiMDRiZTZmNWNmM2IwZDZhNTAxODU3MzIyMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAg
LTI3MSw3ICsyNzEsNyBAQCBURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgTGVmdEV4
cGFuc2lvbikKIAogICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsgJ2EnIH07CiAgICAgc2l6ZV90
IGNoYXJhY3RlcnNMZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYXJhY3RlcnMpOwotICAgIFRl
eHRSdW4gdGV4dFJ1bihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgpLCAw
LCAxMDAsIEZvcmNlTGVmdEV4cGFuc2lvbik7CisgICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmluZ1Zp
ZXcoY2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCksIDAsIDEwMCwgUEFMOjpGb3JjZUxlZnRF
eHBhbnNpb24pOwogICAgIGF1dG8gcnVuID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bjo6Y3JlYXRlKHsgRmxvYXRTaXplKDI0LCAwKSB9LCB7IH0sIHsgMTYgfSwgeyAwIH0s
IEZsb2F0U2l6ZSgpLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3Rl
cnNMZW5ndGgsIDAsIDEsIHRydWUpOwogICAgIFZlY3RvcjxSZWY8Q29tcGxleFRleHRDb250cm9s
bGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CiAgICAgcnVucy5hcHBlbmQoV1RGTW92ZShydW4p
KTsKQEAgLTM1MCw3ICszNTAsNyBAQCBURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwg
VG90YWxXaWR0aFdpdGhKdXN0aWZpY2F0aW9uKQogCiAgICAgVUNoYXIgY2hhcmFjdGVyc1tdID0g
eyAweDY0NCwgJyAnLCAweDY0NCwgJyAnLCAweDY0NCB9OwogICAgIHNpemVfdCBjaGFyYWN0ZXJz
TGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsKLSAgICBUZXh0UnVuIHRleHRS
dW4oU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSwgMCwgMTQsIERlZmF1
bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb246OlJUTCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuKFN0
cmluZ1ZpZXcoY2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCksIDAsIDE0LCBQQUw6OkRlZmF1
bHRFeHBhbnNpb24sIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKTsKICAgICBhdXRvIHJ1biA9IENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNlcywgb3Jp
Z2lucywgeyA1LCA2LCA3LCA4LCA5IH0sIHsgNCwgMywgMiwgMSwgMCB9LCBpbml0aWFsQWR2YW5j
ZSwgZm9udC5wcmltYXJ5Rm9udCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCAw
LCA1LCBmYWxzZSk7CiAgICAgVmVjdG9yPFJlZjxDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0UnVuPj4gcnVuczsKICAgICBydW5zLmFwcGVuZChXVEZNb3ZlKHJ1bikpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0cmluZ1dpdGhEaXJlY3Rp
b24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0cmluZ1dpdGhEaXJl
Y3Rpb24uY3BwCmluZGV4IGJkOTQ1ZmJkYmVhOTEwNWQ4Yzk4N2VkYTU2NjczM2UxMjhmOGNkNTIu
LjAxNWRjNGFiYTAyNjAzYmY3YjBkYTE3NDZlOGZiNmRkOTUwOTJjYWUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdHJpbmdXaXRoRGlyZWN0aW9uLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RyaW5nV2l0aERpcmVjdGlv
bi5jcHAKQEAgLTI3LDE5ICsyNywxOSBAQAogCiAjaW5jbHVkZSAiVGVzdC5oIgogI2luY2x1ZGUg
IldURlN0cmluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU3RyaW5nV2l0aERpcmVj
dGlvbi5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaD4KIAotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgUEFMOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBj
b25zdCBUZXh0RGlyZWN0aW9uJiBkaXJlY3Rpb24pCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvcywgY29uc3QgUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXJlY3Rpb24pCiB7
CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OkxUUjoK
KyAgICBjYXNlIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOgogICAgICAgICBvcyA8PCAiVGV4dERp
cmVjdGlvbjo6TFRSIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0RGlyZWN0aW9uOjpS
VEw6CisgICAgY2FzZSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDoKICAgICAgICAgb3MgPDwgIlRl
eHREaXJlY3Rpb246OlJUTCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTUyLDQ1ICs1Miw0
NSBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoU3RyaW5nV2l0aERpcmVjdGlv
biwgVHJ1bmNhdGVBdEVuZFdpdGhMZWZ0VG9SaWdodFN0cmluZykKIHsKLSAgICBTdHJpbmdXaXRo
RGlyZWN0aW9uIHN0cmluZyB7ICJDYXBwdWNjaW5vIiwgVGV4dERpcmVjdGlvbjo6TFRSIH07Cisg
ICAgU3RyaW5nV2l0aERpcmVjdGlvbiBzdHJpbmcgeyAiQ2FwcHVjY2lubyIsIFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSIH07CiAgICAgU3RyaW5nV2l0aERpcmVjdGlvbiByZXN1bHQ7CiAKICAgICBy
ZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAwKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERp
cmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUSgiIiwgcmVz
dWx0LnN0cmluZyk7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAxKTsK
LSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAg
ICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwog
ICAgIEVYUEVDVF9FUSgiQyIsIHJlc3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0ID0gdHJ1bmNh
dGVGcm9tRW5kKHN0cmluZywgMik7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OkxUUiwg
cmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
LCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1RfRVEoIkNhIiwgcmVzdWx0LnN0cmluZyk7
CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAxMDAwKTsKLSAgICBFWFBF
Q1RfRVEoVGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1Rf
RVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVD
VF9FUSgiQ2FwcHVjY2lubyIsIHJlc3VsdC5zdHJpbmcpOwogfQogCiBURVNUKFN0cmluZ1dpdGhE
aXJlY3Rpb24sIFRydW5jYXRlQXRFbmRXaXRoUmlnaHRUb0xlZnRTdHJpbmcpCiB7Ci0gICAgU3Ry
aW5nV2l0aERpcmVjdGlvbiBzdHJpbmcgeyBTdHJpbmc6OmZyb21VVEY4KCLXp9a416TWvNeV1rzX
pta0J9eZ16DXlda5IiksIFRleHREaXJlY3Rpb246OlJUTCB9OworICAgIFN0cmluZ1dpdGhEaXJl
Y3Rpb24gc3RyaW5nIHsgU3RyaW5nOjpmcm9tVVRGOCgi16fWuNek1rzXlda816bWtCfXmdeg15XW
uSIpLCBQQUw6OlRleHREaXJlY3Rpb246OlJUTCB9OwogICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24g
cmVzdWx0OwogCiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMCk7Ci0gICAg
RVhQRUNUX0VRKFRleHREaXJlY3Rpb246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQ
RUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBF
WFBFQ1RfRVEoIiIsIHJlc3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9t
RW5kKHN0cmluZywgMSk7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OlJUTCwgcmVzdWx0
LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1
bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1RfRVEoU3RyaW5nOjpmcm9tVVRGOCgi16ciKSwgcmVz
dWx0LnN0cmluZyk7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAyKTsK
LSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAg
ICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIHJlc3VsdC5kaXJlY3Rpb24pOwog
ICAgIEVYUEVDVF9FUShTdHJpbmc6OmZyb21VVEY4KCLXp9a4IiksIHJlc3VsdC5zdHJpbmcpOwog
CiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMTAwMCk7Ci0gICAgRVhQRUNU
X0VRKFRleHREaXJlY3Rpb246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VR
KFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1Rf
RVEoU3RyaW5nOjpmcm9tVVRGOCgi16fWuNek1rzXlda816bWtCfXmdeg15XWuSIpLCByZXN1bHQu
c3RyaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0
YS9Xb3Jrc3BhY2VTZXR0aW5ncy54Y3NldHRpbmdzIGIvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hh
cmVkZGF0YS9Xb3Jrc3BhY2VTZXR0aW5ncy54Y3NldHRpbmdzCmluZGV4IDdjYTJkZTQ1NDdhYTI5
MzBkNzBlYTMzYmEwZDgxMGQ3YWU3NjNiOWYuLjc4NGYyMTI4MDllY2I3YjZlMGYzN2YzZTAwMjM5
MjdkOWEyMzJlOTcgMTAwNjQ0Ci0tLSBhL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEv
V29ya3NwYWNlU2V0dGluZ3MueGNzZXR0aW5ncworKysgYi9XZWJLaXQueGN3b3Jrc3BhY2UveGNz
aGFyZWRkYXRhL1dvcmtzcGFjZVNldHRpbmdzLnhjc2V0dGluZ3MKQEAgLTQsNiArNCw4IEBACiA8
ZGljdD4KIAk8a2V5PkJ1aWxkU3lzdGVtVHlwZTwva2V5PgogCTxzdHJpbmc+T3JpZ2luYWw8L3N0
cmluZz4KKwk8a2V5PkRpc2FibGVCdWlsZFN5c3RlbURlcHJlY2F0aW9uRGlhZ25vc3RpYzwva2V5
PgorCTx0cnVlLz4KIAk8a2V5PklERVdvcmtzcGFjZVNoYXJlZFNldHRpbmdzX0F1dG9jcmVhdGVD
b250ZXh0c0lmTmVlZGVkPC9rZXk+CiAJPGZhbHNlLz4KIAk8a2V5PlByZXZpZXdzRW5hYmxlZDwv
a2V5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446472</attachid>
            <date>2021-12-08 18:24:59 -0800</date>
            <delta_ts>2021-12-08 18:49:21 -0800</delta_ts>
            <desc>Rebased</desc>
            <filename>bug-233697-20211208182457.patch</filename>
            <type>text/plain</type>
            <size>1445545</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTkxYTEzZmZhNDQyMjY5
ZDY4NDg3Zjg2OWUzNWFlYWU4ODVmZTNkZi4uNWQ3MDJmZGY2ZmZiMDgwNzMyOGQyZGIyOTEzOTJk
MDFhNTg0NTU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1MiBAQAorMjAyMS0xMi0wOCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgYSBm
ZXcgbW9yZSBmaWxlcyBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dCB0byBXZWJDb3JlL1BBTC90
ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2
OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmg6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRCb3VuZGFy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzTWlzc3BlbGxpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZSBj
b25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1l
bnRQYXRoIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3Bl
bGxpbmcpOgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6Cisg
ICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRMaWdhdHVyZXNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFy
aWFudExpZ2F0dXJlc1Byb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlh
bnRQb3NpdGlvblByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlhbnRD
YXBzUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFyaWFudE51bWVyaWNQ
cm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50QWx0ZXJuYXRlc1By
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFZhcmlhbnRFYXN0QXNpYW5Qcm9w
ZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZv
bnRTdHlsZUZyb21TdHlsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50RnJv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRTeW50aGVzaXNGcm9tU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFNob3J0aGFuZFZhbHVlRm9yU2VsZWN0aW9uUHJvcGVydGllcyk6
CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAqIGNzcy9D
U1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6ZW5z
dXJlTG9jYWxGb250RmFjZXNGb3JGYW1pbHlSZWdpc3RlcmVkKToKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2
ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkVVbmljb2RlQmlkaSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6Oldy
aXRpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpv
cGVyYXRvciBQQUw6Oktlcm5pbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtb290aGluZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFNtYWxsQ2Fw
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3Ig
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmlt
aXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkZvbnRWYXJp
YW50Q2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgUEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udE9wdGljYWxTaXppbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmlj
b2RlQmlkaSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVW
YWx1ZTo6b3BlcmF0b3IgVGV4dERpcmVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgV3JpdGluZ01vZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEtl
cm5pbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFs
dWU6Om9wZXJhdG9yIEZvbnRTbW9vdGhpbmdNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250U21hbGxDYXBzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRv
ciBUZXh0UmVuZGVyaW5nTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFZhcmlhbnRQb3NpdGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9u
dFZhcmlhbnRDYXBzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1p
dGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFyaWFudEFsdGVybmF0ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnRPcHRp
Y2FsU2l6aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHkuaDoK
KyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW5nZXMpOgorICAgICAgICAqIGNzcy9Gb250
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c3R5bGUgY29uc3QpOgorICAg
ICAgICAqIGNzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250U3R5bGVLZXl3b3JkKToKKyAgICAgICAgKiBjc3MvRm9udFZhcmlhbnRCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RGb250VmFyaWFudExpZ2F0dXJlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OmV4dHJhY3RGb250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlRm9udFZhcmlhbnQpOgorICAgICAgICAqIGNzcy9Gb250VmFyaWFudEJ1aWxkZXIuaDoKKyAg
ICAgICAgKiBjc3MvbWFrZXByb3AucGw6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIu
aDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVGb250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgICogZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXk6OmFkamFjZW50U2lkZXNGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveERlY29yYXRpb25EYXRhOjpoYXNCb3JkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6Ym9yZGVy
T2JzY3VyZXNCYWNrZ3JvdW5kRWRnZSBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25EYXRhLmg6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Y29sb3JzTWF0Y2hBdENvcm5lciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjb2xvck5l
ZWRzQW50aUFsaWFzQXRDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OmNhbGN1
bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9y
ZGVyUGFpbnRlcjo6am9pblJlcXVpcmVzTWl0cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHln
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJh
d0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OnBhaW50T25lQm9yZGVyU2lkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OnBhaW50VHJhbnNsdWNlbnRCb3JkZXJT
aWRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpw
YWludEJvcmRlcnMgY29uc3QpOgorICAgICAgICAqIGRvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFy
c2VyLmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZVRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRh
dGVUaXRsZUZyb21UaXRsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondy
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aXRsZVdpdGhEaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsQWxpZ25tZW50Rm9y
SW5saW5lRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsQWxpZ25tZW50Rm9y
QmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBkb20v
UG9zaXRpb24uaDoKKyAgICAgICAgKiBkb20vUmF3RGF0YURvY3VtZW50UGFyc2VyLmg6CisgICAg
ICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRU
b0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgorICAgICAgICAqIGVkaXRpbmcv
RGljdGF0aW9uQWx0ZXJuYXRpdmUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFy
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpp
c0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVj
dFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51bWJlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpyYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0ZvcndhcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dGV4dFNlbGVjdGlvbkludGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KToKKyAgICAgICAgKiBlZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmg6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxDaGVja1JlcXVlc3Q6OmRpZFN1Y2NlZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
bGxDaGVja1JlcXVlc3Q6OnNldENoZWNrZXJBbmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
OjpkaWRDaGVja1N1Y2NlZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRD
aGVja0NhbmNlbCk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6bGFzdFJlcXVlc3RJZGVudGlmaWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6bGFzdFByb2Nlc3NlZElkZW50aWZpZXIgY29u
c3QpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpbmRHcmFtbWF0aWNhbEVycm9ycyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5k
TWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6
c3VicmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpm
aW5kTWlzc3BlbGxlZFdvcmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kVW5ncmFtbWF0
aWNhbFBocmFzZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVy
OjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OmNoZWNraW5nUmFuZ2VNYXRjaGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNDaGVja2luZ1JhbmdlQ292ZXJlZEJ5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdSYW5nZUNv
dmVycyBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OmlzV29yZEVuZE1hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hCdWZmZXI6OnNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yRWFjaE1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OnJhbmdlRm9yTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZENsb3Nlc3RQ
bGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFBsYWluVGV4dCk6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlclJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBv
c2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDoKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXN1YWxX
b3JkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdWZm
aXhMZW5ndGhGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVmaXhMZW5ndGhGb3JSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFdvcmRCb3VuZGFyeSk6
CisgICAgICAgIChXZWJDb3JlOjplbmRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
cHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0V29y
ZFBvc2l0aW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdEJvdW5kYXJ5T2ZMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0Qm91bmRhcnlPZkxpbmUpOgorICAgICAgICAqIGVk
aXRpbmcvVmlzaWJsZVVuaXRzLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudElu
UmFuZ2UpOgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6RGF0ZVRpbWVGb3JtYXRW
YWxpZGF0b3I6OnZpc2l0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlOjpEYXRlVGltZUZvcm1hdFZhbGlkYXRvcjo6dmFsaWRhdGVGb3JtYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXR1cERhdGVUaW1lQ2hv
b3NlclBhcmFtZXRlcnMpOgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
Lmg6CisgICAgICAgICogaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6YWRq
dXN0SW5uZXJUZXh0U3R5bGUgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpcmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1lYXN1cmVUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5h
bCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6Zm9u
dFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjptZWFzdXJlVGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVudGl0eVBhcnNlcjo6Y29uc3VtZU5hbWVkRW50aXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVIVE1MRW50aXR5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MRW50aXR5UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OmFwcGVuZFRvRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dFN0cmVhbTo6aW5zZXJ0QXRDdXJyZW50SW5zZXJ0aW9u
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjptYXJrRW5kT2ZGaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dFN0cmVhbTo6Y3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRTdHJlYW06OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0U3RyZWFtOjpzcGxpdEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0U3RyZWFtOjptZXJnZUZyb20pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OmFwcGVuZFRvRW5k
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU291cmNlVHJhY2tlcjo6c3RhcnRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlVHJhY2tlcjo6ZW5kVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VU
cmFja2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpidWZmZXJBU0NJSUNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpidWZmZXJDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRva2VuaXplcjo6ZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmVtaXRFbmRPZkZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVG9rZW5pemVyOjpjb21taXRUb1BhcnRpYWxFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRva2VuaXplcjo6Y29tbWl0VG9Db21wbGV0ZUVuZFRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tl
bik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjpwZWVrKToKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjphZHZhbmNlUGFzdE5vbk5ld2xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OnByb2Nlc3NOZXh0SW5w
dXRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6
OmlzQXRFbmRPZkZpbGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0RhdGVUaW1lRWRpdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZCk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgICogaHRtbC90
cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFRv
a2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlQW5kRW1pdFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5pemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAgKiBodG1s
L3RyYWNrL1dlYlZUVFRva2VuaXplci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
dXNlZFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUNvbnRlbnRCcmVha2VyOjp0cnlCcmVha2luZ1RleHRSdW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVDb250ZW50QnJlYWtlcjo6d29yZEJyZWFrQmVoYXZp
b3IgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUl0ZW1zQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmJ1aWxkQmlk
aVBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW1zQnVpbGRl
cjo6YnJlYWtBbmRDb21wdXRlQmlkaUxldmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUl0ZW1zQnVpbGRlcjo6aGFuZGxlSW5saW5lQm94U3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveEVuZCk6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGx5UnVuRXhwYW5zaW9uKToKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6aW5saW5lRGlyZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lu
bGluZURpc3BsYXlCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS90ZXh0L1RleHRVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGV4dFV0
aWw6OmZhbGxiYWNrRm9udHNGb3JSdW4pOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9J
bmxpbmVJdGVyYXRvckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJv
eDo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAg
ICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNv
bnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3Zl
cmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9y
U3R5bGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnRpdGxlIGNv
bnN0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwOgorICAgICAgICAqIGxv
YWRlci9FbXB0eUNsaWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlF
ZGl0b3JDbGllbnQ6OkVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogbG9hZGVy
L0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIGxv
YWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6SGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJlbnRJdGVtVGl0bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjppbml0aWFsaXplSXRlbSk6Cisg
ICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmg6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZEZvbnQuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZTo6Z2V0VG9vbFRpcCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
V2l0aFNvZnRTcGFjZXMpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnJvb3RNYXJnaW4gY29uc3QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy55YW1sOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3NCYXNl
Lmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmF4ZXNGbGlwcGVkRm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSk6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlOjptYWluRnJhbWVDYW5SdWJiZXJCYW5kT25TaWRlKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnNjcm9sbFBvc2l0aW9uSXNOb3RSdWJiZXJiYW5kaW5nRWRnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bp
bm5lZE9uU2lkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjpzaG91bGRSdWJiZXJCYW5kT25TaWRlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJh
Z0ltYWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpib3hTaWRlRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhCb3gu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVN0eWxlOjp0ZXh0RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9S
ZWN0RWRnZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVjdEVkZ2VzOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RF
ZGdlczo6dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6cmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpib3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVk
Z2VzOjpsZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlY3RFZGdlczo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdl
czo6cmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpib3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlY3RFZGdlczo6c2V0QXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2Vz
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRSaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OnNldEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWN0RWRnZXM6OnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpiZWZvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjphZnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWN0RWRnZXM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6YmVmb3JlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlY3RFZGdlczo6YWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVk
Z2VzOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OmVuZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OnNldEJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWN0RWRnZXM6OnNldEFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdl
czo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRFbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjppc1Bpbm5lZE9uU2lkZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRPblNpZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnRhcmdldFNpZGVGb3JTY3JvbGxE
ZWx0YSk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL0RyYWdJbWFnZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0lt
YWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFu
Y2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFN5bnRoZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpj
b2xsZWN0Q29tcGxleFRleHRSdW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmFwcGx5VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb25LZXk6Om1ha2VGbGFnc0tleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRo
Rm9yU2ltcGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZTo6cmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNTbWFs
bENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnJlbmRlcmluZ01v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoVmFyaWFudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWR2YW5jZWRUZXh0UmVuZGVy
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Y29tcHV0ZUVu
YWJsZUtlcm5pbmcgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6a2VybmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmb250U21vb3RoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OnNldEtlcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6c2V0Rm9udFNtb290aGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsU21hbGxDYXBzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxLZXJuaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxGb250
U21vb3RoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omlu
aXRpYWxUZXh0UmVuZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjppbml0aWFsRm9udFN5bnRoZXNpcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsVmFyaWFudFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxWYXJpYW50Q2Fwcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsVmFyaWFudEFsdGVy
bmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlh
bE9wdGljYWxTaXppbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVy
V2l0aEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250
czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERl
c2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnRleHRSZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6b3JpZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpub25DSktHbHlw
aE9yaWVudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
d2lkdGhWYXJpYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
Zm9udFN5bnRoZXNpcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246
OnZhcmlhbnRDb21tb25MaWdhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjp2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudENvbnRleHR1
YWxBbHRlcm5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6
dmFyaWFudFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlv
bjo6dmFyaWFudENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9u
Ojp2YXJpYW50TnVtZXJpY0ZpZ3VyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnZhcmlhbnROdW1lcmljU3BhY2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb246OnZhcmlhbnROdW1lcmljRnJhY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY09yZGluYWwgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2YXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFu
dEFsdGVybmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjp2
YXJpYW50RWFzdEFzaWFuVmFyaWFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5XaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb246OnZhcmlhbnRFYXN0QXNpYW5SdWJ5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6dmFyaWFudFNldHRpbmdzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6b3B0aWNhbFNpemluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OmZvbnRTdHlsZUF4aXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRG
b250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFJlbmRl
cmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRUZXh0UmVu
ZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9yaWVu
dGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0Tm9uQ0pLR2x5
cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldEZvbnRT
eW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50
Q29tbW9uTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0
VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uOjpzZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldFZhcmlhbnRDYXBzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFudE51bWVyaWNGaWd1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJpY1NwYWNp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50TnVtZXJp
Y0ZyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0VmFyaWFu
dE51bWVyaWNPcmRpbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0
VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVzY3Jp
cHRpb246OnNldFZhcmlhbnRBbHRlcm5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREZXNj
cmlwdGlvbjo6c2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRWYXJpYW50RWFzdEFzaWFuUnVieSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGVzY3JpcHRpb246OnNldE9wdGljYWxTaXppbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpzZXRGb250U3R5bGVBeGlzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREZXNjcmlwdGlvbjo6c2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOjpkZWNvZGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6d2lkdGhWYXJpYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OnRleHRSZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBo
aWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFw
cGVkUmVjdHNGb3JPdXRsaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJ1bjo6VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
OjpleHBhbnNpb25CZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpk
aXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6cnRsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46Omx0ciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UnVuOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6V2lkdGhJ
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphcHBseUluaXRpYWxB
ZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpjYWxjdWxhdGVBZGRpdGlvbmFs
V2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGZWF0dXJlU2V0dGluZ3NG
cm9tVmFyaWFudHMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZVBsYXRmb3JtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YWJhc2U6Okluc3Rh
bGxlZEZvbnQ6Okluc3RhbGxlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNl
OjpGb250RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1G
b250TG9va3VwV2l0aEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2l0aEZhbWlseVNw
ZWNpYWxDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb250Rm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpsb29rdXBGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
YWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZvbnRGb3JJbnN0YWxsZWRGb250cyk6CisgICAgICAgIChXZWJDb3JlOjppc0ZvbnRNYXRjaGlu
Z1VzZXJJbnN0YWxsZWRGb250RmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YWRkQXR0cmli
dXRlc0ZvcldlYkZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZEZvbnRNYW5kYXRv
cnlBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNj
cmlwdGlvbkNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnRDYXNjYWRlTGlz
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRl
eHQ6OmNyZWF0ZUZvbnRCeUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhh
dmlvcik6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6c3lz
dGVtRm9udFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNl
Q29yZVRleHQ6OmNhc2NhZGVMaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
VmVydGljYWxUZXh0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2
YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhl
c2lzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlcml2YXRpdmVGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6RHJhd0dseXBocyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0Q0ZTdHJpbmdB
dHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeSk6CisgICAgICAgICogcGxhdGZvcm0v
aW9zL1NlbGVjdGlvbkdlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25HZW9t
ZXRyeTo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkdlb21l
dHJ5OjpzZXREaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRSdWJiZXJCYW5kT25TaWRl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXIubW06CisgICAgICAgIChXZWJDb3JlOjphZmZlY3RlZFNpZGVPbkRvbWluYW50QXhpcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxkUnViYmVy
QmFuZE9uU2lkZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2Fs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRlVGltZVN0cmluZ0J1aWxkZXI6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRGaWVsZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9CaWRpUnVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlSdW46OkJpZGlSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6dGFrZU5leHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9CaWRpUnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjpuZXh0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQm9yZGVyRWRnZS5oOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZsYWdG
b3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmluY2x1ZGVzRWRnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWRCYXNlbGluZUFsaWdubWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
bGluZUdyb3VwOjpCYXNlbGluZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VsaW5lR3Jv
dXA6OmlzT3Bwb3NpdGVCbG9ja0Zsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZWxp
bmVHcm91cDo6aXNPcnRob2dvbmFsQmxvY2tGbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VsaW5lR3JvdXA6OmlzQ29tcGF0aWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlbGluZUNvbnRleHQ6OmZpbmRDb21wYXRpYmxlU2hhcmVkR3JvdXApOgorICAgICAgICAqIHJl
bmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRC
YXNlbGluZUFsaWdubWVudDo6c2V0QmxvY2tGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzcGVsbGlu
Z1Rvb2xUaXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVu
Y2F0ZWQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lFbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lFbGxpcHNpc0Jv
eDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnNlbGVjdGlv
blJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50
U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVCb3g6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lJbmxpbmVCb3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUlubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGlu
ZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjplbWJlZENoYXJGcm9tRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpub3Rp
ZnlPYnNlcnZlcldpbGxFeGl0T2JqZWN0KToKKyAgICAgICAgKFBBTDo6SXNvbGF0ZVRyYWNrZXI6
OmVtYmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50
SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNJc29sYXRlZElubGluZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0Q29udGFpbmluZ0lzb2xhdGVXaXRo
aW5Sb290KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om51bWJlck9mSXNvbGF0ZUFuY2Vz
dG9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphZGRQbGFjZWhvbGRlclJ1bkZvcklz
b2xhdGVkSW5saW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2Vy
OjpJc29sYXRlVHJhY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJh
Y2tlcjo6ZW50ZXJJc29sYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVU
cmFja2VyOjpleGl0SXNvbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6aW5Jc29sYXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklz
b2xhdGVUcmFja2VyOjplbWJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250
aW51ZVBhc3RFbmRJbnRlcm5hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5l
VGV4dEJveDo6ZXhwYW5zaW9uQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29uc3RydWN0TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RXhwYW5zaW9uQmVoYXZpb3IpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvclNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6aGFuZGxl
VHJhaWxpbmdTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JT
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVC
b3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojps
YXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxp
bmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lMaW5lTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6Y2hpbGRSZW1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0Jp
ZGlTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6
c2V0TGluZUJyZWFrSW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFkanVzdEJvcmRlckJveFJlY3RGb3JQYWludGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRSZWN0VG9DbGlwT3V0RnJvbUJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Ym9yZGVyVG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpib3JkZXJMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpib3JkZXJCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmJvcmRlclJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZEZsaXBCZWZvcmVBZnRlck1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENv
cm5lcik6CisgICAgICAgIChXZWJDb3JlOjpjb2xvcnNNYXRjaEF0Q29ybmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbG9yTmVlZHNBbnRpQWxpYXNBdENvcm5lcik6CisgICAgICAgIChXZWJDb3Jl
Ojp3aWxsQmVPdmVyZHJhd24pOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKToKKyAgICAgICAgKFdlYkNvcmU6OmpvaW5SZXF1aXJlc01pdHJlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T25lQm9yZGVyU2lkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjYWxjdWxhdGVTaWRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXJTaWRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0Jh
Y2tncm91bmRFZGdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpib3JkZXJPYnNjdXJlc0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmlu
ZVRleHRJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3g6OmFwcGx5TGluZUNsYW1wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXRhaWxzTWFya2VyOjpvcmllbnRh
dGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpwYWludE91dGxpbmUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6aXNMZWZ0VG9SaWdodEZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZUJvcmRlckJlZm9yZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9yZGVy
QWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsb3dB
d2FyZVBhZGRpbmdCZWZvcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGli
bGVCb3g6OmZsb3dBd2FyZVBhZGRpbmdBZnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQgY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudGVkRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYWdtZW50ZWRGbG93Ojp1cGRhdGVGcmFnbWVudHNGcmFnbWVudGVkRmxvd1BvcnRpb25S
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
YWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxPcmlnaW4pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6Y29tcHV0
ZU1hcmtlclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpkaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQgY29uc3QpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6
OmNsaWVudFBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0
OjpwYWludENvbHVtblJ1bGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25H
ZW9tZXRyaWVzSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xsYXBzZWRCb3JkZXJzOjphZGRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjpwYWludFJvd0dyb3VwQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6b2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRlckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1heFdvcmRGcmFnbWVudFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3Mp
OgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL0JyZWFraW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTGluZUJv
eEluc2lkZUlnbm9yZWRTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0
OjpoYW5kbGVCUik6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91
dE9mRmxvd1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVFbXB0eUlubGluZSk6CisgICAgICAgIChXZWJDb3JlOjp0cnlIeXBoZW5hdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAq
IHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmFpbGluZ09iamVjdHM6OnVwZGF0ZVdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbnNGb3JU
cmFpbGluZ0JveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjptaXJyb3JJZk5lZWRlZCBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGh5
c2ljYWxSZWN0VG9Mb2dpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OnBoeXNpY2FsUG9pbnRUb0xv
Z2ljYWwpOgorICAgICAgICAoV2ViQ29yZTo6cGh5c2ljYWxTaXplVG9Mb2dpY2FsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZUJv
eFNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXBlT3V0c2lkZUluZm86OmNyZWF0ZVNoYXBlRm9ySW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OmJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
TmluZVBpZWNlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlUGllY2VIb3Jpem9udGFs
U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVBpZWNlVmVydGljYWxTaWRlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OmJvcmRlckJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6Ym9yZGVyQWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmJvcmRlckJlZm9yZVdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpib3JkZXJBZnRlcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpmb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6c2hvdWxkUGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dXNlZENsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjp1c2VkRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpkaXJlY3Rpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OndyaXRpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0hvcml6b250YWxXcml0aW5nTW9kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aXNWZXJ0aWNhbFdyaXRpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0ZsaXBwZWRMaW5lc1dy
aXRpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6c2V0VW5pY29kZUJpZGkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldERp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbFVuaWNvZGVC
aWRpKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbml0aWFsRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbml0aWFsV3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3M6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAqIHN0eWxlL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpFbGVtZW50UnVsZUNv
bGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjppc0xl
ZnRQYWdlIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjpQYWdlUnVsZUNvbGxlY3Rv
cik6CisgICAgICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgICogc3R5bGUv
U3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QWRqdXN0ZXI6OmFk
anVzdCBjb25zdCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50
aGVzaXMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TGln
YXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxGb250VmFyaWFudE51bWVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjphZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyU3RhdGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZv
ckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAgICAgICog
c3R5bGUvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2
ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQgY29uc3QpOgorICAgICAgICAqIHht
bC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6dW5jb25zdW1lQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ2hh
cmFjdGVyUmVmZXJlbmNlKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjppbnNlcnQpOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAyMS0xMi0wOCAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbVlRUXSBGaXggdmFyaW91
cyBpc3N1ZXMgd2l0aCBjb21wbGljYXRlZCByZW5kZXJpbmcgb2YgVlRUIGN1ZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCmluZGV4IDgxMTA4MTNjMjE5NzQ3ZmZlOGNiYjc2NjY5NGFjMzI3ZWFhNjc1NTAuLmYx
NWI3ZGU3ZjllNzEzM2I4ZWFmMGEzMDYwZWRkNTcxNTUwN2U3NGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTA4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBhIGZldyBtb3JlIGZpbGVzIGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0IHRvIFdlYkNvcmUvUEFML3RleHQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzY5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcGFsL3RleHQvQmlkaUNvbnRleHQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAuCisgICAgICAgICog
cGFsL3RleHQvQmlkaUNvbnRleHQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9CaWRpUmVzb2x2ZXIu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVy
LmguCisgICAgICAgIChQQUw6OkRlcml2ZWRDbGFzcz46OmNyZWF0ZUJpZGlSdW5zRm9yTGluZSk6
CisgICAgICAgICogcGFsL3RleHQvQmlkaVJ1bkxpc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxpc3QuaC4KKyAgICAgICAgKFBBTDo6QmlkaVJ1
bkxpc3Q8UnVuPjo6cmV2ZXJzZVJ1bnMpOgorICAgICAgICAqIHBhbC90ZXh0L0NoYXJhY3RlclBy
b3BlcnRpZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hh
cmFjdGVyUHJvcGVydGllcy5oLgorICAgICAgICAqIHBhbC90ZXh0L0NoYXJhY3RlclJhbmdlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYXJhY3RlclJhbmdlLmguCisg
ICAgICAgICogcGFsL3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5jcHAuCisgICAgICAgIChQQUw6
OkRhdGVUaW1lRm9ybWF0OjpwYXJzZSk6CisgICAgICAgICogcGFsL3RleHQvRGF0ZVRpbWVGb3Jt
YXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVG
b3JtYXQuaC4KKyAgICAgICAgKiBwYWwvdGV4dC9Gb250UmVuZGVyaW5nTW9kZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Gb250UmVuZGVyaW5nTW9kZS5oLgor
ICAgICAgICAqIHBhbC90ZXh0L0h5cGhlbmF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmguCisgICAgICAgICogcGFsL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUXVvdGVkUHJpbnRhYmxlLmNwcC4KKyAgICAgICAgKFBBTDo6bGVuZ3RoT2ZMaW5lRW5kaW5n
QXRJbmRleCk6CisgICAgICAgICogcGFsL3RleHQvUXVvdGVkUHJpbnRhYmxlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oLgorICAg
ICAgICAqIHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAuCisgICAgICAgICogcGFs
L3RleHQvU2VnbWVudGVkU3RyaW5nLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oLgorICAgICAgICAqIHBhbC90ZXh0L1N0cmluZ1dp
dGhEaXJlY3Rpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nV2l0aERpcmVjdGlvbi5oLgorICAgICAgICAqIHBhbC90ZXh0L1N1ZmZpeFRyZWUuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3VmZml4VHJlZS5oLgor
ICAgICAgICAoUEFMOjpBU0NJSUNvZGVib29rOjpjb2RlV29yZCk6CisgICAgICAgICogcGFsL3Rl
eHQvVGV4dEJvdW5kYXJpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAuCisgICAgICAgIChQQUw6OmZpbmROZXh0V29yZEZy
b21JbmRleCk6CisgICAgICAgICogcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuaC4KKyAgICAg
ICAgKFBBTDo6cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKiBwYWwv
dGV4dC9UZXh0Q2hlY2tpbmcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENoZWNraW5nLmguCisgICAgICAgICogcGFsL3RleHQvVGV4dERpcmVjdGlvbi5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9u
LmguCisgICAgICAgICogcGFsL3RleHQvVGV4dEZsYWdzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oLgorICAgICAgICAoUEFMOjpGb250VmFy
aWFudFNldHRpbmdzOjpkZWNvZGUpOgorICAgICAgICAoUEFMOjpGb250VmFyaWFudExpZ2F0dXJl
c1ZhbHVlczo6ZGVjb2RlKToKKyAgICAgICAgKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljVmFsdWVz
OjpkZWNvZGUpOgorICAgICAgICAoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhbHVlczo6ZGVj
b2RlKToKKyAgICAgICAgKiBwYWwvdGV4dC9Vbmljb2RlQmlkaS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oLgorICAgICAgICAqIHBhbC90
ZXh0L1dyaXRpbmdNb2RlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1dyaXRpbmdNb2RlLmguCisgICAgICAgICogcGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0
aW9uQ0YuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbTogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3VuZGFyaWVz
Lm1tLgorICAgICAgICAoUEFMOjpmaW5kQ29tcGxleFdvcmRCb3VuZGFyeSk6CisgICAgICAgIChQ
QUw6OmZpbmROZXh0V29yZEZyb21JbmRleCk6CisgICAgICAgICogcGFsL3RleHQvbWFjL1RleHRD
aGVja2luZ01hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
bWFjL1RleHRDaGVja2luZ01hYy5tbS4KKwogMjAyMS0xMi0wMiAgTWVnYW4gR2FyZG5lciAgPG1l
Z2FuX2dhcmRuZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWFkZCBzdXBwb3J0IG9mIGltYWdl
IGNvbnRyb2wgbWVudXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19h
dXRvZ2VuLmluYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL210bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jCmluZGV4
IDFiMThlODljMjZmZGEyNTAzYThhYzYxNzY5OGMzMjRiNTk0YjQ0OWUuLjdhZjU5NjA0YjkzMDNh
ZjEyZmEzZWI2NTQxNzE4YjYxNzdmNjdmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL210bF9kZWZhdWx0X3No
YWRlcnNfc3JjX2F1dG9nZW4uaW5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL210bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1
dG9nZW4uaW5jCkBAIC0xNCw3ICsxNCw3IEBAIHN0YXRpYyBjaGFyIGdEZWZhdWx0TWV0YWxsaWJT
cmNbXSA9IFIiKAogIyAxICJ0ZW1wX21hc3Rlcl9zb3VyY2UubWV0YWwiCiAjIDEgIjxidWlsdC1p
bj4iIDEKICMgMSAiPGJ1aWx0LWluPiIgMwotIyA0MTUgIjxidWlsdC1pbj4iIDMKKyMgMzgwICI8
YnVpbHQtaW4+IiAzCiAjIDEgIjxjb21tYW5kIGxpbmU+IiAxCiAjIDEgIjxidWlsdC1pbj4iIDIK
ICMgMSAidGVtcF9tYXN0ZXJfc291cmNlLm1ldGFsIiAyCkBAIC0zMiw2ICszMiw3IEBAIHN0YXRp
YyBjaGFyIGdEZWZhdWx0TWV0YWxsaWJTcmNbXSA9IFIiKAogIyBpbmNsdWRlIDxtZXRhbF9zdGRs
aWI+CiAKIAorCiAjIDEgIi4vY29uc3RhbnRzLmgiIDEKICMgMTEgIi4vY29uc3RhbnRzLmgiCiBu
YW1lc3BhY2UgcngKQEAgLTE0NjgsNiArMTQ2OSw3IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlMkRB
cnJheU1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwK
ICNpbmNsdWRlIDxtZXRhbF9wYWNrPgogCiAKKwogIyAxICIuL2Zvcm1hdF9hdXRvZ2VuLmgiIDEK
ICMgMTEgIi4vZm9ybWF0X2F1dG9nZW4uaCIKIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
bXRsX2RlZmF1bHRfc2hhZGVyc19zcmNfYXV0b2dlbi5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL210bF9kZWZhdWx0X3No
YWRlcnNfc3JjX2F1dG9nZW4ubWV0YWwKaW5kZXggYWU1NzgwZDljNzdiZTMyODkxZTY1YTRkNjc0
ODc4MmRlNjEwNmMxNy4uZmRmMWIxNTg0NmQ4ZWYzOGE1ZmFiOWVlZjE4YTk0OTU0ZTg5ZDBkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL3NoYWRlcnMvbXRsX2RlZmF1bHRfc2hhZGVyc19zcmNfYXV0b2dlbi5tZXRhbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hh
ZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLm1ldGFsCkBAIC0xMSw3ICsxMSw3
IEBACiAjIDEgInRlbXBfbWFzdGVyX3NvdXJjZS5tZXRhbCIKICMgMSAiPGJ1aWx0LWluPiIgMQog
IyAxICI8YnVpbHQtaW4+IiAzCi0jIDQxNSAiPGJ1aWx0LWluPiIgMworIyAzODAgIjxidWlsdC1p
bj4iIDMKICMgMSAiPGNvbW1hbmQgbGluZT4iIDEKICMgMSAiPGJ1aWx0LWluPiIgMgogIyAxICJ0
ZW1wX21hc3Rlcl9zb3VyY2UubWV0YWwiIDIKQEAgLTI5LDYgKzI5LDcgQEAKICMgaW5jbHVkZSA8
bWV0YWxfc3RkbGliPgogCiAKKwogIyAxICIuL2NvbnN0YW50cy5oIiAxCiAjIDExICIuL2NvbnN0
YW50cy5oIgogbmFtZXNwYWNlIHJ4CkBAIC0xNDY1LDYgKzE0NjYsNyBAQCBrZXJuZWwgdm9pZCBn
ZW5lcmF0ZTJEQXJyYXlNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVh
ZGdyb3VwXV0sCiAjaW5jbHVkZSA8bWV0YWxfcGFjaz4KIAogCisKICMgMSAiLi9mb3JtYXRfYXV0
b2dlbi5oIiAxCiAjIDExICIuL2Zvcm1hdF9hdXRvZ2VuLmgiCiBuYW1lc3BhY2UgcngKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaApp
bmRleCA2NTM5MTUyZTk4YzVhYWM4ODg3NTFlOGEyYWIxOTQ3YmFiODIyMzAyLi5iYWVjODY4MTQ4
ODExMGNlYjQ0NDZiYTA2YTYyMzVkNDNlZmFlYzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCkBAIC0zNyw4ICszNyw4IEBA
CiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25EaXJlY3Rp
b24uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uLmgiCisjaW5jbHVkZSA8cGFs
L3RleHQvV3JpdGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSAiV3Jp
dGluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Myw3ICs3Myw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9CiAg
ICAgY29uc3QgVVJMJiBpY29uKCkgY29uc3QgeyByZXR1cm4gbV9pY29uOyB9CiAKLSAgICBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IERpcmVj
dGlvbjo6UnRsID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Cisg
ICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0
aW9uID09IERpcmVjdGlvbjo6UnRsID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUjsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaENs
aWNrRXZlbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGI1NjNhYjllNmNhZjAxNWE5OWQ4N2RlMmY5NzA3M2QyNDM0OTA3N2YuLjRlNDI1NTRh
OTBiMWFiNzBhYmFmOGYwNzBjZWY0MzJjYTg1MjVjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNiw2ICsxMzYsMTQgQEAK
IAkJMUMzNkM1MkYyNzQzMDExQTAwNkRBNEMxIC8qIFdlYkdQVURvd25jYXN0Q29udmVydFRvQmFj
a2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDMzZDNTJEMjc0MzAxMUEwMDZEQTRDMSAvKiBXZWJHUFVEb3duY2FzdENvbnZlcnRUb0Jh
Y2tpbmdDb250ZXh0LmggKi87IH07CiAJCTFDNDg3NkQ4MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dn
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
NDg3NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKIAkJMUM0ODc2RDkx
RjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmgg
Ki87IH07CisJCTFDNUM1ODE4Mjc1Nzc0RjAwMDNCNTQwRCAvKiBTZWdtZW50ZWRTdHJpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MEEy
NzU3NzRENzAwM0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi87IH07CisJCTFDNUM1ODE5
Mjc1Nzc0RjAwMDNCNTQwRCAvKiBRdW90ZWRQcmludGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MDUyNzU3NzRDRjAwM0I1NDBEIC8q
IFF1b3RlZFByaW50YWJsZS5jcHAgKi87IH07CisJCTFDNUM1ODFBMjc1Nzc0RjAwMDNCNTQwRCAv
KiBCaWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyogQmlkaUNvbnRleHQuY3BwICovOyB9
OworCQkxQzVDNTgxQjI3NTc3NEYwMDAzQjU0MEQgLyogRGF0ZVRpbWVGb3JtYXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1QzU4MTQyNzU3NzRF
QTAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmNwcCAqLzsgfTsKKwkJMUM1QzU4MUMyNzU3NzRG
MDAwM0I1NDBEIC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1ODBEMjc1Nzc0REQwMDNCNTQwRCAvKiBUZXh0Qm91
bmRhcmllcy5jcHAgKi87IH07CisJCTFDNUM1ODIyMjc1NzdGMjkwMDNCNTQwRCAvKiBUZXh0Qm91
bmRhcmllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDNUM1ODIxMjc1NzdGMjgwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLzsgfTsKKwkJ
MUM1QzU4MjYyNzU3OTkzRTAwM0I1NDBEIC8qIFRleHRDaGVja2luZ01hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1ODI1Mjc1Nzk5M0UwMDNC
NTQwRCAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi87IH07CisJCTFDNUM1ODI3Mjc1N0E1RUUwMDNC
NTQwRCAvKiBIeXBoZW5hdGlvbkNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDNUM1ODFGMjc1NzdDN0YwMDNCNTQwRCAvKiBIeXBoZW5hdGlvbkNG
LmNwcCAqLzsgfTsKIAkJMUM3N0M4QzkyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExp
bmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM3
N0M4QzcyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExpbmsuY3BwICovOyB9OwogCQkx
Qzc3QzhDRTI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzc3QzhDRDI1RDdBNEEzMDA2MzVFMEMg
LyogT1RTVkdUYWJsZS5jcHAgKi87IH07CiAJCTFDQzNBQ0U4MjJCRDdFQzUwMEYzNjBGMCAvKiBN
ZXRhbFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUNDM0FDRTcyMkJEN0VCODAwRjM2MEYwIC8qIE1ldGFsU1BJLmggKi87IH07CkBAIC01MzUsNiAr
NTQzLDMyIEBACiAJCTFDMzZDNTJEMjc0MzAxMUEwMDZEQTRDMSAvKiBXZWJHUFVEb3duY2FzdENv
bnZlcnRUb0JhY2tpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVURvd25jYXN0Q29u
dmVydFRvQmFja2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0
ODc2RDYxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdG
NEUwMENDRUVCRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDAyNzU3NzRDOTAwM0I1NDBEIC8qIEJpZGlD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpQ29udGV4dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwMjI3NTc3NENBMDAzQjU0MEQg
LyogQmlkaVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRp
UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDMyNzU3NzRD
QzAwM0I1NDBEIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRSZW5k
ZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODA0Mjc1Nzc0
Q0QwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dEJvdW5kYXJpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUM1QzU4MDUyNzU3NzRDRjAwM0I1NDBEIC8qIFF1b3RlZFByaW50YWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdW90ZWRQcmludGFibGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQgLyogQmlkaUNv
bnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpZGlDb250
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MDcyNzU3NzREMjAw
M0I1NDBEIC8qIFRleHRGbGFncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGV4dEZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODA4Mjc1Nzc0
RDQwMDNCNTQwRCAvKiBCaWRpUnVuTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCaWRpUnVuTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVDNTgw
OTI3NTc3NEQ1MDAzQjU0MEQgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUM1QzU4MEEyNzU3NzRENzAwM0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MEIyNzU3NzREOTAwM0I1NDBEIC8q
IENoYXJhY3RlclByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2hhcmFjdGVyUHJvcGVydGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzVD
NTgwQzI3NTc3NERCMDAzQjU0MEQgLyogU2VnbWVudGVkU3RyaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUM1QzU4MEQyNzU3NzRERDAwM0I1NDBEIC8qIFRleHRCb3VuZGFyaWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MEYyNzU3NzRFMDAwM0I1NDBE
IC8qIFRleHRDaGVja2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
Q2hlY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTAyNzU3NzRF
MjAwM0I1NDBEIC8qIFVuaWNvZGVCaWRpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuaWNvZGVCaWRpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODEx
Mjc1Nzc0RTQwMDNCNTQwRCAvKiBTdWZmaXhUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZmZpeFRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1
QzU4MTIyNzU3NzRFNjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEh5cGhlbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDNUM1ODEzMjc1Nzc0RTgwMDNCNTQwRCAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTQyNzU3NzRFQTAwM0I1NDBEIC8qIERh
dGVUaW1lRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGVUaW1lRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MTUy
NzU3NzRFQzAwM0I1NDBEIC8qIFF1b3RlZFByaW50YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBRdW90ZWRQcmludGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUM1QzU4MTYyNzU3NzRFRTAwM0I1NDBEIC8qIFRleHREaXJlY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QzVDNTgxNzI3NTc3NEVGMDAzQjU0MEQgLyogV3JpdGluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV3JpdGluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUM1QzU4MUYyNzU3N0M3RjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSHlwaGVuYXRpb25DRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFDNUM1ODIxMjc1NzdGMjgwMDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM1QzU4MjQyNzU3OTVFNDAwM0I1NDBEIC8q
IENoYXJhY3RlclJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoYXJh
Y3RlclJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNUM1ODI1Mjc1Nzk5
M0UwMDNCNTQwRCAvKiBUZXh0Q2hlY2tpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBU
ZXh0Q2hlY2tpbmdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjdDRUEy
MUUzMkVFMjYwMEY4MEYyRSAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvcmVUZXh0U29mdExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQzc3QzhDODI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGluay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JlVGV4dFNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTYyLDYgKzExOTYsMTQgQEAKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFDNUM1ODFFMjc1NzdDNTcwMDNCNTQwRCAvKiBj
ZiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUM1QzU4
MUYyNzU3N0M3RjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovLAorCQkJKTsKKwkJCXBh
dGggPSBjZjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTFDQzVFM0MxMjcz
NzQ1N0QwMDZGNkZGNCAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC0xMzM5LDEwICsxMzgxLDM0IEBACiAJCUEzMEQ0MTFEMUYwREQwQUMw
MEI3MTk1NCAvKiB0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkxQzVDNTgxRTI3NTc3QzU3MDAzQjU0MEQgLyogY2YgKi8sCiAJCQkJQTMwRDQxMjMx
RjBERDEwNTAwQjcxOTU0IC8qIG1hYyAqLywKKwkJCQkxQzVDNTgwNjI3NTc3NEQxMDAzQjU0MEQg
LyogQmlkaUNvbnRleHQuY3BwICovLAorCQkJCTFDNUM1ODAwMjc1Nzc0QzkwMDNCNTQwRCAvKiBC
aWRpQ29udGV4dC5oICovLAorCQkJCTFDNUM1ODAyMjc1Nzc0Q0EwMDNCNTQwRCAvKiBCaWRpUmVz
b2x2ZXIuaCAqLywKKwkJCQkxQzVDNTgwODI3NTc3NEQ0MDAzQjU0MEQgLyogQmlkaVJ1bkxpc3Qu
aCAqLywKKwkJCQkxQzVDNTgwQjI3NTc3NEQ5MDAzQjU0MEQgLyogQ2hhcmFjdGVyUHJvcGVydGll
cy5oICovLAorCQkJCTFDNUM1ODI0Mjc1Nzk1RTQwMDNCNTQwRCAvKiBDaGFyYWN0ZXJSYW5nZS5o
ICovLAorCQkJCTFDNUM1ODE0Mjc1Nzc0RUEwMDNCNTQwRCAvKiBEYXRlVGltZUZvcm1hdC5jcHAg
Ki8sCisJCQkJMUM1QzU4MDkyNzU3NzRENTAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmggKi8s
CisJCQkJMUM1QzU4MDMyNzU3NzRDQzAwM0I1NDBEIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8s
CisJCQkJMUM1QzU4MTIyNzU3NzRFNjAwM0I1NDBEIC8qIEh5cGhlbmF0aW9uLmggKi8sCiAJCQkJ
QTMwRDQxMUYxRjBERDBFQTAwQjcxOTU0IC8qIEtpbGxSaW5nLmNwcCAqLywKIAkJCQlBMzBENDEx
RTFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuaCAqLywKKwkJCQkxQzVDNTgwNTI3NTc3NENG
MDAzQjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmNwcCAqLywKKwkJCQkxQzVDNTgxNTI3NTc3NEVD
MDAzQjU0MEQgLyogUXVvdGVkUHJpbnRhYmxlLmggKi8sCisJCQkJMUM1QzU4MEEyNzU3NzRENzAw
M0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgKi8sCisJCQkJMUM1QzU4MEMyNzU3NzREQjAw
M0I1NDBEIC8qIFNlZ21lbnRlZFN0cmluZy5oICovLAorCQkJCTFDNUM1ODEzMjc1Nzc0RTgwMDNC
NTQwRCAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8sCisJCQkJMUM1QzU4MTEyNzU3NzRFNDAw
M0I1NDBEIC8qIFN1ZmZpeFRyZWUuaCAqLywKKwkJCQkxQzVDNTgwRDI3NTc3NEREMDAzQjU0MEQg
LyogVGV4dEJvdW5kYXJpZXMuY3BwICovLAorCQkJCTFDNUM1ODA0Mjc1Nzc0Q0QwMDNCNTQwRCAv
KiBUZXh0Qm91bmRhcmllcy5oICovLAorCQkJCTFDNUM1ODBGMjc1Nzc0RTAwMDNCNTQwRCAvKiBU
ZXh0Q2hlY2tpbmcuaCAqLywKKwkJCQkxQzVDNTgxNjI3NTc3NEVFMDAzQjU0MEQgLyogVGV4dERp
cmVjdGlvbi5oICovLAorCQkJCTFDNUM1ODA3Mjc1Nzc0RDIwMDNCNTQwRCAvKiBUZXh0RmxhZ3Mu
aCAqLywKIAkJCQk5M0U1OTA5QzFGOTNCRjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGlu
Zy5oICovLAorCQkJCTFDNUM1ODEwMjc1Nzc0RTIwMDNCNTQwRCAvKiBVbmljb2RlQmlkaS5oICov
LAorCQkJCTFDNUM1ODE3Mjc1Nzc0RUYwMDNCNTQwRCAvKiBXcml0aW5nTW9kZS5oICovLAogCQkJ
KTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEzNTEs
NiArMTQxNyw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUEz
MEQ0MTI0MUYwREQxMkQwMEI3MTk1NCAvKiBLaWxsUmluZ01hYy5tbSAqLywKKwkJCQkxQzVDNTgy
MTI3NTc3RjI4MDAzQjU0MEQgLyogVGV4dEJvdW5kYXJpZXMubW0gKi8sCisJCQkJMUM1QzU4MjUy
NzU3OTkzRTAwM0I1NDBEIC8qIFRleHRDaGVja2luZ01hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE3ODcsNiArMTg1NSw3IEBA
CiAJCQkJNTdGRDMxOEEyMkIzNTkzRTAwOEQwRThCIC8qIEFwcFNTT1NvZnRMaW5rLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDE2RTk5NTMyM0RBRTZCRTAwRTg3MUNCIC8qIEF1ZGlvVG9vbGJveFNv
ZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3N0U4N0IxMjI2QTQ2MDIwMEEyQUZGMCAv
KiBBVkZvdW5kYXRpb25Tb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODFBMjc1
Nzc0RjAwMDNCNTQwRCAvKiBCaWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRDJC
NDEzNDI1RjA1RTM1MDBBM0Y3MEEgLyogQ2xvY2tHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBDRjk5Q0E4MUY3Mzg0MzcwMDdFRTc5MyAvKiBDb3JlTWVkaWFTb2Z0TGluay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQzc3QzhDOTI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0
TGluay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3OTQsMTAgKzE4NjMsMTIgQEAKIAkJCQk1N0Yx
QzkwQTI1RENGMENGMDBFOEY2RUEgLyogQ3J5cHRvS2l0UHJpdmF0ZVNvZnRMaW5rLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJRjREREQwMUIyNjREQzY5RTAwRUYxQjkxIC8qIERhdGFEZXRlY3RvcnND
b3JlU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNEUwODc1QzI2NkFDQTUzMDAwRjgx
NEEgLyogRGF0YURldGVjdG9yc1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUM1QzU4
MUIyNzU3NzRGMDAwM0I1NDBEIC8qIERhdGVUaW1lRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUExMTc1QjU4MUY2QjQ3MDUwMEM0QjlGMCAvKiBEZWZhdWx0U2VhcmNoUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ0MjkxNjQxRkE1MjY3MDAwMkNDOTNFIC8qIEZpbGVTaXpl
Rm9ybWF0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY0NDI5MTY4MUZBNTI3MDUwMDJDQzkz
RSAvKiBGaWxlU2l6ZUZvcm1hdHRlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMwMjJF
RkUyMkNGRThFMTAwNkRGMDFCIC8qIEd1bnppcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzVD
NTgyNzI3NTdBNUVFMDAzQjU0MEQgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMzBENDEyMjFGMEREMEVBMDBCNzE5NTQgLyogS2lsbFJpbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTMwRDQxMjUxRjBERDEyRDAwQjcxOTU0IC8qIEtpbGxSaW5nTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUM0ODc2RDgxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xODEzLDggKzE4ODQsMTAgQEAKIAkJCQlBMTE3NUI0RjFGNkIzMzcz
MDBDNEI5RjAgLyogUG9wdXBNZW51Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ1MEZDOUYyMUY1
RjYwMjAwNERGQTU2IC8qIFF1aWNrTG9va1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RjRDODVBNEUyNjU4NTUxQTAwNUI4OUNDIC8qIFF1aWNrTG9va1VJU29mdExpbmsubW0gaW4gU291
cmNlcyAqLywKKwkJCQkxQzVDNTgxOTI3NTc3NEYwMDAzQjU0MEQgLyogUXVvdGVkUHJpbnRhYmxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MUMwMDM3MjcwN0VERjAwMEQwMjdDNyAvKiBSZXBs
YXlLaXRTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY0OTc0RUE0MjY1RUVBMjIwMEI0
OUI4QyAvKiBSZXZlYWxTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODE4Mjc1
Nzc0RjAwMDNCNTQwRCAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTNDNjZDREMxRjQ2MkQ2QTAwOUU2RUU5IC8qIFNlc3Npb25JRC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0FCNkU1MjFGM0QxREM1MDA5QzE0QjEgLyogU2xlZXBEaXNhYmxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBM0FCNkU2MDFGM0QxRTM5MDA5QzE0QjEgLyogU2xlZXBEaXNhYmxlckNv
Y29hLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTgyNCw2ICsxODk3LDkgQEAKIAkJCQlBM0FCNkU1
NzFGM0QxRERCMDA5QzE0QjEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBM0FCNkU2NTFGM0QyMTdGMDA5QzE0QjEgLyogU3lzdGVtU2xlZXBMaXN0ZW5lck1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3OUQxRDk4MjY5NTBERDcwMDg4MzU3NyAvKiBTeXN0
ZW1TdGF0dXNTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDNUM1ODFDMjc1Nzc0RjAw
MDNCNTQwRCAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzVDNTgy
MjI3NTc3RjI5MDAzQjU0MEQgLyogVGV4dEJvdW5kYXJpZXMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQkxQzVDNTgyNjI3NTc5OTNFMDAzQjU0MEQgLyogVGV4dENoZWNraW5nTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkUxMzQyQ0QyMTVBQTEwQTAwNzE5OUQyIC8qIFVJS2l0U29mdExpbmsubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwNzYxMURCNzI0M0ZBNUJGMDBEODA3MDQgLyogVXNhZ2VUcmFj
a2luZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUYzNDQyNDhBNkEwMDAwMjJE
NURFIC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU2MzEyNzA5
ZjQzMmM0MTU3NTBlODE4ODljYjAxNWY2YmU5NDI4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisKKyNpbmNs
dWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlD
b250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4
dD4geworICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OworICAgIHZvaWQqIHBhcmVudDsKK307
CisKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4dCkgPT0gc2l6ZW9mKFNhbWVTaXpl
QXNCaWRpQ29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9zdGF5X3NtYWxsKTsKKworaW5saW5l
IEJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVj
dGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNl
LCBCaWRpQ29udGV4dCogcGFyZW50KQorICAgIDogbV9sZXZlbChsZXZlbCkKKyAgICAsIG1fZGly
ZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fb3ZlcnJpZGUob3ZlcnJpZGUpCisgICAgLCBtX3Nv
dXJjZShzb3VyY2UpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2lubGluZSBSZWY8
QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNhY2hlZCh1bnNpZ25lZCBjaGFyIGxl
dmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRp
bmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBzb3VyY2Us
IHBhcmVudCkpOworfQorCitSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGUodW5z
aWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRl
LCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKK3sKKyAg
ICBBU1NFUlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xF
RlRfVE9fUklHSFQpKTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHJldHVybiBjcmVhdGVV
bmNhY2hlZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNlLCBwYXJlbnQpOworCisg
ICAgQVNTRVJUKGxldmVsIDw9IDEpOworICAgIGlmICghbGV2ZWwpIHsKKyAgICAgICAgaWYgKCFv
dmVycmlkZSkgeworICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRp
Q29udGV4dD4+IGx0ckNvbnRleHQ7CisgICAgICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
bHRyQ29udGV4dE9uY2VGbGFnOworICAgICAgICAgICAgc3RkOjpjYWxsX29uY2UobHRyQ29udGV4
dE9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgICAgICAgICAgbHRyQ29udGV4dC5nZXQoKSA9IGNy
ZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFsc2UsIEZyb21TdHlsZU9yRE9NLCAw
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuICpsdHJDb250ZXh0LmdldCgp
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRp
Q29udGV4dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKKyAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOworICAgICAgICBzdGQ6OmNhbGxfb25jZShs
dHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgeworICAgICAgICAgICAgbHRyT3ZlcnJp
ZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZUX1RPX1JJR0hULCB0cnVl
LCBGcm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKmx0ck92
ZXJyaWRlQ29udGV4dC5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAoIW92ZXJyaWRlKSB7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxDb250ZXh0
OworICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsQ29udGV4dE9uY2VGbGFnOworICAg
ICAgICBzdGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAg
ICAgIHJ0bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgxLCBVX1JJR0hUX1RPX0xFRlQs
IGZhbHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
KnJ0bENvbnRleHQuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
ZlB0cjxCaWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4dDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uo
cnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgcnRsT3ZlcnJpZGVD
b250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9UT19MRUZULCB0cnVlLCBG
cm9tU3R5bGVPckRPTSwgMCk7CisgICAgfSk7CisgICAgcmV0dXJuICpydGxPdmVycmlkZUNvbnRl
eHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmPEJpZGlDb250ZXh0PiBjb3B5Q29udGV4
dEFuZFJlYmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29udGV4dCwgQmlkaUNvbnRleHQqIHBh
cmVudCkKK3sKKyAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50ID8gcGFyZW50LT5sZXZlbCgpIDog
MDsKKyAgICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgIG5l
d0xldmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZlbCk7CisgICAgZWxzZSBpZiAocGFy
ZW50KQorICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxldmVsKG5ld0xldmVsKTsK
KyAgICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdMZXZlbCwgY29udGV4dC5kaXIoKSwg
Y29udGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgpLCBwYXJlbnQpOworfQorCisvLyBU
aGUgQmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFibGUgLS0gdGhleSdyZSByZS11c2Vk
IGZvciByZS1sYXlvdXQgYWZ0ZXIKKy8vIERPTSBtb2RpZmljYXRpb24vZWRpdGluZyAtLSBzbyB3
ZSBjb3B5IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMsIGFuZAorLy8gcmVjYWxjdWxhdGUg
dGhlaXIgbGV2ZWxzLgorUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y29weVN0YWNrUmVt
b3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQoreworICAgIFZlY3RvcjxCaWRpQ29udGV4
dCosIDY0PiBjb250ZXh0czsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gdGhpczsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rv
ci0+c291cmNlKCkgIT0gRnJvbVVuaWNvZGUpCisgICAgICAgICAgICBjb250ZXh0cy5hcHBlbmQo
YW5jZXN0b3IpOworICAgIH0KKyAgICBBU1NFUlQoY29udGV4dHMuc2l6ZSgpKTsKKyAgICBhdXRv
IHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHMubGFz
dCgpLCBudWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb250ZXh0cy5zaXplKCkgLSAx
OyBpOyAtLWkpCisgICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVM
ZXZlbCgqY29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0cigpKTsKKyAgICByZXR1cm4gdG9w
Q29udGV4dDsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlDb250ZXh0JiBjMSwgY29u
c3QgQmlkaUNvbnRleHQmIGMyKQoreworICAgIGlmICgmYzEgPT0gJmMyKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5sZXZlbCgpIHx8IGMxLm92ZXJyaWRl
KCkgIT0gYzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBjMi5kaXIoKSB8fCBjMS5zb3VyY2Uo
KSAhPSBjMi5zb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYzEucGFy
ZW50KCkpCisgICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7CisgICAgcmV0dXJuIGMyLnBhcmVu
dCgpICYmICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NzRkYTE5ZmQzYjcwZDI5NTg3MmUxNjhhMTM2NzM4OGNmZDRjODIxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworCitlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9t
U3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKKworLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4
cGxpY2l0IGVtYmVkZGluZ3MuCitjbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworcHVibGljOgorICAgIFBBTF9FWFBPUlQgc3RhdGlj
IFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0
aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5
bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAgQmlkaUNvbnRl
eHQqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9CisgICAgdW5zaWdu
ZWQgY2hhciBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7IH0KKyAgICBVQ2hhckRpcmVj
dGlvbiBkaXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9k
aXJlY3Rpb24pOyB9CisgICAgYm9vbCBvdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJp
ZGU7IH0KKyAgICBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEJpZGlFbWJlZGRpbmdTb3VyY2U+KG1fc291cmNlKTsgfQorCisgICAgUEFMX0VY
UE9SVCBSZWY8QmlkaUNvbnRleHQ+IGNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0Nv
bnRleHRzKCk7CisKK3ByaXZhdGU6CisgICAgQmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZl
bCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJp
ZGlDb250ZXh0KiBwYXJlbnQpOworCisgICAgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRl
VW5jYWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJp
ZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOworCisgICAgdW5z
aWduZWQgbV9sZXZlbCA6IDY7IC8vIFRoZSBtYXhpbWl1bSBiaWRpIGxldmVsIGlzIDYyOiBodHRw
Oi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0V4cGxpY2l0X0xldmVsc19hbmRfRGlyZWN0aW9u
cworICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDogNTsgLy8gRGlyZWN0aW9uCisgICAgdW5zaWdu
ZWQgbV9vdmVycmlkZSA6IDE7CisgICAgdW5zaWduZWQgbV9zb3VyY2UgOiAxOyAvLyBCaWRpRW1i
ZWRkaW5nU291cmNlCisgICAgUmVmUHRyPEJpZGlDb250ZXh0PiBtX3BhcmVudDsKK307CisKK2lu
bGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyT2RkTGV2ZWwodW5zaWduZWQgY2hhciBsZXZl
bCkKK3sKKyAgICByZXR1cm4gKGxldmVsICsgMSkgfCAxOworfQorCitpbmxpbmUgdW5zaWduZWQg
Y2hhciBuZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQoreworICAgIHJl
dHVybiAobGV2ZWwgKyAyKSAmIH4xOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNv
bnRleHQmLCBjb25zdCBCaWRpQ29udGV4dCYpOworCit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjMxOTkz
ZDcxYjcyZmJmZWQ5N2VkMDM5YjIzOTI3YjU1YzQyNTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0wLDAgKzEsOTYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisjaW5jbHVkZSAi
QmlkaVJ1bkxpc3QuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+
IGNsYXNzIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgeworcHVibGljOgorICAgIHZvaWQgcmVz
ZXQoKQorICAgIHsKKyAgICAgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworICAgICAgICBtX2N1
cnJlbnRUcmFuc2l0aW9uID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydElnbm9yaW5n
U3BhY2VzKGNvbnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCEobV90cmFuc2l0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBw
ZW5kKHRyYW5zaXRpb24pOworICAgIH0KKworICAgIHZvaWQgc3RvcElnbm9yaW5nU3BhY2VzKGNv
bnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNp
dGlvbnMuc2l6ZSgpICUgMik7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRp
b24pOworICAgIH0KKworICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVfdCBpbmRl
eCkKKyAgICB7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1lbnQoKTsK
KyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygpIHsgcmV0
dXJuIG1fdHJhbnNpdGlvbnM7IH0KKyAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQorICAgIHNpemVfdCBjdXJyZW50VHJhbnNp
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIHNl
dEN1cnJlbnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1cnJlbnRU
cmFuc2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGluY3JlbWVudEN1cnJl
bnRUcmFuc2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGRlY3Jl
bWVudE51bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5zaXRpb25z
LnNpemUoKSAtIDEpOyB9CisgICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SXRl
cmF0b3I+IG1fdHJhbnNpdGlvbnM7CisgICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRpb24geyAw
IH07Cit9OworCisvLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0eXBpY2Fs
bHkgdGhlIGVuZCBvZiBhIGxpbmUpIGNhbgorLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVzZWQgdG8g
cmVzdGFydCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KK3N0cnVjdCBCaWRpU3Rh
dHVzIHsKKyAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ3JlYXRlcyBhIEJp
ZGlTdGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBkZWZhdWx0
IGRpcmVjdGlvbi4KKyAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBoYXMgdHdv
IHBvc3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMgYXQgbGVh
c3QgMTkuCisgICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBpc092
ZXJyaWRlKQorICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8g
VV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAsIGxhc3RTdHJvbmco
ZW9yKQorICAgICAgICAsIGxhc3QoZW9yKQorICAgICAgICAsIGNvbnRleHQoQmlkaUNvbnRleHQ6
OmNyZWF0ZShkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMCA6IDEsIGVvciwgaXNP
dmVycmlkZSkpCisgICAgeworICAgIH0KKworICAgIEJpZGlTdGF0dXMoVUNoYXJEaXJlY3Rpb24g
ZW9yLCBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlvbiBsYXN0LCBSZWZQ
dHI8QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKKyAgICAgICAgOiBlb3IoZW9yKQorICAgICAgICAs
IGxhc3RTdHJvbmcobGFzdFN0cm9uZykKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgICAgICwg
Y29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgIHsKKyAgICB9CisKKyAgICBVQ2hhckRpcmVj
dGlvbiBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ry
b25nIHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgVUNoYXJEaXJlY3Rpb24gbGFzdCB7IFVfT1RI
RVJfTkVVVFJBTCB9OworICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4dDsKK307CisKK3N0
cnVjdCBCaWRpRW1iZWRkaW5nIHsKKyAgICBCaWRpRW1iZWRkaW5nKFVDaGFyRGlyZWN0aW9uIGRp
cmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCisgICAgICAgIDogZGlyZWN0aW9u
KGRpcmVjdGlvbikKKyAgICAgICAgLCBzb3VyY2Uoc291cmNlKQorICAgIHsKKyAgICB9CisKKyAg
ICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3Vy
Y2U7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1
czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0dXJuIHN0YXR1czEuZW9y
ID09IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0dXMyLmxhc3QgJiYgc3RhdHVz
MS5sYXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAqKHN0YXR1czEuY29udGV4dCkg
PT0gKihzdGF0dXMyLmNvbnRleHQpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAg
cmV0dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKK30KKworc3RydWN0IEJpZGlDaGFyYWN0ZXJS
dW4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJpZGlDaGFy
YWN0ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIEJpZGlDb250ZXh0KiBjb250
ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pCisgICAgICAgIDogbV9zdGFydChzdGFydCkK
KyAgICAgICAgLCBtX3N0b3Aoc3RvcCkKKyAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRleHQtPm92
ZXJyaWRlKCkpCisgICAgeworICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJB
TCkKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOworCisgICAgICAgIG1f
bGV2ZWwgPSBjb250ZXh0LT5sZXZlbCgpOworCisgICAgICAgIC8vIGFkZCBsZXZlbCBvZiBydW4g
KGNhc2VzIEkxICYgSTIpCisgICAgICAgIGlmIChtX2xldmVsICUgMikgeworICAgICAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVfQVJBQklD
X05VTUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAg
ICAgbV9sZXZlbCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlv
biA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAgICAg
ICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24g
PT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCArPSAyOworICAg
ICAgICB9CisgICAgfQorCisgICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQorICAgIHsKKyAgICAgICAg
Ly8gRGVsZXRlIHRoZSBsaW5rZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0cnVjdG9y
IHJlY3Vyc2lvbi4KKyAgICAgICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOworICAgICAg
ICB3aGlsZSAobmV4dCkKKyAgICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCk7
CisgICAgfQorCisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9
CisgICAgdW5zaWduZWQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQorICAgIHVuc2ln
bmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAgYm9vbCByZXZl
cnNlZChib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3Vh
bGx5T3JkZXJlZDsgfQorICAgIGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQp
IHsgcmV0dXJuIG1fb3ZlcnJpZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CisKKyAgICBCaWRpQ2hh
cmFjdGVyUnVuKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4gV1RGTW92
ZShtX25leHQpOyB9CisgICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFj
dGVyUnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQorCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7CisKK3B1YmxpYzoK
KyAgICB1bnNpZ25lZCBtX3N0YXJ0OworICAgIHVuc2lnbmVkIG1fc3RvcDsKKyAgICB1bnNpZ25l
ZCBjaGFyIG1fbGV2ZWw7CisgICAgYm9vbCBtX292ZXJyaWRlIDogMTsKKyAgICBib29sIG1faGFz
SHlwaGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEgbGF5ZXJp
bmcgdmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2JqZWN0IG9u
IDY0LWJpdC4KK307CisKK2VudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgeworICAgIE5vVmlz
dWFsT3ZlcnJpZGUsCisgICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICBWaXN1YWxS
aWdodFRvTGVmdE92ZXJyaWRlCit9OworCisvLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0J3MgaW1w
bGVtZW50YXRpb24gb2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KKy8vIGh0dHA6Ly91bmlj
b2RlLm9yZy9yZXBvcnRzL3RyOQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKK3B1YmxpYzoKKyAgICBj
b25zdCBJdGVyYXRvciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAg
ICB2b2lkIHNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVyYXRvciYg
cG9zaXRpb24pIHsgbV9jdXJyZW50ID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9u
KGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRDb3VudCkK
KyAgICB7CisgICAgICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOworICAgICAgICBtX25lc3RlZElz
b2xhdGVDb3VudCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7CisgICAgfQorCisgICAgdm9pZCBpbmNy
ZW1lbnQoKSB7IHN0YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1lbnRJbnRl
cm5hbCgpOyB9CisKKyAgICBCaWRpQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdHVzLmNvbnRleHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldENvbnRleHQoUmVmUHRyPEJpZGlD
b250ZXh0PiYmIGNvbnRleHQpIHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7
IH0KKworICAgIHZvaWQgc2V0TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7IG1fc3Rh
dHVzLmxhc3QgPSBsYXN0RGlyOyB9CisgICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVDaGFyRGly
ZWN0aW9uIGxhc3RTdHJvbmdEaXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RTdHJvbmdE
aXI7IH0KKyAgICB2b2lkIHNldEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsgbV9zdGF0
dXMuZW9yID0gZW9yRGlyOyB9CisKKyAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25zdCB7IHJl
dHVybiBtX2RpcmVjdGlvbjsgfQorICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9uIGRpcmVj
dGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQorCisgICAgY29uc3QgQmlkaVN0YXR1
cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICB2b2lkIHNldFN0YXR1
cyhCaWRpU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorCisgICAgV2hpdGVz
cGFjZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUo
KSB7IHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KKworICAgIC8vIFRoZSBj
dXJyZW50IGFsZ29yaXRobSBoYW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUgbGF5ZXIgb2YgbmVz
dGluZyBhdCBhIHRpbWUuCisgICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVhY2ggaXNvbGF0ZWQg
c3Bhbiwgd2Ugd2lsbCB3YWxrIGludG8gKGFuZCBpZ25vcmUpIGFsbAorICAgIC8vIGNoaWxkIGlz
b2xhdGVkIHNwYW5zLgorICAgIHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25lc3RlZElzb2xhdGVD
b3VudCsrOyB9CisgICAgdm9pZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1fbmVzdGVkSXNvbGF0
ZUNvdW50ID49IDEpOyBtX25lc3RlZElzb2xhdGVDb3VudC0tOyB9CisgICAgYm9vbCBpbklzb2xh
dGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQorCisgICAgdm9pZCBl
bWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSk7CisgICAgYm9vbCBjb21t
aXRFeHBsaWNpdEVtYmVkZGluZygpOworCisgICAgdm9pZCBjcmVhdGVCaWRpUnVuc0ZvckxpbmUo
Y29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBOb1Zpc3VhbE92
ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CisKKyAgICBCaWRpUnVuTGlzdDxS
dW4+JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyB1c2Vk
IHRvIGJlIHBhcnQgb2YgZGVsZXRlUnVucygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9sYXRpb24u
CisgICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorICAgIHZvaWQg
bWFya0N1cnJlbnRSdW5FbXB0eSgpIHsgbV9lbXB0eVJ1biA9IHRydWU7IH0KKworICAgIHZvaWQg
c2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiwgc2l6
ZV90KTsKKyAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mKTsKKworcHJvdGVjdGVkOgorICAgIEJpZGlSZXNvbHZlckJhc2UoKSA9IGRl
ZmF1bHQ7CisKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2ZXJzIHN1
YmNsYXNzaW5nIHRoaXMgbWV0aG9kLCB3ZSBzaG91bGQKKyAgICAvLyBwYXNzIGluIHNvbWUgc29y
dCBvZiBUcmFpdHMgb2JqZWN0IHdoaWNoIGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBmb3IgYXBw
ZW5kaW5nLgorICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3Mm
PigqdGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQorICAgIGJvb2wgbmVlZHNDb250aW51ZVBh
c3RFbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xhc3MmPigq
dGhpcykubmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpOyB9CisKKyAgICBJdGVyYXRvciBt
X2N1cnJlbnQ7CisgICAgLy8gc29yIGFuZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFuZCAiZW5k
IG9mIHJ1biIgcmVzcGVjdGl2ZWx5IGFuZCBjb3JyZXBvbmQKKyAgICAvLyB0byBhYnJldmlhdGlv
bnMgdXNlZCBpbiBVQkEgc3BlYzogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNCRDcK
KyAgICBJdGVyYXRvciBtX3NvcjsgLy8gUG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4g
dGhlIGN1cnJlbnQgcnVuLgorICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8gdGhlIGxh
c3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KKyAgICBJdGVyYXRvciBtX2xhc3Q7Cisg
ICAgQmlkaVN0YXR1cyBtX3N0YXR1czsKKyAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVjdGlvbiB7
IFVfT1RIRVJfTkVVVFJBTCB9OworICAgIEl0ZXJhdG9yIGVuZE9mTGluZTsKKyAgICBib29sIG1f
cmVhY2hlZEVuZE9mTGluZSB7IGZhbHNlIH07CisgICAgSXRlcmF0b3IgbV9sYXN0QmVmb3JlRVQ7
IC8vIEJlZm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKKyAgICBib29sIG1fZW1w
dHlSdW4geyB0cnVlIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlbG9uZyB0
byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFzc2VkCisgICAgLy8gaW50byBjcmVhdGVC
aWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KKyAgICBCaWRpUnVuTGlzdDxSdW4+IG1fcnVu
czsKKworICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+IG1fd2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZTsKKworICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNvbGF0ZUNvdW50IHsg
MCB9OworICAgIEhhc2hNYXA8UnVuKiwgdW5zaWduZWQ+IG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdU
cmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW47CisKK3ByaXZhdGU6CisgICAgdm9pZCByYWlzZUV4cGxp
Y2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJEaXJlY3Rpb24gdG8p
OworICAgIHZvaWQgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZy
b20pOworICAgIHZvaWQgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgp
OworCisgICAgdm9pZCB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJE
aXJlY3Rpb24pOworICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7CisgICAgdm9pZCBp
bmNyZW1lbnRJbnRlcm5hbCgpIHsgbV9jdXJyZW50LmluY3JlbWVudCgpOyB9CisgICAgdm9pZCBh
cHBlbmRSdW5JbnRlcm5hbCgpOworICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5h
bCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFZlY3RvcjxCaWRpRW1iZWRkaW5nLCA4
PiBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KK2NsYXNzIEJpZGlSZXNvbHZlciA6IHB1Ymxp
YyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZlcjxJdGVyYXRvciwg
UnVuPj4geworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwg
dHlwZW5hbWUgSXNvbGF0ZVJ1bj4KK2NsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlIDogcHVi
bGljIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyV2l0aElzb2xh
dGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKK3B1YmxpYzoKKyAgICB+QmlkaVJlc29s
dmVyV2l0aElzb2xhdGUoKTsKKworICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKTsKKyAgICB2
b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7CisgICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFzdEVuZElu
dGVybmFsKCkgY29uc3Q7CisgICAgVmVjdG9yPElzb2xhdGVSdW4+JiBpc29sYXRlZFJ1bnMoKSB7
IHJldHVybiBtX2lzb2xhdGVkUnVuczsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxJc29sYXRl
UnVuPiBtX2lzb2xhdGVkUnVuczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0
eXBlbmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+CitpbmxpbmUgQmlkaVJlc29sdmVyV2l0
aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVzb2x2ZXJXaXRoSXNv
bGF0ZSgpCit7CisgICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgcmVzb2x2ZXIgc2hvdWxkIGhhdmUg
aGFuZGxlZCB0aGUgaXNvbGF0ZWQgcnVucy4KKyAgICBBU1NFUlQobV9pc29sYXRlZFJ1bnMuaXNF
bXB0eSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwg
dHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBS
dW4sIERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fZW1w
dHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQg
PSBtX3Nvci5vZmZzZXQoKTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbV9lb3Iub2Zm
c2V0KCk7CisKKyAgICAgICAgaWYgKCFlbmRPZkxpbmUuYXRFbmQoKSAmJiBlbmRPZmZzZXQgPj0g
ZW5kT2ZMaW5lLm9mZnNldCgpKSB7CisgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSB0
cnVlOworICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2ZMaW5lLm9mZnNldCgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKKyAgICAgICAgICAg
IG1fcnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxSdW4+KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQg
KyAxLCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7CisKKyAgICAgICAgbV9lb3IuaW5jcmVtZW50
KCk7CisgICAgICAgIG1fc29yID0gbV9lb3I7CisgICAgfQorCisgICAgbV9kaXJlY3Rpb24gPSBV
X09USEVSX05FVVRSQUw7CisgICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFMOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJp
dmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENs
YXNzPjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJj
ZSkKK3sKKyAgICAvLyBJc29sYXRlZCBzcGFucyBjb21wdXRlIGJhc2UgZGlyZWN0aW9uYWxpdHkg
ZHVyaW5nIHRoZWlyIG93biBVQkEgcnVuLgorICAgIC8vIERvIG5vdCBpbnNlcnQgZmFrZSBlbWJl
ZCBjaGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4gaXNvbGF0ZWQgc3Bhbi4KKyAgICBBU1NFUlQo
IWluSXNvbGF0ZSgpKTsKKworICAgIEFTU0VSVChkaXIgPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9S
TUFUIHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpciA9PSBVX0xFRlRf
VE9fUklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwg
ZGlyID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSk7CisgICAgbV9jdXJyZW50RXhwbGljaXRF
bWJlZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIsIHNvdXJjZSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJp
dmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENs
YXNzPjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpCit7CisgICAg
QVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7
CisgICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSworICAg
ICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9VTkRBUllfTkVVVFJBTAorICAgICAgICAmJiBt
X3N0YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKKyAgICAgICAgJiYgbV9z
dGF0dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCisgICAgICAgICYmIG1fc3Rh
dHVzLmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIAorICAgICAgICAmJiBtX3N0YXR1
cy5sYXN0ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5s
YXN0ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCk7CisgICAgaWYgKG1fZGlyZWN0aW9uID09
IFVfT1RIRVJfTkVVVFJBTCkKKyAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ry
b25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVG
VDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERl
cml2ZWRDbGFzcz46Omxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBm
cm9tKQoreworICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAg
ICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAv
LyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5k
IHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0
CisgICAgICAgIGlmIChmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgLy8g
YmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAorICAgICAgICAgICAgaWYgKG1f
c3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGlmICht
X3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAg
ICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBtX2Rp
cmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9f
UklHSFQpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBt
X2RpcmVjdGlvbiA9IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0dXMuZW9y
ID09IFVfQVJBQklDX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19S
SUdIVCkgeworICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgfQorICAgICAgICBtX2VvciA9IG1fbGFzdDsK
KyAgICB9CisKKyAgICBhcHBlbmRSdW4oKTsKKyAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKKworICAg
IC8vIHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVyIGxldmVs
IChydWxlIFgxMCkKKyAgICBzZXRMYXN0RGlyKGZyb20pOworICAgIHNldExhc3RTdHJvbmdEaXIo
ZnJvbSk7CisgICAgbV9lb3IgPSBJdGVyYXRvcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlS
ZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBsaWNpdEVt
YmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKQorewor
ICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tE
aXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNv
ciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRp
LnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAg
IGlmICh0byA9PSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgIC8vIGJpZGkuc29yIC4u
LiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFz
dFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJl
Y3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5l
b3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X0FSQUJJQ19OVU1CRVI7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUICYmIGZy
b20gPT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Cisg
ICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgor
ICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAmJiAobV9z
dGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJR0hUX1RP
X0xFRlQpKQorICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFOX05VTUJF
UiAmJiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09IFVf
UklHSFRfVE9fTEVGVCkpIHsKKyAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIH0KKyAgICAgICAgbV9lb3Ig
PSBtX2xhc3Q7CisgICAgfQorCisgICAgYXBwZW5kUnVuKCk7CisgICAgbV9lbXB0eVJ1biA9IHRy
dWU7CisKKyAgICBzZXRMYXN0RGlyKHRvKTsKKyAgICBzZXRMYXN0U3Ryb25nRGlyKHRvKTsKKyAg
ICBtX2VvciA9IEl0ZXJhdG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0
eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK2Jvb2wgQmlkaVJlc29sdmVyQmFz
ZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZygp
Cit7CisgICAgLy8gV2hlbiB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmluZyB0aGUg
cGFyZW50IGNvbnRleHQgd2hpY2gKKyAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0aGUgaXNv
bGF0ZWQgY29udGVudCwgaW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCisgICAgLy8gV2Ugc2hv
dWxkIG5ldmVyIGFjY3J1ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92ZXIgaXNv
bGF0ZWQgY29udGVudC4KKyAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVudEV4cGxp
Y2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gZnJvbUxldmVsID0g
Y29udGV4dCgpLT5sZXZlbCgpOworICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gdG9Db250ZXh0ID0g
Y29udGV4dCgpOworCisgICAgZm9yIChhdXRvJiBlbWJlZGRpbmcgOiBtX2N1cnJlbnRFeHBsaWNp
dEVtYmVkZGluZ1NlcXVlbmNlKSB7CisgICAgICAgIGlmIChlbWJlZGRpbmcuZGlyZWN0aW9uID09
IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBhcmVu
dENvbnRleHQgPSB0b0NvbnRleHQtPnBhcmVudCgpKQorICAgICAgICAgICAgICAgIHRvQ29udGV4
dCA9IHBhcmVudENvbnRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBVQ2hhckRp
cmVjdGlvbiBkaXJlY3Rpb24gPSAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xF
RlRfRU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09W
RVJSSURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAg
IGJvb2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVF9P
VkVSUklERSB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklE
RTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSB0b0NvbnRleHQtPmxldmVsKCk7
CisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKKyAgICAgICAg
ICAgICAgICBsZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJFdmVuTGV2ZWwobGV2ZWwp
OworICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0
ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgZW1iZWRk
aW5nLnNvdXJjZSwgdG9Db250ZXh0LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1
dG8gdG9MZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKKworICAgIGlmICh0b0xldmVsID4gZnJv
bUxldmVsKQorICAgICAgICByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUg
MiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCwgdG9MZXZlbCAlIDIgPyBVX1JJ
R0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOworICAgIGVsc2UgaWYgKHRvTGV2ZWwgPCBm
cm9tTGV2ZWwpCisgICAgICAgIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9tTGV2ZWwg
JSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKKworICAgIHNldENvbnRl
eHQoV1RGTW92ZSh0b0NvbnRleHQpKTsKKworICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5n
U2VxdWVuY2UuY2xlYXIoKTsKKworICAgIHJldHVybiBmcm9tTGV2ZWwgIT0gdG9MZXZlbDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVy
aXZlZENsYXNzPgoraW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBE
ZXJpdmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oVUNoYXJE
aXJlY3Rpb24gZGlyQ3VycmVudCkKK3sKKyAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKKyAgICBj
YXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgIGlmIChtX3N0YXR1cy5s
YXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSKQorICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9IFVf
RVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFS
QVRPUjoKKyAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgY2FzZSBVX1dISVRFX1NQ
QUNFX05FVVRSQUw6CisgICAgY2FzZSBVX09USEVSX05FVVRSQUw6CisgICAgICAgIHN3aXRjaCAo
bV9zdGF0dXMubGFzdCkgeworICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJ
QzoKKyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgY2FzZSBVX0FSQUJJ
Q19OVU1CRVI6CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdGF0dXMubGFz
dCA9IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFVfRElSX05PTl9TUEFDSU5HX01BUks6CisgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Cisg
ICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgIGNhc2UgVV9MRUZUX1RPX1JJ
R0hUX0VNQkVERElORzoKKyAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToKKyAgICBj
YXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKKyAgICBjYXNlIFVfUE9QX0RJUkVDVElPTkFM
X0ZPUk1BVDoKKyAgICAgICAgLy8gaWdub3JlIHRoZXNlCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGRlZmF1bHQ6
CisgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNz
PgoraW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xh
c3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQoreworICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWxM
b3cgPSAxMjg7CisgICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOworICAgIGZvciAoUnVu
KiBydW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkgeworICAg
ICAgICBsZXZlbEhpZ2ggPSBzdGQ6Om1heChydW4tPmxldmVsKCksIGxldmVsSGlnaCk7CisgICAg
ICAgIGxldmVsTG93ID0gc3RkOjptaW4ocnVuLT5sZXZlbCgpLCBsZXZlbExvdyk7CisgICAgfQor
CisgICAgLy8gVGhpcyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29y
ZGluZyB0byBCaWRpIHNwZWMpOgorICAgIC8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3Ry
OS8jTDIKKyAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3VuZCBpbiB0aGUgdGV4
dCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCisgICAgLy8gcmV2ZXJzZSBh
bnkgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2
ZWwgb3IgaGlnaGVyLgorCisgICAgLy8gUmV2ZXJzaW5nIGlzIG9ubHkgZG9uZSB1cCB0byB0aGUg
bG93ZXN0IG9kZCBsZXZlbC4KKyAgICBpZiAoIShsZXZlbExvdyAlIDIpKQorICAgICAgICBsZXZl
bExvdysrOworCisgICAgdW5zaWduZWQgY291bnQgPSBtX3J1bnMucnVuQ291bnQoKSAtIDE7CisK
KyAgICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7CisgICAgICAgIHVuc2lnbmVkIGkg
PSAwOworICAgICAgICBSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOworICAgICAgICB3aGls
ZSAoaSA8IGNvdW50KSB7CisgICAgICAgICAgICBmb3IgKDtpIDwgY291bnQgJiYgcnVuICYmIHJ1
bi0+bGV2ZWwoKSA8IGxldmVsSGlnaDsgaSsrKQorICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+
bmV4dCgpOworICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOworICAgICAgICAgICAgZm9y
ICg7aSA8PSBjb3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpID49IGxldmVsSGlnaDsgaSsrKQor
ICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dCgpOworICAgICAgICAgICAgdW5zaWduZWQg
ZW5kID0gaSAtIDE7CisgICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoc3RhcnQsIGVuZCk7
CisgICAgICAgIH0KKyAgICAgICAgbGV2ZWxIaWdoLS07CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2
b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6Y3JlYXRl
QmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlvbk92ZXJy
aWRlIG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWspCit7CisgICAgQVNTRVJUKG1fZGlyZWN0
aW9uID09IFVfT1RIRVJfTkVVVFJBTCk7CisKKyAgICBpZiAob3ZlcnJpZGUgIT0gTm9WaXN1YWxP
dmVycmlkZSkgeworICAgICAgICBtX2VtcHR5UnVuID0gZmFsc2U7CisgICAgICAgIG1fc29yID0g
bV9jdXJyZW50OworICAgICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlICht
X2N1cnJlbnQgIT0gZW5kICYmICFtX2N1cnJlbnQuYXRFbmQoKSkgeworICAgICAgICAgICAgbV9l
b3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBpbmNyZW1lbnQoKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRlID09IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUg
PyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIGFwcGVuZFJ1bigp
OworICAgICAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1bigpKTsK
KyAgICAgICAgaWYgKG92ZXJyaWRlID09IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUgJiYgbV9y
dW5zLnJ1bkNvdW50KCkpCisgICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMoMCwgbV9ydW5z
LnJ1bkNvdW50KCkgLSAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZW1wdHlS
dW4gPSB0cnVlOworCisgICAgbV9lb3IgPSBJdGVyYXRvcigpOworCisgICAgbV9sYXN0ID0gbV9j
dXJyZW50OworICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOworICAgIEJpZGlSZXNvbHZlckJhc2U8
SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPiBzdGF0ZUF0RW5kOworCisgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudDsKKyAgICAgICAgaWYgKHBh
c3RFbmQgJiYgKGhhcmRMaW5lQnJlYWsgfHwgbV9jdXJyZW50LmF0RW5kKCkpKSB7CisgICAgICAg
ICAgICBCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChoYXJkTGlu
ZUJyZWFrKSB7CisgICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUgVW5pY29k
ZSBCaWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAorICAgICAgICAgICAgICAgIC8vIFdp
bklFIGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyByZXNldCBiaWRpIHN0
YXRlCisgICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBiaWRpIGNvbnRyb2wg
Y2hhcmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCisgICAgICAgICAgICAgICAgLy8gRE9NIG5v
ZGVzIHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgc3RhdGVB
dEVuZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRl
eHRzKCkpOworCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRlQXRFbmQuY29udGV4
dCgpLT5kaXIoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVvckRpcihkaXJDdXJy
ZW50KTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIoZGlyQ3VycmVudCk7
CisgICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGlyKGRpckN1cnJlbnQp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYy0+cGFyZW50
KCkpCisgICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAg
ICBkaXJDdXJyZW50ID0gYy0+ZGlyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlvbigpOworICAgICAg
ICAgICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQorICAgICAgICAgICAgICAgICYmIGRpckN1
cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORworICAgICAgICAgICAgICAgICYmIGRp
ckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORworICAgICAgICAgICAgICAgICYm
IGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAgICAgICAgICAgICAg
JiYgZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKKyAgICAgICAgICAgICAg
ICAmJiBkaXJDdXJyZW50ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkKKyAgICAgICAgICAg
ICAgICBkaXJDdXJyZW50ID0gY29udGV4dCgpLT5kaXIoKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGRpckN1cnJlbnQgPT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSykKKyAgICAgICAgICAgICAgICBk
aXJDdXJyZW50ID0gbV9zdGF0dXMubGFzdDsKKyAgICAgICAgfQorCisjaWYgUExBVEZPUk0oV0lO
KQorICAgICAgICAvLyBPdXIgV2luZG93cyBidWlsZCBoYXNuJ3QgdXBkYXRlZCBpdHMgaGVhZGVy
cyBmcm9tIElDVSA2LjEsIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGVzZSBzeW1ib2xzLgorICAgICAg
ICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX0ZJUlNUX1NUUk9OR19JU09MQVRFID0gc3RhdGljX2Nh
c3Q8VUNoYXJEaXJlY3Rpb24+KDE5KTsKKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9M
RUZUX1RPX1JJR0hUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjApOwor
ICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1JJR0hUX1RPX0xFRlRfSVNPTEFURSA9IHN0
YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMSk7CisgICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0
aW9uIFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlv
bj4oMjIpOworI2VuZGlmCisgICAgICAgIC8vIFdlIGlnbm9yZSBhbGwgY2hhcmFjdGVyIGRpcmVj
dGlvbmFsaXR5IHdoaWxlIGluIHVuaWNvZGUtYmlkaTogaXNvbGF0ZSBzcGFucy4KKyAgICAgICAg
Ly8gV2UnbGwgaGFuZGxlIG9yZGVyaW5nIHRoZSBpc29sYXRlZCBjaGFyYWN0ZXJzIGluIGEgc2Vj
b25kIHBhc3MuCisgICAgICAgIGlmIChpbklzb2xhdGUoKSB8fCBkaXJDdXJyZW50ID09IFVfRklS
U1RfU1RST05HX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX0xFRlRfVE9fUklHSFRfSVNPTEFU
RSB8fCBkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9JU09MQVRFIHx8IGRpckN1cnJlbnQg
PT0gVV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSkKKyAgICAgICAgICAgIGRpckN1cnJlbnQgPSBV
X09USEVSX05FVVRSQUw7CisKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVS
X05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7CisgICAgICAgIHN3aXRjaCAoZGlyQ3VycmVudCkg
eworCisgICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChYMS1YOSBpbiB0aGUgQmlk
aSBzcGVjcykKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgICAg
ICBjYXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc6CisgICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUX09WRVJSSURFOgorICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToK
KyAgICAgICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6CisgICAgICAgICAgICBlbWJl
ZChkaXJDdXJyZW50LCBGcm9tVW5pY29kZSk7CisgICAgICAgICAgICBjb21taXRFeHBsaWNpdEVt
YmVkZGluZygpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gc3Ryb25nIHR5cGVz
CisgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgc3dpdGNoIChtX3N0
YXR1cy5sYXN0KSB7CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAg
ICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVI6CisgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAg
ICAgICAgICBpZiAobV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1
cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05V
TUJFUl9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJB
VE9SOgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBj
YXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJB
VE9SOgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAg
ICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9y
ID09IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1
cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWws
IHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVj
dGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAhPSBV
X0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1
dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiwgd2hpY2ggaXMgUgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9BUkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1i
ZXJzIGFyZSBhbHdheXMgb24gYSBoaWdoZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9z
ZSB0aGF0IHJ1bgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05V
TUJFUjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0KCktPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rp
b24sIHdoaWNoIGlzIFIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBl
bWJlZGRpbmcgZGlyCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09
IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xh
c3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVG
VDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xF
RlRfVE9fUklHSFQ7CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RP
X1JJR0hUOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAg
ICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMu
bGFzdCkgeworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICBj
YXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6
CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2Ug
VV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9O
VU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Cisg
ICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NF
R01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6
CisgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBjb250ZXh0KCkt
PmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9y
ID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fc3Rh
dHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX1JJ
R0hUX1RPX0xFRlQ7CisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVu
dDsKKyAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6CisKKyAgICAgICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9
IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKKyAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IHN0
cm9uZyB3YXMgQUwgY2hhbmdlIEVOIHRvIEFOCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3N0
YXR1cy5sYXN0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAg
ICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAg
ICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAgICAgICAgICAgIGNhc2Ug
VV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZGly
ZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAg
ICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAg
ICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBV
X0JMT0NLX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFU
T1I6CisgICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAg
ICAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6CisgICAgICAgICAgICAgICAgICAgIGlmICht
X3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJz
LCBzbyB0aGUgbmV1dHJhbHMgc2hvdWxkIGJlIFIuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGVybWluYXRlIHRoZSBFTiBydW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1
bi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0g
VV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZU
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVv
ciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1p
bmF0ZSB0aGUgQU4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hU
X1RPX0xFRlQgfHwgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGFuIFIgcnVuLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9U
RVJNSU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QmVnaW4gYSBuZXcgRU4gcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hU
X1RPX0xFRlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgUiBydW4g
dG8gaW5jbHVkZSB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9
IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJl
Zm9yZUVUIDogbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OworICAgICAgICAgICAgICAgIG1fc3Rh
dHVzLmVvciA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgIGlmIChtX2RpcmVj
dGlvbiA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVS
OgorICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAg
IHN3aXRjaCAobV9zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklH
SFQ6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJ
R0hUKQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICBj
YXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5f
TlVNQkVSOgorICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBV
X0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5l
b3IgPT0gVV9BUkFCSUNfTlVNQkVSKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SOgorICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBj
YXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJB
VE9SOgorICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAg
ICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9y
ID09IFVfQVJBQklDX05VTUJFUgorICAgICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9y
ID09IFVfRVVST1BFQU5fTlVNQkVSICYmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRf
VE9fTEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkpCisgICAgICAg
ICAgICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9z
dGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9
PSBVX1JJR0hUX1RPX0xFRlQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0
aGUgcnVuIGJlZm9yZSB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1
bigpOworICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRy
YWxzLgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJB
TCkKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25n
ID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsK
KyAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1f
Y3VycmVudDsKKyAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVfQVJBQklDX05VTUJFUjsKKyAg
ICAgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgIGNhc2Ug
VV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICBpZiAobV9zdGF0
dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGRpckN1cnJl
bnQgPSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVu
dDsKKyAgICAgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFU
T1IpCisgICAgICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBtX2VtcHR5UnVuID8gbV9lb3Ig
OiBtX2xhc3Q7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBib3VuZGFyeSBuZXV0
cmFscyBzaG91bGQgYmUgaWdub3JlZAorICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoK
KyAgICAgICAgICAgIGlmIChtX2VvciA9PSBtX2xhc3QpCisgICAgICAgICAgICAgICAgbV9lb3Ig
PSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIG5ldXRyYWxz
CisgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6CisgICAgICAgICAgICAvLyBGSVhNRTog
V2hhdCBkbyB3ZSBkbyB3aXRoIG5ld2xpbmUgYW5kIHBhcmFncmFwaCBzZXBhcmF0b3JzIHRoYXQg
Y29tZSB0byBoZXJlPworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9TRUdNRU5U
X1NFUEFSQVRPUjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcnVsZSBMMS4KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocGFzdEVuZCAmJiAobV9lb3IgPT0gbV9jdXJyZW50IHx8ICFuZWVk
c0NvbnRpbnVlUGFzdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKCFtX3JlYWNoZWRFbmRPZkxp
bmUpIHsKKyAgICAgICAgICAgICAgICBtX2VvciA9IGVuZE9mTGluZTsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fc3RhdHVzLmVvcikgeworICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RP
X1JJR0hUOgorICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAgICAgICAg
ICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVj
dGlvbiA9IG1fc3RhdHVzLmVvcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVG
VF9UT19SSUdIVCA6IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogaGFuZGxlIG5ldXRyYWxzIGluIHRoaXMgY2FzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4MTcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9jdXJyZW50ID0gZW5kOworICAgICAgICAgICAgbV9zdGF0dXMg
PSBzdGF0ZUF0RW5kLm1fc3RhdHVzOworICAgICAgICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1f
c29yOyAKKyAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsKKyAgICAgICAgICAg
IG1fbGFzdCA9IHN0YXRlQXRFbmQubV9sYXN0OworICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZM
aW5lID0gc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRPZkxpbmU7CisgICAgICAgICAgICBtX2xhc3RC
ZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQ7CisgICAgICAgICAgICBtX2VtcHR5
UnVuID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X09USEVSX05FVVRSQUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihkaXJDdXJyZW50KTsKKyAgICAg
ICAgbV9sYXN0ID0gbV9jdXJyZW50OworCisgICAgICAgIGlmIChtX2VtcHR5UnVuKSB7CisgICAg
ICAgICAgICBtX3NvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluY3JlbWVudCgpOworICAgICAgICBpZiAoIW1fY3Vy
cmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBi
b29sIGNvbW1pdHRlZCA9IGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7CisgICAgICAgICAgICBp
ZiAoY29tbWl0dGVkICYmIHBhc3RFbmQpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnQgPSBl
bmQ7CisgICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBzdGF0ZUF0RW5kLm1fc3RhdHVzOworICAg
ICAgICAgICAgICAgIG1fc29yID0gc3RhdGVBdEVuZC5tX3NvcjsgCisgICAgICAgICAgICAgICAg
bV9lb3IgPSBzdGF0ZUF0RW5kLm1fZW9yOworICAgICAgICAgICAgICAgIG1fbGFzdCA9IHN0YXRl
QXRFbmQubV9sYXN0OworICAgICAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRl
QXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVU
ID0gc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVDsKKyAgICAgICAgICAgICAgICBtX2VtcHR5UnVu
ID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0g
VV9PVEhFUl9ORVVUUkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXN0RW5kICYmIChtX2N1cnJlbnQgPT0gZW5kIHx8
IG1fY3VycmVudC5hdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKG1fZW1wdHlSdW4pCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc3RhdHVzID0gbV9z
dGF0dXM7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc29yID0gbV9zb3I7CisgICAgICAgICAg
ICBzdGF0ZUF0RW5kLm1fZW9yID0gbV9lb3I7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fbGFz
dCA9IG1fbGFzdDsKKyAgICAgICAgICAgIHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lID0g
bV9yZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVF
VCA9IG1fbGFzdEJlZm9yZUVUOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VtcHR5UnVuID0g
bV9lbXB0eVJ1bjsKKyAgICAgICAgICAgIGVuZE9mTGluZSA9IG1fbGFzdDsKKyAgICAgICAgICAg
IHBhc3RFbmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9ydW5zLnNldExvZ2lj
YWxseUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7CisgICAgcmVvcmRlclJ1bnNGcm9tTGV2ZWxz
KCk7CisgICAgZW5kT2ZMaW5lID0gSXRlcmF0b3IoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
SXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRp
UmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OnNldFdoaXRlc3BhY2VD
b2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuLCBzaXplX3QgdHJhbnNp
dGlvbikKK3sKKyAgICBBU1NFUlQoIW1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9y
SXNvbGF0ZWRSdW4uY29udGFpbnMoJnJ1bikpOworICAgIG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdU
cmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4uYWRkKCZydW4sIHRyYW5zaXRpb24pOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xh
c3M+Cit1bnNpZ25lZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFz
cz46OndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVu
KQoreworICAgIHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xh
dGVkUnVuLnRha2UoJnJ1bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3RleHQvQmlkaVJ1bkxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWFiNjcwZTU5N2RmY2Rj
ZTc3NDhmZGIzOWEyNTgxM2M1YTllMTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHQg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFBBTCB7CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+CitjbGFzcyBCaWRp
UnVuTGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxpc3QpOworcHVibGlj
OgorICAgIEJpZGlSdW5MaXN0KCkKKyAgICAgICAgOiBtX2xhc3RSdW4obnVsbHB0cikKKyAgICAg
ICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKKyAgICAgICAgLCBtX3J1bkNvdW50KDAp
CisgICAgeworICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNvbHZlciBubyBsb25n
ZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCisgICAgLy8gdGhlbiB+QmlkaVJ1bkxpc3Qgc2hvdWxk
IGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCisKKyAgICBSdW4qIGZpcnN0UnVuKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQorICAgIFJ1biogbGFzdFJ1bigpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQorICAgIFJ1biogbG9naWNhbGx5TGFzdFJ1bigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQorICAgIHVuc2lnbmVkIHJ1bkNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQorCisgICAgdm9pZCBhcHBlbmRSdW4oc3Rk
Ojp1bmlxdWVfcHRyPFJ1bj4mJik7CisgICAgdm9pZCBwcmVwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0
cjxSdW4+JiYpOworCisgICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7CisgICAgdm9pZCBtb3Zl
UnVuVG9CZWdpbm5pbmcoUnVuKik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCByZXZl
cnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICB2b2lkIHJlb3JkZXJS
dW5zRnJvbUxldmVscygpOworCisgICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0UnVuKFJ1biogcnVu
KSB7IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQorCisgICAgdm9pZCByZXBsYWNlUnVuV2l0
aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpOworCitwcml2
YXRlOgorCisgICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQtbGlzdCwgd2hlcmUg
dGhlIGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQgYXJlIG9mIHR5cGUg
c3RkOjp1bmlxdWVfcHRyKS4KKyAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJlbG93IHBvaW50IGlu
dG8gdGhlIHNpbmdseS1saW5rZWQtbGlzdC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBtX2Zp
cnN0UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIFJ1biogbV9sYXN0UnVuOworICAg
IFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOworICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Cit9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6YXBw
ZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQoreworICAgIGlmICghbV9maXJzdFJ1
bikgeworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOworICAgICAgICBtX2xhc3RS
dW4gPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbGFzdFJ1bi0+
c2V0TmV4dChXVEZNb3ZlKHJ1bikpOworICAgICAgICBtX2xhc3RSdW4gPSBtX2xhc3RSdW4tPm5l
eHQoKTsKKyAgICB9CisgICAgbV9ydW5Db3VudCsrOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgUnVu
PgoraW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9w
dHI8UnVuPiYmIHJ1bikKK3sKKyAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsKKworICAgIGlmICgh
bV9sYXN0UnVuKQorICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7CisgICAgZWxzZQorICAg
ICAgICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAgbV9maXJzdFJ1biA9
IFdURk1vdmUocnVuKTsKKyAgICBtX3J1bkNvdW50Kys7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBS
dW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQoUnVuKiBydW4p
Cit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVChtX2xhc3RSdW4pOworICAg
IEFTU0VSVChydW4tPm5leHQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0gbnVsbHB0cjsKKyAg
ICBSdW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9
IHJ1bikgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBw
cmV2aW91cy0+bmV4dCgpOworICAgIH0KKworICAgIGlmICghcHJldmlvdXMpIHsKKyAgICAgICAg
QVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7CisgICAgICAgIG1f
Zmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOworICAgICAgICBtX2xhc3RS
dW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VOZXh0KCk7
CisgICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0KCkpOworICAgICAg
ICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9C
ZWdpbm5pbmcoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VS
VChtX2xhc3RSdW4pOworICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5nZXQoKSk7CisKKyAg
ICBSdW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICBSdW4qIGN1cnJlbnQgPSBw
cmV2aW91cy0+bmV4dCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikgeworICAgICAgICBw
cmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOwor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzLT50YWtl
TmV4dCgpOworICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQoKSk7CisgICAgaWYg
KHJ1biA9PSBtX2xhc3RSdW4pCisgICAgICAgIG1fbGFzdFJ1biA9IHByZXZpb3VzOworCisgICAg
dGFyZ2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1fZmlyc3RSdW4gPSBX
VEZNb3ZlKHRhcmdldCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5M
aXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1bkxpc3Q8
UnVuPiYgbmV3UnVucykKK3sKKyAgICBBU1NFUlQobmV3UnVucy5ydW5Db3VudCgpKTsKKyAgICBB
U1NFUlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKHRvUmVwbGFjZSk7CisKKyAgICBtX3J1bkNv
dW50ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRpbmcgdGhlIG5ldyBy
dW5zIGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCisKKyAgICAvLyBGaXggdXAgYW55IHBvaW50ZXJz
IHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCisgICAgaWYgKG1fbGFzdFJ1biA9PSB0b1JlcGxhY2Up
CisgICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOworICAgIGlmIChtX2xvZ2lj
YWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQorICAgICAgICBtX2xvZ2ljYWxseUxhc3RSdW4gPSBu
ZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKKworICAgIGlmIChtX2ZpcnN0UnVuLmdldCgpID09
IHRvUmVwbGFjZSkgeworICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dChtX2ZpcnN0
UnVuLT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUobmV3UnVucy5t
X2ZpcnN0UnVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGaW5kIHRoZSBydW4ganVzdCBi
ZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KKyAgICAgICAgUnVuKiBwcmV2
aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgICAgIHdoaWxlIChwcmV2aW91c1J1bi0+
bmV4dCgpICE9IHRvUmVwbGFjZSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcHJldmlvdXNS
dW4tPm5leHQoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKKworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5leHQoKTsKKyAgICAg
ICAgcHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4pKTsKKyAg
ICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtlTmV4dCgpKTsKKyAg
ICB9CisKKyAgICBuZXdSdW5zLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2
b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKK3sKKyAgICBtX2ZpcnN0UnVuID0gbnVsbHB0
cjsKKyAgICBtX2xhc3RSdW4gPSBudWxscHRyOworICAgIG1fbG9naWNhbGx5TGFzdFJ1biA9IG51
bGxwdHI7CisgICAgbV9ydW5Db3VudCA9IDA7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2
b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbmQgPCBtX3J1bkNvdW50
KTsKKworICAgIC8vIEdldCB0aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBydW5zIHRv
IHJldmVyc2UgYW5kIHB1dCBpdCBpbgorICAgIC8vIHxiZWZvcmVTdGFydHwuIHxjdXJyfCBzaG91
bGQgcG9pbnQgdG8gdGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgorICAgIFJ1biogY3VyciA9IG1f
Zmlyc3RSdW4uZ2V0KCk7CisgICAgUnVuKiBiZWZvcmVTdGFydCA9IG51bGxwdHI7CisgICAgdW5z
aWduZWQgaSA9IDA7CisgICAgZm9yICg7IGkgPCBzdGFydDsgKytpKSB7CisgICAgICAgIGJlZm9y
ZVN0YXJ0ID0gY3VycjsKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKKyAgICB9CisgICAg
UnVuKiBzdGFydFJ1biA9IGN1cnI7CisKKyAgICBmb3IgKDsgaSA8IGVuZDsgKytpKQorICAgICAg
ICBjdXJyID0gY3Vyci0+bmV4dCgpOworCisgICAgaWYgKCFjdXJyLT5uZXh0KCkpCisgICAgICAg
IG1fbGFzdFJ1biA9IHN0YXJ0UnVuOworCisgICAgLy8gU3RhbmRhcmQgInNsaWRpbmcgd2luZG93
IiBvZiAzIHBvaW50ZXJzCisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJldmlvdXMgPSBjdXJy
LT50YWtlTmV4dCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJlbnQgPSBiZWZvcmVT
dGFydCA/IGJlZm9yZVN0YXJ0LT50YWtlTmV4dCgpIDogV1RGTW92ZShtX2ZpcnN0UnVuKTsKKyAg
ICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBuZXh0ID0g
Y3VycmVudC0+dGFrZU5leHQoKTsKKyAgICAgICAgY3VycmVudC0+c2V0TmV4dChXVEZNb3ZlKHBy
ZXZpb3VzKSk7CisgICAgICAgIHByZXZpb3VzID0gV1RGTW92ZShjdXJyZW50KTsKKyAgICAgICAg
Y3VycmVudCA9IFdURk1vdmUobmV4dCk7CisgICAgfQorCisgICAgaWYgKGJlZm9yZVN0YXJ0KQor
ICAgICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2aW91cyk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0NoYXJh
Y3RlclByb3BlcnRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJQ
cm9wZXJ0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWU1NDUyMDAzMWFiNGVmNjlmM2RlMjJhZjk5ZjMwY2Jj
Y2I3NDY4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9D
aGFyYWN0ZXJQcm9wZXJ0aWVzLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
dW5pY29kZS91Y2hhci5oPgorCituYW1lc3BhY2UgUEFMIHsKKworc3RhdGljIGlubGluZSBib29s
IGlzRW1vamlHcm91cENhbmRpZGF0ZShVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyNkZWZpbmUgU1lN
Qk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURfQSAyOTgKKyNpZiBVX0lDVV9WRVJTSU9OX01B
Sk9SX05VTSA8IDY0CisjZGVmaW5lIFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRF
TkRFRF9BIFNZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EKKyNlbHNlCitzdGF0aWNf
YXNzZXJ0KFVCTE9DS19TWU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRFRF9BID09IFNZTUJP
TFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PGludD4odWJsb2NrX2dldENvZGUoY2hhcmFjdGVyKSkpIHsKKyAgICBjYXNlIFVC
TE9DS19NSVNDRUxMQU5FT1VTX1NZTUJPTFM6CisgICAgY2FzZSBVQkxPQ0tfRElOR0JBVFM6Cisg
ICAgY2FzZSBVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9QSUNUT0dSQVBIUzoKKyAg
ICBjYXNlIFVCTE9DS19FTU9USUNPTlM6CisgICAgY2FzZSBVQkxPQ0tfVFJBTlNQT1JUX0FORF9N
QVBfU1lNQk9MUzoKKyAgICBjYXNlIFVCTE9DS19TVVBQTEVNRU5UQUxfU1lNQk9MU19BTkRfUElD
VE9HUkFQSFM6CisgICAgY2FzZSBVQkxPQ0tfU1lNQk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5E
RURfQToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGlzRW1vamlGaXR6cGF0cmlj
a01vZGlmaWVyKFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIC8vIFUrMUYzRkIgLSBFTU9KSSBN
T0RJRklFUiBGSVRaUEFUUklDSyBUWVBFLTEtMgorICAgIC8vIFUrMUYzRkMgLSBFTU9KSSBNT0RJ
RklFUiBGSVRaUEFUUklDSyBUWVBFLTMKKyAgICAvLyBVKzFGM0ZEIC0gRU1PSkkgTU9ESUZJRVIg
RklUWlBBVFJJQ0sgVFlQRS00CisgICAgLy8gVSsxRjNGRSAtIEVNT0pJIE1PRElGSUVSIEZJVFpQ
QVRSSUNLIFRZUEUtNQorICAgIC8vIFUrMUYzRkYgLSBFTU9KSSBNT0RJRklFUiBGSVRaUEFUUklD
SyBUWVBFLTYKKworICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMHgxRjNGQiAmJiBjaGFyYWN0ZXIg
PD0gMHgxRjNGRjsKK30KKworaW5saW5lIGJvb2wgaXNWYXJpYXRpb25TZWxlY3RvcihVQ2hhcjMy
IGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID49IDB4RkUwMCAmJiBjaGFyYWN0
ZXIgPD0gMHhGRTBGOworfQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppS2V5Y2FwQmFzZShVQ2hhcjMy
IGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gKGNoYXJhY3RlciA+PSAnMCcgJiYgY2hhcmFjdGVy
IDw9ICc5JykgfHwgY2hhcmFjdGVyID09ICcjJyB8fCBjaGFyYWN0ZXIgPT0gJyonOworfQorCitp
bmxpbmUgYm9vbCBpc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCit7
CisgICAgcmV0dXJuIGNoYXJhY3RlciA+PSAweDFGMUU2ICYmIGNoYXJhY3RlciA8PSAweDFGMUZG
OworfQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppV2l0aFByZXNlbnRhdGlvbkJ5RGVmYXVsdChVQ2hh
cjMyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gdV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0
ZXIsIFVDSEFSX0VNT0pJX1BSRVNFTlRBVElPTik7Cit9CisKK2lubGluZSBib29sIGlzRW1vamlN
b2RpZmllckJhc2UoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIHVfaGFzQmluYXJ5
UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSV9NT0RJRklFUl9CQVNFKTsKK30KKworaW5s
aW5lIGJvb2wgaXNEZWZhdWx0SWdub3JhYmxlQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyKQor
eworICAgIHJldHVybiB1X2hhc0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfREVGQVVM
VF9JR05PUkFCTEVfQ09ERV9QT0lOVCk7Cit9CisKK2lubGluZSBib29sIGlzQ29udHJvbENoYXJh
Y3RlcihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gdV9nZXRJbnRQcm9wZXJ0eVZh
bHVlKGNoYXJhY3RlciwgVUNIQVJfR0VORVJBTF9DQVRFR09SWSkgPT0gVV9DT05UUk9MX0NIQVI7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0
ZXJSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0NoYXJhY3RlclJhbmdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzAyM2IwMWJlN2I2MjY0YzNlMmIyNWVmNjhlM2MwZmNhODY4YmIzOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9DaGFyYWN0ZXJSYW5n
ZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91
bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoRk9VTkRBVElPTikg
JiYgZGVmaW5lZChfX09CSkNfXykKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2UgeworICAg
IHVpbnQ2NF90IGxvY2F0aW9uIHsgMCB9OworICAgIHVpbnQ2NF90IGxlbmd0aCB7IDAgfTsKKwor
ICAgIENoYXJhY3RlclJhbmdlKCkgPSBkZWZhdWx0OworICAgIGNvbnN0ZXhwciBDaGFyYWN0ZXJS
YW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKTsKKworI2lmIFVTRShDRikK
KyAgICBjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2UoQ0ZSYW5nZSk7CisgICAgY29uc3RleHByIG9w
ZXJhdG9yIENGUmFuZ2UoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKEZPVU5EQVRJT04pICYm
IGRlZmluZWQoX19PQkpDX18pCisgICAgY29uc3RleHByIENoYXJhY3RlclJhbmdlKE5TUmFuZ2Up
OworICAgIGNvbnN0ZXhwciBvcGVyYXRvciBOU1JhbmdlKCkgY29uc3Q7CisjZW5kaWYKK307CisK
K2NvbnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6Q2hhcmFjdGVyUmFuZ2UodWludDY0X3QgbG9jYXRp
b24sIHVpbnQ2NF90IGxlbmd0aCkKKyAgICA6IGxvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbGVu
Z3RoKGxlbmd0aCkKK3sKK30KKworI2lmIFVTRShDRikKKworY29uc3RleHByIENoYXJhY3RlclJh
bmdlOjpDaGFyYWN0ZXJSYW5nZShDRlJhbmdlIHJhbmdlKQorICAgIDogQ2hhcmFjdGVyUmFuZ2Uo
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCkKK3sKKyAgICBBU1NFUlQocmFuZ2UubG9jYXRp
b24gIT0ga0NGTm90Rm91bmQpOworfQorCitjb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2U6Om9wZXJh
dG9yIENGUmFuZ2UoKSBjb25zdAoreworICAgIENGSW5kZXggbG9jYXRpb25DRiA9IGxvY2F0aW9u
OworICAgIENGSW5kZXggbGVuZ3RoQ0YgPSBsZW5ndGg7CisgICAgcmV0dXJuIHsgbG9jYXRpb25D
RiwgbGVuZ3RoQ0YgfTsKK30KKworI2VuZGlmCisKKyNpZiBVU0UoRk9VTkRBVElPTikgJiYgZGVm
aW5lZChfX09CSkNfXykKKworY29uc3RleHByIENoYXJhY3RlclJhbmdlOjpDaGFyYWN0ZXJSYW5n
ZShOU1JhbmdlIHJhbmdlKQorICAgIDogQ2hhcmFjdGVyUmFuZ2UgeyByYW5nZS5sb2NhdGlvbiwg
cmFuZ2UubGVuZ3RoIH0KK3sKKyAgICBBU1NFUlQocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3Vu
ZCk7Cit9CisKK2NvbnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6b3BlcmF0b3IgTlNSYW5nZSgpIGNv
bnN0Cit7CisgICAgTlNVSW50ZWdlciBsb2NhdGlvbk5TID0gbG9jYXRpb247CisgICAgTlNVSW50
ZWdlciBsZW5ndGhOUyA9IGxlbmd0aDsKKyAgICByZXR1cm4geyBsb2NhdGlvbk5TLCBsZW5ndGhO
UyB9OworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOWVjZTE1OWJj
MTYzMTI5YTAwMjYyNzY0OTFmZjZjZjBhNDAzNDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcApAQCAtMCwwICsxLDI3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRl
VGltZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCisj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdGF0aWMgY29uc3QgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZSBsb3dlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0gPSB7CisgICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZVBlcmlvZCwgLy8gYQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVJbnZhbGlkLCAvLyBiCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxvY2FsRGF5T2ZX
ZWVrU3RhbmRBbG9uLCAvLyBjCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9u
dGgsIC8vIGQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTG9jYWxEYXlPZldlZWssIC8v
IGUKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gZgorICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVNb2RpZmllZEp1bGlhbkRheSwgLy8gZworICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVIb3VyMTIsIC8vIGgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSW52YWxpZCwgLy8gaQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAv
LyBqCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNCwgLy8gaworICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBsCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZU1pbnV0ZSwgLy8gbQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlk
LCAvLyBuCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIG8KKyAgICBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gcAorICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVRdWF0ZXJTdGFuZEFsb25lLCAvLyBxCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUludmFsaWQsIC8vIHIKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25k
LCAvLyBzCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIHQKKyAgICBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXh0ZW5kZWRZZWFyLCAvLyB1CisgICAgRGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZU5vbkxvY2F0aW9uWm9uZSwgLy8gdgorICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVXZWVrT2ZZZWFyLCAvLyB3CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUludmFsaWQsIC8vIHgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhciwgLy8geQor
ICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVab25lLCAvLyB6Cit9OworCitzdGF0aWMgY29u
c3QgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSB1cHBlckNhc2VUb0ZpZWxkVHlwZU1hcFsyNl0g
PSB7CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5LCAvLyBB
CisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIEIKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gQworICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVEYXlPZlllYXIsIC8vIEQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZX
ZWVrLCAvLyBFCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mV2Vla0luTW9udGgs
IC8vIEYKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRXJhLCAvLyBHCisgICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMywgLy8gSAorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCAvLyBJCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IC8vIEoKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExLCAvLyBLCisgICAgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9uZSwgLy8gTAorICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVNb250aCwgLy8gTQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVJbnZhbGlkLCAvLyBOCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8v
IE8KKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gUAorICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVRdWF0ZXIsIC8vIFEKKyAgICBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlSW52YWxpZCwgLy8gUgorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVGcmFjdGlv
bmFsU2Vjb25kLCAvLyBTCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8v
IFQKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gVQorICAgIERhdGVU
aW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBWCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZVdlZWtPZk1vbnRoLCAvLyBXCisgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUlu
dmFsaWQsIC8vIFgKKyAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhck9mV2Vla09mWWVh
ciwgLy8gWQorICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVSRkM4MjJab25lLCAvLyBaCit9
OworCitzdGF0aWMgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBtYXBDaGFyYWN0ZXJUb0ZpZWxk
VHlwZShjb25zdCBVQ2hhciBjaCkKK3sKKyAgICBpZiAoaXNBU0NJSVVwcGVyKGNoKSkKKyAgICAg
ICAgcmV0dXJuIHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwW2NoIC0gJ0EnXTsKKworICAgIGlmIChp
c0FTQ0lJTG93ZXIoY2gpKQorICAgICAgICByZXR1cm4gbG93ZXJDYXNlVG9GaWVsZFR5cGVNYXBb
Y2ggLSAnYSddOworCisgICAgcmV0dXJuIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMaXRlcmFs
OworfQorCitib29sIERhdGVUaW1lRm9ybWF0OjpwYXJzZShjb25zdCBTdHJpbmcmIHNvdXJjZSwg
VG9rZW5IYW5kbGVyJiB0b2tlbkhhbmRsZXIpCit7CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAg
IFN0YXRlSW5RdW90ZSwKKyAgICAgICAgU3RhdGVJblF1b3RlUXVvdGUsCisgICAgICAgIFN0YXRl
TGl0ZXJhbCwKKyAgICAgICAgU3RhdGVRdW90ZSwKKyAgICAgICAgU3RhdGVTeW1ib2wsCisgICAg
fSBzdGF0ZSA9IFN0YXRlTGl0ZXJhbDsKKworICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUgPSBGaWVs
ZFR5cGVMaXRlcmFsOworICAgIFN0cmluZ0J1aWxkZXIgbGl0ZXJhbEJ1ZmZlcjsKKyAgICBpbnQg
ZmllbGRDb3VudGVyID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IHNvdXJjZS5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBVQ2hhciBjaCA9IHNv
dXJjZVtpbmRleF07CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0
ZUluUXVvdGU6CisgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAg
IHN0YXRlID0gU3RhdGVJblF1b3RlUXVvdGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5kKGNoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3RhdGVJblF1b3RlUXVvdGU6CisgICAgICAg
ICAgICBpZiAoY2ggPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBw
ZW5kKCdcJycpOworICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVJblF1b3RlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWVsZFR5cGUg
PSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7CisgICAgICAgICAgICBpZiAoZmllbGRUeXBl
ID09IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZUxpdGVyYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVT
eW1ib2w7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN0YXRlTGl0ZXJhbDoK
KyAgICAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZVF1b3RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmaWVsZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7CisgICAgICAg
ICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUludmFsaWQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxp
dGVyYWwpIHsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsaXRl
cmFsQnVmZmVyLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0
TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGxpdGVy
YWxCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmllbGRDb3Vu
dGVyID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTeW1ib2w7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFN0YXRlUXVvdGU6CisgICAgICAgICAgICBsaXRlcmFsQnVm
ZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICBzdGF0ZSA9IGNoID09ICdcJycgPyBTdGF0ZUxp
dGVyYWwgOiBTdGF0ZUluUXVvdGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFN0YXRlU3ltYm9sOiB7CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlw
ZUludmFsaWQpOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRl
cmFsKTsKKyAgICAgICAgICAgIEFTU0VSVChsaXRlcmFsQnVmZmVyLmlzRW1wdHkoKSk7CisKKyAg
ICAgICAgICAgIEZpZWxkVHlwZSBmaWVsZFR5cGUyID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUo
Y2gpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZTIgPT0gRmllbGRUeXBlSW52YWxpZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUg
PT0gZmllbGRUeXBlMikgeworICAgICAgICAgICAgICAgICsrZmllbGRDb3VudGVyOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbkhhbmRs
ZXIudmlzaXRGaWVsZChmaWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisKKyAgICAgICAgICAgIGlm
IChmaWVsZFR5cGUyID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gJ1wnJykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVF1b3RlOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFw
cGVuZChjaCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIGZpZWxkVHlwZSA9IGZp
ZWxkVHlwZTI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKKworICAgIHN3
aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlTGl0ZXJhbDoKKyAgICBjYXNlIFN0YXRlSW5R
dW90ZVF1b3RlOgorICAgICAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIHRva2VuSGFuZGxlci52aXNpdExpdGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFN0YXRlUXVvdGU6CisgICAgY2FzZSBT
dGF0ZUluUXVvdGU6CisgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKQorICAgICAg
ICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIFN0YXRlU3ltYm9sOgorICAgICAg
ICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUxpdGVyYWwpOworICAgICAgICBBU1NFUlQo
IWxpdGVyYWxCdWZmZXIubGVuZ3RoKCkpOworICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRGaWVs
ZChmaWVsZFR5cGUsIGZpZWxkQ291bnRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaXNBU0NJSUFscGhhYmV0T3JRdW90ZShVQ2hhciBjaCkKK3sKKyAgICByZXR1cm4g
aXNBU0NJSUFscGhhKGNoKSB8fCBjaCA9PSAnXCcnOworfQorCit2b2lkIERhdGVUaW1lRm9ybWF0
OjpxdW90ZUFuZEFwcGVuZExpdGVyYWwoY29uc3QgU3RyaW5nJiBsaXRlcmFsLCBTdHJpbmdCdWls
ZGVyJiBidWZmZXIpCit7CisgICAgaWYgKGxpdGVyYWwubGVuZ3RoKCkgPD0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGxpdGVyYWwuZmluZChpc0FTQ0lJQWxwaGFiZXRPclF1b3RlKSA9
PSBub3RGb3VuZCkgeworICAgICAgICBidWZmZXIuYXBwZW5kKGxpdGVyYWwpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGxpdGVyYWwuZmluZCgnXCcnKSA9PSBub3RGb3VuZCkg
eworICAgICAgICBidWZmZXIuYXBwZW5kKCdcJycsIGxpdGVyYWwsICdcJycpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpdGVyYWwubGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAobGl0ZXJhbFtpXSA9PSAnXCcnKQorICAgICAgICAg
ICAgYnVmZmVyLmFwcGVuZCgiJyciKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBidWZm
ZXIuYXBwZW5kKCdcJycsIFN0cmluZyB7IGxpdGVyYWwuc3Vic3RyaW5nKGkpIH0ucmVwbGFjZSgn
XCcnLCAiJyciKSwgJ1wnJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5oIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC90ZXh0L0RhdGVUaW1lRm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQwOTdjMGY4Zjc3OTUyM2U4
YjExOTg0MzM1MzIxZGExMjg1NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9EYXRlVGltZUZvcm1hdC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREFURV9BTkRfVElNRV9JTlBV
VF9UWVBFUykKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKwor
Ly8gRGF0ZVRpbWVGb3JtYXQgcGFyc2VzIGRhdGUgdGltZSBmb3JtYXQgZGVmaW5lZCBpbiBVbmlj
b2RlIFRlY2huaWNhbAorLy8gc3RhbmRhcmQgMzUsIExvY2FsZSBEYXRhIE1hcmt1cCBMYW5ndWFn
ZSAoTERNTClbMV0uCisvLyBbMV0gTERNTCBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjM1
L3RyMzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5zCitjbGFzcyBEYXRlVGltZUZvcm1hdCB7
CitwdWJsaWM6CisgICAgZW51bSBGaWVsZFR5cGUgeworICAgICAgICBGaWVsZFR5cGVJbnZhbGlk
LAorICAgICAgICBGaWVsZFR5cGVMaXRlcmFsLAorCisgICAgICAgIC8vIEVyYTogQUQKKyAgICAg
ICAgRmllbGRUeXBlRXJhID0gJ0cnLAorCisgICAgICAgIC8vIFllYXI6IDE5OTYKKyAgICAgICAg
RmllbGRUeXBlWWVhciA9ICd5JywKKyAgICAgICAgRmllbGRUeXBlWWVhck9mV2Vla09mWWVhciA9
ICdZJywKKyAgICAgICAgRmllbGRUeXBlRXh0ZW5kZWRZZWFyID0gJ3UnLAorCisgICAgICAgIC8v
IFF1YXRlcjogUTIKKyAgICAgICAgRmllbGRUeXBlUXVhdGVyID0gJ1EnLAorICAgICAgICBGaWVs
ZFR5cGVRdWF0ZXJTdGFuZEFsb25lID0gJ3EnLAorCisgICAgICAgIC8vIE1vbnRoOiBTZXB0ZW1i
ZXIKKyAgICAgICAgRmllbGRUeXBlTW9udGggPSAnTScsCisgICAgICAgIEZpZWxkVHlwZU1vbnRo
U3RhbmRBbG9uZSA9ICdMJywKKworICAgICAgICAvLyBXZWVrOiA0MgorICAgICAgICBGaWVsZFR5
cGVXZWVrT2ZZZWFyID0gJ3cnLAorICAgICAgICBGaWVsZFR5cGVXZWVrT2ZNb250aCA9ICdXJywK
KworICAgICAgICAvLyBEYXk6IDEyCisgICAgICAgIEZpZWxkVHlwZURheU9mTW9udGggPSAnZCcs
CisgICAgICAgIEZpZWxkVHlwZURheU9mWWVhciA9ICdEJywKKyAgICAgICAgRmllbGRUeXBlRGF5
T2ZXZWVrSW5Nb250aCA9ICdGJywKKyAgICAgICAgRmllbGRUeXBlTW9kaWZpZWRKdWxpYW5EYXkg
PSAnZycsCisKKyAgICAgICAgLy8gV2VlayBEYXk6IFR1ZXNkYXkKKyAgICAgICAgRmllbGRUeXBl
RGF5T2ZXZWVrID0gJ0UnLAorICAgICAgICBGaWVsZFR5cGVMb2NhbERheU9mV2VlayA9ICdlJywK
KyAgICAgICAgRmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFsb24gPSAnYycsCisKKyAgICAg
ICAgLy8gUGVyaW9kOiBBTSBvciBQTQorICAgICAgICBGaWVsZFR5cGVQZXJpb2QgPSAnYScsCisK
KyAgICAgICAgLy8gSG91cjogNworICAgICAgICBGaWVsZFR5cGVIb3VyMTIgPSAnaCcsCisgICAg
ICAgIEZpZWxkVHlwZUhvdXIyMyA9ICdIJywKKyAgICAgICAgRmllbGRUeXBlSG91cjExID0gJ0sn
LAorICAgICAgICBGaWVsZFR5cGVIb3VyMjQgPSAnaycsCisKKyAgICAgICAgLy8gTWludXRlOiA1
OQorICAgICAgICBGaWVsZFR5cGVNaW51dGUgPSAnbScsCisKKyAgICAgICAgLy8gU2Vjb25kOiAx
MgorICAgICAgICBGaWVsZFR5cGVTZWNvbmQgPSAncycsCisgICAgICAgIEZpZWxkVHlwZUZyYWN0
aW9uYWxTZWNvbmQgPSAnUycsCisgICAgICAgIEZpZWxkVHlwZU1pbGxpc2Vjb25kc0luRGF5ID0g
J0EnLAorCisgICAgICAgIC8vIFpvbmU6IFBEVAorICAgICAgICBGaWVsZFR5cGVab25lID0gJ3on
LAorICAgICAgICBGaWVsZFR5cGVSRkM4MjJab25lID0gJ1onLAorICAgICAgICBGaWVsZFR5cGVO
b25Mb2NhdGlvblpvbmUgPSAndicsCisgICAgfTsKKworICAgIGNsYXNzIFRva2VuSGFuZGxlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Ub2tlbkhhbmRsZXIoKSA9IGRlZmF1bHQ7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdEZpZWxkKEZpZWxkVHlwZSwgaW50IG51bWJlck9m
UGF0dGVybkNoYXJhY3RlcnMpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0TGl0ZXJh
bChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgfTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZWVkZWQsIGZhbHNlIGlmIGZhaWxlZC4KKyAgICBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBT
dHJpbmcmLCBUb2tlbkhhbmRsZXImKTsKKyAgICBzdGF0aWMgdm9pZCBxdW90ZUFuZEFwcGVuZExp
dGVyYWwoY29uc3QgU3RyaW5nJiwgU3RyaW5nQnVpbGRlciYpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0
L0ZvbnRSZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvRm9udFJl
bmRlcmluZ01vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTQxMjI0YWFmNmUwOGQ4NmM0ZDNjYzBjNGYxYzE2
ZmE4MjE0ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0
L0ZvbnRSZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KKworbmFtZXNwYWNlIFBBTCB7
CisKKy8vIFRoaXMgc2V0dGluZyBpcyB1c2VkIHRvIHByb3ZpZGUgd2F5cyBvZiBzd2l0Y2hpbmcg
YmV0d2VlbiBtdWx0aXBsZSByZW5kZXJpbmcgbW9kZXMgdGhhdCBtYXkgaGF2ZSBkaWZmZXJlbnQK
Ky8vIG1ldHJpY3MuIEl0IGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0
IG9uIFdpbmRvd3MuCitlbnVtIGNsYXNzIEZvbnRSZW5kZXJpbmdNb2RlIDogdWludDhfdCB7Cisg
ICAgTm9ybWFsLAorICAgIEFsdGVybmF0ZQorfTsKKworfQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRSZW5kZXJpbmdNb2RlPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgUEFMOjpGb250UmVuZGVyaW5n
TW9kZSwKKyAgICAgICAgUEFMOjpGb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsLAorICAgICAgICBQ
QUw6OkZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUKKyAgICA+OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvSHlwaGVu
YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9IeXBoZW5hdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQwMzMwOTQ4NGY0ZjI1OTliNDdiYzJmODc4YzUxNjMzYWQ4ZDIxYjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvSHlwaGVuYXRpb24uaApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx1bmlj
b2RlL3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBQQUwg
eworCitpbmxpbmUgc3RhdGljIGJvb2wgZW5vdWdoV2lkdGhGb3JIeXBoZW5hdGlvbihmbG9hdCBh
dmFpbGFibGVXaWR0aCwgZmxvYXQgZm9udFBpeGVsU2l6ZSkKK3sKKyAgICAvLyBJZiB0aGUgbWF4
aW11bSB3aWR0aCBhdmFpbGFibGUgZm9yIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBoeXBoZW4gaXMg
c21hbGwsIHRoZW4gaXQgaXMgdmVyeSB1bmxpa2VseQorICAgIC8vIHRoYXQgYW4gaHlwaGVuYXRp
b24gb3Bwb3J0dW5pdHkgZXhpc3RzLCBzbyBkbyBub3QgYm90aGVyIHRvIGxvb2sgZm9yIGl0Lgor
ICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCA+IGZvbnRQaXhlbFNpemUgKiA1IC8gNDsKKworfQor
Ym9vbCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Citz
aXplX3QgbGFzdEh5cGhlbkxvY2F0aW9uKFN0cmluZ1ZpZXcsIHNpemVfdCBiZWZvcmVJbmRleCwg
Y29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CisKK30gLy8gbmFtZXNwYWNlIFBB
TApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvUXVvdGVkUHJpbnRhYmxlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mM2ZjZjI0ZDBkNWQyYzRlNjNiNjFmN2Y0NThlMzA3YjVhYTlhNWUwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJs
ZS5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXVv
dGVkUHJpbnRhYmxlLmgiCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK3N0YXRpYyBjb25zdCBzaXplX3Qg
bWF4aW11bUxpbmVMZW5ndGggPSA3NjsKKworc3RhdGljIGNvbnN0IGNoYXIgY3JsZkxpbmVFbmRp
bmdbXSA9ICJcclxuIjsKKworc3RhdGljIHNpemVfdCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4
KGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgaW5wdXRMZW5ndGgsIHNpemVfdCBpbmRleCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwg
aW5wdXRMZW5ndGgpOworICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xuJykKKyAgICAgICAgcmV0
dXJuIDE7IC8vIFNpbmdsZSBMRi4KKworICAgIGlmIChpbnB1dFtpbmRleF0gPT0gJ1xyJykgewor
ICAgICAgICBpZiAoKGluZGV4ICsgMSkgPT0gaW5wdXRMZW5ndGggfHwgaW5wdXRbaW5kZXggKyAx
XSAhPSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8vIFNpbmdsZSBDUiAoQ2xhc3NpYyBN
YWMgT1MpLgorICAgICAgICByZXR1cm4gMjsgLy8gQ1ItTEYuCisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVFbmNvZGUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRW5jb2Rl
KGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IHF1b3Rl
ZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1dCwgc2l6ZV90IGlucHV0TGVuZ3Ro
KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7CisgICAgb3V0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW5wdXRMZW5ndGgpOworICAgIHNpemVfdCBjdXJyZW50TGluZUxlbmd0aCA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7CisgICAgICAgIGJv
b2wgaXNMYXN0Q2hhcmFjdGVyID0gKGkgPT0gaW5wdXRMZW5ndGggLSAxKTsKKyAgICAgICAgdWlu
dDhfdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07CisgICAgICAgIGJvb2wgcmVxdWlyZXNF
bmNvZGluZyA9IGZhbHNlOworICAgICAgICAvLyBBbGwgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFy
YWN0ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCisgICAgICAgIGlmICgoY3VycmVudENoYXJh
Y3RlciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34nIHx8IGN1cnJlbnRDaGFyYWN0ZXIg
PT0gJz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcpCisgICAgICAgICAgICByZXF1aXJl
c0VuY29kaW5nID0gdHJ1ZTsKKworICAgICAgICAvLyBTcGFjZSBhbmQgdGFiIGNoYXJhY3RlcnMg
aGF2ZSB0byBiZSBlbmNvZGVkIGlmIHRoZXkgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgor
ICAgICAgICBpZiAoIXJlcXVpcmVzRW5jb2RpbmcgJiYgKGN1cnJlbnRDaGFyYWN0ZXIgPT0gJ1x0
JyB8fCBjdXJyZW50Q2hhcmFjdGVyID09ICcgJykgJiYgKGlzTGFzdENoYXJhY3RlciB8fCBsZW5n
dGhPZkxpbmVFbmRpbmdBdEluZGV4KGlucHV0LCBpbnB1dExlbmd0aCwgaSArIDEpKSkKKyAgICAg
ICAgICAgIHJlcXVpcmVzRW5jb2RpbmcgPSB0cnVlOworCisgICAgICAgIC8vIEVuZCBvZiBsaW5l
IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gQ1ItTEYgc2VxdWVuY2VzLgorICAgICAgICBpZiAoIWlz
TGFzdENoYXJhY3RlcikgeworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aE9mTGluZUVuZGluZyA9
IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoaW5wdXQsIGlucHV0TGVuZ3RoLCBpKTsKKyAgICAg
ICAgICAgIGlmIChsZW5ndGhPZkxpbmVFbmRpbmcpIHsKKyAgICAgICAgICAgICAgICBvdXQuYXBw
ZW5kKGNybGZMaW5lRW5kaW5nLCBzdHJsZW4oY3JsZkxpbmVFbmRpbmcpKTsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50TGluZUxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgaSArPSAobGVuZ3Ro
T2ZMaW5lRW5kaW5nIC0gMSk7IC8vIC0xIGJlY2F1c2Ugd2UnbGwgKysgaW4gdGhlIGZvcigpIGFi
b3ZlLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgc2l6ZV90IGxlbmd0aE9mRW5jb2RlZENoYXJhY3RlciA9IDE7CisgICAgICAg
IGlmIChyZXF1aXJlc0VuY29kaW5nKQorICAgICAgICAgICAgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFj
dGVyICs9IDI7CisgICAgICAgIGlmICghaXNMYXN0Q2hhcmFjdGVyKQorICAgICAgICAgICAgbGVu
Z3RoT2ZFbmNvZGVkQ2hhcmFjdGVyICs9IDE7IC8vICsgMSBmb3IgdGhlID0gKHNvZnQgbGluZSBi
cmVhaykuCisKKyAgICAgICAgLy8gSW5zZXJ0IGEgc29mdCBsaW5lIGJyZWFrIGlmIG5lY2Vzc2Fy
eS4KKyAgICAgICAgaWYgKGN1cnJlbnRMaW5lTGVuZ3RoICsgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFj
dGVyID4gbWF4aW11bUxpbmVMZW5ndGgpIHsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoJz0nKTsK
KyAgICAgICAgICAgIG91dC5hcHBlbmQoY3JsZkxpbmVFbmRpbmcsIHN0cmxlbihjcmxmTGluZUVu
ZGluZykpOworICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGggPSAwOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRmluYWxseSwgaW5zZXJ0IHRoZSBhY3R1YWwgY2hhcmFjdGVyKHMpLgorICAg
ICAgICBpZiAocmVxdWlyZXNFbmNvZGluZykgeworICAgICAgICAgICAgb3V0LmFwcGVuZCgnPScp
OworICAgICAgICAgICAgb3V0LmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjdXJy
ZW50Q2hhcmFjdGVyKSk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJ
SUhleERpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGN1cnJlbnRMaW5lTGVu
Z3RoICs9IDM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGN1cnJl
bnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgY3VycmVudExpbmVMZW5ndGgrKzsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBvdXQ7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQ
cmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKK3sKKyAgICByZXR1
cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gb3V0OworICAg
IGlmICghZGF0YUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG91dDsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7CisgICAgICAgIGNoYXIgY3VycmVudENoYXJh
Y3RlciA9IGRhdGFbaV07CisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICE9ICc9Jykgewor
ICAgICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGFyZSBkZWFsaW5nIHdpdGggYSAnPXh4
JyBzZXF1ZW5jZS4KKyAgICAgICAgaWYgKGRhdGFMZW5ndGggLSBpIDwgMykgeworICAgICAgICAg
ICAgLy8gVW5maW5pc2hlZCA9IHNlcXVlbmNlLCBhcHBlbmQgYXMgaXMuCisgICAgICAgICAgICBv
dXQuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgY2hhciB1cHBlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKKyAgICAgICAg
Y2hhciBsb3dlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKKyAgICAgICAgaWYgKHVwcGVyQ2hhcmFj
dGVyID09ICdccicgJiYgbG93ZXJDaGFyYWN0ZXIgPT0gJ1xuJykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KHVwcGVyQ2hhcmFjdGVyKSB8fCAh
aXNBU0NJSUhleERpZ2l0KGxvd2VyQ2hhcmFjdGVyKSkgeworICAgICAgICAgICAgLy8gSW52YWxp
ZCBzZXF1ZW5jZSwgPSBmb2xsb3dlZCBieSBub24gaGV4IGRpZ2l0cywganVzdCBpbnNlcnQgdGhl
IGNoYXJhY3RlcnMgYXMgaXMuCisgICAgICAgICAgICBvdXQuYXBwZW5kKCc9Jyk7CisgICAgICAg
ICAgICBvdXQuYXBwZW5kKHVwcGVyQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQo
bG93ZXJDaGFyYWN0ZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgb3V0LmFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUodXBwZXJDaGFyYWN0ZXIsIGxvd2VyQ2hhcmFj
dGVyKSk7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9RdW90ZWRQcmludGFibGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9RdW90ZWRQcmludGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjFiYTUzMDQxMTIx
MzdjZDc3NWZhOTJiODFlNDAxMGQ3MzNhODZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC90ZXh0L1F1b3RlZFByaW50YWJsZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBQQUwgewor
CitWZWN0b3I8dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50
OF90Kiwgc2l6ZV90KTsKKworVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShj
b25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVE
ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNTQ2YzJiMzIyNDU4NzFhYWRkOWM3MTJjZWY0MDJhMjY1OWMxMDQyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAK
QEAgLTAsMCArMSwyNzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KKworbmFtZXNwYWNlIFBB
TCB7CisKK2lubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjphcHBlbmRUbyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAoreworICAgIGJ1aWxkZXIuYXBwZW5kU3Vic3Ry
aW5nKHN0cmluZywgc3RyaW5nLmxlbmd0aCgpIC0gbGVuZ3RoLCBsZW5ndGgpOworfQorCitTZWdt
ZW50ZWRTdHJpbmcmIFNlZ21lbnRlZFN0cmluZzo6b3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYm
IG90aGVyKQoreworICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUob3RoZXIubV9jdXJy
ZW50U3Vic3RyaW5nKTsKKyAgICBtX290aGVyU3Vic3RyaW5ncyA9IFdURk1vdmUob3RoZXIubV9v
dGhlclN1YnN0cmluZ3MpOworCisgICAgbV9pc0Nsb3NlZCA9IG90aGVyLm1faXNDbG9zZWQ7CisK
KyAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBvdGhlci5tX2N1cnJlbnRDaGFyYWN0ZXI7CisKKyAg
ICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgPSBv
dGhlci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmc7
CisgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG90
aGVyLm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7CisgICAg
bV9jdXJyZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CisKKyAgICBtX2Zhc3RQYXRoRmxh
Z3MgPSBvdGhlci5tX2Zhc3RQYXRoRmxhZ3M7CisgICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0aW5n
TGluZU51bWJlckZ1bmN0aW9uID0gb3RoZXIubV9hZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51
bWJlckZ1bmN0aW9uOworICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9
IG90aGVyLm1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbjsKKworICAgIG90aGVy
LmNsZWFyKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3Vuc2lnbmVkIFNlZ21lbnRlZFN0
cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2N1cnJlbnRT
dWJzdHJpbmcubGVuZ3RoOworICAgIGZvciAoYXV0byYgc3Vic3RyaW5nIDogbV9vdGhlclN1YnN0
cmluZ3MpCisgICAgICAgIGxlbmd0aCArPSBzdWJzdHJpbmcubGVuZ3RoOworICAgIHJldHVybiBs
ZW5ndGg7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMo
KQoreworICAgIGlmICghbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJz
KQorICAgICAgICByZXR1cm47CisgICAgbV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxp
bmVOdW1iZXJzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vi
c3RyaW5ncykKKyAgICAgICAgc3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzID0gZmFs
c2U7CisgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKK30KKwordm9pZCBTZWdt
ZW50ZWRTdHJpbmc6OmNsZWFyKCkKK3sKKyAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0g
MDsKKyAgICBtX290aGVyU3Vic3RyaW5ncy5jbGVhcigpOworCisgICAgbV9pc0Nsb3NlZCA9IGZh
bHNlOworCisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gMDsKKworICAgIG1fbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyA9IDA7CisgICAgbV9udW1iZXJP
ZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IDA7CisgICAgbV9jdXJyZW50
TGluZSA9IDA7CisKKyAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3Ry
aW5nKCk7Cit9CisKK2lubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kU3Vic3RyaW5n
KFN1YnN0cmluZyYmIHN1YnN0cmluZykKK3sKKyAgICBBU1NFUlQoIW1faXNDbG9zZWQpOworICAg
IGlmICghc3Vic3RyaW5nLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJl
bnRTdWJzdHJpbmcubGVuZ3RoKQorICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RG
TW92ZShzdWJzdHJpbmcpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9udW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5u
dW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOworICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcg
PSBXVEZNb3ZlKHN1YnN0cmluZyk7CisgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3Vy
cmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVwZGF0ZUFkdmFuY2VG
dW5jdGlvblBvaW50ZXJzKCk7CisgICAgfQorfQorCit2b2lkIFNlZ21lbnRlZFN0cmluZzo6cHVz
aEJhY2soU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBhIHN1YnN0
cmluZyBmb3IgYW4gZW1wdHkgc3RyaW5nLgorICAgIEFTU0VSVChzdHJpbmcubGVuZ3RoKCkpOwor
CisgICAgLy8gVGhlIG5ldyBzdWJzdHJpbmcgd2Ugd2lsbCBjcmVhdGUgd29uJ3QgaGF2ZSB0aGUg
ZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgLy8gVGhhdCB3
YXMgbG9zdCB3aGVuIHRoZSBjaGFyYWN0ZXJzIHdlcmUgY29uc3VtZWQgYmVmb3JlIHB1c2hpbmcg
dGhlbSBiYWNrLiBCdXQgdGhpcyBkb2VzCisgICAgLy8gbm90IG1hdHRlciwgYmVjYXVzZSBjbGll
bnRzIG5ldmVyIHVzZSB0aGlzIGZvciBuZXdsaW5lcy4gQ2F0Y2ggdGhhdCB3aXRoIHRoaXMgYXNz
ZXJ0aW9uLgorICAgIEFTU0VSVCghc3RyaW5nLmNvbnRhaW5zKCdcbicpKTsKKworICAgIC8vIFRo
ZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgbXVzdCBiZSBwcmV2aW91c2x5IGNvbnN1bWVkIGNo
YXJhY3RlcnMgZnJvbSB0aGlzIHNlZ21lbnRlZCBzdHJpbmcuCisgICAgQVNTRVJUKHN0cmluZy5s
ZW5ndGgoKSA8PSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpKTsKKworICAgIG1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyArPSBtX2N1cnJlbnRT
dWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICBpZiAobV9jdXJyZW50
U3Vic3RyaW5nLmxlbmd0aCkKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MucHJlcGVuZChXVEZN
b3ZlKG1fY3VycmVudFN1YnN0cmluZykpOworICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1v
dmUoc3RyaW5nKTsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRTdWJzdHJpbmcgLT0gbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aDsKKyAgICBtX2N1cnJlbnRD
aGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOworICAgIHVw
ZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5n
OjpjbG9zZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKKyAgICBtX2lzQ2xvc2VkID0g
dHJ1ZTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZChjb25zdCBTZWdtZW50ZWRT
dHJpbmcmIHN0cmluZykKK3sKKyAgICBhcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5nIHsgc3RyaW5n
Lm1fY3VycmVudFN1YnN0cmluZyB9KTsKKyAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmlu
Zy5tX290aGVyU3Vic3RyaW5ncykKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKHN1
YnN0cmluZyk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU2VnbWVudGVkU3Ry
aW5nJiYgc3RyaW5nKQoreworICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZy5tX2N1
cnJlbnRTdWJzdHJpbmcpKTsKKyAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IHN0cmluZy5tX290
aGVyU3Vic3RyaW5ncykKKyAgICAgICAgbV9vdGhlclN1YnN0cmluZ3MuYXBwZW5kKFdURk1vdmUo
c3Vic3RyaW5nKSk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmQoU3RyaW5nJiYg
c3RyaW5nKQoreworICAgIGFwcGVuZFN1YnN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCit2
b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IGFwcGVuZFN1YnN0cmluZyhTdHJpbmcgeyBzdHJpbmcgfSk7Cit9CisKK1N0cmluZyBTZWdtZW50
ZWRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
KyAgICBtX2N1cnJlbnRTdWJzdHJpbmcuYXBwZW5kVG8ocmVzdWx0KTsKKyAgICBmb3IgKGF1dG8m
IHN1YnN0cmluZyA6IG1fb3RoZXJTdWJzdHJpbmdzKQorICAgICAgICBzdWJzdHJpbmcuYXBwZW5k
VG8ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCkKK3sKKyAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJh
Y3RlcjE2OworICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7Cit9CisKK3ZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2KCkKK3sKKyAgICBBU1NFUlQo
bV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKTsKKyAgICBwcm9jZXNz
UG9zc2libGVOZXdsaW5lKCk7CisgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJyZW50
U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIxNjsKKyAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0
aCgpOworfQorCitpbmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xl
Q2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpCit7CisgICAgQVNT
RVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSk7CisgICAgaWYgKG1fb3RoZXJTdWJz
dHJpbmdzLmlzRW1wdHkoKSkgeworICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID0g
MDsKKyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gMDsKKyAgICAgICAgdXBkYXRlQWR2YW5j
ZUZ1bmN0aW9uUG9pbnRlcnNGb3JFbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmlu
ZyArPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAg
ICBtX2N1cnJlbnRTdWJzdHJpbmcgPSBtX290aGVyU3Vic3RyaW5ncy50YWtlRmlyc3QoKTsKKyAg
ICAvLyBJZiB3ZSd2ZSBwcmV2aW91c2x5IGNvbnN1bWVkIHNvbWUgY2hhcmFjdGVycyBvZiB0aGUg
bm9uLWN1cnJlbnQgc3RyaW5nLCB3ZSBub3cgYWNjb3VudCBmb3IgdGhvc2UKKyAgICAvLyBjaGFy
YWN0ZXJzIGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLCBub3QgYXMgcGFydCBvZiAicHJp
b3IgdG8gY3VycmVudCBzdHJpbmcuIgorICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudFN1YnN0cmluZyAtPSBtX2N1cnJlbnRTdWJzdHJpbmcubnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKTsKKyAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJz
dHJpbmcuY3VycmVudENoYXJhY3RlcigpOworICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50
ZXJzKCk7Cit9CisKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJh
Y3RlclN1YnN0cmluZygpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgg
PT0gMSk7CisgICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVt
YmVycyk7CisgICAgcHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpOworICAgIGFkdmFuY2VQYXN0U2lu
Z2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOworfQorCit2
b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5KCkKK3sKKyAgICBBU1NFUlQoIW1fY3Vy
cmVudFN1YnN0cmluZy5sZW5ndGgpOworICAgIEFTU0VSVChtX290aGVyU3Vic3RyaW5ncy5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Q2hhcmFjdGVyKTsKK30KKwordm9pZCBTZWdt
ZW50ZWRTdHJpbmc6OnVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFj
dGVyU3Vic3RyaW5nKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9
PSAxKTsKKyAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOworICAgIG1fYWR2YW5jZVdp
dGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjsK
KyAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQorICAg
ICAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3Ry
aW5nOjphZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZzsKKyAgICBlbHNlCisgICAg
ICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJp
bmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nV2l0aG91dFVwZGF0aW5nTGlu
ZU51bWJlcjsKK30KKworT3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCht
X2N1cnJlbnRMaW5lKTsKK30KKworT3JkaW5hbE51bWJlciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJl
bnRDb2x1bW4oKSBjb25zdAoreworICAgIHJldHVybiBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgLSBtX251bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lKTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6
OnNldEN1cnJlbnRQb3NpdGlvbihPcmRpbmFsTnVtYmVyIGxpbmUsIE9yZGluYWxOdW1iZXIgY29s
dW1uQWZ0cmVQcm9sb2csIGludCBwcm9sb2dMZW5ndGgpCit7CisgICAgbV9jdXJyZW50TGluZSA9
IGxpbmUuemVyb0Jhc2VkSW50KCk7CisgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFBy
aW9yVG9DdXJyZW50TGluZSA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgKyBwcm9sb2dM
ZW5ndGggLSBjb2x1bW5BZnRyZVByb2xvZy56ZXJvQmFzZWRJbnQoKTsKK30KKworU2VnbWVudGVk
U3RyaW5nOjpBZHZhbmNlUGFzdFJlc3VsdCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2xv
d0Nhc2UoY29uc3QgY2hhciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Up
Cit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aCA9IDEwOworICAgIEFTU0VSVCgh
c3RyY2hyKGxpdGVyYWwsICdcbicpKTsKKyAgICBhdXRvIGxlbmd0aCA9IHN0cmxlbihsaXRlcmFs
KTsKKyAgICBBU1NFUlQobGVuZ3RoIDw9IG1heExlbmd0aCk7CisgICAgaWYgKGxlbmd0aCA+IHRo
aXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gTm90RW5vdWdoQ2hhcmFjdGVyczsKKyAgICBV
Q2hhciBjb25zdW1lZENoYXJhY3RlcnNbbWF4TGVuZ3RoXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2N1cnJl
bnRDaGFyYWN0ZXI7CisgICAgICAgIGlmIChjaGFyYWN0ZXJNaXNtYXRjaChjaGFyYWN0ZXIsIGxp
dGVyYWxbaV0sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkpIHsKKyAgICAgICAgICAgIGlmIChp
KQorICAgICAgICAgICAgICAgIHB1c2hCYWNrKFN0cmluZyB7IGNvbnN1bWVkQ2hhcmFjdGVycywg
aSB9KTsKKyAgICAgICAgICAgIHJldHVybiBEaWROb3RNYXRjaDsKKyAgICAgICAgfQorICAgICAg
ICBhZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKKyAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzW2ld
ID0gY2hhcmFjdGVyOworICAgIH0KKyAgICByZXR1cm4gRGlkTWF0Y2g7Cit9CisKK3ZvaWQgU2Vn
bWVudGVkU3RyaW5nOjp1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5n
KCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGgpOworICAgIEFTU0VS
VChtX290aGVyU3Vic3RyaW5ncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9jdXJyZW50Q2hh
cmFjdGVyKTsKKyAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOworICAgIG1fYWR2YW5j
ZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFk
dmFuY2VFbXB0eTsKKyAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAm
U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlRW1wdHk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTIzMDgxYTI5MTY1
MGFjNzU0YTU1NTE2M2ZiYWNkMmM4OTY5Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCkBAIC0wLDAgKzEsMzIzIEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8gRklYTUU6
IFRoaXMgc2hvdWxkIG5vdCBzdGFydCB3aXRoICJrIi4KKy8vIEZJWE1FOiBUaGlzIGlzIGEgc2hh
cmVkIHRva2VuaXplciBjb25jZXB0LCBub3QgYSBTZWdtZW50ZWRTdHJpbmcgY29uY2VwdCwgYnV0
IHRoaXMgaXMgdGhlIG9ubHkgY29tbW9uIGhlYWRlciBmb3Igbm93LgorY29uc3RleHByIExDaGFy
IGtFbmRPZkZpbGVNYXJrZXIgPSAwOworCitjbGFzcyBTZWdtZW50ZWRTdHJpbmcgeworcHVibGlj
OgorICAgIFNlZ21lbnRlZFN0cmluZygpID0gZGVmYXVsdDsKKyAgICBTZWdtZW50ZWRTdHJpbmco
U3RyaW5nJiYpOworICAgIFNlZ21lbnRlZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworICAgIFNl
Z21lbnRlZFN0cmluZyhTZWdtZW50ZWRTdHJpbmcmJikgPSBkZWxldGU7CisgICAgU2VnbWVudGVk
U3RyaW5nKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gZGVsZXRlOworCisgICAgU2VnbWVudGVk
U3RyaW5nJiBvcGVyYXRvcj0oU2VnbWVudGVkU3RyaW5nJiYpOworICAgIFNlZ21lbnRlZFN0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gZGVmYXVsdDsKKworICAgIHZv
aWQgY2xlYXIoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIGFwcGVuZChTZWdtZW50
ZWRTdHJpbmcmJik7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CisK
KyAgICB2b2lkIGFwcGVuZChTdHJpbmcmJik7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5n
Jik7CisKKyAgICB2b2lkIHB1c2hCYWNrKFN0cmluZyYmKTsKKworICAgIHZvaWQgc2V0RXhjbHVk
ZUxpbmVOdW1iZXJzKCk7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9j
dXJyZW50U3Vic3RyaW5nLmxlbmd0aDsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owor
CisgICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDbG9zZWQ7IH0KKworICAg
IHZvaWQgYWR2YW5jZSgpOworICAgIHZvaWQgYWR2YW5jZVBhc3ROb25OZXdsaW5lKCk7IC8vIEZh
c3RlciB0aGFuIGNhbGxpbmcgYWR2YW5jZSB3aGVuIHdlIGtub3cgdGhlIGN1cnJlbnQgY2hhcmFj
dGVyIGlzIG5vdCBhIG5ld2xpbmUuCisgICAgdm9pZCBhZHZhbmNlUGFzdE5ld2xpbmUoKTsgLy8g
RmFzdGVyIHRoYW4gY2FsbGluZyBhZHZhbmNlIHdoZW4gd2Uga25vdyB0aGUgY3VycmVudCBjaGFy
YWN0ZXIgaXMgYSBuZXdsaW5lLgorCisgICAgZW51bSBBZHZhbmNlUGFzdFJlc3VsdCB7IERpZE5v
dE1hdGNoLCBEaWRNYXRjaCwgTm90RW5vdWdoQ2hhcmFjdGVycyB9OworICAgIHRlbXBsYXRlPHVu
c2lnbmVkIGxlbmd0aD4gQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAo
JmxpdGVyYWwpW2xlbmd0aF0pIHsgcmV0dXJuIGFkdmFuY2VQYXN0PGxlbmd0aCwgZmFsc2U+KGxp
dGVyYWwpOyB9CisgICAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBBZHZhbmNlUGFzdFJlc3Vs
dCBhZHZhbmNlUGFzdExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBjaGFyICgmbGl0ZXJh
bClbbGVuZ3RoXSkgeyByZXR1cm4gYWR2YW5jZVBhc3Q8bGVuZ3RoLCB0cnVlPihsaXRlcmFsKTsg
fQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSBjb25zdDsKKwor
ICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgVUNoYXIgY3VycmVudENoYXJhY3Rl
cigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQorCisgICAgT3JkaW5hbE51
bWJlciBjdXJyZW50Q29sdW1uKCkgY29uc3Q7CisgICAgT3JkaW5hbE51bWJlciBjdXJyZW50TGlu
ZSgpIGNvbnN0OworCisgICAgLy8gU2V0cyB2YWx1ZSBvZiBsaW5lL2NvbHVtbiB2YXJpYWJsZXMu
IENvbHVtbiBpcyBzcGVjaWZpZWQgaW5kaXJlY3RseSBieSBhIHBhcmFtZXRlciBjb2x1bW5BZnRl
clByb2xvZworICAgIC8vIHdoaWNoIGlzIGEgdmFsdWUgb2YgY29sdW1uIHRoYXQgd2Ugc2hvdWxk
IGdldCBhZnRlciBhIHByb2xvZyAoZmlyc3QgcHJvbG9nTGVuZ3RoIGNoYXJhY3RlcnMpIGhhcyBi
ZWVuIGNvbnN1bWVkLgorICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKE9yZGluYWxOdW1iZXIg
bGluZSwgT3JkaW5hbE51bWJlciBjb2x1bW5BZnRlclByb2xvZywgaW50IHByb2xvZ0xlbmd0aCk7
CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFN1YnN0cmluZyB7CisgICAgICAgIFN1YnN0cmluZygp
ID0gZGVmYXVsdDsKKyAgICAgICAgU3Vic3RyaW5nKFN0cmluZyYmKTsKKworICAgICAgICBVQ2hh
ciBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Q7CisgICAgICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0
ZXJQcmVJbmNyZW1lbnQoKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZCgpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGVuZFRvKFN0cmluZ0J1aWxkZXImKSBj
b25zdDsKKworICAgICAgICBTdHJpbmcgc3RyaW5nOworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
eyAwIH07CisgICAgICAgIGJvb2wgaXM4Qml0OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICBjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3Rlcjg7CisgICAgICAgICAgICBjb25zdCBVQ2hh
ciogY3VycmVudENoYXJhY3RlcjE2OworICAgICAgICB9OworICAgICAgICBib29sIGRvTm90RXhj
bHVkZUxpbmVOdW1iZXJzIHsgdHJ1ZSB9OworICAgIH07CisKKyAgICBlbnVtIEZhc3RQYXRoRmxh
Z3MgeworICAgICAgICBOb0Zhc3RQYXRoID0gMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2VBbmRV
cGRhdGVMaW5lTnVtYmVycyA9IDEgPDwgMCwKKyAgICAgICAgVXNlOEJpdEFkdmFuY2UgPSAxIDw8
IDEsCisgICAgfTsKKworICAgIHZvaWQgYXBwZW5kU3Vic3RyaW5nKFN1YnN0cmluZyYmKTsKKwor
ICAgIHZvaWQgcHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpOworICAgIHZvaWQgc3RhcnROZXdMaW5l
KCk7CisKKyAgICB2b2lkIGFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7CisgICAg
dm9pZCBhZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2KCk7CisgICAgdm9pZCBhZHZh
bmNlQW5kVXBkYXRlTGluZU51bWJlcjE2KCk7CisgICAgdm9pZCBhZHZhbmNlUGFzdFNpbmdsZUNo
YXJhY3RlclN1YnN0cmluZ1dpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIoKTsKKyAgICB2b2lkIGFk
dmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgdm9pZCBhZHZhbmNlRW1w
dHkoKTsKKworICAgIHZvaWQgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKKyAgICB2
b2lkIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKKyAgICB2
b2lkIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3Ry
aW5nKCk7CisKKyAgICB2b2lkIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJNaXNtYXRj
aChDaGFyYWN0ZXJUeXBlLCBjaGFyLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Cisg
ICAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZT4gQWR2YW5jZVBhc3RSZXN1bHQgYWR2YW5jZVBhc3QoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xl
bmd0aF0pOworICAgIEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQYXN0U2xvd0Nhc2UoY29uc3Qg
Y2hhciogbGl0ZXJhbCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOworCisgICAgU3Vi
c3RyaW5nIG1fY3VycmVudFN1YnN0cmluZzsKKyAgICBEZXF1ZTxTdWJzdHJpbmc+IG1fb3RoZXJT
dWJzdHJpbmdzOworCisgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsKKworICAgIFVDaGFy
IG1fY3VycmVudENoYXJhY3RlciB7IDAgfTsKKworICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyB7IDAgfTsKKyAgICB1bnNpZ25l
ZCBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lIHsgMCB9Owor
ICAgIGludCBtX2N1cnJlbnRMaW5lIHsgMCB9OworCisgICAgdW5zaWduZWQgY2hhciBtX2Zhc3RQ
YXRoRmxhZ3MgeyBOb0Zhc3RQYXRoIH07CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9h
ZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uKSgpIHsgJlNlZ21lbnRlZFN0
cmluZzo6YWR2YW5jZUVtcHR5IH07CisgICAgdm9pZCAoU2VnbWVudGVkU3RyaW5nOjoqbV9hZHZh
bmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uKSgpIHsgJlNlZ21lbnRlZFN0cmluZzo6YWR2
YW5jZUVtcHR5IH07Cit9OworCitpbmxpbmUgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OlN1
YnN0cmluZyhTdHJpbmcmJiBwYXNzZWRTdHJpbmcpCisgICAgOiBzdHJpbmcoV1RGTW92ZShwYXNz
ZWRTdHJpbmcpKQorICAgICwgbGVuZ3RoKHN0cmluZy5sZW5ndGgoKSkKK3sKKyAgICBpZiAobGVu
Z3RoKSB7CisgICAgICAgIGlzOEJpdCA9IHN0cmluZy5pbXBsKCktPmlzOEJpdCgpOworICAgICAg
ICBpZiAoaXM4Qml0KQorICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjggPSBzdHJpbmcuaW1w
bCgpLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJyZW50Q2hh
cmFjdGVyMTYgPSBzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKSBjb25zdAoreworICAgIHJldHVybiBzdHJpbmcubGVuZ3RoKCkgLSBsZW5n
dGg7Cit9CisKK0FMV0FZU19JTkxJTkUgVUNoYXIgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6
OmN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdAoreworICAgIEFTU0VSVChsZW5ndGgpOworICAgIHJl
dHVybiBpczhCaXQgPyAqY3VycmVudENoYXJhY3RlcjggOiAqY3VycmVudENoYXJhY3RlcjE2Owor
fQorCitBTFdBWVNfSU5MSU5FIFVDaGFyIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpjdXJy
ZW50Q2hhcmFjdGVyUHJlSW5jcmVtZW50KCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoKTsKKyAgICBy
ZXR1cm4gaXM4Qml0ID8gKisrY3VycmVudENoYXJhY3RlcjggOiAqKytjdXJyZW50Q2hhcmFjdGVy
MTY7Cit9CisKK2lubGluZSBTZWdtZW50ZWRTdHJpbmc6OlNlZ21lbnRlZFN0cmluZyhTdHJpbmcm
JiBzdHJpbmcpCisgICAgOiBtX2N1cnJlbnRTdWJzdHJpbmcoV1RGTW92ZShzdHJpbmcpKQorewor
ICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgIG1fY3VycmVudENo
YXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAg
IHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7CisgICAgfQorfQorCitpbmxpbmUgU2Vn
bWVudGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAg
OiBTZWdtZW50ZWRTdHJpbmcoU3RyaW5nIHsgc3RyaW5nIH0pCit7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCkKK3sKKyAg
ICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA+IDEpOworICAgIGlmIChVTkxJS0VM
WSgtLW1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPT0gMSkpCisgICAgICAgIHVwZGF0ZUFkdmFu
Y2VGdW5jdGlvblBvaW50ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdM
aW5lTnVtYmVyKCkKK3sKKyAgICBpZiAoTElLRUxZKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRB
ZHZhbmNlKSkgeworICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJz
dHJpbmcuY3VycmVudENoYXJhY3Rlcjg7CisgICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3Ro
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZVdpdGhv
dXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbikoKTsKK30KKworaW5saW5lIHZvaWQgU2VnbWVu
dGVkU3RyaW5nOjpzdGFydE5ld0xpbmUoKQoreworICAgICsrbV9jdXJyZW50TGluZTsKKyAgICBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWQoKTsKK30KKworaW5saW5lIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpw
cm9jZXNzUG9zc2libGVOZXdsaW5lKCkKK3sKKyAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID09
ICdcbicpCisgICAgICAgIHN0YXJ0TmV3TGluZSgpOworfQorCitpbmxpbmUgdm9pZCBTZWdtZW50
ZWRTdHJpbmc6OmFkdmFuY2UoKQoreworICAgIGlmIChMSUtFTFkobV9mYXN0UGF0aEZsYWdzICYg
VXNlOEJpdEFkdmFuY2UpKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcubGVu
Z3RoID4gMSk7CisgICAgICAgIGJvb2wgbGFzdENoYXJhY3Rlcldhc05ld2xpbmUgPSBtX2N1cnJl
bnRDaGFyYWN0ZXIgPT0gJ1xuJzsKKyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9j
dXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXI4OworICAgICAgICBib29sIGhhdmVPbmVD
aGFyYWN0ZXJMZWZ0ID0gLS1tX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDE7CisgICAgICAg
IGlmIChMSUtFTFkoIShsYXN0Q2hhcmFjdGVyV2FzTmV3bGluZSB8IGhhdmVPbmVDaGFyYWN0ZXJM
ZWZ0KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyV2Fz
TmV3bGluZSAmICEhKG1fZmFzdFBhdGhGbGFncyAmIFVzZThCaXRBZHZhbmNlQW5kVXBkYXRlTGlu
ZU51bWJlcnMpKQorICAgICAgICAgICAgc3RhcnROZXdMaW5lKCk7CisgICAgICAgIGlmIChoYXZl
T25lQ2hhcmFjdGVyTGVmdCkKKyAgICAgICAgICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50
ZXJzRm9yU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbikoKTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROb25O
ZXdsaW5lKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50Q2hhcmFjdGVyICE9ICdcbicpOworICAg
IGFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Cit9CisKK2lubGluZSB2b2lkIFNl
Z21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3ROZXdsaW5lKCkKK3sKKyAgICBBU1NFUlQobV9jdXJy
ZW50Q2hhcmFjdGVyID09ICdcbicpOworICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3Ro
ID4gMSkgeworICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVO
dW1iZXJzKQorICAgICAgICAgICAgc3RhcnROZXdMaW5lKCk7CisgICAgICAgIG1fY3VycmVudENo
YXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyUHJlSW5jcmVtZW50
KCk7CisgICAgICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAodGhpcy0+Km1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlv
bikoKTsKK30KKworaW5saW5lIHVuc2lnbmVkIFNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFy
YWN0ZXJzQ29uc3VtZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX251bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgKyBtX2N1cnJlbnRTdWJzdHJpbmcubnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gQUxXQVlTX0lOTElORSBib29sIFNlZ21lbnRlZFN0cmluZzo6Y2hhcmFjdGVyTWlz
bWF0Y2goQ2hhcmFjdGVyVHlwZSBhLCBjaGFyIGIsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKQoreworICAgIHJldHVybiBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UgPyAhaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChhLCBiKSA6IGEgIT0gYjsKK30KKwordGVtcGxhdGU8dW5zaWduZWQg
bGVuZ3RoSW5jbHVkaW5nVGVybWluYXRvciwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2U+
IFNlZ21lbnRlZFN0cmluZzo6QWR2YW5jZVBhc3RSZXN1bHQgU2VnbWVudGVkU3RyaW5nOjphZHZh
bmNlUGFzdChjb25zdCBjaGFyICgmbGl0ZXJhbClbbGVuZ3RoSW5jbHVkaW5nVGVybWluYXRvcl0p
Cit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aEluY2x1ZGluZ1Rlcm1p
bmF0b3IgLSAxOworICAgIEFTU0VSVCghbGl0ZXJhbFtsZW5ndGhdKTsKKyAgICBBU1NFUlQoIXN0
cmNocihsaXRlcmFsLCAnXG4nKSk7CisgICAgaWYgKGxlbmd0aCArIDEgPCBtX2N1cnJlbnRTdWJz
dHJpbmcubGVuZ3RoKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuaXM4Qml0KSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyTWlzbWF0Y2gobV9jdXJyZW50U3Vic3RyaW5nLmN1
cnJlbnRDaGFyYWN0ZXI4W2ldLCBsaXRlcmFsW2ldLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Up
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlkTm90TWF0Y2g7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjggKz0gbGVu
Z3RoOworICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKm1fY3VycmVudFN1YnN0cmlu
Zy5jdXJyZW50Q2hhcmFjdGVyODsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXJNaXNtYXRjaChtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2W2ld
LCBsaXRlcmFsW2ldLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gRGlkTm90TWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1
cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcjE2ICs9IGxlbmd0aDsKKyAgICAgICAgICAg
IG1fY3VycmVudENoYXJhY3RlciA9ICptX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3Rl
cjE2OworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggLT0gbGVu
Z3RoOworICAgICAgICByZXR1cm4gRGlkTWF0Y2g7CisgICAgfQorICAgIHJldHVybiBhZHZhbmNl
UGFzdFNsb3dDYXNlKGxpdGVyYWwsIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk7Cit9CisKK2lu
bGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMo
KQoreworICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID4gMSkgeworICAgICAgICBp
ZiAobV9jdXJyZW50U3Vic3RyaW5nLmlzOEJpdCkgeworICAgICAgICAgICAgbV9mYXN0UGF0aEZs
YWdzID0gVXNlOEJpdEFkdmFuY2U7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5n
LmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQorICAgICAgICAgICAgICAgIG1fZmFzdFBhdGhGbGFn
cyB8PSBVc2U4Qml0QWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJzOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7Cisg
ICAgICAgIG1fYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdt
ZW50ZWRTdHJpbmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTY7CisgICAgICAg
IGlmIChtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCisgICAgICAg
ICAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3Ry
aW5nOjphZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlcjE2OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2VnbWVudGVkU3Ry
aW5nOjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2OworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoKSB7CisgICAgICAg
IHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yU2lu
Z2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0YzYzYzYzNWJl
M2EzMmI4MDE1NWFmYmJjMWNiY2JkNWQ5ZGFlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworLy8gSW4gc29tZSBjaXJjdW1z
dGFuY2VzIHdlIHdhbnQgdG8gc3RvcmUgYSBTdHJpbmcgYWxvbmcgd2l0aCB0aGUgVGV4dERpcmVj
dGlvbgorLy8gb2YgdGhlIFN0cmluZyBhcyBsZWFybmVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhl
IFN0cmluZy4gRm9yIGV4YW1wbGUsCisvLyBjb25zaWRlciBzdG9yaW5nIHRoZSB0aXRsZSBkZXJp
dmVkIGZyb20gPHRpdGxlIGRpcj0ncnRsJz5zb21lIHRpdGxlPC90aXRsZT4KKy8vIGluIHRoZSBo
aXN0b3J5LgorLy8KKy8vIE5vdGUgdGhhdCBpcyBleHBsaWNpdGx5ICpub3QqIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIHN0cmluZyBhcyBsZWFybmVkCisvLyBmcm9tIHRoZSBjaGFyYWN0ZXJzIG9mIHRo
ZSBzdHJpbmc7IGl0J3MgZXh0cmEgbWV0YWRhdGEgd2UgaGF2ZSBleHRlcm5hbAorLy8gdG8gdGhl
IHN0cmluZy4KKworc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb24geworICAgIFN0cmluZyBzdHJp
bmc7CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpMVFIgfTsK
K307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYg
YSwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5zdHJpbmcg
PT0gYi5zdHJpbmcgJiYgYS5kaXJlY3Rpb24gPT0gYi5kaXJlY3Rpb247Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYSwgY29uc3QgU3RyaW5n
V2l0aERpcmVjdGlvbiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUg
U3RyaW5nV2l0aERpcmVjdGlvbiB0cnVuY2F0ZUZyb21FbmQoY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYgc3RyaW5nLCB1bnNpZ25lZCBtYXhMZW5ndGgpCit7CisgICAgcmV0dXJuIHsgc3RyaW5n
LnN0cmluZy5sZWZ0KG1heExlbmd0aCksIHN0cmluZy5kaXJlY3Rpb24gfTsKK30KKworfSAvLyBu
YW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvU3Vm
Zml4VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1N1ZmZpeFRyZWUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NTZmY2UzOWVkNTFiODg5YTJiMjk0ZDY3MzI2NmUyYWEyODU1M2FkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1N1ZmZpeFRyZWUuaApAQCAt
MCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBZGFtIEJhcnRoLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK2NsYXNzIFVuaWNvZGVD
b2RlYm9vayB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBjb2RlV29yZChVQ2hhciBjKSB7IHJl
dHVybiBjOyB9CisgICAgZW51bSB7IENvZGVTaXplID0gMSA8PCA4ICogc2l6ZW9mKFVDaGFyKSB9
OworfTsKKworY2xhc3MgQVNDSUlDb2RlYm9vayB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBj
b2RlV29yZChVQ2hhciBjKSB7IHJldHVybiBjICYgKENvZGVTaXplIC0gMSk7IH0KKyAgICBlbnVt
IHsgQ29kZVNpemUgPSAxIDw8ICg4ICogc2l6ZW9mKGNoYXIpIC0gMSkgfTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvZGVib29rPgorY2xhc3MgU3VmZml4VHJlZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VmZml4VHJlZSkKK3B1
YmxpYzoKKyAgICBTdWZmaXhUcmVlKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgZGVwdGgp
CisgICAgICAgIDogbV9kZXB0aChkZXB0aCkKKyAgICAgICAgLCBtX2xlYWYodHJ1ZSkKKyAgICB7
CisgICAgICAgIGJ1aWxkKHRleHQpOworICAgIH0KKworICAgIGJvb2wgbWlnaHRDb250YWluKGNv
bnN0IFN0cmluZyYgcXVlcnkpCisgICAgeworICAgICAgICBOb2RlKiBjdXJyZW50ID0gJm1fcm9v
dDsKKyAgICAgICAgaW50IGxpbWl0ID0gc3RkOjptaW4obV9kZXB0aCwgcXVlcnkubGVuZ3RoKCkp
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gaXQgPSBjdXJyZW50LT5maW5kKENvZGVib29rOjpjb2RlV29yZChxdWVyeVtpXSkpOwor
ICAgICAgICAgICAgaWYgKGl0ID09IGN1cnJlbnQtPmVuZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBpdC0+bm9kZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTm9kZSB7
CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAg
Tm9kZShib29sIGlzTGVhZiA9IGZhbHNlKQorICAgICAgICAgICAgOiBtX2lzTGVhZihpc0xlYWYp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5Ob2RlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBjaGlsZCA9IGVudHJ5Lm5vZGU7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkICYm
ICFjaGlsZC0+bV9pc0xlYWYpCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjaGlsZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE5vZGUqJiBjaGlsZEF0KGludCBjb2Rl
V29yZCk7CisKKyAgICAgICAgYXV0byBmaW5kKGludCBjb2RlV29yZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRy
ZW4uZW5kKCksIFtjb2RlV29yZF0oYXV0byYgZW50cnkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZW50cnkuY29kZVdvcmQgPT0gY29kZVdvcmQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9jaGlsZHJlbi5lbmQoKTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgc3RydWN0IENoaWxkV2l0aENvZGVXb3JkIHsKKyAgICAgICAg
ICAgIGludCBjb2RlV29yZDsKKyAgICAgICAgICAgIE5vZGUqIG5vZGU7CisgICAgICAgIH07CisK
KyAgICAgICAgVmVjdG9yPENoaWxkV2l0aENvZGVXb3JkPiBtX2NoaWxkcmVuOworICAgICAgICBi
b29sIG1faXNMZWFmOworICAgIH07CisKKyAgICB2b2lkIGJ1aWxkKGNvbnN0IFN0cmluZyYgdGV4
dCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgYmFzZSA9IDA7IGJhc2UgPCB0ZXh0Lmxl
bmd0aCgpOyArK2Jhc2UpIHsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSAmbV9yb290Owor
ICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihiYXNlICsgbV9kZXB0aCwgdGV4
dC5sZW5ndGgoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7IGJhc2Ug
KyBvZmZzZXQgPCBsaW1pdDsgKytvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3Vy
cmVudCAhPSAmbV9sZWFmKTsKKyAgICAgICAgICAgICAgICBOb2RlKiYgY2hpbGQgPSBjdXJyZW50
LT5jaGlsZEF0KENvZGVib29rOjpjb2RlV29yZCh0ZXh0W2Jhc2UgKyBvZmZzZXRdKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBiYXNl
ICsgb2Zmc2V0ICsgMSA9PSBsaW1pdCA/ICZtX2xlYWYgOiBuZXcgTm9kZSgpOworICAgICAgICAg
ICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIE5vZGUgbV9yb290OworICAgIHVuc2lnbmVkIG1fZGVwdGg7CisKKyAgICAvLyBJbnN0
ZWFkIG9mIGFsbG9jYXRpbmcgYSBmcmVzaCBlbXB0eSBsZWFmIG5vZGUgZm9yIGV2ZXIgbGVhZiBp
biB0aGUgdHJlZQorICAgIC8vICh0aGVyZSBjYW4gYmUgYSBsb3Qgb2YgdGhlc2UpLCB3ZSBhbGlh
cyBhbGwgdGhlIGxlYXZlcyB0byB0aGlzICJzdGF0aWMiCisgICAgLy8gbGVhZiBub2RlLgorICAg
IE5vZGUgbV9sZWFmOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29kZWJvb2s+CitpbmxpbmUg
YXV0byBTdWZmaXhUcmVlPENvZGVib29rPjo6Tm9kZTo6Y2hpbGRBdChpbnQgY29kZVdvcmQpIC0+
IE5vZGUqJgoreworICAgIGF1dG8gaXQgPSBmaW5kKGNvZGVXb3JkKTsKKyAgICBpZiAoaXQgIT0g
bV9jaGlsZHJlbi5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5ub2RlOworICAgIG1fY2hpbGRy
ZW4uYXBwZW5kKENoaWxkV2l0aENvZGVXb3JkIHsgY29kZVdvcmQsIG51bGxwdHIgfSk7CisgICAg
cmV0dXJuIG1fY2hpbGRyZW4ubGFzdCgpLm5vZGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2E2YmIwOTY4YmNjMTI5OWI1YzNjMGVjMDIwM2Q2ZWNlMWM3MTgzZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEb21pbmlr
IFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUgPHVuaWNvZGUvdWJy
ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0QnJlYWtJdGVyYXRvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKwordW5zaWduZWQgZW5k
T2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyB0ZXh0KQoreworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKSB7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0ID0gaTsKKyAgICAgICAgVUNoYXIz
MiBjaDsKKyAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgbGVuZ3RoLCBjaCk7CisgICAgICAgIGlm
ICghcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoKSkKKyAgICAgICAgICAgIHJldHVy
biBmaXJzdDsKKyAgICB9CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc3RhcnRP
Zkxhc3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcgdGV4dCkKK3sKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsg
aSA+IDA7ICkgeworICAgICAgICB1bnNpZ25lZCBsYXN0ID0gaTsKKyAgICAgICAgVUNoYXIzMiBj
aDsKKyAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2gpOworICAgICAgICBpZiAoIXJlcXVp
cmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCisgICAgICAgICAgICByZXR1cm4gbGFzdDsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisKK2ludCBm
aW5kTmV4dFdvcmRGcm9tSW5kZXgoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGJvb2wg
Zm9yd2FyZCkKK3sKKyAgICBVQnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcih0
ZXh0KTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xs
b3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9O
RSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVy
IHByZWNlZWRpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSAmJiB1X2lzYWxu
dW0odGV4dFtwb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247
CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCgpOworICAgIH0KKworICAg
IHBvc2l0aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICB3aGlsZSAocG9z
aXRpb24gIT0gVUJSS19ET05FKSB7CisgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4g
dGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KKyAgICAg
ICAgaWYgKHBvc2l0aW9uICYmIHVfaXNhbG51bSh0ZXh0W3Bvc2l0aW9uXSkpCisgICAgICAgICAg
ICByZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgcG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhp
dCwgcG9zaXRpb24pOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIGZpbmRXb3Jk
Qm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCog
ZW5kKQoreworICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQp
OworICAgICplbmQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgIGlmICgqZW5k
IDwgMCkKKyAgICAgICAgKmVuZCA9IHVicmtfbGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdWJya19w
cmV2aW91cyhpdCk7Cit9CisKK3ZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRl
eHQsIGludCBwb3NpdGlvbiwgaW50KiBlbmQpCit7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0g
d29yZEJyZWFrSXRlcmF0b3IodGV4dCk7CisgICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBw
b3NpdGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0
KTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKKworfSAvLyBuYW1lc3BhY2UgUEFM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk4MmUxZjM4NDY3NzQ2MzRhZGU0ODU4ZDIwMjAwN2JmMWJmYzE1MDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEJvdW5kYXJpZXMuaApAQCAt
MCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworaW5saW5lIGJvb2wg
cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAg
IC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIG5lZWRlZCB3aGVuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2NTYgaXMgZml4ZWQuCisKKyAgICAvLyBX
ZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIGNvbnN0YW50IGlmIHdlIHJlcXVpcmUgYSBuZXdlciB2ZXJz
aW9uIG9mIHRoZSBJQ1UgaGVhZGVycy4KKyAgICBjb25zdCBpbnQgV0tfVV9MQl9DT05ESVRJT05B
TF9KQVBBTkVTRV9TVEFSVEVSID0gMzc7CisKKyAgICBpbnQgbGluZUJyZWFrID0gdV9nZXRJbnRQ
cm9wZXJ0eVZhbHVlKGNoYXJhY3RlciwgVUNIQVJfTElORV9CUkVBSyk7CisgICAgcmV0dXJuIGxp
bmVCcmVhayA9PSBVX0xCX0NPTVBMRVhfQ09OVEVYVCB8fCBsaW5lQnJlYWsgPT0gV0tfVV9MQl9D
T05ESVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSIHx8IGxpbmVCcmVhayA9PSBVX0xCX0lERU9HUkFQ
SElDOworfQorCit1bnNpZ25lZCBlbmRPZkZpcnN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdW
aWV3KTsKK3Vuc2lnbmVkIHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3
KTsKKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIGludCBwb3NpdGlvbiwgaW50
KiBzdGFydCwgaW50KiBlbmQpOwordm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcs
IGludCBwb3NpdGlvbiwgaW50KiBlbmQpOworaW50IGZpbmROZXh0V29yZEZyb21JbmRleChTdHJp
bmdWaWV3LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCk7CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGYxYmQ2NzhjOTRmZDFh
YTFiYTI1OWU2MzcxYWRhZWNmODI5YjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L1RleHRDaGVja2luZy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgorI2luY2x1ZGUgPHd0Zi9F
bnVtVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0
Q2hlY2tpbmdUeXBlIDogdWludDhfdCB7CisgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgPSAw
LAorICAgIFNwZWxsaW5nICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAgIEdyYW1tYXIgICAg
ICAgICAgICAgICAgID0gMSA8PCAxLAorICAgIExpbmsgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAyLAorICAgIFF1b3RlICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAgIERhc2ggICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA0LAorICAgIFJlcGxhY2VtZW50ICAgICAgICAgICAgID0g
MSA8PCA1LAorICAgIENvcnJlY3Rpb24gICAgICAgICAgICAgID0gMSA8PCA2LAorICAgIFNob3dD
b3JyZWN0aW9uUGFuZWwgICAgID0gMSA8PCA3LAorfTsKKworI2lmIFBMQVRGT1JNKE1BQykKK3R5
cGVkZWYgdWludDY0X3QgTlNUZXh0Q2hlY2tpbmdUeXBlczsKK1BBTF9FWFBPUlQgTlNUZXh0Q2hl
Y2tpbmdUeXBlcyBuc1RleHRDaGVja2luZ1R5cGVzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBl
Pik7CisjZW5kaWYKKworZW51bSBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSB7CisgICAgVGV4dENo
ZWNraW5nUHJvY2Vzc0JhdGNoLAorICAgIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbAor
fTsKKworc3RydWN0IEdyYW1tYXJEZXRhaWwgeworICAgIENoYXJhY3RlclJhbmdlIHJhbmdlOwor
ICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CisgICAgU3RyaW5nIHVzZXJEZXNjcmlwdGlvbjsK
K307CisKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQgeworICAgIFRleHRDaGVja2luZ1R5cGUg
dHlwZTsKKyAgICBDaGFyYWN0ZXJSYW5nZSByYW5nZTsKKyAgICBWZWN0b3I8R3JhbW1hckRldGFp
bD4gZGV0YWlsczsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7Cit9OworCitzdHJ1Y3QgVGV4dENo
ZWNraW5nR3Vlc3NlcyB7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKKyAgICBib29sIG1p
c3NwZWxsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgdW5ncmFtbWF0aWNhbCB7IGZhbHNlIH07Cit9
OworCitlbnVtIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBU
ZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8VGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXJUeXBlPjsKKworY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdERh
dGEgeworcHVibGljOgorICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhKCkgPSBkZWZhdWx0Owor
ICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhKHN0ZDo6b3B0aW9uYWw8VGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXI+IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBl
IHByb2Nlc3NUeXBlKQorICAgICAgICA6IG1fdGV4dCB7IHRleHQgfQorICAgICAgICAsIG1faWRl
bnRpZmllciB7IGlkZW50aWZpZXIgfQorICAgICAgICAsIG1fcHJvY2Vzc1R5cGUgeyBwcm9jZXNz
VHlwZSB9CisgICAgICAgICwgbV9jaGVja2luZ1R5cGVzIHsgY2hlY2tpbmdUeXBlcyB9CisgICAg
eworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZp
ZXI+IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBjb25z
dCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKyAgICBPcHRpb25TZXQ8
VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tp
bmdUeXBlczsgfQorICAgIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHByb2Nlc3NUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9jZXNzVHlwZTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX3Rl
eHQ7CisgICAgc3RkOjpvcHRpb25hbDxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcj4gbV9p
ZGVudGlmaWVyOworICAgIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIG1fcHJvY2Vzc1R5cGUgeyBU
ZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwgfTsKKyAgICBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gbV9jaGVja2luZ1R5cGVzOworfTsKKworY2xhc3MgVGV4dENoZWNraW5nUmVxdWVz
dCA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRDaGVja2luZ1JlcXVlc3Q+IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5UZXh0Q2hlY2tpbmdSZXF1ZXN0KCkgPSBkZWZhdWx0OworCisgICAgdmlydHVh
bCBjb25zdCBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgZGF0YSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKCkgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgUEFMCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlLAorICAgICAg
ICBQQUw6OlRleHRDaGVja2luZ1Byb2Nlc3NUeXBlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzQmF0Y2gs
CisgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU6OlRleHRDaGVja2luZ1Byb2Nl
c3NJbmNyZW1lbnRhbAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFBBTDo6VGV4dENoZWNraW5nVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CisgICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZSwKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpOb25lLAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLAor
ICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIsCisgICAgICAgIFBBTDo6VGV4
dENoZWNraW5nVHlwZTo6TGluaywKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpRdW90
ZSwKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLAorICAgICAgICBQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LAorICAgICAgICBQQUw6OlRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24sCisgICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJl
Y3Rpb25QYW5lbAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0RGlyZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvVGV4dERpcmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlODZiYWFmMzE4
OTVjYjY2MDQ1NzRjMDJhYjcyMTBkN2QxMmVkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dERpcmVjdGlvbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFBBTCB7CisKK2VudW0gY2xhc3Mg
VGV4dERpcmVjdGlvbiA6IGJvb2wgeyBMVFIsIFJUTCB9OworCitpbmxpbmUgYm9vbCBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBk
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL3RleHQvVGV4dEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNzNjN2QyODEwNWIyMmYyMTZlZmU1
NzNmZTM0YzJlMGUzMjczMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvdGV4dC9UZXh0RmxhZ3MuaApAQCAtMCwwICsxLDgwNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorCituYW1l
c3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3Qgewor
ICAgIEF1dG9UZXh0UmVuZGVyaW5nLAorICAgIE9wdGltaXplU3BlZWQsCisgICAgT3B0aW1pemVM
ZWdpYmlsaXR5LAorICAgIEdlb21ldHJpY1ByZWNpc2lvbgorfTsKKworZW51bSBjbGFzcyBGb250
U21vb3RoaW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEF1dG9TbW9vdGhpbmcsCisgICAgTm9TbW9v
dGhpbmcsCisgICAgQW50aWFsaWFzZWQsCisgICAgU3VicGl4ZWxBbnRpYWxpYXNlZAorfTsKKwor
ZW51bSBjbGFzcyBGb250T3JpZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBIb3Jpem9udGFsLAor
ICAgIFZlcnRpY2FsCit9OworCitlbnVtIGNsYXNzIE5vbkNKS0dseXBoT3JpZW50YXRpb24gOiB1
aW50OF90IHsKKyAgICBNaXhlZCwKKyAgICBVcHJpZ2h0Cit9OworCitlbnVtIEV4cGFuc2lvbkJl
aGF2aW9yRmxhZ3MgeworICAgIEZvcmJpZFJpZ2h0RXhwYW5zaW9uID0gMCA8PCAwLAorICAgIEFs
bG93UmlnaHRFeHBhbnNpb24gPSAxIDw8IDAsCisgICAgRm9yY2VSaWdodEV4cGFuc2lvbiA9IDIg
PDwgMCwKKyAgICBSaWdodEV4cGFuc2lvbk1hc2sgPSAzIDw8IDAsCisKKyAgICBGb3JiaWRMZWZ0
RXhwYW5zaW9uID0gMCA8PCAyLAorICAgIEFsbG93TGVmdEV4cGFuc2lvbiA9IDEgPDwgMiwKKyAg
ICBGb3JjZUxlZnRFeHBhbnNpb24gPSAyIDw8IDIsCisgICAgTGVmdEV4cGFuc2lvbk1hc2sgPSAz
IDw8IDIsCisKKyAgICBEZWZhdWx0RXhwYW5zaW9uID0gQWxsb3dSaWdodEV4cGFuc2lvbiB8IEZv
cmJpZExlZnRFeHBhbnNpb24sCit9OwordHlwZWRlZiB1bnNpZ25lZCBFeHBhbnNpb25CZWhhdmlv
cjsKKworZW51bSBGb250U3ludGhlc2lzVmFsdWVzIHsKKyAgICBGb250U3ludGhlc2lzTm9uZSA9
IDB4MCwKKyAgICBGb250U3ludGhlc2lzV2VpZ2h0ID0gMHgxLAorICAgIEZvbnRTeW50aGVzaXNT
dHlsZSA9IDB4MiwKKyAgICBGb250U3ludGhlc2lzU21hbGxDYXBzID0gMHg0Cit9OworLy8gRklY
TUU6IFVzZSBPcHRpb25TZXQuCit0eXBlZGVmIHVuc2lnbmVkIEZvbnRTeW50aGVzaXM7Citjb25z
dCB1bnNpZ25lZCBGb250U3ludGhlc2lzV2lkdGggPSAzOworCitlbnVtIGNsYXNzIEZvbnRWYXJp
YW50TGlnYXR1cmVzIDogdWludDhfdCB7IE5vcm1hbCwgWWVzLCBObyB9OworZW51bSBjbGFzcyBG
b250VmFyaWFudFBvc2l0aW9uIDogdWludDhfdCB7IE5vcm1hbCwgU3Vic2NyaXB0LCBTdXBlcnNj
cmlwdCB9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50Q2FwcyA6IHVpbnQ4X3QgeworICAgIE5v
cm1hbCwKKyAgICBTbWFsbCwKKyAgICBBbGxTbWFsbCwKKyAgICBQZXRpdGUsCisgICAgQWxsUGV0
aXRlLAorICAgIFVuaWNhc2UsCisgICAgVGl0bGluZworfTsKKworZW51bSBjbGFzcyBGb250VmFy
aWFudE51bWVyaWNGaWd1cmUgOiB1aW50OF90IHsKKyAgICBOb3JtYWwsCisgICAgTGluaW5nTnVt
YmVycywKKyAgICBPbGRTdHlsZU51bWJlcnMKK307CisKK2VudW0gY2xhc3MgRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZyA6IHVpbnQ4X3QgeworICAgIE5vcm1hbCwKKyAgICBQcm9wb3J0aW9uYWxO
dW1iZXJzLAorICAgIFRhYnVsYXJOdW1iZXJzCit9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50
TnVtZXJpY0ZyYWN0aW9uIDogdWludDhfdCB7CisgICAgTm9ybWFsLAorICAgIERpYWdvbmFsRnJh
Y3Rpb25zLAorICAgIFN0YWNrZWRGcmFjdGlvbnMKK307CisKK2VudW0gY2xhc3MgRm9udFZhcmlh
bnROdW1lcmljT3JkaW5hbCA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OworZW51bSBjbGFzcyBGb250
VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OworZW51bSBj
bGFzcyBGb250VmFyaWFudEFsdGVybmF0ZXMgOiBib29sIHsgTm9ybWFsLCBIaXN0b3JpY2FsRm9y
bXMgfTsKKworZW51bSBjbGFzcyBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiB1aW50OF90
IHsKKyAgICBOb3JtYWwsCisgICAgSmlzNzgsCisgICAgSmlzODMsCisgICAgSmlzOTAsCisgICAg
SmlzMDQsCisgICAgU2ltcGxpZmllZCwKKyAgICBUcmFkaXRpb25hbAorfTsKKworZW51bSBjbGFz
cyBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIDogdWludDhfdCB7CisgICAgTm9ybWFsLAorICAg
IEZ1bGwsCisgICAgUHJvcG9ydGlvbmFsCit9OworCitlbnVtIGNsYXNzIEZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieSA6IHVpbnQ4X3QgeworICAgIE5vcm1hbCwKKyAgICBZZXMKK307CisKK3N0cnVj
dCBGb250VmFyaWFudFNldHRpbmdzIHsKKyAgICBGb250VmFyaWFudFNldHRpbmdzKCkKKyAgICAg
ICAgOiBjb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKKyAgICAg
ICAgLCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwp
CisgICAgICAgICwgaGlzdG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKQorICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKEZvbnRWYXJpYW50TGlnYXR1cmVz
OjpOb3JtYWwpCisgICAgICAgICwgcG9zaXRpb24oRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFs
KQorICAgICAgICAsIGNhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCisgICAgICAgICwgbnVt
ZXJpY0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbCkKKyAgICAgICAgLCBu
dW1lcmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpCisgICAgICAg
ICwgbnVtZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpCisg
ICAgICAgICwgbnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFs
KQorICAgICAgICAsIG51bWVyaWNTbGFzaGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybzo6Tm9ybWFsKQorICAgICAgICAsIGFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5hdGVz
OjpOb3JtYWwpCisgICAgICAgICwgZWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6Ok5vcm1hbCkKKyAgICAgICAgLCBlYXN0QXNpYW5XaWR0aChGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoOjpOb3JtYWwpCisgICAgICAgICwgZWFzdEFzaWFuUnVieShGb250VmFyaWFu
dEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkKKyAgICB7CisgICAgfQorCisgICAgRm9udFZhcmlhbnRT
ZXR0aW5ncygKKyAgICAgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVzLAor
ICAgICAgICBGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAg
ICAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAorICAgICAgICBG
b250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcywKKyAgICAgICAgRm9udFZh
cmlhbnRQb3NpdGlvbiBwb3NpdGlvbiwKKyAgICAgICAgRm9udFZhcmlhbnRDYXBzIGNhcHMsCisg
ICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBudW1lcmljRmlndXJlLAorICAgICAgICBG
b250VmFyaWFudE51bWVyaWNTcGFjaW5nIG51bWVyaWNTcGFjaW5nLAorICAgICAgICBGb250VmFy
aWFudE51bWVyaWNGcmFjdGlvbiBudW1lcmljRnJhY3Rpb24sCisgICAgICAgIEZvbnRWYXJpYW50
TnVtZXJpY09yZGluYWwgbnVtZXJpY09yZGluYWwsCisgICAgICAgIEZvbnRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvIG51bWVyaWNTbGFzaGVkWmVybywKKyAgICAgICAgRm9udFZhcmlhbnRBbHRl
cm5hdGVzIGFsdGVybmF0ZXMsCisgICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCBl
YXN0QXNpYW5WYXJpYW50LAorICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIGVhc3RB
c2lhbldpZHRoLAorICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgZWFzdEFzaWFuUnVi
eSkKKyAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVzKGNvbW1vbkxpZ2F0dXJlcykKKyAgICAg
ICAgICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKQor
ICAgICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVzKGhpc3RvcmljYWxMaWdhdHVyZXMpCisg
ICAgICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKGNvbnRleHR1YWxBbHRlcm5hdGVzKQor
ICAgICAgICAgICAgLCBwb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgICAgICwgY2FwcyhjYXBz
KQorICAgICAgICAgICAgLCBudW1lcmljRmlndXJlKG51bWVyaWNGaWd1cmUpCisgICAgICAgICAg
ICAsIG51bWVyaWNTcGFjaW5nKG51bWVyaWNTcGFjaW5nKQorICAgICAgICAgICAgLCBudW1lcmlj
RnJhY3Rpb24obnVtZXJpY0ZyYWN0aW9uKQorICAgICAgICAgICAgLCBudW1lcmljT3JkaW5hbChu
dW1lcmljT3JkaW5hbCkKKyAgICAgICAgICAgICwgbnVtZXJpY1NsYXNoZWRaZXJvKG51bWVyaWNT
bGFzaGVkWmVybykKKyAgICAgICAgICAgICwgYWx0ZXJuYXRlcyhhbHRlcm5hdGVzKQorICAgICAg
ICAgICAgLCBlYXN0QXNpYW5WYXJpYW50KGVhc3RBc2lhblZhcmlhbnQpCisgICAgICAgICAgICAs
IGVhc3RBc2lhbldpZHRoKGVhc3RBc2lhbldpZHRoKQorICAgICAgICAgICAgLCBlYXN0QXNpYW5S
dWJ5KGVhc3RBc2lhblJ1YnkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNBbGxOb3JtYWwo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBGb250VmFy
aWFudExpZ2F0dXJlczo6Tm9ybWFsCisgICAgICAgICAgICAmJiBkaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKKyAgICAgICAgICAgICYmIGhpc3Rv
cmljYWxMaWdhdHVyZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbAorICAgICAgICAg
ICAgJiYgY29udGV4dHVhbEFsdGVybmF0ZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1h
bAorICAgICAgICAgICAgJiYgcG9zaXRpb24gPT0gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFs
CisgICAgICAgICAgICAmJiBjYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsCisgICAgICAg
ICAgICAmJiBudW1lcmljRmlndXJlID09IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFs
CisgICAgICAgICAgICAmJiBudW1lcmljU3BhY2luZyA9PSBGb250VmFyaWFudE51bWVyaWNTcGFj
aW5nOjpOb3JtYWwKKyAgICAgICAgICAgICYmIG51bWVyaWNGcmFjdGlvbiA9PSBGb250VmFyaWFu
dE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsCisgICAgICAgICAgICAmJiBudW1lcmljT3JkaW5hbCA9
PSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwKKyAgICAgICAgICAgICYmIG51bWVy
aWNTbGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsCisg
ICAgICAgICAgICAmJiBhbHRlcm5hdGVzID09IEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFs
CisgICAgICAgICAgICAmJiBlYXN0QXNpYW5WYXJpYW50ID09IEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6Tm9ybWFsCisgICAgICAgICAgICAmJiBlYXN0QXNpYW5XaWR0aCA9PSBGb250VmFy
aWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwKKyAgICAgICAgICAgICYmIGVhc3RBc2lhblJ1Ynkg
PT0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBvdGhlci5jb21tb25MaWdhdHVyZXMK
KyAgICAgICAgICAgICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPT0gb3RoZXIuZGlzY3JldGlv
bmFyeUxpZ2F0dXJlcworICAgICAgICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBvdGhl
ci5oaXN0b3JpY2FsTGlnYXR1cmVzCisgICAgICAgICAgICAmJiBjb250ZXh0dWFsQWx0ZXJuYXRl
cyA9PSBvdGhlci5jb250ZXh0dWFsQWx0ZXJuYXRlcworICAgICAgICAgICAgJiYgcG9zaXRpb24g
PT0gb3RoZXIucG9zaXRpb24KKyAgICAgICAgICAgICYmIGNhcHMgPT0gb3RoZXIuY2FwcworICAg
ICAgICAgICAgJiYgbnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5udW1lcmljRmlndXJlCisgICAgICAg
ICAgICAmJiBudW1lcmljU3BhY2luZyA9PSBvdGhlci5udW1lcmljU3BhY2luZworICAgICAgICAg
ICAgJiYgbnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm51bWVyaWNGcmFjdGlvbgorICAgICAgICAg
ICAgJiYgbnVtZXJpY09yZGluYWwgPT0gb3RoZXIubnVtZXJpY09yZGluYWwKKyAgICAgICAgICAg
ICYmIG51bWVyaWNTbGFzaGVkWmVybyA9PSBvdGhlci5udW1lcmljU2xhc2hlZFplcm8KKyAgICAg
ICAgICAgICYmIGFsdGVybmF0ZXMgPT0gb3RoZXIuYWx0ZXJuYXRlcworICAgICAgICAgICAgJiYg
ZWFzdEFzaWFuVmFyaWFudCA9PSBvdGhlci5lYXN0QXNpYW5WYXJpYW50CisgICAgICAgICAgICAm
JiBlYXN0QXNpYW5XaWR0aCA9PSBvdGhlci5lYXN0QXNpYW5XaWR0aAorICAgICAgICAgICAgJiYg
ZWFzdEFzaWFuUnVieSA9PSBvdGhlci5lYXN0QXNpYW5SdWJ5OworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIHVuc2lnbmVkIHVuaXF1ZVZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29tbW9uTGln
YXR1cmVzKSA8PCAyNgorICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlcykgPDwgMjQKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGhpc3RvcmljYWxMaWdhdHVyZXMpIDw8IDIyCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjb250ZXh0dWFsQWx0ZXJuYXRlcykgPDwgMjAKKyAgICAgICAgICAgIHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8PCAxOAorICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2FwcykgPDwgMTUKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG51bWVyaWNGaWd1cmUpIDw8IDEzCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihudW1lcmljU3BhY2luZykgPDwgMTEKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG51bWVyaWNGcmFjdGlvbikgPDwgOQorICAgICAgICAgICAgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obnVtZXJpY09yZGluYWwpIDw8IDgKKyAgICAgICAgICAgIHwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG51bWVyaWNTbGFzaGVkWmVybykgPDwgNworICAgICAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWx0ZXJuYXRlcykgPDwgNgorICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZWFzdEFzaWFuVmFyaWFudCkgPDwgMworICAgICAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZWFzdEFzaWFuV2lkdGgpIDw8IDEKKyAgICAgICAgICAgIHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGVhc3RBc2lhblJ1YnkpIDw8IDA7CisgICAgfQorCisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0
dGluZ3M+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICAvLyBGSVhNRTogdGhpcyB3b3VsZCBiZSBt
dWNoIG1vcmUgY29tcGFjdCB3aXRoIGJpdGZpZWxkcy4KKyAgICBGb250VmFyaWFudExpZ2F0dXJl
cyBjb21tb25MaWdhdHVyZXM7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFy
eUxpZ2F0dXJlczsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVz
OworICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOworICAgIEZv
bnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb247CisgICAgRm9udFZhcmlhbnRDYXBzIGNhcHM7Cisg
ICAgRm9udFZhcmlhbnROdW1lcmljRmlndXJlIG51bWVyaWNGaWd1cmU7CisgICAgRm9udFZhcmlh
bnROdW1lcmljU3BhY2luZyBudW1lcmljU3BhY2luZzsKKyAgICBGb250VmFyaWFudE51bWVyaWNG
cmFjdGlvbiBudW1lcmljRnJhY3Rpb247CisgICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCBu
dW1lcmljT3JkaW5hbDsKKyAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBudW1lcmlj
U2xhc2hlZFplcm87CisgICAgRm9udFZhcmlhbnRBbHRlcm5hdGVzIGFsdGVybmF0ZXM7CisgICAg
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IGVhc3RBc2lhblZhcmlhbnQ7CisgICAgRm9udFZh
cmlhbnRFYXN0QXNpYW5XaWR0aCBlYXN0QXNpYW5XaWR0aDsKKyAgICBGb250VmFyaWFudEVhc3RB
c2lhblJ1YnkgZWFzdEFzaWFuUnVieTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2
b2lkIEZvbnRWYXJpYW50U2V0dGluZ3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVzOworICAgIGVuY29kZXIgPDwgZGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlczsKKyAgICBlbmNvZGVyIDw8IGhpc3RvcmljYWxMaWdhdHVyZXM7Cisg
ICAgZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAgICBlbmNvZGVyIDw8IHBvc2l0
aW9uOworICAgIGVuY29kZXIgPDwgY2FwczsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNGaWd1cmU7
CisgICAgZW5jb2RlciA8PCBudW1lcmljU3BhY2luZzsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNG
cmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IG51bWVyaWNPcmRpbmFsOworICAgIGVuY29kZXIgPDwg
bnVtZXJpY1NsYXNoZWRaZXJvOworICAgIGVuY29kZXIgPDwgYWx0ZXJuYXRlczsKKyAgICBlbmNv
ZGVyIDw8IGVhc3RBc2lhblZhcmlhbnQ7CisgICAgZW5jb2RlciA8PCBlYXN0QXNpYW5XaWR0aDsK
KyAgICBlbmNvZGVyIDw8IGVhc3RBc2lhblJ1Ynk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0dGluZ3M+IEZvbnRWYXJpYW50U2V0dGlu
Z3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZh
cmlhbnRMaWdhdHVyZXM+IGNvbW1vbkxpZ2F0dXJlczsKKyAgICBkZWNvZGVyID4+IGNvbW1vbkxp
Z2F0dXJlczsKKyAgICBpZiAoIWNvbW1vbkxpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
OworICAgIGlmICghZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGhpc3Rv
cmljYWxMaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBoaXN0b3JpY2FsTGlnYXR1cmVzOworICAg
IGlmICghaGlzdG9yaWNhbExpZ2F0dXJlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGNvbnRleHR1YWxBbHRl
cm5hdGVzOworICAgIGRlY29kZXIgPj4gY29udGV4dHVhbEFsdGVybmF0ZXM7CisgICAgaWYgKCFj
b250ZXh0dWFsQWx0ZXJuYXRlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRQb3NpdGlvbj4gcG9zaXRpb247CisgICAgZGVjb2Rl
ciA+PiBwb3NpdGlvbjsKKyAgICBpZiAoIXBvc2l0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudENhcHM+IGNhcHM7CisgICAg
ZGVjb2RlciA+PiBjYXBzOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiBudW1l
cmljRmlndXJlOworICAgIGRlY29kZXIgPj4gbnVtZXJpY0ZpZ3VyZTsKKyAgICBpZiAoIW51bWVy
aWNGaWd1cmUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IG51bWVyaWNTcGFjaW5nOworICAgIGRlY29k
ZXIgPj4gbnVtZXJpY1NwYWNpbmc7CisgICAgaWYgKCFudW1lcmljU3BhY2luZykKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb24+IG51bWVyaWNGcmFjdGlvbjsKKyAgICBkZWNvZGVyID4+IG51bWVyaWNGcmFj
dGlvbjsKKyAgICBpZiAoIW51bWVyaWNGcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4gbnVt
ZXJpY09yZGluYWw7CisgICAgZGVjb2RlciA+PiBudW1lcmljT3JkaW5hbDsKKyAgICBpZiAoIW51
bWVyaWNPcmRpbmFsKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gbnVtZXJpY1NsYXNoZWRaZXJv
OworICAgIGRlY29kZXIgPj4gbnVtZXJpY1NsYXNoZWRaZXJvOworICAgIGlmICghbnVtZXJpY1Ns
YXNoZWRaZXJvKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxGb250VmFyaWFudEFsdGVybmF0ZXM+IGFsdGVybmF0ZXM7CisgICAgZGVjb2RlciA+PiBh
bHRlcm5hdGVzOworICAgIGlmICghYWx0ZXJuYXRlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiBl
YXN0QXNpYW5WYXJpYW50OworICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuVmFyaWFudDsKKyAgICBp
ZiAoIWVhc3RBc2lhblZhcmlhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IGVhc3RBc2lhbldpZHRo
OworICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuV2lkdGg7CisgICAgaWYgKCFlYXN0QXNpYW5XaWR0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnRFYXN0QXNpYW5SdWJ5PiBlYXN0QXNpYW5SdWJ5OworICAgIGRlY29kZXIgPj4gZWFz
dEFzaWFuUnVieTsKKyAgICBpZiAoIWVhc3RBc2lhblJ1YnkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7CisgICAgICAgICpjb21tb25MaWdhdHVyZXMsCisg
ICAgICAgICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAgICAqaGlzdG9yaWNhbExpZ2F0
dXJlcywKKyAgICAgICAgKmNvbnRleHR1YWxBbHRlcm5hdGVzLAorICAgICAgICAqcG9zaXRpb24s
CisgICAgICAgICpjYXBzLAorICAgICAgICAqbnVtZXJpY0ZpZ3VyZSwKKyAgICAgICAgKm51bWVy
aWNTcGFjaW5nLAorICAgICAgICAqbnVtZXJpY0ZyYWN0aW9uLAorICAgICAgICAqbnVtZXJpY09y
ZGluYWwsCisgICAgICAgICpudW1lcmljU2xhc2hlZFplcm8sCisgICAgICAgICphbHRlcm5hdGVz
LAorICAgICAgICAqZWFzdEFzaWFuVmFyaWFudCwKKyAgICAgICAgKmVhc3RBc2lhbldpZHRoLAor
ICAgICAgICAqZWFzdEFzaWFuUnVieQorICAgIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50
TGlnYXR1cmVzVmFsdWVzIHsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcygKKyAgICAg
ICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVzLAorICAgICAgICBGb250VmFy
aWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFu
dExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAorICAgICAgICBGb250VmFyaWFudExpZ2F0
dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcykKKyAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVz
KGNvbW1vbkxpZ2F0dXJlcykKKyAgICAgICAgICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhk
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzKQorICAgICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVz
KGhpc3RvcmljYWxMaWdhdHVyZXMpCisgICAgICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVz
KGNvbnRleHR1YWxBbHRlcm5hdGVzKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1
ZXM+IGRlY29kZShEZWNvZGVyJik7CisKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb21tb25M
aWdhdHVyZXM7CisgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJl
czsKKyAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzOworICAgIEZv
bnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOworfTsKKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVz
OworICAgIGVuY29kZXIgPDwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKKyAgICBlbmNvZGVyIDw8
IGhpc3RvcmljYWxMaWdhdHVyZXM7CisgICAgZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRl
czsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnRMaWdhdHVyZXNWYWx1ZXM+IEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVz
PiBjb21tb25MaWdhdHVyZXM7CisgICAgZGVjb2RlciA+PiBjb21tb25MaWdhdHVyZXM7CisgICAg
aWYgKCFjb21tb25MaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBkaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzOworICAgIGRlY29kZXIgPj4gZGlzY3JldGlvbmFyeUxpZ2F0dXJlczsKKyAgICBpZiAoIWRp
c2NyZXRpb25hcnlMaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBoaXN0b3JpY2FsTGlnYXR1cmVz
OworICAgIGRlY29kZXIgPj4gaGlzdG9yaWNhbExpZ2F0dXJlczsKKyAgICBpZiAoIWhpc3Rvcmlj
YWxMaWdhdHVyZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiBjb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAgICBk
ZWNvZGVyID4+IGNvbnRleHR1YWxBbHRlcm5hdGVzOworICAgIGlmICghY29udGV4dHVhbEFsdGVy
bmF0ZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpj
b21tb25MaWdhdHVyZXMsICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLCAqaGlzdG9yaWNhbExpZ2F0
dXJlcywgKmNvbnRleHR1YWxBbHRlcm5hdGVzIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJpYW50
TnVtZXJpY1ZhbHVlcyB7CisgICAgRm9udFZhcmlhbnROdW1lcmljVmFsdWVzKAorICAgICAgICBG
b250VmFyaWFudE51bWVyaWNGaWd1cmUgZmlndXJlLAorICAgICAgICBGb250VmFyaWFudE51bWVy
aWNTcGFjaW5nIHNwYWNpbmcsCisgICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uIGZy
YWN0aW9uLAorICAgICAgICBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGluYWwsCisgICAg
ICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvKQorICAgICAgICAg
ICAgOiBmaWd1cmUoZmlndXJlKQorICAgICAgICAgICAgLCBzcGFjaW5nKHNwYWNpbmcpCisgICAg
ICAgICAgICAsIGZyYWN0aW9uKGZyYWN0aW9uKQorICAgICAgICAgICAgLCBvcmRpbmFsKG9yZGlu
YWwpCisgICAgICAgICAgICAsIHNsYXNoZWRaZXJvKHNsYXNoZWRaZXJvKQorICAgIHsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnROdW1lcmljVmFsdWVzPiBkZWNvZGUoRGVjb2RlciYpOworCisgICAgRm9udFZhcmlh
bnROdW1lcmljRmlndXJlIGZpZ3VyZTsKKyAgICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHNw
YWNpbmc7CisgICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJhY3Rpb247CisgICAgRm9u
dFZhcmlhbnROdW1lcmljT3JkaW5hbCBvcmRpbmFsOworICAgIEZvbnRWYXJpYW50TnVtZXJpY1Ns
YXNoZWRaZXJvIHNsYXNoZWRaZXJvOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgRm9udFZhcmlhbnROdW1lcmljVmFsdWVzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IGZpZ3VyZTsKKyAgICBlbmNvZGVyIDw8IHNwYWNpbmc7Cisg
ICAgZW5jb2RlciA8PCBmcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IG9yZGluYWw7CisgICAgZW5j
b2RlciA8PCBzbGFzaGVkWmVybzsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6
b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljVmFsdWVzPiBGb250VmFyaWFudE51bWVyaWNWYWx1
ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZh
cmlhbnROdW1lcmljRmlndXJlPiBmaWd1cmU7CisgICAgZGVjb2RlciA+PiBmaWd1cmU7CisgICAg
aWYgKCFmaWd1cmUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IHNwYWNpbmc7CisgICAgZGVjb2RlciA+
PiBzcGFjaW5nOworICAgIGlmICghc3BhY2luZykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IGZyYWN0
aW9uOworICAgIGRlY29kZXIgPj4gZnJhY3Rpb247CisgICAgaWYgKCFmcmFjdGlvbikKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRO
dW1lcmljT3JkaW5hbD4gb3JkaW5hbDsKKyAgICBkZWNvZGVyID4+IG9yZGluYWw7CisgICAgaWYg
KCFvcmRpbmFsKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gc2xhc2hlZFplcm87CisgICAgZGVj
b2RlciA+PiBzbGFzaGVkWmVybzsKKyAgICBpZiAoIXNsYXNoZWRaZXJvKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqZmlndXJlLCAqc3BhY2luZywgKmZy
YWN0aW9uLCAqb3JkaW5hbCwgKnNsYXNoZWRaZXJvIH0gfTsKK30KKworc3RydWN0IEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFsdWVzIHsKKyAgICBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcygKKyAg
ICAgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQsCisgICAgICAgIEZvbnRW
YXJpYW50RWFzdEFzaWFuV2lkdGggd2lkdGgsCisgICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFu
UnVieSBydWJ5KQorICAgICAgICAgICAgOiB2YXJpYW50KHZhcmlhbnQpCisgICAgICAgICAgICAs
IHdpZHRoKHdpZHRoKQorICAgICAgICAgICAgLCBydWJ5KHJ1YnkpCisgICAgeworICAgIH0KKwor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFy
aWFudEVhc3RBc2lhblZhbHVlcz4gZGVjb2RlKERlY29kZXImKTsKKworICAgIEZvbnRWYXJpYW50
RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50OworICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGgg
d2lkdGg7CisgICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1Ynk7Cit9OworCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlczo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB2YXJpYW50OworICAg
IGVuY29kZXIgPDwgd2lkdGg7CisgICAgZW5jb2RlciA8PCBydWJ5OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcz4g
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2YXJpYW50Owor
ICAgIGRlY29kZXIgPj4gdmFyaWFudDsKKyAgICBpZiAoIXZhcmlhbnQpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFu
V2lkdGg+IHdpZHRoOworICAgIGRlY29kZXIgPj4gd2lkdGg7CisgICAgaWYgKCF3aWR0aCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnRFYXN0QXNpYW5SdWJ5PiBydWJ5OworICAgIGRlY29kZXIgPj4gcnVieTsKKyAgICBpZiAoIXJ1
YnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICp2YXJp
YW50LCAqd2lkdGgsICpydWJ5IH0gfTsKK30KKworZW51bSBjbGFzcyBGb250V2lkdGhWYXJpYW50
IDogdWludDhfdCB7CisgICAgUmVndWxhcldpZHRoLAorICAgIEhhbGZXaWR0aCwKKyAgICBUaGly
ZFdpZHRoLAorICAgIFF1YXJ0ZXJXaWR0aCwKKyAgICBMYXN0Rm9udFdpZHRoVmFyaWFudCA9IFF1
YXJ0ZXJXaWR0aAorfTsKKworY29uc3QgdW5zaWduZWQgRm9udFdpZHRoVmFyaWFudFdpZHRoID0g
MjsKKworQ09NUElMRV9BU1NFUlQoIShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFdpZHRoVmFy
aWFudDo6TGFzdEZvbnRXaWR0aFZhcmlhbnQpID4+IEZvbnRXaWR0aFZhcmlhbnRXaWR0aCksIEZv
bnRXaWR0aFZhcmlhbnRXaWR0aF9pc19jb3JyZWN0KTsKKworZW51bSBjbGFzcyBGb250U21hbGxD
YXBzIDogdWludDhfdCB7CisgICAgT2ZmID0gMCwKKyAgICBPbiA9IDEKK307CisKK2VudW0gY2xh
c3MgS2VybmluZyA6IHVpbnQ4X3QgeworICAgIEF1dG8sCisgICAgTm9ybWFsLAorICAgIE5vU2hp
ZnQKK307CisKK2VudW0gY2xhc3MgRm9udE9wdGljYWxTaXppbmcgOiB1aW50OF90IHsKKyAgICBF
bmFibGVkLAorICAgIERpc2FibGVkCit9OworCisvLyBodHRwczovL3d3dy5taWNyb3NvZnQuY29t
L3R5cG9ncmFwaHkvb3RzcGVjL2Z2YXIuaHRtI1ZBVAorZW51bSBjbGFzcyBGb250U3R5bGVBeGlz
IDogdWludDhfdCB7CisgICAgc2xudCwKKyAgICBpdGFsCit9OworCitlbnVtIGNsYXNzIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzCit9OworCit9
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6
VGV4dFJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
IFBBTDo6VGV4dFJlbmRlcmluZ01vZGUsCisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0
b1RleHRSZW5kZXJpbmcsCisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVl
ZCwKKyAgICBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHksCisgICAg
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uCisgICAgPjsKK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250U21vb3RoaW5nTW9kZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9k
ZSwKKyAgICBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nLAorICAgIFBBTDo6
Rm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nLAorICAgIFBBTDo6Rm9udFNtb290aGluZ01v
ZGU6OkFudGlhbGlhc2VkLAorICAgIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50
aWFsaWFzZWQsCisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZworICAg
ID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udE9yaWVudGF0
aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRPcmll
bnRhdGlvbiwKKyAgICBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwKKyAgICBQQUw6
OkZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiwKKyAg
ICBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkLAorICAgIFBBTDo6Tm9uQ0pLR2x5
cGhPcmllbnRhdGlvbjo6VXByaWdodAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMsCisgICAgUEFMOjpG
b250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVy
ZXM6OlllcywKKyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObworICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbj4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudFBv
c2l0aW9uLAorICAgIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsLAorICAgIFBBTDo6
Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0LAorICAgIFBBTDo6Rm9udFZhcmlhbnRQb3Np
dGlvbjo6U3VwZXJzY3JpcHQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxQQUw6OkZvbnRWYXJpYW50Q2Fwcz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgUEFMOjpGb250VmFyaWFudENhcHMsCisgICAgUEFMOjpGb250VmFyaWFudENhcHM6
Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGwsCisgICAgUEFMOjpGb250
VmFyaWFudENhcHM6OkFsbFNtYWxsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGUs
CisgICAgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZSwKKyAgICBQQUw6OkZvbnRWYXJp
YW50Q2Fwczo6VW5pY2FzZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZworICAg
ID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljRmlndXJlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6
OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0Zp
Z3VyZTo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdO
dW1iZXJzLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJl
cnMKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAor
ICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZywKKyAgICBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNp
bmc6OlByb3BvcnRpb25hbE51bWJlcnMsCisgICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFj
aW5nOjpUYWJ1bGFyTnVtYmVycworICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24sCisg
ICAgUEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsLAorICAgIFBBTDo6Rm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25zLAorICAgIFBBTDo6Rm9u
dFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlvbnMKKyAgICA+OworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGlu
YWw+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlh
bnROdW1lcmljT3JkaW5hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5v
cm1hbCwKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllcworICAgID47Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6Rm9udFZhcmlhbnROdW1lcmlj
U2xhc2hlZFplcm8+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8sCisgICAgUEFMOjpGb250VmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybzo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hl
ZFplcm86OlllcworICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBB
TDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKKyAgICBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlcywKKyAgICBQQUw6OkZvbnRWYXJpYW50
QWx0ZXJuYXRlczo6Tm9ybWFsLAorICAgIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0
b3JpY2FsRm9ybXMKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4geworICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQsCisgICAgUEFM
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCwKKyAgICBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzgsCisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6OkppczgzLAorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpK
aXM5MCwKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQsCisgICAg
UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQsCisgICAgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsLAorICAgIFBBTDo6Rm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5X
aWR0aCwKKyAgICBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCwKKyAgICBQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGwsCisgICAgUEFMOjpGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWwKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4geworICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1
YnksCisgICAgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCwKKyAgICBQQUw6
OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250V2lkdGhWYXJpYW50PiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRXaWR0aFZhcmlhbnQsCisgICAgUEFMOjpG
b250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsCisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50
OjpIYWxmV2lkdGgsCisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoLAorICAg
IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoCisgICAgPjsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpGb250U21hbGxDYXBzPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBQQUw6OkZvbnRTbWFsbENhcHMsCisgICAgUEFMOjpG
b250U21hbGxDYXBzOjpPZmYsCisgICAgUEFMOjpGb250U21hbGxDYXBzOjpPbgorICAgID47Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFBBTDo6S2VybmluZz4geworICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgUEFMOjpLZXJuaW5nLAorICAgIFBBTDo6S2Vy
bmluZzo6QXV0bywKKyAgICBQQUw6Oktlcm5pbmc6Ok5vcm1hbCwKKyAgICBQQUw6Oktlcm5pbmc6
Ok5vU2hpZnQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6
OkZvbnRPcHRpY2FsU2l6aW5nPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBQQUw6OkZvbnRPcHRpY2FsU2l6aW5nLAorICAgIFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVu
YWJsZWQsCisgICAgUEFMOjpGb250T3B0aWNhbFNpemluZzo6RGlzYWJsZWQKKyAgICA+OworfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxQQUw6OkZvbnRTdHlsZUF4aXM+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFBBTDo6Rm9udFN0eWxlQXhpcywKKyAg
ICBQQUw6OkZvbnRTdHlsZUF4aXM6OnNsbnQsCisgICAgUEFMOjpGb250U3R5bGVBeGlzOjppdGFs
CisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8UEFMOjpBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cywKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxl
ZEZvbnRzOjpObywKKyAgICBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMKKyAgICA+
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3RleHQvVW5pY29kZUJpZGkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9V
bmljb2RlQmlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmODE5OGVhMWIxNDY5ZWEyZjdiMWE0YmZmOWYyOWY5
NjcwMGU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQv
VW5pY29kZUJpZGkuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBQQUwgewor
CitlbnVtIEVVbmljb2RlQmlkaSB7CisgICAgVUJOb3JtYWwsCisgICAgRW1iZWQsCisgICAgT3Zl
cnJpZGUsCisgICAgSXNvbGF0ZSwKKyAgICBQbGFpbnRleHQsCisgICAgSXNvbGF0ZU92ZXJyaWRl
LAorfTsgCisKK2lubGluZSBib29sIGlzSXNvbGF0ZWQoY29uc3QgRVVuaWNvZGVCaWRpJiB1bmlj
b2RlQmlkaSkKK3sKKyAgICByZXR1cm4gdW5pY29kZUJpZGkgPT0gSXNvbGF0ZSB8fCB1bmljb2Rl
QmlkaSA9PSBJc29sYXRlT3ZlcnJpZGUgfHwgdW5pY29kZUJpZGkgPT0gUGxhaW50ZXh0OworfQor
CitpbmxpbmUgYm9vbCBpc092ZXJyaWRlKEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3sKKyAg
ICByZXR1cm4gdW5pY29kZUJpZGkgPT0gT3ZlcnJpZGUgfHwgdW5pY29kZUJpZGkgPT0gSXNvbGF0
ZU92ZXJyaWRlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Rl
eHQvV3JpdGluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9Xcml0aW5nTW9k
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNmYjdjZTc1ZTcyYjU5M2I1NTVkM2RkMGNjYjEwMjAyNjE4MGQxZGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvV3JpdGluZ01v
ZGUuaApAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGV4dERpcmVj
dGlvbi5oIgorI2luY2x1ZGUgPGFycmF5PgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFz
cyBXcml0aW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIFRvcFRvQm90dG9tID0gMCwgLy8gaG9yaXpv
bnRhbC10YgorICAgIEJvdHRvbVRvVG9wID0gMSwgLy8gaG9yaXpvbnRhbC1idAorICAgIExlZnRU
b1JpZ2h0ID0gMiwgLy8gdmVydGljYWwtbHIKKyAgICBSaWdodFRvTGVmdCA9IDMsIC8vIHZlcnRp
Y2FsLXJsCit9OworCitjb25zdGV4cHIgdW5zaWduZWQgbWFrZVRleHRGbG93SW5pdGFsaXplcihX
cml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3cml0aW5nTW9kZSkgPDwgMSB8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihkaXJlY3Rpb24pOworfQorCisvLyBEZWZpbmUgdGhlIHRleHQgZmxvdyBp
biB0ZXJtcyBvZiB0aGUgd3JpdGluZyBtb2RlIGFuZCB0aGUgdGV4dCBkaXJlY3Rpb24uIFRoZSBm
aXJzdAorLy8gcGFydCBpcyB0aGUgbGluZSBncm93aW5nIGRpcmVjdGlvbiBhbmQgdGhlIHNlY29u
ZCBwYXJ0IGlzIHRoZSBibG9jayBncm93aW5nIGRpcmVjdGlvbi4KK2VudW0gVGV4dEZsb3cgewor
ICAgIElubGluZUVhc3RCbG9ja1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5n
TW9kZTo6VG9wVG9Cb3R0b20sIFRleHREaXJlY3Rpb246OkxUUiksCisgICAgSW5saW5lV2VzdEJs
b2NrU291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bSwgVGV4dERpcmVjdGlvbjo6UlRMKSwKKyAgICBJbmxpbmVFYXN0QmxvY2tOb3J0aCA9IG1ha2VU
ZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wLCBUZXh0RGlyZWN0aW9u
OjpMVFIpLAorICAgIElubGluZVdlc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXpl
cihXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRleHREaXJlY3Rpb246OlJUTCksCisgICAgSW5s
aW5lU291dGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpM
ZWZ0VG9SaWdodCwgVGV4dERpcmVjdGlvbjo6TFRSKSwKKyAgICBJbmxpbmVTb3V0aEJsb2NrV2Vz
dCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBUZXh0
RGlyZWN0aW9uOjpSVEwpLAorICAgIElubGluZU5vcnRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93
SW5pdGFsaXplcihXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFRleHREaXJlY3Rpb246OkxUUiks
CisgICAgSW5saW5lTm9ydGhCbG9ja1dlc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRp
bmdNb2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVjdGlvbjo6UlRMKQorfTsKKworY29uc3RleHBy
IGlubGluZSBUZXh0RmxvdyBtYWtlVGV4dEZsb3coV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Rmxv
dz4obWFrZVRleHRGbG93SW5pdGFsaXplcih3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSk7Cit9CisK
K2NvbnN0ZXhwciB1bnNpZ25lZCBUZXh0Rmxvd1JldmVyc2VkTWFzayA9IDE7Citjb25zdGV4cHIg
dW5zaWduZWQgVGV4dEZsb3dGbGlwcGVkTWFzayA9IDI7Citjb25zdGV4cHIgdW5zaWduZWQgVGV4
dEZsb3dWZXJ0aWNhbE1hc2sgPSA0OworCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNSZXZlcnNl
ZFRleHRGbG93KFRleHRGbG93IHRleHRmbG93KQoreworICAgIHJldHVybiB0ZXh0ZmxvdyAmIFRl
eHRGbG93UmV2ZXJzZWRNYXNrOworfQorCitjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNGbGlwcGVk
VGV4dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCit7CisgICAgcmV0dXJuIHRleHRmbG93ICYgVGV4
dEZsb3dGbGlwcGVkTWFzazsKK30KKworY29uc3RleHByIGlubGluZSBib29sIGlzVmVydGljYWxU
ZXh0RmxvdyhUZXh0RmxvdyB0ZXh0ZmxvdykKK3sKKyAgICByZXR1cm4gdGV4dGZsb3cgJiBUZXh0
Rmxvd1ZlcnRpY2FsTWFzazsKK30KKworY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBlZExp
bmVzVGV4dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCit7CisgICAgcmV0dXJuIGlzRmxpcHBlZFRl
eHRGbG93KHRleHRmbG93KSAhPSBpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpOworfQorCisv
LyBMaW5lcyBoYXZlIHZlcnRpY2FsIG9yaWVudGF0aW9uOyBtb2RlcyB2ZXJ0aWNhbC1sciBvciB2
ZXJ0aWNhbC1ybC4KK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgcmV0dXJuIGlzVmVydGljYWxUZXh0Rmxv
dyhtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb246OkxUUikpOworfQorCisv
LyBCbG9jayBwcm9ncmVzc2lvbiBpbmNyZWFzZXMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0
byBub3JtYWw7IG1vZGVzIHZlcnRpY2FsLXJsIG9yIGhvcml6b250YWwtYnQuCitjb25zdGV4cHIg
aW5saW5lIGJvb2wgaXNGbGlwcGVkV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUp
Cit7CisgICAgcmV0dXJuIGlzRmxpcHBlZFRleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9k
ZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Cit9CisKKy8vIExpbmVzIGhhdmUgaG9yaXpvbnRhbCBv
cmllbnRhdGlvbjsgbW9kZXMgaG9yaXpvbnRhbC10YiBvciBob3Jpem9udGFsLWJ0LgorY29uc3Rl
eHByIGlubGluZSBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKQoreworICAgIHJldHVybiAhaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2Rl
KTsKK30KKworLy8gQm90dG9tIG9mIHRoZSBsaW5lIG9jY3VycyBlYXJsaWVyIGluIHRoZSBibG9j
azsgbW9kZXMgdmVydGljYWwtbHIgb3IgaG9yaXpvbnRhbC1idC4KK2NvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBpc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQor
eworICAgIHJldHVybiBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5n
TW9kZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Cit9CisKK2VudW0gY2xhc3MgTG9naWNhbEJveFNp
ZGUgOiB1aW50OF90IHsKKyAgICBCbG9ja1N0YXJ0LAorICAgIElubGluZUVuZCwKKyAgICBCbG9j
a0VuZCwKKyAgICBJbmxpbmVTdGFydAorfTsKKworZW51bSBjbGFzcyBCb3hTaWRlIDogdWludDhf
dCB7CisgICAgVG9wLAorICAgIFJpZ2h0LAorICAgIEJvdHRvbSwKKyAgICBMZWZ0Cit9OworCitl
bnVtIGNsYXNzIExvZ2ljYWxCb3hDb3JuZXIgOiB1aW50OF90IHsKKyAgICBTdGFydFN0YXJ0LAor
ICAgIFN0YXJ0RW5kLAorICAgIEVuZFN0YXJ0LAorICAgIEVuZEVuZAorfTsKKworLy8gVGhlIG1h
cHBpbmcgaXMgd2l0aCB0aGUgZmlyc3Qgc3RhcnQvZW5kIGdpdmluZyB0aGUgYmxvY2sgYXhpcyBz
aWRlLAorLy8gYW5kIHRoZSBzZWNvbmQgdGhlIGlubGluZS1heGlzIHNpZGUsIGkuZS4gcGF0dGVy
bmVkIGFzICdib3JkZXItYmxvY2staW5saW5lLXJhZGl1cycuCitlbnVtIGNsYXNzIEJveENvcm5l
ciA6IHVpbnQ4X3QgeworICAgIFRvcExlZnQsCisgICAgVG9wUmlnaHQsCisgICAgQm90dG9tUmln
aHQsCisgICAgQm90dG9tTGVmdAorfTsKKworZW51bSBjbGFzcyBMb2dpY2FsQm94QXhpcyA6IHVp
bnQ4X3QgeworICAgIElubGluZSwKKyAgICBCbG9jaworfTsKKworZW51bSBjbGFzcyBCb3hBeGlz
IDogdWludDhfdCB7CisgICAgSG9yaXpvbnRhbCwKKyAgICBWZXJ0aWNhbAorfTsKKworY29uc3Rl
eHByIHN0ZDo6YXJyYXk8Qm94U2lkZSwgND4gYWxsQm94U2lkZXMgPSB7IEJveFNpZGU6OlRvcCwg
Qm94U2lkZTo6UmlnaHQsIEJveFNpZGU6OkJvdHRvbSwgQm94U2lkZTo6TGVmdCB9OworCitjb25z
dGV4cHIgaW5saW5lIGJvb2wgaXNIb3Jpem9udGFsUGh5c2ljYWxTaWRlKEJveFNpZGUgcGh5c2lj
YWxTaWRlKQoreworICAgIHJldHVybiBwaHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6TGVmdCB8fCBw
aHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6UmlnaHQ7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94
U2lkZSBtaXJyb3JQaHlzaWNhbFNpZGUoQm94U2lkZSBwaHlzaWNhbFNpZGUpCit7CisgICAgLy8g
dG9wIDwtPiBib3R0b20gYW5kIGxlZnQgPC0+IHJpZ2h0IGNvbnZlcnNpb24KKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Qm94U2lkZT4oKHN0YXRpY19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIDIp
ICUgNCk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSByb3RhdGVQaHlzaWNhbFNpZGUo
Qm94U2lkZSBwaHlzaWNhbFNpZGUpCit7CisgICAgLy8gdG9wIDwtPiBsZWZ0IGFuZCByaWdodCA8
LT4gYm90dG9tIGNvbnZlcnNpb24KKyAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9u
dGFsUGh5c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJv
eFNpZGU+KChzdGF0aWNfY2FzdDxpbnQ+KHBoeXNpY2FsU2lkZSkgKyAoaG9yaXpvbnRhbFNpZGUg
PyAxIDogMykpICUgNCk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2Fs
U2lkZVRvUGh5c2ljYWxTaWRlKFRleHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94U2lkZSBsb2dp
Y2FsU2lkZSkKK3sKKyAgICBCb3hTaWRlIHBoeXNpY2FsU2lkZSA9IHN0YXRpY19jYXN0PEJveFNp
ZGU+KGxvZ2ljYWxTaWRlKTsKKyAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFs
UGh5c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7CisKKyAgICBpZiAoaXNWZXJ0aWNhbFRleHRGbG93
KHRleHRmbG93KSkKKyAgICAgICAgcGh5c2ljYWxTaWRlID0gcm90YXRlUGh5c2ljYWxTaWRlKHBo
eXNpY2FsU2lkZSk7CisKKyAgICBpZiAoKGhvcml6b250YWxTaWRlICYmIGlzUmV2ZXJzZWRUZXh0
Rmxvdyh0ZXh0ZmxvdykpIHx8ICghaG9yaXpvbnRhbFNpZGUgJiYgaXNGbGlwcGVkVGV4dEZsb3co
dGV4dGZsb3cpKSkKKyAgICAgICAgcGh5c2ljYWxTaWRlID0gbWlycm9yUGh5c2ljYWxTaWRlKHBo
eXNpY2FsU2lkZSk7CisKKyAgICByZXR1cm4gcGh5c2ljYWxTaWRlOworfQorCitjb25zdGV4cHIg
aW5saW5lIEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGUgbG9naWNhbFNpZGUpCit7CisgICAgLy8gU2V0IHRo
ZSBkaXJlY3Rpb24gc3VjaCB0aGF0IHNpZGUgaXMgbWlycm9yZWQgaWYgaXNGbGlwcGVkV3JpdGlu
Z01vZGUoKSBpcyB0cnVlCisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBpc0ZsaXBwZWRX
cml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0
aW9uOjpMVFI7CisgICAgcmV0dXJuIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRl
eHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBsb2dpY2FsU2lkZSk7Cit9CisKK2NvbnN0
ZXhwciBpbmxpbmUgQm94Q29ybmVyIG1hcExvZ2ljYWxDb3JuZXJUb1BoeXNpY2FsQ29ybmVyKFRl
eHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94Q29ybmVyIGxvZ2ljYWxCb3hDb3JuZXIpCit7Cisg
ICAgYm9vbCBpc0Jsb2NrU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3Ju
ZXI6OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94Q29ybmVyOjpT
dGFydEVuZDsKKyAgICBib29sIGlzSW5saW5lU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExv
Z2ljYWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2Fs
Qm94Q29ybmVyOjpFbmRTdGFydDsKKyAgICBpZiAoaXNCbG9ja1N0YXJ0ID09IGlzRmxpcHBlZFRl
eHRGbG93KHRleHRmbG93KSkgeworICAgICAgICBpZiAoaXNJbmxpbmVTdGFydCA9PSBpc1JldmVy
c2VkVGV4dEZsb3codGV4dGZsb3cpKQorICAgICAgICAgICAgcmV0dXJuIEJveENvcm5lcjo6Qm90
dG9tUmlnaHQ7CisgICAgfSBlbHNlIGlmIChpc0lubGluZVN0YXJ0ICE9IGlzUmV2ZXJzZWRUZXh0
Rmxvdyh0ZXh0ZmxvdykpCisgICAgICAgIHJldHVybiBCb3hDb3JuZXI6OlRvcExlZnQ7CisgICAg
aWYgKGlzQmxvY2tTdGFydCA9PSBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KHRleHRmbG93KSkKKyAg
ICAgICAgcmV0dXJuIEJveENvcm5lcjo6Qm90dG9tTGVmdDsKKyAgICByZXR1cm4gQm94Q29ybmVy
OjpUb3BSaWdodDsKK30KKworY29uc3RleHByIGlubGluZSBCb3hBeGlzIG1hcExvZ2ljYWxBeGlz
VG9QaHlzaWNhbEF4aXMoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hBeGlzIGxvZ2ljYWxB
eGlzKQoreworICAgIGlmIChpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpKQorICAgICAgICBy
ZXR1cm4gbG9naWNhbEF4aXMgPT0gTG9naWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6OlZl
cnRpY2FsIDogQm94QXhpczo6SG9yaXpvbnRhbDsKKyAgICByZXR1cm4gbG9naWNhbEF4aXMgPT0g
TG9naWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6Okhvcml6b250YWwgOiBCb3hBeGlzOjpW
ZXJ0aWNhbDsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzMDc4OWQ5M2Mw
N2IwZTdjMzAwNGE3M2U3NzQ4OGZkNmFjMjkyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9jZi9IeXBoZW5hdGlvbkNGLmNwcApAQCAtMCwwICsxLDg2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkh5cGhlbmF0aW9u
LmgiCisKKyNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RpbnlMUlVDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+CitjbGFzcyBUaW55TFJVQ2Fj
aGVQb2xpY3k8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4geworcHVibGljOgor
ICAgIHN0YXRpYyBUaW55TFJVQ2FjaGU8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVm
Pj4mIGNhY2hlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaW55TFJV
Q2FjaGU8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4+IGNhY2hlOworICAgICAg
ICByZXR1cm4gY2FjaGU7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNLZXlOdWxsKGNvbnN0
IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gbG9j
YWxlSWRlbnRpZmllci5pc051bGwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENG
TG9jYWxlUmVmPiBjcmVhdGVWYWx1ZUZvck51bGxLZXkoKQorICAgIHsKKyAgICAgICAgLy8gQ0Yg
aHlwaGVuYXRpb24gZnVuY3Rpb25zIHVzZSBsb2NhbGUgKHJlZ2lvbmFsIGZvcm1hdHMpIGxhbmd1
YWdlLCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoIHByaW1hcnkgVUkgbGFuZ3VhZ2Us
CisgICAgICAgIC8vIHNvIHdlIGNhbid0IHVzZSBkZWZhdWx0IGxvY2FsZSBoZXJlLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzE0ODk3NjY0Pi4KKyAgICAgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBs
b2NhbGUgPSBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlZmF1
bHRMYW5ndWFnZSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIENG
U3RyaW5nSXNIeXBoZW5hdGlvbkF2YWlsYWJsZUZvckxvY2FsZShsb2NhbGUuZ2V0KCkpID8gbG9j
YWxlIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENGTG9jYWxlUmVm
PiBjcmVhdGVWYWx1ZUZvcktleShjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQor
ICAgIHsKKyAgICAgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBhZG9wdENGKENG
TG9jYWxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGxvY2FsZUlkZW50aWZpZXIuc3RyaW5n
KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworCisgICAgICAgIHJldHVybiBDRlN0cmluZ0lz
SHlwaGVuYXRpb25BdmFpbGFibGVGb3JMb2NhbGUobG9jYWxlLmdldCgpKSA/IGxvY2FsZSA6IG51
bGxwdHI7CisgICAgfQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgY3JlYXRlS2V5Rm9yU3RvcmFn
ZShjb25zdCBBdG9tU3RyaW5nJiBrZXkpIHsgcmV0dXJuIGtleTsgfQorfTsKK30KKworbmFtZXNw
YWNlIFBBTCB7CisKK2Jvb2wgY2FuSHlwaGVuYXRlKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlk
ZW50aWZpZXIpCit7CisgICAgcmV0dXJuIFRpbnlMUlVDYWNoZVBvbGljeTxBdG9tU3RyaW5nLCBS
ZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+Pjo6Y2FjaGUoKS5nZXQobG9jYWxlSWRlbnRpZmllcik7Cit9
CisKK3NpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldyB0ZXh0LCBzaXplX3QgYmVm
b3JlSW5kZXgsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCit7CisgICAgUmV0
YWluUHRyPENGTG9jYWxlUmVmPiBsb2NhbGUgPSBUaW55TFJVQ2FjaGVQb2xpY3k8QXRvbVN0cmlu
ZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj46OmNhY2hlKCkuZ2V0KGxvY2FsZUlkZW50aWZpZXIp
OworCisgICAgQ0ZPcHRpb25GbGFncyBzZWFyY2hBY3Jvc3NXb3JkQm91bmRhcmllcyA9IDE7Cisg
ICAgQ0ZJbmRleCByZXN1bHQgPSBDRlN0cmluZ0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZvcmVJ
bmRleCh0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSwgYmVmb3JlSW5k
ZXgsIENGUmFuZ2VNYWtlKDAsIHRleHQubGVuZ3RoKCkpLCBzZWFyY2hBY3Jvc3NXb3JkQm91bmRh
cmllcywgbG9jYWxlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gcmVzdWx0ID09IGtDRk5v
dEZvdW5kID8gMCA6IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRCb3VuZGFyaWVzLm1tIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41MTA2OGMzYzg4NGNiOWFiZjI0YWI4MTI3ZTVmMzBhZTMwNDJkMGRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L21hYy9UZXh0Qm91bmRhcmllcy5tbQpA
QCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRleHRCb3Vu
ZGFyaWVzLmgiCisKKyNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQgPENvcmVGb3Vu
ZGF0aW9uL0NGU3RyaW5nVG9rZW5pemVyLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKyNpbXBvcnQgPHVuaWNvZGUvdWJyay5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5o
PgorI2ltcG9ydCA8dW5pY29kZS91c3RyaW5nLmg+CisjaW1wb3J0IDx1bmljb2RlL3V0eXBlcy5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVmll
dy5oPgorI2ltcG9ydCA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KKyNpbXBvcnQgPHd0
Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaD4KKyNpbXBvcnQgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKK25hbWVzcGFjZSBQQUwgeworCisjaWYgIVVTRShBUFBL
SVQpCisKK3N0YXRpYyBib29sIGlzU2tpcENoYXJhY3RlcihVQ2hhcjMyIGMpCit7CisgICAgcmV0
dXJuIGMgPT0gMHhBMCB8fCBjID09ICdcbicgfHwgYyA9PSAnLicgfHwgYyA9PSAnLCcgfHwgYyA9
PSAnIScgIHx8IGMgPT0gJz8nIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IHVfaXNzcGFjZShj
KTsKK30KKworc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKFVDaGFyMzIgYykKK3sK
KyAgICByZXR1cm4gYyA9PSAweEEwIHx8IGMgPT0gJ1xuJyB8fCB1X2lzc3BhY2UoYyk7Cit9CisK
K3N0YXRpYyBib29sIGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAg
IC8vIEFtcGVyc2FuZCBpcyBhbiBleGNlcHRpb24gYWRkZWQgdG8gdHJlYXQgQVQmVCBhcyBhIHNp
bmdsZSB3b3JkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjIyNjQ+KS4KKyAgICByZXR1cm4gIUNG
Q2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVm
aW5lZChrQ0ZDaGFyYWN0ZXJTZXRBbHBoYU51bWVyaWMpLCBjKSAmJiBjICE9ICcmJzsKK30KKwor
c3RhdGljIGJvb2wgaXNTeW1ib2xDaGFyYWN0ZXIoVUNoYXIzMiBjKQoreworICAgIHJldHVybiBD
RkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rlck1lbWJlcihDRkNoYXJhY3RlclNldEdldFByZWRl
ZmluZWQoa0NGQ2hhcmFjdGVyU2V0U3ltYm9sKSwgYyk7Cit9CisKK3N0YXRpYyBib29sIGlzQW1i
aWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgLy8gVGhl
c2UgYXJlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmVoYXZlIGFzIHdvcmQgYm91bmRhcmllcywgYnV0
IGNhbiBhcHBlYXIgd2l0aGluIHdvcmRzLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJ1wnJyB8
fCBjaGFyYWN0ZXIgPT0gcmlnaHRTaW5nbGVRdW90YXRpb25NYXJrIHx8IGNoYXJhY3RlciA9PSBo
ZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbTsKK30KKworc3RhdGljIENGU3RyaW5nVG9rZW5pemVy
UmVmIHRva2VuaXplckZvclN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCit7CisgICAgc3RhdGljIGF1
dG8gbG9jYWxlID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAgICAgICAgY29uc3QgY2hhciog
bG9jYWxJRCA9IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpOworICAgICAgICBhdXRvIGN1cnJl
bnRMb2NhbGVJRCA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGxvY2FsSUQpLCBz
dHJsZW4obG9jYWxJRCksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlLCBrQ0ZBbGxvY2F0
b3JOdWxsKSk7CisgICAgICAgIHJldHVybiBhZG9wdENGKENGTG9jYWxlQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGN1cnJlbnRMb2NhbGVJRC5nZXQoKSkpOworICAgIH0oKSk7CisKKyAgICBp
ZiAoIWxvY2FsZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDRlJhbmdl
IGVudGlyZVJhbmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyKSk7ICAg
IAorCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRlN0cmluZ1Rva2VuaXpl
clJlZj4+IHRva2VuaXplcjsKKyAgICBpZiAoIXRva2VuaXplci5nZXQoKSkKKyAgICAgICAgdG9r
ZW5pemVyLmdldCgpID0gYWRvcHRDRihDRlN0cmluZ1Rva2VuaXplckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBzdHIsIGVudGlyZVJhbmdlLCBrQ0ZTdHJpbmdUb2tlbml6ZXJVbml0V29yZEJv
dW5kYXJ5LCBsb2NhbGUuZ2V0KCkuZ2V0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIENGU3RyaW5n
VG9rZW5pemVyU2V0U3RyaW5nKHRva2VuaXplci5nZXQoKS5nZXQoKSwgc3RyLCBlbnRpcmVSYW5n
ZSk7CisgICAgcmV0dXJuIHRva2VuaXplci5nZXQoKS5nZXQoKTsKK30KKworLy8gU2ltcGxlIGNh
c2U6IEEgd29yZCBpcyBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzIGRlbGltaXRlZCBieSBhIHNwZWNp
YWwgc2V0IG9mIHdvcmQtZGVsaW1pdGluZyBjaGFyYWN0ZXJzLgorc3RhdGljIHZvaWQgZmluZFNp
bXBsZVdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFy
dCwgaW50KiBlbmQpCit7CisgICAgQVNTRVJUKHBvc2l0aW9uID49IDApOworICAgIEFTU0VSVChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4dC5sZW5ndGgoKSk7CisKKyAgICB1
bnNpZ25lZCBzdGFydFBvcyA9IHBvc2l0aW9uOworICAgIHdoaWxlIChzdGFydFBvcyA+IDApIHsK
KyAgICAgICAgaW50IGkgPSBzdGFydFBvczsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZv
cmVTdGFydFBvczsKKyAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hhcmFjdGVyQmVmb3Jl
U3RhcnRQb3MpOworICAgICAgICBpZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0
ZXJCZWZvcmVTdGFydFBvcykpIHsKKyAgICAgICAgICAgIEFTU0VSVChpID49IDApOworICAgICAg
ICAgICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAo
IWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlU3RhcnRQb3MpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckJl
Zm9yZUJlZm9yZVN0YXJ0UG9zOworICAgICAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2hh
cmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpOworICAgICAgICAgICAgaWYgKGlzV29yZERlbGlt
aXRpbmdDaGFyYWN0ZXIoY2hhcmFjdGVyQmVmb3JlQmVmb3JlU3RhcnRQb3MpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFUxNl9CQUNLXzEodGV4dCwgMCwgc3Rh
cnRQb3MpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBlbmRQb3MgPSBwb3NpdGlvbjsKKyAg
ICB3aGlsZSAoZW5kUG9zIDwgdGV4dC5sZW5ndGgoKSkgeworICAgICAgICBVQ2hhcjMyIGNoYXJh
Y3RlcjsKKyAgICAgICAgVTE2X0dFVCh0ZXh0LCAwLCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNo
YXJhY3Rlcik7CisgICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3Rl
cikpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBlbmRQb3M7CisgICAgICAgICAgICBVMTZf
RldEXzEodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8PSB0
ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChpID09IHRleHQubGVuZ3RoKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyRW5k
UG9zOworICAgICAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5sZW5ndGgoKSwgY2hhcmFj
dGVyQWZ0ZXJFbmRQb3MpOworICAgICAgICAgICAgaWYgKCFpc0FtYmlndW91c0JvdW5kYXJ5Q2hh
cmFjdGVyKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAoaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJBZnRlckVuZFBvcykpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVu
ZFBvcywgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgLy8gVGhlIHRleHQgbWF5IGNvbnNp
c3Qgb2YgYWxsIGRlbGltaXRlciBjaGFyYWN0ZXJzIChlLmcuICIrKysrKysrKyIgb3IgYSBzZXJp
ZXMgb2YgZW1vamkpLCBhbmQgcmV0dXJuaW5nIGFuIGVtcHR5IHJhbmdlCisgICAgLy8gbWFrZXMg
bm8gc2Vuc2UgKGFuZCBkb2Vzbid0IG1hdGNoIGZpbmRDb21wbGV4V29yZEJvdW5kYXJ5KCkgYmVo
YXZpb3IpLgorICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MgJiYgZW5kUG9zIDwgdGV4dC5sZW5n
dGgoKSkgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgVTE2X0dFVCh0ZXh0
LCAwLCBlbmRQb3MsIHRleHQubGVuZ3RoKCksIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChpc1N5
bWJvbENoYXJhY3RlcihjaGFyYWN0ZXIpKQorICAgICAgICAgICAgVTE2X0ZXRF8xKHRleHQsIGVu
ZFBvcywgdGV4dC5sZW5ndGgoKSk7CisgICAgfQorCisgICAgKnN0YXJ0ID0gc3RhcnRQb3M7Cisg
ICAgKmVuZCA9IGVuZFBvczsKK30KKworLy8gQ29tcGxleCBjYXNlOiB1c2UgQ0ZTdHJpbmdUb2tl
bml6ZXIgdG8gZmluZCB3b3JkIGJvdW5kYXJ5Lgorc3RhdGljIHZvaWQgZmluZENvbXBsZXhXb3Jk
Qm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCog
ZW5kKQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2hhclN0cmluZyA9IHRleHQuY3Jl
YXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpOworCisgICAgQ0ZTdHJpbmdUb2tlbml6ZXJSZWYg
dG9rZW5pemVyID0gdG9rZW5pemVyRm9yU3RyaW5nKGNoYXJTdHJpbmcuZ2V0KCkpOworICAgIGlm
ICghdG9rZW5pemVyKSB7CisgICAgICAgIC8vIEVycm9yIGNyZWF0aW5nIHRva2VuaXplciwgc28g
anVzdCB1c2Ugc2ltcGxlIGZ1bmN0aW9uLgorICAgICAgICBmaW5kU2ltcGxlV29yZEJvdW5kYXJ5
KHRleHQsIHBvc2l0aW9uLCBzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIENGU3RyaW5nVG9rZW5pemVyVG9rZW5UeXBlIHRva2VuID0gQ0ZTdHJpbmdUb2tlbml6ZXJH
b1RvVG9rZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOworICAgIGlmICh0b2tlbiA9PSBr
Q0ZTdHJpbmdUb2tlbml6ZXJUb2tlbk5vbmUpIHsKKyAgICAgICAgLy8gTm8gdG9rZW4gZm91bmQ6
IHNlbGVjdCBlbnRpcmUgYmxvY2suCisgICAgICAgIC8vIE5COiBJIG5ldmVyIGhpdCB0aGlzIHNl
Y3Rpb24gaW4gYWxsIG15IHRlc3RpbmcuCisgICAgICAgICpzdGFydCA9IDA7CisgICAgICAgICpl
bmQgPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0ZSYW5n
ZSByZXN1bHQgPSBDRlN0cmluZ1Rva2VuaXplckdldEN1cnJlbnRUb2tlblJhbmdlKHRva2VuaXpl
cik7CisgICAgKnN0YXJ0ID0gcmVzdWx0LmxvY2F0aW9uOworICAgICplbmQgPSByZXN1bHQubG9j
YXRpb24gKyByZXN1bHQubGVuZ3RoOworfQorCisjZW5kaWYKKwordm9pZCBmaW5kV29yZEJvdW5k
YXJ5KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkK
K3sKKyNpZiBVU0UoQVBQS0lUKQorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMo
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuY3JlYXRlTlNT
dHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXSk7CisgICAgTlNSYW5nZSByYW5nZSA9IFthdHRy
aWJ1dGVkU3RyaW5nIGRvdWJsZUNsaWNrQXRJbmRleDpzdGQ6Om1pbjx1bnNpZ25lZD4ocG9zaXRp
b24sIHRleHQubGVuZ3RoKCkgLSAxKV07CisgICAgKnN0YXJ0ID0gcmFuZ2UubG9jYXRpb247Cisg
ICAgKmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOworI2Vsc2UKKyAgICB1bnNp
Z25lZCBwb3MgPSBwb3NpdGlvbjsKKyAgICBpZiAocG9zID09IHRleHQubGVuZ3RoKCkgJiYgcG9z
KQorICAgICAgICAtLXBvczsKKworICAgIC8vIEZvciBjb21wbGV4IHRleHQgKFRoYWksIEphcGFu
ZXNlLCBDaGluZXNlKSwgdmlzaWJsZV91bml0cyB3aWxsIHBhc3MgdGhlIHRleHQgaW4gYXMgYSAK
KyAgICAvLyBzaW5nbGUgY29udGlndW91cyBydW4gb2YgY2hhcmFjdGVycywgcHJvdmlkaW5nIGFz
IG11Y2ggY29udGV4dCBhcyBpcyBwb3NzaWJsZS4KKyAgICAvLyBXZSBvbmx5IG5lZWQgb25lIGNo
YXJhY3RlciB0byBkZXRlcm1pbmUgaWYgdGhlIHRleHQgaXMgY29tcGxleC4KKyAgICBVQ2hhcjMy
IGNoOworICAgIHVuc2lnbmVkIGkgPSBwb3M7CisgICAgVTE2X05FWFQodGV4dCwgaSwgdGV4dC5s
ZW5ndGgoKSwgY2gpOworICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9yV29y
ZEJvdW5kYXJ5KGNoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGltcHJvdmVzIG91ciB3
b3JkIGJvdW5kYXJ5IGJlaGF2aW9yLCBidXQgZG9lc24ndCBhY3R1YWxseSBnbyBmYXIgZW5vdWdo
LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODg1Mzk1MT4gVGFrZSBjb21wbGV4IHdvcmQg
Ym91bmRhcnkgZmluZGluZyBwYXRoIHdoZW4gbmVjZXNzYXJ5CisgICAgaWYgKCFpc0NvbXBsZXgp
IHsKKyAgICAgICAgLy8gQ2hlY2sgYWdhaW4gZm9yIGNvbXBsZXggdGV4dCwgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBydW4uCisgICAgICAgIGkgPSAwOworICAgICAgICBVMTZfTkVYVCh0ZXh0LCBpLCB0
ZXh0Lmxlbmd0aCgpLCBjaCk7CisgICAgICAgIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4dEZv
cldvcmRCb3VuZGFyeShjaCk7CisgICAgfQorCisgICAgaWYgKGlzQ29tcGxleCkKKyAgICAgICAg
ZmluZENvbXBsZXhXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOworICAg
IGVsc2UKKyAgICAgICAgZmluZFNpbXBsZVdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgc3Rh
cnQsIGVuZCk7CisKKyNkZWZpbmUgTE9HX1dPUkRfQlJFQUsgMAorI2lmIExPR19XT1JEX0JSRUFL
CisgICAgYXV0byB1bmlTdHJpbmcgPSB0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmco
KTsKKyAgICBhdXRvIGZvdW5kV29yZCA9IHRleHQuc3Vic3RyaW5nKCpzdGFydCwgKmVuZCAtICpz
dGFydCkuY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5TTG9nKEAiJXNfQlJF
QUsgJyVAJyAoJWQsJWQpIGluICclQCcgKCVwKSBhdCAlZCwgbGVuZ3RoPSVkIiwgaXNDb21wbGV4
ID8gIkNPTVBMRVgiIDogIlNJTVBMRSIsIGZvdW5kV29yZC5nZXQoKSwgKnN0YXJ0LCAqZW5kLCB1
bmlTdHJpbmcuZ2V0KCksIHVuaVN0cmluZy5nZXQoKSwgcG9zaXRpb24sIHRleHQubGVuZ3RoKCkp
OworI2VuZGlmCisgICAgCisjZW5kaWYKK30KKwordm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0
cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKK3sKKyAgICBpbnQgc3RhcnQ7
CisgICAgZmluZFdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgJnN0YXJ0LCBlbmQpOworfQor
CitpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9u
LCBib29sIGZvcndhcmQpCit7ICAgCisjaWYgVVNFKEFQUEtJVCkKKyAgICBTdHJpbmcgdGV4dFdp
dGhvdXRVbnBhaXJlZFN1cnJvZ2F0ZXM7CisgICAgaWYgKGhhc1VucGFpcmVkU3Vycm9nYXRlKHRl
eHQpKSB7CisgICAgICAgIHRleHRXaXRob3V0VW5wYWlyZWRTdXJyb2dhdGVzID0gcmVwbGFjZVVu
cGFpcmVkU3Vycm9nYXRlc1dpdGhSZXBsYWNlbWVudENoYXJhY3Rlcih0ZXh0LnRvU3RyaW5nV2l0
aG91dENvcHlpbmcoKSk7CisgICAgICAgIHRleHQgPSB0ZXh0V2l0aG91dFVucGFpcmVkU3Vycm9n
YXRlczsKKyAgICB9CisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5jcmVhdGVOU1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCkuZ2V0KCldKTsKKyAgICByZXR1cm4gW2F0dHJpYnV0ZWRTdHJpbmcgbmV4
dFdvcmRGcm9tSW5kZXg6cG9zaXRpb24gZm9yd2FyZDpmb3J3YXJkXTsKKyNlbHNlCisgICAgLy8g
VGhpcyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBub24taVBob25l
IHZlcnNpb24sIGJ1dCBpdCB3b3JrcworICAgIC8vIGZvciB0aGUgY29udGV4dHMgaW4gd2hpY2gg
aXQgaXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJlIHdpbGwgYmUKKyAgICAvLyB0
dW5lZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBrZXli
b2FyZCBhbmQgdGV4dCBlZGl0aW5nLgorICAgIGludCBwb3MgPSBwb3NpdGlvbjsKKyAgICBVQnJl
YWtJdGVyYXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKKyAgICBpZiAo
Ym91bmRhcnkpIHsKKyAgICAgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgICAgICBwb3MgPSB1YnJrX2ZvbGxvd2luZyhib3VuZGFyeSwgcG9zKTsKKyAgICAg
ICAgICAgICAgICBpZiAocG9zID09IFVCUktfRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgcG9z
ID0gdGV4dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwb3MpIDwgdGV4dC5sZW5ndGgoKSAmJiAoIXBvcyB8fCAhaXNTa2lwQ2hhcmFjdGVyKHRl
eHRbcG9zIC0gMV0pKSAmJiBpc1NraXBDaGFyYWN0ZXIodGV4dFtwb3NdKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcG9zID0gdWJya19wcmVj
ZWRpbmcoYm91bmRhcnksIHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBVQlJLX0RP
TkUpCisgICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7CisgICAgICAgICAgICB9IHdoaWxlIChw
b3MgPiAwICYmIGlzU2tpcENoYXJhY3Rlcih0ZXh0W3Bvc10pICYmICFpc1doaXRlc3BhY2VDaGFy
YWN0ZXIodGV4dFtwb3MgLSAxXSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwb3M7
CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9tYWMvVGV4dENoZWNraW5nTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiNjczNjg5
ZTBiMjkwMGY3ZjZmNTYyNTE1MDhmMThhMzE0MjNiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbQpAQCAtMCwwICsx
LDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXh0Q2hl
Y2tpbmcuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitOU1RleHRDaGVja2luZ1R5cGVzIG5zVGV4
dENoZWNraW5nVHlwZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHR5cGVzKQoreworICAg
IE5TVGV4dENoZWNraW5nVHlwZXMgbWFzayA9IDA7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKKyAgICAgICAgbWFzayB8PSBOU1RleHRDaGVja2lu
Z1R5cGVTcGVsbGluZzsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6
R3JhbW1hcikpCisgICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAg
ICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpCisgICAgICAgIG1h
c2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBlTGluazsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6UXVvdGUpKQorICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlw
ZVF1b3RlOworICAgIGlmICh0eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkK
KyAgICAgICAgbWFzayB8PSBOU1RleHRDaGVja2luZ1R5cGVEYXNoOworICAgIGlmICh0eXBlcy5j
b250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpCisgICAgICAgIG1hc2sgfD0g
TlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pKQorICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNr
aW5nVHlwZUNvcnJlY3Rpb247CisgICAgcmV0dXJuIG1hc2s7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFBBTAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAwMDQyY2Mz
NzNlM2RlMDc1MzlmMjliMWQ4ZmNiNjVmNGZjYjkyZWU5Li4yNTQzMDgzZWZmM2Q3MzExNmYzYjcy
ZWY0OGViZDg4NjY2OWE1YTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjI0MSwxNCArMjI0MSw5IEBA
IHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5jcHAKIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5j
cHAKIHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKLXBsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuY3BwCi1wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcAogcGxhdGZvcm0v
dGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKIHBsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBw
aW5nLmNwcAogcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAKLXBsYXRmb3JtL3RleHQv
UXVvdGVkUHJpbnRhYmxlLmNwcAotcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCi1w
bGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMu
Y3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0NKSy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzc5ZmM0ZDc4YzYyMTA1MTg5
NjFlZjFjNjQxMzIzN2E1YWM3NDQwZC4uN2IxMzgxMmZmYzFjZjkyODAwYzY4ZWVmZDc3OTU3NzJl
ZmFmZDMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01OTAsMTIgKzU5MCw5IEBAIHBs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCiBwbGF0Zm9ybS9uZXR3b3Jr
L21hYy9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbQogcGxhdGZvcm0vbmV0d29yay9tYWMvVVRJ
VXRpbGl0aWVzLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVzcG9uc2UubW0K
LXBsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKIHBsYXRmb3JtL3RleHQvY29jb2Ev
TG9jYWxlQ29jb2EubW0KIHBsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxpemVkRGF0ZUNhY2hlLm1t
CiBwbGF0Zm9ybS90ZXh0L2lvcy9UZXh0RW5jb2RpbmdSZWdpc3RyeUlPUy5tbQotcGxhdGZvcm0v
dGV4dC9tYWMvVGV4dEJvdW5kYXJpZXMubW0KLXBsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2lu
Z01hYy5tbQogcGxhdGZvcm0vdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KIHBs
YXRmb3JtL3hyL2NvY29hL1BsYXRmb3JtWFJDb2NvYS5tbQogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAzMjc5OTc5YzQ1MDY1MjlkM2Y1YjczMzcxOTlmYTgxY2ViNGVjMzdkLi5m
Mzk3YmVhOGQ2NWU2YTQ5MzNjMDQ2MzNkMzI5MmI3MmVkNzA5MzRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MzgsNyArNDM4
LDYgQEAKIAkJMTQyMDExQjcwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMDEx
QjUwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MkI5N0NBMTMxMzg5NDMw
MDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M4MTMxMzg5NDMwMDhCRUY0QiAvKiBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDMyRTg0NzBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDMy
RTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ0NzZBQTgxNURDNEJCMTAwMzA1REIy
IC8qIFdyaXRpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDQ3NkFBNzE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQ5RTI0QzEwN0Q0
QTg0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxi
YWNrRGF0YS5oICovOyB9OwogCQkxNDc3RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogQmFja0Zvcndh
cmRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDc5RkFFRTEwOUFFMzc1
MDBERUQ2NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ3OUZBRTYxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCAq
LzsgfTsKQEAgLTYzMCw2ICs2MjksNyBAQAogCQkxQzQzREU2QjIyQUI0QjhBMDAxNTI3RDkgLyog
TG9jYWxDdXJyZW50VHJhaXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQzQzREU2ODIyQUI0QjhBMDAxNTI3RDkgLyogTG9jYWxDdXJy
ZW50VHJhaXRDb2xsZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMUM0RDBERDMyNEQ5RjEwRDAwM0Q3NDk4IC8qIEdseXBoQnVmZmVyTWVt
YmVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0
RDBERDEyNEQ5RjBEQjAwM0Q3NDk4IC8qIEdseXBoQnVmZmVyTWVtYmVycy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDNERCMDI2MjczMzlGRTAw
MDdCMEFEMSAvKiBTaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0REIwMjQyNzMzOUU1RTAwN0IwQUQxIC8qIFNo
b3VsZExvY2FsaXplQXhpc05hbWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMUM1QzU4MkEyNzU5NzUzNTAwM0I1NDBEIC8qIFRleHRDaGVja2Vy
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QzVDNTgyMzI3NTc4MDM3MDAzQjU0MEQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzVFMURBODI2Rjk0Qjkw
MDBFMDdBRjEgLyogRm9udFBhbGV0dGVWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUUxREE2MjZGOTQ5QjkwMEUwN0FGMSAvKiBGb250UGFs
ZXR0ZVZhbHVlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFDNjYyNjExMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM2NjI2MEYxQzZFN0NBNjAwQUI1
MjdDIC8qIEZvbnRGYWNlLmggKi87IH07CiAJCTFDNzNBNzEzMjE4NTc1N0UwMDRDQ0VBNSAvKiBU
ZXh0VW5kZXJsaW5lT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQ0I2QjRGQjIxN0I4Mzk0MDA5M0I5Q0QgLyogVGV4dFVuZGVybGluZU9mZnNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
MDI2LDE0ICsxMDI2LDEyIEBACiAJCTM3MkQzRTU0MjE2NTc4QUUwMEM1RTAyMSAvKiBEYXRhVVJM
RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBMDA3ODIxQjgyMEVDODAwMkM1QTZFIC8qIERhdGFVUkxEZWNvZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzcyRDNFNTUyMTY1NzhBRTAw
QzVFMDIxIC8qIFNjcmlwdE1vZHVsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4ODM4OTUxQkFEMTQ1RjAwRDYyRUUzIC8qIFNjcmlwdE1v
ZHVsZUxvYWRlci5oICovOyB9OwogCQkzNzJEM0U1NzIxNjU3OEFFMDBDNUUwMjEgLyogTmF2aWdh
dG9yQ3JlZGVudGlhbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3RDg0NjI2MUZFODk1RjgwMENBMzY4MiAvKiBOYXZpZ2F0b3JDcmVkZW50aWFscy5o
ICovOyB9OwotCQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQz
QzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBB
RDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zl
cmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAwRjRCNjYxIC8q
IENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzkyOTE3RTE5
ODc2NzhGMDBGNEI2NjEgLyogQ3JlZGVudGlhbENvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3QzE5ODc2NzhGMDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbENvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMzc5OTE5OTcxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzk5MTk5NTEyMDBE
REY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAqLzsgfTsKIAkJMzc5OTE5QjIxMjAwREU1
MDAwRUEwNDFDIC8qIGxpYnouZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzk5MTlCMTEyMDBERTUwMDBFQTA0MUMgLyogbGliei5keWxpYiAq
LzsgfTsKLQkJMzc5RTM3MTcxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5RTM3MTUxMzcz
NkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oICovOyB9OwogCQkzNzlFNjFDQTEyNkNB
NUM0MDBCNjNFOEQgLyogQmFzZUJ1dHRvbklucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5RTYxQzYxMjZDQTVDMzAwQjYzRThEIC8qIEJh
c2VCdXR0b25JbnB1dFR5cGUuaCAqLzsgfTsKIAkJMzc5RTYxQ0MxMjZDQTVDNDAwQjYzRThEIC8q
IEJhc2VDaGVja2FibGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3OUU2MUM4MTI2Q0E1QzMwMEI2M0U4RCAvKiBCYXNlQ2hlY2thYmxl
SW5wdXRUeXBlLmggKi87IH07CiAJCTM3QkFBRTU4MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0
aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwNiw3ICsxMzA0LDYg
QEAKIAkJNDRFRUExMDAyNzQ3NTdGMTAwNTk0QTgzIC8qIEltYWdlQ29udHJvbHNNYWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0RUVBMEZBMjc0NzI3
RjIwMDU5NEE4MyAvKiBJbWFnZUNvbnRyb2xzTWFjLmggKi87IH07CiAJCTQ1MENFQkYxMTUwNzNC
QkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxh
YmxlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTQ1MTI1MDIzMTVEQ0UzN0QwMDJGODRFMiAvKiBTcGluQnV0dG9uRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxMjUwMjExNURD
RTM3RDAwMkY4NEUyIC8qIFNwaW5CdXR0b25FbGVtZW50LmggKi87IH07Ci0JCTQ1M0VCNjM3MTU5
QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUzRUI2MzUxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVU
aW1lRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDU4MzBENEUxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTgzMEQ0QzE2
NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NThGRTQwQTE1ODlERjBCMDA1NjA5
RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hG
aWVsZC5oICovOyB9OwogCQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0UxNTZE
REU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzAxNSw3ICszMDEyLDYgQEAKIAkJOTNGMTlCMTcwODI0NUU1
OTAwMUU5QUJDIC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1
Y29yZS5keWxpYiAqLzsgfTsKIAkJOTNGMUQ1QkIxMkQ1MzJDNDAwODMyQkVDIC8qIFdlYkdMTG9z
ZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRjFENUI4MTJENTMyQzQwMDgzMkJFQyAvKiBXZWJHTExvc2VDb250ZXh0LmggKi87IH07CiAJ
CTkzRjFENUMxMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjFENUJGMTJENTMzNTYw
MDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuaCAqLzsgfTsKLQkJOTNGMkNDOTMyNDI3RkI5
QzAwNTg1MUQ4IC8qIENoYXJhY3RlclJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YyQ0M5MTI0MjdGQjlBMDA1ODUxRDggLyogQ2hhcmFjdGVy
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5M0Y2QjgxRjI1NjdBMDhDMDBBMDg0ODggLyogU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291
cmNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNGNkI4MUMyNTY3OUY3MDAwQTA4NDg4IC8qIFNwZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJj
ZUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5M0Y2QjgyMjI1NjdBNjU2MDBBMDg0ODggLyogU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2
QjgxQjI1Njc5RjZGMDBBMDg0ODggLyogU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291cmNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGNkYx
RUUxMjdGNzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNCMDYg
LyogV2ViR0xDb250ZXh0RXZlbnQuaCAqLzsgfTsKQEAgLTMxOTIsNyArMzE4OCw2IEBACiAJCTk3
QkM4NDg0MTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM4NDgyMTIzNkZEOTMwMDBD
NjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJOTdCQzg0OUIxMjM3MEE0QjAw
MEM2MTYxIC8qIEhUTUxJbnB1dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzg0OUExMjM3MEE0QjAwMEM2MTYxIC8qIEhUTUxJbnB1dFN0
cmVhbS5oICovOyB9OwogCQk5N0JDODRCNDEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDODRC
MjEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50LmggKi87IH07Ci0JCTk3QzA3ODUwMTE2
NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0MwNzg0RjExNjVENUJFMDAzQTMyRUYgLyogU3VmZml4VHJl
ZS5oICovOyB9OwogCQk5N0M0NzFEQzEyRjkyNUJEMDA4NjM1NEIgLyogQ29udGVudFNlY3VyaXR5
UG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
N0M0NzFEQTEyRjkyNUJEMDA4NjM1NEIgLyogQ29udGVudFNlY3VyaXR5UG9saWN5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTdEMkFEMDQxNEI4
MjNBNjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0QyQUQwMjE0QjgyM0E2MDA5M0RGMzIgLyogRE9N
V2luZG93UHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5N0RDRTIwMjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RENFMjAw
MTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMjI3LDcgKzMyMjIsNiBAQAogCQk5
QjUzMkVBNDFCQTkyODU3MDAzOEE4MjcgLyogU2xvdEFzc2lnbm1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNTMyRUEyMUJBOTI4NTcwMDM4QTgy
NyAvKiBTbG90QXNzaWdubWVudC5oICovOyB9OwogCQk5QjY5RDNCNTFCOThGRkU5MDBFMzUxMkIg
LyogSFRNTFNsb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjY5RDNCMzFCOThGRkU5MDBFMzUxMkIgLyogSFRNTFNsb3RFbGVtZW50Lmgg
Ki87IH07CiAJCTlCNjlEM0I5MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2OUQzQjcx
Qjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmggKi87IH07Ci0JCTlCNkM0MTUz
MTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjZDNDE1MjEzNDQ5NDkwMDAwODVCNjIg
LyogU3RyaW5nV2l0aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTlCNzE0RTIxMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNzE0RTFG
MUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCAqLzsgfTsKIAkJOUI3NDI2MDUyMzRCRTk1
NjAwREI1MkU5IC8qIElkbGVSZXF1ZXN0Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNzQyNjAzMjM0QkU5NTYwMERCNTJFOSAvKiBJZGxl
UmVxdWVzdENhbGxiYWNrLmggKi87IH07CiAJCTlCNzQyNjBCMjM0QkVBNkUwMERCNTJFOSAvKiBJ
ZGxlRGVhZGxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlCNzQyNjA4MjM0QkVBNkUwMERCNTJFOSAvKiBJZGxlRGVhZGxpbmUuaCAqLzsgfTsKQEAg
LTM1MDksNyArMzUwMyw2IEBACiAJCUE2MTQ4QTc5MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxL
ZXlnZW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNjE0OEE3NzEyRTQxRTNCMDA0NEE3ODQgLyogSlNIVE1MS2V5Z2VuRWxlbWVudC5oICov
OyB9OwogCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTZEMTY5NjMxMzQ2QjRDMTAw
MEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNkQ1QTk5RDE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTZENUE5OUIxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTVFNjUzMTM0QkJCRUMw
MEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9n
cmVzc1NoYWRvd0VsZW1lbnQuaCAqLzsgfTsKIAkJQTcxODc2MEUwQjJBMTIwMTAwQTE2RUNFIC8q
IERyYWdBY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzE4NzYwRDBCMkExMjAxMDBBMTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzIzRjc3QjE0ODRDQTRD
MDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjNGNzdBMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0
Zm9ybUV4cG9ydE1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zNTI3LDcgKzM1MjAsNiBAQAogCQlBNzc5NzkxQTBENkI5RDBDMDAzODUx
QjkgLyogSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzc5NzkxNDBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc3OTc5MjkwRDZCOUU2
NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzc5NzkyNTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEu
aCAqLzsgfTsKIAkJQTc3QjQxQTAxMkU2NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3QjQx
OUYxMkU2NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlwZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3N0QwMDEyMTMzQjBBRUIwMEQ2
NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzhGRTEz
QzEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzhGRTEzQTEyMzY2QjEwMDBBQ0U4RDAgLyogU3Bl
bGxDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTc5QkFEQTIxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzlCQUQ5RTE2MUU3RjNGMDBD
MkU2NTIgLyogUnVsZUZlYXR1cmUuaCAqLzsgfTsKIAkJQTc5QkFEQTQxNjFFN0YzRjAwQzJFNjUy
IC8qIFJ1bGVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3OUJBREEwMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmggKi87IH07CkBAIC0zNjEz
LDcgKzM2MDUsNiBAQAogCQlBODREODJDMTExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODREODJCRjExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmggKi87IH07CiAJCUE4NEVCRDgzMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRFQkQ4
MTBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NTMxMjNEMTFEMDQ3MUIwMEQ0RDA3
NyAvKiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBODYzRTIwMTEzNDM0MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJp
ZGkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjNF
MjAwMTM0MzQxMjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAv
KiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLzsgfTsKIAkJQTg2
NjI5RDEwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8q
IEpTTW91c2VFdmVudC5oICovOyB9OwogCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi87IH07
CkBAIC0zNjU0LDcgKzM2NDUsNiBAQAogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4OUNDQzUzMEY0NEU5ODEwMEI1
REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5Q0NDNTEwRjQ0RTk4MTAwQjVEQTEwIC8qIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggKi87IH07CiAJCUE4QzIyOEExMTFENTcyMkUwMEQ1
QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVj
b2RlZERhdGFEb2N1bWVudFBhcnNlci5oICovOyB9OwotCQlBOEM0MDI5MzEzNDhCMjIyMDA2M0Yx
RTUgLyogQmlkaVJ1bkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4QzRBN0ZEMDlE
NTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVk
RWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE4QzRBODA3MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdGNTA5RDU2MzI3MDAwM0FDOEQg
LyogRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE4QzRBODBCMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzRBN0Y5MDlENTYzMjcwMDAz
QUM4RCAvKiBBdHRyaWJ1dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzkwMywxNiArMzg5MywxMSBAQAogCQlCMkExRjJCMTBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMUYyQTgwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01p
c3NpbmdHbHlwaEVsZW1lbnQuaCAqLzsgfTsKIAkJQjJBRkZDN0UwRDAwQTVDMTAwMzAwNzREIC8q
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJCMUY3MTcwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJCMUY3MTUw
RDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICovOyB9OwotCQlCMkMz
REEyNDBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEOUYzMEQwMDZDMUQwMEVGNkYyNiAvKiBC
aWRpQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUIyQzNEQTI1MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEOUY0MEQwMDZDMUQw
MEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVk
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBMzQwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
MkMzREEzQTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwQTBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dENvZGVjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjJDM0RBM0MwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lDVS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMEMwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRDb2RlY0lDVS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTNFMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNM
YXRpbjEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTBFMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNMYXRpbjEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE0MDBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTEwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29k
ZWNVc2VyRGVmaW5lZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUIyQzNEQTQyMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMTIwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjJDM0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRGbGFncy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTQ3MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE0OTBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTE5MEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2Fk
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxMzEsOCArNDExNiw2IEBACiAJCUJDNEE1
MzMzMjU2MDU5ODMwMDI4QzU5MiAvKiBIVE1MUGFyc2VyU2NyaXB0aW5nRmxhZ1BvbGljeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0QTUzMzIyNTYw
NTk4MzAwMjhDNTkyIC8qIEhUTUxQYXJzZXJTY3JpcHRpbmdGbGFnUG9saWN5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM0QTUzMzUyNTYwNUE1
NjAwMjhDNTkyIC8qIERhdGFEZXRlY3RvclR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNEE1MzM0MjU2MDVBNTYwMDI4QzU5MiAvKiBEYXRhRGV0
ZWN0b3JUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkM0QTUzMzcyNTYwNUFFMTAwMjhDNTkyIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0QTUzMzYy
NTYwNUFFMTAwMjhDNTkyIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDNEE1MzM5MjU2MDYzOTgwMDI4
QzU5MiAvKiBGb250UmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM0QTUzMzgyNTYwNjM5ODAwMjhDNTkyIC8qIEZvbnRSZW5kZXJp
bmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQkM0QTUzM0IyNTYwNjRFMTAwMjhDNTkyIC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNEE1MzNBMjU2MDY0RTEwMDI4
QzU5MiAvKiBUZXh0RGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkM0REREOTYyNzNEOTQ5OTAwNjYwRUJCIC8qIFNjZW5lS2l0TW9k
ZWxQbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDNERERDhGMjczRDg0RTcwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsUGxheWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM0REREOTcyNzNE
OTRBODAwNjYwRUJCIC8qIFNjZW5lS2l0TW9kZWxMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNERERDkxMjczRDg0RTcwMDY2MEVC
QiAvKiBTY2VuZUtpdE1vZGVsTG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM1MTE1NkUxMkIxNzQ5QzAwQzk2NzU0IC8qIFNj
cm9sbEFuaW1hdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFjLm1t
ICovOyB9OwpAQCAtNDM3NCw3ICs0MzU3LDYgQEAKIAkJQzUxMzdDRjMxMUE1ODM3ODAwNEFEQjk5
IC8qIEpTRE9NU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzUxMzdDRjExMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5o
ICovOyB9OwogCQlDNTIyN0RGMTFDM0M2REYxMDBGNUVENTQgLyogRGF0YURldGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyMjdERUYxQzND
NkRENzAwRjVFRDU0IC8qIERhdGFEZXRlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNTQ0Mjc0QjExQTU3RTdBMDA2M0E3NDkgLyogRE9N
U3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzU0NDI3NDkxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDNTU5MkY3ODFBOTJBQTI4
MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1OTJGNzcxQTkyQUEyODAwMUY4ODYyIC8qIENoYXJh
Y3RlclByb3BlcnRpZXMuaCAqLzsgfTsKIAkJQzU3MkVFMUYxMjAxQzlCQzAwN0Q4RjgyIC8qIEpT
SURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1NzJFRTFEMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmggKi87IH07CiAJCUM1ODVB
NjYzMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTY2MTExRDRGQUM1MDA0QzNF
NEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUM1ODVBNjgzMTFENEZCMDgwMDRDM0U0QiAvKiBKU0lEQkRh
dGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTg1QTY2QjExRDRGQjA3MDA0QzNFNEIgLyogSlNJREJEYXRhYmFzZS5oICovOyB9OwpAQCAtNjQ1
Nyw3ICs2NDM5LDYgQEAKIAkJMEZEQTdDMTUxODgzMjJFQjAwQzk1NEI1IC8qIEpTVG91Y2hMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVG91Y2hMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREE3QzFDMTg4MzIyRkMwMEM5NTRCNSAvKiBKU0dl
c3R1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dl
c3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREE3QzFEMTg4
MzIyRkMwMEM5NTRCNSAvKiBKU0dlc3R1cmVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dlc3R1cmVFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRkRBN0MyMDE4ODMyQkNDMDBDOTU0QjUgLyogRGF0ZVRpbWVGb3JtYXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZVRpbWVGb3JtYXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRBN0MyMjE4ODMzMEE5MDBDOTU0QjUgLyogRHJhZ0lt
YWdlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRHJhZ0lt
YWdlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRBN0MyNDE4ODMzMzMy
MDBDOTU0QjUgLyogSlNXZWJLaXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0UGxheWJhY2tUYXJn
ZXRBdmFpbGFiaWxpdHlFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
REE3QzI1MTg4MzMzMzIwMEM5NTRCNSAvKiBKU1dlYktpdFBsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NjQxLDcgKzY2MjIsNiBAQAogCQkxNDJCOTdDODEzMTM4OTQzMDA4QkVGNEIgLyogVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzMkU4NDgwQzUxNDkzRjAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NDb250cm9sbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8q
IFdyaXRpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1
NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4
NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDc3RTc3NDBCRjQxMzRBMDAxNTI4NzIgLyogQmFja0ZvcndhcmRDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFja0ZvcndhcmRD
YWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTM4LDYgKzcxMTgsNyBA
QAogCQkxQzREMEREMTI0RDlGMERCMDAzRDc0OTggLyogR2x5cGhCdWZmZXJNZW1iZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdseXBoQnVmZmVyTWVtYmVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hvdWxkTG9jYWxpemVBeGlzTmFt
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM1MEM0OTUyMkM4NEYyNDAwQTZFNEJFIC8qIFdITFNMU3Rh
bmRhcmRMaWJyYXJ5RnVuY3Rpb25NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTdGFu
ZGFyZExpYnJhcnlGdW5jdGlvbk1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDNUM1ODIzMjc1NzgwMzcwMDNCNTQwRCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzVFMURBNjI2Rjk0OUI5MDBFMDdBRjEgLyogRm9udFBhbGV0
dGVWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFBhbGV0dGVWYWx1ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEYxQzZFN0NBNjAwQUI1MjdDIC8q
IEZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYWNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MzkyLDcgKzgzNzMsNiBAQAogCQkzNjYy
Rjk4NDA0N0NFREJFNUREREFGQUEgLyogUmVuZGVyTWF0aE1MTWVuY2xvc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MTWVuY2xvc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzExOUE3OTIwQ0NCNjEwMDAyQzZEQzkgLyog
V2ViS2l0VGFyZ2V0Q29uZGl0aW9uYWxzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYktpdFRh
cmdldENvbmRpdGlvbmFscy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxN0Q3RTUxN0VDQzNBNjAwM0MyNzZEIC8qIGV4dHJhY3QtbG9jYWxpemFibGUtc3RyaW5ncy5w
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSAiZXh0cmFjdC1sb2NhbGl6YWJsZS1zdHJpbmdzLnBsIjsgcGF0
aCA9ICJTY3JpcHRzL2V4dHJhY3QtbG9jYWxpemFibGUtc3RyaW5ncy5wbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTM3MUE2N0NBMTFDNkM3REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlv
bkNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEh5cGhlbmF0aW9u
Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFFNjVDQjEzNjYxRURDMDBC
RUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFnZVNlcmlhbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRTY1
Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VTZXJpYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIEZvbnRSYW5nZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFJhbmdlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODQwMyw5ICs4MzgzLDcgQEAKIAkJMzcxRjUzRTgwRDI3MDRG
OTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzcyQURBMzcxOTdGNDdCOTAwRkM1MDFFIC8qIFByb3RlY3Rpb25T
cGFjZUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3RlY3Rpb25T
cGFjZUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MkFEQTM5MTk3RjY4
NzYwMEZDNTAxRSAvKiBQcm90ZWN0aW9uU3BhY2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByb3RlY3Rpb25TcGFjZUNvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzNzJDMDBDMzEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5k
YXJpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEJvdW5k
YXJpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzJDMDBEODEyOTYxOUY4
MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc1Q0QyMzEx
MTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEh5cGhlbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8q
IE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg0MTgsOCArODM5Niw2IEBACiAJCTM3OTkxOTk0MTIwMERERjQwMEVBMDQxQyAvKiBX
T0ZGRmlsZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
T0ZGRmlsZUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTkxOTk1
MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXT0ZGRmlsZUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzNzk5MTlCMTEyMDBERTUwMDBFQTA0MUMgLyogbGliei5keWxpYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHls
aWIiOyBuYW1lID0gbGliei5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYnouZHlsaWI7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07Ci0JCTM3OUUzNzE0MTM3MzZBNjYwMEI5RTkxOSAvKiBR
dW90ZWRQcmludGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UXVvdGVkUHJpbnRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc5RTM3
MTUxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBRdW90ZWRQcmludGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzc5RTYxQzUxMjZDQTVDMzAwQjYzRThEIC8qIEJhc2VCdXR0b25JbnB1dFR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZUJ1dHRvbklucHV0
VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OUU2MUM2MTI2Q0E1QzMw
MEI2M0U4RCAvKiBCYXNlQnV0dG9uSW5wdXRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJhc2VCdXR0b25JbnB1dFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzc5RTYxQzcxMjZDQTVDMzAwQjYzRThEIC8qIEJhc2VDaGVja2FibGVJbnB1dFR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MTAzLDcgKzkwNzks
NiBAQAogCQk0NTEyNTAyMDE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BpbkJ1dHRvbkVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTEyNTAyMTE1RENFMzdEMDAyRjg0
RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3BpbkJ1dHRvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUx
QTQ5RjhGODcyNkJFMDcxNTE4QkUyIC8qIElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRl
ckJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJU09Qcm90ZWN0
aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0NTNFQjYzNTE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZVRpbWVGb3JtYXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDU4MzBENEIxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxD
b250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9z
Y3JvbGxDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDU4MzBE
NEMxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9zY3JvbGxDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ1OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFy
Y2hGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJT
ZWFyY2hGaWVsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjc4MCw3ICsx
Mjc1NSw2IEBACiAJCTkzRjFENUI5MTJENTMyQzQwMDgzMkJFQyAvKiBXZWJHTExvc2VDb250ZXh0
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTExvc2VDb250ZXh0LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMUQ1QkUxMkQ1MzM1NjAwODMyQkVDIC8qIEpTV2Vi
R0xMb3NlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMTG9zZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Yx
RDVCRjEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xMb3NlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5M0YyQ0M5MTI0MjdGQjlBMDA1ODUxRDggLyogQ2hhcmFjdGVyUmFu
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhcmFjdGVyUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNkI4MUIyNTY3OUY2RjAwQTA4NDg4IC8q
IFNwZWVjaFJlY29nbml0aW9uQ2FwdHVyZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNkI4MUMyNTY3OUY3MDAwQTA4NDg4IC8qIFNwZWVjaFJlY29n
bml0aW9uQ2FwdHVyZVNvdXJjZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3BlZWNoUmVjb2duaXRpb25DYXB0dXJlU291cmNlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0Y2QjgxRDI1Njc5RjcwMDBBMDg0ODggLyogU3BlZWNoUmVjb2duaXRp
b25DYXB0dXJlU291cmNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTcGVlY2hSZWNvZ25pdGlvbkNhcHR1cmVTb3VyY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMTQ0LDcgKzEzMTE4LDYgQEAKIAkJOTdCQzg0OUExMjM3MEE0
QjAwMEM2MTYxIC8qIEhUTUxJbnB1dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MSW5wdXRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTdCQzg0QjExMjM3MTE4MDAwMEM2MTYxIC8qIFRleHREb2N1bWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5N0JDODRCMjEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREb2N1bWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5N0MwNzg0RjExNjVENUJFMDAzQTMyRUYgLyogU3Vm
Zml4VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWZmaXhUcmVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QzFGNTUyMTIyODU1Q0IwMEVERTYxNSAv
KiBIVE1MU3RhY2tJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxT
dGFja0l0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdDMUY1NTIxMjI4NTVD
QjAwRURFNjE2IC8qIEhUTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIVE1MVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdDMUY1NTIxMjI4
NTVDQjAwRURFNjE3IC8qIEF0b21IVE1MVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXRvbUhUTUxUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTMyNjQsNyArMTMyMzcsNiBAQAogCQk5QjY5RDNCNzFCOTkxMDA3MDBFMzUxMkIgLyogSlNIVE1M
U2xvdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MU2xv
dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2QkM5NjAxQjk3NTk2
NjAwNUFFMUYwIC8qIEpTU2hhZG93Um9vdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1NoYWRvd1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjZCQzk2MTFCOTc1OTY2MDA1QUUxRjAgLyogSlNTaGFkb3dSb290LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2hhZG93Um9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5QjZDNDE1MjEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdXaXRoRGlyZWN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNzE0RTFFMUM5MTE2NjkwMEFDMEU5
MiAvKiBFdmVudFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXZlbnRQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI3MTRFMUYxQzkx
MTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFdmVudFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI3NDI2MDMy
MzRCRTk1NjAwREI1MkU5IC8qIElkbGVSZXF1ZXN0Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SWRsZVJlcXVlc3RDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM4
MTksNyArMTM3OTEsNiBAQAogCQlBNkQxNjk2MzEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9v
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dSb290Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2RDVBOTlBMTYyOUQ2RkYwMDI5NzMzMCAvKiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyog
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0
Q2hlY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hl
Y2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE1RTY1MDEzNEJC
QkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVz
c1NoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZ3Jl
c3NTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3NjBE
MEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEcmFnQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTM4NDcsNyArMTM4MTgsNiBAQAogCQlBNzc5NzkyNDBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFn
ZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzc5NzkyNTBENkI5RTY0MDAz
ODUxQjkgLyogSlNJbWFnZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNJbWFnZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QjQxOUYxMkU2
NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUZXh0RXZlbnRJbnB1dFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTc3RDAwMTExMzNCMEFFQjAwRDY2NThDIC8qIFRleHRDaGVja2luZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NDk0MUEwQjVGRTUwNzAwMUUyMzdBIC8qIERhdGFUcmFuc2Zl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVRyYW5zZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4RkUxMzkxMjM2NkIxMDAwQUNF
OEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTcGVsbENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhG
RTEzQTEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gU3BlbGxDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNDAyOCw3ICsxMzk5OCw2IEBACiAJCUE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8
YWJzb2x1dGU+IjsgfTsKIAkJQTg1RjIyMDgxNDMwMzc3RDAwN0NDODg0IC8qIEpTUG9wU3RhdGVF
dmVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Bv
cFN0YXRlRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODYz
RTIwMDEzNDM0MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJpZGkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5pY29kZUJpZGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW91c2VFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxMTAsNyArMTQwNzksNiBAQAogCQlBOEMy
MjgwRDExRDRBNTk3MDBENUE3RDMgLyogRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFE
b2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVk
RGF0YURvY3VtZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIy
OEEwMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEM0MDI5MjEzNDhCMjIyMDA2
M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmlkaVJ1bkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUIwOUQ1
NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThDNEE3RUMwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEM0QTdFRTA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDc1NiwxNSArMTQ3MjQsOCBAQAogCQlCMkFGRkM3NTBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQUZGQzc4MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2FzY2FkZUNvY29hLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250Q2FzY2FkZUNvY29hLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8q
IFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIx
RjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVBNjQg
LyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaWRpQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEOUYzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaUNvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0Q5RjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJp
ZGlSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaVJlc29s
dmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEOUZFMEQwMDZDMUQwMEVG
NkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNlZ21lbnRlZFN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUIyQzNEOUZGMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlZ21lbnRlZFN0cmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5k
YXJpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3VuZGFyaWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTA5MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0Q29kZWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHRDb2RlYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTBBMEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRleHRDb2RlYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREEw
QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ3NzUsNyArMTQ3MzYsNiBAQAogCQlCMkMzREExMDBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dENvZGVjVXNlckRlZmluZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRleHRDb2RlY1VzZXJEZWZpbmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQzNEQTExMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjVVRGMTYuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREExMjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dENvZGVjVVRGMTYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb2Rl
Y1VURjE2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEQTE1MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RmxhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRGbGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzREExNjBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkMzREExNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMTgwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1Jl
Z2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTIwNCw4
ICsxNTE2NCw2IEBACiAJCUJDNEE1MzMyMjU2MDU5ODMwMDI4QzU5MiAvKiBIVE1MUGFyc2VyU2Ny
aXB0aW5nRmxhZ1BvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGFyc2VyU2NyaXB0aW5nRmxh
Z1BvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzRBNTMzNDI1NjA1QTU2
MDAyOEM1OTIgLyogRGF0YURldGVjdG9yVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0
b3JUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNEE1MzM2MjU2MDVBRTEw
MDI4QzU5MiAvKiBTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFn
ZUJsb2NraW5nUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNEE1MzM4
MjU2MDYzOTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzRBNTMz
QTI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
RGlyZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNERERDhCMjczRDg0
RTcwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsTG9hZGVyVVNELmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
ZW5lS2l0TW9kZWxMb2FkZXJVU0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
REREOEMyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9kZWxMb2FkZXJDbGllbnQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTY2VuZUtpdE1vZGVsTG9hZGVyQ2xpZW50Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzREREQ4RDI3M0Q4NEU3MDA2NjBFQkIgLyogU2NlbmVL
aXRNb2RlbFBsYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjZW5lS2l0TW9kZWxQbGF5
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY5OSw3ICsxNTY1Nyw2IEBA
CiAJCUM1NDQyNzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzU0NDI3NEExMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3Qu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5n
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01TdHJpbmdM
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU1OTJGNzcxQTkyQUEyODAw
MUY4ODYyIC8qIENoYXJhY3RlclByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2hhcmFjdGVyUHJvcGVydGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNTVDN0JBMDE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJUaGVtZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU3MkVFMUQxMjAxQzlCQzAwN0Q4RjgyIC8qIEpT
SURCSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJJbmRleC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTg1QTY2MDExRDRGQUM1MDA0QzNFNEIg
LyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJREJCaW5kaW5nVXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2Mjc1LDcgKzE2MjMyLDYgQEAKIAkJQ0U3QjJEQjExNTg2QUJBRDAwOThCM0ZBIC8q
IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0U3QjJEQjIxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5n
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRBbHRlcm5h
dGl2ZVdpdGhSYW5nZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U3RTE3ODIx
QzgzQTQ5MTAwQUQwNkFGIC8qIENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaC5oOyBwYXRo
ID0gY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeUhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQ0VBODQ3MjAyMTI2MjJBRDAwOTQwODA5IC8qIFRleHRDaGVja2luZ01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRDaGVja2luZ01hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0VCQjhDMzEyMDc4NkRDQjAwMDM5NTQ3IC8qIEZldGNoSWRpb21zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZldGNoSWRpb21zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNFQkI4QzMyMjA3ODZEQ0IwMDAzOTU0NyAvKiBGZXRjaElkaW9tcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGZXRjaElkaW9tcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNFQ0FERkMzMTUzNzc4RkYwMEUzNzA2OCAvKiBEaWN0YXRpb25BbHRlcm5hdGl2ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25BbHRlcm5hdGl2ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwMTAsNyArMjQ5NjYsNiBAQAogCQkJCTkzMzA5
RDhDMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8sCiAJCQkJ
RjREOTgxN0UyMTk1RkJGNjAwODIzMEZDIC8qIENoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHAgKi8s
CiAJCQkJRjREOTgxN0QyMTk1RkJGNjAwODIzMEZDIC8qIENoYW5nZUxpc3RUeXBlQ29tbWFuZC5o
ICovLAotCQkJCTkzRjJDQzkxMjQyN0ZCOUEwMDU4NTFEOCAvKiBDaGFyYWN0ZXJSYW5nZS5oICov
LAogCQkJCTdDM0E5MUU1MUM5NjNCODgwMEQxQTdFMyAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ku
aCAqLywKIAkJCQk5MzMwOUQ4RDA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwICovLAogCQkJCTkzMzA5RDhFMDk5RTY0OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0
Q29tbWFuZC5oICovLApAQCAtMjg4NTYsNDcgKzI4ODExLDIwIEBACiAJCQlwYXRoID0gZ3JhcGhp
Y3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlCMkIyNjQ1OTBEMDBBNzdF
MDAwQUNDMUQgLyogY2YgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0g
KAotCQkJCTM3MUE2N0NBMTFDNkM3REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNGLmNwcCAqLywK
LQkJCSk7Ci0JCQlwYXRoID0gY2Y7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owog
CQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQjJCMjY0NTkwRDAwQTc3RTAwMEFDQzFEIC8qIGNm
ICovLAogCQkJCTFDMTY1RTRGMjNFQ0Y1NUUwMEIwRkNGQiAvKiBjb2NvYSAqLywKIAkJCQlBNTE2
RThCMjEzNkUwNEMwMDA3NkMzQzAgLyogaW9zICovLAogCQkJCUIyQzNEOUY5MEQwMDZDMUQwMEVG
NkYyNiAvKiBtYWMgKi8sCi0JCQkJQjJDM0Q5RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250
ZXh0LmNwcCAqLywKLQkJCQlCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQu
aCAqLywKLQkJCQlCMkMzRDlGNDBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggKi8s
Ci0JCQkJQThDNDAyOTIxMzQ4QjIyMjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0LmggKi8sCi0JCQkJ
QzU1OTJGNzcxQTkyQUEyODAwMUY4ODYyIC8qIENoYXJhY3RlclByb3BlcnRpZXMuaCAqLywKLQkJ
CQkwRkRBN0MyMDE4ODMyQkNDMDBDOTU0QjUgLyogRGF0ZVRpbWVGb3JtYXQuY3BwICovLAotCQkJ
CTQ1M0VCNjM1MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oICovLAogCQkJCUNF
Q0NGQzNBMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCAqLywKIAkJ
CQlERkM2MTBBMjI0RkIyQTdDMDA2MjU0QzggLyogRW5jb2RpbmdUYWJsZXMuY3BwICovLAogCQkJ
CURGQzYxMEE0MjRGQjJBN0QwMDYyNTRDOCAvKiBFbmNvZGluZ1RhYmxlcy5oICovLAotCQkJCUJD
NEE1MzM4MjU2MDYzOTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovLAotCQkJCTM3
NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovLAogCQkJCTc2MzNBNzI1
MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwICovLAogCQkJCTc2
MzNBNzI0MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCAqLywKIAkJ
CQlGNTQ0Rjc4NjE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuY3BwICovLAogCQkJ
CUY1NDRGNzg3MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oICovLAotCQkJCTM3
OUUzNzE0MTM3MzZBNjYwMEI5RTkxOSAvKiBRdW90ZWRQcmludGFibGUuY3BwICovLAotCQkJCTM3
OUUzNzE1MTM3MzZBNjYwMEI5RTkxOSAvKiBRdW90ZWRQcmludGFibGUuaCAqLywKLQkJCQlCMkMz
RDlGRTBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmNwcCAqLywKLQkJCQlCMkMz
RDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggKi8sCi0JCQkJOUI2QzQx
NTIxMzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCAqLywKLQkJCQk5N0Mw
Nzg0RjExNjVENUJFMDAzQTMyRUYgLyogU3VmZml4VHJlZS5oICovLAotCQkJCTM3MkMwMEMzMTI5
NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgKi8sCi0JCQkJQjJDM0RBMDQwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggKi8sCi0JCQkJQTcxNTFCRDcxMkYxNTU4
RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi8sCi0JCQkJQTc3RDAwMTExMzNCMEFF
QjAwRDY2NThDIC8qIFRleHRDaGVja2luZy5oICovLAorCQkJCTFDNUM1ODIzMjc1NzgwMzcwMDNC
NTQwRCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovLAogCQkJCUIyQzNEQTA5MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Q29kZWMuY3BwICovLAogCQkJCUIyQzNEQTBBMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Q29kZWMuaCAqLywKIAkJCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENv
ZGVjQVNDSUlGYXN0UGF0aC5oICovLApAQCAtMjg5MTYsMTYgKzI4ODQ0LDEyIEBACiAJCQkJQjJD
M0RBMTIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggKi8sCiAJCQkJOTM0M0NC
N0YxMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwICovLAogCQkJCTkzNDNDQjgw
MTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmggKi8sCi0JCQkJQkM0QTUzM0EyNTYw
NjRFMTAwMjhDNTkyIC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlCMkMzREExNjBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCAqLywKIAkJCQlCMkMzREExNzBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dEVuY29kaW5nLmggKi8sCiAJCQkJQzEwNURBNjMwRjNBQTZCODAwMURENDRG
IC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8sCiAJCQkJQzEwNURBNjEwRjNBQTY4RjAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLywKIAkJCQlCMkMzREExODBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwICovLAogCQkJCUIyQzNEQTE5
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oICovLAotCQkJCUIyQzNE
QTE1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RmxhZ3MuaCAqLywKLQkJCQlBODYzRTIwMDEzNDM0
MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJpZGkuaCAqLywKLQkJCQkxNDQ3NkFBNzE1REM0QkIxMDAz
MDVEQjIgLyogV3JpdGluZ01vZGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gdGV4dDsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yODkzMyw4ICsyODg1Nyw2IEBACiAJCUIyQzNEOUY5
MEQwMDZDMUQwMEVGNkYyNiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCUIyQUZGQzhDMEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmll
cy5tbSAqLywKLQkJCQlDRUE4NDcyMDIxMjYyMkFEMDA5NDA4MDkgLyogVGV4dENoZWNraW5nTWFj
Lm1tICovLAogCQkJCUExRjU1REM0MUY1NEQzRjAwMEVEQjc1RiAvKiBUZXh0RW5jb2RpbmdSZWdp
c3RyeU1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpAQCAtMzMzNjMsMTAgKzMzMjg1
LDcgQEAKIAkJCQlCQzk0NjJEODEwN0E3QjRDMDA4NTcxOTMgLyogQmVmb3JlTG9hZEV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBQjIzQTMyODA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNEMEE0NEVGQzcwMEY5
OTJFMCAvKiBCZWZvcmVVbmxvYWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJDM0RBMjQw
RDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMz
REEyNTBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U3ODk4NjExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQThDNDAyOTMxMzQ4QjIyMjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREQ4NzE0QjI2NUY0MzY2MDA1Rjk5N0MgLyogQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOEQxMkIwMjZGNzAwQzFBMzU5IC8qIEJp
cXVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMjUxMkIwMjY3NjAwQzFBMzU5IC8qIEJp
cXVhZERTUEtlcm5lbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzUxNCw4ICszMzQzMyw2IEBACiAJ
CQkJRkQzMTVGRkYxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5uZWxNZXJnZXJOb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjAwMjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbFNwbGl0dGVy
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTAwOTlERjAyNzAwOTBENzgxIC8qIENo
YXJhY3RlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1NTkyRjc4MUE5MkFBMjgwMDFGODg2
MiAvKiBDaGFyYWN0ZXJQcm9wZXJ0aWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YyQ0M5MzI0
MjdGQjlDMDA1ODUxRDggLyogQ2hhcmFjdGVyUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
QjhGRkQxMTZBRTdGOTYwMDM4Mzg4RCAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCMjEyNTFGMTJEMDAzRUYyNjkgLyogQ2hlY2ti
b3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzRDNjFBMjc0NTJBNzkwMEEwNDBF
NyAvKiBDaGlsZENoYW5nZUludmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzkyMiw3
ICszMzgzOSw2IEBACiAJCQkJRTVGMDZBRTcyNEQ0ODQ3QjAwQkJDNEY4IC8qIERhdGVUaW1lRmll
bGRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNUYwNkFGMzI0RDRBQUU0MDBCQkM0Rjgg
LyogRGF0ZVRpbWVGaWVsZEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNTFENkExRjI0
RTFFMjU1MDA4OTFDRkEgLyogRGF0ZVRpbWVGaWVsZHNTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDUzRUI2MzcxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVMb2NhbElucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTVGMDZBRUIyNEQ0OUJGNzAwQkJDNEY4IC8qIERh
dGVUaW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTVGMDZBRUYy
NEQ0QTYzNzAwQkJDNEY4IC8qIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzQzMTcsNyArMzQyMzMsNiBAQAogCQkJCTFDNUUxREE4MjZGOTRCOTAwMEUw
N0FGMSAvKiBGb250UGFsZXR0ZVZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjUzMjBENkIx
MjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3MUY0RkZDMEQyNUU3RjMwMEVDRTBENSAvKiBGb250UmFuZ2VzLmggaW4gSGVhZGVycyAqLywK
LQkJCQlCQzRBNTMzOTI1NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyQUIwQUY3MUU2QjNDNkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9u
QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2QjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udFNlbGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDE5MDQxRjFDQzY0ODZCMDBD
MzVGNUQgLyogRm9udFNlbGVjdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTkzLDcg
KzM0NTA4LDYgQEAKIAkJCQkxQUI1RUJEMjE5NEE1MEYzMDA1OUFDNzAgLyogSFRUUEhlYWRlck5h
bWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYxNEE3OTFEQTY0MjQxMDA0QUQwNkYgLyogSFRU
UEhlYWRlclZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NzMwQ0U5MjNBMTAwN0VG
M0NEIC8qIEhUVFBQYXJzZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzNzVDRDIzMjExOUQ0M0M4
MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTVFQkI4OTMzMUM3
Nzc4MjkwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUz
NTZFMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTNGMTQ1
NDBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjQy
MCw3ICszNjMzNCw2IEBACiAJCQkJODNDMUY1OTQxRURGNjlEMzAwNDEwRDI3IC8qIFF1YWxpZmll
ZE5hbWVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1RTMxRjQxRTBDQjBCNTAwNEIzNzFD
IC8qIFF1aWNrTG9vay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRUU5MkMyMjM4OEE3RDAwNDE1
N0E5IC8qIFF1aXJrcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzc5RTM3MTcxMzczNkE2NjAwQjlF
OTE5IC8qIFF1b3RlZFByaW50YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUE1NzRGMjkxMzFE
Qjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTcy
MEQwMEJGMjIwMDcxQjc4MiAvKiBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBSYWRpb0J1dHRvbkdyb3Vwcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNjg2NCw3ICszNjc3Nyw2IEBACiAJCQkJMUFGN0FGQzgxQTQ4
QThCQzAwQzhFNEU3IC8qIFNlY3VyaXR5T3JpZ2luUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzREMkRBNTE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYg
LyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAz
MDA1MjQxOTkgLyogU2VsZWN0aW9uR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1
Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25HZW9tZXRyeUdhdGhlcmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTM3MDYxLDcgKzM2OTczLDYgQEAKIAkJCQk4MUFDNkMz
NjEzMUM1N0QzMDAwOUE3RTAgLyogU3RyaW5nQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUVDQTY4MEM3MUU2NzcyNDUwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovLAotCQkJCTlCNkM0MTUzMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRo
RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3N0VCRTMg
LyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkZFRkJDODI2REQ2N0Ey
MDBCMEM0ODggLyogU3RydWN0dXJlZFNlcmlhbGl6ZU9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxRTY3QTgzMjVEMTY4NDcwMDdCMEE0QyAvKiBTVFVOTWVzc2FnZVBhcnNpbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzcxMzYsNyArMzcwNDcsNiBAQAogCQkJCTFBOEY2QjAyMERCNTMwMDYw
MDFEQjc5NCAvKiBTdWJzdGl0dXRlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3NzhC
RDgyMURBNDgwNkMwMDlFMzAwOSAvKiBTdWJ0bGVDcnlwdG8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOTdDMDc4NTAxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3NjI3Qjk4MTRGQjU0MjQwMDJDRENBMSAvKiBTdXBwbGVtZW50YWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJDMTIxN0QxMUFCOUU3NzAwM0M0NjJDIC8qIFN1c3Bl
bmRhYmxlVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTc0MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM1OCwxMSArMzcyNjgsOSBA
QAogCQkJCTkzMzA5RTE3MDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0QWZmaW5pdHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFN0IyREI1MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTREQ0U2MTg4MTA1MUQwMDNFRURCQiAv
KiBUZXh0QXV0b1NpemluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJDM0RBMzQwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQwREY1NjI2
RUI1M0UwMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
NDdGNUIzMjY2Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3N0QwMDEyMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0
Q2hlY2tpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDNUM1ODJBMjc1OTc1MzUwMDNCNTQwRCAv
KiBUZXh0Q2hlY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEQkY4REUxMjc2OTE5
QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJD
M0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCBpbiBI
ZWFkZXJzICovLApAQCAtMzczNzYsNyArMzcyODQsNiBAQAogCQkJCTE0MkI5N0NBMTMxMzg5NDMw
MDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDNzNBNzE1MjE4NTc1ODcwMDRDQ0VBNSAvKiBUZXh0RGVjb3JhdGlv
blRoaWNrbmVzcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM0QTUzM0IyNTYwNjRFMTAwMjhDNTky
IC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE1MzI1MjU2MDU1NUYw
MDI4QzU5MiAvKiBUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5N0JDODRCNDEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODQ4NDEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3Vt
ZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3Mzg2LDcgKzM3MjkzLDYgQEAKIAkJCQk5
MzNBMTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzdCNDFBMDEyRTY3NUE5MDA1NDM0M0QgLyogVGV4dEV2ZW50SW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGNTVCM0REODEyNTFGMTJEMDAzRUYyNjkgLyogVGV4dEZpZWxkSW5wdXRU
eXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREE0NTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxODA5OUU2NDkyMDA1NkU1ODEgLyog
VGV4dEdyYW51bGFyaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDRGOTZGNjFBMUVDQzI0MDA5
OEJGODggLyogVGV4dEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ0Rjk2RjcxQTFF
Q0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAt
Mzc0ODEsNyArMzczODcsNiBAQAogCQkJCTJFQ0RCQUQ4MjFEODkwNjMwMEYwMEVDRCAvKiBVbmRv
SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVDREJBRDEyMUQ4OTAzNDAwRjAwRUNEIC8qIFVu
ZG9NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjJEOEE3OTE0OTk3Q0NGMDBFQ0VGM0Ug
LyogVW5kb1N0ZXAuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4NjNFMjAxMTM0MzQxMjAwMDI3NDky
NiAvKiBVbmljb2RlQmlkaS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4ODY0RTExQkJBRjU3NDAw
RTU0MEM5IC8qIFVuaXF1ZUlEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4RjdB
NTFCQkRCNzkzMDBFMkNDNUYgLyogVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTk4RjdBOTFCQkREMzg1MDBFMkNDNUYgLyogVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzgyOSw3ICszNzczNCw2IEBACiAJ
CQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDUzIC8qIFdy
aXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCQUYz
QjI0MTJDMUEzOTgwMDAxNEJGMSAvKiBXcml0aW5nRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxNDQ3NkFBODE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4MzA3ODRCMjFDNTJFRTJDMDAxMDREMUQgLyogWE1MRG9jdW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVu
dFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAzYmYzODgzZGQ2YTYwZGY5NWFmOGRkN2M2OGM5NjRj
ZTM1ZjRmNjM0Li5hOTY2YmYxYWUxMDExNWNlNDY1ZjZmMjBlMjY5NDJiZGFhYzBkMzkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTEw
OCw3ICsxMDgsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRE
aXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiVGV4
dEJvdW5kYXJpZXMuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5oPgogI2lu
Y2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC0yNzQ5LDcgKzI3NDksNyBAQCBDaGFy
YWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6bmV4dEJvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYgY2hhcmFjdGVyT2ZmcwogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwogICAg
IHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAgICAgCi0gICAgaWYgKHJlcXVpcmVzQ29udGV4
dEZvcldvcmRCb3VuZGFyeShjaGFyYWN0ZXJBZnRlcihjaGFyYWN0ZXJPZmZzZXQpKSkgeworICAg
IGlmIChQQUw6OnJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaGFyYWN0ZXJBZnRlcihj
aGFyYWN0ZXJPZmZzZXQpKSkgewogICAgICAgICBhdXRvIGJhY2t3YXJkc1NjYW5SYW5nZSA9IG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib3VuZGFyeS0+ZG9jdW1lbnQoKSk7CiAgICAg
ICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChiYWNrd2FyZHNT
Y2FuUmFuZ2UsIGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpKQogICAgICAgICAgICAgcmV0dXJuIHsg
fTsKQEAgLTI4MDQsNyArMjgwNCw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpw
cmV2aW91c0JvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyCiAgICAgICAg
IGZvciAoVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoZm9yd2FyZHNTY2FuUmFuZ2UpOyAh
Zm9yd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBmb3J3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKICAg
ICAgICAgICAgIGFwcGVuZChzdHJpbmcsIGZvcndhcmRzSXRlcmF0b3IudGV4dCgpKTsKICAgICAg
ICAgc3VmZml4TGVuZ3RoID0gc3RyaW5nLnNpemUoKTsKLSAgICB9IGVsc2UgaWYgKHJlcXVpcmVz
Q29udGV4dEZvcldvcmRCb3VuZGFyeShjaGFyYWN0ZXJCZWZvcmUoY2hhcmFjdGVyT2Zmc2V0KSkp
IHsKKyAgICB9IGVsc2UgaWYgKFBBTDo6cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNo
YXJhY3RlckJlZm9yZShjaGFyYWN0ZXJPZmZzZXQpKSkgewogICAgICAgICBhdXRvIGZvcndhcmRz
U2NhblJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvdW5kYXJ5LT5kb2N1
bWVudCgpKTsKICAgICAgICAgYXV0byBhZnRlckJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnRB
ZnRlck5vZGUoKmJvdW5kYXJ5KTsKICAgICAgICAgaWYgKCFhZnRlckJvdW5kYXJ5KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
aW5kZXggZDY0OWYxY2QyY2VjN2E4ZGE2ZjA0ZGViZTU1MjRhNzcwZDA5YjlmNS4uMmE2ZGJlMDU1
YThiZmE0MzZmM2FiNjk0YjYyOGY1Y2U5YWY0ZmI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0zNjIsOCArMzYy
LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZygpIGNvbnN0CiAg
ICAgYm9vbCBpc01pc3NwZWxsZWQgPSBmYWxzZTsKIAogICAgIGlmICh1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKGZyYW1lKSkgewotICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBy
ZXN1bHRzOwotICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIsIHN0cmlu
Z1ZhbHVlKCksIFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCByZXN1bHRzLCBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tl
ciwgc3RyaW5nVmFsdWUoKSwgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgcmVzdWx0
cywgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICAgICAgaWYgKCFyZXN1bHRz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CiAgICAgICAgIHJl
dHVybiBpc01pc3NwZWxsZWQ7CkBAIC0zOTcsOCArMzk3LDggQEAgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWlzc3BlbGxpbmdSYW5nZShjb25zdCBTaW1w
bGVSYW4KICAgICBpZiAoIXRleHRDaGVja2VyKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCi0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOwotICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3RyaW5nVmFsdWUoKSwgVGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcsIG1pc3NwZWxsaW5ncywgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKTsKKyAgICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3NwZWxsaW5n
czsKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIsIHN0cmluZ1ZhbHVlKCks
IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIG1pc3NwZWxsaW5ncywgZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKIAogICAgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc3NwZWxs
aW5nIHBhc3QgdGhlIHN0YXJ0LgogICAgIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNl
YXJjaERpcmVjdGlvbjo6TmV4dCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggYzI1NDIzZjYx
M2E2YTkxODI1ZmFiMjljNjkyNmQyMGNkOWVjYWJjMi4uNjRhOTBjM2QyMjE4NjllYmJiZGJmZWY4
NTU0YWVjOTdhZmI1OWQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC05MTgsNyArOTE4LDcg
QEAgUGF0aCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVtZW50UGF0aCgpIGNvbnN0CiAK
ICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcGF0aCBvbmx5IGlmIHRoaXMgaXMgdGhlIGxhc3QgcGFy
dCBvZiBhIGxpbmUgZm9sbG93ZWQgYnkgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLgog
ICAgICAgICBjb25zdCBhdXRvJiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAg
IGJvb2wgcmlnaHRUb0xlZnRUZXh0ID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6UlRMOworICAgICAgICBib29sIHJpZ2h0VG9MZWZ0VGV4dCA9IHN0eWxlLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHhU
b2xlcmFuY2UgPSA1OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHlUb2xlcmFuY2UgPSA1Owog
ICAgICAgICBib29sIG5lZWRzUGF0aCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQppbmRleCAxOTNkZmZkY2Y2MDAwYmYxYjQ1ZTM5MGUyZWM0NDcxZjkyOWI2
ZTYwLi5kNWMwMzU0MzhlNGNlMjU1NmNlMDRjYzc1Yjk2Yjg5MDc2MDNjMjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtOTM4LDEyICs5MzgsMTIgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nKiBhdHRyU3RyaW5nLAogICAgICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9
IG5vZGUtPmRvY3VtZW50KCkuZWRpdG9yKCkudGV4dENoZWNrZXIoKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGlzIHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1tYXIg
Y2hlY2tlciBpbXBsZW1lbnRlZCBpbiBXSzEgYW5kIFdLMgotICAgICAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqY2hl
Y2tlciwgdGV4dCwgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIHJlc3VsdHMsIG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBWZWN0
b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgIGNoZWNrVGV4dE9m
UGFyYWdyYXBoKCpjaGVja2VyLCB0ZXh0LCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
LCByZXN1bHRzLCBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKICAgICAgICAgCiAgICAgICAgIHNpemVfdCBzaXplID0gcmVzdWx0cy5zaXplKCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAg
IGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tpXTsKKyAgICAgICAg
ICAgIGNvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQgPSByZXN1bHRzW2ldOwog
ICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIEBZRVMsIE5TTWFrZVJhbmdlKHJlc3Vs
dC5yYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxvY2F0aW9uLCByZXN1bHQucmFuZ2UubGVuZ3RoKSk7
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1i
ZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWFya2VkTWlzc3BlbGxlZFRleHRBdHRyaWJ1
dGUsIEBZRVMsIE5TTWFrZVJhbmdlKHJlc3VsdC5yYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxvY2F0
aW9uLCByZXN1bHQucmFuZ2UubGVuZ3RoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCBkMTUxNzU4Mjc0OGI0ZjdlMzg0NTU0
MmNlOTQwNDc0NjZkN2VjM2RjLi44ZTAzZWY3NTI0YzM2YmExMDA4NTcyNTc4ZmIxM2VmNzBhODBk
ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKQEAgLTIxNzYsMTIgKzIxNzYsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBi
b29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIENvbXBvc2l0ZU9wZXJhdGlvbikgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAg
IHJldHVybiBmcm9tLmZvbnRJdGFsaWMoKSAmJiB0by5mb250SXRhbGljKCkgJiYgZnJvbS5mb250
RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0
by5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xu
dDsKKyAgICAgICAgcmV0dXJuIGZyb20uZm9udEl0YWxpYygpICYmIHRvLmZvbnRJdGFsaWMoKSAm
JiBmcm9tLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBQQUw6OkZvbnRTdHls
ZUF4aXM6OnNsbnQgJiYgdG8uZm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IFBB
TDo6Rm9udFN0eWxlQXhpczo6c2xudDsKICAgICB9CiAKICAgICB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlJiBkZXN0aW5hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlJiB0bywgY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
IGZpbmFsCiAgICAgewotICAgICAgICBhdXRvIGJsZW5kZWRTdHlsZUF4aXMgPSBGb250U3R5bGVB
eGlzOjpzbG50OworICAgICAgICBhdXRvIGJsZW5kZWRTdHlsZUF4aXMgPSBQQUw6OkZvbnRTdHls
ZUF4aXM6OnNsbnQ7CiAgICAgICAgIGlmIChjb250ZXh0LmlzRGlzY3JldGUpCiAgICAgICAgICAg
ICBibGVuZGVkU3R5bGVBeGlzID0gKGNvbnRleHQucHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG8p
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA0OWEzMTY1Nzgy
NThiMzY4ODA1MjY4OGNhZmY2ZjBmOGZjYjJlY2JkLi41NjJiZjE5Y2Y1MmE0YTdlZjg3ZWNmNWQ1
YzJlODJlYzAyYTFjOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMTE1OSwyNyArMTE1OSwyNyBAQCBzdGF0aWMgUmVm
PENTU1ZhbHVlPiB3aWxsQ2hhbmdlUHJvcGVydHlWYWx1ZShjb25zdCBXaWxsQ2hhbmdlRGF0YSog
d2lsbENoYW5nZURhdAogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
YXBwZW5kTGlnYXR1cmVzVmFsdWUoQ1NTVmFsdWVMaXN0JiBsaXN0LCBGb250VmFyaWFudExpZ2F0
dXJlcyB2YWx1ZSwgQ1NTVmFsdWVJRCB5ZXNWYWx1ZSwgQ1NTVmFsdWVJRCBub1ZhbHVlKQorc3Rh
dGljIGlubGluZSB2b2lkIGFwcGVuZExpZ2F0dXJlc1ZhbHVlKENTU1ZhbHVlTGlzdCYgbGlzdCwg
UEFMOjpGb250VmFyaWFudExpZ2F0dXJlcyB2YWx1ZSwgQ1NTVmFsdWVJRCB5ZXNWYWx1ZSwgQ1NT
VmFsdWVJRCBub1ZhbHVlKQogewogICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzOjpOb3JtYWw6CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1
cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgogICAgICAg
ICBsaXN0LmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShub1ZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGln
YXR1cmVzOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CiAg
ICAgICAgIGxpc3QuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKHllc1ZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50TGln
YXR1cmVzUHJvcGVydHlWYWx1ZShGb250VmFyaWFudExpZ2F0dXJlcyBjb21tb24sIEZvbnRWYXJp
YW50TGlnYXR1cmVzIGRpc2NyZXRpb25hcnksIEZvbnRWYXJpYW50TGlnYXR1cmVzIGhpc3Rvcmlj
YWwsIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzKQorc3RhdGljIFJl
ZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRMaWdhdHVyZXNQcm9wZXJ0eVZhbHVlKFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXMgY29tbW9uLCBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIGRpc2NyZXRp
b25hcnksIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbCwgUEFMOjpGb250VmFy
aWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcykKIHsKICAgICBhdXRvJiBjc3NWYWx1
ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGlmIChjb21tb24gPT0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vICYmIGRpc2NyZXRpb25hcnkgPT0gRm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vICYmIGhpc3RvcmljYWwgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vICYmIGNv
bnRleHR1YWxBbHRlcm5hdGVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObykKKyAgICBpZiAo
Y29tbW9uID09IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vICYmIGRpc2NyZXRpb25hcnkg
PT0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm8gJiYgaGlzdG9yaWNhbCA9PSBQQUw6OkZv
bnRWYXJpYW50TGlnYXR1cmVzOjpObyAmJiBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9PSBQQUw6OkZv
bnRWYXJpYW50TGlnYXR1cmVzOjpObykKICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICBpZiAoY29tbW9uID09IEZvbnRW
YXJpYW50TGlnYXR1cmVzOjpOb3JtYWwgJiYgZGlzY3JldGlvbmFyeSA9PSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm9ybWFsICYmIGhpc3RvcmljYWwgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbCAmJiBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9PSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKQorICAgIGlmIChjb21tb24gPT0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
ICYmIGRpc2NyZXRpb25hcnkgPT0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsICYm
IGhpc3RvcmljYWwgPT0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsICYmIGNvbnRl
eHR1YWxBbHRlcm5hdGVzID09IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpOwogCiAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7CkBAIC0xMTkwLDE1NiArMTE5MCwxNTYgQEAgc3RhdGljIFJlZjxDU1NWYWx1
ZT4gZm9udFZhcmlhbnRMaWdhdHVyZXNQcm9wZXJ0eVZhbHVlKEZvbnRWYXJpYW50TGlnYXR1cmVz
IGNvbW0KICAgICByZXR1cm4gdmFsdWVMaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBm
b250VmFyaWFudFBvc2l0aW9uUHJvcGVydHlWYWx1ZShGb250VmFyaWFudFBvc2l0aW9uIHBvc2l0
aW9uKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRQb3NpdGlvblByb3BlcnR5VmFs
dWUoUEFMOjpGb250VmFyaWFudFBvc2l0aW9uIHBvc2l0aW9uKQogewogICAgIGF1dG8mIGNzc1Zh
bHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgQ1NTVmFsdWVJRCB2YWx1
ZUlEID0gQ1NTVmFsdWVOb3JtYWw7CiAgICAgc3dpdGNoIChwb3NpdGlvbikgewotICAgIGNhc2Ug
Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBv
c2l0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRQb3Np
dGlvbjo6U3Vic2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpTdWJz
Y3JpcHQ6CiAgICAgICAgIHZhbHVlSUQgPSBDU1NWYWx1ZVN1YjsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ6CiAgICAgICAgIHZhbHVlSUQgPSBDU1NW
YWx1ZVN1cGVyOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFs
dWU+IGZvbnRWYXJpYW50Q2Fwc1Byb3BlcnR5VmFsdWUoRm9udFZhcmlhbnRDYXBzIGNhcHMpCitz
dGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudENhcHNQcm9wZXJ0eVZhbHVlKFBBTDo6Rm9u
dFZhcmlhbnRDYXBzIGNhcHMpCiB7CiAgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKTsKICAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1h
bDsKICAgICBzd2l0Y2ggKGNhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFs
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFy
aWFudENhcHM6OlNtYWxsOgogICAgICAgICB2YWx1ZUlEID0gQ1NTVmFsdWVTbWFsbENhcHM7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKICAgICAgICAgdmFsdWVJRCA9IENT
U1ZhbHVlQWxsU21hbGxDYXBzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6UGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZToKICAg
ICAgICAgdmFsdWVJRCA9IENTU1ZhbHVlUGV0aXRlQ2FwczsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRDYXBzOjpBbGxQZXRpdGU6CiAgICAgICAgIHZhbHVlSUQgPSBDU1NWYWx1ZUFsbFBldGl0ZUNh
cHM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlVuaWNhc2U6CiAgICAgICAgIHZhbHVlSUQg
PSBDU1NWYWx1ZVVuaWNhc2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpUaXRsaW5nOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CiAg
ICAgICAgIHZhbHVlSUQgPSBDU1NWYWx1ZVRpdGxpbmdDYXBzOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJ
RCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50TnVtZXJpY1Byb3BlcnR5
VmFsdWUoRm9udFZhcmlhbnROdW1lcmljRmlndXJlIGZpZ3VyZSwgRm9udFZhcmlhbnROdW1lcmlj
U3BhY2luZyBzcGFjaW5nLCBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiBmcmFjdGlvbiwgRm9u
dFZhcmlhbnROdW1lcmljT3JkaW5hbCBvcmRpbmFsLCBGb250VmFyaWFudE51bWVyaWNTbGFzaGVk
WmVybyBzbGFzaGVkWmVybykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50TnVtZXJp
Y1Byb3BlcnR5VmFsdWUoUEFMOjpGb250VmFyaWFudE51bWVyaWNGaWd1cmUgZmlndXJlLCBQQUw6
OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgc3BhY2luZywgUEFMOjpGb250VmFyaWFudE51bWVy
aWNGcmFjdGlvbiBmcmFjdGlvbiwgUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGlu
YWwsIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8gc2xhc2hlZFplcm8pCiB7CiAg
ICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKLSAgICBp
ZiAoZmlndXJlID09IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsICYmIHNwYWNpbmcg
PT0gRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsICYmIGZyYWN0aW9uID09IEZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwgJiYgb3JkaW5hbCA9PSBGb250VmFyaWFudE51
bWVyaWNPcmRpbmFsOjpOb3JtYWwgJiYgc2xhc2hlZFplcm8gPT0gRm9udFZhcmlhbnROdW1lcmlj
U2xhc2hlZFplcm86Ok5vcm1hbCkKKyAgICBpZiAoZmlndXJlID09IFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljRmlndXJlOjpOb3JtYWwgJiYgc3BhY2luZyA9PSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmc6Ok5vcm1hbCAmJiBmcmFjdGlvbiA9PSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uOjpOb3JtYWwgJiYgb3JkaW5hbCA9PSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGlu
YWw6Ok5vcm1hbCAmJiBzbGFzaGVkWmVybyA9PSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvOjpOb3JtYWwpCiAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKIAogICAgIGF1dG8gdmFsdWVMaXN0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIHN3aXRjaCAoZmlndXJlKSB7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CiAgICAgICAgIHZhbHVl
TGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVM
aW5pbmdOdW1zKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmlj
RmlndXJlOjpPbGRTdHlsZU51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2xkc3R5bGVOdW1zKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3BhY2luZykgewotICAgIGNhc2Ug
Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFy
aWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKICAgICAg
ICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVByb3BvcnRpb25hbE51bXMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM6CiAgICAgICAgIHZhbHVlTGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUYWJ1
bGFyTnVtcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKGZyYWN0aW9u
KSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZyYWN0aW9u
czoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJh
Y3Rpb25zOgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlRGlhZ29uYWxGcmFjdGlvbnMpKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFjdGlv
bnM6CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVTdGFja2VkRnJhY3Rpb25zKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGlmIChvcmRpbmFsID09IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllcykK
KyAgICBpZiAob3JkaW5hbCA9PSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllcykK
ICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU9yZGluYWwpKTsKLSAgICBpZiAoc2xhc2hlZFplcm8gPT0gRm9udFZhcmlh
bnROdW1lcmljU2xhc2hlZFplcm86OlllcykKKyAgICBpZiAoc2xhc2hlZFplcm8gPT0gUEFMOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVzKQogICAgICAgICB2YWx1ZUxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2xhc2hlZFpl
cm8pKTsKIAogICAgIHJldHVybiB2YWx1ZUxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+
IGZvbnRWYXJpYW50QWx0ZXJuYXRlc1Byb3BlcnR5VmFsdWUoRm9udFZhcmlhbnRBbHRlcm5hdGVz
IGFsdGVybmF0ZXMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEFsdGVybmF0ZXNQ
cm9wZXJ0eVZhbHVlKFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzIGFsdGVybmF0ZXMpCiB7CiAg
ICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKICAgICBD
U1NWYWx1ZUlEIHZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAgICBzd2l0Y2ggKGFsdGVybmF0
ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6CiAgICAgICAgIHZhbHVl
SUQgPSBDU1NWYWx1ZUhpc3RvcmljYWxGb3JtczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwogfQog
Ci1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEVhc3RBc2lhblByb3BlcnR5VmFsdWUo
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQsIEZvbnRWYXJpYW50RWFzdEFzaWFu
V2lkdGggd2lkdGgsIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieSBydWJ5KQorc3RhdGljIFJlZjxD
U1NWYWx1ZT4gZm9udFZhcmlhbnRFYXN0QXNpYW5Qcm9wZXJ0eVZhbHVlKFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQsIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aCB3aWR0aCwgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgcnVieSkKIHsKICAgICBhdXRv
JiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGlmICh2YXJp
YW50ID09IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsICYmIHdpZHRoID09IEZv
bnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCAmJiBydWJ5ID09IEZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6Tm9ybWFsKQorICAgIGlmICh2YXJpYW50ID09IFBBTDo6Rm9udFZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50OjpOb3JtYWwgJiYgd2lkdGggPT0gUEFMOjpGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoOjpOb3JtYWwgJiYgcnVieSA9PSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eTo6Tm9ybWFsKQogICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAKICAgICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgogICAgICAgICB2YWx1ZUxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzNzgpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okpp
czgzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOgog
ICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlSmlzODMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OkppczkwOgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBv
b2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzOTApKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0OgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0OgogICAgICAgICB2YWx1ZUxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlz
MDQpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6OlNpbXBsaWZpZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6U2ltcGxpZmllZDoKICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNpbXBsaWZpZWQpKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOgogICAg
ICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlVHJhZGl0aW9uYWwpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dp
dGNoICh3aWR0aCkgewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFs
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDoKICAgICAgICAgdmFs
dWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUZ1bGxXaWR0aCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFz
aWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aDo6UHJvcG9ydGlvbmFsOgogICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHJ1YnkgPT0gRm9udFZhcmlhbnRFYXN0
QXNpYW5SdWJ5OjpZZXMpCisgICAgaWYgKHJ1YnkgPT0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lh
blJ1Ynk6OlllcykKICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJ1YnkpKTsKIAogICAgIHJldHVybiB2YWx1ZUxpc3Q7
CkBAIC0xOTY2LDcgKzE5NjYsNyBAQCBSZWY8Q1NTRm9udFN0eWxlVmFsdWU+IENvbXB1dGVkU3R5
bGVFeHRyYWN0b3I6OmZvbnROb25LZXl3b3JkU3R5bGVGcm9tU3R5bGVWYWx1ZQogICAgIHJldHVy
biBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlVmFsdWUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGl0YWxpYyksIENTU1VuaXRUeXBl
OjpDU1NfREVHKSk7CiB9CiAKLVJlZjxDU1NGb250U3R5bGVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4
dHJhY3Rvcjo6Zm9udFN0eWxlRnJvbVN0eWxlVmFsdWUoc3RkOjpvcHRpb25hbDxGb250U2VsZWN0
aW9uVmFsdWU+IGl0YWxpYywgRm9udFN0eWxlQXhpcyBmb250U3R5bGVBeGlzKQorUmVmPENTU0Zv
bnRTdHlsZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpmb250U3R5bGVGcm9tU3R5bGVW
YWx1ZShzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gaXRhbGljLCBQQUw6OkZvbnRT
dHlsZUF4aXMgZm9udFN0eWxlQXhpcykKIHsKICAgICBpZiAoYXV0byBrZXl3b3JkID0gZm9udFN0
eWxlS2V5d29yZChpdGFsaWMsIGZvbnRTdHlsZUF4aXMpKQogICAgICAgICByZXR1cm4gQ1NTRm9u
dFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShrZXl3b3JkLnZhbHVlKCkpKTsKQEAgLTE5ODYsMTc4ICsxOTg2LDE3OCBAQCBz
dGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21TdHlsZShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpCiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOwogCiAgICAgc3dpdGNoIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50Q29t
bW9uTGlnYXR1cmVzKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6
CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29tbW9uTGln
YXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxp
c3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudERpc2NyZXRpb25hcnlM
aWdhdHVyZXMoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAg
IGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlcykpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRIaXN0
b3JpY2FsTGlnYXR1cmVzKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSGlzdG9y
aWNhbExpZ2F0dXJlcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGln
YXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgogICAg
ICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgc3dpdGNoIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250
ZXh0dWFsKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxp
c3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vQ29udGV4dHVhbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBz
d2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRQb3NpdGlvbigpKSB7Ci0gICAg
Y2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50UG9zaXRpb246Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dFBvc2l0aW9uOjpTdWJzY3JpcHQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246
OlN1YnNjcmlwdDoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3ViKSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgogICAgICAgICBsaXN0LT5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVT
dXBlcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHN0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpLnZhcmlhbnRDYXBzKCkpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDoKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudENhcHM6OlNtYWxsOgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbWFsbENhcHMpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgogICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBbGxTbWFsbENhcHMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENh
cHM6OlBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6CiAgICAg
ICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZVBldGl0ZUNhcHMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBz
OjpBbGxQZXRpdGU6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbFBldGl0ZUNhcHMpKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlVuaWNhc2U6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZToKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5pY2Fz
ZSkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgogICAgICAgICBsaXN0LT5h
cHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVUaXRsaW5nQ2FwcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2gg
KHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljRmlndXJlKCkpIHsKLSAgICBj
YXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTGluaW5nTnVtcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVt
ZXJpY0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVyczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2xkc3R5
bGVOdW1zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9u
dERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNTcGFjaW5nKCkpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6CiAgICAgICAgIGxp
c3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVByb3BvcnRpb25hbE51bXMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM6CiAgICAgICAgIGxpc3Qt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVRhYnVsYXJOdW1zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRj
aCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGcmFjdGlvbigpKSB7Ci0g
ICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZyYWN0aW9uczoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rpb25z
OgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEaWFnb25hbEZyYWN0aW9ucykpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25z
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0
aW9uczoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9ucykpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlh
bnROdW1lcmljT3JkaW5hbCgpKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFs
OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1h
bDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZ
ZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczoKICAgICAg
ICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlT3JkaW5hbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBz
d2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8o
KSkgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDoKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVzOgor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVzOgogICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTbGFzaGVkWmVybykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRBbHRlcm5hdGVzKCkpIHsK
LSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6CiAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUhpc3RvcmljYWxGb3JtcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2gg
KHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KCkpIHsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgogICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVKaXM3OCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6SmlzODM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzODM6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczgzKSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MDoKKyAgICBjYXNlIFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MDoKICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlSmlzOTApKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6OkppczA0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6OkppczA0OgogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXMwNCkpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6U2ltcGxpZmllZDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkOgogICAgICAg
ICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTaW1wbGlmaWVkKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpUcmFkaXRpb25hbDoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpUcmFkaXRpb25hbDoKICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlVHJhZGl0aW9uYWwpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoIChz
dHlsZS5mb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFuV2lkdGgoKSkgewotICAgIGNh
c2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5XaWR0aDo6RnVsbDoKICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRnVsbFdpZHRoKSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJv
cG9ydGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9w
b3J0aW9uYWw6CiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCku
dmFyaWFudEVhc3RBc2lhblJ1YnkoKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5S
dWJ5OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9y
bWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6
WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczoKICAgICAg
ICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlUnVieSkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMTY3LDE1
ICsyMTY3LDE1IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFN5bnRo
ZXNpc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhlc2lzTm9uZSkK
KyAgICBpZiAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRoZXNpcygpID09IFBBTDo6
Rm9udFN5bnRoZXNpc05vbmUpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgYXV0byBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGlmIChzdHlsZS5m
b250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhlc2lzV2VpZ2h0KQor
ICAgIGlmIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBQQUw6OkZv
bnRTeW50aGVzaXNXZWlnaHQpCiAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlaWdodCkpOwotICAgIGlm
IChzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhlc2lz
U3R5bGUpCisgICAgaWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSAm
IFBBTDo6Rm9udFN5bnRoZXNpc1N0eWxlKQogICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdHlsZSkpOwot
ICAgIGlmIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBGb250U3lu
dGhlc2lzU21hbGxDYXBzKQorICAgIGlmIChzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U3lu
dGhlc2lzKCkgJiBQQUw6OkZvbnRTeW50aGVzaXNTbWFsbENhcHMpCiAgICAgICAgIGxpc3QtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVNtYWxsQ2FwcykpOwogICAgIHJldHVybiBsaXN0OwogfQpAQCAtMjYyOCw5ICsyNjI4LDkg
QEAgc3RhdGljIFJlZjxDU1NGb250VmFsdWU+IGZvbnRTaG9ydGhhbmRWYWx1ZUZvclNlbGVjdGlv
blByb3BlcnRpZXMoY29uc3QgRm9udERlc2MKICAgICBhdXRvIGNvbXB1dGVkRm9udCA9IENTU0Zv
bnRWYWx1ZTo6Y3JlYXRlKCk7CiAKICAgICBhdXRvIHZhcmlhbnRDYXBzID0gZm9udERlc2NyaXB0
aW9uLnZhcmlhbnRDYXBzKCk7Ci0gICAgaWYgKHZhcmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fw
czo6U21hbGwpCisgICAgaWYgKHZhcmlhbnRDYXBzID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpT
bWFsbCkKICAgICAgICAgY29tcHV0ZWRGb250LT52YXJpYW50ID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbWFsbENhcHMpOwotICAgIGVs
c2UgaWYgKHZhcmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsKQorICAgIGVsc2Ug
aWYgKHZhcmlhbnRDYXBzID09IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCiAgICAgICAg
IGNvbXB1dGVkRm9udC0+dmFyaWFudCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVy
biBDU1NGb250VmFsdWU6OmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCmluZGV4IGQyNjE0MTVjZDdhNDk3MTMwMGEwN2Q2ZGNj
ODhiODgzZmEyZDNkNDAuLjAyOTFhYzZhZjU3NDMwYTkxZmFiOTYwYzJjYmMxOGY0MDhlYzhhYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHls
ZURlZnMuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0
RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzUsNyArNzUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udE5vbktleXdvcmRT
dHJldGNoRnJvbVN0eWxlVmFsdWUoRm9udFNlbGVjdGlvblZhbHVlKTsKICAgICBzdGF0aWMgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3RyZXRjaEZyb21TdHlsZVZhbHVlKEZvbnRTZWxlY3Rp
b25WYWx1ZSk7CiAgICAgc3RhdGljIFJlZjxDU1NGb250U3R5bGVWYWx1ZT4gZm9udE5vbktleXdv
cmRTdHlsZUZyb21TdHlsZVZhbHVlKEZvbnRTZWxlY3Rpb25WYWx1ZSk7Ci0gICAgc3RhdGljIFJl
ZjxDU1NGb250U3R5bGVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlVmFsdWUoc3RkOjpvcHRpb25h
bDxGb250U2VsZWN0aW9uVmFsdWU+LCBGb250U3R5bGVBeGlzKTsKKyAgICBzdGF0aWMgUmVmPENT
U0ZvbnRTdHlsZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGVWYWx1ZShzdGQ6Om9wdGlvbmFsPEZv
bnRTZWxlY3Rpb25WYWx1ZT4sIFBBTDo6Rm9udFN0eWxlQXhpcyk7CiAKIHByaXZhdGU6CiAgICAg
Ly8gVGhlIHN0eWxlZCBlbGVtZW50IGlzIGVpdGhlciB0aGUgZWxlbWVudCBwYXNzZWQgaW50bwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKaW5kZXggZWIzYmMwYjMyMjRkNzVhNjEyM2RjMmJh
ZDc5NjgzYzc3YjlhODU2OS4uMWEzZWVmZWY3MTg5MmZkZGRmYzVhZGQ3NjExNmQxYzhhNWFhNTIw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgQ1NT
Rm9udEZhY2U6OkNTU0ZvbnRGYWNlKGNvbnN0IFNldHRpbmdzOjpWYWx1ZXMqIHNldHRpbmdzLCBT
dHlsZVJ1bGVGb250RmFjZSogY3MKICAgICAsIG1fbWF5QmVQdXJnZWQoIXdyYXBwZXIpCiAgICAg
LCBtX3Nob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxldGlvbnMoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PnNob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxldGlvbnMpCiAgICAgLCBtX2ZvbnRMb2FkVGltaW5n
T3ZlcnJpZGUoc2V0dGluZ3MgPyBzZXR0aW5ncy0+Zm9udExvYWRUaW1pbmdPdmVycmlkZSA6IEZv
bnRMb2FkVGltaW5nT3ZlcnJpZGU6Ok5vbmUpCi0gICAgLCBtX2FsbG93VXNlckluc3RhbGxlZEZv
bnRzKHNldHRpbmdzICYmICFzZXR0aW5ncy0+c2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMg
PyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8gOiBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzKQorICAgICwgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250cyhzZXR0aW5ncyAmJiAhc2V0dGlu
Z3MtPnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzID8gUEFMOjpBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6Tm8gOiBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpCiAgICAgLCBt
X3RpbWVvdXRUaW1lcigqdGhpcywgJkNTU0ZvbnRGYWNlOjp0aW1lb3V0RmlyZWQpCiB7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZS5oCmluZGV4IDFiOGNlYWE2ZTI1MWZmOGViZTU3YmY0MDE1ZmEx
MmExNmE1MTRlYjAuLjI2NWFhMzU2NjZmOTJlZWZkNDg5ZWI2OGI1MTQ3YjYyZmNhOTlmOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiRm9u
dFRhZ2dlZFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHls
ZVJ1bGUuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC0xNTMs
NyArMTUzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBwdXJnZWFibGUoKSBjb25zdDsKIAotICAg
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250czsgfQorICAgIFBBTDo6QWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93VXNlckluc3RhbGxlZEZvbnRzOyB9CiAKICAgICB2b2lkIHVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKIApAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21heUJlUHVy
Z2VkIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9zaG91bGRJZ25vcmVGb250TG9hZENvbXBsZXRpb25z
IHsgZmFsc2UgfTsKICAgICBGb250TG9hZFRpbWluZ092ZXJyaWRlIG1fZm9udExvYWRUaW1pbmdP
dmVycmlkZSB7IEZvbnRMb2FkVGltaW5nT3ZlcnJpZGU6Ok5vbmUgfTsKLSAgICBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzIHsgQWxsb3dVc2VySW5zdGFs
bGVkRm9udHM6OlllcyB9OworICAgIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgbV9hbGxv
d1VzZXJJbnN0YWxsZWRGb250cyB7IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyB9
OwogCiAgICAgVGltZXIgbV90aW1lb3V0VGltZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNldC5jcHAKaW5kZXggNjJlZWNiNWE1ZDI0MWRjYmU4YjI0OTM1YmI2YzJmMzI4OTQ5MTRh
ZS4uYTJmNDg4ZDE1Y2VlNjI2Njk4MDE5NGExZjI2OTEwZjA4NDY5M2MwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBDU1NGb250
RmFjZVNldDo6ZW5zdXJlTG9jYWxGb250RmFjZXNGb3JGYW1pbHlSZWdpc3RlcmVkKGNvbnN0IFN0
cmluZyYgZmFtaWwKIAogICAgIGlmICghbV9vd25pbmdGb250U2VsZWN0b3ItPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFsbG93VXNlckluc3RhbGxlZEZv
bnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzID0gbV9vd25pbmdGb250U2VsZWN0b3ItPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+c2V0dGluZ3NWYWx1ZXMoKS5zaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyA/IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0
YWxsZWRGb250czo6Tm87CisgICAgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyA9IG1fb3duaW5nRm9udFNlbGVjdG9yLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnNldHRpbmdzVmFsdWVzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMg
PyBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBQQUw6OkFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOjpObzsKICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzID0gRm9udENhY2hlOjpmb3JDdXJyZW50VGhyZWFkKCkuZ2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWx5KGZhbWlseU5hbWUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKICAgICBpZiAoY2FwYWJpbGl0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKaW5kZXggZWFlN2ExYWJhNjNkYjhm
OTJkNDRkMjQ3YmRiMTY1NjU3MTk3MTc1MC4uYTU0ZjM5NDA3YzM3YjY2NzVmYTAzODMxMTZmNjk2
N2Y2OWZiZTllMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCkBA
IC02NzIsMjMgKzY3MiwyMyBAQCBzdGF0aWMgY29uc3RleHByIGRvdWJsZSBtbVBlckluY2ggPSAy
NS40Owogc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgY21QZXJJbmNoID0gMi41NDsKIHN0YXRpYyBj
b25zdGV4cHIgZG91YmxlIFFQZXJJbmNoID0gMjUuNCAqIDQuMDsKIAotc3RhdGljIGRvdWJsZSBs
ZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9naWNhbEJveEF4aXMg
bG9naWNhbEF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJv
b3RFbGVtZW50U3R5bGUpCitzdGF0aWMgZG91YmxlIGxlbmd0aE9mVmlld3BvcnRQaHlzaWNhbEF4
aXNGb3JMb2dpY2FsQXhpcyhQQUw6OkxvZ2ljYWxCb3hBeGlzIGxvZ2ljYWxBeGlzLCBjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKQogewog
ICAgIGlmICghcm9vdEVsZW1lbnRTdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0
Y2ggKG1hcExvZ2ljYWxBeGlzVG9QaHlzaWNhbEF4aXMobWFrZVRleHRGbG93KHJvb3RFbGVtZW50
U3R5bGUtPndyaXRpbmdNb2RlKCksIHJvb3RFbGVtZW50U3R5bGUtPmRpcmVjdGlvbigpKSwgbG9n
aWNhbEF4aXMpKSB7Ci0gICAgY2FzZSBCb3hBeGlzOjpIb3Jpem9udGFsOgorICAgIGNhc2UgUEFM
OjpCb3hBeGlzOjpIb3Jpem9udGFsOgogICAgICAgICByZXR1cm4gc2l6ZS53aWR0aCgpOwogCi0g
ICAgY2FzZSBCb3hBeGlzOjpWZXJ0aWNhbDoKKyAgICBjYXNlIFBBTDo6Qm94QXhpczo6VmVydGlj
YWw6CiAgICAgICAgIHJldHVybiBzaXplLmhlaWdodCgpOwogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1zdGF0aWMgZG91YmxlIGxlbmd0aE9mVmlld3BvcnRQaHlzaWNh
bEF4aXNGb3JMb2dpY2FsQXhpcyhMb2dpY2FsQm94QXhpcyBsb2dpY2FsQXhpcywgY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBSZW5kZXJWaWV3JiByZW5kZXJWaWV3KQorc3RhdGljIGRvdWJs
ZSBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoUEFMOjpMb2dpY2Fs
Qm94QXhpcyBsb2dpY2FsQXhpcywgY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBSZW5kZXJW
aWV3JiByZW5kZXJWaWV3KQogewogICAgIGNvbnN0IGF1dG8qIHJvb3RFbGVtZW50ID0gcmVuZGVy
Vmlldy5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQp
CkBAIC03NTIsOSArNzUyLDkgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlVW56
b29tZWROb25DYWxjTGVuZ3RoRG91YmxlKENTU1VuaXRUeXBlIHByaW1pdGkKICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVk1JTjoKICAgICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyByZW5kZXJW
aWV3LT5zaXplRm9yQ1NTRGVmYXVsdFZpZXdwb3J0VW5pdHMoKS5taW5EaW1lbnNpb24oKSAvIDEw
MC4wICogdmFsdWUgOiB2YWx1ZTsKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkI6Ci0gICAg
ICAgIHJldHVybiByZW5kZXJWaWV3ID8gbGVuZ3RoT2ZWaWV3cG9ydFBoeXNpY2FsQXhpc0Zvckxv
Z2ljYWxBeGlzKExvZ2ljYWxCb3hBeGlzOjpCbG9jaywgcmVuZGVyVmlldy0+c2l6ZUZvckNTU0Rl
ZmF1bHRWaWV3cG9ydFVuaXRzKCksICpyZW5kZXJWaWV3KSAvIDEwMC4wICogdmFsdWUgOiAwOwor
ICAgICAgICByZXR1cm4gcmVuZGVyVmlldyA/IGxlbmd0aE9mVmlld3BvcnRQaHlzaWNhbEF4aXNG
b3JMb2dpY2FsQXhpcyhQQUw6OkxvZ2ljYWxCb3hBeGlzOjpCbG9jaywgcmVuZGVyVmlldy0+c2l6
ZUZvckNTU0RlZmF1bHRWaWV3cG9ydFVuaXRzKCksICpyZW5kZXJWaWV3KSAvIDEwMC4wICogdmFs
dWUgOiAwOwogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WSToKLSAgICAgICAgcmV0dXJuIHJl
bmRlclZpZXcgPyBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9n
aWNhbEJveEF4aXM6OklubGluZSwgcmVuZGVyVmlldy0+c2l6ZUZvckNTU0RlZmF1bHRWaWV3cG9y
dFVuaXRzKCksICpyZW5kZXJWaWV3KSAvIDEwMC4wICogdmFsdWUgOiAwOworICAgICAgICByZXR1
cm4gcmVuZGVyVmlldyA/IGxlbmd0aE9mVmlld3BvcnRQaHlzaWNhbEF4aXNGb3JMb2dpY2FsQXhp
cyhQQUw6OkxvZ2ljYWxCb3hBeGlzOjpJbmxpbmUsIHJlbmRlclZpZXctPnNpemVGb3JDU1NEZWZh
dWx0Vmlld3BvcnRVbml0cygpLCAqcmVuZGVyVmlldykgLyAxMDAuMCAqIHZhbHVlIDogMDsKICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZIOgogICAgICAgICByZXR1cm4gcmVuZGVyVmlldyA/
IHJlbmRlclZpZXctPnNpemVGb3JDU1NTbWFsbFZpZXdwb3J0VW5pdHMoKS5oZWlnaHQoKSAvIDEw
MC4wICogdmFsdWUgOiAwOwogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVlc6CkBAIC03NjQs
OSArNzY0LDkgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlVW56b29tZWROb25D
YWxjTGVuZ3RoRG91YmxlKENTU1VuaXRUeXBlIHByaW1pdGkKICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfU1ZNSU46CiAgICAgICAgIHJldHVybiByZW5kZXJWaWV3ID8gcmVuZGVyVmlldy0+c2l6
ZUZvckNTU1NtYWxsVmlld3BvcnRVbml0cygpLm1pbkRpbWVuc2lvbigpIC8gMTAwLjAgKiB2YWx1
ZSA6IHZhbHVlOwogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgICAgIHJldHVy
biByZW5kZXJWaWV3ID8gbGVuZ3RoT2ZWaWV3cG9ydFBoeXNpY2FsQXhpc0ZvckxvZ2ljYWxBeGlz
KExvZ2ljYWxCb3hBeGlzOjpCbG9jaywgcmVuZGVyVmlldy0+c2l6ZUZvckNTU1NtYWxsVmlld3Bv
cnRVbml0cygpLCAqcmVuZGVyVmlldykgLyAxMDAuMCAqIHZhbHVlIDogMDsKKyAgICAgICAgcmV0
dXJuIHJlbmRlclZpZXcgPyBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4
aXMoUEFMOjpMb2dpY2FsQm94QXhpczo6QmxvY2ssIHJlbmRlclZpZXctPnNpemVGb3JDU1NTbWFs
bFZpZXdwb3J0VW5pdHMoKSwgKnJlbmRlclZpZXcpIC8gMTAwLjAgKiB2YWx1ZSA6IDA7CiAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSToKLSAgICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyBs
ZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9naWNhbEJveEF4aXM6
OklubGluZSwgcmVuZGVyVmlldy0+c2l6ZUZvckNTU1NtYWxsVmlld3BvcnRVbml0cygpLCAqcmVu
ZGVyVmlldykgLyAxMDAuMCAqIHZhbHVlIDogMDsKKyAgICAgICAgcmV0dXJuIHJlbmRlclZpZXcg
PyBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoUEFMOjpMb2dpY2Fs
Qm94QXhpczo6SW5saW5lLCByZW5kZXJWaWV3LT5zaXplRm9yQ1NTU21hbGxWaWV3cG9ydFVuaXRz
KCksICpyZW5kZXJWaWV3KSAvIDEwMC4wICogdmFsdWUgOiAwOwogICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkg6CiAgICAgICAgIHJldHVybiByZW5kZXJWaWV3ID8gcmVuZGVyVmlldy0+c2l6
ZUZvckNTU0xhcmdlVmlld3BvcnRVbml0cygpLmhlaWdodCgpIC8gMTAwLjAgKiB2YWx1ZSA6IDA7
CiAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKQEAgLTc3Niw5ICs3NzYsOSBAQCBkb3Vi
bGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVVbnpvb21lZE5vbkNhbGNMZW5ndGhEb3VibGUo
Q1NTVW5pdFR5cGUgcHJpbWl0aQogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVk1JTjoKICAg
ICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyByZW5kZXJWaWV3LT5zaXplRm9yQ1NTTGFyZ2VWaWV3
cG9ydFVuaXRzKCkubWluRGltZW5zaW9uKCkgLyAxMDAuMCAqIHZhbHVlIDogdmFsdWU7CiAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWQjoKLSAgICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyBs
ZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9naWNhbEJveEF4aXM6
OkJsb2NrLCByZW5kZXJWaWV3LT5zaXplRm9yQ1NTTGFyZ2VWaWV3cG9ydFVuaXRzKCksICpyZW5k
ZXJWaWV3KSAvIDEwMC4wICogdmFsdWUgOiAwOworICAgICAgICByZXR1cm4gcmVuZGVyVmlldyA/
IGxlbmd0aE9mVmlld3BvcnRQaHlzaWNhbEF4aXNGb3JMb2dpY2FsQXhpcyhQQUw6OkxvZ2ljYWxC
b3hBeGlzOjpCbG9jaywgcmVuZGVyVmlldy0+c2l6ZUZvckNTU0xhcmdlVmlld3BvcnRVbml0cygp
LCAqcmVuZGVyVmlldykgLyAxMDAuMCAqIHZhbHVlIDogMDsKICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfTFZJOgotICAgICAgICByZXR1cm4gcmVuZGVyVmlldyA/IGxlbmd0aE9mVmlld3BvcnRQ
aHlzaWNhbEF4aXNGb3JMb2dpY2FsQXhpcyhMb2dpY2FsQm94QXhpczo6SW5saW5lLCByZW5kZXJW
aWV3LT5zaXplRm9yQ1NTTGFyZ2VWaWV3cG9ydFVuaXRzKCksICpyZW5kZXJWaWV3KSAvIDEwMC4w
ICogdmFsdWUgOiAwOworICAgICAgICByZXR1cm4gcmVuZGVyVmlldyA/IGxlbmd0aE9mVmlld3Bv
cnRQaHlzaWNhbEF4aXNGb3JMb2dpY2FsQXhpcyhQQUw6OkxvZ2ljYWxCb3hBeGlzOjpJbmxpbmUs
IHJlbmRlclZpZXctPnNpemVGb3JDU1NMYXJnZVZpZXdwb3J0VW5pdHMoKSwgKnJlbmRlclZpZXcp
IC8gMTAwLjAgKiB2YWx1ZSA6IDA7CiAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWSDoKICAg
ICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyByZW5kZXJWaWV3LT5zaXplRm9yQ1NTRHluYW1pY1Zp
ZXdwb3J0VW5pdHMoKS5oZWlnaHQoKSAvIDEwMC4wICogdmFsdWUgOiAwOwogICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19EVlc6CkBAIC03ODgsOSArNzg4LDkgQEAgZG91YmxlIENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlVW56b29tZWROb25DYWxjTGVuZ3RoRG91YmxlKENTU1VuaXRUeXBlIHBy
aW1pdGkKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNSU46CiAgICAgICAgIHJldHVybiBy
ZW5kZXJWaWV3ID8gcmVuZGVyVmlldy0+c2l6ZUZvckNTU0R5bmFtaWNWaWV3cG9ydFVuaXRzKCku
bWluRGltZW5zaW9uKCkgLyAxMDAuMCAqIHZhbHVlIDogdmFsdWU7CiAgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0RWQjoKLSAgICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyBsZW5ndGhPZlZpZXdw
b3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9naWNhbEJveEF4aXM6OkJsb2NrLCByZW5k
ZXJWaWV3LT5zaXplRm9yQ1NTRHluYW1pY1ZpZXdwb3J0VW5pdHMoKSwgKnJlbmRlclZpZXcpIC8g
MTAwLjAgKiB2YWx1ZSA6IDA7CisgICAgICAgIHJldHVybiByZW5kZXJWaWV3ID8gbGVuZ3RoT2ZW
aWV3cG9ydFBoeXNpY2FsQXhpc0ZvckxvZ2ljYWxBeGlzKFBBTDo6TG9naWNhbEJveEF4aXM6OkJs
b2NrLCByZW5kZXJWaWV3LT5zaXplRm9yQ1NTRHluYW1pY1ZpZXdwb3J0VW5pdHMoKSwgKnJlbmRl
clZpZXcpIC8gMTAwLjAgKiB2YWx1ZSA6IDA7CiAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RW
SToKLSAgICAgICAgcmV0dXJuIHJlbmRlclZpZXcgPyBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxB
eGlzRm9yTG9naWNhbEF4aXMoTG9naWNhbEJveEF4aXM6OklubGluZSwgcmVuZGVyVmlldy0+c2l6
ZUZvckNTU0R5bmFtaWNWaWV3cG9ydFVuaXRzKCksICpyZW5kZXJWaWV3KSAvIDEwMC4wICogdmFs
dWUgOiAwOworICAgICAgICByZXR1cm4gcmVuZGVyVmlldyA/IGxlbmd0aE9mVmlld3BvcnRQaHlz
aWNhbEF4aXNGb3JMb2dpY2FsQXhpcyhQQUw6OkxvZ2ljYWxCb3hBeGlzOjpJbmxpbmUsIHJlbmRl
clZpZXctPnNpemVGb3JDU1NEeW5hbWljVmlld3BvcnRVbml0cygpLCAqcmVuZGVyVmlldykgLyAx
MDAuMCAqIHZhbHVlIDogMDsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIC0xLjA7CkBAIC04NDksMTAgKzg0OSwxMCBAQCBkb3VibGUg
Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbgogICAgICAgICByZXR1cm4gdmFsdWUgKiBjb252ZXJzaW9uRGF0YS5k
ZWZhdWx0Vmlld3BvcnRGYWN0b3IoKS5taW5EaW1lbnNpb24oKTsKIAogICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19WQjoKLSAgICAgICAgcmV0dXJuIHZhbHVlICogbGVuZ3RoT2ZWaWV3cG9ydFBo
eXNpY2FsQXhpc0ZvckxvZ2ljYWxBeGlzKExvZ2ljYWxCb3hBeGlzOjpCbG9jaywgY29udmVyc2lv
bkRhdGEuZGVmYXVsdFZpZXdwb3J0RmFjdG9yKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgp
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlICogbGVuZ3RoT2ZWaWV3cG9ydFBoeXNpY2FsQXhpc0Zv
ckxvZ2ljYWxBeGlzKFBBTDo6TG9naWNhbEJveEF4aXM6OkJsb2NrLCBjb252ZXJzaW9uRGF0YS5k
ZWZhdWx0Vmlld3BvcnRGYWN0b3IoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCkpOwogCiAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgICAgICByZXR1cm4gdmFsdWUgKiBsZW5n
dGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9naWNhbEJveEF4aXM6Oklu
bGluZSwgY29udmVyc2lvbkRhdGEuZGVmYXVsdFZpZXdwb3J0RmFjdG9yKCksIGNvbnZlcnNpb25E
YXRhLnJvb3RTdHlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlICogbGVuZ3RoT2ZWaWV3cG9y
dFBoeXNpY2FsQXhpc0ZvckxvZ2ljYWxBeGlzKFBBTDo6TG9naWNhbEJveEF4aXM6OklubGluZSwg
Y29udmVyc2lvbkRhdGEuZGVmYXVsdFZpZXdwb3J0RmFjdG9yKCksIGNvbnZlcnNpb25EYXRhLnJv
b3RTdHlsZSgpKTsKIAogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkg6CiAgICAgICAgIHJl
dHVybiB2YWx1ZSAqIGNvbnZlcnNpb25EYXRhLnNtYWxsVmlld3BvcnRGYWN0b3IoKS5oZWlnaHQo
KTsKQEAgLTg2NywxMCArODY3LDEwIEBAIGRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZU5vbkNhbGNMZW5ndGhEb3VibGUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uCiAgICAgICAg
IHJldHVybiB2YWx1ZSAqIGNvbnZlcnNpb25EYXRhLnNtYWxsVmlld3BvcnRGYWN0b3IoKS5taW5E
aW1lbnNpb24oKTsKIAogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSAqIGxlbmd0aE9mVmlld3BvcnRQaHlzaWNhbEF4aXNGb3JMb2dpY2FsQXhpcyhM
b2dpY2FsQm94QXhpczo6QmxvY2ssIGNvbnZlcnNpb25EYXRhLnNtYWxsVmlld3BvcnRGYWN0b3Io
KSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCkpOworICAgICAgICByZXR1cm4gdmFsdWUgKiBs
ZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoUEFMOjpMb2dpY2FsQm94
QXhpczo6QmxvY2ssIGNvbnZlcnNpb25EYXRhLnNtYWxsVmlld3BvcnRGYWN0b3IoKSwgY29udmVy
c2lvbkRhdGEucm9vdFN0eWxlKCkpOwogCiAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSToK
LSAgICAgICAgcmV0dXJuIHZhbHVlICogbGVuZ3RoT2ZWaWV3cG9ydFBoeXNpY2FsQXhpc0Zvckxv
Z2ljYWxBeGlzKExvZ2ljYWxCb3hBeGlzOjpJbmxpbmUsIGNvbnZlcnNpb25EYXRhLnNtYWxsVmll
d3BvcnRGYWN0b3IoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCkpOworICAgICAgICByZXR1
cm4gdmFsdWUgKiBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoUEFM
OjpMb2dpY2FsQm94QXhpczo6SW5saW5lLCBjb252ZXJzaW9uRGF0YS5zbWFsbFZpZXdwb3J0RmFj
dG9yKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpKTsKIAogICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkg6CiAgICAgICAgIHJldHVybiB2YWx1ZSAqIGNvbnZlcnNpb25EYXRhLmxhcmdl
Vmlld3BvcnRGYWN0b3IoKS5oZWlnaHQoKTsKQEAgLTg4NSwxMCArODg1LDEwIEBAIGRvdWJsZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhEb3VibGUoY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uCiAgICAgICAgIHJldHVybiB2YWx1ZSAqIGNvbnZlcnNpb25EYXRhLmxh
cmdlVmlld3BvcnRGYWN0b3IoKS5taW5EaW1lbnNpb24oKTsKIAogICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkI6Ci0gICAgICAgIHJldHVybiB2YWx1ZSAqIGxlbmd0aE9mVmlld3BvcnRQaHlz
aWNhbEF4aXNGb3JMb2dpY2FsQXhpcyhMb2dpY2FsQm94QXhpczo6QmxvY2ssIGNvbnZlcnNpb25E
YXRhLmxhcmdlVmlld3BvcnRGYWN0b3IoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCkpOwor
ICAgICAgICByZXR1cm4gdmFsdWUgKiBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9n
aWNhbEF4aXMoUEFMOjpMb2dpY2FsQm94QXhpczo6QmxvY2ssIGNvbnZlcnNpb25EYXRhLmxhcmdl
Vmlld3BvcnRGYWN0b3IoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCkpOwogCiAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xWSToKLSAgICAgICAgcmV0dXJuIHZhbHVlICogbGVuZ3RoT2ZW
aWV3cG9ydFBoeXNpY2FsQXhpc0ZvckxvZ2ljYWxBeGlzKExvZ2ljYWxCb3hBeGlzOjpJbmxpbmUs
IGNvbnZlcnNpb25EYXRhLmxhcmdlVmlld3BvcnRGYWN0b3IoKSwgY29udmVyc2lvbkRhdGEucm9v
dFN0eWxlKCkpOworICAgICAgICByZXR1cm4gdmFsdWUgKiBsZW5ndGhPZlZpZXdwb3J0UGh5c2lj
YWxBeGlzRm9yTG9naWNhbEF4aXMoUEFMOjpMb2dpY2FsQm94QXhpczo6SW5saW5lLCBjb252ZXJz
aW9uRGF0YS5sYXJnZVZpZXdwb3J0RmFjdG9yKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgp
KTsKIAogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVkg6CiAgICAgICAgIHJldHVybiB2YWx1
ZSAqIGNvbnZlcnNpb25EYXRhLmR5bmFtaWNWaWV3cG9ydEZhY3RvcigpLmhlaWdodCgpOwpAQCAt
OTAzLDEwICs5MDMsMTAgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2Fs
Y0xlbmd0aERvdWJsZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb24KICAgICAgICAgcmV0dXJu
IHZhbHVlICogY29udmVyc2lvbkRhdGEuZHluYW1pY1ZpZXdwb3J0RmFjdG9yKCkubWluRGltZW5z
aW9uKCk7CiAKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZCOgotICAgICAgICByZXR1cm4g
dmFsdWUgKiBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoTG9naWNh
bEJveEF4aXM6OkJsb2NrLCBjb252ZXJzaW9uRGF0YS5keW5hbWljVmlld3BvcnRGYWN0b3IoKSwg
Y29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCkpOworICAgICAgICByZXR1cm4gdmFsdWUgKiBsZW5n
dGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9naWNhbEF4aXMoUEFMOjpMb2dpY2FsQm94QXhp
czo6QmxvY2ssIGNvbnZlcnNpb25EYXRhLmR5bmFtaWNWaWV3cG9ydEZhY3RvcigpLCBjb252ZXJz
aW9uRGF0YS5yb290U3R5bGUoKSk7CiAKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgot
ICAgICAgICByZXR1cm4gdmFsdWUgKiBsZW5ndGhPZlZpZXdwb3J0UGh5c2ljYWxBeGlzRm9yTG9n
aWNhbEF4aXMoTG9naWNhbEJveEF4aXM6OklubGluZSwgY29udmVyc2lvbkRhdGEuZHluYW1pY1Zp
ZXdwb3J0RmFjdG9yKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlICogbGVuZ3RoT2ZWaWV3cG9ydFBoeXNpY2FsQXhpc0ZvckxvZ2ljYWxBeGlzKFBB
TDo6TG9naWNhbEJveEF4aXM6OklubGluZSwgY29udmVyc2lvbkRhdGEuZHluYW1pY1ZpZXdwb3J0
RmFjdG9yKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpKTsKIAogICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19MSFM6CiAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRGF0YS5zdHlsZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCmluZGV4
IGYxMDk1ODY5MTVmODIzZmNmZjczYjVhMDFjZTI0ZWRmMmQxYmFlYjkuLjlmM2IyNzhiMTE5Mjc3
NTYzYzYzODkwZTliMzk4M2VmYmJkODU1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaApAQCAtNDAsMTEgKzQwLDExIEBACiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZURlZnMuaCIK
ICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1
ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNpbmNs
dWRlICJUb3VjaEFjdGlvbi5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCi0jaW5jbHVkZSAi
V3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Vbmljb2RlQmlkaS5oPgorI2luY2x1
ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKQEAgLTI2MjAsNTggKzI2MjAsNTggQEAgdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFRleHRUcmFuc2Zvcm0o
KSBjb25zdAogICAgIHJldHVybiBUZXh0VHJhbnNmb3JtOjpOb25lOwogfQogCi10ZW1wbGF0ZTw+
IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRVVuaWNvZGVCaWRp
IGUpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUoUEFMOjpFVW5pY29kZUJpZGkgZSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQog
ewogICAgIHNldFByaW1pdGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQpOwog
ICAgIHN3aXRjaCAoZSkgewotICAgIGNhc2UgVUJOb3JtYWw6CisgICAgY2FzZSBQQUw6OlVCTm9y
bWFsOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFbWJlZDoKKyAgICBjYXNlIFBBTDo6RW1iZWQ6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlRW1iZWQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
T3ZlcnJpZGU6CisgICAgY2FzZSBQQUw6Ok92ZXJyaWRlOgogICAgICAgICBtX3ZhbHVlLnZhbHVl
SUQgPSBDU1NWYWx1ZUJpZGlPdmVycmlkZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJc29s
YXRlOgorICAgIGNhc2UgUEFMOjpJc29sYXRlOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBD
U1NWYWx1ZUlzb2xhdGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXNvbGF0ZU92ZXJyaWRl
OgorICAgIGNhc2UgUEFMOjpJc29sYXRlT3ZlcnJpZGU6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJ
RCA9IENTU1ZhbHVlSXNvbGF0ZU92ZXJyaWRlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFBs
YWludGV4dDoKKyAgICBjYXNlIFBBTDo6UGxhaW50ZXh0OgogICAgICAgICBtX3ZhbHVlLnZhbHVl
SUQgPSBDU1NWYWx1ZVBsYWludGV4dDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi10ZW1w
bGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRVVuaWNvZGVCaWRpKCkg
Y29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6
OkVVbmljb2RlQmlkaSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKIAogICAg
IHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAg
ICAgICAgcmV0dXJuIFVCTm9ybWFsOworICAgICAgICByZXR1cm4gUEFMOjpVQk5vcm1hbDsKICAg
ICBjYXNlIENTU1ZhbHVlRW1iZWQ6Ci0gICAgICAgIHJldHVybiBFbWJlZDsKKyAgICAgICAgcmV0
dXJuIFBBTDo6RW1iZWQ7CiAgICAgY2FzZSBDU1NWYWx1ZUJpZGlPdmVycmlkZToKLSAgICAgICAg
cmV0dXJuIE92ZXJyaWRlOworICAgICAgICByZXR1cm4gUEFMOjpPdmVycmlkZTsKICAgICBjYXNl
IENTU1ZhbHVlSXNvbGF0ZToKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0SXNvbGF0ZToKLSAgICAg
ICAgcmV0dXJuIElzb2xhdGU7CisgICAgICAgIHJldHVybiBQQUw6Oklzb2xhdGU7CiAgICAgY2Fz
ZSBDU1NWYWx1ZUlzb2xhdGVPdmVycmlkZToKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0SXNvbGF0
ZU92ZXJyaWRlOgotICAgICAgICByZXR1cm4gSXNvbGF0ZU92ZXJyaWRlOworICAgICAgICByZXR1
cm4gUEFMOjpJc29sYXRlT3ZlcnJpZGU7CiAgICAgY2FzZSBDU1NWYWx1ZVBsYWludGV4dDoKICAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0OgotICAgICAgICByZXR1cm4gUGxhaW50ZXh0
OworICAgICAgICByZXR1cm4gUEFMOjpQbGFpbnRleHQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFVC
Tm9ybWFsOworICAgIHJldHVybiBQQUw6OlVCTm9ybWFsOwogfQogCiB0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVXNlckRyYWcgZSkKQEAgLTMw
MjMsNTggKzMwMjMsNTggQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIE92ZXJmbG93V3JhcCgpIGNvbnN0CiAgICAgcmV0dXJuIE92ZXJmbG93V3JhcDo6Tm9y
bWFsOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoVGV4dERpcmVjdGlvbiBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBBTDo6VGV4dERpcmVjdGlvbiBlKQogICAgIDogQ1NT
VmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5p
dFR5cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNoIChlKSB7Ci0gICAgY2FzZSBUZXh0RGly
ZWN0aW9uOjpMVFI6CisgICAgY2FzZSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjoKICAgICAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVMdHI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VGV4dERpcmVjdGlvbjo6UlRMOgorICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw6CiAg
ICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlUnRsOwogICAgICAgICBicmVhazsKICAg
ICB9CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBU
ZXh0RGlyZWN0aW9uKCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6OlRleHREaXJlY3Rpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1Zh
bHVlSUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NT
VmFsdWVMdHI6Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJl
dHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICBjYXNlIENTU1ZhbHVlUnRsOgotICAg
ICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEw7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsK
KyAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiB9CiAKLXRlbXBsYXRlPD4gaW5s
aW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShXcml0aW5nTW9kZSBlKQor
dGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBB
TDo6V3JpdGluZ01vZGUgZSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAg
IHNldFByaW1pdGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQpOwogICAgIHN3
aXRjaCAoZSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2Ug
UEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9
IENTU1ZhbHVlSG9yaXpvbnRhbFRiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdyaXRpbmdN
b2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVZlcnRpY2FsUmw7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFM
OjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENT
U1ZhbHVlVmVydGljYWxMcjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAg
ICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVIb3Jpem9udGFsQnQ7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIFdyaXRpbmdNb2RlKCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2
ZVZhbHVlOjpvcGVyYXRvciBQQUw6OldyaXRpbmdNb2RlKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNWYWx1ZUlEKCkpOwogCkBAIC0zMDg0LDIxICszMDg0LDIxIEBAIHRlbXBsYXRlPD4gaW5saW5l
IENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBXcml0aW5nTW9kZSgpIGNvbnN0CiAgICAgY2Fz
ZSBDU1NWYWx1ZUxyVGI6CiAgICAgY2FzZSBDU1NWYWx1ZVJsOgogICAgIGNhc2UgQ1NTVmFsdWVS
bFRiOgotICAgICAgICByZXR1cm4gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOworICAgICAgICBy
ZXR1cm4gUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207CiAgICAgY2FzZSBDU1NWYWx1ZVZl
cnRpY2FsUmw6CiAgICAgY2FzZSBDU1NWYWx1ZVRiOgogICAgIGNhc2UgQ1NTVmFsdWVUYlJsOgot
ICAgICAgICByZXR1cm4gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICByZXR1cm4g
UEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ7CiAgICAgY2FzZSBDU1NWYWx1ZVZlcnRpY2Fs
THI6Ci0gICAgICAgIHJldHVybiBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ7CisgICAgICAgIHJl
dHVybiBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDsKICAgICBjYXNlIENTU1ZhbHVlSG9y
aXpvbnRhbEJ0OgotICAgICAgICByZXR1cm4gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOworICAg
ICAgICByZXR1cm4gUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTsKKyAgICByZXR1cm4gUEFMOjpXcml0aW5n
TW9kZTo6VG9wVG9Cb3R0b207CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShUZXh0Q29tYmluZSBlKQpAQCAtMzQwMCwxOCArMzQwMCwx
OCBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUG9pbnRl
ckV2ZW50cygpIGNvbnN0CiAgICAgcmV0dXJuIFBvaW50ZXJFdmVudHM6OkFsbDsKIH0KIAotdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEtlcm5p
bmcga2VybmluZykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShQQUw6Oktlcm5pbmcga2VybmluZykKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2
ZUNsYXNzKQogewogICAgIHNldFByaW1pdGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFM
VUVfSUQpOwogICAgIHN3aXRjaCAoa2VybmluZykgewotICAgIGNhc2UgS2VybmluZzo6QXV0bzoK
KyAgICBjYXNlIFBBTDo6S2VybmluZzo6QXV0bzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVBdXRvOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBLZXJuaW5nOjpOb3JtYWw6
CisgICAgY2FzZSBQQUw6Oktlcm5pbmc6Ok5vcm1hbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlE
ID0gQ1NTVmFsdWVOb3JtYWw7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEtlcm5pbmc6Ok5v
U2hpZnQ6CisgICAgY2FzZSBQQUw6Oktlcm5pbmc6Ok5vU2hpZnQ6CiAgICAgICAgIG1fdmFsdWUu
dmFsdWVJRCA9IENTU1ZhbHVlTm9uZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0MjAs
MjMgKzM0MjAsMjMgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKEtlcm5pbmcga2VybmluZykKICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NW
YWx1ZUF1dG87CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVy
YXRvciBLZXJuaW5nKCkgY29uc3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6Oktlcm5pbmcoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQo
KSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVB
dXRvOgotICAgICAgICByZXR1cm4gS2VybmluZzo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFBBTDo6
S2VybmluZzo6QXV0bzsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICByZXR1cm4g
S2VybmluZzo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUEFMOjpLZXJuaW5nOjpOb3JtYWw7CiAg
ICAgY2FzZSBDU1NWYWx1ZU5vbmU6Ci0gICAgICAgIHJldHVybiBLZXJuaW5nOjpOb1NoaWZ0Owor
ICAgICAgICByZXR1cm4gUEFMOjpLZXJuaW5nOjpOb1NoaWZ0OwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBLZXJuaW5nOjpBdXRvOworICAgIHJldHVybiBQQUw6Oktlcm5pbmc6OkF1dG87CiB9CiAKIHRl
bXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShPYmpl
Y3RGaXQgZml0KQpAQCAtMzQ4MywyMSArMzQ4MywyMSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgT2JqZWN0Rml0KCkgY29uc3QKICAgICB9CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmcpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmcp
CiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0
VHlwZShDU1NVbml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKHNtb290aGluZykg
ewotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6CisgICAgY2FzZSBQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgogICAgICAgICBtX3ZhbHVlLnZh
bHVlSUQgPSBDU1NWYWx1ZUF1dG87CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnRTbW9v
dGhpbmdNb2RlOjpOb1Ntb290aGluZzoKKyAgICBjYXNlIFBBTDo6Rm9udFNtb290aGluZ01vZGU6
Ok5vU21vb3RoaW5nOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vbmU7CiAg
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDoK
KyAgICBjYXNlIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgogICAgICAgICBt
X3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUFudGlhbGlhc2VkOwogICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKKyAgICBjYXNl
IFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlU3VicGl4ZWxBbnRpYWxpYXNlZDsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM1MDYsMzYgKzM1MDYsMzYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGkKICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUF1dG87CiB9CiAKLXRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250U21vb3RoaW5nTW9kZSgpIGNv
bnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpG
b250U21vb3RoaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKIAog
ICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0g
ICAgICAgIHJldHVybiBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzsKKyAgICAgICAg
cmV0dXJuIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc7CiAgICAgY2FzZSBD
U1NWYWx1ZU5vbmU6Ci0gICAgICAgIHJldHVybiBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhp
bmc7CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsK
ICAgICBjYXNlIENTU1ZhbHVlQW50aWFsaWFzZWQ6Ci0gICAgICAgIHJldHVybiBGb250U21vb3Ro
aW5nTW9kZTo6QW50aWFsaWFzZWQ7CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdN
b2RlOjpBbnRpYWxpYXNlZDsKICAgICBjYXNlIENTU1ZhbHVlU3VicGl4ZWxBbnRpYWxpYXNlZDoK
LSAgICAgICAgcmV0dXJuIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOwor
ICAgICAgICByZXR1cm4gUEFMOjpGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNl
ZDsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc7
CisgICAgcmV0dXJuIFBBTDo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc7CiB9CiAK
LXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShG
b250U21hbGxDYXBzIHNtYWxsQ2FwcykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQQUw6OkZvbnRTbWFsbENhcHMgc21hbGxDYXBzKQogICAg
IDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUo
Q1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7CiAgICAgc3dpdGNoIChzbWFsbENhcHMpIHsKLSAg
ICBjYXNlIEZvbnRTbWFsbENhcHM6Ok9mZjoKKyAgICBjYXNlIFBBTDo6Rm9udFNtYWxsQ2Fwczo6
T2ZmOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRm9udFNtYWxsQ2Fwczo6T246CisgICAgY2FzZSBQQUw6OkZvbnRT
bWFsbENhcHM6Ok9uOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVNtYWxsQ2Fw
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1NDQsNjEgKzM1NDQsNjEgQEAgdGVtcGxh
dGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRTbWFs
bENhcHMgc21hbGxDYXBzKQogICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwog
fQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udFNt
YWxsQ2FwcygpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgUEFMOjpGb250U21hbGxDYXBzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1ZUlE
KCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVl
U21hbGxDYXBzOgotICAgICAgICByZXR1cm4gRm9udFNtYWxsQ2Fwczo6T247CisgICAgICAgIHJl
dHVybiBQQUw6OkZvbnRTbWFsbENhcHM6Ok9uOwogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0g
ICAgICAgIHJldHVybiBGb250U21hbGxDYXBzOjpPZmY7CisgICAgICAgIHJldHVybiBQQUw6OkZv
bnRTbWFsbENhcHM6Ok9mZjsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvbnRTbWFsbENhcHM6Ok9mZjsK
KyAgICByZXR1cm4gUEFMOjpGb250U21hbGxDYXBzOjpPZmY7CiB9CiAKLXRlbXBsYXRlPD4gaW5s
aW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShUZXh0UmVuZGVyaW5nTW9k
ZSBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZh
bHVlKFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgZSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNs
YXNzKQogewogICAgIHNldFByaW1pdGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFMVUVf
SUQpOwogICAgIHN3aXRjaCAoZSkgewotICAgIGNhc2UgVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9U
ZXh0UmVuZGVyaW5nOgorICAgIGNhc2UgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRS
ZW5kZXJpbmc6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlQXV0bzsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVlZDoKKyAg
ICBjYXNlIFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQ6CiAgICAgICAgIG1f
dmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlT3B0aW1pemVTcGVlZDsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5OgorICAgIGNhc2Ug
UEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVMZWdpYmlsaXR5OgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uOgorICAgIGNh
c2UgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uOgogICAgICAgICBt
X3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUdlb21ldHJpY1ByZWNpc2lvbjsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgVGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJp
bWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdAogewog
ICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkg
ewogICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgotICAgICAgICByZXR1cm4gVGV4dFJlbmRlcmluZ01v
ZGU6OkF1dG9UZXh0UmVuZGVyaW5nOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0UmVuZGVyaW5n
TW9kZTo6QXV0b1RleHRSZW5kZXJpbmc7CiAgICAgY2FzZSBDU1NWYWx1ZU9wdGltaXplU3BlZWQ6
Ci0gICAgICAgIHJldHVybiBUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVlZDsKKyAgICAg
ICAgcmV0dXJuIFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQ7CiAgICAgY2Fz
ZSBDU1NWYWx1ZU9wdGltaXplTGVnaWJpbGl0eToKLSAgICAgICAgcmV0dXJuIFRleHRSZW5kZXJp
bmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgICAgIHJldHVybiBQQUw6OlRleHRSZW5k
ZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHk7CiAgICAgY2FzZSBDU1NWYWx1ZUdlb21ldHJp
Y1ByZWNpc2lvbjoKLSAgICAgICAgcmV0dXJuIFRleHRSZW5kZXJpbmdNb2RlOjpHZW9tZXRyaWNQ
cmVjaXNpb247CisgICAgICAgIHJldHVybiBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpHZW9tZXRy
aWNQcmVjaXNpb247CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRleHRSZW5kZXJpbmdNb2RlOjpBdXRv
VGV4dFJlbmRlcmluZzsKKyAgICByZXR1cm4gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1Rl
eHRSZW5kZXJpbmc7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShIeXBoZW5zIGh5cGhlbnMpCkBAIC01NDUwLDE4ICs1NDUwLDE4IEBA
IHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBBcHBsZVBheUJ1
dHRvblR5cGUoKSBjb25zdAogfQogI2VuZGlmCiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250VmFyaWFudFBvc2l0aW9uIHBvc2l0aW9u
KQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbiBwb3NpdGlvbikKICAgICA6IENTU1ZhbHVlKFByaW1p
dGl2ZUNsYXNzKQogewogICAgIHNldFByaW1pdGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1Nf
VkFMVUVfSUQpOwogICAgIHN3aXRjaCAocG9zaXRpb24pIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50
UG9zaXRpb246Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9y
bWFsOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3JpcHQ6CisgICAgY2Fz
ZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDoKICAgICAgICAgbV92YWx1ZS52
YWx1ZUlEID0gQ1NTVmFsdWVTdWI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRp
b246OlN1cGVyc2NyaXB0OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVN1cGVy
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNTQ3MCw0NyArNTQ3MCw0NyBAQCB0
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9u
dFZhcmlhbnRQb3NpdGlvbiBwb3NpdAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NT
UHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnRWYXJpYW50UG9zaXRpb24oKSBjb25zdAordGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6Rm9udFZhcmlh
bnRQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKICAgICBzd2l0
Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAg
IHJldHVybiBGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7CisgICAgICAgIHJldHVybiBQQUw6
OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbDsKICAgICBjYXNlIENTU1ZhbHVlU3ViOgotICAg
ICAgICByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0OworICAgICAgICByZXR1
cm4gUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpTdWJzY3JpcHQ7CiAgICAgY2FzZSBDU1NWYWx1
ZVN1cGVyOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ7
CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0Owog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOworICAgIHJldHVy
biBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbDsKIH0KIAotdGVtcGxhdGU8PiBpbmxp
bmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRWYXJpYW50Q2FwcyBj
YXBzKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZh
bHVlKFBBTDo6Rm9udFZhcmlhbnRDYXBzIGNhcHMpCiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVD
bGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NTX1ZBTFVF
X0lEKTsKICAgICBzd2l0Y2ggKGNhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6Tm9y
bWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDoKICAgICAgICAgbV92
YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3JtYWw7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpT
bWFsbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVTbWFsbENhcHM7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNl
IFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlE
ID0gQ1NTVmFsdWVBbGxTbWFsbENhcHM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnRDYXBzOjpQZXRpdGU6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRl
OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVBldGl0ZUNhcHM7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQg
PSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnRDYXBzOjpVbmljYXNlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlVuaWNh
c2U6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlVW5pY2FzZTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVUaXRsaW5nQ2FwczsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU1MTks
NDAgKzU1MTksNDAgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKEZvbnRWYXJpYW50Q2FwcyBjYXBzKQogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnRWYXJpYW50Q2FwcygpIGNv
bnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpG
b250VmFyaWFudENhcHMoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAgICAg
c3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAg
ICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw7CisgICAgICAgIHJldHVybiBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOwogICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6Ci0g
ICAgICAgIHJldHVybiBGb250VmFyaWFudENhcHM6OlNtYWxsOworICAgICAgICByZXR1cm4gUEFM
OjpGb250VmFyaWFudENhcHM6OlNtYWxsOwogICAgIGNhc2UgQ1NTVmFsdWVBbGxTbWFsbENhcHM6
Ci0gICAgICAgIHJldHVybiBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOworICAgICAgICByZXR1
cm4gUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOwogICAgIGNhc2UgQ1NTVmFsdWVQZXRp
dGVDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU7CisgICAgICAg
IHJldHVybiBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOwogICAgIGNhc2UgQ1NTVmFsdWVB
bGxQZXRpdGVDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU7
CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOwogICAgIGNh
c2UgQ1NTVmFsdWVVbmljYXNlOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBzOjpVbmlj
YXNlOworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6OlVuaWNhc2U7CiAgICAg
Y2FzZSBDU1NWYWx1ZVRpdGxpbmdDYXBzOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRDYXBz
OjpUaXRsaW5nOworICAgICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBGb250VmFyaWFudENhcHM6Ok5vcm1hbDsKKyAgICByZXR1cm4g
UEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbDsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBh
bHRlcm5hdGVzKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1p
dGl2ZVZhbHVlKFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzIGFsdGVybmF0ZXMpCiAgICAgOiBD
U1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NV
bml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGFsdGVybmF0ZXMpIHsKLSAgICBj
YXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFy
aWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFs
dWVOb3JtYWw7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRBbHRlcm5hdGVz
OjpIaXN0b3JpY2FsRm9ybXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50QWx0ZXJuYXRlczo6
SGlzdG9yaWNhbEZvcm1zOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUhpc3Rv
cmljYWxGb3JtczsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU1NjEsMzAgKzU1
NjEsMzAgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHQKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250VmFyaWFudEFsdGVybmF0ZXMo
KSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBB
TDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1ZUlE
KCkpOwogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5v
cm1hbDoKLSAgICAgICAgcmV0dXJuIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOworICAg
ICAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDsKICAgICBjYXNl
IENTU1ZhbHVlSGlzdG9yaWNhbEZvcm1zOgotICAgICAgICByZXR1cm4gRm9udFZhcmlhbnRBbHRl
cm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM7CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRWYXJpYW50
QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udFZhcmlh
bnRBbHRlcm5hdGVzOjpOb3JtYWw7CisgICAgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5h
dGVzOjpOb3JtYWw7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShGb250T3B0aWNhbFNpemluZyBzaXppbmcpCit0ZW1wbGF0ZTw+IGlu
bGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpGb250T3B0aWNh
bFNpemluZyBzaXppbmcpCiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBz
ZXRQcmltaXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0
Y2ggKHNpemluZykgewotICAgIGNhc2UgRm9udE9wdGljYWxTaXppbmc6OkVuYWJsZWQ6CisgICAg
Y2FzZSBQQUw6OkZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkOgogICAgICAgICBtX3ZhbHVlLnZh
bHVlSUQgPSBDU1NWYWx1ZUF1dG87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udE9wdGlj
YWxTaXppbmc6OkRpc2FibGVkOgorICAgIGNhc2UgUEFMOjpGb250T3B0aWNhbFNpemluZzo6RGlz
YWJsZWQ6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9uZTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU1OTMsMTkgKzU1OTMsMTkgQEAgdGVtcGxhdGU8PiBp
bmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRPcHRpY2FsU2l6
aW5nIHNpemluZykKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZh
bHVlOjpvcGVyYXRvciBGb250T3B0aWNhbFNpemluZygpIGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpGb250T3B0aWNhbFNpemluZygpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFs
dWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgotICAgICAgICByZXR1cm4gRm9udE9wdGlj
YWxTaXppbmc6OkVuYWJsZWQ7CisgICAgICAgIHJldHVybiBQQUw6OkZvbnRPcHRpY2FsU2l6aW5n
OjpFbmFibGVkOwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gRm9udE9w
dGljYWxTaXppbmc6OkRpc2FibGVkOworICAgICAgICByZXR1cm4gUEFMOjpGb250T3B0aWNhbFNp
emluZzo6RGlzYWJsZWQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGb250T3B0aWNhbFNpemluZzo6RW5h
YmxlZDsKKyAgICByZXR1cm4gUEFMOjpGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZDsKIH0KIAog
dGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZv
bnRMb2FkaW5nQmVoYXZpb3IgYmVoYXZpb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCmluZGV4
IGJiMDdmNzdlYTZmZjU4N2QwNDBkNzcwOWYwMzEzNzQ5YjgwM2Q0ODQuLjNlZGI2YTQwYzdjYWU1
ZDhlZWQxYzkyNTdjZWYwMjhiNzUxNDBhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCkBA
IC0yMyw3ICsyMyw3IEBACiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWUuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcFZhbHVl
SW5Db21tYVNlcGFyYXRlZExpc3QoKTsKIAotICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIHJlc29s
dmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFRleHREaXJlY3Rpb24sIFdy
aXRpbmdNb2RlKTsKKyAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCByZXNvbHZlRGlyZWN0aW9uQXdh
cmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQQUw6OlRleHREaXJlY3Rpb24sIFBBTDo6V3JpdGlu
Z01vZGUpOwogICAgIHN0YXRpYyBib29sIGlzSW5oZXJpdGVkUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCk7CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGFsaWFzZXNGb3JQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEKTsKICAgICBzdGF0aWMgYm9vbCBpc0RpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9u
dEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApp
bmRleCBlNmE2ZWMxYTVjYmVkOWQ0MjVmYmQxMGU5ZTBiYjBiNDI5YTBiZGUzLi5hOWVmZDg4YjE2
NTEzN2EwN2Q2ZmNhMmU4ZjdhMGU5NmMzZWE3MjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTEyNiw4ICsxMjYsOCBAQCBGb250UmFuZ2VzIENT
U1NlZ21lbnRlZEZvbnRGYWNlOjpmb250UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aQogCiAgICAgICAgIGF1dG8gc2VsZWN0aW9uQ2FwYWJpbGl0aWVzID0gKmZhY2Ut
PmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKIAotICAgICAgICBib29sIHN5bnRoZXRpY0Jv
bGQgPSAoZm9udERlc2NyaXB0aW9uLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNXZWln
aHQpICYmICFpc0ZvbnRXZWlnaHRCb2xkKHNlbGVjdGlvbkNhcGFiaWxpdGllcy53ZWlnaHQubWF4
aW11bSkgJiYgaXNGb250V2VpZ2h0Qm9sZChkZXNpcmVkUmVxdWVzdC53ZWlnaHQpOwotICAgICAg
ICBib29sIHN5bnRoZXRpY0l0YWxpYyA9IChmb250RGVzY3JpcHRpb24uZm9udFN5bnRoZXNpcygp
ICYgRm9udFN5bnRoZXNpc1N0eWxlKSAmJiAhaXNJdGFsaWMoc2VsZWN0aW9uQ2FwYWJpbGl0aWVz
LnNsb3BlLm1heGltdW0pICYmIGlzSXRhbGljKGRlc2lyZWRSZXF1ZXN0LnNsb3BlKTsKKyAgICAg
ICAgYm9vbCBzeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlwdGlvbi5mb250U3ludGhlc2lzKCkg
JiBQQUw6OkZvbnRTeW50aGVzaXNXZWlnaHQpICYmICFpc0ZvbnRXZWlnaHRCb2xkKHNlbGVjdGlv
bkNhcGFiaWxpdGllcy53ZWlnaHQubWF4aW11bSkgJiYgaXNGb250V2VpZ2h0Qm9sZChkZXNpcmVk
UmVxdWVzdC53ZWlnaHQpOworICAgICAgICBib29sIHN5bnRoZXRpY0l0YWxpYyA9IChmb250RGVz
Y3JpcHRpb24uZm9udFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzU3R5bGUpICYmICFp
c0l0YWxpYyhzZWxlY3Rpb25DYXBhYmlsaXRpZXMuc2xvcGUubWF4aW11bSkgJiYgaXNJdGFsaWMo
ZGVzaXJlZFJlcXVlc3Quc2xvcGUpOwogCiAgICAgICAgIC8vIE1ldHJpY3MgdXNlZCBmb3IgbGF5
b3V0IGNvbWUgZnJvbSBGb250UmFuZ2VzOjpmb250Rm9yRmlyc3RSYW5nZSgpLCB3aGljaCBhc3N1
bWVzIHRoYXQgdGhlIGZpcnN0IGZvbnQgaXMgbm9uLW51bGwuCiAgICAgICAgIGF1dG8gZm9udEFj
Y2Vzc29yID0gQ1NTRm9udEFjY2Vzc29yOjpjcmVhdGUoZmFjZSwgZm9udERlc2NyaXB0aW9uLCBm
b250UGFsZXR0ZVZhbHVlcywgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2UuY3BwCmluZGV4IGVmZmQ2MDdjMzQ2ZjliY2ZiYzljMjg4OWJmODMxNjk0ZGEz
NDAzMDUuLjYzN2EwNDc4YjFiMjNkYjFkY2NmYWU0OTlhNzhhOGU4MWE4YmNiN2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGYWNlLmNwcApAQCAtMjk4LDggKzI5OCw4IEBAIFN0cmluZyBGb250RmFjZTo6c3R5
bGUoKSBjb25zdAogICAgIGlmICghc3R5bGVXcmFwcGVkKQogICAgICAgICByZXR1cm4gIm5vcm1h
bCJfczsKICAgICBhdXRvIHN0eWxlID0gc3R5bGVXcmFwcGVkLnZhbHVlKCk7Ci0gICAgYXV0byBt
aW5pbXVtID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Zm9udFN0eWxlRnJvbVN0eWxlVmFsdWUo
c3R5bGUubWluaW11bSwgRm9udFN0eWxlQXhpczo6aXRhbCk7Ci0gICAgYXV0byBtYXhpbXVtID0g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Zm9udFN0eWxlRnJvbVN0eWxlVmFsdWUoc3R5bGUubWF4
aW11bSwgRm9udFN0eWxlQXhpczo6aXRhbCk7CisgICAgYXV0byBtaW5pbXVtID0gQ29tcHV0ZWRT
dHlsZUV4dHJhY3Rvcjo6Zm9udFN0eWxlRnJvbVN0eWxlVmFsdWUoc3R5bGUubWluaW11bSwgUEFM
OjpGb250U3R5bGVBeGlzOjppdGFsKTsKKyAgICBhdXRvIG1heGltdW0gPSBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yOjpmb250U3R5bGVGcm9tU3R5bGVWYWx1ZShzdHlsZS5tYXhpbXVtLCBQQUw6OkZv
bnRTdHlsZUF4aXM6Oml0YWwpOwogCiAgICAgaWYgKG1pbmltdW0uZ2V0KCkuZXF1YWxzKG1heGlt
dW0uZ2V0KCkpKQogICAgICAgICByZXR1cm4gbWluaW11bS0+Y3NzVGV4dCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9Gb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmgKaW5kZXggZmQ4N2M5MDBi
MzY1NWZhZmU3MTllZmQwY2FkYzQwM2M0ZDcyNWM4NC4uYTAxZTM4NjNiNTU3YTViODE5N2M0ODkw
N2YxMzVjY2YzOGQ2OGMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRTZWxl
Y3Rpb25WYWx1ZUlubGluZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFNlbGVjdGlv
blZhbHVlSW5saW5lcy5oCkBAIC0xMjEsMTIgKzEyMSwxMiBAQCBpbmxpbmUgc3RkOjpvcHRpb25h
bDxGb250U2VsZWN0aW9uVmFsdWU+IGZvbnRTdHJldGNoVmFsdWUoQ1NTVmFsdWVJRCB2YWx1ZSkK
ICAgICB9CiB9CiAKLWlubGluZSBzdGQ6Om9wdGlvbmFsPENTU1ZhbHVlSUQ+IGZvbnRTdHlsZUtl
eXdvcmQoc3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHN0eWxlLCBGb250U3R5bGVB
eGlzIGF4aXMpCitpbmxpbmUgc3RkOjpvcHRpb25hbDxDU1NWYWx1ZUlEPiBmb250U3R5bGVLZXl3
b3JkKHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBzdHlsZSwgUEFMOjpGb250U3R5
bGVBeGlzIGF4aXMpCiB7CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS52YWx1ZSgpID09IG5vcm1h
bEl0YWxpY1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZU5vcm1hbDsKICAgICBpZiAo
c3R5bGUudmFsdWUoKSA9PSBpdGFsaWNWYWx1ZSgpKQotICAgICAgICByZXR1cm4gYXhpcyA9PSBG
b250U3R5bGVBeGlzOjppdGFsID8gQ1NTVmFsdWVJdGFsaWMgOiBDU1NWYWx1ZU9ibGlxdWU7Cisg
ICAgICAgIHJldHVybiBheGlzID09IFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbCA/IENTU1ZhbHVl
SXRhbGljIDogQ1NTVmFsdWVPYmxpcXVlOwogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYXJpYW50QnVpbGRlci5jcHAKaW5kZXggNmRlNjllZWE4
YmFkODIxYmFiOWNmZjI2YmY2MDY1NWJkNWI5MGNlMy4uMzExYjkwOGZjOTUxZTUxOWIyOTEwNjZl
YTNjM2RmZDNmOTJlMzYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYXJp
YW50QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYXJpYW50QnVpbGRl
ci5jcHAKQEAgLTI5LDQzICsyOSw0MyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCi0j
aW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXMgZXh0cmFj
dEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK1BBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXNWYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb21tb24gPSBGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGRpc2Ny
ZXRpb25hcnkgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50
TGlnYXR1cmVzIGhpc3RvcmljYWwgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOwotICAg
IEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gRm9udFZhcmlhbnRM
aWdhdHVyZXM6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbiA9
IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50
TGlnYXR1cmVzIGRpc2NyZXRpb25hcnkgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWw7CisgICAgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsID0gUEFMOjpGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOworICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMg
Y29udGV4dHVhbEFsdGVybmF0ZXMgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7
CiAKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgZm9yIChhdXRv
JiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgICAgIHN3
aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnZhbHVlSUQoKSkg
ewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAg
ICAgICAgIGNvbW1vbiA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKKyAgICAgICAgICAgICAg
ICBjb21tb24gPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb21tb25MaWdhdHVyZXM6Ci0gICAg
ICAgICAgICAgICAgY29tbW9uID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKKyAgICAgICAg
ICAgICAgICBjb21tb24gPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGRpc2NyZXRpb25hcnkgPSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm87CisgICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeSA9IFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgZGlz
Y3JldGlvbmFyeSA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7CisgICAgICAgICAgICAgICAg
ZGlzY3JldGlvbmFyeSA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdh
dHVyZXM6Ci0gICAgICAgICAgICAgICAgaGlzdG9yaWNhbCA9IEZvbnRWYXJpYW50TGlnYXR1cmVz
OjpObzsKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2FsID0gUEFMOjpGb250VmFyaWFudExpZ2F0
dXJlczo6Tm87CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBoaXN0b3JpY2FsID0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczsKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2FsID0gUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUNvbnRleHR1YWw6Ci0gICAgICAgICAgICAgICAgY29udGV4
dHVhbEFsdGVybmF0ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOworICAgICAgICAgICAg
ICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVz
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29u
dGV4dHVhbDoKLSAgICAgICAgICAgICAgICBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9IEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpObzsKKyAgICAgICAgICAgICAgICBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9
IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTc3LDEwICs3NywxMCBAQCBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcyBleHRyYWN0
Rm9udFZhcmlhbnRMaWdhdHVyZXMoY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogICAgICAgICBjYXNl
IENTU1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb25lOgotICAgICAgICAgICAgY29tbW9uID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwot
ICAgICAgICAgICAgZGlzY3JldGlvbmFyeSA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKLSAg
ICAgICAgICAgIGhpc3RvcmljYWwgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87Ci0gICAgICAg
ICAgICBjb250ZXh0dWFsQWx0ZXJuYXRlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzsKKyAg
ICAgICAgICAgIGNvbW1vbiA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAgICAg
ICAgICAgZGlzY3JldGlvbmFyeSA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAg
ICAgICAgICAgaGlzdG9yaWNhbCA9IFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOworICAg
ICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0ZXMgPSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVz
OjpObzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04OCw0MyArODgsNDMgQEAgRm9udFZhcmlhbnRMaWdh
dHVyZXNWYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50TGlnYXR1cmVzKGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBGb250VmFyaWFudExpZ2F0dXJl
c1ZhbHVlcyhjb21tb24sIGRpc2NyZXRpb25hcnksIGhpc3RvcmljYWwsIGNvbnRleHR1YWxBbHRl
cm5hdGVzKTsKKyAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcyhjb21t
b24sIGRpc2NyZXRpb25hcnksIGhpc3RvcmljYWwsIGNvbnRleHR1YWxBbHRlcm5hdGVzKTsKIH0K
IAotRm9udFZhcmlhbnROdW1lcmljVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudE51bWVyaWMoY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQorUEFMOjpGb250VmFyaWFudE51bWVyaWNWYWx1ZXMgZXh0cmFj
dEZvbnRWYXJpYW50TnVtZXJpYyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRm9udFZh
cmlhbnROdW1lcmljRmlndXJlIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9y
bWFsOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgc3BhY2luZyA9IEZvbnRWYXJpYW50
TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiBm
cmFjdGlvbiA9IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw7Ci0gICAgRm9udFZh
cmlhbnROdW1lcmljT3JkaW5hbCBvcmRpbmFsID0gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6
Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvID0g
Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6
Tm9ybWFsOworICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZyBzcGFjaW5nID0gUEFM
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWw7CisgICAgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNGcmFjdGlvbiBmcmFjdGlvbiA9IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rp
b246Ok5vcm1hbDsKKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCA9
IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOworICAgIFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljU2xhc2hlZFplcm8gc2xhc2hlZFplcm8gPSBQQUw6OkZvbnRWYXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWw7CiAKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1
ZSkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGl0ZW0uZ2V0KCkpLnZhbHVlSUQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmlu
Z051bXM6Ci0gICAgICAgICAgICAgICAgZmlndXJlID0gRm9udFZhcmlhbnROdW1lcmljRmlndXJl
OjpMaW5pbmdOdW1iZXJzOworICAgICAgICAgICAgICAgIGZpZ3VyZSA9IFBBTDo6Rm9udFZhcmlh
bnROdW1lcmljRmlndXJlOjpMaW5pbmdOdW1iZXJzOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9sZHN0eWxlTnVtczoKLSAgICAgICAgICAgICAgICBm
aWd1cmUgPSBGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVyczsKKyAgICAg
ICAgICAgICAgICBmaWd1cmUgPSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5
bGVOdW1iZXJzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZVByb3BvcnRpb25hbE51bXM6Ci0gICAgICAgICAgICAgICAgc3BhY2luZyA9IEZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM7CisgICAgICAgICAgICAgICAg
c3BhY2luZyA9IFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVt
YmVyczsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVU
YWJ1bGFyTnVtczoKLSAgICAgICAgICAgICAgICBzcGFjaW5nID0gRm9udFZhcmlhbnROdW1lcmlj
U3BhY2luZzo6VGFidWxhck51bWJlcnM7CisgICAgICAgICAgICAgICAgc3BhY2luZyA9IFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRGlhZ29uYWxGcmFjdGlvbnM6Ci0g
ICAgICAgICAgICAgICAgZnJhY3Rpb24gPSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlh
Z29uYWxGcmFjdGlvbnM7CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZyYWN0aW9uczsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGFja2VkRnJhY3Rpb25zOgotICAgICAg
ICAgICAgICAgIGZyYWN0aW9uID0gRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRG
cmFjdGlvbnM7CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSBQQUw6OkZvbnRWYXJpYW50TnVt
ZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25zOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9yZGluYWw6Ci0gICAgICAgICAgICAgICAgb3JkaW5h
bCA9IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczsKKyAgICAgICAgICAgICAgICBvcmRp
bmFsID0gUEFMOjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xhc2hlZFplcm86Ci0gICAgICAg
ICAgICAgICAgc2xhc2hlZFplcm8gPSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVz
OworICAgICAgICAgICAgICAgIHNsYXNoZWRaZXJvID0gUEFMOjpGb250VmFyaWFudE51bWVyaWNT
bGFzaGVkWmVybzo6WWVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzNCw0NCAr
MTM0LDQ0IEBAIEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnROdW1l
cmljKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CiAKLSAgICByZXR1cm4gRm9u
dFZhcmlhbnROdW1lcmljVmFsdWVzKGZpZ3VyZSwgc3BhY2luZywgZnJhY3Rpb24sIG9yZGluYWws
IHNsYXNoZWRaZXJvKTsKKyAgICByZXR1cm4gUEFMOjpGb250VmFyaWFudE51bWVyaWNWYWx1ZXMo
ZmlndXJlLCBzcGFjaW5nLCBmcmFjdGlvbiwgb3JkaW5hbCwgc2xhc2hlZFplcm8pOwogfQogCi1G
b250VmFyaWFudEVhc3RBc2lhblZhbHVlcyBleHRyYWN0Rm9udFZhcmlhbnRFYXN0QXNpYW4oY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQorUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcyBleHRy
YWN0Rm9udFZhcmlhbnRFYXN0QXNpYW4oY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aCB3aWR0aCA9IEZv
bnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudEVhc3RBc2lh
blJ1YnkgcnVieSA9IEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsOworICAgIFBBTDo6
Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6Tm9ybWFsOworICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aCB3aWR0aCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOworICAgIFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1YnkgPSBQQUw6OkZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieTo6Tm9ybWFsOwogCiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAg
ICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7
CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdl
dCgpKS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM3ODoKLSAgICAg
ICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODsK
KyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlh
bnQ6Okppczc4OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUppczgzOgotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6OkppczgzOworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA7CisgICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXMwNDoKLSAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDsKKyAgICAg
ICAgICAgICAgICB2YXJpYW50ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okpp
czA0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNp
bXBsaWZpZWQ6Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudDo6U2ltcGxpZmllZDsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUEFMOjpGb250
VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlVHJhZGl0aW9uYWw6Ci0gICAgICAgICAgICAg
ICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw7Cisg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
OjpUcmFkaXRpb25hbDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVGdWxsV2lkdGg6Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoOjpGdWxsOworICAgICAgICAgICAgICAgIHdpZHRoID0gUEFMOjpGb250VmFy
aWFudEVhc3RBc2lhbldpZHRoOjpGdWxsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoOgotICAgICAgICAgICAgICAgIHdp
ZHRoID0gRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOworICAgICAgICAg
ICAgICAgIHdpZHRoID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9u
YWw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUnVi
eToKLSAgICAgICAgICAgICAgICBydWJ5ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM7
CisgICAgICAgICAgICAgICAgcnVieSA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZ
ZXM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTgxLDEwICsxODEsMTAgQEAgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkpCiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CiAKLSAgICByZXR1cm4gRm9udFZhcmlhbnRF
YXN0QXNpYW5WYWx1ZXModmFyaWFudCwgd2lkdGgsIHJ1YnkpOworICAgIHJldHVybiBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzKHZhcmlhbnQsIHdpZHRoLCBydWJ5KTsKIH0KIAotUmVm
PENTU1ZhbHVlPiBjb21wdXRlRm9udFZhcmlhbnQoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYg
dmFyaWFudFNldHRpbmdzKQorUmVmPENTU1ZhbHVlPiBjb21wdXRlRm9udFZhcmlhbnQoY29uc3Qg
UEFMOjpGb250VmFyaWFudFNldHRpbmdzJiB2YXJpYW50U2V0dGluZ3MpCiB7CiAgICAgaWYgKHZh
cmlhbnRTZXR0aW5ncy5pc0FsbE5vcm1hbCgpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOwpAQCAt
MTkyLDE3OCArMTkyLDE3OCBAQCBSZWY8Q1NTVmFsdWU+IGNvbXB1dGVGb250VmFyaWFudChjb25z
dCBGb250VmFyaWFudFNldHRpbmdzJiB2YXJpYW50U2V0dGluZ3MpCiAgICAgYXV0byBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogCiAgICAgc3dpdGNoICh2YXJp
YW50U2V0dGluZ3MuY29tbW9uTGlnYXR1cmVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0
dXJlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
OgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6CiAgICAgICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJl
czo6Tm86CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXMpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuZGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1h
bDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURp
c2NyZXRpb25hcnlMaWdhdHVyZXMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpO
bzoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuaGlz
dG9yaWNhbExpZ2F0dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1h
bDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUhp
c3RvcmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoK
ICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuY29udGV4dHVh
bEFsdGVybmF0ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw6CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250ZXh0
dWFsKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CiAgICAgICAgIGxpc3Qu
Z2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9Db250ZXh0dWFsKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IHN3aXRjaCAodmFyaWFudFNldHRpbmdzLnBvc2l0aW9uKSB7Ci0gICAgY2FzZSBGb250VmFyaWFu
dFBvc2l0aW9uOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246Ok5v
cm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudFBvc2l0aW9uOjpTdWJz
Y3JpcHQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDoKICAg
ICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdWIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudFBvc2l0aW9uOjpTdXBlcnNjcmlwdDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRQb3NpdGlvbjo6U3VwZXJzY3JpcHQ6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3VwZXIp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3Mu
Y2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGw6
CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU21hbGxDYXBzKSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRDYXBzOjpBbGxTbWFsbDoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGxTbWFsbENh
cHMpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6CiAgICAgICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlUGV0aXRlQ2FwcykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBl
dGl0ZToKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGxQZXRpdGVDYXBzKSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudENhcHM6OlVuaWNhc2U6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5p
Y2FzZSkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6VGl0bGlu
ZzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgogICAgICAgICBsaXN0
LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVRpdGxpbmdDYXBzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNGaWd1cmUpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmU6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFu
dE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVM
aW5pbmdOdW1zKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmlj
RmlndXJlOjpPbGRTdHlsZU51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y0ZpZ3VyZTo6T2xkU3R5bGVOdW1iZXJzOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9sZHN0
eWxlTnVtcykpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRT
ZXR0aW5ncy5udW1lcmljU3BhY2luZykgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU3Bh
Y2luZzo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpO
b3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmlj
U3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVyczoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQ
cm9wb3J0aW9uYWxOdW1zKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVRhYnVsYXJOdW1zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFy
aWFudFNldHRpbmdzLm51bWVyaWNGcmFjdGlvbikgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb246Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJh
Y3Rpb246Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVy
aWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZyYWN0aW9uczoKICAgICAgICAgbGlzdC5nZXQoKS5h
cHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVEaWFnb25hbEZyYWN0aW9ucykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJhY3Rpb25zOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9uczoKICAgICAgICAgbGlz
dC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTdGFja2VkRnJhY3Rpb25zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNPcmRpbmFsKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY09yZGluYWw6OlllczoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPcmRpbmFsKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51
bWVyaWNTbGFzaGVkWmVybykgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFpl
cm86Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86
Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybzo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVy
bzo6WWVzOgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNsYXNoZWRaZXJvKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmFsdGVybmF0ZXMp
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRBbHRlcm5hdGVzOjpIaXN0b3JpY2FsRm9ybXM6CiAgICAgICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSGlzdG9yaWNhbEZvcm1zKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblZhcmlhbnQpIHsKLSAgICBjYXNlIEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgorICAgIGNhc2UgUEFMOjpGb250VmFy
aWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUpp
czc4KSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM4MzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpK
aXM4MzoKICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM4MykpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA6CisgICAgY2FzZSBQ
QUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA6CiAgICAgICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSmlzOTApKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQ6OkppczA0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQ6OkppczA0OgogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczA0KSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlm
aWVkOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZp
ZWQ6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2ltcGxpZmllZCkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw6CiAg
ICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVHJhZGl0aW9uYWwpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuV2lkdGgpIHsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw6CisgICAgY2FzZSBQQUw6OkZvbnRW
YXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRnVs
bFdpZHRoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5X
aWR0aDo6UHJvcG9ydGlvbmFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoOjpQcm9wb3J0aW9uYWw6CiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJvcG9ydGlvbmFs
V2lkdGgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0
dGluZ3MuZWFzdEFzaWFuUnVieSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5
OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFs
OgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVz
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczoKICAgICAgICAg
bGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVSdWJ5KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250VmFyaWFudEJ1aWxkZXIuaAppbmRleCA2OTFhNjk5YTNkMWEyNjFiMGJlYjg2
MGJkZTNiZDE3ZjMxODRmYTg2Li40N2M3ZjA5ZjllZTc3MGI5MTEzZDZmZjA5ZDgyMDYxMGZiNzU5
MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhcmlhbnRCdWlsZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYXJpYW50QnVpbGRlci5oCkBAIC0yNywxOCAr
MjcsMjEgQEAKIAogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBDU1NWYWx1ZTsKLXN0cnVjdCBGb250VmFyaWFudFNldHRpbmdzOworbmFtZXNwYWNl
IFBBTCB7CiBzdHJ1Y3QgRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXM7CiBzdHJ1Y3QgRm9udFZh
cmlhbnROdW1lcmljVmFsdWVzOwogc3RydWN0IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFsdWVzOwor
c3RydWN0IEZvbnRWYXJpYW50U2V0dGluZ3M7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ1NTVmFsdWU7CiAKLUZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzIGV4dHJhY3RGb250
VmFyaWFudExpZ2F0dXJlcyhjb25zdCBDU1NWYWx1ZSYpOwotRm9udFZhcmlhbnROdW1lcmljVmFs
dWVzIGV4dHJhY3RGb250VmFyaWFudE51bWVyaWMoY29uc3QgQ1NTVmFsdWUmKTsKLUZvbnRWYXJp
YW50RWFzdEFzaWFuVmFsdWVzIGV4dHJhY3RGb250VmFyaWFudEVhc3RBc2lhbihjb25zdCBDU1NW
YWx1ZSYpOworUEFMOjpGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlcyBleHRyYWN0Rm9udFZhcmlh
bnRMaWdhdHVyZXMoY29uc3QgQ1NTVmFsdWUmKTsKK1BBTDo6Rm9udFZhcmlhbnROdW1lcmljVmFs
dWVzIGV4dHJhY3RGb250VmFyaWFudE51bWVyaWMoY29uc3QgQ1NTVmFsdWUmKTsKK1BBTDo6Rm9u
dFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXMgZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKGNvbnN0
IENTU1ZhbHVlJik7CiAKLVJlZjxDU1NWYWx1ZT4gY29tcHV0ZUZvbnRWYXJpYW50KGNvbnN0IEZv
bnRWYXJpYW50U2V0dGluZ3MmKTsKK1JlZjxDU1NWYWx1ZT4gY29tcHV0ZUZvbnRWYXJpYW50KGNv
bnN0IFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5ncyYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvbWFrZXByb3AucGwKaW5kZXggZjk0MTkxNzRmNWEwOWU1ZDBmYTlmZTVkNmRlNmVi
YWM1MDQyYmI4MC4uZDNiZTNiYTJjZTNkZjVlZjBiNjVhNmZlMDU3MDkzMjk4YTc4NDk3YSAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9tYWtlcHJvcC5wbApAQCAtNzE1LDkgKzcxNSw5IEBAIHByaW50IEdQRVJGIDw8ICJF
T0YiOwogICAgIH0KIH0KIAotQ1NTUHJvcGVydHlJRCBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVj
dGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitDU1NQcm9wZXJ0eUlEIENTU1By
b3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFBBTDo6V3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpCiB7Ci0gICAgY29uc3QgVGV4dEZsb3cmIHRleHRmbG93ID0gbWFrZVRleHRGbG93
KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pOworICAgIGNvbnN0IFBBTDo6VGV4dEZsb3cmIHRleHRm
bG93ID0gbWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pOwogICAgIHN3aXRjaCAo
cHJvcGVydHlJRCkgewogRU9GCiAKQEAgLTcyNSw3ICs3MjUsNyBAQCBmb3IgbXkgJGxvZ2ljYWxQ
cm9wZXJ0eUdyb3VwICh2YWx1ZXMgJWxvZ2ljYWxQcm9wZXJ0eUdyb3VwcykgewogICAgIHdoaWxl
IChteSAoJHJlc29sdmVyLCAkbmFtZSkgPSBlYWNoICV7ICRsb2dpY2FsUHJvcGVydHlHcm91cC0+
eyJsb2dpY2FsIn0gfSkgewogICAgICAgICBteSAka2luZCA9ICRsb2dpY2FsUHJvcGVydHlHcm91
cC0+eyJraW5kIn07CiAgICAgICAgIG15ICRraW5kSWQgPSBuYW1lVG9JZCgka2luZCk7Ci0gICAg
ICAgIG15ICRyZXNvbHZlckVudW0gPSAiTG9naWNhbEJveCIgLiAka2luZElkIC4gIjo6IiAuIG5h
bWVUb0lkKCRyZXNvbHZlcik7CisgICAgICAgIG15ICRyZXNvbHZlckVudW0gPSAiUEFMOjpMb2dp
Y2FsQm94IiAuICRraW5kSWQgLiAiOjoiIC4gbmFtZVRvSWQoJHJlc29sdmVyKTsKICAgICAgICAg
bXkgQHBoeXNpY2FsczsKICAgICAgICAgaWYgKCRraW5kIGVxICJzaWRlIikgewogICAgICAgICAg
ICAgQHBoeXNpY2FscyA9ICgidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0Iik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAppbmRleCBmZTNhMTI3M2I3Y2JlNWE2NGRjMjJh
NDBmZjAwMWQ0OTAxN2NlNTA5Li5lZDJmNzBlZWZiYzA1NzA0NDI3ZGY3MjY4Nzg1NDM1Y2FmODMy
NDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTI2LDcgKzI2LDcg
QEAKICNpbmNsdWRlICJDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9k
ZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKaW5kZXggOTgxMDAyNTAwNTY3YTJm
MzY3ODU1ZGViYTVjY2ZiMTczYzhjMGVlYS4uOWU5NzEyNDg5OTMwMWU2ZTUyMzdiODk5ZjYxZmJi
ZGJhY2RlZGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlci5jcHAKQEAgLTY5NSw5ICs2OTUsOSBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lRm9udFZhcmlhbnRFYXN0QXNpYW4oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwogICAgIAogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsK
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudD4gdmFyaWFudDsK
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IHdpZHRoOwotICAg
IHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5PiBydWJ5OworICAgIHN0ZDo6
b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ+IHZhcmlhbnQ7CisgICAg
c3RkOjpvcHRpb25hbDxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IHdpZHRoOworICAg
IHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+IHJ1Ynk7CiAgICAg
CiAgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CiAgICAgICAgIGlmIChyYW5nZS5wZWVrKCku
dHlwZSgpICE9IElkZW50VG9rZW4pCkBAIC03MDksNDcgKzcwOSw0NyBAQCBzdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRFYXN0QXNpYW4oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM3ODoKICAgICAgICAgICAgIGlmICh2
YXJpYW50KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgdmFy
aWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg7CisgICAgICAgICAgICB2
YXJpYW50ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczc4OwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM4MzoKICAgICAgICAgICAgIGlm
ICh2YXJpYW50KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
dmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM7CisgICAgICAgICAg
ICB2YXJpYW50ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczgzOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM5MDoKICAgICAgICAgICAg
IGlmICh2YXJpYW50KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzOTA7CisgICAgICAg
ICAgICB2YXJpYW50ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVKaXMwNDoKICAgICAgICAg
ICAgIGlmICh2YXJpYW50KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ7CisgICAg
ICAgICAgICB2YXJpYW50ID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczA0
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVTaW1wbGlmaWVkOgog
ICAgICAgICAgICAgaWYgKHZhcmlhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1w
bGlmaWVkOworICAgICAgICAgICAgdmFyaWFudCA9IFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpTaW1wbGlmaWVkOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWVUcmFkaXRpb25hbDoKICAgICAgICAgICAgIGlmICh2YXJpYW50KQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWw7CisgICAgICAgICAgICB2YXJpYW50ID0gUEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFsOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVGdWxsV2lkdGg6CiAgICAgICAgICAgICBpZiAod2lk
dGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB3aWR0aCA9
IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw7CisgICAgICAgICAgICB3aWR0aCA9IFBB
TDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGg6CiAgICAgICAgICAgICBpZiAo
d2lkdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB3aWR0
aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDsKKyAgICAgICAgICAg
IHdpZHRoID0gUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWw7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVJ1Ynk6CiAgICAgICAgICAg
ICBpZiAocnVieSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczsKKyAgICAgICAgICAgIHJ1Ynkg
PSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc1OCw0
NCArNzU4LDQ0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWFudEVh
c3RBc2lhbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKICAgICAgICAgcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHZhcmlhbnQudmFs
dWVfb3IoRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwpKSB7Ci0gICAgY2FzZSBG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbDoKKyAgICBzd2l0Y2ggKHZhcmlhbnQu
dmFsdWVfb3IoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCkpIHsKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODoKKyAg
ICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM3ODoKICAgICAgICAg
dmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVKaXM3OCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6SmlzODM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzODM6CiAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSmlzODMpKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Okppczkw
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OkppczkwOgogICAg
ICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUppczkwKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDoKICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXMwNCkp
OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6
U2ltcGxpZmllZDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpT
aW1wbGlmaWVkOgogICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNpbXBsaWZpZWQpKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFs
OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlRyYWRpdGlvbmFs
OgogICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRyYWRpdGlvbmFsKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAotICAgIHN3aXRjaCAod2lkdGgudmFsdWVfb3IoRm9udFZhcmlhbnRFYXN0QXNpYW5X
aWR0aDo6Tm9ybWFsKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9y
bWFsOgorICAgIHN3aXRjaCAod2lkdGgudmFsdWVfb3IoUEFMOjpGb250VmFyaWFudEVhc3RBc2lh
bldpZHRoOjpOb3JtYWwpKSB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lk
dGg6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RBc2lh
bldpZHRoOjpGdWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpG
dWxsOgogICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUZ1bGxXaWR0aCkpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRpb25hbDoKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOgogICAgICAg
ICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZVByb3BvcnRpb25hbFdpZHRoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCi0gICAgc3dpdGNoIChydWJ5LnZhbHVlX29yKEZvbnRWYXJpYW50RWFzdEFz
aWFuUnVieTo6Tm9ybWFsKSkgewotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpO
b3JtYWw6CisgICAgc3dpdGNoIChydWJ5LnZhbHVlX29yKFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpOb3JtYWwpKSB7CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eTo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFu
UnVieTo6WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczoK
ICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSdWJ5KSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNwcAppbmRl
eCBkY2FlYTg2N2QzZjM2NzdmYjkxMmNmM2I1ODU5NmEzMjIxYmRmNDE2Li5lYmFmZTNmYWM2M2I5
NzFiOTE5ZTkxZmI1MGNjMTJmMWJkNjNkMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5jcHAKQEAgLTEwMCwxNSAr
MTAwLDE1IEBAIFJlY3RFZGdlczxCb3JkZXJFZGdlPiBjYWxjdWxhdGVCb3JkZXJFZGdlcyhjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0IHBpeGVsCiAgICAgfTsKIH0KIAotc3RkOjpwYWly
PEJveFNpZGUsIEJveFNpZGU+IGFkamFjZW50U2lkZXNGb3JTaWRlKEJveFNpZGUgc2lkZSkKK3N0
ZDo6cGFpcjxQQUw6OkJveFNpZGUsIFBBTDo6Qm94U2lkZT4gYWRqYWNlbnRTaWRlc0ZvclNpZGUo
UEFMOjpCb3hTaWRlIHNpZGUpCiB7CiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBCb3hT
aWRlOjpUb3A6IHJldHVybiB7IEJveFNpZGU6OkxlZnQsIEJveFNpZGU6OlJpZ2h0IH07Ci0gICAg
Y2FzZSBCb3hTaWRlOjpCb3R0b206IHJldHVybiB7IEJveFNpZGU6OkxlZnQsIEJveFNpZGU6OlJp
Z2h0IH07Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OiByZXR1cm4geyBCb3hTaWRlOjpUb3AsIEJv
eFNpZGU6OkJvdHRvbSB9OwotICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6IHJldHVybiB7IEJveFNp
ZGU6OlRvcCwgQm94U2lkZTo6Qm90dG9tIH07CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDog
cmV0dXJuIHsgUEFMOjpCb3hTaWRlOjpMZWZ0LCBQQUw6OkJveFNpZGU6OlJpZ2h0IH07CisgICAg
Y2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbTogcmV0dXJuIHsgUEFMOjpCb3hTaWRlOjpMZWZ0LCBQ
QUw6OkJveFNpZGU6OlJpZ2h0IH07CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6IHJldHVy
biB7IFBBTDo6Qm94U2lkZTo6VG9wLCBQQUw6OkJveFNpZGU6OkJvdHRvbSB9OworICAgIGNhc2Ug
UEFMOjpCb3hTaWRlOjpSaWdodDogcmV0dXJuIHsgUEFMOjpCb3hTaWRlOjpUb3AsIFBBTDo6Qm94
U2lkZTo6Qm90dG9tIH07CiAgICAgfQotICAgIHJldHVybiB7IEJveFNpZGU6OkxlZnQsIEJveFNp
ZGU6OlJpZ2h0IH07CisgICAgcmV0dXJuIHsgUEFMOjpCb3hTaWRlOjpMZWZ0LCBQQUw6OkJveFNp
ZGU6OlJpZ2h0IH07CiB9CiAKIEJveERlY29yYXRpb25EYXRhOjpCb3hEZWNvcmF0aW9uRGF0YSgp
ID0gZGVmYXVsdDsKQEAgLTExOSw3ICsxMTksNyBAQCBib29sIEJveERlY29yYXRpb25EYXRhOjpo
YXNCb3JkZXIoKSBjb25zdAogICAgIGlmIChoYXNCb3JkZXJJbWFnZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3Ig
KGF1dG8gc2lkZSA6IFBBTDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAgYXV0byYgZWRnZSA9IG1f
Ym9yZGVyRWRnZXNbc2lkZV07CiAgICAgICAgIGlmIChlZGdlLnN0eWxlKCkgIT0gQm9yZGVyU3R5
bGU6Ok5vbmUgJiYgZWRnZS53aWR0aCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MzUsNyArMTM1LDcgQEAgYm9vbCBCb3hEZWNvcmF0aW9uRGF0YTo6Ym9yZGVyT2JzY3VyZXNCYWNr
Z3JvdW5kKCkgY29uc3QKICAgICAvLyBCYWlsIGlmIHdlIGhhdmUgYW55IGJvcmRlci1pbWFnZSBm
b3Igbm93LiBXZSBjb3VsZCBsb29rIGF0IHRoZSBpbWFnZSBhbHBoYSB0byBpbXByb3ZlIHRoaXMu
CiAgICAgLy8gRklYTUU6IENoZWNrIGJvcmRlci1pbWFnZS4KIAotICAgIGZvciAoYXV0byBzaWRl
IDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6IFBBTDo6YWxsQm94U2lkZXMp
IHsKICAgICAgICAgaWYgKCFtX2JvcmRlckVkZ2VzLmF0KHNpZGUpLm9ic2N1cmVzQmFja2dyb3Vu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE0NSwxMCArMTQ1LDEw
IEBAIGJvb2wgQm94RGVjb3JhdGlvbkRhdGE6OmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZCgpIGNv
bnN0CiAKIGJvb2wgQm94RGVjb3JhdGlvbkRhdGE6OmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVk
Z2UoY29uc3QgRmxvYXRTaXplJiBjb250ZXh0U2NhbGUpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRv
IHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0byBzaWRlIDogUEFMOjphbGxCb3hT
aWRlcykgewogICAgICAgICBhdXRvJiBjdXJyRWRnZSA9IG1fYm9yZGVyRWRnZXMuYXQoc2lkZSk7
CiAgICAgICAgIC8vIEZJWE1FOiBmb3IgdmVydGljYWwgdGV4dAotICAgICAgICBmbG9hdCBheGlz
U2NhbGUgPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20p
ID8gY29udGV4dFNjYWxlLmhlaWdodCgpIDogY29udGV4dFNjYWxlLndpZHRoKCk7CisgICAgICAg
IGZsb2F0IGF4aXNTY2FsZSA9IChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0g
UEFMOjpCb3hTaWRlOjpCb3R0b20pID8gY29udGV4dFNjYWxlLmhlaWdodCgpIDogY29udGV4dFNj
YWxlLndpZHRoKCk7CiAgICAgICAgIGlmICghY3VyckVkZ2Uub2JzY3VyZXNCYWNrZ3JvdW5kRWRn
ZShheGlzU2NhbGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmgK
aW5kZXggMTNiMzI4NmZjN2U2NGUzYzc3YmFjNDIyZjU0YjI5ZThiNjk2YmFlZi4uMTMxMTRlOTg0
MTFlMDY3ZGQ1MjBmOWY5ZTBkMTkzNmVhNjhmZjBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmgKQEAgLTgwLDcgKzgw
LDcgQEAgcHJpdmF0ZToKIAogUmVjdEVkZ2VzPEJvcmRlckVkZ2U+IGNhbGN1bGF0ZUJvcmRlckVk
Z2VzKGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgcGl4ZWxTbmFwcGluZ0ZhY3RvciwgYm9vbCBp
bmNsdWRlTG9naWNhbExlZnRFZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRn
ZSA9IHRydWUpOwogCi1zdGQ6OnBhaXI8Qm94U2lkZSwgQm94U2lkZT4gYWRqYWNlbnRTaWRlc0Zv
clNpZGUoQm94U2lkZSk7CitzdGQ6OnBhaXI8UEFMOjpCb3hTaWRlLCBQQUw6OkJveFNpZGU+IGFk
amFjZW50U2lkZXNGb3JTaWRlKFBBTDo6Qm94U2lkZSk7CiAKIGlubGluZSBSZWN0RWRnZXM8Zmxv
YXQ+IGJvcmRlcldpZHRocyhjb25zdCBSZWN0RWRnZXM8Qm9yZGVyRWRnZT4mIGVkZ2VzKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uUGFpbnRlci5jcHAKaW5kZXggYmIxOGE2M2FiOTkwYzRhZTNiZGNiOTAzMjljMzE2OWFi
YjVmYTJhMC4uMTUyN2MwZTNiNmYwNDNjMDJiN2E2Yjc3ZDEyOTY5MGJkZDRmZWYwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWlu
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3Jh
dGlvblBhaW50ZXIuY3BwCkBAIC05MCwyNCArOTAsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuICFmaXJzdFJhZGl1cy5pc1plcm8oKSB8fCAhc2Vjb25kUmFkaXVzLmlzWmVybygpOwogICAg
IH0KIAotICAgIHN0YXRpYyBib29sIGJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3Ju
ZXIoQm9yZGVyU3R5bGUsIEJveFNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlKTsKLSAgICBzdGF0
aWMgYm9vbCBib3JkZXJTdHlsZXNSZXF1aXJlTWl0cmUoQm94U2lkZSwgQm94U2lkZSBhZGphY2Vu
dFNpZGUsIEJvcmRlclN0eWxlLCBCb3JkZXJTdHlsZSBhZGphY2VudFN0eWxlKTsKLSAgICBzdGF0
aWMgRmxvYXRSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlKTsKLSAgICBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKEJvcmRlclN0eWxlLCBCb3hTaWRlLCBDb2xvciYpOwor
ICAgIHN0YXRpYyBib29sIGJvcmRlclN0eWxlSGFzVW5tYXRjaGVkQ29sb3JzQXRDb3JuZXIoQm9y
ZGVyU3R5bGUsIFBBTDo6Qm94U2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSk7CisgICAg
c3RhdGljIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWlyZU1pdHJlKFBBTDo6Qm94U2lkZSwgUEFMOjpC
b3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUsIEJvcmRlclN0eWxlIGFkamFjZW50U3R5
bGUpOworICAgIHN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZXJC
b3JkZXIoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIFBBTDo6Qm94U2lkZSk7
CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihCb3JkZXJTdHlsZSwg
UEFMOjpCb3hTaWRlLCBDb2xvciYpOwogCiAgICAgRmxvYXRSZWN0IGJvcmRlcklubmVyUmVjdEFk
anVzdGVkRm9yQmxlZWRBdm9pZGFuY2UoY29uc3QgUGFpbnRpbmdDb250ZXh0JikgY29uc3Q7CiAK
LSAgICBib29sIGNvbG9yc01hdGNoQXRDb3JuZXIoQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNp
ZGUpIGNvbnN0OwotICAgIGJvb2wgY29sb3JOZWVkc0FudGlBbGlhc0F0Q29ybmVyKEJveFNpZGUs
IEJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdDsKLSAgICBib29sIHdpbGxCZU92ZXJkcmF3bihC
b3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3Q7Ci0gICAgYm9vbCBqb2luUmVxdWly
ZXNNaXRyZShCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgYm9vbCBhbGxvd092ZXJkcmF3
KSBjb25zdDsKKyAgICBib29sIGNvbG9yc01hdGNoQXRDb3JuZXIoUEFMOjpCb3hTaWRlLCBQQUw6
OkJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdDsKKyAgICBib29sIGNvbG9yTmVlZHNBbnRpQWxp
YXNBdENvcm5lcihQQUw6OkJveFNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0
OworICAgIGJvb2wgd2lsbEJlT3ZlcmRyYXduKFBBTDo6Qm94U2lkZSwgUEFMOjpCb3hTaWRlIGFk
amFjZW50U2lkZSkgY29uc3Q7CisgICAgYm9vbCBqb2luUmVxdWlyZXNNaXRyZShQQUw6OkJveFNp
ZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wgYWxsb3dPdmVyZHJhdykgY29uc3Q7
CiAKLSAgICB2b2lkIGNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmLCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
aW5uZXJCb3JkZXIsIEJveFNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRF
ZGdlTWF0Y2hlcykgY29uc3Q7CisgICAgdm9pZCBjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRp
bmdDb250ZXh0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBQQUw6OkJveFNpZGUsIGJvb2wgZmlyc3RFZGdl
TWF0Y2hlcywgYm9vbCBzZWNvbmRFZGdlTWF0Y2hlcykgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdM
aW5lRm9yQm94U2lkZShQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBCb3hTaWRl
LCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2Vu
dFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd0JveFNpZGVGcm9t
UGF0aChQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0
IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywg
Qm94U2lkZSwgQ29sb3IsIEJvcmRlclN0eWxlKSBjb25zdDsKKyAgICB2b2lkIGRyYXdMaW5lRm9y
Qm94U2lkZShQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBQQUw6OkJveFNpZGUs
IENvbG9yLCBCb3JkZXJTdHlsZSwgZmxvYXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50
V2lkdGgyLCBib29sIGFudGlhbGlhcykgY29uc3Q7CisgICAgdm9pZCBkcmF3Qm94U2lkZUZyb21Q
YXRoKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3Qg
UGF0aCYgYm9yZGVyUGF0aCwgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBQ
QUw6OkJveFNpZGUsIENvbG9yLCBCb3JkZXJTdHlsZSkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50
T25lQm9yZGVyU2lkZShQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBv
dXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0IEZs
b2F0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUsIGNvbnN0IFBhdGgqLCBib29sIGFudGlhbGlhcywg
Y29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IpIGNvbnN0OworICAgIHZvaWQgcGFpbnRPbmVCb3Jk
ZXJTaWRlKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9y
ZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgY29uc3QgRmxvYXRSZWN0
JiBzaWRlUmVjdCwgUEFMOjpCb3hTaWRlLCBjb25zdCBQYXRoKiwgYm9vbCBhbnRpYWxpYXMsIGNv
bnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdDsKICAgICB2b2lkIHBhaW50Qm9yZGVyU2lk
ZXMoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBGbG9hdFNpemUgaW5uZXJCb3Jk
ZXJCbGVlZEFkanVzdG1lbnQsIEJveFNpZGVTZXQsIGJvb2wgYW50aWFsaWFzLCBjb25zdCBDb2xv
ciogb3ZlcnJpZGVDb2xvciA9IG51bGxwdHIpIGNvbnN0OwogICAgIHZvaWQgcGFpbnRUcmFuc2x1
Y2VudEJvcmRlclNpZGVzKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IG91dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgRmxvYXRT
aXplIGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50LCBCb3hTaWRlU2V0LCBib29sIGFudGlhbGlh
cykgY29uc3Q7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogCiAvLyBCb3JkZXJTdHls
ZTo6T3V0c2V0IGRhcmtlbnMgdGhlIGJvdHRvbSBhbmQgcmlnaHQgKGFuZCBtYXliZSBsaWdodGVu
cyB0aGUgdG9wIGFuZCBsZWZ0KQogLy8gQm9yZGVyU3R5bGU6Okluc2V0IGRhcmtlbnMgdGhlIHRv
cCBhbmQgbGVmdCAoYW5kIG1heWJlIGxpZ2h0ZW5zIHRoZSBib3R0b20gYW5kIHJpZ2h0KQotYm9v
bCBCb3JkZXJQYWludGVyOjpib3JkZXJTdHlsZUhhc1VubWF0Y2hlZENvbG9yc0F0Q29ybmVyKEJv
cmRlclN0eWxlIHN0eWxlLCBCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlKQorYm9v
bCBCb3JkZXJQYWludGVyOjpib3JkZXJTdHlsZUhhc1VubWF0Y2hlZENvbG9yc0F0Q29ybmVyKEJv
cmRlclN0eWxlIHN0eWxlLCBQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50
U2lkZSkKIHsKICAgICAvLyBUaGVzZSBzdHlsZXMgbWF0Y2ggYXQgdGhlIHRvcC9sZWZ0IGFuZCBi
b3R0b20vcmlnaHQuCiAgICAgaWYgKHN0eWxlID09IEJvcmRlclN0eWxlOjpJbnNldCB8fCBzdHls
ZSA9PSBCb3JkZXJTdHlsZTo6R3Jvb3ZlIHx8IHN0eWxlID09IEJvcmRlclN0eWxlOjpSaWRnZSB8
fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6T3V0c2V0KSB7CkBAIC0xMzMsNyArMTMzLDcgQEAgYm9v
bCBCb3JkZXJQYWludGVyOjpib3JkZXJTdHlsZUhhc1VubWF0Y2hlZENvbG9yc0F0Q29ybmVyKEJv
cmRlclN0eWxlIHN0eWxlLCBCb3gKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQm9yZGVy
UGFpbnRlcjo6Y29sb3JzTWF0Y2hBdENvcm5lcihCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNl
bnRTaWRlKSBjb25zdAorYm9vbCBCb3JkZXJQYWludGVyOjpjb2xvcnNNYXRjaEF0Q29ybmVyKFBB
TDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlKSBjb25zdAogewogICAg
IGF1dG8mIGVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOwogICAgIGF1dG8mIGFkamFjZW50RWRnZSA9
IG1fZWRnZXMuYXQoYWRqYWNlbnRTaWRlKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29sIEJvcmRl
clBhaW50ZXI6OmNvbG9yc01hdGNoQXRDb3JuZXIoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFj
ZW50U2lkZSkgY29ucwogICAgIHJldHVybiAhYm9yZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNB
dENvcm5lcihlZGdlLnN0eWxlKCksIHNpZGUsIGFkamFjZW50U2lkZSk7CiB9CiAKLWJvb2wgQm9y
ZGVyUGFpbnRlcjo6Y29sb3JOZWVkc0FudGlBbGlhc0F0Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94
U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0Citib29sIEJvcmRlclBhaW50ZXI6OmNvbG9yTmVlZHNB
bnRpQWxpYXNBdENvcm5lcihQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50
U2lkZSkgY29uc3QKIHsKICAgICBhdXRvJiBlZGdlID0gbV9lZGdlcy5hdChzaWRlKTsKICAgICBh
dXRvJiBhZGphY2VudEVkZ2UgPSBtX2VkZ2VzLmF0KGFkamFjZW50U2lkZSk7CkBAIC0xNjQsNyAr
MTY0LDcgQEAgYm9vbCBCb3JkZXJQYWludGVyOjpjb2xvck5lZWRzQW50aUFsaWFzQXRDb3JuZXIo
Qm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2kKICAgICByZXR1cm4gYm9yZGVyU3R5bGVI
YXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihlZGdlLnN0eWxlKCksIHNpZGUsIGFkamFjZW50U2lk
ZSk7CiB9CiAKLXZvaWQgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihC
b3JkZXJTdHlsZSBzdHlsZSwgQm94U2lkZSBzaWRlLCBDb2xvciYgY29sb3IpCit2b2lkIEJvcmRl
clBhaW50ZXI6OmNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoQm9yZGVyU3R5bGUgc3R5bGUsIFBB
TDo6Qm94U2lkZSBzaWRlLCBDb2xvciYgY29sb3IpCiB7CiAgICAgQVNTRVJUKHN0eWxlID09IEJv
cmRlclN0eWxlOjpJbnNldCB8fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6T3V0c2V0KTsKIApAQCAt
MTc0LDcgKzE3NCw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQm9yZGVyU3R5bGVD
b2xvcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94U2lkZSBzaWRlLCBDCiAKICAgICBlbnVtIE9wZXJh
dGlvbiB7IERhcmtlbiwgTGlnaHRlbiB9OwogCi0gICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChz
aWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpID09IChzdHlsZSA9
PSBCb3JkZXJTdHlsZTo6SW5zZXQpID8gRGFya2VuIDogTGlnaHRlbjsKKyAgICBPcGVyYXRpb24g
b3BlcmF0aW9uID0gKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJv
eFNpZGU6OkxlZnQpID09IChzdHlsZSA9PSBCb3JkZXJTdHlsZTo6SW5zZXQpID8gRGFya2VuIDog
TGlnaHRlbjsKIAogICAgIC8vIEhlcmUgd2Ugd2lsbCBkYXJrZW4gdGhlIGJvcmRlciBkZWNvcmF0
aW9uIGNvbG9yIHdoZW4gbmVlZGVkLiBUaGlzIHdpbGwgeWllbGQgYSBzaW1pbGFyIGJlaGF2aW9y
IGFzIGluIEZGLgogICAgIGlmIChvcGVyYXRpb24gPT0gRGFya2VuKSB7CkBAIC0xODcsMTEgKzE4
NywxMSBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoQm9y
ZGVyU3R5bGUgc3R5bGUsIEJveFNpZGUgc2lkZSwgQwogfQogCiAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB3ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuCi1ib29sIEJvcmRl
clBhaW50ZXI6OndpbGxCZU92ZXJkcmF3bihCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRT
aWRlKSBjb25zdAorYm9vbCBCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24oUEFMOjpCb3hT
aWRlIHNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChzaWRlKSB7Ci0gICAgY2FzZSBCb3hTaWRlOjpUb3A6Ci0gICAgY2FzZSBCb3hTaWRlOjpCb3R0
b206IHsKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpCb3R0b206IHsKICAgICAgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQoc2lkZSk7CiAgICAg
ICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IG1fZWRnZXMuYXQoYWRqYWNlbnRTaWRlKTsKIApAQCAt
MjA2LDE1ICsyMDYsMTUgQEAgYm9vbCBCb3JkZXJQYWludGVyOjp3aWxsQmVPdmVyZHJhd24oQm94
U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSkgY29uc3QKIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgotICAgIGNhc2UgQm94U2lkZTo6
UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNp
ZGU6OlJpZ2h0OgogICAgICAgICAvLyBUaGVzZSBkcmF3IGxhc3QsIHNvIGFyZSBuZXZlciBvdmVy
ZHJhd24uCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIEJvcmRlclBhaW50ZXI6OmJvcmRlclN0eWxlc1JlcXVpcmVNaXRyZShCb3hTaWRl
IHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlLCBCb3JkZXJTdHlsZSBzdHlsZSwgQm9yZGVyU3R5
bGUgYWRqYWNlbnRTdHlsZSkKK2Jvb2wgQm9yZGVyUGFpbnRlcjo6Ym9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBCb3Jk
ZXJTdHlsZSBzdHlsZSwgQm9yZGVyU3R5bGUgYWRqYWNlbnRTdHlsZSkKIHsKICAgICBpZiAoc3R5
bGUgPT0gQm9yZGVyU3R5bGU6OkRvdWJsZSB8fCBhZGphY2VudFN0eWxlID09IEJvcmRlclN0eWxl
OjpEb3VibGUgfHwgYWRqYWNlbnRTdHlsZSA9PSBCb3JkZXJTdHlsZTo6R3Jvb3ZlIHx8IGFkamFj
ZW50U3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTIyOCw3ICsyMjgsNyBAQCBib29sIEJvcmRlclBhaW50ZXI6OmJvcmRlclN0eWxlc1JlcXVpcmVN
aXRyZShCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlLAogICAgIHJldHVybiBib3Jk
ZXJTdHlsZUhhc1VubWF0Y2hlZENvbG9yc0F0Q29ybmVyKHN0eWxlLCBzaWRlLCBhZGphY2VudFNp
ZGUpOwogfQogCi1GbG9hdFJvdW5kZWRSZWN0IEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0ZUFkanVz
dGVkSW5uZXJCb3JkZXIoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIEJveFNp
ZGUgc2lkZSkKK0Zsb2F0Um91bmRlZFJlY3QgQm9yZGVyUGFpbnRlcjo6Y2FsY3VsYXRlQWRqdXN0
ZWRJbm5lckJvcmRlcihjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgUEFMOjpC
b3hTaWRlIHNpZGUpCiB7CiAgICAgLy8gRXhwYW5kIHRoZSBpbm5lciBib3JkZXIgYXMgbmVjZXNz
YXJ5IHRvIG1ha2UgaXQgYSByb3VuZGVkIHJlY3QgKGkuZS4gcmFkaWkgY29udGFpbmVkIHdpdGhp
biBlYWNoIGVkZ2UpLgogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBmYWN0IHdl
IG9ubHkgZ2V0IHJhZGlpIG5vdCBjb250YWluZWQgd2l0aGluIGVhY2ggZWRnZSBpZiBvbmUgb2Yg
dGhlIHJhZGlpCkBAIC0yNDAsNyArMjQwLDcgQEAgRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWlu
dGVyOjpjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFIKICAg
ICBmbG9hdCBtYXhSYWRpaTsKIAogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgQm94U2lk
ZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgIG92ZXJzaG9vdCA9
IG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgpICsgbmV3UmFkaWkudG9wUmlnaHQoKS53aWR0aCgp
IC0gbmV3UmVjdC53aWR0aCgpOwogICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgewogICAgICAg
ICAgICAgQVNTRVJUKCEobmV3UmFkaWkudG9wTGVmdCgpLndpZHRoKCkgJiYgbmV3UmFkaWkudG9w
UmlnaHQoKS53aWR0aCgpKSk7CkBAIC0yNTUsNyArMjU1LDcgQEAgRmxvYXRSb3VuZGVkUmVjdCBC
b3JkZXJQYWludGVyOjpjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91
bmRlZFIKICAgICAgICAgICAgIG5ld1JlY3Quc2V0SGVpZ2h0KG1heFJhZGlpKTsKICAgICAgICAg
YnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBBTDo6Qm94U2lk
ZTo6Qm90dG9tOgogICAgICAgICBvdmVyc2hvb3QgPSBuZXdSYWRpaS5ib3R0b21MZWZ0KCkud2lk
dGgoKSArIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSAtIG5ld1JlY3Qud2lkdGgoKTsK
ICAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsKICAgICAgICAgICAgIEFTU0VSVCghKG5ld1Jh
ZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpICYmIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgo
KSkpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIEZsb2F0Um91bmRlZFJlY3QgQm9yZGVyUGFpbnRlcjo6
Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBGbG9hdFJvdW5kZWRSCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQ
QUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgIG92ZXJzaG9vdCA9IG5ld1JhZGlpLnRvcExlZnQo
KS5oZWlnaHQoKSArIG5ld1JhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAtIG5ld1JlY3QuaGVp
Z2h0KCk7CiAgICAgICAgIGlmIChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IShuZXdSYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgJiYgbmV3UmFkaWkuYm90dG9tTGVmdCgpLmhl
aWdodCgpKSk7CkBAIC0yODcsNyArMjg3LDcgQEAgRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWlu
dGVyOjpjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IEZsb2F0Um91bmRlZFIKICAg
ICAgICAgICAgIG5ld1JlY3Quc2V0V2lkdGgobWF4UmFkaWkpOwogICAgICAgICBicmVhazsKIAot
ICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0Ogog
ICAgICAgICBvdmVyc2hvb3QgPSBuZXdSYWRpaS50b3BSaWdodCgpLmhlaWdodCgpICsgbmV3UmFk
aWkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKSAtIG5ld1JlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGlm
IChvdmVyc2hvb3QgPiAwKSB7CiAgICAgICAgICAgICBBU1NFUlQoIShuZXdSYWRpaS50b3BSaWdo
dCgpLmhlaWdodCgpICYmIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpKTsKQEAgLTMw
OCw3ICszMDgsNyBAQCBGbG9hdFJvdW5kZWRSZWN0IEJvcmRlclBhaW50ZXI6OmNhbGN1bGF0ZUFk
anVzdGVkSW5uZXJCb3JkZXIoY29uc3QgRmxvYXRSb3VuZGVkUgogICAgIHJldHVybiBGbG9hdFJv
dW5kZWRSZWN0IHsgbmV3UmVjdCwgbmV3UmFkaWkgfTsKIH0KIAotYm9vbCBCb3JkZXJQYWludGVy
Ojpqb2luUmVxdWlyZXNNaXRyZShCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlLCBi
b29sIGFsbG93T3ZlcmRyYXcpIGNvbnN0Citib29sIEJvcmRlclBhaW50ZXI6OmpvaW5SZXF1aXJl
c01pdHJlKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBib29s
IGFsbG93T3ZlcmRyYXcpIGNvbnN0CiB7CiAgICAgYXV0byYgZWRnZSA9IG1fZWRnZXMuYXQoc2lk
ZSk7CiAgICAgYXV0byYgYWRqYWNlbnRFZGdlID0gbV9lZGdlcy5hdChhZGphY2VudFNpZGUpOwpA
QCAtMzI4LDcgKzMyOCw3IEBAIGJvb2wgQm9yZGVyUGFpbnRlcjo6am9pblJlcXVpcmVzTWl0cmUo
Qm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgYm9vbCBhCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRp
bmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwg
Y29uc3QgUGF0aCYgYm9yZGVyUGF0aCwgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhpY2tu
ZXNzLCBCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkg
Y29uc3QKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChQYWludGluZ0Nv
bnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBib3JkZXJSZWN0LCBjb25z
dCBQYXRoJiBib3JkZXJQYXRoLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRyYXdUaGlja25lc3Ms
IFBBTDo6Qm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUp
IGNvbnN0CiB7CiAgICAgaWYgKHRoaWNrbmVzcyA8PSAwKQogICAgICAgICByZXR1cm47CkBAIC00
NjcsNyArNDY3LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZyb21QYXRoKFBh
aW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdAogICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LmRyYXdSZWN0KGJvcmRlclJlY3QpOwogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6
OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlIHNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9v
bCBzZWNvbmRFZGdlTWF0Y2hlcykgY29uc3QKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6Y2xpcEJvcmRl
clNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJC
b3JkZXIsIFBBTDo6Qm94U2lkZSBzaWRlLCBib29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vj
b25kRWRnZU1hdGNoZXMpIGNvbnN0CiB7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBvdXRlclJlY3Qg
PSBvdXRlckJvcmRlci5yZWN0KCk7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBpbm5lclJlY3QgPSBp
bm5lckJvcmRlci5yZWN0KCk7CkBAIC00ODksNyArNDg5LDcgQEAgdm9pZCBCb3JkZXJQYWludGVy
OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQs
IGNvbnMKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gcXVhZDsKICAgICBxdWFkLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoNCk7CiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBCb3hTaWRlOjpU
b3A6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgcXVhZC51bmNoZWNrZWRB
cHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKQEAgLTUwMiw3ICs1MDIsNyBA
QCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRl
eHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihv
dXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlu
bmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgcXVh
ZFsyXSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgIGNh
c2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRl
clJlY3QubWluWE1pbllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlu
bmVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
aW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgQm9y
ZGVyUGFpbnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFpbnRp
bmdDb250ZXh0LCBjb25zCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5t
aW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKICAg
ICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBBTDo6
Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3Qu
bWluWE1heFlDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVj
dC5taW5YTWF4WUNvcm5lcigpKTsKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJS
ZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwpAQCAtNTI4LDcgKzUyOCw3IEBAIHZvaWQgQm9yZGVyUGFp
bnRlcjo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBjb25zCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWF4
WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5Z
Q29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKICAgICAgICAg
YnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpSaWdodDoKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5Z
Q29ybmVyKCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1p
bllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNs
aXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29u
cwogICAgICAgICBxdWFkWzBdLAogICAgICAgICBxdWFkWzFdLAogICAgICAgICBxdWFkWzJdLAot
ICAgICAgICBzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkJvdHRvbSA/
IEZsb2F0UG9pbnQocXVhZFszXS54KCksIHF1YWRbMl0ueSgpKSA6IEZsb2F0UG9pbnQocXVhZFsy
XS54KCksIHF1YWRbM10ueSgpKSwKKyAgICAgICAgc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8
fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tID8gRmxvYXRQb2ludChxdWFkWzNdLngoKSwg
cXVhZFsyXS55KCkpIDogRmxvYXRQb2ludChxdWFkWzJdLngoKSwgcXVhZFszXS55KCkpLAogICAg
ICAgICBxdWFkWzNdCiAgICAgfTsKICAgICBib29sIHdhc0FudGlhbGlhc2VkID0gcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7CkBAIC01NjYsNyArNTY2LDcgQEAgdm9p
ZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBw
YWludGluZ0NvbnRleHQsIGNvbnMKIAogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBzZWNvbmRRdWFk
ID0gewogICAgICAgICBxdWFkWzBdLAotICAgICAgICBzaWRlID09IEJveFNpZGU6OlRvcCB8fCBz
aWRlID09IEJveFNpZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQocXVhZFswXS54KCksIHF1YWRbMV0u
eSgpKSA6IEZsb2F0UG9pbnQocXVhZFsxXS54KCksIHF1YWRbMF0ueSgpKSwKKyAgICAgICAgc2lk
ZSA9PSBQQUw6OkJveFNpZGU6OlRvcCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tID8g
RmxvYXRQb2ludChxdWFkWzBdLngoKSwgcXVhZFsxXS55KCkpIDogRmxvYXRQb2ludChxdWFkWzFd
LngoKSwgcXVhZFswXS55KCkpLAogICAgICAgICBxdWFkWzFdLAogICAgICAgICBxdWFkWzJdLAog
ICAgICAgICBxdWFkWzNdCkBAIC01NzgsNyArNTc4LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpj
bGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNv
bnMKICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50
aWFsaWFzZWQpOwogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQ
YWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBC
b3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgZmxvYXQg
YWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlhcykgY29u
c3QKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4
dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFBBTDo6Qm94U2lkZSBz
aWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50
V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAg
ICAgYXV0byBkcmF3Qm9yZGVyUmVjdCA9IFsmXShjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsKICAg
ICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQpAQCAtNTg2LDcgKzU4Niw3IEBAIHZvaWQgQm9yZGVy
UGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBjb25zdCBGCiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmRyYXdSZWN0KHJl
Y3QpOwogICAgIH07CiAKLSAgICBhdXRvIGRyYXdMaW5lRm9yID0gWyZdKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgQm94U2lkZSBzaWRlLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgY29uc3QgRmxv
YXRTaXplJiBhZGphY2VudCkgeworICAgIGF1dG8gZHJhd0xpbmVGb3IgPSBbJl0oY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBQQUw6OkJveFNpZGUgc2lkZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUs
IGNvbnN0IEZsb2F0U2l6ZSYgYWRqYWNlbnQpIHsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUocGFpbnRp
bmdDb250ZXh0LCByZWN0LCBzaWRlLCBjb2xvciwgYm9yZGVyU3R5bGUsIGFkamFjZW50LndpZHRo
KCksIGFkamFjZW50LmhlaWdodCgpLCBhbnRpYWxpYXMpOwpAQCAtNjAxLDcgKzYwMSw3IEBAIHZv
aWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFp
bnRpbmdDb250ZXh0LCBjb25zdCBGCiAgICAgZmxvYXQgeTIgPSByZWN0Lm1heFkoKTsKICAgICBm
bG9hdCB0aGlja25lc3M7CiAgICAgZmxvYXQgbGVuZ3RoOwotICAgIGlmIChzaWRlID09IEJveFNp
ZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkJvdHRvbSkgeworICAgIGlmIChzaWRlID09IFBB
TDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpCb3R0b20pIHsKICAgICAg
ICAgdGhpY2tuZXNzID0geTIgLSB5MTsKICAgICAgICAgbGVuZ3RoID0geDIgLSB4MTsKICAgICB9
IGVsc2UgewpAQCAtNjQxLDE5ICs2NDEsMTkgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGlu
ZUZvckJveFNpZGUoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKICAg
ICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhhbnRp
YWxpYXMpOwogCiAgICAgICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
Qm94U2lkZTo6VG9wOgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAg
ICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdCh7IHgxLCB5MSwgbGVuZ3RoLCBlZGdlLm91dGVyV2lk
dGgoKSB9KTsKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdCh7IHgxLCB5MiAtIGVkZ2Uu
aW5uZXJXaWR0aCgpLCBsZW5ndGgsIGVkZ2UuaW5uZXJXaWR0aCgpIH0pOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJS
ZWN0KHsgeDEsIHkyIC0gZWRnZS5vdXRlcldpZHRoKCksIGxlbmd0aCwgZWRnZS5vdXRlcldpZHRo
KCkgfSk7CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3QoeyB4MSwgeTEsIGxlbmd0aCwg
ZWRnZS5pbm5lcldpZHRoKCkgfSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVm
dDoKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdCh7IHgxLCB5MSwgZWRnZS5vdXRlcldp
ZHRoKCksIGxlbmd0aCB9KTsKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyUmVjdCh7IHgyIC0g
ZWRnZS5pbm5lcldpZHRoKCksIHkxLCBlZGdlLmlubmVyV2lkdGgoKSwgbGVuZ3RoIH0pOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAg
ICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgICAgICBkcmF3
Qm9yZGVyUmVjdCh7IHgyIC0gZWRnZS5vdXRlcldpZHRoKCksIHkxLCBlZGdlLm91dGVyV2lkdGgo
KSwgbGVuZ3RoIH0pOwogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHsgeDEsIHkxLCBl
ZGdlLmlubmVyV2lkdGgoKSwgbGVuZ3RoIH0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
Njc1LDI4ICs2NzUsMjggQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJveFNpZGUo
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKIAogICAgICAgICAgICAg
RmxvYXRSZWN0IHBhaW50Qm9yZGVyUmVjdDsKICAgICAgICAgICAgIHN3aXRjaCAoc2lkZSkgewot
ICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94
U2lkZTo6VG9wOgogICAgICAgICAgICAgICAgIHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSArIG1pdHJlT2Zmc2V0MSwgeTEsICh4MiAtIG1pdHJl
T2Zmc2V0MykgLSAoeDEgKyBtaXRyZU9mZnNldDEpLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNl
U2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVj
dCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQs
IGFkamFjZW50MkJpZ1RoaXJkKSk7CiAKICAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNldDIsIHky
IC0gdGhpcmRPZlRoaWNrbmVzcywgKHgyIC0gbWl0cmVPZmZzZXQ0KSAtICh4MSArIG1pdHJlT2Zm
c2V0MiksIHRoaXJkT2ZUaGlja25lc3MpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAg
ICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29s
aWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAg
ICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAgICAgICAgIHBhaW50
Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSwgeTEgKyBt
aXRyZU9mZnNldDEsIHRoaXJkT2ZUaGlja25lc3MsICh5MiAtIG1pdHJlT2Zmc2V0MykgLSAoeTEg
KyBtaXRyZU9mZnNldDEpKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRy
YXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9h
dFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAKICAgICAgICAg
ICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJl
Y3QoeDIgLSB0aGlyZE9mVGhpY2tuZXNzLCB5MSArIG1pdHJlT2Zmc2V0MiwgdGhpcmRPZlRoaWNr
bmVzcywgKHkyIC0gbWl0cmVPZmZzZXQ0KSAtICh5MSArIG1pdHJlT2Zmc2V0MikpLCBkZXZpY2VT
Y2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgZHJhd0xpbmVGb3IocGFpbnRCb3JkZXJSZWN0
LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdUaGlyZCwg
YWRqYWNlbnQyQmlnVGhpcmQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQm94U2lkZTo6Qm90dG9tOgorICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJv
dHRvbToKICAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNl
UGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9mZnNldDIsIHkxLCAoeDIgLSBtaXRyZU9mZnNl
dDQpIC0gKHgxICsgbWl0cmVPZmZzZXQyKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxl
RmFjdG9yKTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNp
ZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGph
Y2VudDJCaWdUaGlyZCkpOwogCiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQxLCB5MiAtIHRo
aXJkT2ZUaGlja25lc3MsICh4MiAtIG1pdHJlT2Zmc2V0MykgLSAoeDEgKyBtaXRyZU9mZnNldDEp
LCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAg
IGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBG
bG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAg
ICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICAgICAgICAgIHBhaW50Qm9y
ZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSwgeTEgKyBtaXRy
ZU9mZnNldDIsIHRoaXJkT2ZUaGlja25lc3MsICh5MiAtIG1pdHJlT2Zmc2V0NCkgLSAoeTEgKyBt
aXRyZU9mZnNldDIpKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdM
aW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNp
emUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAKQEAgLTczMCwxNiAr
NzMwLDE2IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5n
Q29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAgICAgICAgIGZsb2F0IG9mZnNldDMg
PSAwOwogICAgICAgICBmbG9hdCBvZmZzZXQ0ID0gMDsKIAotICAgICAgICBpZiAoKChzaWRlID09
IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgx
IDwgMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJp
Z2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQorICAgICAgICBpZiAoKChzaWRlID09IFBBTDo6
Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBhZGphY2VudFdp
ZHRoMSA8IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IFBB
TDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgxID4gMCkpCiAgICAgICAgICAgICBv
ZmZzZXQxID0gZmxvb3JUb0RldmljZVBpeGVsKGFkamFjZW50V2lkdGgxIC8gMiwgZGV2aWNlU2Nh
bGVGYWN0b3IpOwogCi0gICAgICAgIGlmICgoKHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUg
PT0gQm94U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDIgPCAwKSB8fCAoKHNpZGUgPT0gQm94
U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0gQm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgy
ID4gMCkpCisgICAgICAgIGlmICgoKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9
PSBQQUw6OkJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkgfHwgKChzaWRlID09
IFBBTDo6Qm94U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpSaWdodCkgJiYg
YWRqYWNlbnRXaWR0aDIgPiAwKSkKICAgICAgICAgICAgIG9mZnNldDIgPSBjZWlsVG9EZXZpY2VQ
aXhlbChhZGphY2VudFdpZHRoMiAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgICAgICBp
ZiAoKChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkxlZnQpICYmIGFk
amFjZW50V2lkdGgxID4gMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09
IEJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA8IDApKQorICAgICAgICBpZiAoKChz
aWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAm
JiBhZGphY2VudFdpZHRoMSA+IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8
fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgxIDwgMCkpCiAg
ICAgICAgICAgICBvZmZzZXQzID0gZmxvb3JUb0RldmljZVBpeGVsKGZhYnMoYWRqYWNlbnRXaWR0
aDEpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgICAgIGlmICgoKHNpZGUgPT0gQm94
U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0aDIgPiAw
KSB8fCAoKHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0gQm94U2lkZTo6UmlnaHQp
ICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCisgICAgICAgIGlmICgoKHNpZGUgPT0gUEFMOjpCb3hT
aWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgy
ID4gMCkgfHwgKChzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0gUEFMOjpC
b3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDIgPCAwKSkKICAgICAgICAgICAgIG9mZnNl
dDQgPSBjZWlsVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMiAvIDIsIGRldmljZVNjYWxlRmFj
dG9yKTsKIAogICAgICAgICBmbG9hdCBhZGp1c3RlZFggPSBjZWlsVG9EZXZpY2VQaXhlbCgoeDEg
KyB4MikgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CkBAIC03NTEsMTkgKzc1MSwxOSBAQCB2b2lk
IEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQYWludGluZ0NvbnRleHQmIHBhaW50
aW5nQ29udGV4dCwgY29uc3QgRgogICAgICAgICB5MiA9IHJvdW5kVG9EZXZpY2VQaXhlbCh5Miwg
ZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgICAgIHN3aXRjaCAoc2lkZSkgewotICAgICAgICBj
YXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAg
ICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KHgxICsgb2Zmc2V0MSwgeTEp
LCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0MiwgYWRqdXN0ZWRZKSksIHNpZGUsIHMxLCBGbG9hdFNp
emUoYWRqYWNlbnQxQmlnSGFsZiwgYWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJh
d0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoeDEgKyBvZmZzZXQzLCBhZGp1c3RlZFkpLCBG
bG9hdFBvaW50KHgyIC0gb2Zmc2V0NCwgeTIpKSwgc2lkZSwgczIsIEZsb2F0U2l6ZShhZGphY2Vu
dDFTbWFsbEhhbGYsIGFkamFjZW50MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6Okxl
ZnQ6CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSwgeTEg
KyBvZmZzZXQxKSwgRmxvYXRQb2ludChhZGp1c3RlZFgsIHkyIC0gb2Zmc2V0MikpLCBzaWRlLCBz
MSwgRmxvYXRTaXplKGFkamFjZW50MUJpZ0hhbGYsIGFkamFjZW50MkJpZ0hhbGYpKTsKICAgICAg
ICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9hdFBvaW50KGFkanVzdGVkWCwgeTEgKyBv
ZmZzZXQzKSwgRmxvYXRQb2ludCh4MiwgeTIgLSBvZmZzZXQ0KSksIHNpZGUsIHMyLCBGbG9hdFNp
emUoYWRqYWNlbnQxU21hbGxIYWxmLCBhZGphY2VudDJTbWFsbEhhbGYpKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6
OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZsb2F0UmVjdChGbG9h
dFBvaW50KHgxICsgb2Zmc2V0MSwgeTEpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0MiwgYWRqdXN0
ZWRZKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFsZiwgYWRqYWNlbnQyQmln
SGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoeDEg
KyBvZmZzZXQzLCBhZGp1c3RlZFkpLCBGbG9hdFBvaW50KHgyIC0gb2Zmc2V0NCwgeTIpKSwgc2lk
ZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFjZW50MlNtYWxsSGFsZikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAg
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZs
b2F0UmVjdChGbG9hdFBvaW50KHgxLCB5MSArIG9mZnNldDEpLCBGbG9hdFBvaW50KGFkanVzdGVk
WCwgeTIgLSBvZmZzZXQyKSksIHNpZGUsIHMyLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFsZiwg
YWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoYWRqdXN0ZWRYLCB5MSArIG9mZnNldDMpLCBGbG9hdFBvaW50KHgyLCB5MiAtIG9m
ZnNldDQpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFjZW50
MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03OTgsMjUgKzc5OCwyNSBAQCB2
b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShQYWludGluZ0NvbnRleHQmIHBh
aW50aW5nQ29udGV4dCwgY29uc3QgRgogICAgICAgICBWZWN0b3I8RmxvYXRQb2ludD4gcXVhZDsK
ICAgICAgICAgcXVhZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOwogICAgICAgICBzd2l0Y2gg
KHNpZGUpIHsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgICAgIGNhc2UgUEFMOjpC
b3hTaWRlOjpUb3A6CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3Rk
OjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkxIH0pOwogICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDEs
IDApLCB5MiB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6
Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwg
MCksIHkxIH0pOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6Qm90
dG9tOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDEs
IDApLCB5MSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6
Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwg
MCksIHkyIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6
bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApLCB5MSB9KTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpMZWZ0OgogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6
Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwg
MCkgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6
bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwogICAgICAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAw
KSB9KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0Ogor
ICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6UmlnaHQ6CiAgICAgICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZCh7IHgxLCB5MSArIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDEsIDAp
IH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTIgLSBzdGQ6Om1h
eDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDIsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkg
fSk7CkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJv
eFNpZGUoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEYKICAgICB9CiB9
CiAKLXZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRPbmVCb3JkZXJTaWRlKFBhaW50aW5nQ29udGV4
dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2lk
ZVJlY3QsIEJveFNpZGUgc2lkZSwgY29uc3QgUGF0aCogcGF0aCwgYm9vbCBhbnRpYWxpYXMsIGNv
bnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdAordm9pZCBCb3JkZXJQYWludGVyOjpwYWlu
dE9uZUJvcmRlclNpZGUoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5l
ckJvcmRlciwgY29uc3QgRmxvYXRSZWN0JiBzaWRlUmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIGNv
bnN0IFBhdGgqIHBhdGgsIGJvb2wgYW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xv
cikgY29uc3QKIHsKICAgICBhdXRvJiBlZGdlVG9SZW5kZXIgPSBtX2VkZ2VzLmF0KHNpZGUpOwog
ICAgIEFTU0VSVChlZGdlVG9SZW5kZXIud2lkdGhGb3JQYWludGluZygpKTsKQEAgLTg5Myw3ICs4
OTMsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50Qm9yZGVyU2lkZXMoUGFpbnRpbmdDb250
ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsbwogICAgIGlmIChyZW5kZXJSYWRpaSkKICAg
ICAgICAgcm91bmRlZFBhdGguYWRkUm91bmRlZFJlY3Qob3V0ZXJCb3JkZXIpOwogCi0gICAgYXV0
byBwYWludE9uZVNpZGUgPSBbJl0oQm94U2lkZSBzaWRlKSB7CisgICAgYXV0byBwYWludE9uZVNp
ZGUgPSBbJl0oUEFMOjpCb3hTaWRlIHNpZGUpIHsKICAgICAgICAgYXV0byYgZWRnZSA9IG1fZWRn
ZXMuYXQoc2lkZSk7CiAgICAgICAgIGlmICghZWRnZS5zaG91bGRSZW5kZXIoKSB8fCAhZWRnZVNl
dC5jb250YWlucyhlZGdlRmxhZ0ZvclNpZGUoc2lkZSkpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtOTAzLDIyICs5MDMsMjIgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVz
KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG8KICAgICAgICAgRmxv
YXRTaXplIHNlY29uZFJhZGl1czsKIAogICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICAgICAg
Y2FzZSBCb3hTaWRlOjpUb3A6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAg
ICAgICAgICBzaWRlUmVjdC5zZXRIZWlnaHQoZWRnZS53aWR0aEZvclBhaW50aW5nKCkgKyBpbm5l
ckJvcmRlckJsZWVkQWRqdXN0bWVudC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBmaXJzdFJhZGl1
cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpOwogICAgICAgICAgICAgc2Vjb25kUmFk
aXVzID0gaW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRl
OjpSaWdodDoKICAgICAgICAgICAgIHNpZGVSZWN0LnNoaWZ0WEVkZ2VUbyhzaWRlUmVjdC5tYXhY
KCkgLSBlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSAtIGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50
LndpZHRoKCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgp
LmJvdHRvbVJpZ2h0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBpbm5lckJvcmRlci5y
YWRpaSgpLnRvcFJpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hT
aWRlOjpCb3R0b206CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAg
ICAgICBzaWRlUmVjdC5zaGlmdFlFZGdlVG8oc2lkZVJlY3QubWF4WSgpIC0gZWRnZS53aWR0aEZv
clBhaW50aW5nKCkgLSBpbm5lckJvcmRlckJsZWVkQWRqdXN0bWVudC5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpOwog
ICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gaW5uZXJCb3JkZXIucmFkaWkoKS5ib3R0b21SaWdo
dCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAg
ICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6CiAgICAgICAgICAgICBzaWRlUmVjdC5zZXRX
aWR0aChlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSArIGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50
LndpZHRoKCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgp
LmJvdHRvbUxlZnQoKTsKICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJh
ZGlpKCkudG9wTGVmdCgpOwpAQCAtOTI5LDE3ICs5MjksMTcgQEAgdm9pZCBCb3JkZXJQYWludGVy
OjpwYWludEJvcmRlclNpZGVzKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25z
dCBGbG8KICAgICAgICAgcGFpbnRPbmVCb3JkZXJTaWRlKHBhaW50aW5nQ29udGV4dCwgb3V0ZXJC
b3JkZXIsIGlubmVyQm9yZGVyLCBzaWRlUmVjdCwgc2lkZSwgdXNlUGF0aCA/ICZyb3VuZGVkUGF0
aCA6IG51bGxwdHIsIGFudGlhbGlhcywgb3ZlcnJpZGVDb2xvcik7CiAgICAgfTsKIAotICAgIHBh
aW50T25lU2lkZShCb3hTaWRlOjpUb3ApOwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpCb3R0
b20pOwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpMZWZ0KTsKLSAgICBwYWludE9uZVNpZGUo
Qm94U2lkZTo6UmlnaHQpOworICAgIHBhaW50T25lU2lkZShQQUw6OkJveFNpZGU6OlRvcCk7Cisg
ICAgcGFpbnRPbmVTaWRlKFBBTDo6Qm94U2lkZTo6Qm90dG9tKTsKKyAgICBwYWludE9uZVNpZGUo
UEFMOjpCb3hTaWRlOjpMZWZ0KTsKKyAgICBwYWludE9uZVNpZGUoUEFMOjpCb3hTaWRlOjpSaWdo
dCk7CiB9CiAKIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVz
KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIEZsb2F0
U2l6ZSBpbm5lckJvcmRlckJsZWVkQWRqdXN0bWVudCwgQm94U2lkZVNldCBlZGdlc1RvRHJhdywg
Ym9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAgICAgLy8gd2lsbEJlT3ZlcmRyYXduIGFzc3VtZXMg
dGhhdCB3ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuCi0gICAgLy8g
VGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBCb3hTaWRlIGVudW0gb3JkZXIuCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OmFycmF5PEJveFNpZGUsIDQ+IHBhaW50T3JkZXJTaWRlcyA9IHsgQm94U2lk
ZTo6VG9wLCBCb3hTaWRlOjpCb3R0b20sIEJveFNpZGU6OkxlZnQsIEJveFNpZGU6OlJpZ2h0IH07
CisgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBQQUw6OkJveFNpZGUgZW51bSBvcmRlci4K
KyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8UEFMOjpCb3hTaWRlLCA0PiBwYWludE9y
ZGVyU2lkZXMgPSB7IFBBTDo6Qm94U2lkZTo6VG9wLCBQQUw6OkJveFNpZGU6OkJvdHRvbSwgUEFM
OjpCb3hTaWRlOjpMZWZ0LCBQQUw6OkJveFNpZGU6OlJpZ2h0IH07CiAKICAgICB3aGlsZSAoZWRn
ZXNUb0RyYXcpIHsKICAgICAgICAgLy8gRmluZCB1bmRyYXduIGVkZ2VzIHNoYXJpbmcgYSBjb2xv
ci4KQEAgLTEwMDAsMTAgKzEwMDAsMTAgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRl
cnMoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQpIGNvbnN0CiAgICAgYm9vbCBoYXZl
QWxsRG91YmxlRWRnZXMgPSB0cnVlOwogICAgIGludCBudW1FZGdlc1Zpc2libGUgPSA0OwogICAg
IGJvb2wgYWxsRWRnZXNTaGFyZUNvbG9yID0gdHJ1ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEJveFNp
ZGU+IGZpcnN0VmlzaWJsZVNpZGU7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkJveFNpZGU+IGZp
cnN0VmlzaWJsZVNpZGU7CiAgICAgQm94U2lkZVNldCBlZGdlc1RvRHJhdzsKIAotICAgIGZvciAo
YXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6IFBBTDo6YWxs
Qm94U2lkZXMpIHsKICAgICAgICAgYXV0byYgY3VyckVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOwog
CiAgICAgICAgIGlmIChjdXJyRWRnZS5zaG91bGRSZW5kZXIoKSkKQEAgLTEwNTMsMjQgKzEwNTMs
MjQgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlcnMoUGFpbnRpbmdDb250ZXh0JiBw
YWludGluZ0NvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgYXV0byBpbm5lclRoaXJkUmVj
dCA9IG1fYm9yZGVyUmVjdC5yZWN0KCk7CiAgICAgICAgICAgICAgICAgYXV0byBvdXRlclRoaXJk
UmVjdCA9IG1fYm9yZGVyUmVjdC5yZWN0KCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8g
c2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNpZGUgOiBQ
QUw6OmFsbEJveFNpZGVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSBtX2Vk
Z2VzLmF0KHNpZGUpOwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBvdXRlcldpZHRoID0gZWRn
ZS5vdXRlcldpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGlubmVyV2lkdGggPSBl
ZGdlLmlubmVyV2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJU
aGlyZFJlY3Quc2hpZnRZRWRnZVRvKGlubmVyVGhpcmRSZWN0LnkoKSArIGlubmVyV2lkdGgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJUaGlyZFJlY3Quc2hpZnRZRWRnZVRvKG91dGVy
VGhpcmRSZWN0LnkoKSArIG91dGVyV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyVGhpcmRSZWN0LnNldFdpZHRoKGlubmVyVGhpcmRSZWN0LndpZHRoKCkgLSBpbm5l
cldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNldFdpZHRo
KG91dGVyVGhpcmRSZWN0LndpZHRoKCkgLSBvdXRlcldpZHRoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0LnNldEhlaWdodChpbm5lclRoaXJkUmVjdC5o
ZWlnaHQoKSAtIGlubmVyV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJUaGly
ZFJlY3Quc2V0SGVpZ2h0KG91dGVyVGhpcmRSZWN0LmhlaWdodCgpIC0gb3V0ZXJXaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBC
b3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVm
dDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0LnNoaWZ0WEVkZ2VUbyhp
bm5lclRoaXJkUmVjdC54KCkgKyBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG91dGVyVGhpcmRSZWN0LnNoaWZ0WEVkZ2VUbyhvdXRlclRoaXJkUmVjdC54KCkgKyBvdXRlcldp
ZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEwOCwyMSArMTEwOCwy
MSBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50Qm9yZGVycyhQYWludGluZ0NvbnRleHQmIHBh
aW50aW5nQ29udGV4dCkgY29uc3QKICAgICAgICAgaWYgKGhhdmVBbGxTb2xpZEVkZ2VzICYmIG51
bUVkZ2VzVmlzaWJsZSAhPSA0ICYmICFtX2JvcmRlclJlY3QuaXNSb3VuZGVkKCkgJiYgaGF2ZUFs
cGhhQ29sb3IpIHsKICAgICAgICAgICAgIFBhdGggcGF0aDsKIAotICAgICAgICAgICAgYXV0byBj
YWxjdWxhdGVTaWRlUmVjdCA9IFsmXShjb25zdCBCb3JkZXJFZGdlJiBlZGdlLCBCb3hTaWRlIHNp
ZGUpIHsKKyAgICAgICAgICAgIGF1dG8gY2FsY3VsYXRlU2lkZVJlY3QgPSBbJl0oY29uc3QgQm9y
ZGVyRWRnZSYgZWRnZSwgUEFMOjpCb3hTaWRlIHNpZGUpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHNpZGVSZWN0ID0gbV9ib3JkZXJSZWN0LnJlY3QoKTsKICAgICAgICAgICAgICAgICBhdXRvIHdp
ZHRoID0gZWRnZS53aWR0aEZvclBhaW50aW5nKCk7CiAKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHNpZGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICAgICAgICAg
ICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgICAgICAgICBzaWRlUmVj
dC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgIGNhc2UgUEFMOjpC
b3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgICAgICAgICAgc2lkZVJlY3Quc2hpZnRYRWRnZVRv
KHNpZGVSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgICAgICAgICAgY2Fz
ZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgICAgICAgICAgc2lkZVJlY3Quc2hp
ZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAg
ICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAgICAgICAgICAgICBzaWRlUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTExMzAsNyArMTEzMCw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRC
b3JkZXJzKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KSBjb25zdAogICAgICAgICAg
ICAgICAgIHJldHVybiBzaWRlUmVjdDsKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGZv
ciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBzaWRl
IDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSBtX2Vk
Z2VzLmF0KHNpZGUpOwogICAgICAgICAgICAgICAgIGlmIChlZGdlLnNob3VsZFJlbmRlcigpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gc2lkZVJlY3QgPSBjYWxjdWxhdGVTaWRlUmVjdChl
ZGdlLCBzaWRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURv
Y3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50
UGFyc2VyLmNwcAppbmRleCA3YjJiNDUwMzFjYjUwNTNjYjY0NTZkOGVjNjRkOGJjYzdlMDY0ZTY1
Li5jMDBiMmMzNTViYjQ4N2I1ZTczNzZiN2UxZDJhYzJlNjMzZTNlODNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0yNyw4ICsy
Nyw4IEBACiAjaW5jbHVkZSAiRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIgogCiAjaW5jbHVk
ZSAiRG9jdW1lbnRXcml0ZXIuaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvU2VnbWVudGVk
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggYWM0ZDg2MTA0NWZjMjk1MmI2OTE5ODdkYTdjZWNlZjgxNzMwNDc2OS4uYTQ5N2UwODk0
NTRhOTU3NTA4MDFlOWQ2YTlkMzM3MzAxMTUyMTVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC0yMTgsNyArMjE4LDYgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpblBvbGljeS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5
LmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JRdWVy
eS5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJDbGllbnREYXRhLmgiCiAjaW5jbHVkZSAiU2Vy
dmljZVdvcmtlckNvbnRhaW5lci5oIgpAQCAtMjcxLDYgKzI3MCw3IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU2NyaXB0Q2FsbFN0YWNrLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Vk0uaD4KICNpbmNsdWRlIDxjdGltZT4KKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KQEAgLTE3MjIsNyArMTcyMiw3
IEBAIHN0YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplZFRpdGxlKERvY3VtZW50JiBkb2N1bWVudCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKICAgICByZXR1cm4gYnVpbGRlciA9PSB0aXRsZSA/IHRpdGxl
IDogYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIERvY3VtZW50Ojp1cGRhdGVUaXRsZShj
b25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKK3ZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVRp
dGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiB7CiAgICAgaWYgKG1f
cmF3VGl0bGUgPT0gdGl0bGUpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NTMsNyArMTc1Myw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVRpdGxlRnJvbVRpdGxlRWxlbWVudCgpCiAgICAgICAgIHVw
ZGF0ZVRpdGxlKGRvd25jYXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkudGV4
dFdpdGhEaXJlY3Rpb24oKSk7CiAgICAgZWxzZSBpZiAoaXM8U1ZHVGl0bGVFbGVtZW50PigqbV90
aXRsZUVsZW1lbnQpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoZSBTVkcgdGl0bGUgZWxl
bWVudCBoYXZlIGEgdGV4dCBkaXJlY3Rpb24/Ci0gICAgICAgIHVwZGF0ZVRpdGxlKHsgZG93bmNh
c3Q8U1ZHVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnRleHRDb250ZW50KCksIFRleHRE
aXJlY3Rpb246OkxUUiB9KTsKKyAgICAgICAgdXBkYXRlVGl0bGUoeyBkb3duY2FzdDxTVkdUaXRs
ZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkudGV4dENvbnRlbnQoKSwgUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgfSk7CiAgICAgfQogfQogCkBAIC0zMzA4LDcgKzMzMDgsNyBAQCB2b2lkIERvY3Vt
ZW50OjplbnF1ZXVlUGFpbnRUaW1pbmdFbnRyeUlmTmVlZGVkKCkKICAgICBtX2RpZEVucXVldWVG
aXJzdENvbnRlbnRmdWxQYWludCA9IHRydWU7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IERvY3Vt
ZW50Ojp3cml0ZShEb2N1bWVudCogZW50cnlEb2N1bWVudCwgU2VnbWVudGVkU3RyaW5nJiYgdGV4
dCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IERvY3VtZW50Ojp3cml0ZShEb2N1bWVudCogZW50cnlEb2N1
bWVudCwgUEFMOjpTZWdtZW50ZWRTdHJpbmcmJiB0ZXh0KQogewogICAgIGlmIChtX2FjdGl2ZVBh
cnNlcldhc0Fib3J0ZWQpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0zMzQxLDcgKzMzNDEsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6d3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9jdW1l
bnQsIFZlY3RvcjxTdHJpbmc+JiYgc3RyaQogICAgIGlmICghaXNIVE1MRG9jdW1lbnQoKSB8fCBt
X3Rocm93T25EeW5hbWljTWFya3VwSW5zZXJ0aW9uQ291bnQpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgU2VnbWVudGVkU3RyaW5nIHRleHQ7
CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgdGV4dDsKICAgICBmb3IgKGF1dG8mIHN0cmluZyA6
IHN0cmluZ3MpCiAgICAgICAgIHRleHQuYXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7CiAKQEAgLTMz
NTMsNyArMzM1Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERvY3VtZW50Ojp3cml0ZWxuKERvY3Vt
ZW50KiBlbnRyeURvY3VtZW50LCBWZWN0b3I8U3RyaW5nPiYmIHN0CiAgICAgaWYgKCFpc0hUTUxE
b2N1bWVudCgpIHx8IG1fdGhyb3dPbkR5bmFtaWNNYXJrdXBJbnNlcnRpb25Db3VudCkKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBTZWdtZW50
ZWRTdHJpbmcgdGV4dDsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyB0ZXh0OwogICAgIGZvciAo
YXV0byYgc3RyaW5nIDogc3RyaW5ncykKICAgICAgICAgdGV4dC5hcHBlbmQoV1RGTW92ZShzdHJp
bmcpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwMjY3Y2M2MzgwMjZkM2Q2NDljOGY0Y2Rl
NzRjMDU4MjZjMDYyMmIyLi4yZThhNjcyNmJiNzM0YjVlZmE5OTJmMTU4OTEzYjFjNTM4N2MwM2M5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNDksMTMgKzQ5LDEzIEBACiAjaW5jbHVkZSAiUmVn
aXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU3RyaW5nV2l0aERpcmVjdGlvbi5oIgog
I2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
ICJUcmVlU2NvcGUuaCIKICNpbmNsdWRlICJVc2VyQWN0aW9uRWxlbWVudFNldC5oIgogI2luY2x1
ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiVmlzaWJpbGl0eVN0YXRlLmgiCisj
aW5jbHVkZSA8cGFsL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3Vu
dGVkU2V0Lmg+CkBAIC04Niw2ICs4Niw3IEBAIGNsYXNzIFRleHRTdHJlYW07CiB9CiAKIG5hbWVz
cGFjZSBQQUwgeworY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xhc3MgU2Vzc2lvbklEOwogfQog
CkBAIC0yMDgsNyArMjA5LDYgQEAgY2xhc3MgU2NyaXB0UnVubmVyOwogY2xhc3MgU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyOwogY2xhc3MgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBTZWdtZW50ZWRTdHJpbmc7CiBjbGFzcyBTZWxlY3Rv
clF1ZXJ5OwogY2xhc3MgU2VsZWN0b3JRdWVyeUNhY2hlOwogY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwpAQCAtNjkxLDcgKzY5MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2FuY2VsUGFy
c2luZygpOwogCi0gICAgRXhjZXB0aW9uT3I8dm9pZD4gd3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9j
dW1lbnQsIFNlZ21lbnRlZFN0cmluZyYmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiB3cml0ZShE
b2N1bWVudCogZW50cnlEb2N1bWVudCwgUEFMOjpTZWdtZW50ZWRTdHJpbmcmJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gd3JpdGUoRG9jdW1lbnQqIGVudHJ5RG9jdW1l
bnQsIFZlY3RvcjxTdHJpbmc+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHdyaXRlbG4oRG9jdW1lbnQqIGVudHJ5RG9jdW1lbnQsIFZlY3RvcjxTdHJpbmc+JiYpOwog
CkBAIC05NTksNyArOTU5LDcgQEAgcHVibGljOgogICAgIC8vIFVzZWQgYnkgRE9NIGJpbmRpbmdz
OyBubyBkaXJlY3Rpb24ga25vd24uCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGl0bGUuc3RyaW5nOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaXRs
ZShjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZVdp
dGhEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgY29uc3QgUEFMOjpT
dHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZVdpdGhEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X3RpdGxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9tU3RyaW5nJiBkaXIoKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpcihjb25zdCBBdG9tU3RyaW5nJik7
CkBAIC0xNzE4LDcgKzE3MTgsNyBAQCBwcml2YXRlOgogICAgIFNlY29uZHMgZG9tVGltZXJBbGln
bm1lbnRJbnRlcnZhbChib29sIGhhc1JlYWNoZWRNYXhOZXN0aW5nTGV2ZWwpIGNvbnN0IGZpbmFs
OwogCiAgICAgdm9pZCB1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKLSAgICB2b2lkIHVw
ZGF0ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKKyAgICB2b2lkIHVwZGF0ZVRp
dGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlQmFz
ZVVSTCgpOwogCiAgICAgV2Vha1B0cjxIVE1MTWV0YUVsZW1lbnQ+IGRldGVybWluZUFjdGl2ZVRo
ZW1lQ29sb3JNZXRhRWxlbWVudCgpOwpAQCAtMTg1NCw4ICsxODU0LDggQEAgcHJpdmF0ZToKICAg
ICBDb2xvciBtX2FjdGl2ZUxpbmtDb2xvcjsKICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Vmlz
aXRlZExpbmtTdGF0ZT4gbV92aXNpdGVkTGlua1N0YXRlOwogCi0gICAgU3RyaW5nV2l0aERpcmVj
dGlvbiBtX3RpdGxlOwotICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gbV9yYXdUaXRsZTsKKyAgICBQ
QUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gbV90aXRsZTsKKyAgICBQQUw6OlN0cmluZ1dpdGhEaXJl
Y3Rpb24gbV9yYXdUaXRsZTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1lbnQ7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVhPYmplY3RDYWNoZT4gbV9heE9iamVjdENhY2hlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAppbmRleCAyMmI0NTYzYTczYzVlOWQ5Nzc2MmNkZDE5
N2ZmNDk2NDYxN2M1MTM1Li40Mjk1YmJkMzUxZjdkZjI2NDQxMWRmMzQ1OTgxMDEzNmNjYjY5OWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaApAQCAtMjgsMTAgKzI4LDEzIEBACiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCitu
YW1lc3BhY2UgUEFMIHsKK2NsYXNzIFNlZ21lbnRlZFN0cmluZzsKK30KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBEb2N1bWVudFdyaXRlcjsKLWNsYXNzIFNlZ21lbnRlZFN0cmluZzsK
IGNsYXNzIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjsKIAogY2xhc3MgRG9jdW1lbnRQYXJzZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFBhcnNlcj4gewpAQCAtNDQsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0luc2VydGlvblBvaW50KCkgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgLy8gaW5zZXJ0IGlzIHVzZWQgYnkgZG9jdW1lbnQud3JpdGUuCi0gICAgdmly
dHVhbCB2b2lkIGluc2VydChTZWdtZW50ZWRTdHJpbmcmJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnQoUEFMOjpTZWdtZW50ZWRTdHJpbmcmJikgPSAwOwogCiAgICAgLy8gYXBwZW5kQnl0
ZXMgYW5kIGZsdXNoIGFyZSB1c2VkIGJ5IERvY3VtZW50V3JpdGVyICh0aGUgbG9hZGVyKS4KICAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kQnl0ZXMoRG9jdW1lbnRXcml0ZXImLCBjb25zdCB1aW50OF90
KiBieXRlcywgc2l6ZV90IGxlbmd0aCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDlj
MDMxOGU1MzgxNGI3MTAyZDk3ZjA0OTA1YzczZTRlZjY4OGI2YjYuLmE3Y2Y5MzQ5OTk2M2M3NDg4
ZGMwZWFlYjI4OGIzMjE5M2MyMDhhNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTg4MSwx
NyArODgxLDE3IEBAIHZvaWQgRWxlbWVudDo6c2V0QmVpbmdEcmFnZ2VkKGJvb2wgZmxhZykKICAg
ICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEJlaW5nRHJhZ2dlZCgqdGhpcywg
ZmxhZyk7CiB9CiAKLWlubGluZSBTY3JvbGxBbGlnbm1lbnQgdG9TY3JvbGxBbGlnbm1lbnRGb3JJ
bmxpbmVEaXJlY3Rpb24oc3RkOjpvcHRpb25hbDxTY3JvbGxMb2dpY2FsUG9zaXRpb24+IHBvc2l0
aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgYm9vbCBpc0xUUikKK2lubGluZSBTY3JvbGxB
bGlnbm1lbnQgdG9TY3JvbGxBbGlnbm1lbnRGb3JJbmxpbmVEaXJlY3Rpb24oc3RkOjpvcHRpb25h
bDxTY3JvbGxMb2dpY2FsUG9zaXRpb24+IHBvc2l0aW9uLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlLCBib29sIGlzTFRSKQogewogICAgIHN3aXRjaCAocG9zaXRpb24udmFsdWVfb3IoU2Ny
b2xsTG9naWNhbFBvc2l0aW9uOjpOZWFyZXN0KSkgewogICAgIGNhc2UgU2Nyb2xsTG9naWNhbFBv
c2l0aW9uOjpTdGFydDogewogICAgICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgICAg
IGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgotICAgICAgICBjYXNlIFdyaXRpbmdNb2Rl
OjpCb3R0b21Ub1RvcDogeworICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOgorICAgICAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiB7CiAgICAg
ICAgICAgICByZXR1cm4gaXNMVFIgPyBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduTGVmdEFsd2F5cyA6
IFNjcm9sbEFsaWdubWVudDo6YWxpZ25SaWdodEFsd2F5czsKICAgICAgICAgfQotICAgICAgICBj
YXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6
UmlnaHRUb0xlZnQ6IHsKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdo
dDoKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDogewogICAgICAg
ICAgICAgcmV0dXJuIGlzTFRSID8gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFsd2F5cyA6IFNj
cm9sbEFsaWdubWVudDo6YWxpZ25Cb3R0b21BbHdheXM7CiAgICAgICAgIH0KICAgICAgICAgZGVm
YXVsdDoKQEAgLTkwMywxMiArOTAzLDEyIEBAIGlubGluZSBTY3JvbGxBbGlnbm1lbnQgdG9TY3Jv
bGxBbGlnbm1lbnRGb3JJbmxpbmVEaXJlY3Rpb24oc3RkOjpvcHRpb25hbDxTY3JvbGxMCiAgICAg
ICAgIHJldHVybiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzOwogICAgIGNhc2Ug
U2Nyb2xsTG9naWNhbFBvc2l0aW9uOjpFbmQ6IHsKICAgICAgICAgc3dpdGNoICh3cml0aW5nTW9k
ZSkgewotICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKLSAgICAgICAgY2Fz
ZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6IHsKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcDogewogICAgICAgICAgICAgcmV0dXJuIGlzTFRSID8gU2Nyb2xsQWxpZ25tZW50OjphbGln
blJpZ2h0QWx3YXlzIDogU2Nyb2xsQWxpZ25tZW50OjphbGlnbkxlZnRBbHdheXM7CiAgICAgICAg
IH0KLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2Ug
V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OiB7CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQ6IHsKICAgICAgICAgICAgIHJldHVybiBpc0xUUiA/IFNjcm9sbEFsaWdubWVudDo6YWxpZ25C
b3R0b21BbHdheXMgOiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzOwogICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC05MjQsMTggKzkyNCwxOCBAQCBpbmxpbmUgU2Nyb2xsQWxp
Z25tZW50IHRvU2Nyb2xsQWxpZ25tZW50Rm9ySW5saW5lRGlyZWN0aW9uKHN0ZDo6b3B0aW9uYWw8
U2Nyb2xsTAogICAgIH0KIH0KIAotaW5saW5lIFNjcm9sbEFsaWdubWVudCB0b1Njcm9sbEFsaWdu
bWVudEZvckJsb2NrRGlyZWN0aW9uKHN0ZDo6b3B0aW9uYWw8U2Nyb2xsTG9naWNhbFBvc2l0aW9u
PiBwb3NpdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitpbmxpbmUgU2Nyb2xsQWxpZ25t
ZW50IHRvU2Nyb2xsQWxpZ25tZW50Rm9yQmxvY2tEaXJlY3Rpb24oc3RkOjpvcHRpb25hbDxTY3Jv
bGxMb2dpY2FsUG9zaXRpb24+IHBvc2l0aW9uLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KQogewogICAgIHN3aXRjaCAocG9zaXRpb24udmFsdWVfb3IoU2Nyb2xsTG9naWNhbFBvc2l0aW9u
OjpTdGFydCkpIHsKICAgICBjYXNlIFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6U3RhcnQ6IHsKICAg
ICAgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpU
b3BUb0JvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToK
ICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzOwotICAg
ICAgICBjYXNlIFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICAgICAgY2FzZSBQQUw6Oldy
aXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduQm90dG9tQWx3YXlzOwotICAgICAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodDoKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKICAgICAg
ICAgICAgIHJldHVybiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduTGVmdEFsd2F5czsKLSAgICAgICAg
Y2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5n
TW9kZTo6UmlnaHRUb0xlZnQ6CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblJpZ2h0QWx3YXlzOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC05NDYsMTMgKzk0NiwxMyBAQCBpbmxpbmUgU2Nyb2xsQWxpZ25tZW50
IHRvU2Nyb2xsQWxpZ25tZW50Rm9yQmxvY2tEaXJlY3Rpb24oc3RkOjpvcHRpb25hbDxTY3JvbGxM
bwogICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5czsKICAg
ICBjYXNlIFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6RW5kOiB7CiAgICAgICAgIHN3aXRjaCAod3Jp
dGluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAg
ICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAgICAgICByZXR1
cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkJvdHRvbUFsd2F5czsKLSAgICAgICAgY2FzZSBXcml0
aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90
dG9tVG9Ub3A6CiAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvcEFs
d2F5czsKLSAgICAgICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIGNh
c2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CiAgICAgICAgICAgICByZXR1cm4gU2Ny
b2xsQWxpZ25tZW50OjphbGlnblJpZ2h0QWx3YXlzOwotICAgICAgICBjYXNlIFdyaXRpbmdNb2Rl
OjpSaWdodFRvTGVmdDoKKyAgICAgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVm
dDoKICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduTGVmdEFsd2F5czsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggOWE1MTJlZmU3YzljMDFlZjgyMDEyY2I0M2Y5YjYxMTU1
ODk2N2EyYS4uOTZhZDZjMjljOTA0YjUwNzU5Njg2NjI5MDVjYzUxZWQ4OWMzMWIxNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBzdGF0aWMgUG9zaXRpb24g
dXBzdHJlYW1JZ25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKFBvc2l0aW9uIHBvc2l0aW9uKQogICAg
IHJldHVybiBwb3NpdGlvbjsKIH0KIAotSW5saW5lUnVuQW5kT2Zmc2V0IFBvc2l0aW9uOjppbmxp
bmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURp
cmVjdGlvbikgY29uc3QKK0lubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5k
T2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVj
dGlvbikgY29uc3QKIHsKICAgICBhdXRvIGNhcmV0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCkBAIC0xMzc3LDEzICsxMzc3LDEzIEBA
IElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5
IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgcmV0dXJuIHsgcnVuLCBjYXJldE9mZnNldCB9
OwogfQogCi1UZXh0RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uKCkgY29uc3QK
K1BBTDo6VGV4dERpcmVjdGlvbiBQb3NpdGlvbjo6cHJpbWFyeURpcmVjdGlvbigpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2FuY2hvck5vZGUgfHwgIW1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBibG9ja0Zsb3cgPSBsaW5lYWdlT2ZUeXBl
PFJlbmRlckJsb2NrRmxvdz4oKm1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkuZmlyc3QoKSkKICAg
ICAgICAgcmV0dXJuIGJsb2NrRmxvdy0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICByZXR1cm4g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsK
IH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKaW5kZXgg
OWM5OTRjMDk3OGM2YTQ4N2Q3ZTIyYmEwYmQ2ZTBhNDg4YzU0YmMxZS4uZGRjYmM3MTNlMWM2MDhh
MmU3MDhjNTVjNDEyNjBjNzg2MTc1MDE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAgLTE3MSw5
ICsxNzEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGluZVJ1
bkFuZE9mZnNldChBZmZpbml0eSkgY29uc3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGlu
ZVJ1bkFuZE9mZnNldChBZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBj
b25zdDsKKyAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5
LCBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3Q7CiAKLSAgICBUZXh0
RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKKyAgICBQQUw6OlRleHREaXJlY3Rp
b24gcHJpbWFyeURpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVy
IG9mIHBvc2l0aW9ucyB0aGF0IGV4aXN0IGJldHdlZW4gdHdvIHBvc2l0aW9ucy4KICAgICBzdGF0
aWMgdW5zaWduZWQgcG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoY29uc3QgUG9zaXRpb24m
LCBjb25zdCBQb3NpdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhd0Rh
dGFEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhd0RhdGFEb2N1bWVudFBh
cnNlci5oCmluZGV4IGRlMzg5OTIxYWM2ZGMwZTAwY2U0Njk5YjQ3NjhiYmE4Y2VhZDdiZDkuLjUw
YTcwZTg0Nzc5MmQwODU5ODIwZThjMGY3N2QxOTY0N2IzODYwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYXdEYXRhRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmF3RGF0YURvY3VtZW50UGFyc2VyLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgYXBwZW5kQnl0ZXMod3JpdGVyLCBudWxscHRyLCAwKTsKICAgICB9CiAKLSAgICB2
b2lkIGluc2VydChTZWdtZW50ZWRTdHJpbmcmJikgb3ZlcnJpZGUKKyAgICB2b2lkIGluc2VydChQ
QUw6OlNlZ21lbnRlZFN0cmluZyYmKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgLy8gPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTM5Nz46IEpTIGNvZGUgY2FuIGFs
d2F5cyBjYWxsIGRvY3VtZW50LndyaXRlLCB3ZSBuZWVkIHRvIGhhbmRsZSBpdC4KICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA0NjI4ZTFmYmU5Yzg5Nzc2M2NkYmQy
ZTQ1OGYxMzgxZGIzODUyODU0Li5kNjFmZmQ1OWYzZGY5YmRmNGJkNjYzYTllOGM1YjA0MTZjODZl
OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0
T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAgICAg
ICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5n
ZSgpOwotICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNr
aW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFu
ZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlLCBzdGQ6Om51bGxvcHQp
OworICAgICAgICBtX2RvY3VtZW50LmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoeyBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNob3dD
b3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UsIGFkamFjZW50V29yZFJhbmdlLCBz
dGQ6Om51bGxvcHQpOwogICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2
ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CkBAIC01MDMsMTEgKzUwMywxMSBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9j
b3JyZWN0aW9uQQogICAgIGFkZE1hcmtlcigqcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0
RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKIH0KIAotYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRD
aGVja2luZ1Jlc3VsdCYgcmVzdWx0LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQorYm9vbCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0
KGNvbnN0IFBBTDo6VGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQp
CiB7CiAgICAgYXV0byYgbWFya2VycyA9IG1fZG9jdW1lbnQubWFya2VycygpOwogICAgIGlmICht
YXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKLSAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5
cGU6OkNvcnJlY3Rpb24pCisgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBQQUw6OlRleHRDaGVj
a2luZ1R5cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNw
b25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9C
ZVJlcGxhY2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtNjE1LDcgKzYxNSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByCiAgICAgYXV0
byB1cGRhdGVkUGFyYWdyYXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtYWtlQm91bmRhcnlQ
b2ludChtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlm
ICghdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1
cm47Ci0gICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsg
dXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24sICp1cGRhdGVkUGFyYWdy
YXBoRW5kQ29udGFpbmluZ0NvcnJlY3Rpb24gfSwgQ2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9m
ZnNldEluUGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOworICAgIGF1dG8gcmVwbGFj
ZW1lbnRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IHVwZGF0ZWRQYXJhZ3JhcGhTdGFy
dENvbnRhaW5pbmdDb3JyZWN0aW9uLCAqdXBkYXRlZFBhcmFncmFwaEVuZENvbnRhaW5pbmdDb3Jy
ZWN0aW9uIH0sIFBBTDo6Q2hhcmFjdGVyUmFuZ2UoY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBo
LCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSkpOwogCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxh
Y2VtZW50IHN1Y2NlZWRlZC4KICAgICBpZiAocGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UpICE9
IGFsdGVybmF0aXZlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaAppbmRleCA3NWFkNzkwOWMwMDZhMWQ0MzIxMGViZTA3NTA0OTc1ZTMx
N2FiMTVkLi5jOWQxYzA3ZWYzMTUwY2YzZDU3ODg2MzRkM2RkYjI0MTdkMDE4NjkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApA
QCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogCituYW1lc3BhY2UgUEFMIHsKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7
Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7
CkBAIC00NSw3ICs0OSw2IEBAIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIHN0cnVjdCBEaWN0
YXRpb25BbHRlcm5hdGl2ZTsKIHN0cnVjdCBTaW1wbGVSYW5nZTsKLXN0cnVjdCBUZXh0Q2hlY2tp
bmdSZXN1bHQ7CiAKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAvLyBUaGVzZSBiYWNr
c2xhc2hlcyBhcmUgZm9yIG1ha2luZyBzdHlsZSBjaGVja2VyIGhhcHB5LgpAQCAtOTQsNyArOTcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQ29ycmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYg
cmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykgVU5MRVNTX0VOQUJM
RUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0
cmluZyk7IH0pCiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgdGhlIHJl
cGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBvdXQuCi0gICAgYm9vbCBwcm9jZXNzTWFy
a2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYs
IGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiBzdHJp
bmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9CZVJl
cGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVybiB0cnVlOyB9
KTsKKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29u
c3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0Jl
UmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdU
b0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7CiAgICAgdm9pZCBkZWxldGVkQXV0b2NvcnJl
Y3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0
cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob3JpZ2luYWxTdHJpbmcpOyB9KQog
CiAgICAgYm9vbCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9y
PERpY3RhdGlvbkFsdGVybmF0aXZlPiYsIEV2ZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NoYXJhY3RlclJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0No
YXJhY3RlclJhbmdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNzQwNDQyY2Zj
ZjU3Y2QwZjViYTMyYWFiMGE2OWZkMjI3ODQxYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFyYWN0ZXJSYW5n
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENGKQotI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVT
RShGT1VOREFUSU9OKQotdHlwZWRlZiBzdHJ1Y3QgX05TUmFuZ2UgTlNSYW5nZTsKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDaGFyYWN0ZXJSYW5nZSB7Ci0gICAgdWlu
dDY0X3QgbG9jYXRpb24geyAwIH07Ci0gICAgdWludDY0X3QgbGVuZ3RoIHsgMCB9OwotCi0gICAg
Q2hhcmFjdGVyUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgY29uc3RleHByIENoYXJhY3RlclJhbmdl
KHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpOwotCi0jaWYgVVNFKENGKQotICAg
IGNvbnN0ZXhwciBDaGFyYWN0ZXJSYW5nZShDRlJhbmdlKTsKLSAgICBjb25zdGV4cHIgb3BlcmF0
b3IgQ0ZSYW5nZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBVU0UoRk9VTkRBVElPTikKLSAgICBj
b25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2UoTlNSYW5nZSk7Ci0gICAgY29uc3RleHByIG9wZXJhdG9y
IE5TUmFuZ2UoKSBjb25zdDsKLSNlbmRpZgotfTsKLQotY29uc3RleHByIENoYXJhY3RlclJhbmdl
OjpDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKQotICAg
IDogbG9jYXRpb24obG9jYXRpb24pCi0gICAgLCBsZW5ndGgobGVuZ3RoKQotewotfQotCi0jaWYg
VVNFKENGKQotCi1jb25zdGV4cHIgQ2hhcmFjdGVyUmFuZ2U6OkNoYXJhY3RlclJhbmdlKENGUmFu
Z2UgcmFuZ2UpCi0gICAgOiBDaGFyYWN0ZXJSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVu
Z3RoKQotewotICAgIEFTU0VSVChyYW5nZS5sb2NhdGlvbiAhPSBrQ0ZOb3RGb3VuZCk7Ci19Ci0K
LWNvbnN0ZXhwciBDaGFyYWN0ZXJSYW5nZTo6b3BlcmF0b3IgQ0ZSYW5nZSgpIGNvbnN0Ci17Ci0g
ICAgQ0ZJbmRleCBsb2NhdGlvbkNGID0gbG9jYXRpb247Ci0gICAgQ0ZJbmRleCBsZW5ndGhDRiA9
IGxlbmd0aDsKLSAgICByZXR1cm4geyBsb2NhdGlvbkNGLCBsZW5ndGhDRiB9OwotfQotCi0jZW5k
aWYKLQotI2lmIFVTRShGT1VOREFUSU9OKSAmJiBkZWZpbmVkKF9fT0JKQ19fKQotCi1jb25zdGV4
cHIgQ2hhcmFjdGVyUmFuZ2U6OkNoYXJhY3RlclJhbmdlKE5TUmFuZ2UgcmFuZ2UpCi0gICAgOiBD
aGFyYWN0ZXJSYW5nZSB7IHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGggfQotewotICAgIEFT
U0VSVChyYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKTsKLX0KLQotY29uc3RleHByIENoYXJh
Y3RlclJhbmdlOjpvcGVyYXRvciBOU1JhbmdlKCkgY29uc3QKLXsKLSAgICBOU1VJbnRlZ2VyIGxv
Y2F0aW9uTlMgPSBsb2NhdGlvbjsKLSAgICBOU1VJbnRlZ2VyIGxlbmd0aE5TID0gbGVuZ3RoOwot
ICAgIHJldHVybiB7IGxvY2F0aW9uTlMsIGxlbmd0aE5TIH07Ci19Ci0KLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rp
Y3RhdGlvbkFsdGVybmF0aXZlLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkFs
dGVybmF0aXZlLmgKaW5kZXggNjJjY2ExMmUwNWNjMmM1YjlmNGEzMmZiZmQzY2EwNGJiNzljMjU1
Zi4uZTRiNTRiMzAyMWY1ZWYyZDdiZDc1OWJhZWVhNWNkMTA5ZWZjZTlhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25BbHRlcm5hdGl2ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQWx0ZXJuYXRpdmUuaApAQCAtMjUsMTMgKzI1LDEz
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmFuZ2UuaCIKKyNpbmNs
dWRlIDxwYWwvdGV4dC9DaGFyYWN0ZXJSYW5nZS5oPgogI2luY2x1ZGUgIkRpY3RhdGlvbkNvbnRl
eHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRp
dmUgewotICAgIENoYXJhY3RlclJhbmdlIHJhbmdlOworICAgIFBBTDo6Q2hhcmFjdGVyUmFuZ2Ug
cmFuZ2U7CiAgICAgRGljdGF0aW9uQ29udGV4dCBjb250ZXh0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKaW5kZXggOTgwZGRlODUxZjEwNzIzZDc4ZjY2MTk4NDI3MzI0OGY3YTBm
YTVjNC4uNDA5OTNiMzY4YzM2ODQ4OGM3OTY0NDI1ZWUyM2Q0MmU2OWEwZDRiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0zMjUsMTQgKzMyNSwxNCBAQCBFbGVtZW50KiBlbmNs
b3NpbmdCbG9jayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkK
ICAgICByZXR1cm4gaXM8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgPyBkb3duY2FzdDxFbGVtZW50
PihlbmNsb3NpbmdOb2RlKSA6IG51bGxwdHI7CiB9CiAKLVRleHREaXJlY3Rpb24gZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24p
CiB7CiAgICAgYXV0byBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKSk7CiAgICAgaWYgKCFibG9jaykKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGF1dG8gcmVu
ZGVyZXIgPSBibG9jay0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFI7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCmluZGV4IDk2Y2VjOTdjZjdlM2IxNmNlMGYxYzA1YmU3
NGQ3MjA4Y2NjNGRhYjkuLmNhYzYxYjViNWM0NjRkYWQ5MDA2MmM4YzcwMGM1OGJiZjM0MzdlMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBpc0F0
VW5zcGxpdHRhYmxlRWxlbWVudChjb25zdCBQb3NpdGlvbiYpOwogdW5zaWduZWQgbnVtRW5jbG9z
aW5nTWFpbEJsb2NrcXVvdGVzKGNvbnN0IFBvc2l0aW9uJik7CiB2b2lkIHVwZGF0ZVBvc2l0aW9u
Rm9yTm9kZVJlbW92YWwoUG9zaXRpb24mLCBOb2RlJik7CiAKLVdFQkNPUkVfRVhQT1JUIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYpOworV0VC
Q09SRV9FWFBPUlQgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
Y29uc3QgUG9zaXRpb24mKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gVmlzaWJsZVBvc2l0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMTcyNGNmMGU1MGJhYTViOWIyNDEz
MDQ4MWVlNzI0Y2I3ODIwN2FhNC4uYTE3NThkN2Q4Mzk5ZTZkNDY5ZDg2ZWE3NDM3MWI3NGZmZjU1
MjU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzI4LDcgKzcyOCw3IEBAIHZv
aWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQm
IGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcmFuZ2VU
b0NoZWNrID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpub2RlVG9DaGVjayk7Ci0g
ICAgaWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZVRl
eHRDaGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZywgVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciB9KSwgVGV4dENoZWNraW5nUHJvY2Vzc0Jh
dGNoLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaywgcmFuZ2VUb0NoZWNrKSkKKyAgICBpZiAo
YXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlVGV4dENoZWNr
aW5nVHlwZU1hc2soKm5vZGVUb0NoZWNrLCB7IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcsIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciB9KSwgUEFMOjpUZXh0Q2hlY2tpbmdQ
cm9jZXNzQmF0Y2gsIHJhbmdlVG9DaGVjaywgcmFuZ2VUb0NoZWNrLCByYW5nZVRvQ2hlY2spKQog
ICAgICAgICBtX3NwZWxsQ2hlY2tlci0+cmVxdWVzdENoZWNraW5nRm9yKHJlcXVlc3QucmVsZWFz
ZU5vbk51bGwoKSk7CiB9CiAKQEAgLTE5MjksOSArMTkyOSw5IEBAIFdyaXRpbmdEaXJlY3Rpb24g
RWRpdG9yOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKICAg
ICB9CiAKICAgICBzd2l0Y2ggKHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpKSB7Ci0gICAg
Y2FzZSBUZXh0RGlyZWN0aW9uOjpMVFI6CisgICAgY2FzZSBQQUw6OlRleHREaXJlY3Rpb246OkxU
UjoKICAgICAgICAgcmV0dXJuIFdyaXRpbmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0OwotICAgIGNh
c2UgVGV4dERpcmVjdGlvbjo6UlRMOgorICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw6
CiAgICAgICAgIHJldHVybiBXcml0aW5nRGlyZWN0aW9uOjpSaWdodFRvTGVmdDsKICAgICB9CiAg
ICAgCkBAIC0yNDE4LDcgKzI0MTgsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiAgICAgcmV0dXJuIGd1
ZXNzZXM7CiB9CiAKLVRleHRDaGVja2luZ0d1ZXNzZXMgRWRpdG9yOjpndWVzc2VzRm9yTWlzc3Bl
bGxlZE9yVW5ncmFtbWF0aWNhbCgpCitQQUw6OlRleHRDaGVja2luZ0d1ZXNzZXMgRWRpdG9yOjpn
dWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCgpCiB7CiAgICAgaWYgKHVuaWZpZWRU
ZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdl
PiByYW5nZTsKQEAgLTI0ODgsOCArMjQ4OCw4IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsCiAg
ICAgVU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1lbnQpOwogICAgIE9wdGlvblNldDxUZXh0Q2hlY2tp
bmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zOwogICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpKQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZyk7Ci0gICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRh
aW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKKyAgICAgICAgdGV4dENoZWNraW5nT3B0
aW9ucy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7CisgICAgaWYgKCF0ZXh0
Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRP
ZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKQEAgLTI1MDMsMTAgKzI1
MDMsMTAgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHdvcmRTdGFydCwKICAgICBpZiAodW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCgpKSB7CiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBw
bHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAKLSAgICAgICAgT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnM7CisgICAgICAgIE9w
dGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnM7CiAKICAg
ICAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAg
ICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyk7Cisg
ICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nKTsKIAogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAgICAg
ICAgaWYgKGRvUmVwbGFjZW1lbnQKQEAgLTI1MTQsMTQgKzI1MTQsMTQgQEAgdm9pZCBFZGl0b3I6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHdvcmRTdGFydCwKICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25F
bmFibGVkKCkKICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkKCkKICAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVu
YWJsZWQoKQotICAgICAgICAgICAgICAgIHx8ICh0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5z
KFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQoKSkpKQotICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4
dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgIHx8ICh0ZXh0Q2hl
Y2tpbmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpICYm
IGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKSkpCisgICAgICAgICAgICB0
ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50
KTsKICNlbmRpZgotICAgICAgICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpICYmICF0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5z
KFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkKKyAgICAgICAgaWYgKCF0ZXh0Q2hlY2tp
bmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpICYmICF0
ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UmVwbGFj
ZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFRleHRD
aGVja2luZ1R5cGU6OkdyYW1tYXIpOworICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5h
ZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKIAogICAgICAgICBhdXRvIHNlbnRl
bmNlU3RhcnQgPSBzdGFydE9mU2VudGVuY2Uod29yZFN0YXJ0KTsKICAgICAgICAgYXV0byBzZW50
ZW5jZUVuZCA9IGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KTsKQEAgLTI2OTAsNyArMjY5MCw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24pCiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIGZhbHNl
KTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3Qg
c3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIGdyYW1tYXJSYW5nZSkKK3ZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKE9wdGlvblNldDxQQUw6OlRl
eHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiBzcGVsbGluZ1JhbmdlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGdyYW1tYXJSYW5nZSkKIHsKICAgICBpZiAocGxhdGZvcm1Ecml2ZW5UZXh0Q2hl
Y2tlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjcwMCw4ICsyNzAwLDggQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9u
U2V0PFRleHRDaGVja2luZ1R5cGUKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBh
dXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KICAgICBBU1NFUlQoIW1fYWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKLSAgICBib29sIHNob3Vs
ZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhUZXh0Q2hlY2tpbmdU
eXBlOjpHcmFtbWFyKTsKLSAgICBib29sIHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0
Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9u
UGFuZWwpOworICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25z
LmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CisgICAgYm9vbCBzaG91
bGRTaG93Q29ycmVjdGlvblBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6
OlRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOwogCiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzZWxlY3Rpb25zIGFscmVhZHkgZXhwYW5kZWQgdG8gd29y
ZCBib3VuZGFyaWVzLgogICAgIGlmICghY2xpZW50KCkgfHwgIXNwZWxsaW5nUmFuZ2UgfHwgKHNo
b3VsZE1hcmtHcmFtbWFyICYmICFncmFtbWFyUmFuZ2UpKQpAQCAtMjcyNyw3ICsyNzI3LDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0
aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICBhdXRvJiBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFn
cmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKTsKICAgICBhdXRvJiBjaGVja2luZ1JhbmdlID0g
YXN5bmNocm9ub3VzID8gcGFyYWdyYXBoUmFuZ2UgOiByYW5nZVRvQ2hlY2s7CiAgICAgYXV0byYg
dGV4dFJlcGxhY2VtZW50UmFuZ2UgPSBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlID8gKmF1dG9t
YXRpY1JlcGxhY2VtZW50UmFuZ2UgOiByYW5nZVRvQ2hlY2s7Ci0gICAgYXV0byByZXF1ZXN0ID0g
U3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2luZ1By
b2Nlc3NJbmNyZW1lbnRhbCwgY2hlY2tpbmdSYW5nZSwgdGV4dFJlcGxhY2VtZW50UmFuZ2UsIHBh
cmFncmFwaFJhbmdlKTsKKyAgICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3Jl
YXRlKHJlc29sdmVkT3B0aW9ucywgUEFMOjpUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWws
IGNoZWNraW5nUmFuZ2UsIHRleHRSZXBsYWNlbWVudFJhbmdlLCBwYXJhZ3JhcGhSYW5nZSk7CiAg
ICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MzYsMjQgKzI3MzYsMjQg
QEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
T3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgVmVjdG9yPFBBTDo6VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0
Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZWRPcHRpb25zLCByZXN1
bHRzLCBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBtYXJrQW5kUmVw
bGFjZUZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCksIHJlc3VsdHMpOwogfQogCi1zdGF0aWMg
Ym9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUoVGV4dENoZWNraW5nVHlwZSB0eXBl
KQorc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRUeXBlKFBBTDo6VGV4dENo
ZWNraW5nVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVGV4dENo
ZWNraW5nVHlwZTo6Tm9uZToKLSAgICBjYXNlIFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOgot
ICAgIGNhc2UgVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjoKKyAgICBjYXNlIFBBTDo6VGV4dENo
ZWNraW5nVHlwZTo6Tm9uZToKKyAgICBjYXNlIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmc6CisgICAgY2FzZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBjYXNlIFRleHRDaGVja2luZ1R5cGU6Okxpbms6Ci0gICAgY2FzZSBU
ZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZToKLSAgICBjYXNlIFRleHRDaGVja2luZ1R5cGU6OkRhc2g6
Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDoKLSAgICBjYXNlIFRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb246Ci0gICAgY2FzZSBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93
Q29ycmVjdGlvblBhbmVsOgorICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rOgor
ICAgIGNhc2UgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZToKKyAgICBjYXNlIFBBTDo6VGV4
dENoZWNraW5nVHlwZTo6RGFzaDoKKyAgICBjYXNlIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQ6CisgICAgY2FzZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb246Cisg
ICAgY2FzZSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWw6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3
NjUsNyArMjc2NSw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uCiAgICAgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCktPmFwcGx5
KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRD
aGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCwgY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCBD
aGFyYWN0ZXJSYW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKK3N0YXRpYyB2b2lkIGNvcnJlY3RT
cGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGgmIHBhcmFncmFwaCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCBQQUw6OkNoYXJhY3RlclJhbmdlIHJlc3VsdENoYXJh
Y3RlclJhbmdlKQogewogICAgIFJlZiBzY29wZU5vZGUgPSBkb3duY2FzdDxDb250YWluZXJOb2Rl
PihwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkp
OwogICAgIGF1dG8gcGFyYWdyYXBoQ2hhcmFjdGVyUmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShtYWtl
Qm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZU5vZGUpLCBwYXJhZ3JhcGgucGFy
YWdyYXBoUmFuZ2UoKSk7CkBAIC0yNzgxLDcgKzI3ODEsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0
U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5n
UGFyYQogICAgIHBhcmFncmFwaCA9IFRleHRDaGVja2luZ1BhcmFncmFwaChzcGVsbENoZWNraW5n
UmFuZ2UsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgbmV3UGFyYWdyYXBoUmFuZ2UpOwogfQogCi12b2lk
IEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBFZGl0
b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewogICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9kb2N1bWVudCk7CiAKQEAgLTI3ODksMTIg
KzI3ODksMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hl
Y2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICBUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGggcGFyYWdyYXBoKHJlcXVlc3QuY2hlY2tpbmdSYW5nZSgpLCByZXF1ZXN0LmF1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UoKSwgcmVxdWVzdC5wYXJhZ3JhcGhSYW5nZSgpKTsKIAogICAgIC8v
IEZJWE1FOiBNYXJrIHRoaXMgY29uc3Qgb25jZSBNU1ZDIGJ1ZyBpcyBmaXhlZDogPGh0dHBzOi8v
ZGV2ZWxvcGVyY29tbXVuaXR5LnZpc3VhbHN0dWRpby5jb20vY29udGVudC9wcm9ibGVtLzMxNjcx
My9tc3ZjLWNhbnQtY29tcGlsZS13ZWJraXRzLW9wdGlvbnNldGNvbnRhaW5zYW55Lmh0bWw+Lgot
ICAgIGJvb2wgc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50ID0gdGV4dENoZWNraW5nT3B0aW9ucy5j
b250YWluc0FueSh7IFRleHRDaGVja2luZ1R5cGU6OlF1b3RlLCBUZXh0Q2hlY2tpbmdUeXBlOjpE
YXNoLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCB9KTsKLSAgICBib29sIHNob3VsZE1h
cmtTcGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlw
ZTo6U3BlbGxpbmcpOwotICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdP
cHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwotICAgIGJvb2wgc2hv
dWxkTWFya0xpbmsgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5
cGU6OkxpbmspOwotICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVj
a2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5l
bCk7Ci0gICAgYm9vbCBzaG91bGRDaGVja0ZvckNvcnJlY3Rpb24gPSBzaG91bGRTaG93Q29ycmVj
dGlvblBhbmVsIHx8IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5nVHlw
ZTo6Q29ycmVjdGlvbik7CisgICAgYm9vbCBzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgPSB0ZXh0
Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zQW55KHsgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpRdW90
ZSwgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoLCBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlJl
cGxhY2VtZW50IH0pOworICAgIGJvb2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5n
T3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKKyAgICBi
b29sIHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6
OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOworICAgIGJvb2wgc2hvdWxkTWFya0xpbmsgPSB0
ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6TGluayk7
CisgICAgYm9vbCBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9u
cy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOwor
ICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JDb3JyZWN0aW9uID0gc2hvdWxkU2hvd0NvcnJlY3Rpb25Q
YW5lbCB8fCB0ZXh0Q2hlY2tpbmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlw
ZTo6Q29ycmVjdGlvbik7CiAjaWYgIVVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKICAgICBBU1NF
UlQoIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpOwogI2VuZGlmCkBAIC0yODIwLDcgKzI4MjAs
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgYXV0byBzcGVsbGluZ1JhbmdlRW5k
T2Zmc2V0ID0gcGFyYWdyYXBoLmNoZWNraW5nRW5kKCkgKyBvZmZzZXREdWVUb1JlcGxhY2VtZW50
OwotICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlIHJlc3VsdFR5cGUgPSByZXN1bHRzW2ldLnR5cGU7
CisgICAgICAgIFBBTDo6VGV4dENoZWNraW5nVHlwZSByZXN1bHRUeXBlID0gcmVzdWx0c1tpXS50
eXBlOwogICAgICAgICBhdXRvIHJlc3VsdExvY2F0aW9uID0gcmVzdWx0c1tpXS5yYW5nZS5sb2Nh
dGlvbiArIG9mZnNldER1ZVRvUmVwbGFjZW1lbnQ7CiAgICAgICAgIGF1dG8gcmVzdWx0TGVuZ3Ro
ID0gcmVzdWx0c1tpXS5yYW5nZS5sZW5ndGg7CiAgICAgICAgIGF1dG8gcmVzdWx0RW5kTG9jYXRp
b24gPSByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aDsKQEAgLTI4MzQsMTQgKzI4MzQsMTQg
QEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgLy8gMi4gUmVzdWx0IGZhbGxzIHdp
dGhpbiBzcGVsbGluZ1JhbmdlLgogICAgICAgICAvLyAzLiBUaGUgd29yZCBpbiBxdWVzdGlvbiBk
b2Vzbid0IGVuZCBhdCBhbiBhbWJpZ3VvdXMgYm91bmRhcnkuIEZvciBpbnN0YW5jZSwgd2Ugd291
bGQgbm90IG1hcmsKICAgICAgICAgLy8gICAgIndvdWxkbiciIGFzIG1pc3NwZWxsZWQgcmlnaHQg
YWZ0ZXIgYXBvc3Ryb3BoZSBpcyB0eXBlZC4KLSAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGlu
ZyAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCAmJiByZXN1bHRUeXBlID09IFRleHRDaGVj
a2luZ1R5cGU6OlNwZWxsaW5nCisgICAgICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcgJiYgIXNo
b3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0VHlwZSA9PSBQQUw6OlRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nCiAgICAgICAgICAgICAmJiByZXN1bHRMb2NhdGlvbiA+PSBwYXJhZ3Jh
cGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdEVuZExvY2F0aW9uIDw9IHNwZWxsaW5nUmFuZ2VF
bmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCk7CiAgICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5n
UmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UoeyByZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3Ro
IH0pOwogICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmlzU3Bl
bGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFuZ2UpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZE1hcmtHcmFtbWFyICYmIHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAm
JiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyh7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRM
ZW5ndGggfSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1
bHRUeXBlID09IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAmJiBwYXJhZ3JhcGguY2hl
Y2tpbmdSYW5nZUNvdmVycyh7IHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGggfSkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwKTsKICAgICAgICAgICAgIGZvciAoYXV0
byYgZGV0YWlsIDogcmVzdWx0c1tpXS5kZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGRldGFpbC5yYW5nZS5sZW5ndGggPiAwKTsKQEAgLTI4NTYsNyArMjg1Niw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCk7CiAK
ICAgICAgICAgICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIChyZXN1bHRFbmRM
b2NhdGlvbiA8IGF1dG9tYXRpY1JlcGxhY2VtZW50RW5kTG9jYXRpb24KLSAgICAgICAgICAgICAg
ICB8fCAocmVzdWx0VHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCAmJiByZXN1
bHRUeXBlICE9IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pKSkKKyAgICAgICAgICAgICAg
ICB8fCAocmVzdWx0VHlwZSAhPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50ICYm
IHJlc3VsdFR5cGUgIT0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIC8vIEFwcGx5IHJlcGxhY2VtZW50
IGlmOgpAQCAtMjg2Nyw3ICsyODY3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9y
KGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAg
ICAgICAgIGF1dG8gcmFuZ2VUb1JlcGxhY2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UoeyByZXN1bHRM
b2NhdGlvbiwgcmVzdWx0TGVuZ3RoIH0pOwogCiAgICAgICAgICAgICAvLyBBZGRpbmcgbGlua3Mg
c2hvdWxkIGJlIGRvbmUgb25seSBpbW1lZGlhdGVseSBhZnRlciB0aGV5IGFyZSB0eXBlZC4KLSAg
ICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGU6OkxpbmsgJiYgc2Vs
ZWN0aW9uT2Zmc2V0ICE9IHJlc3VsdEVuZExvY2F0aW9uICsgMSkKKyAgICAgICAgICAgIGlmIChy
ZXN1bHRUeXBlID09IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6TGluayAmJiBzZWxlY3Rpb25PZmZz
ZXQgIT0gcmVzdWx0RW5kTG9jYXRpb24gKyAxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICBpZiAoIShzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkQ2hl
Y2tGb3JDb3JyZWN0aW9uIHx8IHNob3VsZE1hcmtMaW5rKSB8fCAhZG9SZXBsYWNlbWVudCkKQEAg
LTI4OTQsNyArMjg5NCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihjb25zdCBT
cGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAocmVzdWx0
VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0
VHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmspIHsKICAgICAgICAgICAgICAgICBt
X2RvY3VtZW50LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25Ub1JlcGxhY2UpOwog
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwpAQCAtMjkxNyw3ICsyOTE3LDcg
QEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9j
YXRpb24gPCBzZWxlY3Rpb25PZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9m
ZnNldCArPSByZXBsYWNlbWVudC5sZW5ndGgoKSAtIHJlc3VsdExlbmd0aDsKIAotICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pIHsK
KyAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBQQUw6OlRleHRDaGVja2luZ1R5cGU6
OkNvcnJlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudFJhbmdl
ID0gcGFyYWdyYXBoLnN1YnJhbmdlKHsgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50Lmxlbmd0
aCgpIH0pOwogICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNj
ZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFJhbmdlKTsKIApAQCAtMjk1OCw3ICsy
OTU4LDcgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5y
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVy
dGVkLCByZXBsYWNlZFN0cmluZywgKnNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdy
YXBoIHBhcmFncmFwaCgqc2VsZWN0aW9uKTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQo
cmVwbGFjZWRTdHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywg
RWRpdEFjdGlvbjo6SW5zZXJ0KTsKLSAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5z
dWJyYW5nZShDaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNl
ZFN0cmluZy5sZW5ndGgoKSkpOworICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1
YnJhbmdlKFBBTDo6Q2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVw
bGFjZWRTdHJpbmcubGVuZ3RoKCkpKTsKICAgICBhZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKICAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UpOwogI2Vsc2UKQEAgLTI5Nzgs
OSArMjk3OCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgLy8gbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBpcyB0cmlnZ2Vy
ZWQgYnkgc2VsZWN0aW9uIGNoYW5nZSwgaW4gd2hpY2ggY2FzZSB3ZSBjaGVjayBzcGVsbGluZyBh
bmQgZ3JhbW1hciwgYnV0IGRvbid0IGF1dG9jb3JyZWN0IG1pc3NwZWxsaW5ncy4KLSAgICAgICAg
T3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IHRleHRDaGVja2luZ09wdGlvbnMgeyBUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZyB9OworICAgICAgICBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tp
bmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zIHsgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVs
bGluZyB9OwogICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkpCi0gICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChUZXh0Q2hlY2tpbmdU
eXBlOjpHcmFtbWFyKTsKKyAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFBBTDo6
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAgICAgICAgIGF1dG8gc3BlbGxDaGVja2luZ1Jh
bmdlID0gc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25z
LCBzcGVsbENoZWNraW5nUmFuZ2UsIHNwZWxsQ2hlY2tpbmdSYW5nZSwgZ3JhbW1hclNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzAwMSw3ICszMDAx
LDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5n
KGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICBpZiAoIWRvY3VtZW50KCkubWFya2Vy
cygpLmhhc01hcmtlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpICYmICgh
dGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNo
YW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpKQorICAgIGlmICghbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmco
KSAmJiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJz
QWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSB0aGUgbWFya2VycyBm
cm9tIGEgd29yZCBpZiBhbiBlZGl0aW5nIGNvbW1hbmQgd2lsbCBjaGFuZ2UgdGhlIHdvcmQuIFRo
aXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YKQEAgLTM2OTIsNyArMzY5Miw3IEBAIHN0YXRpYyBWZWN0
b3I8U2ltcGxlUmFuZ2U+IHNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKICAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3IHsgdGV4dCB9LnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogICAgIHdoaWxlIChzY2FubmVyUG9zaXRpb24gPCBsZW5ndGgg
JiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6OmZpbmQoJmNoYXJhY3RlcnNbc2Nhbm5lclBvc2l0
aW9uXSwgbGVuZ3RoIC0gc2Nhbm5lclBvc2l0aW9uLCAmcmVsYXRpdmVTdGFydFBvc2l0aW9uLCAm
cmVsYXRpdmVFbmRQb3NpdGlvbikpIHsKICAgICAgICAgQVNTRVJUKHNjYW5uZXJQb3NpdGlvbiAr
IHJlbGF0aXZlRW5kUG9zaXRpb24gPD0gbGVuZ3RoKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIENoYXJhY3RlclJhbmdlKHNjYW5uZXJQb3NpdGlv
biArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiwgcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZl
U3RhcnRQb3NpdGlvbikpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UocmFuZ2UsIFBBTDo6Q2hhcmFjdGVyUmFuZ2Uoc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRp
dmVTdGFydFBvc2l0aW9uLCByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFydFBvc2l0
aW9uKSkpOwogICAgICAgICBzY2FubmVyUG9zaXRpb24gKz0gcmVsYXRpdmVFbmRQb3NpdGlvbjsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4MDMsMTEgKzM4MDMsMTEgQEAgdm9pZCBF
ZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxk
RXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmcpKSB7CisgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91
bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gbmV3QWRqYWNl
bnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIHJlbW92ZU1hcmtl
cnMoKndvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJr
ZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKKyAg
ICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFy
a2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikp
IHsKICAgICAgICAgICAgIGlmIChhdXRvIHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRl
bmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgICAgICAgICAgcmVtb3ZlTWFya2Vycygq
c2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICB9CkBAIC0z
ODY4LDUxICszODY4LDUxIEBAIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZv
cihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpCiAgICAgcmV0dXJuIGZh
bHNlOwogfSAgICAgICAKIAotT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVz
b2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0YWJsZUVsZW1lbnQs
IE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0ZXh0Q2hlY2tpbmdPcHRpb25zKQorT3B0aW9u
U2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlw
ZU1hc2soY29uc3QgTm9kZSYgcm9vdEVkaXRhYmxlRWxlbWVudCwgT3B0aW9uU2V0PFBBTDo6VGV4
dENoZWNraW5nVHlwZT4gdGV4dENoZWNraW5nT3B0aW9ucykKIHsKICNpZiBVU0UoQVVUT01BVElD
X1RFWFRfUkVQTEFDRU1FTlQpICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgb25s
eUFsbG93c1RleHRSZXBsYWNlbWVudCA9IGZhbHNlOwogICAgIGlmIChSZWZQdHIgaG9zdCA9IHJv
b3RFZGl0YWJsZUVsZW1lbnQuc2hhZG93SG9zdCgpKQogICAgICAgICBvbmx5QWxsb3dzVGV4dFJl
cGxhY2VtZW50ID0gaXM8SFRNTElucHV0RWxlbWVudD4oaG9zdCkgJiYgZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKmhvc3QpLmlzU3BlbGxjaGVja0Rpc2FibGVkRXhjZXB0VGV4dFJlcGxhY2Vt
ZW50KCk7CiAgICAgaWYgKG9ubHlBbGxvd3NUZXh0UmVwbGFjZW1lbnQpCi0gICAgICAgIHRleHRD
aGVja2luZ09wdGlvbnMgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNraW5nVHlwZTo6
UmVwbGFjZW1lbnQ7CisgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgPSB0ZXh0Q2hlY2tpbmdP
cHRpb25zICYgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHJvb3RFZGl0YWJsZUVsZW1lbnQpOwogI2VuZGlmCiAKLSAgICBib29sIHNo
b3VsZE1hcmtTcGVsbGluZyA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmcpOwotICAgIGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hl
Y2tpbmdPcHRpb25zLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOworICAgIGJv
b2wgc2hvdWxkTWFya1NwZWxsaW5nID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6
OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKKyAgICBib29sIHNob3VsZE1hcmtHcmFtbWFy
ID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6Okdy
YW1tYXIpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgc2hvdWxkU2hvd0Nv
cnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29udGFpbnMoVGV4dENoZWNraW5n
VHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCk7Ci0gICAgYm9vbCBzaG91bGRDaGVja0ZvckNvcnJl
Y3Rpb24gPSBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsIHx8IHRleHRDaGVja2luZ09wdGlvbnMu
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbik7CisgICAgYm9vbCBzaG91bGRT
aG93Q29ycmVjdGlvblBhbmVsID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwpOworICAgIGJvb2wgc2hvdWxkQ2hl
Y2tGb3JDb3JyZWN0aW9uID0gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCB8fCB0ZXh0Q2hlY2tp
bmdPcHRpb25zLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbik7CiAj
ZW5kaWYKIAotICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzOwor
ICAgIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXM7CiAgICAg
aWYgKHNob3VsZE1hcmtTcGVsbGluZykKLSAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENo
ZWNraW5nVHlwZTo6U3BlbGxpbmcpOworICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKTsKICAgICBpZiAoc2hvdWxkTWFya0dyYW1tYXIpCi0g
ICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOworICAg
ICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChzaG91bGRDaGVja0ZvckNvcnJlY3Rp
b24pCi0gICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rp
b24pOworICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OkNv
cnJlY3Rpb24pOwogICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQotICAgICAgICBj
aGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsKTsK
KyAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29y
cmVjdGlvblBhbmVsKTsKIAogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKLSAg
ICBib29sIHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCA9IHRleHRDaGVja2luZ09wdGlvbnMuY29u
dGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpOworICAgIGJvb2wgc2hvdWxkUGVy
Zm9ybVJlcGxhY2VtZW50ID0gdGV4dENoZWNraW5nT3B0aW9ucy5jb250YWlucyhQQUw6OlRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KTsKICAgICBpZiAoc2hvdWxkUGVyZm9ybVJlcGxhY2Vt
ZW50KSB7CiAgICAgICAgIGlmICghb25seUFsbG93c1RleHRSZXBsYWNlbWVudCkgewogICAgICAg
ICAgICAgaWYgKGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAg
ICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKTsKKyAgICAgICAg
ICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmspOwog
ICAgICAgICAgICAgaWYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkpCi0g
ICAgICAgICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6UXVvdGUp
OworICAgICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFBBTDo6VGV4dENoZWNraW5nVHlw
ZTo6UXVvdGUpOwogICAgICAgICAgICAgaWYgKGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdU
eXBlOjpEYXNoKTsKKyAgICAgICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRleHRD
aGVja2luZ1R5cGU6OkRhc2gpOwogICAgICAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAm
JiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAg
ICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKTsKKyAgICAg
ICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6OlRleHRDaGVja2luZ1R5cGU6OkNvcnJl
Y3Rpb24pOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5
cGU6OlJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFBBTDo6VGV4
dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpOwogICAgIH0KICNlbmRpZgogI2VuZGlmIC8vICFQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtMzk0Niw3ICszOTQ2LDcgQEAgc3RkOjpvcHRpb25hbDxT
aW1wbGVSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29u
c3QKICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpKSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkp
OwogfQogCi1zdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yVGV4dENo
ZWNraW5nUmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdAorc3Rk
OjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclRleHRDaGVja2luZ1Jlc3Vs
dChjb25zdCBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KSBjb25zdAogewogICAgIGlm
ICghcmVzdWx0LnJhbmdlLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAg
LTQyMTcsNyArNDIxNyw3IEBAIHZvaWQgRWRpdG9yOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mCiAKICNlbmRpZiAvLyBF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCi12b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQordm9pZCBFZGl0
b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IGFjY2Vw
dGVkQ2FuZGlkYXRlKQogewogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCmluZGV4IDAxZmUwYjVlMDQ0ZWY2M2YyNmE3MWI0NzJlZjk4YjExYzIyOGI5MWMuLjE3NzZi
MjdmMzRiNWRhZDcyNDNlNWNkZDhhNThkNTM0YjFjMDI3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiUGFzdGVib2FyZFdyaXRlckRhdGEuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0j
aW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dENoZWNraW5n
Lmg+CiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yQmVoYXZpb3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC01MSw2ICs1
MSw3IEBAIE9CSkNfQ0xBU1MgTlNNdXRhYmxlRGljdGlvbmFyeTsKIAogbmFtZXNwYWNlIFBBTCB7
CiBjbGFzcyBLaWxsUmluZzsKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiB9CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTkwLDcgKzkxLDYgQEAgc3RydWN0IERpY3RhdGlvbkFsdGVybmF0
aXZlOwogc3RydWN0IEZvbnRBdHRyaWJ1dGVzOwogc3RydWN0IFBhc3RlYm9hcmRQbGFpblRleHQ7
CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKLXN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAKICNp
ZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogc3RydWN0IFByb21pc2VkQXR0YWNobWVudElu
Zm87CkBAIC0zMjUsMjAgKzMyNSwyMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRT
ZWxlY3Rpb25TdHJpbmcoKSBjb25zdDsKICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmRBdENhcmV0
T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIFRleHRDaGVj
a2luZ0d1ZXNzZXMgZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoKTsKKyAgICBQ
QUw6OlRleHRDaGVja2luZ0d1ZXNzZXMgZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWwoKTsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29u
c3Q7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHdvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCk7CiAgICAgc3RkOjpvcHRp
b25hbDxTaW1wbGVSYW5nZT4gbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9u
Jik7IC8vIFJldHVybnMgZmlyc3QgbWlzc3BlbGxpbmcgcmFuZ2UuCiAgICAgdm9pZCBtYXJrQmFk
R3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlv
biwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVj
dGlvbik7Ci0gICAgdm9pZCBtYXJrQW5kUmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVz
dCYsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CisgICAgdm9pZCBtYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYsIGNvbnN0IFZlY3RvcjxQQUw6OlRl
eHRDaGVja2luZ1Jlc3VsdD4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VSYW5n
ZUZvclNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmKTsKIAog
ICAgIGJvb2wgaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3Zlcndy
aXRlTW9kZUVuYWJsZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZU92ZXJ3cml0
ZU1vZGVFbmFibGVkKCk7CiAKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBjb25zdCBzdGQ6Om9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYgc3BlbGxpbmdSYW5nZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiBncmFtbWFyUmFuZ2UpOworICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIHNwZWxsaW5nUmFuZ2UsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgZ3JhbW1hclJhbmdlKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUCiAjZW5kaWYKQEAgLTU1
Myw5ICs1NTMsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdSZXN1bHQpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoUEFMOjpUZXh0Q2hlY2tp
bmdSZXN1bHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdDsKLSAgICBzdGQ6Om9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZUZvclRleHRDaGVja2luZ1Jlc3VsdChjb25zdCBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCYpIGNv
bnN0OwogICAgIGJvb2wgaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGU7IH0KIAogICAgIHZvaWQgc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhib29sIGIpIHsgbV9pc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvID0gYjsgfQpAQCAtNTk2LDcgKzU5Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJl
dmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQm
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRlbnRPcHRp
b24gPSBEb05vdFJldmVhbEV4dGVudCk7CiAgICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9v
bCBjaGVja1NwZWxsaW5nKTsKLSAgICBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gcmVzb2x2
ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0YWJsZUVsZW1lbnQsIE9w
dGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPik7CisgICAgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNr
aW5nVHlwZT4gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3RFZGl0
YWJsZUVsZW1lbnQsIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+KTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3JzKSBj
b25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBk
YjE2MmE0YzU4OThmZTJlOTQyODlmMGM5Njg1MDAwMzc2YTNmYjBjLi5jNjA1YmNiNWVkZWUwN2U3
MmQ4ODNjZjRhZjMxYmRmNWQ4N2IyYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcApAQCAtNjU0LDEyICs2NTQsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
dGV4dFdhc1JlcGxhY2VkKENoYXJhY3RlckRhdGEqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWcKICAgICB9CiB9CiAKLVRleHREaXJlY3Rpb24gRnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2soKQorUEFMOjpUZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjpkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6ZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jayhtX3NlbGVjdGlvbi5leHRlbnQoKSk7CiB9CiAKLVRleHREaXJlY3Rp
b24gRnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKCkKK1BBTDo6VGV4dERpcmVj
dGlvbiBGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKQogewogICAgIC8vIEdl
dCBib3QgVmlzaWJsZVBvc2l0aW9ucyBmaXJzdCBiZWNhdXNlIHZpc2libGVTdGFydCgpIGFuZCB2
aXNpYmxlRW5kKCkKICAgICAvLyBjYW4gY2F1c2UgbGF5b3V0LCB3aGljaCBoYXMgdGhlIHBvdGVu
dGlhbCB0byBpbnZhbGlkYXRlIGxpbmVib3hlcy4KQEAgLTY5Myw3ICs2OTMsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9u
RGlyZWN0aW9uIGRpcmVjdAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uRGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgICAg
IGlmIChkaXJlY3Rpb25PZlNlbGVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAg
ICAgICAgIGlmIChkaXJlY3Rpb25PZlNlbGVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKQogICAgICAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gdHJ1ZTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IGZhbHNlOwpAQCAtNzAyLDcgKzcwMiw3
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uIGFsdGVy
LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0CiAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZWxlY3Rpb25EaXJlY3Rpb246
OkxlZnQ6Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IGZh
bHNlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gdHJ1
ZTsKQEAgLTc3NiwyMyArNzc2LDIzIEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5RXh0ZW5kaW5nUmlnaHQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5CiAgICAgLy8g
VGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtb2RpZnlFeHRlbmRpbmdSaWdodCBhbmQgbW9kaWZ5RXh0
ZW5kaW5nRm9yd2FyZCBpczoKICAgICAvLyBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkIGFsd2F5cyBl
eHRlbmRzIGZvcndhcmQgbG9naWNhbGx5LgogICAgIC8vIG1vZGlmeUV4dGVuZGluZ1JpZ2h0IGJl
aGF2ZXMgdGhlIHNhbWUgYXMgbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCBleGNlcHQgZm9yIGV4dGVu
ZGluZyBjaGFyYWN0ZXIgb3Igd29yZCwKLSAgICAvLyBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNh
bGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6TFRSLAotICAgIC8v
IGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2Nr
IGlzIFRleHREaXJlY3Rpb246OlJUTC4KKyAgICAvLyBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNh
bGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsCisg
ICAgLy8gYnV0IGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwuCiAgICAgc3dpdGNoIChncmFudWxhcml0
eSkgewogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eToKLSAg
ICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIpCisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBwb3MgPSBwb3MubmV4dChDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2
aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAo
ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQog
ICAgICAgICAgICAgcG9zID0gbmV4dFdvcmRQb3NpdGlvbkZvclBsYXRmb3JtKHBvcyk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvcyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lQm91bmRhcnk6Ci0g
ICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6
TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2Fy
ZChncmFudWxhcml0eSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4
dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKQEAgLTgxMCw3ICs4MTAsNyBAQCBWaXNpYmxl
UG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ1JpZ2h0KFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3MsIGRp
cmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpOworICAgIGFk
anVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3MsIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxv
Y2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgcmV0dXJuIHBvczsKIH0KIApA
QCAtODUzLDcgKzg1Myw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
RXh0ZW5kaW5nRm9yd2FyZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAgICAgICAgICBw
b3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBhZGp1
c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2Nr
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxl
Y3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIpOwogICAgIHJldHVybiBwb3M7CiB9CiAKQEAgLTg2NSw3ICs4NjUsNyBAQCBWaXNp
YmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYgogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNl
IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6CiAgICAgICAgIGlmIChpc1Jh
bmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZlNlbGVjdGlvbigpID09IFRleHRE
aXJlY3Rpb246OkxUUikKKyAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZlNlbGVjdGlvbigpID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQ
b3NpdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
ZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwpAQCAtOTg5LDIzICs5ODks
MjMgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAgICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIG1vZGlmeUV4dGVuZGluZ0xlZnQgYW5kIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGlzOgog
ICAgIC8vIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGFsd2F5cyBleHRlbmRzIGJhY2t3YXJkIGxv
Z2ljYWxseS4KICAgICAvLyBtb2RpZnlFeHRlbmRpbmdMZWZ0IGJlaGF2ZXMgdGhlIHNhbWUgYXMg
bW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQgZXhjZXB0IGZvciBleHRlbmRpbmcgY2hhcmFjdGVyIG9y
IHdvcmQsCi0gICAgLy8gaXQgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xv
c2luZyBibG9jayBpcyBUZXh0RGlyZWN0aW9uOjpMVFIsCi0gICAgLy8gYnV0IGl0IGV4dGVuZHMg
Zm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBUZXh0RGlyZWN0aW9u
OjpSVEwuCisgICAgLy8gaXQgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xv
c2luZyBibG9jayBpcyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiwKKyAgICAvLyBidXQgaXQgZXh0
ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4
dERpcmVjdGlvbjo6UlRMLgogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFRl
eHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAo
ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQog
ICAgICAgICAgICAgcG9zID0gcG9zLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gcG9zLm5leHQoQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0
eTo6V29yZEdyYW51bGFyaXR5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
aygpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9
IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBv
cyA9IG5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShwb3MpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUJvdW5kYXJ5OgotICAgICAgICBpZiAoZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYg
KGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikK
ICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChn
cmFudWxhcml0eSk7CkBAIC0xMDIyLDcgKzEwMjIsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVT
ZWxlY3Rpb246Om1vZGlmeUV4dGVuZGluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
KQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikpOworICAgIGFkanVzdFBvc2l0aW9u
Rm9yVXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKSk7CiAgICAgcmV0dXJuIHBvczsKIH0KICAgICAgICAKQEAg
LTEwNzAsNyArMTA3MCw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5
RXh0ZW5kaW5nQmFja3dhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYWRqdXN0UG9zaXRp
b25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgIShkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0g
VGV4dERpcmVjdGlvbjo6TFRSKSk7CisgICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxs
KHBvcywgIShkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIpKTsKICAgICByZXR1cm4gcG9zOwogfQogCkBAIC0xMDgyLDcgKzEwODIsNyBAQCBWaXNp
YmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBibwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNl
IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6CiAgICAgICAgIGlmIChpc1Jh
bmdlKCkpCi0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9z
aXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
ZWN0aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKQEAgLTEyMDQsNyArMTIwNCw3
IEBAIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50IEZyYW1lU2VsZWN0aW9uOjp0ZXh0U2VsZWN0aW9u
SW50ZW50KEVBbHRlcmF0aW9uIGFsdGVyLCBTCiAgICAgYm9vbCBmbGlwID0gZmFsc2U7CiAgICAg
aWYgKGFsdGVyID09IEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSkgewogICAgICAgICBp
bnRlbnQudHlwZSA9IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbk1vdmU7Ci0gICAgICAg
IGZsaXAgPSBpc1JhbmdlKCkgJiYgZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpSVEw7CisgICAgICAgIGZsaXAgPSBpc1JhbmdlKCkgJiYgZGlyZWN0aW9uT2ZTZWxlY3Rp
b24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICB9IGVsc2UKICAgICAgICAgaW50
ZW50LnR5cGUgPSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25FeHRlbmQ7CiAgICAgc3dp
dGNoIChncmFudWxhcml0eSkgewpAQCAtMTQzMyw4ICsxNDMzLDggQEAgYm9vbCBGcmFtZVNlbGVj
dGlvbjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0
aW9uLCBUZXgKICAgICAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5lZGl0b3Io
KS5iZWhhdmlvcigpLnNob3VsZEFsd2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3Vu
ZGFyeSgpIHx8IG1fc2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0
eSkpCiAgICAgICAgICAgICBzZXRFeHRlbnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRp
cmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkIHx8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OkxUUiAmJiBkaXJlY3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpSaWdodCkgfHwg
KHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMICYmIGRpcmVjdGlvbiA9PSBTZWxl
Y3Rpb25EaXJlY3Rpb246OkxlZnQpKQorICAgICAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRl
eHREaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgICAgICAgICBp
ZiAoZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCB8fCAodGV4dERpcmVj
dGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiAmJiBkaXJlY3Rpb24gPT0gU2VsZWN0aW9u
RGlyZWN0aW9uOjpSaWdodCkgfHwgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEwgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6TGVmdCkpCiAgICAgICAg
ICAgICAgICAgc2V0RW5kKHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBzZXRTdGFydChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZWRhY2I2M2NiZWJkM2Ez
ZTkzZDNkMGYxZjk3MzllYWJhZjdmNzY1Mi4uMDFmY2EyOWQ1Zjc5MzlmOTY0NjM5YjBmMmE0YzQ1
OGM0OWZmNGE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAt
MjcxLDggKzI3MSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzZXRTZWxlY3Rpb25XaXRob3V0VXBk
YXRpbmdBcHBlYXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8U2V0U2Vs
ZWN0aW9uT3B0aW9uPiwgQ3Vyc29yQWxpZ25PblNjcm9sbCwgVGV4dEdyYW51bGFyaXR5KTsKIAog
ICAgIHZvaWQgcmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiwgYm9vbCBiYXNlUmVtb3Zl
ZCwgYm9vbCBleHRlbnRSZW1vdmVkLCBib29sIHN0YXJ0UmVtb3ZlZCwgYm9vbCBlbmRSZW1vdmVk
KTsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKLSAgICBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZv
clBsYXRmb3JtKGJvb2wgaXNHZXRTdGFydCkgY29uc3Q7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0Rm9yUGxhdGZvcm0oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2Vy
LmNwcAppbmRleCA1OTEwNWQ5MzdlNDY5ZjJlZGExOTJlYjBhY2NhODI2OGEyYzNlMmYwLi45OGI5
YzA0Zjg1ODA5YjA4MWEyNjc0N2E1NjQ5MWJiNTdmMTBmNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0KGNvbnN0IFNpbXBs
ZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFj
ZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlLCBjb25zdCBTdHJp
bmcmIHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBvcHRpb25zLCBUZXh0Q2hlY2tp
bmdQcm9jZXNzVHlwZSB0eXBlKQorU3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1ZXN0
KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdl
LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IG9w
dGlvbnMsIFBBTDo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgdHlwZSkKICAgICA6IG1fY2hlY2tp
bmdSYW5nZShjaGVja2luZ1JhbmdlKQogICAgICwgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdl
KGF1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UpCiAgICAgLCBtX3BhcmFncmFwaFJhbmdlKHBhcmFn
cmFwaFJhbmdlKQpAQCAtNTQsNyArNTQsNyBAQCBTcGVsbENoZWNrUmVxdWVzdDo6U3BlbGxDaGVj
a1JlcXVlc3QoY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UsIGNvbnN0IFNpbQogCiBT
cGVsbENoZWNrUmVxdWVzdDo6flNwZWxsQ2hlY2tSZXF1ZXN0KCkgPSBkZWZhdWx0OwogCi1SZWZQ
dHI8U3BlbGxDaGVja1JlcXVlc3Q+IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUoT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IG9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NUeXBlIHR5cGUs
IGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVja2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0
b21hdGljUmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdl
KQorUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKE9w
dGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IG9wdGlvbnMsIFBBTDo6VGV4dENoZWNraW5n
UHJvY2Vzc1R5cGUgdHlwZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UsIGNvbnN0
IFNpbXBsZVJhbmdlJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBTaW1wbGVSYW5n
ZSYgcGFyYWdyYXBoUmFuZ2UpCiB7CiAgICAgU3RyaW5nIHRleHQgPSBwbGFpblRleHQoY2hlY2tp
bmdSYW5nZSk7CiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpAQCAtNjIsMTIgKzYyLDEyIEBAIFJl
ZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShPcHRpb25T
ZXQ8VGV4dENoZWNraW5nVHlwZT4KICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcGVsbENoZWNr
UmVxdWVzdChjaGVja2luZ1JhbmdlLCBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBwYXJhZ3Jh
cGhSYW5nZSwgdGV4dCwgb3B0aW9ucywgdHlwZSkpOwogfQogCi1jb25zdCBUZXh0Q2hlY2tpbmdS
ZXF1ZXN0RGF0YSYgU3BlbGxDaGVja1JlcXVlc3Q6OmRhdGEoKSBjb25zdAorY29uc3QgUEFMOjpU
ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgU3BlbGxDaGVja1JlcXVlc3Q6OmRhdGEoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3JlcXVlc3REYXRhOwogfQogCi12b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0
OjpkaWRTdWNjZWVkKGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQor
dm9pZCBTcGVsbENoZWNrUmVxdWVzdDo6ZGlkU3VjY2VlZChjb25zdCBWZWN0b3I8UEFMOjpUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewogICAgIGlmICghbV9jaGVja2VyKQogICAgICAg
ICByZXR1cm47CkBAIC04NywxMiArODcsMTIgQEAgdm9pZCBTcGVsbENoZWNrUmVxdWVzdDo6ZGlk
Q2FuY2VsKCkKICAgICBtX2NoZWNrZXIgPSBudWxscHRyOwogfQogCi12b2lkIFNwZWxsQ2hlY2tS
ZXF1ZXN0OjpzZXRDaGVja2VyQW5kSWRlbnRpZmllcihTcGVsbENoZWNrZXIqIHJlcXVlc3Rlciwg
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllcikKK3ZvaWQgU3BlbGxDaGVj
a1JlcXVlc3Q6OnNldENoZWNrZXJBbmRJZGVudGlmaWVyKFNwZWxsQ2hlY2tlciogcmVxdWVzdGVy
LCBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7CiAgICAg
QVNTRVJUKCFtX2NoZWNrZXIpOwogICAgIEFTU0VSVCghbV9yZXF1ZXN0RGF0YS5pZGVudGlmaWVy
KCkpOwogICAgIG1fY2hlY2tlciA9IHJlcXVlc3RlcjsKLSAgICBtX3JlcXVlc3REYXRhLm1faWRl
bnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgbV9yZXF1ZXN0RGF0YSA9IFBBTDo6VGV4dENoZWNr
aW5nUmVxdWVzdERhdGEgeyBpZGVudGlmaWVyLCBtX3JlcXVlc3REYXRhLnRleHQoKSwgbV9yZXF1
ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCksIG1fcmVxdWVzdERhdGEucHJvY2Vzc1R5cGUoKSB9Owog
fQogCiB2b2lkIFNwZWxsQ2hlY2tSZXF1ZXN0OjpyZXF1ZXN0ZXJEZXN0cm95ZWQoKQpAQCAtMTYy
LDcgKzE2Miw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdGb3IoUmVmPFNw
ZWxsQ2hlY2tSZXF1ZXN0PiYmIHJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VCghcmVxdWVzdC0+ZGF0YSgpLmlkZW50aWZpZXIoKSk7Ci0gICAgYXV0byBpZGVudGlmaWVyID0g
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgYXV0byBpZGVu
dGlmaWVyID0gUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsK
IAogICAgIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKICAgICByZXF1ZXN0
LT5zZXRDaGVja2VyQW5kSWRlbnRpZmllcih0aGlzLCBpZGVudGlmaWVyKTsKQEAgLTE5Nyw3ICsx
OTcsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tS
ZXF1ZXN0PiYmIHJlcXVlc3QpCiAgICAgbV9yZXF1ZXN0UXVldWUuYXBwZW5kKFdURk1vdmUocmVx
dWVzdCkpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soVGV4dENoZWNraW5nUmVx
dWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4mIHJlc3VsdHMpCit2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soUEFMOjpUZXh0Q2hlY2tp
bmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewogICAgIEFTU0VSVChtX3Byb2Nlc3NpbmdSZXF1ZXN0
KTsKICAgICBBU1NFUlQobV9wcm9jZXNzaW5nUmVxdWVzdC0+ZGF0YSgpLmlkZW50aWZpZXIoKSA9
PSBpZGVudGlmaWVyKTsKQEAgLTIxNiwxNCArMjE2LDE0IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpk
aWRDaGVjayhUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBW
ZWN0CiAgICAgICAgIG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0LnN0YXJ0T25lU2hvdCgw
X3MpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKFRleHRDaGVja2lu
Z1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQordm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZChQQUw6
OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxQ
QUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgVGV4dENoZWNraW5nUmVx
dWVzdERhdGEgcmVxdWVzdERhdGEgPSBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5kYXRhKCk7CisgICAg
UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YSA9IG1fcHJvY2Vzc2luZ1Jl
cXVlc3QtPmRhdGEoKTsKICAgICBpZiAocmVxdWVzdERhdGEuaWRlbnRpZmllcigpID09IGlkZW50
aWZpZXIpIHsKICAgICAgICAgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBt
YXJrZXJUeXBlczsKLSAgICAgICAgaWYgKHJlcXVlc3REYXRhLmNoZWNraW5nVHlwZXMoKS5jb250
YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpCisgICAgICAgIGlmIChyZXF1ZXN0RGF0
YS5jaGVja2luZ1R5cGVzKCkuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZykpCiAgICAgICAgICAgICBtYXJrZXJUeXBlcy5hZGQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
KTsKLSAgICAgICAgaWYgKHJlcXVlc3REYXRhLmNoZWNraW5nVHlwZXMoKS5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkKKyAgICAgICAgaWYgKHJlcXVlc3REYXRhLmNoZWNraW5n
VHlwZXMoKS5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKQogICAgICAg
ICAgICAgbWFya2VyVHlwZXMuYWRkKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAg
aWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZW1vdmVNYXJrZXJzKG1f
cHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOwpAQCAtMjMx
LDkgKzIzMSw5IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNr
aW5nUmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uCiAgICAgZGlkQ2hlY2soaWRlbnRp
ZmllciwgcmVzdWx0cyk7CiB9CiAKLXZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja0NhbmNlbChU
ZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyKQordm9pZCBTcGVsbENoZWNr
ZXI6OmRpZENoZWNrQ2FuY2VsKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRl
bnRpZmllcikKIHsKLSAgICBkaWRDaGVjayhpZGVudGlmaWVyLCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PigpKTsKKyAgICBkaWRDaGVjayhpZGVudGlmaWVyLCBWZWN0b3I8UEFMOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRleCA0MzNiNzEyYjAyMjYzMjExNWY4M2FhMjI3YzAz
YjI3YTRjNTQ5NTE0Li4xYTYwMGQyOTU3MDYzMWQ1NjgxNzE1NjAxZTA3OGY4ZDZjZmIwNGZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgotI2luY2x1ZGUg
IlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRDaGVja2luZy5oPgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAKQEAgLTM3LDkgKzM3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU3BlbGxDaGVja2VyOwogY2xhc3MgVGV4dENo
ZWNrZXJDbGllbnQ7CiAKLWNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0IGZpbmFsIDogcHVibGljIFRl
eHRDaGVja2luZ1JlcXVlc3QgeworY2xhc3MgU3BlbGxDaGVja1JlcXVlc3QgZmluYWwgOiBwdWJs
aWMgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiBjcmVhdGUoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+LCBU
ZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2Us
IGNvbnN0IFNpbXBsZVJhbmdlJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBTaW1w
bGVSYW5nZSYgcGFyYWdyYXBoUmFuZ2UpOworICAgIHN0YXRpYyBSZWZQdHI8U3BlbGxDaGVja1Jl
cXVlc3Q+IGNyZWF0ZShPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgUEFMOjpUZXh0
Q2hlY2tpbmdQcm9jZXNzVHlwZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UsIGNv
bnN0IFNpbXBsZVJhbmdlJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBTaW1wbGVS
YW5nZSYgcGFyYWdyYXBoUmFuZ2UpOwogICAgIHZpcnR1YWwgflNwZWxsQ2hlY2tSZXF1ZXN0KCk7
CiAKICAgICBjb25zdCBTaW1wbGVSYW5nZSYgY2hlY2tpbmdSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hlY2tpbmdSYW5nZTsgfQpAQCAtNDcsMjQgKzQ3LDI0IEBAIHB1YmxpYzoKICAgICBjb25z
dCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZTsgfQogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0K
IAotICAgIHZvaWQgc2V0Q2hlY2tlckFuZElkZW50aWZpZXIoU3BlbGxDaGVja2VyKiwgVGV4dENo
ZWNraW5nUmVxdWVzdElkZW50aWZpZXIpOworICAgIHZvaWQgc2V0Q2hlY2tlckFuZElkZW50aWZp
ZXIoU3BlbGxDaGVja2VyKiwgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcik7CiAg
ICAgdm9pZCByZXF1ZXN0ZXJEZXN0cm95ZWQoKTsKICAgICBib29sIGlzU3RhcnRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2hlY2tlcjsgfQogCi0gICAgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERh
dGEmIGRhdGEoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBQQUw6OlRleHRDaGVja2luZ1JlcXVl
c3REYXRhJiBkYXRhKCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkaWRTdWNj
ZWVkKGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JikgZmluYWw7CisgICAgdm9pZCBk
aWRTdWNjZWVkKGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mKSBmaW5hbDsK
ICAgICB2b2lkIGRpZENhbmNlbCgpIGZpbmFsOwogCi0gICAgU3BlbGxDaGVja1JlcXVlc3QoY29u
c3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBhdXRvbWF0
aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgcGFyYWdyYXBoUmFuZ2UsIGNv
bnN0IFN0cmluZyYsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiwgVGV4dENoZWNraW5nUHJv
Y2Vzc1R5cGUpOworICAgIFNwZWxsQ2hlY2tSZXF1ZXN0KGNvbnN0IFNpbXBsZVJhbmdlJiBjaGVj
a2luZ1JhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmIHBhcmFncmFwaFJhbmdlLCBjb25zdCBTdHJpbmcmLCBPcHRpb25T
ZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgUEFMOjpUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSk7
CiAKICAgICBTcGVsbENoZWNrZXIqIG1fY2hlY2tlciB7IG51bGxwdHIgfTsKICAgICBTaW1wbGVS
YW5nZSBtX2NoZWNraW5nUmFuZ2U7CiAgICAgU2ltcGxlUmFuZ2UgbV9hdXRvbWF0aWNSZXBsYWNl
bWVudFJhbmdlOwogICAgIFNpbXBsZVJhbmdlIG1fcGFyYWdyYXBoUmFuZ2U7CiAgICAgUmVmUHRy
PEVsZW1lbnQ+IG1fcm9vdEVkaXRhYmxlRWxlbWVudDsKLSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0
RGF0YSBtX3JlcXVlc3REYXRhOworICAgIFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEgbV9y
ZXF1ZXN0RGF0YTsKIH07CiAKIGNsYXNzIFNwZWxsQ2hlY2tlciB7CkBAIC04MCw4ICs4MCw4IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcmVxdWVzdENoZWNraW5nRm9yKFJlZjxTcGVsbENoZWNrUmVx
dWVzdD4mJik7CiAKLSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBsYXN0UmVxdWVz
dElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xhc3RSZXF1ZXN0SWRlbnRpZmllcjsgfQot
ICAgIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyIGxhc3RQcm9jZXNzZWRJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllcjsgfQorICAgIFBBTDo6
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbGFzdFJlcXVlc3RJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdElkZW50aWZpZXI7IH0KKyAgICBQQUw6OlRleHRDaGVj
a2luZ1JlcXVlc3RJZGVudGlmaWVyIGxhc3RQcm9jZXNzZWRJZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllcjsgfQogCiBwcml2YXRlOgogICAgIGJvb2wg
Y2FuQ2hlY2tBc3luY2hyb25vdXNseShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwpAQCAtODks
MTMgKzg5LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVk
UmVxdWVzdCgpOwogICAgIHZvaWQgaW52b2tlUmVxdWVzdChSZWY8U3BlbGxDaGVja1JlcXVlc3Q+
JiYpOwogICAgIHZvaWQgZW5xdWV1ZVJlcXVlc3QoUmVmPFNwZWxsQ2hlY2tSZXF1ZXN0PiYmKTsK
LSAgICB2b2lkIGRpZENoZWNrU3VjY2VlZChUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKLSAgICB2b2lkIGRpZENoZWNrQ2Fu
Y2VsKFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZENoZWNrKFRl
eHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiYpOworICAgIHZvaWQgZGlkQ2hlY2tTdWNjZWVkKFBBTDo6VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mKTsKKyAg
ICB2b2lkIGRpZENoZWNrQ2FuY2VsKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIp
OworICAgIHZvaWQgZGlkQ2hlY2soUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYpOwogCiAgICAgRG9jdW1lbnQm
IG1fZG9jdW1lbnQ7Ci0gICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0UmVx
dWVzdElkZW50aWZpZXI7Ci0gICAgVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgbV9sYXN0
UHJvY2Vzc2VkSWRlbnRpZmllcjsKKyAgICBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlm
aWVyIG1fbGFzdFJlcXVlc3RJZGVudGlmaWVyOworICAgIFBBTDo6VGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIgbV9sYXN0UHJvY2Vzc2VkSWRlbnRpZmllcjsKIAogICAgIFRpbWVyIG1fdGlt
ZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggYTNiYzk2OWZiZTcyYTdiODBiZGQ2ZmI2OTNhNjhl
MTBjZDMzZmYwOC4uYTBiNjk3ZDJmYjI2MGUxNWExOWQxNjUzM2ZkMjMzZjcxOGU4ZWFlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvQ2hhcmFjdGVyUmFuZ2UuaD4KICNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaD4KQEAgLTQ1LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLXN0YXRpYyB2b2lkIGZpbmRHcmFtbWF0aWNhbEVy
cm9ycyhUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQorc3RhdGljIHZvaWQgZmluZEdyYW1tYXRpY2Fs
RXJyb3JzKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9y
PFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGNoZWNrTG9jYXRpb24gPSAwOyBjaGVja0xvY2F0aW9uIDwgdGV4dC5sZW5ndGgoKTsgKSB7CiAg
ICAgICAgIGludCBiYWRHcmFtbWFyTG9jYXRpb24gPSAtMTsKQEAgLTYwLDkgKzYxLDkgQEAgc3Rh
dGljIHZvaWQgZmluZEdyYW1tYXRpY2FsRXJyb3JzKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQs
IFN0cmluZ1ZpZXcgdGV4dCwgVmUKICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJMZW5ndGggPiAw
KTsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihiYWRHcmFtbWFyTGVuZ3Ro
KSA8PSB0ZXh0Lmxlbmd0aCgpIC0gY2hlY2tMb2NhdGlvbiAtIGJhZEdyYW1tYXJMb2NhdGlvbik7
CiAKLSAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IGJhZEdyYW1tYXI7Ci0gICAgICAgIGJhZEdy
YW1tYXIudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7Ci0gICAgICAgIGJhZEdyYW1t
YXIucmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShjaGVja0xvY2F0aW9uICsgYmFkR3JhbW1hckxvY2F0
aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQg
YmFkR3JhbW1hcjsKKyAgICAgICAgYmFkR3JhbW1hci50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdU
eXBlOjpHcmFtbWFyOworICAgICAgICBiYWRHcmFtbWFyLnJhbmdlID0gUEFMOjpDaGFyYWN0ZXJS
YW5nZShjaGVja0xvY2F0aW9uICsgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3Ro
KTsKICAgICAgICAgYmFkR3JhbW1hci5kZXRhaWxzID0gV1RGTW92ZShiYWRHcmFtbWFyRGV0YWls
cyk7CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGJhZEdyYW1tYXIpOwogCkBAIC03MCw3ICs3MSw3
IEBAIHN0YXRpYyB2b2lkIGZpbmRHcmFtbWF0aWNhbEVycm9ycyhUZXh0Q2hlY2tlckNsaWVudCYg
Y2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFZlCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBmaW5k
TWlzc3BlbGxpbmdzKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4dCwg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCitzdGF0aWMgdm9pZCBmaW5kTWlz
c3BlbGxpbmdzKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4dCwgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKICAgICBVQnJlYWtJdGVy
YXRvciogaXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKICAgICBpZiAoIWl0ZXJh
dG9yKQpAQCAtOTEsOSArOTIsOSBAQCBzdGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxpbmdzKFRleHRD
aGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPAogICAgICAgICAg
ICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoID4gMCk7CiAgICAgICAgICAgICBBU1NFUlQobWlz
c3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHdvcmRMZW5ndGgpOwogCi0g
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgbWlzc3BlbGxpbmc7Ci0gICAgICAgICAgICBt
aXNzcGVsbGluZy50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7Ci0gICAgICAgICAg
ICBtaXNzcGVsbGluZy5yYW5nZSA9IENoYXJhY3RlclJhbmdlKHdvcmRTdGFydCArIG1pc3NwZWxs
aW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nOworICAgICAgICAgICAgbWlzc3BlbGxpbmcudHlwZSA9
IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CisgICAgICAgICAgICBtaXNzcGVsbGlu
Zy5yYW5nZSA9IFBBTDo6Q2hhcmFjdGVyUmFuZ2Uod29yZFN0YXJ0ICsgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgICAgICAgICAgbWlzc3BlbGxpbmcucmVwbGFj
ZW1lbnQgPSBjbGllbnQuZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQo
dGV4dC5zdWJzdHJpbmcobWlzc3BlbGxpbmcucmFuZ2UubG9jYXRpb24sIG1pc3NwZWxsaW5nLnJh
bmdlLmxlbmd0aCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1pc3NwZWxsaW5nKTsKICAgICAgICAgfQpAQCAtMTU1LDcgKzE1Niw3IEBAIGNv
bnN0IFNpbXBsZVJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKCkg
Y29uc3QKICAgICByZXR1cm4gKm1fcGFyYWdyYXBoUmFuZ2U7CiB9CiAKLVNpbXBsZVJhbmdlIFRl
eHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0
CitTaW1wbGVSYW5nZSBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKFBBTDo6Q2hhcmFj
dGVyUmFuZ2UgcmFuZ2UpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0ZXJSYW5n
ZShwYXJhZ3JhcGhSYW5nZSgpLCByYW5nZSk7CiB9CkBAIC0yNTgsNyArMjU5LDcgQEAgYXV0byBU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRNaXNzcGVsbGVkV29yZHMoT3BlcmF0aW9uIG9wZXJhdGlv
bikgY29uc3QgLT4gc3RkOjoKICAgICAgICAgaWYgKCEobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAw
ICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDwgdGV4dExl
bmd0aCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTG9j
YXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHJlc29sdmVDaGFyYWN0
ZXJSYW5nZShtX3JhbmdlLCBDaGFyYWN0ZXJSYW5nZShjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCkpOworICAgICAgICBhdXRvIG1pc3Nw
ZWxsaW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9yYW5nZSwgUEFMOjpDaGFyYWN0
ZXJSYW5nZShjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCkpOwogCiAgICAgICAgIGlmIChvcGVyYXRpb24gPT0gT3BlcmF0aW9uOjpNYXJr
QWxsKQogICAgICAgICAgICAgYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7CkBAIC0yOTQsNyArMjk1LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxw
ZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hl
Y2sKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIHN0ZDo6dmFyaWFudDxNaXNzcGVsbGVkV29y
ZCwgVW5ncmFtbWF0aWNhbFBocmFzZT4gZmlyc3RGb3VuZEl0ZW07Ci0gICAgR3JhbW1hckRldGFp
bCBncmFtbWFyRGV0YWlsOworICAgIFBBTDo6R3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOwog
CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOwogICAgIHN0ZDo6b3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1pc3NwZWxsZWRXb3JkUmFuZ2U7CkBAIC0zMzIsMzEgKzMzMywzMSBAQCBhdXRvIFRleHRD
aGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJh
c2UoYm9vbCBjaGVjawogICAgICAgICAgICAgICAgIHVpbnQ2NF90IGdyYW1tYXJEZXRhaWxMb2Nh
dGlvbiA9IDA7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZ3JhbW1hckRldGFpbEluZGV4ID0g
MDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiByZXN1bHRzOwotICAgICAgICAgICAgICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiBjaGVja2luZ1R5cGVzIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgfTsKKyAgICAg
ICAgICAgICAgICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAg
ICAgICAgICAgICAgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBl
cyB7IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgfTsKICAgICAgICAgICAgICAgICBp
ZiAoY2hlY2tHcmFtbWFyKQotICAgICAgICAgICAgICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChU
ZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmdU
eXBlcy5hZGQoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CiAgICAgICAgICAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSkK
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9j
bGllbnQudGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoU3RyaW5nLCBjaGVja2luZ1R5cGVzLCByZXN1
bHRzLCBjdXJyZW50U2VsZWN0aW9uKTsKIAogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVz
dWx0IDogcmVzdWx0cykgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0g
VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgJiYgcmVzdWx0LnJhbmdlLmxvY2F0aW9uID49IGN1
cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQucmFuZ2UubG9jYXRpb24gKyByZXN1bHQucmFuZ2Uu
bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC50eXBlID09IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgJiYgcmVzdWx0LnJh
bmdlLmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQucmFuZ2UubG9jYXRp
b24gKyByZXN1bHQucmFuZ2UubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQucmFuZ2UubGVuZ3RoID4gMCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVsbGluZ0xvY2F0aW9uID0gcmVzdWx0LnJhbmdlLmxvY2F0aW9u
OwogICAgICAgICAgICAgICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJp
bmcuc3Vic3RyaW5nKHJlc3VsdC5yYW5nZS5sb2NhdGlvbiwgcmVzdWx0LnJhbmdlLmxlbmd0aCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQudHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyICYmIHJlc3VsdC5yYW5nZS5sb2NhdGlvbiA8IGN1cnJl
bnRFbmRPZmZzZXQgJiYgcmVzdWx0LnJhbmdlLmxvY2F0aW9uICsgcmVzdWx0LnJhbmdlLmxlbmd0
aCA+IGN1cnJlbnRTdGFydE9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tH
cmFtbWFyICYmIHJlc3VsdC50eXBlID09IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciAm
JiByZXN1bHQucmFuZ2UubG9jYXRpb24gPCBjdXJyZW50RW5kT2Zmc2V0ICYmIHJlc3VsdC5yYW5n
ZS5sb2NhdGlvbiArIHJlc3VsdC5yYW5nZS5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQucmFuZ2UubGVuZ3RoID4gMCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFmdGVyIHRoZSBmaXJz
dCBncmFtbWFyIHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUgYSBzcGVsbGluZyBy
ZXN1bHQgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGJlZ2lucyBidXQgYmVm
b3JlIHRoZSBmaXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBpZiB3ZSBmaW5kIGEg
c2Vjb25kIGdyYW1tYXIgcmVzdWx0LgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5k
R3JhbW1hcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQuZGV0YWlscy5zaXpl
KCk7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRh
aWwqIGRldGFpbCA9ICZyZXN1bHQuZGV0YWlsc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBQQUw6OkdyYW1tYXJEZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQuZGV0YWlsc1tq
XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5yYW5nZS5sZW5n
dGggPiAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJhbmdlLmxv
Y2F0aW9uICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYg
cmVzdWx0LnJhbmdlLmxvY2F0aW9uICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC0+
cmFuZ2UubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQgJiYgKCFmb3VuZEdyYW1tYXIgfHwgcmVz
dWx0LnJhbmdlLmxvY2F0aW9uICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiA8IGdyYW1tYXJEZXRh
aWxMb2NhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckRl
dGFpbEluZGV4ID0gajsKQEAgLTQxMSwxNCArNDEyLDE0IEBAIGF1dG8gVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNo
ZWNrCiAgICAgcmV0dXJuIGZpcnN0Rm91bmRJdGVtOwogfQogCi1pbnQgVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kVW5ncmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uIG9wZXJhdGlvbiwgY29uc3Qg
VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgdWludDY0X3QgYmFkR3JhbW1h
clBocmFzZUxvY2F0aW9uLCB1aW50NjRfdCBzdGFydE9mZnNldCwgdWludDY0X3QgZW5kT2Zmc2V0
KSBjb25zdAoraW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZFVuZ3JhbW1hdGljYWxQaHJhc2Vz
KE9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFZlY3RvcjxQQUw6OkdyYW1tYXJEZXRhaWw+JiBn
cmFtbWFyRGV0YWlscywgdWludDY0X3QgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCB1aW50NjRf
dCBzdGFydE9mZnNldCwgdWludDY0X3QgZW5kT2Zmc2V0KSBjb25zdAogewogICAgIC8vIEZvdW5k
IHNvbWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0
YXJ0cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgogICAgIC8vIE9wdGlvbmFsbHkgYWRk
IGEgRG9jdW1lbnRNYXJrZXIgZm9yIGVhY2ggZGV0YWlsIGluIHRoZSByYW5nZS4KICAgICB1aW50
NjRfdCBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIgPSAwOwogICAgIGludCBlYXJsaWVzdERl
dGFpbEluZGV4ID0gLTE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYW1tYXJEZXRh
aWxzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9
ICZncmFtbWFyRGV0YWlsc1tpXTsKKyAgICAgICAgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsKiBk
ZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNbaV07CiAgICAgICAgIEFTU0VSVChkZXRhaWwtPnJhbmdl
Lmxlbmd0aCA+IDApOwogICAgICAgICAKICAgICAgICAgdWludDY0X3QgZGV0YWlsU3RhcnRPZmZz
ZXRJblBhcmFncmFwaCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArIGRldGFpbC0+cmFuZ2Uu
bG9jYXRpb247CkBAIC00NTYsNyArNDU3LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZp
bmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb24gb3BlcmF0aW9uKSBjb25zdCAtPgogICAg
IAogICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0
IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3Jp
Z2luYWwgc2VhcmNoIHJhbmdlLgogICAgIGZvciAodWludDY0X3Qgc3RhcnRPZmZzZXQgPSAwOyBz
dGFydE9mZnNldCA8IHBhcmFncmFwaC5jaGVja2luZ0VuZCgpOyApIHsKLSAgICAgICAgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOworICAgICAgICBWZWN0b3I8UEFMOjpHcmFt
bWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsKICAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VM
b2NhdGlvbiA9IC0xOwogICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7CiAg
ICAgICAgIG1fY2xpZW50LnRleHRDaGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5nKHBhcmFn
cmFwaC50ZXh0KCkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KSwgZ3JhbW1hckRldGFpbHMsICZiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKQEAgLTQ5NSw3
ICs0OTYsNyBAQCBhdXRvIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0VW5ncmFtbWF0aWNh
bFBocmFzZSgpIGNvbnN0IC0+IFVuZ3JhbW1hdGljYWxQaAogICAgIHJldHVybiBmaW5kVW5ncmFt
bWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uOjpGaW5kRmlyc3QpOwogfQogCi1UZXh0Q2hlY2tpbmdH
dWVzc2VzIFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkT3JVbmdy
YW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2tHcmFtbWFyKSBjb25zdAorUEFMOjpUZXh0Q2hlY2tp
bmdHdWVzc2VzIFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkT3JV
bmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2tHcmFtbWFyKSBjb25zdAogewogICAgIGlmICgh
dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtNTEx
LDE3ICs1MTIsMTcgQEAgVGV4dENoZWNraW5nR3Vlc3NlcyBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFAKICAgICBpZiAocGFyYWdyYXBo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNr
aW5nVHlwZXMgeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZyB9OworICAgIFZlY3RvcjxQQUw6
OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hl
Y2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzIHsgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZyB9OwogICAgIGlmIChjaGVja0dyYW1tYXIpCi0gICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOworICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChQQUw6
OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbjsKICAgICBpZiAoYXV0byBmcmFtZSA9IG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQo
KS5mcmFtZSgpKQogICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0Q2hl
Y2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJyZW50
U2VsZWN0aW9uKTsKIAogICAgIGZvciAoYXV0byYgcmVzdWx0IDogcmVzdWx0cykgewotICAgICAg
ICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgJiYgcGFyYWdy
YXBoLmNoZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5yYW5nZSkpIHsKKyAgICAgICAgaWYgKHJl
c3VsdC50eXBlID09IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcgJiYgcGFyYWdyYXBo
LmNoZWNraW5nUmFuZ2VNYXRjaGVzKHJlc3VsdC5yYW5nZSkpIHsKICAgICAgICAgICAgIFN0cmlu
ZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaC5jaGVja2luZ1N1YnN0cmluZygpLnRvU3RyaW5n
KCk7CiAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwogICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKQEAgLTUzNSw3ICs1MzYsNyBAQCBUZXh0Q2hl
Y2tpbmdHdWVzc2VzIFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3Jk
T3JVbmdyYW1tYXRpY2FsUAogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZm9yIChhdXRvJiBy
ZXN1bHQgOiByZXN1bHRzKSB7Ci0gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlOjpHcmFtbWFyICYmIHBhcmFncmFwaC5pc0NoZWNraW5nUmFuZ2VDb3ZlcmVkQnkocmVz
dWx0LnJhbmdlKSkgeworICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlOjpHcmFtbWFyICYmIHBhcmFncmFwaC5pc0NoZWNraW5nUmFuZ2VDb3ZlcmVkQnkocmVz
dWx0LnJhbmdlKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBkZXRhaWwgOiByZXN1bHQuZGV0
YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwucmFuZ2UubGVuZ3RoID4gMCk7
CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyh7IHJl
c3VsdC5yYW5nZS5sb2NhdGlvbiArIGRldGFpbC5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLnJhbmdl
Lmxlbmd0aCB9KSkgewpAQCAtNTY2LDIwICs1NjcsMjAgQEAgYm9vbCBUZXh0Q2hlY2tpbmdIZWxw
ZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3Jl
Ojp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFt
ZSgpKTsKIH0KIAotdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYg
Y2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVj
a2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBPcHRpb25TZXQ8
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBWZWN0b3I8UEFMOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+JiByZXN1bHRzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2Vs
ZWN0aW9uKQogewogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgcmVzdWx0cyA9
IGNsaWVudC5jaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzLCBjdXJyZW50
U2VsZWN0aW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRTZWxlY3Rpb24pOwog
Ci0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gbWlzc3BlbGxpbmdzOwotICAgIGlmIChj
aGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKKyAgICBW
ZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3NwZWxsaW5nczsKKyAgICBpZiAoY2hl
Y2tpbmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkKICAg
ICAgICAgZmluZE1pc3NwZWxsaW5ncyhjbGllbnQsIHRleHQsIG1pc3NwZWxsaW5ncyk7CiAKICAg
ICAvLyBMb29rIGZvciBncmFtbWF0aWNhbCBlcnJvcnMgdGhhdCBvY2N1ciBiZWZvcmUgdGhlIGZp
cnN0IG1pc3NwZWxsaW5nLgotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGdyYW1tYXRp
Y2FsRXJyb3JzOwotICAgIGlmIChjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5
cGU6OkdyYW1tYXIpKSB7CisgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBncmFt
bWF0aWNhbEVycm9yczsKKyAgICBpZiAoY2hlY2tpbmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRD
aGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgIHVuc2lnbmVkIGdyYW1tYXJDaGVja0xl
bmd0aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgICAgIGZvciAoYXV0byYgbWlzc3BlbGxpbmcgOiBt
aXNzcGVsbGluZ3MpCiAgICAgICAgICAgICBncmFtbWFyQ2hlY2tMZW5ndGggPSBzdGQ6Om1pbjx1
bnNpZ25lZD4oZ3JhbW1hckNoZWNrTGVuZ3RoLCBtaXNzcGVsbGluZy5yYW5nZS5sb2NhdGlvbik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAppbmRleCBmNTdl
NDc1NzFjMWI2MTZlMDBkNWVhYTkwOWVlYjQxNTExM2RjM2RkLi4wMGYxZTU3NmM0YzY2YjAzNGFk
MTc0MWNiYWYyYzA5YjM1ZjgyZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmgKQEAgLTIyLDcgKzIyLDExIEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25P
ci5oIgogI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNraW5nLmgi
CisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dENoZWNraW5nLmg+CisKK25hbWVzcGFjZSBQQUwgewor
c3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zMiw3ICszNiw2IEBAIGNsYXNzIFBvc2l0aW9uOwogY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7
CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCi1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owog
CiAvLyBGSVhNRTogU2hvdWxkIG1vdmUgdGhpcyBjbGFzcyB0byBpdHMgb3duIGhlYWRlci4KIGNs
YXNzIFRleHRDaGVja2luZ1BhcmFncmFwaCB7CkBAIC00MSw3ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY29uc3QgU2ltcGxlUmFuZ2UmIGNoZWNraW5nUmFuZ2Us
IGNvbnN0IFNpbXBsZVJhbmdlJiBhdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcGFyYWdyYXBoUmFuZ2UpOwogCiAgICAgdWludDY0X3Qg
cmFuZ2VMZW5ndGgoKSBjb25zdDsKLSAgICBTaW1wbGVSYW5nZSBzdWJyYW5nZShDaGFyYWN0ZXJS
YW5nZSkgY29uc3Q7CisgICAgU2ltcGxlUmFuZ2Ugc3VicmFuZ2UoUEFMOjpDaGFyYWN0ZXJSYW5n
ZSkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dWludDY0X3Q+IG9mZnNldFRvKGNvbnN0IFBvc2l0
aW9uJikgY29uc3Q7CiAgICAgdm9pZCBleHBhbmRSYW5nZVRvTmV4dEVuZCgpOwogCkBAIC01Nyw5
ICs2MCw5IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBhdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0
KCkgY29uc3Q7CiAgICAgdWludDY0X3QgYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGgoKSBjb25z
dDsKIAotICAgIGJvb2wgY2hlY2tpbmdSYW5nZU1hdGNoZXMoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2Up
IGNvbnN0IHsgcmV0dXJuIHJhbmdlLmxvY2F0aW9uID09IGNoZWNraW5nU3RhcnQoKSAmJiByYW5n
ZS5sZW5ndGggPT0gY2hlY2tpbmdMZW5ndGgoKTsgfQotICAgIGJvb2wgaXNDaGVja2luZ1Jhbmdl
Q292ZXJlZEJ5KENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5sb2Nh
dGlvbiA8PSBjaGVja2luZ1N0YXJ0KCkgJiYgcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgg
Pj0gY2hlY2tpbmdTdGFydCgpICsgY2hlY2tpbmdMZW5ndGgoKTsgfQotICAgIGJvb2wgY2hlY2tp
bmdSYW5nZUNvdmVycyhDaGFyYWN0ZXJSYW5nZSByYW5nZSkgY29uc3QgeyByZXR1cm4gcmFuZ2Uu
bG9jYXRpb24gPCBjaGVja2luZ0VuZCgpICYmIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3Ro
ID4gY2hlY2tpbmdTdGFydCgpOyB9CisgICAgYm9vbCBjaGVja2luZ1JhbmdlTWF0Y2hlcyhQQUw6
OkNoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5sb2NhdGlvbiA9PSBj
aGVja2luZ1N0YXJ0KCkgJiYgcmFuZ2UubGVuZ3RoID09IGNoZWNraW5nTGVuZ3RoKCk7IH0KKyAg
ICBib29sIGlzQ2hlY2tpbmdSYW5nZUNvdmVyZWRCeShQQUw6OkNoYXJhY3RlclJhbmdlIHJhbmdl
KSBjb25zdCB7IHJldHVybiByYW5nZS5sb2NhdGlvbiA8PSBjaGVja2luZ1N0YXJ0KCkgJiYgcmFu
Z2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGggPj0gY2hlY2tpbmdTdGFydCgpICsgY2hlY2tpbmdM
ZW5ndGgoKTsgfQorICAgIGJvb2wgY2hlY2tpbmdSYW5nZUNvdmVycyhQQUw6OkNoYXJhY3RlclJh
bmdlIHJhbmdlKSBjb25zdCB7IHJldHVybiByYW5nZS5sb2NhdGlvbiA8IGNoZWNraW5nRW5kKCkg
JiYgcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGggPiBjaGVja2luZ1N0YXJ0KCk7IH0KIAog
ICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0OwogCkBAIC04OSw3
ICs5Miw3IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgVW5ncmFtbWF0aWNhbFBocmFzZSB7CiAgICAg
ICAgIFN0cmluZyBwaHJhc2U7CiAgICAgICAgIHVpbnQ2NF90IG9mZnNldCB7IDAgfTsKLSAgICAg
ICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CisgICAgICAgIFBBTDo6R3JhbW1hckRldGFpbCBkZXRh
aWw7CiAgICAgfTsKIAogICAgIE1pc3NwZWxsZWRXb3JkIGZpbmRGaXJzdE1pc3NwZWxsZWRXb3Jk
KCkgY29uc3Q7CkBAIC05OSwyMCArMTAyLDIwIEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYXJrQWxsTWlzc3BlbGxlZFdvcmRzKCkgY29uc3Q7IC8vIFJldHVybnMg
dGhlIHJhbmdlIG9mIHRoZSBmaXJzdCBtaXNzcGVsbGVkIHdvcmQuCiAgICAgdm9pZCBtYXJrQWxs
VW5ncmFtbWF0aWNhbFBocmFzZXMoKSBjb25zdDsKIAotICAgIFRleHRDaGVja2luZ0d1ZXNzZXMg
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2tH
cmFtbWFyKSBjb25zdDsKKyAgICBQQUw6OlRleHRDaGVja2luZ0d1ZXNzZXMgZ3Vlc3Nlc0Zvck1p
c3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2tHcmFtbWFyKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIE9wZXJhdGlvbiA6IGJvb2wgeyBGaW5kRmly
c3QsIE1hcmtBbGwgfTsKICAgICBzdGQ6OnBhaXI8TWlzc3BlbGxlZFdvcmQsIHN0ZDo6b3B0aW9u
YWw8U2ltcGxlUmFuZ2U+PiBmaW5kTWlzc3BlbGxlZFdvcmRzKE9wZXJhdGlvbikgY29uc3Q7IC8v
IFJldHVybnMgdGhlIGZpcnN0LgogICAgIFVuZ3JhbW1hdGljYWxQaHJhc2UgZmluZFVuZ3JhbW1h
dGljYWxQaHJhc2VzKE9wZXJhdGlvbikgY29uc3Q7IC8vIFJldHVybnMgdGhlIGZpcnN0LgogICAg
IGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwotICAgIGludCBmaW5kVW5n
cmFtbWF0aWNhbFBocmFzZXMoT3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
LCB1aW50NjRfdCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIHVpbnQ2NF90IHN0YXJ0T2Zmc2V0
LCB1aW50NjRfdCBlbmRPZmZzZXQpIGNvbnN0OworICAgIGludCBmaW5kVW5ncmFtbWF0aWNhbFBo
cmFzZXMoT3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIHVpbnQ2
NF90IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgdWludDY0X3Qgc3RhcnRPZmZzZXQsIHVpbnQ2
NF90IGVuZE9mZnNldCkgY29uc3Q7CiAKICAgICBFZGl0b3JDbGllbnQmIG1fY2xpZW50OwogICAg
IFNpbXBsZVJhbmdlIG1fcmFuZ2U7CiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRl
eHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pOwordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNs
aWVudCYsIFN0cmluZ1ZpZXcsIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+LCBWZWN0
b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbik7CiAKIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChjb25zdCBG
cmFtZSopOwogYm9vbCBwbGF0Zm9ybURyaXZlblRleHRDaGVja2VyRW5hYmxlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGZhMGUwYmY5YmI1YTY1MmM0MWYy
NWIzZjI2YzFiNDA0YjU3M2Q2NmMuLjI3YTJhNTUxNzEyNmIwM2VmMGQ0OWVhZjk3MjZhNjdmNjAy
YTA5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTU2LDcg
KzU2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJUZXh0
Qm91bmRhcmllcy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRCb3VuZGFyaWVzLmg+CiAjaW5j
bHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dFBsYWNlaG9s
ZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjAyNSw3ICsy
MDI1LDcgQEAgaW5saW5lIHZvaWQgU2VhcmNoQnVmZmVyOjpwcmVwZW5kQ29udGV4dChTdHJpbmdW
aWV3IHRleHQpCiAgICAgc2l6ZV90IHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IHRleHQubGVu
Z3RoKCk7CiAgICAgaWYgKHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCkgewogICAgICAgICBVMTZf
QkFDS18xKHRleHQsIDAsIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7Ci0gICAgICAgIHdvcmRC
b3VuZGFyeUNvbnRleHRTdGFydCA9IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0
LnN1YnN0cmluZygwLCB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQpKTsKKyAgICAgICAgd29yZEJv
dW5kYXJ5Q29udGV4dFN0YXJ0ID0gUEFMOjpzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQo
dGV4dC5zdWJzdHJpbmcoMCwgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KSk7CiAgICAgfQogCiAg
ICAgc2l6ZV90IHVzYWJsZUxlbmd0aCA9IHN0ZDo6bWluKG1fYnVmZmVyLmNhcGFjaXR5KCkgLSBt
X3ByZWZpeExlbmd0aCwgdGV4dC5sZW5ndGgoKSAtIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCk7
CkBAIC0yMTEzLDcgKzIxMTMsNyBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZEVu
ZE1hdGNoKHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKIAogICAgIC8vIFN0YXJ0
IHNlYXJjaGluZyBhdCB0aGUgZW5kIG9mIG1hdGNoZWQgc2VhcmNoLCBzbyB0aGF0IG11bHRpcGxl
IHdvcmQgbWF0Y2hlcyBzdWNjZWVkLgogICAgIGludCBlbmRXb3JkOwotICAgIGZpbmRFbmRXb3Jk
Qm91bmRhcnkoU3RyaW5nVmlldyhtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSksIHN0
YXJ0ICsgbGVuZ3RoIC0gMSwgJmVuZFdvcmQpOworICAgIFBBTDo6ZmluZEVuZFdvcmRCb3VuZGFy
eShTdHJpbmdWaWV3KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKSwgc3RhcnQgKyBs
ZW5ndGggLSAxLCAmZW5kV29yZCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZW5k
V29yZCkgPT0gc3RhcnQgKyBsZW5ndGg7CiB9CiAKQEAgLTIxNjgsNyArMjE2OCw3IEBAIGlubGlu
ZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXRjaChzaXplX3Qgc3RhcnQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0CiAKICAgICBzaXplX3Qgd29yZEJyZWFrU2VhcmNoU3RhcnQgPSBzdGFy
dCArIGxlbmd0aDsKICAgICB3aGlsZSAod29yZEJyZWFrU2VhcmNoU3RhcnQgPiBzdGFydCkKLSAg
ICAgICAgd29yZEJyZWFrU2VhcmNoU3RhcnQgPSBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoU3RyaW5n
VmlldyhtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSksIHdvcmRCcmVha1NlYXJjaFN0
YXJ0LCBmYWxzZSAvKiBiYWNrd2FyZHMgKi8pOworICAgICAgICB3b3JkQnJlYWtTZWFyY2hTdGFy
dCA9IFBBTDo6ZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcobV9idWZmZXIuZGF0YSgp
LCBtX2J1ZmZlci5zaXplKCkpLCB3b3JkQnJlYWtTZWFyY2hTdGFydCwgZmFsc2UgLyogYmFja3dh
cmRzICovKTsKICAgICByZXR1cm4gd29yZEJyZWFrU2VhcmNoU3RhcnQgPT0gc3RhcnQ7CiB9CiAK
QEAgLTIyMTEsNyArMjIxMSw3IEBAIG5leHRNYXRjaDoKICAgICAgICAgICAgIC8vIGRldGVybWlu
aW5nIGlmIGl0IGlzIGF0IGEgd29yZCBib3VuZGFyeS4KICAgICAgICAgICAgIHVuc2lnbmVkIHdv
cmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IG1hdGNoU3RhcnQ7CiAgICAgICAgICAgICBVMTZfQkFD
S18xKG1fYnVmZmVyLmRhdGEoKSwgMCwgd29yZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KTsKLSAgICAg
ICAgICAgIHdvcmRCb3VuZGFyeUNvbnRleHRTdGFydCA9IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5
Q29udGV4dChTdHJpbmdWaWV3KG1fYnVmZmVyLmRhdGEoKSwgd29yZEJvdW5kYXJ5Q29udGV4dFN0
YXJ0KSk7CisgICAgICAgICAgICB3b3JkQm91bmRhcnlDb250ZXh0U3RhcnQgPSBQQUw6OnN0YXJ0
T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChTdHJpbmdWaWV3KG1fYnVmZmVyLmRhdGEoKSwgd29y
ZEJvdW5kYXJ5Q29udGV4dFN0YXJ0KSk7CiAgICAgICAgICAgICBvdmVybGFwID0gc3RkOjptaW4o
c2l6ZSAtIDEsIHN0ZDo6bWF4KG92ZXJsYXAsIHNpemUgLSB3b3JkQm91bmRhcnlDb250ZXh0U3Rh
cnQpKTsKICAgICAgICAgfQogICAgICAgICBtZW1jcHkobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5kYXRhKCkgKyBzaXplIC0gb3ZlcmxhcCwgb3ZlcmxhcCAqIHNpemVvZihVQ2hhcikpOwpAQCAt
MjM4MCw3ICsyMzgwLDcgQEAgY29uc3RleHByIHVpbnQ2NF90IGNsYW1wZWRBZGQodWludDY0X3Qg
YSwgdWludDY0X3QgYikKICAgICByZXR1cm4gc3VtID49IGEgPyBzdW0gOiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CiB9CiAKLVNpbXBsZVJhbmdlIHJlc29sdmVDaGFyYWN0
ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIENoYXJhY3RlclJhbmdlIHJhbmdlLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvcnMgYmVoYXZpb3JzKQorU2ltcGxlUmFuZ2UgcmVzb2x2ZUNoYXJh
Y3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgUEFMOjpDaGFyYWN0ZXJSYW5nZSBy
YW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIGJlaGF2aW9ycykKIHsKICAgICBhdXRvIHJlc3Vs
dFJhbmdlID0gU2ltcGxlUmFuZ2UgeyByYW5nZS5sb2NhdGlvbiA/IHNjb3BlLmVuZCA6IHNjb3Bl
LnN0YXJ0LCAocmFuZ2UubG9jYXRpb24gfHwgcmFuZ2UubGVuZ3RoKSA/IHNjb3BlLmVuZCA6IHNj
b3BlLnN0YXJ0IH07CiAgICAgYXV0byByYW5nZUVuZCA9IGNsYW1wZWRBZGQocmFuZ2UubG9jYXRp
b24sIHJhbmdlLmxlbmd0aCk7CkBAIC0yNDg0LDcgKzI0ODQsNyBAQCBzdGF0aWMgY29uc3RleHBy
IFRleHRJdGVyYXRvckJlaGF2aW9ycyBmaW5kSXRlcmF0b3JPcHRpb25zKEZpbmRPcHRpb25zIG9w
dGlvbnMpCiAgICAgcmV0dXJuIGl0ZXJhdG9yT3B0aW9uczsKIH0KIAotc3RhdGljIHZvaWQgZm9y
RWFjaE1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQs
IEZpbmRPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEZ1bmN0aW9uPGJvb2woQ2hhcmFjdGVyUmFuZ2Up
PiYgbWF0Y2gpCitzdGF0aWMgdm9pZCBmb3JFYWNoTWF0Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgY29uc3QgRnVu
Y3Rpb248Ym9vbChQQUw6OkNoYXJhY3RlclJhbmdlKT4mIG1hdGNoKQogewogICAgIFNlYXJjaEJ1
ZmZlciBidWZmZXIodGFyZ2V0LCBvcHRpb25zKTsKICAgICBpZiAoYnVmZmVyLm5lZWRzTW9yZUNv
bnRleHQoKSkgewpAQCAtMjUxMSwxMyArMjUxMSwxMyBAQCBzdGF0aWMgdm9pZCBmb3JFYWNoTWF0
Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9w
dAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZV90IGxhc3RDaGFyYWN0ZXJJbkJ1ZmZl
ck9mZnNldCA9IGZpbmRJdGVyYXRvci5jaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAgICAgICAgIEFT
U0VSVChsYXN0Q2hhcmFjdGVySW5CdWZmZXJPZmZzZXQgPj0gbWF0Y2hTdGFydE9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAobWF0Y2goQ2hhcmFjdGVyUmFuZ2UobGFzdENoYXJhY3RlckluQnVmZmVy
T2Zmc2V0IC0gbWF0Y2hTdGFydE9mZnNldCwgbmV3TWF0Y2hMZW5ndGgpKSkKKyAgICAgICAgICAg
IGlmIChtYXRjaChQQUw6OkNoYXJhY3RlclJhbmdlKGxhc3RDaGFyYWN0ZXJJbkJ1ZmZlck9mZnNl
dCAtIG1hdGNoU3RhcnRPZmZzZXQsIG5ld01hdGNoTGVuZ3RoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgU2ltcGxlUmFuZ2UgcmFuZ2VG
b3JNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMsIENo
YXJhY3RlclJhbmdlIG1hdGNoKQorc3RhdGljIFNpbXBsZVJhbmdlIHJhbmdlRm9yTWF0Y2goY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCBQQUw6OkNoYXJhY3Rl
clJhbmdlIG1hdGNoKQogewogICAgIGF1dG8gbm9NYXRjaFJlc3VsdCA9IFsmXSAoKSB7CiAgICAg
ICAgIGF1dG8mIGJvdW5kYXJ5ID0gb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpID8gcmFuZ2Uu
c3RhcnQgOiByYW5nZS5lbmQ7CkBAIC0yNTQzLDkgKzI1NDMsOSBAQCBzdGF0aWMgU2ltcGxlUmFu
Z2UgcmFuZ2VGb3JNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIEZpbmRPcHRpb25zIG9w
dGlvbnMsCiAKIFNpbXBsZVJhbmdlIGZpbmRDbG9zZXN0UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVp
bnQ2NF90IHRhcmdldE9mZnNldCkKIHsKLSAgICBDaGFyYWN0ZXJSYW5nZSBjbG9zZXN0TWF0Y2g7
CisgICAgUEFMOjpDaGFyYWN0ZXJSYW5nZSBjbG9zZXN0TWF0Y2g7CiAgICAgdWludDY0X3QgY2xv
c2VzdE1hdGNoRGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7
Ci0gICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsmXSAoQ2hhcmFjdGVy
UmFuZ2UgbWF0Y2gpIHsKKyAgICBmb3JFYWNoTWF0Y2gocmFuZ2UsIHRhcmdldCwgb3B0aW9ucywg
WyZdIChQQUw6OkNoYXJhY3RlclJhbmdlIG1hdGNoKSB7CiAgICAgICAgIGF1dG8gZGlzdGFuY2Ug
PSBbXSAodWludDY0X3QgYSwgdWludDY0X3QgYikgLT4gdWludDY0X3QgewogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6YWJzKHN0YXRpY19jYXN0PGludDY0X3Q+KGEgLSBiKSk7CiAgICAgICAgIH07
CkBAIC0yNTY4LDggKzI1NjgsOCBAQCBTaW1wbGVSYW5nZSBmaW5kUGxhaW5UZXh0KGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcAogICAgIC8vIFdo
ZW4gc2VhcmNoaW5nIGZvcndhcmQgc3RvcCBzaW5jZSB3ZSB3YW50IHRoZSBmaXJzdCBtYXRjaC4K
ICAgICAvLyBXaGVuIHNlYXJjaGluZyBiYWNrd2FyZCBrZWVwIGdvaW5nIHNpbmNlIHdlIHdhbnQg
dGhlIGxhc3QgbWF0Y2guCiAgICAgYm9vbCBzdG9wQWZ0ZXJGaW5kaW5nTWF0Y2ggPSAhb3B0aW9u
cy5jb250YWlucyhCYWNrd2FyZHMpOwotICAgIENoYXJhY3RlclJhbmdlIGxhc3RNYXRjaEZvdW5k
OwotICAgIGZvckVhY2hNYXRjaChyYW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBbJl0gKENoYXJhY3Rl
clJhbmdlIG1hdGNoKSB7CisgICAgUEFMOjpDaGFyYWN0ZXJSYW5nZSBsYXN0TWF0Y2hGb3VuZDsK
KyAgICBmb3JFYWNoTWF0Y2gocmFuZ2UsIHRhcmdldCwgb3B0aW9ucywgWyZdIChQQUw6OkNoYXJh
Y3RlclJhbmdlIG1hdGNoKSB7CiAgICAgICAgIGxhc3RNYXRjaEZvdW5kID0gbWF0Y2g7CiAgICAg
ICAgIHJldHVybiBzdG9wQWZ0ZXJGaW5kaW5nTWF0Y2g7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCBhYjc3ZjQyMDZlYmEwNDM1MmYwZDUwZmUxMjJiMTdl
ZTFlNGI4YzFiLi43M2JkNWI1MGZiZGM0NDc0MGUwYzMyZjIxNzVkYzJlYTZkNzhlMjkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L0NoYXJhY3RlclJhbmdlLmg+CiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKICNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yVGV4dEJveC5oIgpAQCAtMzksMTAgKzM5LDEwIEBAIGNsYXNzIFJlbmRlclRleHRG
cmFnbWVudDsKIAogLy8gQ2hhcmFjdGVyIHJhbmdlcyBiYXNlZCBvbiBjaGFyYWN0ZXJzIGZyb20g
dGhlIHRleHQgaXRlcmF0b3IuCiBXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCBjaGFyYWN0ZXJDb3Vu
dChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9IHsgfSk7Ci1DaGFy
YWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiBzdGFydCwgY29u
c3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOwotQ2hhcmFjdGVy
UmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBjb25zdCBTaW1w
bGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9IHsgfSk7CitQQUw6OkNoYXJhY3RlclJh
bmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBTaW1w
bGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9IHsgfSk7CitQQUw6OkNoYXJhY3RlclJh
bmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgY29uc3QgU2ltcGxl
UmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOwogQm91bmRhcnlQb2ludCByZXNv
bHZlQ2hhcmFjdGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCB1aW50NjRfdCwg
VGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9KTsKLVdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIENoYXJhY3Rl
clJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgPSB7IH0pOworV0VCQ09SRV9FWFBPUlQgU2lt
cGxlUmFuZ2UgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwg
UEFMOjpDaGFyYWN0ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzID0geyB9KTsKIAogLy8g
VGV4dCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWlu
VGV4dChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9ycyA9IHsgfSwgYm9v
bCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CkBAIC0yOTMsMTIgKzI5MywxMiBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQgeyB0cnVlIH07CiB9OwogCi1pbmxpbmUgQ2hhcmFj
dGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIGJlaGF2aW9ycykKK2lu
bGluZSBQQUw6OkNoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9p
bnQmIHN0YXJ0LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9y
cyBiZWhhdmlvcnMpCiB7CiAgICAgcmV0dXJuIHsgY2hhcmFjdGVyQ291bnQoeyBzdGFydCwgcmFu
Z2Uuc3RhcnQgfSwgYmVoYXZpb3JzKSwgY2hhcmFjdGVyQ291bnQocmFuZ2UsIGJlaGF2aW9ycykg
fTsKIH0KIAotaW5saW5lIENoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiBzY29wZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhh
dmlvcnMgYmVoYXZpb3JzKQoraW5saW5lIFBBTDo6Q2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRl
eHRJdGVyYXRvckJlaGF2aW9ycyBiZWhhdmlvcnMpCiB7CiAgICAgcmV0dXJuIGNoYXJhY3RlclJh
bmdlKHNjb3BlLnN0YXJ0LCByYW5nZSwgYmVoYXZpb3JzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCAyYzNlMDc4YTMyYTJmZWYyMWRhNGZlY2Y5
ZGRhZGI3MTQyYWVmMzMzLi5hYjk2OTVjZDQzN2ZjZDNiMTNiYTcxMjgyOGI2N2Y2NzY5MTM0NTI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC0xMjAs
MTQgKzEyMCwxNCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQ
b3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsKLSAgICBUZXh0RGlyZWN0
aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9IHAucHJpbWFyeURpcmVjdGlvbigpOwogCiAg
ICAgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJDYWNoZSBvcmRlckNhY2hlOwogCiAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byBbcnVuLCBvZmZzZXRdID0gcC5pbmxpbmVS
dW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbik7CiAgICAgICAgIGlmICgh
cnVuKQotICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9u
KSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
ID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5l
eHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKIAogICAgICAgICBh
dXRvKiByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCBQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkg
Y29uc3QKICAgICAgICAgICAgIGlmICghcmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAg
ICAgIHJ1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFy
dW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVl
cFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9u
KTsKICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7CiAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gcnVuLT5yaWdodG1vc3RDYXJldE9mZnNldCgpOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3Np
dGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICAgICAg
ICAgIC8vIE92ZXJzaG90IHRvIHRoZSBsZWZ0LgogICAgICAgICAgICAgICAgIGF1dG8gcHJldmlv
dXNSdW4gPSBydW4tPnByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXByZXZpb3VzUnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBvc2l0aW9u
IHBvc2l0aW9uT25MZWZ0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIg
PyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAg
ICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
bV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9z
aXRpb24pOwogICAgICAgICAgICAgICAgICAgICBhdXRvIHJ1bk9uTGVmdCA9IHBvc2l0aW9uT25M
ZWZ0LmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKS5ydW47
CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5PbkxlZnQgJiYgcnVuT25MZWZ0LT5saW5lKCkg
PT0gcnVuLT5saW5lKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKQEAgLTE3NiwxMyArMTc2LDEzIEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZp
c3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogCiAgICAgICAgICAgICBpZiAocnVuLT5k
aXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFw
cmV2aW91c1J1bikgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxTdGFydCA9IHBy
aW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gbG9naWNhbFN0YXJ0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUgogICAgICAgICAgICAgICAgICAgICAgICAgPyBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RM
ZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShydW4tPmxpbmUoKSwgb3JkZXJDYWNoZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIDogSW5saW5lSXRlcmF0b3I6Omxhc3RMZWFmT25MaW5l
SW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShydW4tPmxpbmUoKSwgb3JkZXJDYWNoZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChsb2dpY2FsU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJ1biA9IGxvZ2ljYWxTdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0g
JnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1h
cnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5taW5pbXVtQ2FyZXRPZmZz
ZXQoKSA6IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8g
cnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMjQzLDcgKzI0Myw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6
bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICAgICAgICAgICAg
ICBsZXZlbCA9IHJ1bi0+YmlkaUxldmVsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWluaW11
bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9mZnNldCgpOworICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIg
PyBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yODYsMTQg
KzI4NiwxNCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9z
aXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7Ci0gICAgVGV4dERpcmVjdGlv
biBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0
RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKIAogICAg
IElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9yZGVyQ2FjaGUgb3JkZXJDYWNoZTsKIAogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gW3J1biwgb2Zmc2V0XSA9IHAuaW5saW5lUnVu
QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIXJ1
bikKLSAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAg
ICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/
IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3Vz
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKICAgICAgICAgYXV0
byogcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogCkBAIC0zMDQsNyArMzA0LDcgQEAgUG9z
aXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBj
b25zdAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKSB7CiAgICAgICAgICAgICAg
ICAgcnVuLnRyYXZlcnNlTmV4dE9uTGluZSgpOwogICAgICAgICAgICAgICAgIGlmICghcnVuKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikg
OiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9u
KSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtMzIzLDcgKzMyMyw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6
cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAv
LyBPdmVyc2hvdCB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAgICAgYXV0byBuZXh0UnVuID0g
cnVuLT5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAgICAgICAgICBpZiAo
IW5leHRSdW4pIHsKLSAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb25PblJpZ2h0
ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBQb3NpdGlv
biBwb3NpdGlvbk9uUmlnaHQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDog
cHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBydW5PblJpZ2h0ID0gcG9zaXRpb25PblJpZ2h0LmlubGluZVJ1
bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKS5ydW47CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChydW5PblJpZ2h0ICYmIHJ1bk9uUmlnaHQtPmxpbmUoKSA9PSBydW4tPmxp
bmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwpAQCAtMzQy
LDE0ICszNDIsMTQgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUoKSBjb25zdAogCiAgICAgICAgICAgICBpZiAocnVuLT5kaXJlY3Rpb24o
KSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UnVuKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbEVuZCA9IHByaW1hcnlEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSCisgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbEVu
ZCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIKICAgICAgICAg
ICAgICAgICAgICAgICAgID8gSW5saW5lSXRlcmF0b3I6Omxhc3RMZWFmT25MaW5lSW5Mb2dpY2Fs
T3JkZXJXaXRoTm9kZShydW4tPmxpbmUoKSwgb3JkZXJDYWNoZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIDogSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0
aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpOwogCiAgICAgICAgICAgICAgICAgICAgIGlm
IChsb2dpY2FsRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW4gPSBsb2dpY2FsRW5k
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1heGltdW1DYXJldE9mZnNldCgpIDogcnVuLT5taW5pbXVt
Q2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1heGltdW1DYXJldE9m
ZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00MTMs
NyArNDEzLDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IHJ1bi0+Ymlk
aUxldmVsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0g
JnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCkgOiBy
dW4tPm1pbmltdW1DYXJldE9mZnNldCgpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1h
cnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1heGltdW1DYXJl
dE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02MzYsNyArNjM2LDcgQEAgSW5saW5lUnVu
QW5kT2Zmc2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KCkgY29uc3QKICAg
ICByZXR1cm4gbV9kZWVwUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHkpOwog
fQogCi1JbmxpbmVSdW5BbmRPZmZzZXQgVmlzaWJsZVBvc2l0aW9uOjppbmxpbmVSdW5BbmRPZmZz
ZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdAorSW5saW5lUnVuQW5kT2Zm
c2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KFBBTDo6VGV4dERpcmVjdGlv
biBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdAogewogICAgIHJldHVybiBtX2RlZXBQb3NpdGlvbi5p
bmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCBhOTJjYTgxYmNlZmUzZTQ3
NmM0YzU0NjYwZDk3MjA4NGVlZWNmYWM2Li5jYjk4NDMwM2JkZDE1YTUxYjRkZWQ5MzVjMzlmNzRi
Mzg1MzhhNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAg
LTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05vdE51bGwoKSA/IG1fZGVlcFBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7IH0KIAogICAg
IElubGluZVJ1bkFuZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoKSBjb25zdDsKLSAgICBJbmxp
bmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURp
cmVjdGlvbikgY29uc3Q7CisgICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGluZVJ1bkFuZE9mZnNl
dChQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3Q7CiAKICAgICBzdHJ1
Y3QgTG9jYWxDYXJldFJlY3QgewogICAgICAgICBMYXlvdXRSZWN0IHJlY3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggYzY4MmU4Mjg5NmEwNWQyYTc4NDMzODc3
M2NiMzBkY2ZkNTFjMjQ1MC4uZWU3N2RjNzEwMTZmZTJhZjA4MGJjOTFhNTEyYzUxMmJmZWRlOTMy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtNDEsNyArNDEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRp
b24uaCIKICNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKyNp
bmNsdWRlIDxwYWwvdGV4dC9UZXh0Qm91bmRhcmllcy5oPgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx1bmljb2RlL3Vi
cmsuaD4KQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdv
cmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbgogCiAgICAg
dmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGly
ZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGly
ZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7
CiAgICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBwcmV2aW91c2x5VmlzaXRlZFJ1
bjsKICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudCA9IHZpc2libGVQb3NpdGlvbjsKICAgICBz
dGQ6Om9wdGlvbmFsPFZpc2libGVQb3NpdGlvbj4gcHJldmlvdXNQb3NpdGlvbjsKQEAgLTM2Niw3
ICszNjYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbgogCiAgICAgICAgIGJvb2wgaXNXb3Jk
QnJlYWs7CiAgICAgICAgIGJvb2wgYm94SGFzU2FtZURpcmVjdGlvbmFsaXR5QXNCbG9jayA9IHJ1
bi0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb247Ci0gICAgICAgIGJvb2wgbW92aW5nQmFj
a3dhcmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYmIHJ1bi0+ZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6TFRSKSB8fCAoZGlyZWN0aW9uID09IE1vdmVSaWdodCAmJiBydW4tPmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCk7CisgICAgICAgIGJvb2wgbW92aW5nQmFja3dh
cmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYmIHJ1bi0+ZGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIpIHx8IChkaXJlY3Rpb24gPT0gTW92ZVJpZ2h0ICYmIHJ1bi0+ZGly
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwogICAgICAgICBpZiAoKHNraXBz
U3BhY2VXaGVuTW92aW5nUmlnaHQgJiYgYm94SGFzU2FtZURpcmVjdGlvbmFsaXR5QXNCbG9jaykK
ICAgICAgICAgICAgIHx8ICghc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCAmJiBtb3ZpbmdCYWNr
d2FyZCkpIHsKICAgICAgICAgICAgIGJvb2wgbG9naWNhbFN0YXJ0SW5SZW5kZXJlciA9IG9mZnNl
dEluUnVuID09IHRleHRSdW4tPnN0YXJ0KCkgJiYgcHJldmlvdXNSdW5JbkRpZmZlcmVudExpbmU7
CkBAIC0zOTYsOCArMzk2LDggQEAgVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGJvb2wgc2sKICAgICAKICAgICAv
LyBGSVhNRTogSG93IHNob3VsZCB3ZSBoYW5kbGUgYSBub24tZWRpdGFibGUgcG9zaXRpb24/CiAg
ICAgaWYgKGxlZnRXb3JkQnJlYWsuaXNOdWxsKCkgJiYgaXNFZGl0YWJsZVBvc2l0aW9uKHZpc2li
bGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAgICBUZXh0RGlyZWN0aW9uIGJs
b2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGxlZnRXb3JkQnJlYWsgPSBibG9ja0RpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBzdGFydE9mRWRpdGFibGVDb250ZW50KHZpc2libGVQ
b3NpdGlvbikgOiBlbmRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pOworICAgICAg
ICBQQUw6OlRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2lu
Z0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgbGVmdFdv
cmRCcmVhayA9IGJsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gc3Rh
cnRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pIDogZW5kT2ZFZGl0YWJsZUNvbnRl
bnQodmlzaWJsZVBvc2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIGxlZnRXb3JkQnJlYWs7CiB9
CkBAIC00MDksOCArNDA5LDggQEAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBib29sIHMKIAogICAgIC8vIEZJ
WE1FOiBIb3cgc2hvdWxkIHdlIGhhbmRsZSBhIG5vbi1lZGl0YWJsZSBwb3NpdGlvbj8KICAgICBp
ZiAocmlnaHRXb3JkQnJlYWsuaXNOdWxsKCkgJiYgaXNFZGl0YWJsZVBvc2l0aW9uKHZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAgICBUZXh0RGlyZWN0aW9uIGJsb2Nr
RGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJpZ2h0V29yZEJyZWFrID0gYmxvY2tEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0
aW9uKSA6IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAg
UEFMOjpUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgIHJpZ2h0V29y
ZEJyZWFrID0gYmxvY2tEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBlbmRP
ZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pIDogc3RhcnRPZkVkaXRhYmxlQ29udGVu
dCh2aXNpYmxlUG9zaXRpb24pOwogICAgIH0KICAgICByZXR1cm4gcmlnaHRXb3JkQnJlYWs7CiB9
CkBAIC00NDksNyArNDQ5LDcgQEAgdW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIGZvcndhcmRzU2NhblJhbmdlLCBWZWN0b3I8VUNoYXIKICAgICBUZXh0SXRl
cmF0b3IgZm9yd2FyZHNJdGVyYXRvcihmb3J3YXJkc1NjYW5SYW5nZSk7CiAgICAgd2hpbGUgKCFm
b3J3YXJkc0l0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgU3RyaW5nVmlldyB0ZXh0ID0gZm9y
d2FyZHNJdGVyYXRvci50ZXh0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBlbmRPZkZpcnN0V29y
ZEJvdW5kYXJ5Q29udGV4dCh0ZXh0KTsKKyAgICAgICAgdW5zaWduZWQgaSA9IFBBTDo6ZW5kT2ZG
aXJzdFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dCk7CiAgICAgICAgIGFwcGVuZChzdHJpbmcsIHRl
eHQuc3Vic3RyaW5nKDAsIGkpKTsKICAgICAgICAgc3VmZml4TGVuZ3RoICs9IGk7CiAgICAgICAg
IGlmIChpIDwgdGV4dC5sZW5ndGgoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB1bnNpZ25lZCBwcmVm
aXhMZW5ndGhGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgYmFja3dhcmRzU2NhblJhbmdlLCBW
ZWN0b3I8VUNoYQogICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRz
SXRlcmF0b3IoYmFja3dhcmRzU2NhblJhbmdlKTsKICAgICB3aGlsZSAoIWJhY2t3YXJkc0l0ZXJh
dG9yLmF0RW5kKCkpIHsKICAgICAgICAgU3RyaW5nVmlldyB0ZXh0ID0gYmFja3dhcmRzSXRlcmF0
b3IudGV4dCgpOwotICAgICAgICBpbnQgaSA9IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4
dCh0ZXh0KTsKKyAgICAgICAgaW50IGkgPSBQQUw6OnN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29u
dGV4dCh0ZXh0KTsKICAgICAgICAgcHJlcGVuZChzdHJpbmcsIHRleHQuc3Vic3RyaW5nKGkpKTsK
ICAgICAgICAgcHJlZml4TGVuZ3RoICs9IHRleHQubGVuZ3RoKCkgLSBpOwogICAgICAgICBpZiAo
aSA+IDApCkBAIC01NTgsNyArNTU4LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEJvdW5kYXIKICAgICAg
ICAgZm9yIChUZXh0SXRlcmF0b3IgZm9yd2FyZHNJdGVyYXRvcigqZm9yd2FyZHNTY2FuUmFuZ2Up
OyAhZm9yd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBmb3J3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkK
ICAgICAgICAgICAgIGFwcGVuZChzdHJpbmcsIGZvcndhcmRzSXRlcmF0b3IudGV4dCgpKTsKICAg
ICAgICAgc3VmZml4TGVuZ3RoID0gc3RyaW5nLnNpemUoKTsKLSAgICB9IGVsc2UgaWYgKHJlcXVp
cmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShwb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpIHsK
KyAgICB9IGVsc2UgaWYgKFBBTDo6cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KHBvc2l0
aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkgewogICAgICAgICBhdXRvIGZvcndhcmRzU2NhblJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKHNlYXJjaFJhbmdlLT5lbmQsIG1ha2VCb3VuZGFyeVBvaW50QWZ0
ZXJOb2RlQ29udGVudHMoKmJvdW5kYXJ5KSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN1ZmZp
eExlbmd0aEZvclJhbmdlKGZvcndhcmRzU2NhblJhbmdlLCBzdHJpbmcpOwogICAgIH0KQEAgLTU5
NSw3ICs1OTUsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoRnVuYwogICAgIFZlY3RvcjxVQ2hhciwg
MTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAKLSAgICBpZiAo
cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQWZ0ZXIoKSkpIHsKKyAg
ICBpZiAoUEFMOjpyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5jaGFyYWN0ZXJBZnRl
cigpKSkgewogICAgICAgICBhdXRvIGJhY2t3YXJkc1NjYW5SYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhib3VuZGFyeURvY3VtZW50KSwg
Yyk7CiAgICAgICAgIGlmICghYmFja3dhcmRzU2NhblJhbmdlKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKQEAgLTYzOCwxNCArNjM4LDE0IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiB1bnNp
Z25lZCBzdGFydFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIHVuc2lnbmVkIG9mZnNldCwg
Qm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IG1heUhhdmVNb3JlQ29udGV4dCwgYm9v
bCYgbmVlZE1vcmVDb250ZXh0KQogewogICAgIEFTU0VSVChvZmZzZXQpOwotICAgIGlmIChtYXlI
YXZlTW9yZUNvbnRleHQgJiYgIXN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0LnN1
YnN0cmluZygwLCBvZmZzZXQpKSkgeworICAgIGlmIChtYXlIYXZlTW9yZUNvbnRleHQgJiYgIVBB
TDo6c3RhcnRPZkxhc3RXb3JkQm91bmRhcnlDb250ZXh0KHRleHQuc3Vic3RyaW5nKDAsIG9mZnNl
dCkpKSB7CiAgICAgICAgIG5lZWRNb3JlQ29udGV4dCA9IHRydWU7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICBuZWVkTW9yZUNvbnRleHQgPSBmYWxzZTsKICAgICBpbnQgc3RhcnQsIGVu
ZDsKICAgICBVMTZfQkFDS18xKHRleHQsIDAsIG9mZnNldCk7Ci0gICAgZmluZFdvcmRCb3VuZGFy
eSh0ZXh0LCBvZmZzZXQsICZzdGFydCwgJmVuZCk7CisgICAgUEFMOjpmaW5kV29yZEJvdW5kYXJ5
KHRleHQsIG9mZnNldCwgJnN0YXJ0LCAmZW5kKTsKICAgICByZXR1cm4gc3RhcnQ7CiB9CiAKQEAg
LTY2OSwxMyArNjY5LDEzIEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mV29yZChjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGMsIEVXb3JkU2lkZSBzaWRlKQogdW5zaWduZWQgZW5kV29yZEJvdW5kYXJ5
KFN0cmluZ1ZpZXcgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJjaENvbnRleHRB
dmFpbGFiaWxpdHkgbWF5SGF2ZU1vcmVDb250ZXh0LCBib29sJiBuZWVkTW9yZUNvbnRleHQpCiB7
CiAgICAgQVNTRVJUKG9mZnNldCA8PSB0ZXh0Lmxlbmd0aCgpKTsKLSAgICBpZiAobWF5SGF2ZU1v
cmVDb250ZXh0ICYmIGVuZE9mRmlyc3RXb3JkQm91bmRhcnlDb250ZXh0KHRleHQuc3Vic3RyaW5n
KG9mZnNldCkpID09IHRleHQubGVuZ3RoKCkgLSBvZmZzZXQpIHsKKyAgICBpZiAobWF5SGF2ZU1v
cmVDb250ZXh0ICYmIFBBTDo6ZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQodGV4dC5zdWJz
dHJpbmcob2Zmc2V0KSkgPT0gdGV4dC5sZW5ndGgoKSAtIG9mZnNldCkgewogICAgICAgICBuZWVk
TW9yZUNvbnRleHQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGgoKTsKICAgICB9
CiAgICAgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CiAgICAgaW50IGVuZDsKLSAgICBmaW5kRW5k
V29yZEJvdW5kYXJ5KHRleHQsIG9mZnNldCwgJmVuZCk7CisgICAgUEFMOjpmaW5kRW5kV29yZEJv
dW5kYXJ5KHRleHQsIG9mZnNldCwgJmVuZCk7CiAgICAgcmV0dXJuIGVuZDsKIH0KIApAQCAtNjk3
LDEyICs2OTcsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mV29yZChjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGMsIEVXb3JkU2lkZSBzaWRlKQogCiBzdGF0aWMgdW5zaWduZWQgcHJldmlvdXNXb3Jk
UG9zaXRpb25Cb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIHVuc2lnbmVkIG9mZnNldCwgQm91bmRh
cnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5IG1heUhhdmVNb3JlQ29udGV4dCwgYm9vbCYgbmVl
ZE1vcmVDb250ZXh0KQogewotICAgIGlmIChtYXlIYXZlTW9yZUNvbnRleHQgJiYgIXN0YXJ0T2ZM
YXN0V29yZEJvdW5kYXJ5Q29udGV4dCh0ZXh0LnN1YnN0cmluZygwLCBvZmZzZXQpKSkgeworICAg
IGlmIChtYXlIYXZlTW9yZUNvbnRleHQgJiYgIVBBTDo6c3RhcnRPZkxhc3RXb3JkQm91bmRhcnlD
b250ZXh0KHRleHQuc3Vic3RyaW5nKDAsIG9mZnNldCkpKSB7CiAgICAgICAgIG5lZWRNb3JlQ29u
dGV4dCA9IHRydWU7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBuZWVkTW9yZUNvbnRl
eHQgPSBmYWxzZTsKLSAgICByZXR1cm4gZmluZE5leHRXb3JkRnJvbUluZGV4KHRleHQsIG9mZnNl
dCwgZmFsc2UpOworICAgIHJldHVybiBQQUw6OmZpbmROZXh0V29yZEZyb21JbmRleCh0ZXh0LCBv
ZmZzZXQsIGZhbHNlKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC03MTIsMTIgKzcxMiwxMiBAQCBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBwb3NpdGlvbikKIAogc3RhdGljIHVuc2lnbmVkIG5leHRXb3JkUG9zaXRpb25Cb3VuZGFyeShT
dHJpbmdWaWV3IHRleHQsIHVuc2lnbmVkIG9mZnNldCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZh
aWxhYmlsaXR5IG1heUhhdmVNb3JlQ29udGV4dCwgYm9vbCYgbmVlZE1vcmVDb250ZXh0KQogewot
ICAgIGlmIChtYXlIYXZlTW9yZUNvbnRleHQgJiYgZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRl
eHQodGV4dC5zdWJzdHJpbmcob2Zmc2V0KSkgPT0gdGV4dC5sZW5ndGgoKSAtIG9mZnNldCkgewor
ICAgIGlmIChtYXlIYXZlTW9yZUNvbnRleHQgJiYgUEFMOjplbmRPZkZpcnN0V29yZEJvdW5kYXJ5
Q29udGV4dCh0ZXh0LnN1YnN0cmluZyhvZmZzZXQpKSA9PSB0ZXh0Lmxlbmd0aCgpIC0gb2Zmc2V0
KSB7CiAgICAgICAgIG5lZWRNb3JlQ29udGV4dCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0ZXh0
Lmxlbmd0aCgpOwogICAgIH0KICAgICBuZWVkTW9yZUNvbnRleHQgPSBmYWxzZTsKLSAgICByZXR1
cm4gZmluZE5leHRXb3JkRnJvbUluZGV4KHRleHQsIG9mZnNldCwgdHJ1ZSk7CisgICAgcmV0dXJu
IFBBTDo6ZmluZE5leHRXb3JkRnJvbUluZGV4KHRleHQsIG9mZnNldCwgdHJ1ZSk7CiB9CiAKIFZp
c2libGVQb3NpdGlvbiBuZXh0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24pCkBAIC0xNDY3LDE0ICsxNDY3LDE0IEBAIGJvb2wgaXNFbmRPZkVkaXRhYmxlT3JOb25F
ZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwKQogICAgIHJldHVybiBwLmlz
Tm90TnVsbCgpICYmIHAubmV4dCgpLmlzTnVsbCgpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gbGVm
dEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSkKK1Zpc2libGVQb3NpdGlvbiBsZWZ0Qm91
bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBQQUw6OlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpCiB7Ci0gICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsb2dpY2FsU3RhcnRPZkxpbmUoYywgcmVhY2hlZEJv
dW5kYXJ5KSA6IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5KTsKKyAgICByZXR1
cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gbG9naWNhbFN0YXJ0T2ZM
aW5lKGMsIHJlYWNoZWRCb3VuZGFyeSkgOiBsb2dpY2FsRW5kT2ZMaW5lKGMsIHJlYWNoZWRCb3Vu
ZGFyeSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgYywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRC
b3VuZGFyeSkKK1Zpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYywgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCogcmVhY2hl
ZEJvdW5kYXJ5KQogewotICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRS
ID8gbG9naWNhbEVuZE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpIDogbG9naWNhbFN0YXJ0T2ZM
aW5lKGMsIHJlYWNoZWRCb3VuZGFyeSk7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUiA/IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5KSA6
IGxvZ2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpOwogfQogCiBzdGF0aWMgYm9v
bCBkaXJlY3Rpb25Jc0Rvd25zdHJlYW0oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmluZGV4IGE2ZGU0MjE1MjZkNDZlMjgyZmY0
MDc1NGY3MDkzODZiZDkzMzEwZjMuLjJmOTgwYTI1YjViYjBiNTlhYzBhZWEyM2Y3MWU5ZjQ2OWVl
MGY3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaApAQCAtNjMsOCArNjMs
OCBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwogVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKTsKIFZpc2libGVQb3NpdGlv
biBsb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wqIHJlYWNoZWRC
b3VuZGFyeSA9IG51bGxwdHIpOwogYm9vbCBpc0xvZ2ljYWxFbmRPZkxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJik7Ci1WaXNpYmxlUG9zaXRpb24gbGVmdEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYsIFRleHREaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7Ci1W
aXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOworVmlzaWJsZVBvc2l0aW9u
IGxlZnRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQQUw6OlRleHREaXJl
Y3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CitWaXNpYmxlUG9zaXRpb24gcmlnaHRCb3Vu
ZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQQUw6OlRleHREaXJlY3Rpb24sIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSk7CiAKIC8vIHBhcmFncmFwaHMgKHBlcmhhcHMgYSBtaXNub21l
ciwgY2FuIGJlIGRpdmlkZWQgYnkgbGluZSBicmVhayBlbGVtZW50cykKIFdFQkNPUkVfRVhQT1JU
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRl
eCBjMzI3NjhhOWE4MTNmZWJhYzIwYWNmNzI4NWVkNTdmNjdlOWUyYjk0Li44NjI5MzMyYjRhZDRi
NWExMGQ0MTkzYjA1MmE3ZjJlZDMwNTUwYjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCkBAIC01MDEsNyArNTAxLDcgQEAgTlNBcnJheSAqRGF0
YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRl
eHRSYW5nZSwgT3AKICAgICAgICAgICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gZnJhZ21lbnRSYW5n
ZXM7CiAgICAgICAgICAgICBDRkluZGV4IGZyYWdtZW50SW5kZXggPSBxdWVyeVJhbmdlLnN0YXJ0
LnF1ZXJ5SW5kZXg7CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCA9PSBxdWVyeVJhbmdl
LmVuZC5xdWVyeUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQ2hhcmFjdGVyUmFuZ2UgZnJhZ21l
bnRSYW5nZTsKKyAgICAgICAgICAgICAgICBQQUw6OkNoYXJhY3RlclJhbmdlIGZyYWdtZW50UmFu
Z2U7CiAgICAgICAgICAgICAgICAgZnJhZ21lbnRSYW5nZS5sb2NhdGlvbiA9IHF1ZXJ5UmFuZ2Uu
c3RhcnQub2Zmc2V0OwogICAgICAgICAgICAgICAgIGZyYWdtZW50UmFuZ2UubGVuZ3RoID0gcXVl
cnlSYW5nZS5lbmQub2Zmc2V0IC0gcXVlcnlSYW5nZS5zdGFydC5vZmZzZXQ7CiAgICAgICAgICAg
ICAgICAgZnJhZ21lbnRSYW5nZXMuYXBwZW5kKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShpdGVyYXRv
ci5yYW5nZSgpLCBmcmFnbWVudFJhbmdlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKaW5kZXggNmMzODFhYTcwMWM5NDA3MjY2MWNlMGUx
NTJmMjU5MWI1NDcxNDk5MS4uMzJmYjIxYmY5YTMyMjVhMmVhYTY2ZmEzY2NjZDBjZTlhMTk4ODY1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBl
LmNwcApAQCAtNjcsNDYgKzY3LDQ2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0
aWMgY29uc3QgaW50IG1zZWNQZXJNaW51dGUgPSA2MCAqIDEwMDA7CiBzdGF0aWMgY29uc3QgaW50
IG1zZWNQZXJTZWNvbmQgPSAxMDAwOwogCi12b2lkIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6
RGF0ZVRpbWVGb3JtYXRWYWxpZGF0b3I6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSBmaWVsZFR5cGUsIGludCkKK3ZvaWQgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpEYXRl
VGltZUZvcm1hdFZhbGlkYXRvcjo6dmlzaXRGaWVsZChQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGUgZmllbGRUeXBlLCBpbnQpCiB7CiAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKLSAgICBj
YXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVZZWFyOgorICAgIGNhc2UgUEFMOjpEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlWWVhcjoKICAgICAgICAgbV9yZXN1bHRzLmFkZChEYXRlVGltZUZv
cm1hdFZhbGlkYXRpb25SZXN1bHRzOjpIYXNZZWFyKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBj
YXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aDoKLSAgICBjYXNlIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVNb250aFN0YW5kQWxvbmU6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVNb250aDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZU1vbnRoU3RhbmRBbG9uZToKICAgICAgICAgbV9yZXN1bHRzLmFkZChEYXRlVGltZUZvcm1h
dFZhbGlkYXRpb25SZXN1bHRzOjpIYXNNb250aCk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2Fz
ZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlV2Vla09mWWVhcjoKKyAgICBjYXNlIFBBTDo6RGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtPZlllYXI6CiAgICAgICAgIG1fcmVzdWx0cy5hZGQo
RGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzV2Vlayk7CiAgICAgICAgIGJyZWFr
OwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aDoKKyAgICBj
YXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9udGg6CiAgICAgICAgIG1f
cmVzdWx0cy5hZGQoRGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzRGF5KTsKICAg
ICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVQZXJpb2Q6
CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVQZXJpb2Q6CiAgICAgICAg
IG1fcmVzdWx0cy5hZGQoRGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzTWVyaWRp
ZW0pOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZUhvdXIxMToKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTI6CisgICAg
Y2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTE6CisgICAgY2FzZSBQQUw6
OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTI6CiAgICAgICAgIG1fcmVzdWx0cy5hZGQo
RGF0ZVRpbWVGb3JtYXRWYWxpZGF0aW9uUmVzdWx0czo6SGFzSG91cik7CiAgICAgICAgIGJyZWFr
OwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjIzOgotICAgIGNhc2Ug
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVG
b3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZUhvdXIyNDoKICAgICAgICAgbV9yZXN1bHRzLmFkZChEYXRlVGltZUZvcm1hdFZhbGlk
YXRpb25SZXN1bHRzOjpIYXNIb3VyKTsKICAgICAgICAgbV9yZXN1bHRzLmFkZChEYXRlVGltZUZv
cm1hdFZhbGlkYXRpb25SZXN1bHRzOjpIYXNNZXJpZGllbSk7CiAgICAgICAgIGJyZWFrOwogCi0g
ICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWludXRlOgorICAgIGNhc2UgUEFMOjpE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWludXRlOgogICAgICAgICBtX3Jlc3VsdHMuYWRkKERh
dGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6Okhhc01pbnV0ZSk7CiAgICAgICAgIGJyZWFr
OwogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kOgorICAgIGNhc2Ug
UEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kOgogICAgICAgICBtX3Jlc3VsdHMu
YWRkKERhdGVUaW1lRm9ybWF0VmFsaWRhdGlvblJlc3VsdHM6Okhhc1NlY29uZCk7CiAgICAgICAg
IGJyZWFrOwogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5
cGU6OkRhdGVUaW1lRm9ybWF0VmFsaWRhdG9yOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWEKIAog
Ym9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OkRhdGVUaW1lRm9ybWF0VmFsaWRhdG9yOjp2
YWxpZGF0ZUZvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlJiBpbnB1dFR5cGUpCiB7Ci0gICAgaWYgKCFEYXRlVGltZUZvcm1hdDo6cGFyc2Uo
Zm9ybWF0LCAqdGhpcykpCisgICAgaWYgKCFQQUw6OkRhdGVUaW1lRm9ybWF0OjpwYXJzZShmb3Jt
YXQsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBpbnB1dFR5cGUu
aXNWYWxpZEZvcm1hdChtX3Jlc3VsdHMpOwogfQpAQCAtNTQ0LDcgKzU0NCw3IEBAIGJvb2wgQmFz
ZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpzZXR1cERhdGVUaW1lQ2hvb3NlclBhcmFtZXRlcnMoRGF0
ZVRpbWVDaG9vc2VyUGFyCiAgICAgcGFyYW1ldGVycy5jdXJyZW50VmFsdWUgPSBlbGVtZW50LnZh
bHVlKCk7CiAKICAgICBhdXRvKiBjb21wdXRlZFN0eWxlID0gZWxlbWVudC5jb21wdXRlZFN0eWxl
KCk7Ci0gICAgcGFyYW1ldGVycy5pc0FuY2hvckVsZW1lbnRSVEwgPSBjb21wdXRlZFN0eWxlLT5k
aXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgcGFyYW1ldGVycy5pc0FuY2hv
ckVsZW1lbnRSVEwgPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTDsKICAgICBwYXJhbWV0ZXJzLnVzZURhcmtBcHBlYXJhbmNlID0gZG9jdW1lbnQu
dXNlRGFya0FwcGVhcmFuY2UoY29tcHV0ZWRTdHlsZSk7CiAKICAgICBhdXRvIGRhdGUgPSBwYXJz
ZVRvRGF0ZUNvbXBvbmVudHMoZWxlbWVudC52YWx1ZSgpKS52YWx1ZV9vcihEYXRlQ29tcG9uZW50
cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5w
dXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5o
CmluZGV4IDY4OTEwNWIzNjUxYzYzYmI5ZmZkYWExZTljZDA4NDFjMWQwNjQzYTEuLmE5MjEzMmUz
MmQxNTM2NjdkYmI5Nzg5NTU3NDkzOGE5NmJmZmE2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuaApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1
ZGUgIkRhdGVUaW1lQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkRhdGVUaW1lQ2hvb3NlckNsaWVudC5o
IgogI2luY2x1ZGUgIkRhdGVUaW1lRWRpdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJEYXRlVGltZUZv
cm1hdC5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0RhdGVUaW1lRm9ybWF0Lmg+CiAjaW5jbHVkZSAi
SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBAIC03OSwxMSArNzks
MTEgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNv
bnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIGNsYXNzIERhdGVUaW1lRm9ybWF0VmFsaWRhdG9y
IGZpbmFsIDogcHVibGljIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgeworICAgIGNsYXNz
IERhdGVUaW1lRm9ybWF0VmFsaWRhdG9yIGZpbmFsIDogcHVibGljIFBBTDo6RGF0ZVRpbWVGb3Jt
YXQ6OlRva2VuSGFuZGxlciB7CiAgICAgcHVibGljOgogICAgICAgICBEYXRlVGltZUZvcm1hdFZh
bGlkYXRvcigpIHsgfQogCi0gICAgICAgIHZvaWQgdmlzaXRGaWVsZChEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlLCBpbnQpOworICAgICAgICB2b2lkIHZpc2l0RmllbGQoUEFMOjpEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlLCBpbnQpOwogICAgICAgICB2b2lkIHZpc2l0TGl0ZXJhbChjb25zdCBT
dHJpbmcmKSB7IH0KIAogICAgICAgICBib29sIHZhbGlkYXRlRm9ybWF0KGNvbnN0IFN0cmluZyYg
Zm9ybWF0LCBjb25zdCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKaW5kZXggNzUyMzAxN2JhNzI5NDA1NjNi
NzVmNDY2YTY4ZWQxY2NiM2RlZThiYS4uYTc4MjZkZmI4ZjJiMTkxMjFlZGRjYTkzMTZjZjVmNDJh
ZTRkMTIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5j
cHAKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjph
cHBlbmQoUmVmUHRyPFN0cmluZ0ltcGw+JiYgaW5wdXRTb3VyY2UpCiAgICAgYm9vbCBmb3VuZE5l
d0xpbmUgPSBmYWxzZTsKIAogICAgIG1fZGVzdCA9IG1fYnVmZmVyOwotICAgIFNlZ21lbnRlZFN0
cmluZyBzdHJpbmcgeyBTdHJpbmcgeyBXVEZNb3ZlKGlucHV0U291cmNlKSB9IH07CisgICAgUEFM
OjpTZWdtZW50ZWRTdHJpbmcgc3RyaW5nIHsgU3RyaW5nIHsgV1RGTW92ZShpbnB1dFNvdXJjZSkg
fSB9OwogICAgIHdoaWxlICghc3RyaW5nLmlzRW1wdHkoKSkgewogICAgICAgICBVQ2hhciBjID0g
c3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAppbmRleCBhNzFhNjNiMTBkMjU3ODgyOTIxZDc1Mzk0MDY4MWM2MTZlMmMzNTMzLi5mMGEyOGIx
MDlmYjMzN2QwOTIwYmJiOTk1ZjBiYTdmZGY0NWM0NDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcApAQCAtODk4LDE4ICs4OTgsMTggQEAgYm9vbCBIVE1MRWxlbWVudDo6aGFzRGly
ZWN0aW9uQXV0bygpIGNvbnN0CiAgICAgcmV0dXJuIChoYXNUYWdOYW1lKGJkaVRhZykgJiYgZGly
ZWN0aW9uLmlzTnVsbCgpKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3Rp
b24sICJhdXRvIik7CiB9CiAKLVRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFs
aXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3QKK1BBTDo6VGV4dERp
cmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUo
Ym9vbCYgaXNBdXRvKSBjb25zdAogewogICAgIGlmICghKHNlbGZPckFuY2VzdG9ySGFzRGlyQXV0
b0F0dHJpYnV0ZSgpICYmIGhhc0RpcmVjdGlvbkF1dG8oKSkpIHsKICAgICAgICAgaXNBdXRvID0g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVy
biBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9CiAKICAgICBpc0F1dG8gPSB0cnVlOwog
ICAgIHJldHVybiBkaXJlY3Rpb25hbGl0eSgpOwogfQogCi1UZXh0RGlyZWN0aW9uIEhUTUxFbGVt
ZW50OjpkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkg
Y29uc3QKK1BBTDo6VGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9k
ZSoqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4
dEZpZWxkKCkpIHsKICAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRN
TEVsZW1lbnQmPigqdGhpcykpOwpAQCAtOTE3LDcgKzkxNyw3IEBAIFRleHREaXJlY3Rpb24gSFRN
TEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHRO
b2RlKSBjCiAgICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVu
dC52YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0
eSk7CiAgICAgICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQogICAgICAgICAg
ICAgKnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0
eSA/ICZ0ZXh0RWxlbWVudCA6IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAodGV4dERpcmVjdGlv
biA9PSBVX0xFRlRfVE9fUklHSFQpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVjdGlv
bjo6UlRMOworICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hU
KSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAg
ICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaXJzdENoaWxkKCk7CkBAIC05NDQsMTQg
Kzk0NCwxNCBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eShOb2Rl
Kiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgICAgICAgICAgaWYgKGhhc1N0
cm9uZ0RpcmVjdGlvbmFsaXR5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ0RpcmVjdGlv
bmFsaXR5VGV4dE5vZGUpCiAgICAgICAgICAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlID0gbm9kZS5nZXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJl
Y3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRleHREaXJl
Y3Rpb246OlJUTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9M
RUZUX1RPX1JJR0hUKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUsIHRoaXMpOwogICAgIH0KICAgICBpZiAoc3Ryb25nRGlyZWN0
aW9uYWxpdHlUZXh0Tm9kZSkKICAgICAgICAgKnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUg
PSBudWxscHRyOwotICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogfQogCiB2b2lkIEhUTUxFbGVtZW50OjpkaXJBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtOTY5LDcgKzk2OSw3IEBAIHZv
aWQgSFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0
cmlidXRlQ2hhbmdlZChFbGVtZW50CiB7CiAgICAgQVNTRVJUKHNlbGZPckFuY2VzdG9ySGFzRGly
QXV0b0F0dHJpYnV0ZSgpKTsKICAgICBOb2RlKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2Rl
OwotICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJv
bmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERp
cmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKTsK
ICAgICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KGNoaWxkLCBmYWxzZSk7CiAgICAgaWYg
KCFyZW5kZXJlcigpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gdGV4dERp
cmVjdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtOTg0LDcgKzk4NCw3IEBAIHZvaWQgSFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRlQ2hh
bmdlZChFbGVtZW50CiB2b2lkIEhUTUxFbGVtZW50OjpjYWxjdWxhdGVBbmRBZGp1c3REaXJlY3Rp
b25hbGl0eSgpCiB7CiAgICAgTm9kZSogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZTsKLSAg
ICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGly
ZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24gPSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAg
c2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSh0aGlzLCB0cnVlLCBzdHJvbmdEaXJlY3Rpb25h
bGl0eVRleHROb2RlKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgp
LmRpcmVjdGlvbigpICE9IHRleHREaXJlY3Rpb24pCiAgICAgICAgIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAppbmRleCAyODY5NDI4MWMxOGY1
OWE2ODZlY2Y1MTJkNjZmN2RmOGI5OGM1NzFiLi5lZTU4MmRiYjEwMGJkN2M4YTZjMjEyNTM1Yjc1
YjRkZTE0MjE2ZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCkBAIC04OCw3ICs4OCw3
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpcihjb25zdCBBdG9tU3Ry
aW5nJik7CiAKICAgICBib29sIGhhc0RpcmVjdGlvbkF1dG8oKSBjb25zdDsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykg
Y29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRv
QXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQpAQCAtMTczLDcgKzE3Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICB2b2lkIGFkanVzdERpcmVj
dGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRlQ2hhbmdlZChFbGVtZW50KiBjaGls
ZCk7CiAgICAgdm9pZCBhZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZHJlbkNo
YW5nZWQoRWxlbWVudCogYmVmb3JlQ2hhbmdlLCBDaGlsZENoYW5nZTo6VHlwZSk7Ci0gICAgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0
Tm9kZT0gMCkgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5KE5v
ZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlPSAwKSBjb25zdDsKIAogICAgIHN0YXRp
YyB2b2lkIHBvcHVsYXRlRXZlbnRIYW5kbGVyTmFtZU1hcChFdmVudEhhbmRsZXJOYW1lTWFwJiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QgdGFibGVbXSwgc2l6ZV90IHRhYmxlU2l6ZSk7CiAg
ICAgc3RhdGljIEV2ZW50SGFuZGxlck5hbWVNYXAgY3JlYXRlRXZlbnRIYW5kbGVyTmFtZU1hcCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAppbmRleCAxN2MxZjNlMDVjOTliZDZhZDRhZGNmNjc4ZDgzZmNhYjU3M2Y1OGJkLi4xZTg4
YTBkMjFlNWE5MTUyZjQxMjI4NjM2M2IwYjY2ZTkzYTkwMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNzY4LDE4ICs3
NjgsMTggQEAgU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JG
b3JtRGF0YSgpIGNvbnN0CiAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpbmVhZ2VPZlR5
cGU8SFRNTEVsZW1lbnQ+KCp0aGlzKSkgewogICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBlbGVt
ZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlyQXR0cik7CiAgICAgICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJydGwiKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICAgICAgICAgIHJl
dHVybiBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImx0ciIpKQotICAgICAgICAgICAgICAgIHJldHVy
biBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLCAiYXV0byIpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBpc0F1dG87CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRy
aWJ1dGUoaXNBdXRvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFI7CiAgICAgfSgpOwogCi0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIgPyAibHRyIl9zIDogInJ0bCJfczsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSID8gImx0ciJfcyA6ICJydGwiX3M7CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRNYXhMZW5ndGgoaW50IG1heExlbmd0
aCkKQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojph
ZGp1c3RJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50UwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXREaXJlY3Rp
b24oVGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICAgICAgdGV4dEJsb2NrU3R5bGUuc2V0RGlyZWN0
aW9uKFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCmluZGV4IDRlOTg1MTcwYzI4MzZlNjJmMjQy
YmRhMzg0MDE0ODVhYzA3OWQxNDcuLjlkOTNjMTk4NzUwMzdhMTczYTRhNWMyOGQ0NDc1MTI4MTVm
ODUwNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcApAQCAtNzks
OSArNzksOSBAQCBTdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6dGV4dCgpIGNvbnN0CiAgICAgcmV0
dXJuIFRleHROb2RlVHJhdmVyc2FsOjpjaGlsZFRleHRDb250ZW50KCp0aGlzKTsKIH0KIAotU3Ry
aW5nV2l0aERpcmVjdGlvbiBIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRXaXRoRGlyZWN0
aW9uKCkKK1BBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiBIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRl
ZFRleHRXaXRoRGlyZWN0aW9uKCkKIHsKLSAgICBhdXRvIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rp
b246OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwog
ICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0ZWRTdHlsZSgpKQogICAg
ICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24oKTsKICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCmluZGV4IDhjMzdhODliMTA5NjdmMGVi
NDk3MTYwNmE3ZWMwNDViZTY3NGIwZTQuLjViOGEwMTMxNGE4MjVkNDNkY2M0N2JlZTk0YWZiNDg5
NDVlZWQxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCkBAIC0yMyw3
ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU3RyaW5nV2l0aERpcmVjdGlvbi5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1N0cmluZ1dp
dGhEaXJlY3Rpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSw3ICszNSw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKIAotICAgIGNvbnN0IFN0
cmluZ1dpdGhEaXJlY3Rpb24mIHRleHRXaXRoRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
aXRsZTsgfQorICAgIGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGV4dFdpdGhEaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CiAKIHByaXZhdGU6CiAgICAgSFRNTFRp
dGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKQEAgLTQ0LDkgKzQ0
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBD
aGlsZENoYW5nZSYpIGZpbmFsOwogCi0gICAgU3RyaW5nV2l0aERpcmVjdGlvbiBjb21wdXRlZFRl
eHRXaXRoRGlyZWN0aW9uKCk7CisgICAgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uIGNvbXB1dGVk
VGV4dFdpdGhEaXJlY3Rpb24oKTsKIAotICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gbV90aXRsZTsK
KyAgICBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gbV90aXRsZTsKIH07CiAKIH0gLy9uYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwCmlu
ZGV4IDg5YTQzMjIyZTVjZmU4YzFlZDFkM2E3Mjk5Mzc0MjAxNDJlMTdjOTIuLjFlMzUzY2Q5MWVk
NTYyMmI1ZjQ2ZWJjMzg2ZWIyYjQ2N2Q0N2RlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9NZWRpYUZyYWdtZW50VVJJUGFyc2VyLmNwcApAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNs
dWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA0ZDU5NTBlMGNjMmJj
Y2U0YWEzMmRiMjdkYTNkODA3YTAxMDk3ZDk1Li44OTNlNjQ4ZGIxNDA3MDE4YzQzNjdjMTFiYjJm
MzU4YjA5ZTkyZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTE1NywyOCArMTU3LDI4IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250V2l0aG91dFVwZGF0aW5nU3R5bGUoY29u
c3QgU3RyaW5nJiBuZXdGb250CiAgICAgQVNTRVJUKHN0YXRlKCkuZm9udC5pc1BvcHVsYXRlZCgp
KTsKIH0KIAotaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBj
b21wdXRlZFN0eWxlKSBjb25zdAoraW5saW5lIFBBTDo6VGV4dERpcmVjdGlvbiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbihEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUpIGNvbnN0CiB7CiAgICAgYXV0byogc3R5bGUg
PSBjb21wdXRlZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQgPyBjYW52
YXMoKS5leGlzdGluZ0NvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKGNvbXB1dGVk
U3R5bGUpCiAgICAgICAgICpjb21wdXRlZFN0eWxlID0gc3R5bGU7CiAgICAgc3dpdGNoIChkaXJl
Y3Rpb24pIHsKICAgICBjYXNlIERpcmVjdGlvbjo6SW5oZXJpdDoKLSAgICAgICAgcmV0dXJuIHN0
eWxlID8gc3R5bGUtPmRpcmVjdGlvbigpIDogVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICBy
ZXR1cm4gc3R5bGUgPyBzdHlsZS0+ZGlyZWN0aW9uKCkgOiBQQUw6OlRleHREaXJlY3Rpb246OkxU
UjsKICAgICBjYXNlIERpcmVjdGlvbjo6UnRsOgotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlv
bjo6UlRMOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgY2Fz
ZSBEaXJlY3Rpb246Okx0cjoKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVy
biBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKIH0KIAogQ2FudmFzRGlyZWN0aW9uIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoc3RhdGUoKS5k
aXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KQogICAgICAgICBjYW52YXMoKS5kb2N1bWVu
dCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdG9UZXh0RGlyZWN0aW9uKHN0
YXRlKCkuZGlyZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBDYW52YXNEaXJlY3Rpb246
OlJ0bCA6IENhbnZhc0RpcmVjdGlvbjo6THRyOworICAgIHJldHVybiB0b1RleHREaXJlY3Rpb24o
c3RhdGUoKS5kaXJlY3Rpb24pID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMID8gQ2FudmFzRGly
ZWN0aW9uOjpSdGwgOiBDYW52YXNEaXJlY3Rpb246Okx0cjsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZG91YmxlIHgsIGRv
dWJsZSB5LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gbWF4V2lkdGgpCkBAIC0yMDcsNyArMjA3LDcg
QEAgUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1lYXN1cmVUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZTsKICAgICBhdXRvIGRpcmVjdGlvbiA9IHRvVGV4dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlv
biwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlICYm
IGlzT3ZlcnJpZGUoY29tcHV0ZWRTdHlsZS0+dW5pY29kZUJpZGkoKSk7Ci0gICAgVGV4dFJ1biB0
ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rp
b24sIG92ZXJyaWRlLCB0cnVlKTsKKyAgICBUZXh0UnVuIHRleHRSdW4obm9ybWFsaXplZFRleHQs
IDAsIDAsIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgdHJ1
ZSk7CiAgICAgcmV0dXJuIG1lYXN1cmVUZXh0SW50ZXJuYWwodGV4dFJ1bik7CiB9CiAKQEAgLTI0
MCw3ICsyNDAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRl
cm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGRvdWJsZSB4LCBkbwogICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBjb21wdXRlZFN0eWxlOwogICAgIGF1dG8gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0aW9u
KHN0YXRlKCkuZGlyZWN0aW9uLCAmY29tcHV0ZWRTdHlsZSk7CiAgICAgYm9vbCBvdmVycmlkZSA9
IGNvbXB1dGVkU3R5bGUgJiYgaXNPdmVycmlkZShjb21wdXRlZFN0eWxlLT51bmljb2RlQmlkaSgp
KTsKLSAgICBUZXh0UnVuIHRleHRSdW4obm9ybWFsaXplZFRleHQsIDAsIDAsIEFsbG93UmlnaHRF
eHBhbnNpb24sIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIHRydWUpOworICAgIFRleHRSdW4gdGV4dFJ1
bihub3JtYWxpemVkVGV4dCwgMCwgMCwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJlY3Rp
b24sIG92ZXJyaWRlLCB0cnVlKTsKICAgICBkcmF3VGV4dFVuY2hlY2tlZCh0ZXh0UnVuLCB4LCB5
LCBmaWxsLCBtYXhXaWR0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggNmI0OGU4Y2NmNTg4N2YxODli
NWJhNjZkYTVmYjM3ZTM3NjEzNDQxNC4uOGQ4NDFmZmY4ODEwYjU1MGRiNWQ3YmJlOGM0ZjE0OGMz
YmJkZjUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZHJhd0ZvY3VzSWZOZWVkZWRJbnRlcm5hbChjb25zdCBQYXRoJiwgRWxlbWVudCYpOwogCi0g
ICAgVGV4dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6RGlyZWN0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUgPSBudWxs
cHRyKSBjb25zdDsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OkRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBj
b21wdXRlZFN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDZkZWZlYjgxMmMzNzIyYzM4ZWEyZmM4ZDA3
OTFmYWUyOWIxNjBkNmUuLmNjNGViOTZmYmZiOTI3NTAwZjRlNWI5Nzk1YzAxZWZlN2IxMmFmYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0zMDEsNyArMzAxLDcgQEAgU3RyaW5nIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlOjpmb250U3RyaW5nKCkgY29uc3QKICAgICBj
b25zdCBhdXRvJiBmb250ID0gdGhpcy0+Zm9udC5mb250RGVzY3JpcHRpb24oKTsKIAogICAgIGF1
dG8gaXRhbGljID0gZm9udC5pdGFsaWMoKSA/ICJpdGFsaWMgIiA6ICIiOwotICAgIGF1dG8gc21h
bGxDYXBzID0gZm9udC52YXJpYW50Q2FwcygpID09IEZvbnRWYXJpYW50Q2Fwczo6U21hbGwgPyAi
c21hbGwtY2FwcyAiIDogIiI7CisgICAgYXV0byBzbWFsbENhcHMgPSBmb250LnZhcmlhbnRDYXBz
KCkgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsID8gInNtYWxsLWNhcHMgIiA6ICIiOwog
ICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZChpdGFsaWMsIHNtYWxsQ2FwcywgZm9udC5jb21wdXRl
ZFBpeGVsU2l6ZSgpLCAicHgiKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb250
LmZhbWlseUNvdW50KCk7ICsraSkgewpAQCAtMjM5OCw4ICsyMzk4LDggQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGRvdWJs
ZSB4LCBkb3VibGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0
ID0gbm9ybWFsaXplU3BhY2VzKHRleHQpOwotICAgIGF1dG8gZGlyZWN0aW9uID0gKHN0YXRlKCku
ZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHRE
aXJlY3Rpb246OkxUUjsKLSAgICBUZXh0UnVuIHRleHRSdW4obm9ybWFsaXplZFRleHQsIDAsIDAs
IEFsbG93UmlnaHRFeHBhbnNpb24sIGRpcmVjdGlvbiwgZmFsc2UsIHRydWUpOworICAgIGF1dG8g
ZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgVGV4dFJ1
biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24s
IGRpcmVjdGlvbiwgZmFsc2UsIHRydWUpOwogICAgIGRyYXdUZXh0VW5jaGVja2VkKHRleHRSdW4s
IHgsIHksIGZpbGwsIG1heFdpZHRoKTsKIH0KIApAQCAtMjUyMCw4ICsyNTIwLDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0
UnVuJiB0ZXh0UnVuLCBkb3UKIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAg
U3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gbm9ybWFsaXplU3BhY2VzKHRleHQpOwotICAgIGF1dG8g
ZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHRE
aXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKLSAgICBUZXh0UnVuIHRleHRSdW4o
bm9ybWFsaXplZFRleHQsIDAsIDAsIEFsbG93UmlnaHRFeHBhbnNpb24sIGRpcmVjdGlvbiwgZmFs
c2UsIHRydWUpOworICAgIGF1dG8gZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERp
cmVjdGlvbjo6UnRsKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFI7CisgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBQQUw6
OkFsbG93UmlnaHRFeHBhbnNpb24sIGRpcmVjdGlvbiwgZmFsc2UsIHRydWUpOwogICAgIHJldHVy
biBtZWFzdXJlVGV4dEludGVybmFsKHRleHRSdW4pOwogfQogCkBAIC0yNTU1LDcgKzI1NTUsNyBA
QCBSZWY8VGV4dE1ldHJpY3M+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVU
ZXh0SW50ZXJuYWwoY29uc3QgVGV4dFJ1bgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1GbG9h
dFBvaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxvYXQgd2lk
dGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQorRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjp0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBQQUw6OlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gZm9udFByb3h5KCktPmZvbnRN
ZXRyaWNzKCk7CiAgICAgRmxvYXRQb2ludCBvZmZzZXQ7CkBAIC0yNTc3LDcgKzI1NzcsNyBAQCBG
bG9hdFBvaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxvYXQg
d2lkdGgsIFRleHREaXJlY3Rpb24gZAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBib29s
IGlzUlRMID0gZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBib29sIGlzUlRM
ID0gZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIGF1dG8gYWxpZ24g
PSBzdGF0ZSgpLnRleHRBbGlnbjsKICAgICBpZiAoYWxpZ24gPT0gU3RhcnRUZXh0QWxpZ24pCiAg
ICAgICAgIGFsaWduID0gaXNSVEwgPyBSaWdodFRleHRBbGlnbiA6IExlZnRUZXh0QWxpZ247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmgKaW5kZXggZDRhZTBlNDEwY2M5NTNlOWI2YTg3ZTQyNmMzZTlmM2VmZjM0
MjQ0Ni4uODE4OGE3MDMzOWU2YzcyOGVhYjY1MzlhNGQ5NjNlOTgzNmQzZjI1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuaApAQCAtMzk2LDcgKzM5Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlcmVmb3Jl
LCBhbGwgZm9udCBvcGVyYXRpb25zIG11c3QgcGFzcyB0aHJvdWdoIHRoZSBwcm94eS4KICAgICB2
aXJ0dWFsIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQog
Ci0gICAgRmxvYXRQb2ludCB0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uKTsK
KyAgICBGbG9hdFBvaW50IHRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFBBTDo6VGV4dERpcmVjdGlv
bik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE1heFNhdmVDb3VudCA9IDEwMjQg
KiAxNjsKICAgICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IGJlZjQyYTIx
ZWUyYmYyOTViOWZlMDI1MWM0YmQ4OWZhOGViNGQ3MzcuLjBmNGVjOWZjYzZjZjg1NmU1OWZmODAx
Nzg2NjdiMjViY2Y2Njc0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMzY3LDcgKzM2Nyw3IEBAIGJvb2wgSFRNTERvY3Vt
ZW50UGFyc2VyOjpoYXNJbnNlcnRpb25Qb2ludCgpCiAgICAgcmV0dXJuIG1faW5wdXQuaGFzSW5z
ZXJ0aW9uUG9pbnQoKSB8fCAod2FzQ3JlYXRlZEJ5U2NyaXB0KCkgJiYgIW1faW5wdXQuaGF2ZVNl
ZW5FbmRPZkZpbGUoKSk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoU2Vn
bWVudGVkU3RyaW5nJiYgc291cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydChQ
QUw6OlNlZ21lbnRlZFN0cmluZyYmIHNvdXJjZSkKIHsKICAgICBpZiAoaXNTdG9wcGVkKCkpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmgKaW5kZXggOGI0ZmE4NDUyYWQ3NTZlMjc1M2Y3NWQxZWFiNjMyMTdjZmM4Y2E1
YS4uYWE1ODA0MjdkYzRmYWYyOGZkNjJmNGQzYzdlNjhmYzMzNWM1OTlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEhUTUxEb2N1bWVudFBhcnNl
cihIVE1MRG9jdW1lbnQmKTsKIAotICAgIHZvaWQgaW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYmKSBm
aW5hbDsKKyAgICB2b2lkIGluc2VydChQQUw6OlNlZ21lbnRlZFN0cmluZyYmKSBmaW5hbDsKICAg
ICB2b2lkIGFwcGVuZChSZWZQdHI8U3RyaW5nSW1wbD4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBh
cHBlbmRTeW5jaHJvbm91c2x5KFJlZlB0cjxTdHJpbmdJbXBsPiYmKSBvdmVycmlkZTsKICAgICB2
b2lkIGZpbmlzaCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRW50aXR5UGFyc2VyLmNwcAppbmRleCBhODlmYzYwZGNiMTUyZjNjMmY4OWE1MTIyZjc5NGM0
ZjNkOTJjZWExLi43MTM3ZDY5M2Y2ZGY5ZTRmYmM4ZDYxODZhOWZhZGUwZjUxYTFkMTFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcApAQCAt
NTYsNyArNTYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBhY2NlcHRNYWxmb3JtZWQo
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRpdHko
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJv
b2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
LCBVQ2hhciYgY2MpCisgICAgc3RhdGljIGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFBBTDo6U2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wm
IG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBV
Q2hhciYgY2MpCiAgICAgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnN1bWVkQ2hhcmFjdGVy
czsKICAgICAgICAgSFRNTEVudGl0eVNlYXJjaCBlbnRpdHlTZWFyY2g7CkBAIC0xMDksNyArMTA5
LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5v
dEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQorYm9v
bCBjb25zdW1lSFRNTEVudGl0eShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdC
dWlsZGVyJiBkZWNvZGVkRW50aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKIHsKICAgICByZXR1cm4gY29uc3VtZUNoYXJhY3Rl
clJlZmVyZW5jZTxIVE1MRW50aXR5UGFyc2VyPihzb3VyY2UsIGRlY29kZWRFbnRpdHksIG5vdEVu
b3VnaENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuaAppbmRleCA3ZDc5MjI0YzYx
Mjg3NGVkZGRmYmJkYTIyY2E4MzQ4MDRmOTliOTFhLi5hY2IyZGRlMjJiNjEzMjlhZTU3NWFmNjI5
ZDEyMzkzZmNkNTE5Y2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRW50aXR5UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVu
dGl0eVBhcnNlci5oCkBAIC0yNiwxMSArMjYsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIGNvbnN1bWVIVE1MRW50aXR5KFNl
Z21lbnRlZFN0cmluZyYsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVu
b3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wwJyk7
Citib29sIGNvbnN1bWVIVE1MRW50aXR5KFBBTDo6U2VnbWVudGVkU3RyaW5nJiwgU3RyaW5nQnVp
bGRlciYgZGVjb2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRk
aXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnXDAnKTsKIAogLy8gVXNlZCBieSB0aGUgWE1MIHBh
cnNlci4gIE5vdCBzdWl0YWJsZSBmb3IgdXNlIGluIEhUTUwgcGFyc2luZy4gIFVzZSBjb25zdW1l
SFRNTEVudGl0eSBpbnN0ZWFkLgogc2l6ZV90IGRlY29kZU5hbWVkRW50aXR5VG9VQ2hhckFycmF5
KGNvbnN0IGNoYXIqLCBVQ2hhciByZXN1bHRbNF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MSW5wdXRTdHJlYW0uaAppbmRleCA5MmQ4YmMzNTM5OTkxNGEyMGFlOWU2NGQyYTIz
OWZhNzYxZTA1NzY3Li42YThmNjZlZTI1OTQ2MDk1OGVlNjhkZmZhYzg2ZGRlNGQ1NDM1MTJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaApAQCAtMjUs
NyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5o
IgorI2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L09yZGluYWxOdW1iZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsMTIgKzU1
LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRUb0VuZChTZWdt
ZW50ZWRTdHJpbmcmJiBzdHJpbmcpCisgICAgdm9pZCBhcHBlbmRUb0VuZChQQUw6OlNlZ21lbnRl
ZFN0cmluZyYmIHN0cmluZykKICAgICB7CiAgICAgICAgIG1fbGFzdC0+YXBwZW5kKFdURk1vdmUo
c3RyaW5nKSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRBdEN1cnJlbnRJbnNlcnRpb25Qb2lu
dChTZWdtZW50ZWRTdHJpbmcmJiBzdHJpbmcpCisgICAgdm9pZCBpbnNlcnRBdEN1cnJlbnRJbnNl
cnRpb25Qb2ludChQQUw6OlNlZ21lbnRlZFN0cmluZyYmIHN0cmluZykKICAgICB7CiAgICAgICAg
IG1fZmlyc3QuYXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7CiAgICAgfQpAQCAtNzIsNyArNzIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtFbmRPZkZpbGUoKQogICAgIHsKLSAgICAgICAgbV9s
YXN0LT5hcHBlbmQoU3RyaW5nIHsgJmtFbmRPZkZpbGVNYXJrZXIsIDEgfSk7CisgICAgICAgIG1f
bGFzdC0+YXBwZW5kKFN0cmluZyB7ICZQQUw6OmtFbmRPZkZpbGVNYXJrZXIsIDEgfSk7CiAgICAg
ICAgIG1fbGFzdC0+Y2xvc2UoKTsKICAgICB9CiAKQEAgLTg2LDEwICs4NiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2xhc3QtPmlzQ2xvc2VkKCk7CiAgICAgfQogCi0gICAgU2VnbWVu
dGVkU3RyaW5nJiBjdXJyZW50KCkgeyByZXR1cm4gbV9maXJzdDsgfQotICAgIGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3Q7IH0KKyAgICBQQUw6
OlNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgpIHsgcmV0dXJuIG1fZmlyc3Q7IH0KKyAgICBjb25z
dCBQQUw6OlNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3Q7
IH0KIAotICAgIHZvaWQgc3BsaXRJbnRvKFNlZ21lbnRlZFN0cmluZyYgbmV4dCkKKyAgICB2b2lk
IHNwbGl0SW50byhQQUw6OlNlZ21lbnRlZFN0cmluZyYgbmV4dCkKICAgICB7CiAgICAgICAgIG5l
eHQgPSBXVEZNb3ZlKG1fZmlyc3QpOwogICAgICAgICBpZiAobV9sYXN0ID09ICZtX2ZpcnN0KSB7
CkBAIC0xMDAsNyArMTAwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBtZXJnZUZyb20oU2VnbWVudGVkU3RyaW5nJiBuZXh0KQorICAgIHZvaWQgbWVyZ2VGcm9tKFBB
TDo6U2VnbWVudGVkU3RyaW5nJiBuZXh0KQogICAgIHsKICAgICAgICAgbV9maXJzdC5hcHBlbmQo
bmV4dCk7CiAgICAgICAgIGlmIChtX2xhc3QgPT0gJm5leHQpIHsKQEAgLTExNyw4ICsxMTcsOCBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNlZ21lbnRlZFN0cmluZyBtX2ZpcnN0
OwotICAgIFNlZ21lbnRlZFN0cmluZyogbV9sYXN0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5n
IG1fZmlyc3Q7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcqIG1fbGFzdDsKIH07CiAKIGNsYXNz
IEluc2VydGlvblBvaW50UmVjb3JkIHsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgSFRNTElucHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOwotICAgIFNlZ21lbnRl
ZFN0cmluZyBtX25leHQ7CisgICAgUEFMOjpTZWdtZW50ZWRTdHJpbmcgbV9uZXh0OwogICAgIE9y
ZGluYWxOdW1iZXIgbV9saW5lOwogICAgIE9yZGluYWxOdW1iZXIgbV9jb2x1bW47CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApp
bmRleCA4ZDdiODlmYTVkNjRjZmM2NDE0OTIyN2YxY2MxY2VkYjVkYTI1YjdlLi4zMjgyZmJhYmM4
MGE0M2ZjODc4YjI1ZDA2ZDc3ZDQ0ZDc5YjEzYTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtMjYsOCArMjYsOCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiU2Vn
bWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8cGFs
L3RleHQvU2VnbWVudGVkU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIs
NyArNTIsNyBAQCBwcml2YXRlOgogCiAgICAgSFRNTFRva2VuaXplciBtX3Rva2VuaXplcjsKICAg
ICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBtX2NvZGVjOwotICAgIFNlZ21lbnRl
ZFN0cmluZyBtX2lucHV0OworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIG1faW5wdXQ7CiAgICAg
Ym9vbCBtX2luSGVhZFNlY3Rpb24geyB0cnVlIH07CiAgICAgYm9vbCBtX2RvbmVDaGVja2luZyB7
IGZhbHNlIH07CiAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAppbmRleCBmYTk5YTYwZDZh
Mjc4ZGQ5ZDgyZmZiZTllZTI4YTc3MTM2ZDMyMDE1Li5kZjk5ZDU1ZTBlMTBmM2JlZTI3ODRmYmNh
NjVhOWQwNDBlNTViOWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxQcmVsb2FkU2Nhbm5lci5jcHAKQEAgLTQ5Miw3ICs0OTIsNyBAQCBIVE1MUHJlbG9hZFNjYW5u
ZXI6OkhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywg
Y29uc3QgVQogewogfQogCi12b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6YXBwZW5kVG9FbmQoY29u
c3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCit2b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6YXBw
ZW5kVG9FbmQoY29uc3QgUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBtX3Nv
dXJjZS5hcHBlbmQoc291cmNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFByZWxvYWRTY2FubmVyLmgKaW5kZXggMzljNzA0OGNiMThlMjRlNGZlYzNhZmU2MmI0ZDlm
NTc1Y2MwZjM0OC4uM2NjZjliZGRiY2JlOWFjYjRmYjQ3ODYzZDY5MTYwMzIzYzdlZmYyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgKQEAg
LTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU1ByZWxvYWRTY2FubmVyLmgiCiAjaW5jbHVk
ZSAiSFRNTFRva2VuaXplci5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1
ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTg2LDEyICs4NiwxMiBAQCBjbGFzcyBIVE1MUHJlbG9hZFNjYW5uZXIgewogcHVibGljOgog
ICAgIEhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IFVS
TCYgZG9jdW1lbnRVUkwsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMS4wKTsKIAotICAgIHZv
aWQgYXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CisgICAgdm9pZCBhcHBlbmRU
b0VuZChjb25zdCBQQUw6OlNlZ21lbnRlZFN0cmluZyYpOwogICAgIHZvaWQgc2NhbihIVE1MUmVz
b3VyY2VQcmVsb2FkZXImLCBEb2N1bWVudCYpOwogCiBwcml2YXRlOgogICAgIFRva2VuUHJlbG9h
ZFNjYW5uZXIgbV9zY2FubmVyOwotICAgIFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsKKyAgICBQ
QUw6OlNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsKICAgICBIVE1MVG9rZW5pemVyIG1fdG9rZW5p
emVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNv
dXJjZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRy
YWNrZXIuY3BwCmluZGV4IDIyZGJhOTBhNTgyMGU2ZDdhMWY3M2Y1NjliYWQ3MzAyNjAxMzgwMjMu
LjRhNzU1MWY0MWVmZGI2MmMwMDEzYzE1ZWY3ODc5MmE1YmYyZWFkNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHAKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEhUTUxTb3VyY2VUcmFja2VyOjpz
dGFydFRva2VuKFNlZ21lbnRlZFN0cmluZyYgY3VycmVudElucHV0LCBIVE1MVG9rZW5pemVyJiB0
b2tlbml6ZXIpCit2b2lkIEhUTUxTb3VyY2VUcmFja2VyOjpzdGFydFRva2VuKFBBTDo6U2VnbWVu
dGVkU3RyaW5nJiBjdXJyZW50SW5wdXQsIEhUTUxUb2tlbml6ZXImIHRva2VuaXplcikKIHsKICAg
ICBpZiAoIW1fc3RhcnRlZCkgewogICAgICAgICBpZiAodG9rZW5pemVyLm51bWJlck9mQnVmZmVy
ZWRDaGFyYWN0ZXJzKCkpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgSFRNTFNvdXJjZVRyYWNrZXI6
OnN0YXJ0VG9rZW4oU2VnbWVudGVkU3RyaW5nJiBjdXJyZW50SW5wdXQsIEhUTUxUb2tlbml6ZXIm
CiAgICAgdG9rZW5pemVyLnNldFRva2VuQXR0cmlidXRlQmFzZU9mZnNldChtX3Rva2VuU3RhcnQp
OwogfQogCi12b2lkIEhUTUxTb3VyY2VUcmFja2VyOjplbmRUb2tlbihTZWdtZW50ZWRTdHJpbmcm
IGN1cnJlbnRJbnB1dCwgSFRNTFRva2VuaXplciYgdG9rZW5pemVyKQordm9pZCBIVE1MU291cmNl
VHJhY2tlcjo6ZW5kVG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRJbnB1dCwgSFRN
TFRva2VuaXplciYgdG9rZW5pemVyKQogewogICAgIEFTU0VSVChtX3N0YXJ0ZWQpOwogICAgIG1f
c3RhcnRlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFNvdXJjZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3Vy
Y2VUcmFja2VyLmgKaW5kZXggM2EyNGNmMGZjNjEwN2RlMmY1ODExNGI2NzZiNjMyYmU1NjE3OTFh
Zi4uYzY3NWU1MDMwMGQ0YTA3NjgwMTA0MWFiZDI4N2IxOWI2MzhlNDNjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5oCkBAIC0yNiw3ICsyNiw3
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5j
bHVkZSA8cGFsL3RleHQvU2VnbWVudGVkU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzgsOCArMzgsOCBAQCBjbGFzcyBIVE1MU291cmNlVHJhY2tlciB7CiBwdWJsaWM6CiAg
ICAgSFRNTFNvdXJjZVRyYWNrZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIHN0YXJ0VG9rZW4o
U2VnbWVudGVkU3RyaW5nJiwgSFRNTFRva2VuaXplciYpOwotICAgIHZvaWQgZW5kVG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiwgSFRNTFRva2VuaXplciYpOworICAgIHZvaWQgc3RhcnRUb2tlbihQQUw6
OlNlZ21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXImKTsKKyAgICB2b2lkIGVuZFRva2VuKFBB
TDo6U2VnbWVudGVkU3RyaW5nJiwgSFRNTFRva2VuaXplciYpOwogCiAgICAgU3RyaW5nIHNvdXJj
ZShjb25zdCBIVE1MVG9rZW4mKTsKICAgICBTdHJpbmcgc291cmNlKGNvbnN0IEhUTUxUb2tlbiYs
IHVuc2lnbmVkIGF0dHJpYnV0ZVN0YXJ0LCB1bnNpZ25lZCBhdHRyaWJ1dGVFbmQpOwpAQCAtNTAs
OCArNTAsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fdG9rZW5TdGFydDsKICAgICB1bnNp
Z25lZCBtX3Rva2VuRW5kOwogCi0gICAgU2VnbWVudGVkU3RyaW5nIG1fcHJldmlvdXNTb3VyY2U7
Ci0gICAgU2VnbWVudGVkU3RyaW5nIG1fY3VycmVudFNvdXJjZTsKKyAgICBQQUw6OlNlZ21lbnRl
ZFN0cmluZyBtX3ByZXZpb3VzU291cmNlOworICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIG1fY3Vy
cmVudFNvdXJjZTsKIAogICAgIFN0cmluZyBtX2NhY2hlZFNvdXJjZUZvclRva2VuOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKaW5kZXggZDNlYmE1
MTQ0NWYzMmI1ZjM2MGExMjg2NGFlNzAxNGVlNjk3ZWEwOC4uZTcyZWE1Mzk1MWEzMGUwNjliMzZj
MDc1NWEyODkxYzAzY2EwNDg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRva2VuaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRva2VuaXplci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2Vu
aXplcihjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykKIAogaW5saW5lIHZvaWQgSFRN
TFRva2VuaXplcjo6YnVmZmVyQVNDSUlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQogewotICAg
IEFTU0VSVChjaGFyYWN0ZXIgIT0ga0VuZE9mRmlsZU1hcmtlcik7CisgICAgQVNTRVJUKGNoYXJh
Y3RlciAhPSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpOwogICAgIEFTU0VSVChpc0FTQ0lJKGNoYXJh
Y3RlcikpOwogICAgIExDaGFyIG5hcnJvd2VkQ2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIG1f
dG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIobmFycm93ZWRDaGFyYWN0ZXIpOwpAQCAtODcsMTEgKzg3
LDExIEBAIGlubGluZSB2b2lkIEhUTUxUb2tlbml6ZXI6OmJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKFVD
aGFyIGNoYXJhY3RlcikKIAogaW5saW5lIHZvaWQgSFRNTFRva2VuaXplcjo6YnVmZmVyQ2hhcmFj
dGVyKFVDaGFyIGNoYXJhY3RlcikKIHsKLSAgICBBU1NFUlQoY2hhcmFjdGVyICE9IGtFbmRPZkZp
bGVNYXJrZXIpOworICAgIEFTU0VSVChjaGFyYWN0ZXIgIT0gUEFMOjprRW5kT2ZGaWxlTWFya2Vy
KTsKICAgICBtX3Rva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CiB9CiAKLWlubGlu
ZSBib29sIEhUTUxUb2tlbml6ZXI6OmVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKK2lubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OmVtaXRBbmRSZXN1bWVJ
bkRhdGFTdGF0ZShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogewogICAgIHNhdmVFbmRU
YWdOYW1lSWZOZWVkZWQoKTsKICAgICBtX3N0YXRlID0gRGF0YVN0YXRlOwpAQCAtMTA2LDcgKzEw
Niw3IEBAIGlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6OmVtaXRBbmRSZWNvbnN1bWVJbkRhdGFT
dGF0ZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIEhUTUxUb2tlbml6ZXI6
OmVtaXRFbmRPZkZpbGUoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCitpbmxpbmUgYm9vbCBIVE1M
VG9rZW5pemVyOjplbWl0RW5kT2ZGaWxlKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7
CiAgICAgbV9zdGF0ZSA9IERhdGFTdGF0ZTsKICAgICBpZiAoaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVy
VG9rZW4oKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBpbmxpbmUgYm9vbCBIVE1MVG9rZW5pemVyOjpo
YXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fdG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyOwogfQogCi1pbmxpbmUgYm9vbCBIVE1MVG9rZW5p
emVyOjpwcm9jZXNzRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQoraW5saW5lIGJvb2wg
SFRNTFRva2VuaXplcjo6cHJvY2Vzc0VudGl0eShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNl
KQogewogICAgIGJvb2wgbm90RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOwogICAgIFN0cmluZ0J1
aWxkZXIgZGVjb2RlZEVudGl0eTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEhUTUxUb2tlbml6
ZXI6OmZsdXNoQnVmZmVyZWRFbmRUYWcoKQogICAgIG1fdGVtcG9yYXJ5QnVmZmVyLmNsZWFyKCk7
CiB9CiAKLWJvb2wgSFRNTFRva2VuaXplcjo6Y29tbWl0VG9QYXJ0aWFsRW5kVGFnKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlLCBVQ2hhciBjaGFyYWN0ZXIsIFN0YXRlIHN0YXRlKQorYm9vbCBIVE1M
VG9rZW5pemVyOjpjb21taXRUb1BhcnRpYWxFbmRUYWcoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgVUNoYXIgY2hhcmFjdGVyLCBTdGF0ZSBzdGF0ZSkKIHsKICAgICBBU1NFUlQoc291cmNl
LmN1cnJlbnRDaGFyYWN0ZXIoKSA9PSBjaGFyYWN0ZXIpOwogICAgIGFwcGVuZFRvVGVtcG9yYXJ5
QnVmZmVyKGNoYXJhY3Rlcik7CkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVy
Ojpjb21taXRUb1BhcnRpYWxFbmRUYWcoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFVDaGFyIGNo
YXJhY3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSFRNTFRva2VuaXplcjo6Y29tbWl0
VG9Db21wbGV0ZUVuZFRhZyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKK2Jvb2wgSFRNTFRva2Vu
aXplcjo6Y29tbWl0VG9Db21wbGV0ZUVuZFRhZyhQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNl
KQogewogICAgIEFTU0VSVChzb3VyY2UuY3VycmVudENoYXJhY3RlcigpID09ICc+Jyk7CiAgICAg
YXBwZW5kVG9UZW1wb3JhcnlCdWZmZXIoJz4nKTsKQEAgLTE4OSw3ICsxODksNyBAQCBib29sIEhU
TUxUb2tlbml6ZXI6OmNvbW1pdFRvQ29tcGxldGVFbmRUYWcoU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rv
a2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQorYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNz
VG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBpZiAoIW1fYnVmZmVy
ZWRFbmRUYWdOYW1lLmlzRW1wdHkoKSAmJiAhaW5FbmRUYWdCdWZmZXJpbmdTdGF0ZSgpKSB7CiAg
ICAgICAgIC8vIFdlIGFyZSBiYWNrIGhlcmUgYWZ0ZXIgZW1pdHRpbmcgYSBjaGFyYWN0ZXIgdG9r
ZW4gdGhhdCBjYW1lIGp1c3QgYmVmb3JlIGFuIGVuZCB0YWcuCkBAIC0yMTcsNyArMjE3LDcgQEAg
Ym9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lOX0NVUlJFTlRfU1RBVEUodHJ1ZSk7CiAgICAgICAg
ICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oVGFnT3BlblN0YXRlKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpCisgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKQogICAgICAgICAgICAgcmV0dXJu
IGVtaXRFbmRPZkZpbGUoc291cmNlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNoYXJhY3Rl
cik7CiAgICAgICAgIEFEVkFOQ0VfVE8oRGF0YVN0YXRlKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
ICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhDaGFyYWN0ZXJSZWZlcmVu
Y2VJblJDREFUQVN0YXRlKTsKICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPCcpCiAgICAgICAg
ICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oUkNEQVRBTGVzc1RoYW5TaWduU3RhdGUp
OwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpCisgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKQogICAgICAgICAgICAgUkVDT05T
VU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcihjaGFyYWN0ZXIpOwog
ICAgICAgICBBRFZBTkNFX1RPKFJDREFUQVN0YXRlKTsKQEAgLTI0OSw3ICsyNDksNyBAQCBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICBCRUdJTl9TVEFURShSQVdURVhUU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJzwn
KQogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFJBV1RFWFRMZXNzVGhh
blNpZ25TdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikK
KyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpCiAgICAgICAg
ICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNo
YXJhY3Rlcik7CiAgICAgICAgIEFEVkFOQ0VfVE8oUkFXVEVYVFN0YXRlKTsKQEAgLTI1OCwxNCAr
MjU4LDE0IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgIEJFR0lOX1NUQVRFKFNjcmlwdERhdGFTdGF0ZSkKICAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSAnPCcpCiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVf
VE8oU2NyaXB0RGF0YUxlc3NUaGFuU2lnblN0YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9m
RmlsZU1hcmtlcikKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAg
ICBidWZmZXJDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKICAgICAgICAgQURWQU5DRV9UTyhTY3JpcHRE
YXRhU3RhdGUpOwogICAgIEVORF9TVEFURSgpCiAKICAgICBCRUdJTl9TVEFURShQTEFJTlRFWFRT
dGF0ZSkKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKQorICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAgICAgICAgIFJF
Q09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICBidWZmZXJDaGFyYWN0ZXIoY2hhcmFjdGVy
KTsKICAgICAgICAgQURWQU5DRV9UTyhQTEFJTlRFWFRTdGF0ZSk7CkBAIC0zMDIsNyArMzAyLDcg
QEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBBRFZBTkNFX1BBU1Rf
Tk9OX05FV0xJTkVfVE8oRGF0YVN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFj
dGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6
OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAg
ICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCc8Jyk7CiAgICAgICAgICAgICBidWZmZXJBU0NJSUNo
YXJhY3RlcignLycpOwpAQCAtMzIxLDcgKzMyMSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJv
Y2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcmV0dXJuIGVt
aXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICBpZiAobV9vcHRpb25zLnVz
ZVByZUhUTUw1UGFyc2VyUXVpcmtzICYmIGNoYXJhY3RlciA9PSAnPCcpCiAgICAgICAgICAgICBy
ZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7Ci0gICAgICAgIGlmIChjaGFyYWN0
ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6
a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAg
ICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTUxMCw3ICs1MTAsNyBA
QCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSkKICAgICAgICAgfQogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc8JykKICAgICAgICAgICAg
IEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2ln
blN0YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7Cisg
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAg
ICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsK
ICAgICAgICAgfQpAQCAtNTI1LDcgKzUyNSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICB9CiAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gJzwnKQogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RP
KFNjcmlwdERhdGFFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUpOwotICAgICAgICBpZiAoY2hhcmFj
dGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6
OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAg
ICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC01NDQsNyArNTQ0LDcg
QEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPicpOwogICAgICAgICAgICAg
QURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFTdGF0ZSk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAg
fQpAQCAtNjM1LDcgKzYzNSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgYnVmZmVyQVNDSUlDaGFyYWN0ZXIo
JzwnKTsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElORV9UTyhTY3JpcHREYXRh
RG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAg
ICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC02NTIsNyAr
NjUyLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UpCiAgICAgICAgICAgICBidWZmZXJBU0NJSUNoYXJhY3RlcignPCcpOwogICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKFNjcmlwdERhdGFEb3VibGVFc2NhcGVk
TGVzc1RoYW5TaWduU3RhdGUpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
a0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9m
RmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgUkVD
T05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTY3Myw3ICs2NzMsNyBAQCBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICAgICAgICAgIGJ1ZmZlckFTQ0lJQ2hhcmFjdGVyKCc+Jyk7CiAgICAgICAgICAgICBBRFZBTkNF
X1BBU1RfTk9OX05FV0xJTkVfVE8oU2NyaXB0RGF0YVN0YXRlKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC03
MTUsNyArNzE1LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0
YXRlKHNvdXJjZSk7CiAgICAgICAgIGlmIChtX29wdGlvbnMudXNlUHJlSFRNTDVQYXJzZXJRdWly
a3MgJiYgY2hhcmFjdGVyID09ICc8JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25z
dW1lSW5EYXRhU3RhdGUoKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFy
a2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7
CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0
YVN0YXRlKTsKICAgICAgICAgfQpAQCAtNzM3LDcgKzczNyw3IEBAIGJvb2wgSFRNTFRva2VuaXpl
cjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgcmV0
dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICBpZiAobV9vcHRp
b25zLnVzZVByZUhUTUw1UGFyc2VyUXVpcmtzICYmIGNoYXJhY3RlciA9PSAnPCcpCiAgICAgICAg
ICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7Ci0gICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09
IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAg
ICAgICAgICAgUkVDT05TVU1FX0lOKERhdGFTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTc1OCw3ICs3
NTgsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcm
IHNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291
cmNlKTsKICAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiBj
aGFyYWN0ZXIgPT0gJzwnKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRh
dGFTdGF0ZSgpOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsK
KyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUp
OwogICAgICAgICB9CkBAIC03ODIsNyArNzgyLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9j
ZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBwYXJzZUVycm9y
KCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7
CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRl
KTsKICAgICAgICAgfQpAQCAtODAxLDcgKzgwMSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJv
Y2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV9hZGRpdGlv
bmFsQWxsb3dlZENoYXJhY3RlciA9ICciJzsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAg
ICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5lbmRBdHRyaWJ1dGUoc291cmNl
Lm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lO
KERhdGFTdGF0ZSk7CkBAIC04MTksNyArODE5LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9j
ZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX2FkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyID0gJ1wnJzsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05f
TkVXTElORV9UTyhDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUpOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAg
ICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAg
ICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5lbmRBdHRyaWJ1dGUoc291cmNl
Lm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOwogICAgICAgICAgICAgUkVDT05TVU1FX0lO
KERhdGFTdGF0ZSk7CkBAIC04NDEsNyArODQxLDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9j
ZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLmVu
ZEF0dHJpYnV0ZShzb3VyY2UubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLmVuZEF0dHJpYnV0ZShzb3VyY2UubnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7CiAgICAgICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0
YXRlKTsKQEAgLTg4Niw3ICs4ODYsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tl
bihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVz
dW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1M
NVBhcnNlclF1aXJrcyAmJiBjaGFyYWN0ZXIgPT0gJzwnKQogICAgICAgICAgICAgcmV0dXJuIGVt
aXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtF
bmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZp
bGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIFJFQ09O
U1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICB9CkBAIC04OTksNyArODk5LDcgQEAgYm9vbCBI
VE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAg
ICAgICAgICBtX3Rva2VuLnNldFNlbGZDbG9zaW5nKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1p
dEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNo
YXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
UEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAg
ICAgICAgICBSRUNPTlNVTUVfSU4oRGF0YVN0YXRlKTsKICAgICAgICAgfQpAQCAtOTE1LDcgKzkx
NSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlKQogICAgIEJFR0lOX1NUQVRFKENvbnRpbnVlQm9ndXNDb21tZW50U3RhdGUpCiAgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1
bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZp
bGVNYXJrZXIpCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2Vy
KQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwogICAg
ICAgICBtX3Rva2VuLmFwcGVuZFRvQ29tbWVudChjaGFyYWN0ZXIpOwogICAgICAgICBBRFZBTkNF
X1RPKENvbnRpbnVlQm9ndXNDb21tZW50U3RhdGUpOwpAQCAtOTI0LDIzICs5MjQsMjMgQEAgYm9v
bCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAg
ICAgQkVHSU5fU1RBVEUoTWFya3VwRGVjbGFyYXRpb25PcGVuU3RhdGUpCiAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gJy0nKSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5hZHZh
bmNlUGFzdCgiLS0iKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5n
OjpEaWRNYXRjaCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQQUw6OlNlZ21lbnRlZFN0
cmluZzo6RGlkTWF0Y2gpIHsKICAgICAgICAgICAgICAgICBtX3Rva2VuLmJlZ2luQ29tbWVudCgp
OwogICAgICAgICAgICAgICAgIFNXSVRDSF9UTyhDb21tZW50U3RhcnRTdGF0ZSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90RW5v
dWdoQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRT
dHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgUkVUVVJOX0lOX0NV
UlJFTlRfU1RBVEUoaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXIsICdkJykpIHsKICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLmFkdmFuY2VQYXN0TGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKCJkb2N0eXBlIik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0
cmluZzo6RGlkTWF0Y2gpCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBBTDo6U2VnbWVudGVk
U3RyaW5nOjpEaWRNYXRjaCkKICAgICAgICAgICAgICAgICBTV0lUQ0hfVE8oRE9DVFlQRVN0YXRl
KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hD
aGFyYWN0ZXJzKQorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQQUw6OlNlZ21lbnRlZFN0cmlu
Zzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKICAgICAgICAgICAgICAgICBSRVRVUk5fSU5fQ1VSUkVO
VF9TVEFURShoYXZlQnVmZmVyZWRDaGFyYWN0ZXJUb2tlbigpKTsKICAgICAgICAgfSBlbHNlIGlm
IChjaGFyYWN0ZXIgPT0gJ1snICYmIHNob3VsZEFsbG93Q0RBVEEoKSkgewogICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBzb3VyY2UuYWR2YW5jZVBhc3QoIltDREFUQVsiKTsKLSAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gU2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQogICAgICAgICAgICAg
ICAgIFNXSVRDSF9UTyhDREFUQVNlY3Rpb25TdGF0ZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0
ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENoYXJhY3RlcnMpCiAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lOX0NVUlJFTlRfU1RBVEUoaGF2ZUJ1ZmZlcmVkQ2hhcmFj
dGVyVG9rZW4oKSk7CiAgICAgICAgIH0KICAgICAgICAgcGFyc2VFcnJvcigpOwpAQCAtOTU0LDcg
Kzk1NCw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJu
IGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwog
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwogICAgICAg
ICB9CkBAIC05NjksNyArOTY5LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4o
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0
YXRlKCk7CiAgICAgICAgIH0KQEAgLTk4MSw3ICs5ODEsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6
OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShD
b21tZW50U3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy0nKQogICAgICAgICAgICAg
QURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKENvbW1lbnRFbmREYXNoU3RhdGUpOwotICAgICAg
ICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJh
Y3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
KTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAg
ICAgICAgfQpAQCAtOTkyLDcgKzk5Miw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rv
a2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgIEJFR0lOX1NUQVRFKENvbW1lbnRFbmRE
YXNoU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJy0nKQogICAgICAgICAgICAgQURW
QU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKENvbW1lbnRFbmRTdGF0ZSk7Ci0gICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09
IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwogICAgICAgICB9
CkBAIC0xMDEzLDcgKzEwMTMsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uYXBwZW5kVG9Db21t
ZW50KCctJyk7CiAgICAgICAgICAgICBBRFZBTkNFX1BBU1RfTk9OX05FV0xJTkVfVE8oQ29tbWVu
dEVuZFN0YXRlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZp
bGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJr
ZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0
QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKICAgICAgICAgfQpAQCAtMTAzMyw3ICsxMDMzLDcg
QEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPicpCiAgICAgICAgICAg
ICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7Ci0gICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09
IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwogICAgICAgICB9
CkBAIC0xMDQ3LDcgKzEwNDcsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBCRUdJTl9TVEFURShET0NUWVBFU3RhdGUpCiAg
ICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2hhcmFjdGVyKSkKICAgICAgICAgICAg
IEFEVkFOQ0VfVE8oQmVmb3JlRE9DVFlQRU5hbWVTdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0
ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6
a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAg
ICAgbV90b2tlbi5iZWdpbkRPQ1RZUEUoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VR
dWlya3MoKTsKQEAgLTEwNjYsNyArMTA2Niw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRG
b3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0
ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmls
ZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtl
cikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5iZWdp
bkRPQ1RZUEUoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKQEAgLTEw
ODEsNyArMTA4MSw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgQURWQU5DRV9UTyhBZnRlckRPQ1RZUEVOYW1l
U3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICc+JykKICAgICAgICAgICAgIHJldHVy
biBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjpr
RW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAg
ICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJl
Y29uc3VtZUluRGF0YVN0YXRlKCk7CkBAIC0xMDk1LDIyICsxMDk1LDIyIEBAIGJvb2wgSFRNTFRv
a2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAg
ICAgQURWQU5DRV9UTyhBZnRlckRPQ1RZUEVOYW1lU3RhdGUpOwogICAgICAgICBpZiAoY2hhcmFj
dGVyID09ICc+JykKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUo
c291cmNlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7Cisg
ICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAg
ICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7
CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyLCAn
cCcpKSB7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS5hZHZhbmNlUGFzdExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZSgicHVibGljIik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IFNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBB
TDo6U2VnbWVudGVkU3RyaW5nOjpEaWRNYXRjaCkKICAgICAgICAgICAgICAgICBTV0lUQ0hfVE8o
QWZ0ZXJET0NUWVBFUHVibGljS2V5d29yZFN0YXRlKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gU2VnbWVudGVkU3RyaW5nOjpOb3RFbm91Z2hDaGFyYWN0ZXJzKQorICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBQQUw6OlNlZ21lbnRlZFN0cmluZzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKICAg
ICAgICAgICAgICAgICBSRVRVUk5fSU5fQ1VSUkVOVF9TVEFURShoYXZlQnVmZmVyZWRDaGFyYWN0
ZXJUb2tlbigpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KGNoYXJhY3RlciwgJ3MnKSkgewogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UuYWR2
YW5jZVBhc3RMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoInN5c3RlbSIpOwotICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBTZWdtZW50ZWRTdHJpbmc6OkRpZE1hdGNoKQorICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBQQUw6OlNlZ21lbnRlZFN0cmluZzo6RGlkTWF0Y2gpCiAgICAgICAgICAgICAg
ICAgU1dJVENIX1RPKEFmdGVyRE9DVFlQRVN5c3RlbUtleXdvcmRTdGF0ZSk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IFNlZ21lbnRlZFN0cmluZzo6Tm90RW5vdWdoQ2hhcmFjdGVycykKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gUEFMOjpTZWdtZW50ZWRTdHJpbmc6Ok5vdEVub3VnaENo
YXJhY3RlcnMpCiAgICAgICAgICAgICAgICAgUkVUVVJOX0lOX0NVUlJFTlRfU1RBVEUoaGF2ZUJ1
ZmZlcmVkQ2hhcmFjdGVyVG9rZW4oKSk7CiAgICAgICAgIH0KICAgICAgICAgcGFyc2VFcnJvcigp
OwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4o
U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVp
cmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJj
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVp
cmtzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7
CkBAIC0xMTYyLDcgKzExNjIsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWly
a3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNl
KTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIp
IHsKKyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWly
a3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsK
QEAgLTExODAsNyArMTE4MCw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJr
cygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2Up
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikg
eworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJr
cygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpA
QCAtMTE5Nyw3ICsxMTk3LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtz
KCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7
CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKCk7CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtz
KCk7CiAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CkBA
IC0xMjIxLDcgKzEyMjEsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgICAgIG1fdG9rZW4uc2V0U3lzdGVtSWRlbnRp
ZmllclRvRW1wdHlTdHJpbmcoKTsKICAgICAgICAgICAgIEFEVkFOQ0VfUEFTVF9OT05fTkVXTElO
RV9UTyhET0NUWVBFU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IoKTsKICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEyNDQsNyAr
MTI0NCw3IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogICAgICAgICAgICAgbV90b2tlbi5zZXRTeXN0ZW1JZGVudGlmaWVyVG9FbXB0
eVN0cmluZygpOwogICAgICAgICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKERPQ1RZ
UEVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUpOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFj
dGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigp
OwogICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0
dXJuIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTI3Miw3ICsxMjcyLDcgQEAg
Ym9vbCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1
cm4gZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0
ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7
CiAgICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1
cm4gZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBi
b29sIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
ICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVy
biBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoc291cmNlKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IoKTsK
ICAgICAgICAgICAgIG1fdG9rZW4uc2V0Rm9yY2VRdWlya3MoKTsKICAgICAgICAgICAgIHJldHVy
biBlbWl0QW5kUmVjb25zdW1lSW5EYXRhU3RhdGUoKTsKQEAgLTEzMTYsNyArMTMxNiw3IEBAIGJv
b2wgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQog
ICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJu
IGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwog
ICAgICAgICAgICAgbV90b2tlbi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJu
IGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgpOwpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgYm9v
bCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAg
ICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4g
ZW1pdEFuZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXIg
PT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKCk7CiAg
ICAgICAgICAgICBtX3Rva2VuLnNldEZvcmNlUXVpcmtzKCk7CiAgICAgICAgICAgICByZXR1cm4g
ZW1pdEFuZFJlY29uc3VtZUluRGF0YVN0YXRlKCk7CkBAIC0xMzQ3LDcgKzEzNDcsNyBAQCBib29s
IEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICAgICAgICAgIEFEVkFOQ0VfVE8oQWZ0ZXJET0NUWVBFU3lzdGVtSWRlbnRpZmllclN0YXRlKTsK
ICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnPicpCiAgICAgICAgICAgICByZXR1cm4gZW1pdEFu
ZFJlc3VtZUluRGF0YVN0YXRlKHNvdXJjZSk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0ga0Vu
ZE9mRmlsZU1hcmtlcikgeworICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmls
ZU1hcmtlcikgewogICAgICAgICAgICAgcGFyc2VFcnJvcigpOwogICAgICAgICAgICAgbV90b2tl
bi5zZXRGb3JjZVF1aXJrcygpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1bWVJ
bkRhdGFTdGF0ZSgpOwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpw
cm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUoQm9n
dXNET0NUWVBFU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nKQogICAgICAgICAg
ICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbkRhdGFTdGF0ZShzb3VyY2UpOwotICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIpCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0g
UEFMOjprRW5kT2ZGaWxlTWFya2VyKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZWNvbnN1
bWVJbkRhdGFTdGF0ZSgpOwogICAgICAgICBBRFZBTkNFX1RPKEJvZ3VzRE9DVFlQRVN0YXRlKTsK
ICAgICBFTkRfU1RBVEUoKQpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVy
Ojpwcm9jZXNzVG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgQkVHSU5fU1RBVEUo
Q0RBVEFTZWN0aW9uU3RhdGUpCiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJ10nKQogICAgICAg
ICAgICAgQURWQU5DRV9QQVNUX05PTl9ORVdMSU5FX1RPKENEQVRBU2VjdGlvblJpZ2h0U3F1YXJl
QnJhY2tldFN0YXRlKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KQorICAgICAgICBpZiAoY2hhcmFjdGVyID09IFBBTDo6a0VuZE9mRmlsZU1hcmtlcikKICAgICAg
ICAgICAgIFJFQ09OU1VNRV9JTihEYXRhU3RhdGUpOwogICAgICAgICBidWZmZXJDaGFyYWN0ZXIo
Y2hhcmFjdGVyKTsKICAgICAgICAgQURWQU5DRV9UTyhDREFUQVNlY3Rpb25TdGF0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmgKaW5kZXggNWQ4MTkxZjQ0ODk1
NDQyMTU4Y2Y3ZTI1NGEzYTFjNTY4N2E4MDQ0Yy4uYzY3MmU4MjI0ZmQzNGQ1Mzc3ZjBmNTllZDM0
ZjhkOTM5OTA4ZWQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRva2VuaXplci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuaApAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKICNpbmNsdWRl
ICJJbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KK25h
bWVzcGFjZSBQQUwgewogY2xhc3MgU2VnbWVudGVkU3RyaW5nOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEhUTUxUb2tlbml6ZXIgewogcHVibGljOgpAQCAtNDAsNyArNDIsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBJZiB3ZSBjYW4ndCBwYXJzZSBhIHdob2xlIHRva2VuLCB0aGlz
IHJldHVybnMgbnVsbC4KICAgICBjbGFzcyBUb2tlblB0cjsKLSAgICBUb2tlblB0ciBuZXh0VG9r
ZW4oU2VnbWVudGVkU3RyaW5nJik7CisgICAgVG9rZW5QdHIgbmV4dFRva2VuKFBBTDo6U2VnbWVu
dGVkU3RyaW5nJik7CiAKICAgICAvLyBVc2VkIGJ5IEhUTUxTb3VyY2VUcmFja2VyLgogICAgIHZv
aWQgc2V0VG9rZW5BdHRyaWJ1dGVCYXNlT2Zmc2V0KHVuc2lnbmVkKTsKQEAgLTE1NSwyMiArMTU3
LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIENEQVRBU2VjdGlvbkRvdWJsZVJpZ2h0U3F1YXJlQnJh
Y2tldFN0YXRlLAogICAgIH07CiAKLSAgICBib29sIHByb2Nlc3NUb2tlbihTZWdtZW50ZWRTdHJp
bmcmKTsKLSAgICBib29sIHByb2Nlc3NFbnRpdHkoU2VnbWVudGVkU3RyaW5nJik7CisgICAgYm9v
bCBwcm9jZXNzVG9rZW4oUEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICBib29sIHByb2Nlc3NF
bnRpdHkoUEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKIAogICAgIHZvaWQgcGFyc2VFcnJvcigpOwog
CiAgICAgdm9pZCBidWZmZXJBU0NJSUNoYXJhY3RlcihVQ2hhcik7CiAgICAgdm9pZCBidWZmZXJD
aGFyYWN0ZXIoVUNoYXIpOwogCi0gICAgYm9vbCBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoU2Vn
bWVudGVkU3RyaW5nJik7CisgICAgYm9vbCBlbWl0QW5kUmVzdW1lSW5EYXRhU3RhdGUoUEFMOjpT
ZWdtZW50ZWRTdHJpbmcmKTsKICAgICBib29sIGVtaXRBbmRSZWNvbnN1bWVJbkRhdGFTdGF0ZSgp
OwotICAgIGJvb2wgZW1pdEVuZE9mRmlsZShTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICBib29sIGVt
aXRFbmRPZkZpbGUoUEFMOjpTZWdtZW50ZWRTdHJpbmcmKTsKIAogICAgIC8vIFJldHVybiB0cnVl
IGlmIHdlIHdpbCBlbWl0IGEgY2hhcmFjdGVyIHRva2VuIGJlZm9yZSBkZWFsaW5nIHdpdGggdGhl
IGJ1ZmZlcmVkIGVuZCB0YWcuCiAgICAgdm9pZCBmbHVzaEJ1ZmZlcmVkRW5kVGFnKCk7Ci0gICAg
Ym9vbCBjb21taXRUb1BhcnRpYWxFbmRUYWcoU2VnbWVudGVkU3RyaW5nJiwgVUNoYXIsIFN0YXRl
KTsKLSAgICBib29sIGNvbW1pdFRvQ29tcGxldGVFbmRUYWcoU2VnbWVudGVkU3RyaW5nJik7Cisg
ICAgYm9vbCBjb21taXRUb1BhcnRpYWxFbmRUYWcoUEFMOjpTZWdtZW50ZWRTdHJpbmcmLCBVQ2hh
ciwgU3RhdGUpOworICAgIGJvb2wgY29tbWl0VG9Db21wbGV0ZUVuZFRhZyhQQUw6OlNlZ21lbnRl
ZFN0cmluZyYpOwogCiAgICAgdm9pZCBhcHBlbmRUb1RlbXBvcmFyeUJ1ZmZlcihVQ2hhcik7CiAg
ICAgYm9vbCB0ZW1wb3JhcnlCdWZmZXJJcyhjb25zdCBjaGFyKik7CkBAIC0yNzksNyArMjgxLDcg
QEAgaW5saW5lIEhUTUxUb2tlbiogSFRNTFRva2VuaXplcjo6VG9rZW5QdHI6Om9wZXJhdG9yLT4o
KSBjb25zdAogICAgIHJldHVybiBtX3Rva2VuOwogfQogCi1pbmxpbmUgSFRNTFRva2VuaXplcjo6
VG9rZW5QdHIgSFRNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0cmluZyYgc291cmNl
KQoraW5saW5lIEhUTUxUb2tlbml6ZXI6OlRva2VuUHRyIEhUTUxUb2tlbml6ZXI6Om5leHRUb2tl
bihQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogewogICAgIHJldHVybiBUb2tlblB0cihw
cm9jZXNzVG9rZW4oc291cmNlKSA/ICZtX3Rva2VuIDogbnVsbHB0cik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9JbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuaAppbmRl
eCAzNjFmNjUzMDE1ZDFhY2EzN2FjZTdmN2UyMmE2ZmYyZGNlOTA4ZjZiLi4xMDA2N2FlOGQ3YmNl
MWYwYzI3NDg2MjhlY2ZkNmE1NTE1ZWEzYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9JbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLmgKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRl
IDxwYWwvdGV4dC9TZWdtZW50ZWRTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgd2Ugc3VjY2VlZGVkIGluIHBlZWtpbmcgYXQg
dGhlIG5leHQgY2hhcmFjdGVyLgogICAgIC8vIFRoZSBvbmx5IHdheSB3ZSBjYW4gZmFpbCB0byBw
ZWVrIGlzIGlmIHRoZXJlIGFyZSBubyBtb3JlCiAgICAgLy8gY2hhcmFjdGVycyBpbiB8c291cmNl
fCAoYWZ0ZXIgY29sbGFwc2luZyBcclxuLCBldGMpLgotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBw
ZWVrKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sIHNraXBOdWxsQ2hhcmFjdGVycyA9IGZh
bHNlKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwZWVrKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBz
b3VyY2UsIGJvb2wgc2tpcE51bGxDaGFyYWN0ZXJzID0gZmFsc2UpCiAgICAgewogICAgICAgICBp
ZiAoVU5MSUtFTFkoc291cmNlLmlzRW1wdHkoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC02NywxOSArNjcsMTkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFJldHVybnMgd2hl
dGhlciB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzIGluIHxzb3VyY2V8IGFmdGVyIGFkdmFuY2lu
Zy4KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgYWR2YW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgYWR2YW5jZShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sIHNraXBOdWxsQ2hh
cmFjdGVycyA9IGZhbHNlKQogICAgIHsKICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKICAgICAg
ICAgcmV0dXJuIHBlZWsoc291cmNlLCBza2lwTnVsbENoYXJhY3RlcnMpOwogICAgIH0KLSAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgYWR2YW5jZVBhc3ROb25OZXdsaW5lKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlLCBib29sIHNraXBOdWxsQ2hhcmFjdGVycyA9IGZhbHNlKQorICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBhZHZhbmNlUGFzdE5vbk5ld2xpbmUoUEFMOjpTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSwgYm9vbCBza2lwTnVsbENoYXJhY3RlcnMgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIHNvdXJj
ZS5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKICAgICAgICAgcmV0dXJuIHBlZWsoc291cmNlLCBz
a2lwTnVsbENoYXJhY3RlcnMpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIHByb2Nlc3NO
ZXh0SW5wdXRDaGFyYWN0ZXIoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGJvb2wgc2tpcE51bGxD
aGFyYWN0ZXJzKQorICAgIGJvb2wgcHJvY2Vzc05leHRJbnB1dENoYXJhY3RlcihQQUw6OlNlZ21l
bnRlZFN0cmluZyYgc291cmNlLCBib29sIHNraXBOdWxsQ2hhcmFjdGVycykKICAgICB7CiAgICAg
UHJvY2Vzc0FnYWluOgogICAgICAgICBBU1NFUlQobV9uZXh0SW5wdXRDaGFyYWN0ZXIgPT0gc291
cmNlLmN1cnJlbnRDaGFyYWN0ZXIoKSk7CkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgaXNBdEVuZE9mRmls
ZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKKyAgICBzdGF0aWMgYm9vbCBpc0F0RW5kT2ZGaWxl
KFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgewogICAgICAgICByZXR1cm4gc291
cmNlLmlzQ2xvc2VkKCkgJiYgc291cmNlLmxlbmd0aCgpID09IDE7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvRGF0ZVRpbWVFZGl0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcAppbmRleCAx
Mzc3MTVjZjM2NzNmMjYyYWY1OGQyNGEzZDY1ZmNlZGJlMmE4NTdlLi44NzI0N2NkODFmZTRhMzQx
YjVlNjgzMTEwNWVhMDZmYjFkZTA2M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9EYXRlVGltZUVkaXRFbGVtZW50LmNwcApAQCAtMzIsMTIgKzMyLDEyIEBACiAjaW5j
bHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJEYXRlVGltZUZpZWxkRWxlbWVudHMu
aCIKICNpbmNsdWRlICJEYXRlVGltZUZpZWxkc1N0YXRlLmgiCi0jaW5jbHVkZSAiRGF0ZVRpbWVG
b3JtYXQuaCIKICNpbmNsdWRlICJEYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Mb2NhbGUuaCIKICNpbmNsdWRl
ICJTaGFkb3dQc2V1ZG9JZHMuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvRGF0ZVRpbWVGb3JtYXQuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtNDcsNyArNDcsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
RGF0ZVRpbWVFZGl0RWxlbWVudCk7CiAKLWNsYXNzIERhdGVUaW1lRWRpdEJ1aWxkZXIgZmluYWwg
OiBwcml2YXRlIERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgeworY2xhc3MgRGF0ZVRpbWVF
ZGl0QnVpbGRlciBmaW5hbCA6IHByaXZhdGUgUEFMOjpEYXRlVGltZUZvcm1hdDo6VG9rZW5IYW5k
bGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRlVGltZUVkaXRCdWlsZGVyKTsKIAog
cHVibGljOgpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gRGF0
ZVRpbWVGb3JtYXQ6OlRva2VuSGFuZGxlciBmdW5jdGlvbnM6Ci0gICAgdm9pZCB2aXNpdEZpZWxk
KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCk7CisgICAgdm9pZCB2aXNpdEZpZWxkKFBB
TDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSwgaW50KTsKICAgICB2b2lkIHZpc2l0TGl0ZXJh
bChjb25zdCBTdHJpbmcmKTsKIAogICAgIERhdGVUaW1lRWRpdEVsZW1lbnQmIG1fZWRpdEVsZW1l
bnQ7CkBAIC03Myw1MSArNzMsNTEgQEAgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6RGF0ZVRpbWVFZGl0
QnVpbGRlcihEYXRlVGltZUVkaXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBEYXQKIGJvb2wgRGF0
ZVRpbWVFZGl0QnVpbGRlcjo6YnVpbGQoY29uc3QgU3RyaW5nJiBmb3JtYXRTdHJpbmcpCiB7CiAg
ICAgbV9lZGl0RWxlbWVudC5yZXNldEZpZWxkcygpOwotICAgIHJldHVybiBEYXRlVGltZUZvcm1h
dDo6cGFyc2UoZm9ybWF0U3RyaW5nLCAqdGhpcyk7CisgICAgcmV0dXJuIFBBTDo6RGF0ZVRpbWVG
b3JtYXQ6OnBhcnNlKGZvcm1hdFN0cmluZywgKnRoaXMpOwogfQogCi12b2lkIERhdGVUaW1lRWRp
dEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBmaWVsZFR5cGUs
IGludCBjb3VudCkKK3ZvaWQgRGF0ZVRpbWVFZGl0QnVpbGRlcjo6dmlzaXRGaWVsZChQQUw6OkRh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQgY291bnQpCiB7CiAgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gbV9lZGl0RWxlbWVudC5kb2N1bWVudCgpOwogCiAgICAgc3dpdGNo
IChmaWVsZFR5cGUpIHsKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1v
bnRoOiB7CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZk1vbnRo
OiB7CiAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVEYXlGaWVsZEVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNlY29u
ZDogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRnJhY3Rpb25hbFNl
Y29uZDogewogICAgICAgICBtX2VkaXRFbGVtZW50LmFkZEZpZWxkKERhdGVUaW1lTWlsbGlzZWNv
bmRGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91
cjExOiB7CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMTE6IHsK
ICAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVudCwgMCwgMTEpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjogewor
ICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOiB7CiAgICAgICAg
IG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoRGF0ZVRpbWVIb3VyRmllbGRFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIDEsIDEyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjM6IHsKKyAgICBjYXNl
IFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzogewogICAgICAgICBtX2VkaXRF
bGVtZW50LmFkZEZpZWxkKERhdGVUaW1lSG91ckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
LCBtX2VkaXRFbGVtZW50LCAwLCAyMykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Y2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OiB7CisgICAgY2FzZSBQQUw6OkRh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVIb3VyMjQ6IHsKICAgICAgICAgbV9lZGl0RWxlbWVudC5h
ZGRGaWVsZChEYXRlVGltZUhvdXJGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0
RWxlbWVudCwgMSwgMjQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZTogeworICAgIGNhc2UgUEFMOjpEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlTWludXRlOiB7CiAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQo
RGF0ZVRpbWVNaW51dGVGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVu
dCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlTW9udGg6Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhT
dGFuZEFsb25lOiB7CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250
aDoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoU3RhbmRBbG9u
ZTogewogICAgICAgICBjb25zdGV4cHIgaW50IGNvdW50Rm9yQWJicmV2aWF0ZWRNb250aCA9IDM7
CiAgICAgICAgIGNvbnN0ZXhwciBpbnQgY291bnRGb3JGdWxsTW9udGggPSA0OwogICAgICAgICBj
b25zdGV4cHIgaW50IGNvdW50Rm9yTmFycm93TW9udGggPSA1OwpAQCAtMTI1LDEyICsxMjUsMTIg
QEAgdm9pZCBEYXRlVGltZUVkaXRCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGUgZmllbGRUeXBlLCBpbnQgY28KICAgICAgICAgc3dpdGNoIChjb3VudCkgewogICAg
ICAgICBjYXNlIGNvdW50Rm9yTmFycm93TW9udGg6CiAgICAgICAgIGNhc2UgY291bnRGb3JBYmJy
ZXZpYXRlZE1vbnRoOiB7Ci0gICAgICAgICAgICBhdXRvIGZpZWxkID0gRGF0ZVRpbWVTeW1ib2xp
Y01vbnRoRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIGZpZWxk
VHlwZSA9PSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGggPyBtX3BhcmFtZXRlcnMubG9j
YWxlLnNob3J0TW9udGhMYWJlbHMoKSA6IG1fcGFyYW1ldGVycy5sb2NhbGUuc2hvcnRTdGFuZEFs
b25lTW9udGhMYWJlbHMoKSk7CisgICAgICAgICAgICBhdXRvIGZpZWxkID0gRGF0ZVRpbWVTeW1i
b2xpY01vbnRoRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1lbnQsIGZp
ZWxkVHlwZSA9PSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCA/IG1fcGFyYW1l
dGVycy5sb2NhbGUuc2hvcnRNb250aExhYmVscygpIDogbV9wYXJhbWV0ZXJzLmxvY2FsZS5zaG9y
dFN0YW5kQWxvbmVNb250aExhYmVscygpKTsKICAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRk
RmllbGQoZmllbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgY291bnRGb3JGdWxsTW9udGg6IHsKLSAgICAgICAgICAgIGF1dG8gZmllbGQgPSBEYXRlVGlt
ZVN5bWJvbGljTW9udGhGaWVsZEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgbV9lZGl0RWxlbWVu
dCwgZmllbGRUeXBlID09IERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCA/IG1fcGFyYW1l
dGVycy5sb2NhbGUubW9udGhMYWJlbHMoKSA6IG1fcGFyYW1ldGVycy5sb2NhbGUuc3RhbmRBbG9u
ZU1vbnRoTGFiZWxzKCkpOworICAgICAgICAgICAgYXV0byBmaWVsZCA9IERhdGVUaW1lU3ltYm9s
aWNNb250aEZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50LCBmaWVs
ZFR5cGUgPT0gUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGggPyBtX3BhcmFtZXRl
cnMubG9jYWxlLm1vbnRoTGFiZWxzKCkgOiBtX3BhcmFtZXRlcnMubG9jYWxlLnN0YW5kQWxvbmVN
b250aExhYmVscygpKTsKICAgICAgICAgICAgIG1fZWRpdEVsZW1lbnQuYWRkRmllbGQoZmllbGQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNDAsMjIgKzE0MCwyMiBAQCB2
b2lkIERhdGVUaW1lRWRpdEJ1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSBmaWVsZFR5cGUsIGludCBjbwogICAgICAgICB9CiAgICAgfQogCi0gICAgY2FzZSBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9kOiB7CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVQZXJpb2Q6IHsKICAgICAgICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChE
YXRlVGltZU1lcmlkaWVtRmllbGRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIG1fZWRpdEVsZW1l
bnQsIG1fcGFyYW1ldGVycy5sb2NhbGUudGltZUFNUE1MYWJlbHMoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlU2Vjb25kOiB7
CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQ6IHsKICAgICAg
ICAgbV9lZGl0RWxlbWVudC5hZGRGaWVsZChEYXRlVGltZVNlY29uZEZpZWxkRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50LCBtX2VkaXRFbGVtZW50KSk7CiAKICAgICAgICAgaWYgKG1fcGFyYW1ldGVy
cy5zaG91bGRIYXZlTWlsbGlzZWNvbmRGaWVsZCkgewogICAgICAgICAgICAgdmlzaXRMaXRlcmFs
KG1fcGFyYW1ldGVycy5sb2NhbGUubG9jYWxpemVkRGVjaW1hbFNlcGFyYXRvcigpKTsKLSAgICAg
ICAgICAgIHZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNv
bmQsIDMpOworICAgICAgICAgICAgdmlzaXRGaWVsZChQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVGcmFjdGlvbmFsU2Vjb25kLCAzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjogeworICAgIGNh
c2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjogewogICAgICAgICBtX2VkaXRF
bGVtZW50LmFkZEZpZWxkKERhdGVUaW1lWWVhckZpZWxkRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
LCBtX2VkaXRFbGVtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAppbmRleCBjMzA3NzA3
ZjNhNzI0ZDYyMDgwMzM2MDgyY2M4ZGU1ODc1YTcwYjlmLi40ZmQ2MjZhZmU4YTdlZTFmOTI1MGZm
MGVkYTY4NzVkYWY1YzY0N2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1NsaWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTE2OSwxMiArMTY5LDEyIEBAIHZvaWQgUmVuZGVy
U2xpZGVyQ29udGFpbmVyOjpsYXlvdXQoKQogICAgIGF1dG8mIGlucHV0ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKmVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBib29sIGlzVmVy
dGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2UoaW5wdXQpOwogICAgIG11dGFibGVTdHlsZSgp
LnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsZXhEaXJlY3Rpb246OkNvbHVtbiA6IEZs
ZXhEaXJlY3Rpb246OlJvdyk7Ci0gICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0RGlyZWN0aW9uID0g
c3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVj
dGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgaWYgKGlzVmVydGljYWwpIHsKICAgICAg
ICAgLy8gRklYTUU6IFdvcmsgYXJvdW5kIHJvdW5kaW5nIGlzc3VlcyBpbiBSVEwgdmVydGljYWwg
c2xpZGVycy4gV2Ugd2FudCB0aGVtIHRvCiAgICAgICAgIC8vIHJlbmRlciBpZGVudGljYWxseSB0
byBMVFIgdmVydGljYWwgc2xpZGVycy4gV2UgY2FuIHJlbW92ZSB0aGlzIHdvcmsgYXJvdW5kIHdo
ZW4KICAgICAgICAgLy8gc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGVuYWJsZWQgb24gYWxsIHBvcnRz
LgotICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbjo6TFRS
KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSKTsKICAgICB9CiAKICAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5wdXQuc2xpZGVyVGh1
bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggNWI5YTJkMzkyMDQ3OTEwZTc5NTJmM2U2MzI5MmQ3
N2E4ZjlmYjFmYy4uNjExMGY0OTYzMjc2ZmMxMWFiMDNmZjU3ZGRjOWU5ZGM2NTI0YTM1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjpvcHRpb25hbDxTdHlsZTo6RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGMK
ICAgICBuZXdTdHlsZS0+c2V0RmxleEdyb3coMSk7CiAgICAgbmV3U3R5bGUtPnNldE1pbldpZHRo
KExlbmd0aCB7IDAsIExlbmd0aFR5cGU6OkZpeGVkIH0pOyAvLyBOZWVkZWQgZm9yIGNvcnJlY3Qg
c2hyaW5raW5nLgogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpCbG9jayk7
Ci0gICAgbmV3U3R5bGUtPnNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uOjpMVFIpOworICAgIG5l
d1N0eWxlLT5zZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgIC8vIFdl
IGRvbid0IHdhbnQgdGhlIHNoYWRvdyBET00gdG8gYmUgZWRpdGFibGUsIHNvIHdlIHNldCB0aGlz
IGJsb2NrIHRvIHJlYWQtb25seSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNlbGYgaXMgZWRpdGFibGUu
CiAgICAgbmV3U3R5bGUtPnNldFVzZXJNb2RpZnkoVXNlck1vZGlmeTo6UmVhZE9ubHkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaAppbmRleCA5
MzM0YWU3M2VmZTliMzI5YTk4ZmZkZmM4OGQyMmVlMjIwZDQ0NWU2Li43OTAxMzVmMzZhN2NmMmY1
MjI0Zjk1YjAyNjY2ZTg0NjljNjY1ZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svQnVmZmVyZWRMaW5lUmVhZGVyLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9TZWdt
ZW50ZWRTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiBuZXh0TGluZSgpOwogCiBwcml2YXRlOgotICAgIFNlZ21lbnRlZFN0cmlu
ZyBtX2J1ZmZlcjsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBtX2J1ZmZlcjsKICAgICBTdHJp
bmdCdWlsZGVyIG1fbGluZUJ1ZmZlcjsKICAgICBib29sIG1fZW5kT2ZTdHJlYW0geyBmYWxzZSB9
OwogICAgIGJvb2wgbV9tYXliZVNraXBMRiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKaW5kZXggYWE2MTU3Y2JiM2NkMjBkYWNlY2Zi
YzFhZjQ5NjYwYzQ1MjU1ZTE5Ny4uNDUwOTMxNGEwMmE5ODBhZDI4MGY4OGQwODg4ZmI2NzhhNGJk
YWE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNw
cApAQCAtNjYsNyArNjYsNyBAQCBpbmxpbmUgYm9vbCBlbWl0VG9rZW4oV2ViVlRUVG9rZW4mIHJl
c3VsdFRva2VuLCBjb25zdCBXZWJWVFRUb2tlbiYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWlubGluZSBib29sIGFkdmFuY2VBbmRFbWl0VG9rZW4oU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UsIFdlYlZUVFRva2VuJiByZXN1bHRUb2tlbiwgY29uc3QgV2ViVlRUVG9rZW4mIHRva2VuKQor
aW5saW5lIGJvb2wgYWR2YW5jZUFuZEVtaXRUb2tlbihQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBXZWJWVFRUb2tlbiYgcmVzdWx0VG9rZW4sIGNvbnN0IFdlYlZUVFRva2VuJiB0b2tlbikK
IHsKICAgICBzb3VyY2UuYWR2YW5jZSgpOwogICAgIHJldHVybiBlbWl0VG9rZW4ocmVzdWx0VG9r
ZW4sIHRva2VuKTsKQEAgLTc4LDcgKzc4LDcgQEAgV2ViVlRUVG9rZW5pemVyOjpXZWJWVFRUb2tl
bml6ZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBBcHBlbmQgYW4gRU9GIG1hcmtl
ciBhbmQgY2xvc2UgdGhlIGlucHV0ICJzdHJlYW0iLgogICAgIEFTU0VSVCghbV9pbnB1dC5pc0Ns
b3NlZCgpKTsKLSAgICBtX2lucHV0LmFwcGVuZChTdHJpbmcgeyAma0VuZE9mRmlsZU1hcmtlciwg
MSB9KTsKKyAgICBtX2lucHV0LmFwcGVuZChTdHJpbmcgeyAmUEFMOjprRW5kT2ZGaWxlTWFya2Vy
LCAxIH0pOwogICAgIG1faW5wdXQuY2xvc2UoKTsKIH0KIApAQCAtODgsNyArODgsNyBAQCBib29s
IFdlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKFdlYlZUVFRva2VuJiB0b2tlbikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIgY2hhcmFjdGVyID0gbV9wcmVwcm9jZXNzb3IubmV4
dElucHV0Q2hhcmFjdGVyKCk7Ci0gICAgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2Vy
KSB7CisgICAgaWYgKGNoYXJhY3RlciA9PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpIHsKICAgICAg
ICAgbV9wcmVwcm9jZXNzb3IuYWR2YW5jZShtX2lucHV0KTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTExMCw3ICsxMTAsNyBAQCBEYXRhU3RhdGU6CiAgICAgICAgICAgICAvLyAo
T24gdGhlIG5leHQgY2FsbCB0byBuZXh0VG9rZW4gd2Ugd2lsbCBzZWUgJzwnIGFnYWluLCBidXQg
dGFrZSB0aGUgb3RoZXIgYnJhbmNoIGluIHRoaXMgaWYgaW5zdGVhZC4pCiAgICAgICAgICAgICBy
ZXR1cm4gZW1pdFRva2VuKHRva2VuLCBXZWJWVFRUb2tlbjo6U3RyaW5nVG9rZW4ocmVzdWx0LnRv
U3RyaW5nKCkpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09IGtFbmRP
ZkZpbGVNYXJrZXIpCisgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxl
TWFya2VyKQogICAgICAgICByZXR1cm4gYWR2YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0LCB0b2tl
biwgV2ViVlRUVG9rZW46OlN0cmluZ1Rva2VuKHJlc3VsdC50b1N0cmluZygpKSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyKTsKQEAgLTE0Myw3ICsxNDMsNyBA
QCBFc2NhcGVTdGF0ZToKICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnPCcpIHsKICAgICAg
ICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOwogICAgICAgICByZXR1cm4gZW1pdFRva2VuKHRva2Vu
LCBXZWJWVFRUb2tlbjo6U3RyaW5nVG9rZW4ocmVzdWx0LnRvU3RyaW5nKCkpKTsKLSAgICB9IGVs
c2UgaWYgKGNoYXJhY3RlciA9PSBrRW5kT2ZGaWxlTWFya2VyKSB7CisgICAgfSBlbHNlIGlmIChj
aGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIGFkdmFuY2VBbmRFbWl0VG9rZW4obV9pbnB1dCwg
dG9rZW4sIFdlYlZUVFRva2VuOjpTdHJpbmdUb2tlbihyZXN1bHQudG9TdHJpbmcoKSkpOwogICAg
IH0gZWxzZSB7CkBAIC0xNzAsNyArMTcwLDcgQEAgVGFnU3RhdGU6CiAgICAgfSBlbHNlIGlmIChp
c0FTQ0lJRGlnaXQoY2hhcmFjdGVyKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJhY3Rl
cik7CiAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRpbWVzdGFtcFRhZ1N0YXRlKTsKLSAgICB9
IGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJr
ZXIpIHsKKyAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IFBB
TDo6a0VuZE9mRmlsZU1hcmtlcikgewogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7
CiAgICAgICAgIHJldHVybiBhZHZhbmNlQW5kRW1pdFRva2VuKG1faW5wdXQsIHRva2VuLCBXZWJW
VFRUb2tlbjo6U3RhcnRUYWcocmVzdWx0LnRvU3RyaW5nKCkpKTsKICAgICB9IGVsc2UgewpAQCAt
MTgzLDcgKzE4Myw3IEBAIFN0YXJ0VGFnU3RhdGU6CiAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RP
KFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJy4n
KQogICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ0NsYXNzU3RhdGUpOwotICAgIGVs
c2UgaWYgKGNoYXJhY3RlciA9PSAnPicgfHwgY2hhcmFjdGVyID09IGtFbmRPZkZpbGVNYXJrZXIp
CisgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09ICc+JyB8fCBjaGFyYWN0ZXIgPT0gUEFMOjprRW5k
T2ZGaWxlTWFya2VyKQogICAgICAgICByZXR1cm4gYWR2YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0
LCB0b2tlbiwgV2ViVlRUVG9rZW46OlN0YXJ0VGFnKHJlc3VsdC50b1N0cmluZygpKSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyKTsKQEAgLTE5OSw3ICsxOTks
NyBAQCBTdGFydFRhZ0NsYXNzU3RhdGU6CiAgICAgICAgIGFkZE5ld0NsYXNzKGNsYXNzZXMsIGJ1
ZmZlcik7CiAgICAgICAgIGJ1ZmZlci5jbGVhcigpOwogICAgICAgICBXRUJWVFRfQURWQU5DRV9U
TyhTdGFydFRhZ0NsYXNzU3RhdGUpOwotICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09ICc+JyB8
fCBjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikgeworICAgIH0gZWxzZSBpZiAoY2hhcmFj
dGVyID09ICc+JyB8fCBjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKSB7CiAgICAg
ICAgIGFkZE5ld0NsYXNzKGNsYXNzZXMsIGJ1ZmZlcik7CiAgICAgICAgIGJ1ZmZlci5jbGVhcigp
OwogICAgICAgICByZXR1cm4gYWR2YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0LCB0b2tlbiwgV2Vi
VlRUVG9rZW46OlN0YXJ0VGFnKHJlc3VsdC50b1N0cmluZygpLCBjbGFzc2VzLnRvQXRvbVN0cmlu
ZygpKSk7CkBAIC0yMDksMTkgKzIwOSwxOSBAQCBTdGFydFRhZ0NsYXNzU3RhdGU6CiAgICAgfQog
CiBTdGFydFRhZ0Fubm90YXRpb25TdGF0ZToKLSAgICBpZiAoY2hhcmFjdGVyID09ICc+JyB8fCBj
aGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKKyAgICBpZiAoY2hhcmFjdGVyID09ICc+JyB8
fCBjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2VyKQogICAgICAgICByZXR1cm4gYWR2
YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0LCB0b2tlbiwgV2ViVlRUVG9rZW46OlN0YXJ0VGFnKHJl
c3VsdC50b1N0cmluZygpLCBjbGFzc2VzLnRvQXRvbVN0cmluZygpLCBidWZmZXIudG9BdG9tU3Ry
aW5nKCkpKTsKICAgICBidWZmZXIuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgV0VCVlRUX0FEVkFO
Q0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOwogCiBFbmRUYWdTdGF0ZToKLSAgICBpZiAo
Y2hhcmFjdGVyID09ICc+JyB8fCBjaGFyYWN0ZXIgPT0ga0VuZE9mRmlsZU1hcmtlcikKKyAgICBp
ZiAoY2hhcmFjdGVyID09ICc+JyB8fCBjaGFyYWN0ZXIgPT0gUEFMOjprRW5kT2ZGaWxlTWFya2Vy
KQogICAgICAgICByZXR1cm4gYWR2YW5jZUFuZEVtaXRUb2tlbihtX2lucHV0LCB0b2tlbiwgV2Vi
VlRUVG9rZW46OkVuZFRhZyhyZXN1bHQudG9TdHJpbmcoKSkpOwogICAgIHJlc3VsdC5hcHBlbmQo
Y2hhcmFjdGVyKTsKICAgICBXRUJWVFRfQURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CiAKIFRpbWVz
dGFtcFRhZ1N0YXRlOgotICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJhY3RlciA9PSBr
RW5kT2ZGaWxlTWFya2VyKQorICAgIGlmIChjaGFyYWN0ZXIgPT0gJz4nIHx8IGNoYXJhY3RlciA9
PSBQQUw6OmtFbmRPZkZpbGVNYXJrZXIpCiAgICAgICAgIHJldHVybiBhZHZhbmNlQW5kRW1pdFRv
a2VuKG1faW5wdXQsIHRva2VuLCBXZWJWVFRUb2tlbjo6VGltZXN0YW1wVGFnKHJlc3VsdC50b1N0
cmluZygpKSk7CiAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXIpOwogICAgIFdFQlZUVF9BRFZB
TkNFX1RPKFRpbWVzdGFtcFRhZ1N0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dl
YlZUVFRva2VuaXplci5oCmluZGV4IDEwMzc2N2VlM2I4MWM2ZjdiNWMzMGIxOTM3YTU3YWQ0OGJh
MGI3MjMuLmRjZDZiOGM4NWIwNmFiYWQ3ZDBlYzkzNWMyMWZhNDUyOGQxNjhiY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuaApAQCAtNDYsNyArNDYsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgbmV2ZXJTa2lwTnVsbENoYXJhY3RlcnMoKSB7IHJl
dHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgotICAgIFNlZ21lbnRlZFN0cmluZyBtX2lucHV0Owor
ICAgIFBBTDo6U2VnbWVudGVkU3RyaW5nIG1faW5wdXQ7CiAgICAgSW5wdXRTdHJlYW1QcmVwcm9j
ZXNzb3I8V2ViVlRUVG9rZW5pemVyPiBtX3ByZXByb2Nlc3NvcjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21l
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0dlb21ldHJ5LmNwcAppbmRleCAyOWEwMDZmYzMxNGUzZDExOTI0ZjYwYjg3MWI4MmUwNjI4
YjcyZWJmLi4xYjE1ZWM1OWI3YTBjZWE5YjgxYzgyZTExZGE3MzJhMmRjZDcwZDdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdH
ZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0xMDgzLDcgKzEwODMsNyBAQCBMYXlvdXRTaXpl
IEZvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGNvbnN0
IEJveCYgbGF5b3V0QgogICAgIHJldHVybiB7IGxlZnRQb3NpdGlvbk9mZnNldCwgdG9wUG9zaXRp
b25PZmZzZXQgfTsKIH0KIAotaW5saW5lIHN0YXRpYyBXcml0aW5nTW9kZSB1c2VkV3JpdGluZ01v
ZGUoY29uc3QgQm94JiBsYXlvdXRCb3gpCitpbmxpbmUgc3RhdGljIFBBTDo6V3JpdGluZ01vZGUg
dXNlZFdyaXRpbmdNb2RlKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIC8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi9jc3Mtd3JpdGluZy1tb2Rlcy00LyNsb2dpY2FsLWRpcmVjdGlvbi1sYXlv
dXQKICAgICAvLyBGbG93LXJlbGF0aXZlIGRpcmVjdGlvbnMgYXJlIGNhbGN1bGF0ZWQgd2l0aCBy
ZXNwZWN0IHRvIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgdGhl
IGJveC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcAppbmRl
eCA4ZTk1NWJmNzMwMjcwY2Q2NWVlYjkzYmNlOTAzYjQ2YzA1YjJiNjYzLi4yMGE5NDQwODhhNjAx
MGJkYjA5OTllMWM1Mzk4MDE1MmE5Njc0Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lQ29udGVudEJyZWFrZXIuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1
ZGUgIkh5cGhlbmF0aW9uLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvSHlwaGVuYXRpb24uaD4KICNp
bmNsdWRlICJJbmxpbmVJdGVtLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKICNpbmNs
dWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdGQ6Om9wdGlv
bmFsPElubGluZUNvbnRlbnRCcmVha2VyOjpQYXJ0aWFsUnVuPiBJbmxpbmVDb250ZW50QnJlYWtl
cjo6dHJ5QnJlYWtpbgogICAgICAgICAgICAgYXV0byBoeXBoZW5XaWR0aCA9IElubGluZUxheW91
dFVuaXQgeyBmb250Q2FzY2FkZS53aWR0aChUZXh0UnVuIHsgU3RyaW5nVmlldyB7IHN0eWxlLmh5
cGhlblN0cmluZygpIH0gfSkgfTsKICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVUZXh0UnVuLmlz
T3ZlcmZsb3dpbmdSdW4pIHsKICAgICAgICAgICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoRXhj
bHVkaW5nSHlwaGVuID0gYXZhaWxhYmxlV2lkdGggLSBoeXBoZW5XaWR0aDsKLSAgICAgICAgICAg
ICAgICBpZiAoYXZhaWxhYmxlV2lkdGhFeGNsdWRpbmdIeXBoZW4gPD0gMCB8fCAhZW5vdWdoV2lk
dGhGb3JIeXBoZW5hdGlvbihhdmFpbGFibGVXaWR0aEV4Y2x1ZGluZ0h5cGhlbiwgZm9udENhc2Nh
ZGUucGl4ZWxTaXplKCkpKQorICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0aEV4Y2x1
ZGluZ0h5cGhlbiA8PSAwIHx8ICFQQUw6OmVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24oYXZhaWxh
YmxlV2lkdGhFeGNsdWRpbmdIeXBoZW4sIGZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICBsZWZ0U2lkZUxlbmd0
aCA9IFRleHRVdGlsOjpicmVha1dvcmQoaW5saW5lVGV4dEl0ZW0sIGZvbnRDYXNjYWRlLCBjYW5k
aWRhdGVSdW4ubG9naWNhbFdpZHRoLCBhdmFpbGFibGVXaWR0aEV4Y2x1ZGluZ0h5cGhlbiwgY2Fu
ZGlkYXRlVGV4dFJ1bi5sb2dpY2FsTGVmdCkubGVuZ3RoOwogICAgICAgICAgICAgfQpAQCAtNDU4
LDcgKzQ1OCw3IEBAIHN0ZDo6b3B0aW9uYWw8SW5saW5lQ29udGVudEJyZWFrZXI6OlBhcnRpYWxS
dW4+IElubGluZUNvbnRlbnRCcmVha2VyOjp0cnlCcmVha2luCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgICAgIC8vIEFkanVzdCBiZWZvcmUgaW5kZXggdG8gYWNjb21tb2Rh
dGUgdGhlIGxpbWl0LWFmdGVyIHZhbHVlIChpdCdzIHRoZSBsYXN0IHBvdGVudGlhbCBoeXBoZW4g
bG9jYXRpb24gaW4gdGhpcyBydW4pLgogICAgICAgICAgICAgYXV0byBoeXBoZW5CZWZvcmUgPSBz
dGQ6Om1pbihsZWZ0U2lkZUxlbmd0aCwgcnVuTGVuZ3RoIC0gbGltaXRBZnRlcikgKyAxOwotICAg
ICAgICAgICAgdW5zaWduZWQgaHlwaGVuTG9jYXRpb24gPSBsYXN0SHlwaGVuTG9jYXRpb24oU3Ry
aW5nVmlldyhpbmxpbmVUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCkuY29udGVudCgpKS5zdWJzdHJp
bmcoaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpLCBoeXBo
ZW5CZWZvcmUsIHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpOworICAgICAgICAgICAgdW5zaWduZWQg
aHlwaGVuTG9jYXRpb24gPSBQQUw6Omxhc3RIeXBoZW5Mb2NhdGlvbihTdHJpbmdWaWV3KGlubGlu
ZVRleHRJdGVtLmlubGluZVRleHRCb3goKS5jb250ZW50KCkpLnN1YnN0cmluZyhpbmxpbmVUZXh0
SXRlbS5zdGFydCgpLCBpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSksIGh5cGhlbkJlZm9yZSwgc3R5
bGUuY29tcHV0ZWRMb2NhbGUoKSk7CiAgICAgICAgICAgICBpZiAoIWh5cGhlbkxvY2F0aW9uIHx8
IGh5cGhlbkxvY2F0aW9uIDwgbGltaXRCZWZvcmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAgICAgICAgIC8vIGh5cGhlbkxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFy
dCBvZiB0aGlzIElubGluZUl0ZW1UZXh0LgpAQCAtNjQ5LDcgKzY0OSw3IEBAIE9wdGlvblNldDxJ
bmxpbmVDb250ZW50QnJlYWtlcjo6V29yZEJyZWFrUnVsZT4gSW5saW5lQ29udGVudEJyZWFrZXI6
OndvcmRCcmVha0JlCiAgICAgICAgIHJldHVybiB7IFdvcmRCcmVha1J1bGU6OkF0QXJiaXRyYXJ5
UG9zaXRpb25XaXRoaW5Xb3JkcyB9OwogCiAgICAgYXV0byBpbmNsdWRlSHlwaGVuYXRpb25JZkFs
bG93ZWQgPSBbJl0oc3RkOjpvcHRpb25hbDxJbmxpbmVDb250ZW50QnJlYWtlcjo6V29yZEJyZWFr
UnVsZT4gd29yZEJyZWFrUnVsZSkgLT4gT3B0aW9uU2V0PElubGluZUNvbnRlbnRCcmVha2VyOjpX
b3JkQnJlYWtSdWxlPiB7Ci0gICAgICAgIGF1dG8gaHlwaGVuYXRpb25Jc0FsbG93ZWQgPSAhbl9o
eXBoZW5hdGlvbklzRGlzYWJsZWQgJiYgc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8g
JiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpOworICAgICAgICBhdXRvIGh5
cGhlbmF0aW9uSXNBbGxvd2VkID0gIW5faHlwaGVuYXRpb25Jc0Rpc2FibGVkICYmIHN0eWxlLmh5
cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIFBBTDo6Y2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1
dGVkTG9jYWxlKCkpOwogICAgICAgICBpZiAoaHlwaGVuYXRpb25Jc0FsbG93ZWQpIHsKICAgICAg
ICAgICAgIGlmICh3b3JkQnJlYWtSdWxlKQogICAgICAgICAgICAgICAgIHJldHVybiB7ICp3b3Jk
QnJlYWtSdWxlLCBXb3JkQnJlYWtSdWxlOjpBdEh5cGhlbmF0aW9uT3Bwb3J0dW5pdGllcyB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxp
bmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAKaW5kZXggNDFmMWIyZjQ1
NWM5ZGI4MmIxZTU3MzEwNmFiZDRjYzMxOTBmMmNjZi4uNzhkZjllNWQwZDY4NjYyMGFkYzY1MzUw
NzM4ZWM3MjI3Y2M0OGJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVJdGVtc0J1aWxk
ZXIuY3BwCkBAIC0xOTMsNyArMTkzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJ1aWxkQmlkaVBh
cmFncmFwaChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsICBTdHJpbmdCdWkKICAgICAg
ICAgZWxzZSBpZiAoaW5saW5lSXRlbS5pc0lubGluZUJveFN0YXJ0KCkgfHwgaW5saW5lSXRlbS5p
c0lubGluZUJveEVuZCgpKSB7CiAgICAgICAgICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLXdyaXRpbmctbW9kZXMvI3VuaWNvZGUtYmlkaQogICAgICAgICAgICAgYXV0byYgc3R5
bGUgPSBpbmxpbmVJdGVtLnN0eWxlKCk7Ci0gICAgICAgICAgICBhdXRvIGluaXRpYXRlc0NvbnRy
b2xDaGFyYWN0ZXIgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0
eWxlLnVuaWNvZGVCaWRpKCkgIT0gRVVuaWNvZGVCaWRpOjpVQk5vcm1hbDsKKyAgICAgICAgICAg
IGF1dG8gaW5pdGlhdGVzQ29udHJvbENoYXJhY3RlciA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0g
T3JkZXI6OkxvZ2ljYWwgJiYgc3R5bGUudW5pY29kZUJpZGkoKSAhPSBQQUw6OkVVbmljb2RlQmlk
aTo6VUJOb3JtYWw7CiAgICAgICAgICAgICBpZiAoIWluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIp
IHsKICAgICAgICAgICAgICAgICAvLyBPcGFxdWUgaXRlbXMgZG8gbm90IGhhdmUgcG9zaXRpb24g
aW4gdGhlIGJpZGkgcGFyYWdyYXBoLiBUaGV5IGluaGVyaXQgdGhlaXIgYmlkaSBsZXZlbCBmcm9t
IHRoZSBuZXh0IGlubGluZSBpdGVtLgogICAgICAgICAgICAgICAgIGlubGluZUl0ZW1PZmZzZXRM
aXN0LnVuY2hlY2tlZEFwcGVuZCh7IH0pOwpAQCAtMjAyLDI0ICsyMDIsMjQgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGJ1aWxkQmlkaVBhcmFncmFwaChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRl
bXMsICBTdHJpbmdCdWkKICAgICAgICAgICAgIGlubGluZUl0ZW1PZmZzZXRMaXN0LnVuY2hlY2tl
ZEFwcGVuZCh7IHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLmxlbmd0aCgpIH0pOwogICAgICAgICAg
ICAgYXV0byBpc0VudGVyaW5nQmlkaSA9IGlubGluZUl0ZW0uaXNJbmxpbmVCb3hTdGFydCgpOwog
ICAgICAgICAgICAgc3dpdGNoIChzdHlsZS51bmljb2RlQmlkaSgpKSB7Ci0gICAgICAgICAgICBj
YXNlIEVVbmljb2RlQmlkaTo6VUJOb3JtYWw6CisgICAgICAgICAgICBjYXNlIFBBTDo6RVVuaWNv
ZGVCaWRpOjpVQk5vcm1hbDoKICAgICAgICAgICAgICAgICAvLyBUaGUgYm94IGRvZXMgbm90IG9w
ZW4gYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBlbWJlZGRpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBi
aWRpcmVjdGlvbmFsIGFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAvLyBGb3IgaW5saW5lIGJv
eGVzLCBpbXBsaWNpdCByZW9yZGVyaW5nIHdvcmtzIGFjcm9zcyBib3ggYm91bmRhcmllcy4KICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpFbWJlZDoKKyAgICAgICAgICAgIGNh
c2UgUEFMOjpFVW5pY29kZUJpZGk6OkVtYmVkOgogICAgICAgICAgICAgICAgIHBhcmFncmFwaENv
bnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChzdHlsZS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBsZWZ0VG9SaWdodEVtYmVkIDogcmlnaHRUb0xlZnRFbWJlZCkgOiBwb3BE
aXJlY3Rpb25hbEZvcm1hdHRpbmcpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBFVW5pY29kZUJpZGk6Ok92ZXJyaWRlOgorICAgICAgICAgICAgY2FzZSBQQUw6OkVV
bmljb2RlQmlkaTo6T3ZlcnJpZGU6CiAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1
aWxkZXIuYXBwZW5kKGlzRW50ZXJpbmdCaWRpID8gKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IGxlZnRUb1JpZ2h0T3ZlcnJpZGUgOiByaWdodFRvTGVmdE92ZXJyaWRlKSA6IHBvcERp
cmVjdGlvbmFsRm9ybWF0dGluZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEVVbmljb2RlQmlkaTo6SXNvbGF0ZToKKyAgICAgICAgICAgIGNhc2UgUEFMOjpFVW5p
Y29kZUJpZGk6Oklzb2xhdGU6CiAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1aWxk
ZXIuYXBwZW5kKGlzRW50ZXJpbmdCaWRpID8gKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IGxlZnRUb1JpZ2h0SXNvbGF0ZSA6IHJpZ2h0VG9MZWZ0SXNvbGF0ZSkgOiBwb3BEaXJlY3Rp
b25hbElzb2xhdGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBF
VW5pY29kZUJpZGk6OlBsYWludGV4dDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpFVW5pY29kZUJp
ZGk6OlBsYWludGV4dDoKICAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5h
cHBlbmQoaXNFbnRlcmluZ0JpZGkgPyBmaXJzdFN0cm9uZ0lzb2xhdGUgOiBwb3BEaXJlY3Rpb25h
bElzb2xhdGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFVW5p
Y29kZUJpZGk6Oklzb2xhdGVPdmVycmlkZToKKyAgICAgICAgICAgIGNhc2UgUEFMOjpFVW5pY29k
ZUJpZGk6Oklzb2xhdGVPdmVycmlkZToKICAgICAgICAgICAgICAgICBpZiAoaXNFbnRlcmluZ0Jp
ZGkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1aWxkZXIuYXBwZW5k
KGZpcnN0U3Ryb25nSXNvbGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENvbnRl
bnRCdWlsZGVyLmFwcGVuZChzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsZWZ0VG9S
aWdodE92ZXJyaWRlIDogcmlnaHRUb0xlZnRPdmVycmlkZSk7CkBAIC0yNjMsNyArMjYzLDcgQEAg
dm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmJyZWFrQW5kQ29tcHV0ZUJpZGlMZXZlbHMoSW5saW5l
SXRlbXMmIGlubGluZUl0ZW1zKQogICAgIH0pOwogCiAgICAgVUJpRGlMZXZlbCByb290QmlkaUxl
dmVsID0gVUJJRElfREVGQVVMVF9MVFI7Ci0gICAgYm9vbCB1c2VIZXVyaXN0aWNCYXNlRGlyZWN0
aW9uID0gcm9vdCgpLnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBFVW5pY29kZUJpZGk6OlBsYWlu
dGV4dDsKKyAgICBib29sIHVzZUhldXJpc3RpY0Jhc2VEaXJlY3Rpb24gPSByb290KCkuc3R5bGUo
KS51bmljb2RlQmlkaSgpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ7CiAgICAgaWYg
KCF1c2VIZXVyaXN0aWNCYXNlRGlyZWN0aW9uKQogICAgICAgICByb290QmlkaUxldmVsID0gcm9v
dCgpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVUJJRElfTFRSIDogVUJJRElf
UlRMOwogCkBAIC00NzUsMTQgKzQ3NSwxNCBAQCB2b2lkIElubGluZUl0ZW1zQnVpbGRlcjo6aGFu
ZGxlSW5saW5lQm94U3RhcnQoY29uc3QgQm94JiBpbmxpbmVCb3gsIElubGluZUl0ZW1zJgogewog
ICAgIGlubGluZUl0ZW1zLmFwcGVuZCh7IGlubGluZUJveCwgSW5saW5lSXRlbTo6VHlwZTo6SW5s
aW5lQm94U3RhcnQgfSk7CiAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVCb3guc3R5bGUoKTsKLSAg
ICBtX2hhc1NlZW5CaWRpQ29udGVudCA9IG1faGFzU2VlbkJpZGlDb250ZW50IHx8IChzdHlsZS5y
dGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0g
RVVuaWNvZGVCaWRpOjpVQk5vcm1hbCk7IAorICAgIG1faGFzU2VlbkJpZGlDb250ZW50ID0gbV9o
YXNTZWVuQmlkaUNvbnRlbnQgfHwgKHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OkxvZ2lj
YWwgJiYgc3R5bGUudW5pY29kZUJpZGkoKSAhPSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWwp
OyAKIH0KIAogdm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveEVuZChjb25z
dCBCb3gmIGlubGluZUJveCwgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQogewogICAgIGlubGlu
ZUl0ZW1zLmFwcGVuZCh7IGlubGluZUJveCwgSW5saW5lSXRlbTo6VHlwZTo6SW5saW5lQm94RW5k
IH0pOwogICAgIC8vIElubGluZSBib3ggZW5kIGl0ZW0gaXRzZWxmIGNhbiBub3QgdHJpZ2dlciBi
aWRpIGNvbnRlbnQuCi0gICAgQVNTRVJUKGhhc1NlZW5CaWRpQ29udGVudCgpIHx8IGlubGluZUJv
eC5zdHlsZSgpLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbCB8fCBpbmxpbmVCb3guc3R5
bGUoKS51bmljb2RlQmlkaSgpID09IEVVbmljb2RlQmlkaTo6VUJOb3JtYWwpOworICAgIEFTU0VS
VChoYXNTZWVuQmlkaUNvbnRlbnQoKSB8fCBpbmxpbmVCb3guc3R5bGUoKS5ydGxPcmRlcmluZygp
ID09IE9yZGVyOjpWaXN1YWwgfHwgaW5saW5lQm94LnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQ
QUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWwpOwogfQogCiB2b2lkIElubGluZUl0ZW1zQnVpbGRl
cjo6aGFuZGxlSW5saW5lTGV2ZWxCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIElubGluZUl0ZW1z
JiBpbmxpbmVJdGVtcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHAKaW5kZXggMjcxY2U2NGI2
M2MzY2EzMDdjMGMxZTI3NWQ4ZjdmNTQwMzgzYWExNC4uMGI1MjRhYmRkNmI1ZGZjMmE0NTE3MjBl
Y2E2ZWRjYWJlYzFkMmM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5jcHAKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUg
IklubGluZVNvZnRMaW5lQnJlYWtJdGVtLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnku
aCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3Mu
aD4KICNpbmNsdWRlICJUZXh0VXRpbC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIExpbmU6OmFwcGx5UnVuRXhwYW5zaW9uKElu
bGluZUxheW91dFVuaXQgaG9yaXpvbnRhbEF2YWlsYWJsZVNwYWNlKQogICAgIC8vIENvbGxlY3Qg
YW5kIGRpc3RyaWJ1dGUgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzLgogICAgIHNpemVfdCBs
aW5lRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyA9IDA7CiAgICAgVmVjdG9yPHNpemVfdD4gcnVuc0V4
cGFuc2lvbk9wcG9ydHVuaXRpZXMobV9ydW5zLnNpemUoKSk7Ci0gICAgVmVjdG9yPEV4cGFuc2lv
bkJlaGF2aW9yPiBydW5zRXhwYW5zaW9uQmVoYXZpb3JzKG1fcnVucy5zaXplKCkpOworICAgIFZl
Y3RvcjxQQUw6OkV4cGFuc2lvbkJlaGF2aW9yPiBydW5zRXhwYW5zaW9uQmVoYXZpb3JzKG1fcnVu
cy5zaXplKCkpOwogICAgIGF1dG8gbGFzdFJ1bkluZGV4V2l0aENvbnRlbnQgPSBzdGQ6Om9wdGlv
bmFsPHNpemVfdD4geyB9OwogCiAgICAgLy8gTGluZSBzdGFydCBiZWhhdmVzIGFzIGlmIHdlIGhh
ZCBhbiBleHBhbnNpb24gaGVyZSAoaS5lLiBmaXN0IHJ1bnMgc2hvdWxkIG5vdCBzdGFydCB3aXRo
IGFsbG93aW5nIGxlZnQgZXhwYW5zaW9uKS4KQEAgLTExNCwxNSArMTE0LDE1IEBAIHZvaWQgTGlu
ZTo6YXBwbHlSdW5FeHBhbnNpb24oSW5saW5lTGF5b3V0VW5pdCBob3Jpem9udGFsQXZhaWxhYmxl
U3BhY2UpCiAgICAgYXV0byBoYW5naW5nVHJhaWxpbmdDb250ZW50TGVuZ3RoID0gbV9oYW5naW5n
VHJhaWxpbmdDb250ZW50Lmxlbmd0aCgpOwogICAgIGZvciAoc2l6ZV90IHJ1bkluZGV4ID0gMDsg
cnVuSW5kZXggPCBtX3J1bnMuc2l6ZSgpOyArK3J1bkluZGV4KSB7CiAgICAgICAgIGF1dG8mIHJ1
biA9IG1fcnVuc1tydW5JbmRleF07Ci0gICAgICAgIGludCBleHBhbnNpb25CZWhhdmlvciA9IERl
ZmF1bHRFeHBhbnNpb247CisgICAgICAgIGludCBleHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVm
YXVsdEV4cGFuc2lvbjsKICAgICAgICAgc2l6ZV90IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXNJblJ1
biA9IDA7CiAKICAgICAgICAgLy8gRklYTUU6IENoZWNrIHdoeSB3ZSBkb24ndCBhcHBseSBleHBh
bnNpb24gd2hlbiB3aGl0ZXNwYWNlIGlzIHByZXNlcnZlZC4KICAgICAgICAgaWYgKHJ1bi5pc1Rl
eHQoKSAmJiAoIVRleHRVdGlsOjpzaG91bGRQcmVzZXJ2ZVNwYWNlc0FuZFRhYnMocnVuLmxheW91
dEJveCgpKSB8fCBoYW5naW5nVHJhaWxpbmdDb250ZW50TGVuZ3RoKSkgewogICAgICAgICAgICAg
aWYgKHJ1bi5oYXNUZXh0Q29tYmluZSgpKQotICAgICAgICAgICAgICAgIGV4cGFuc2lvbkJlaGF2
aW9yID0gRm9yYmlkTGVmdEV4cGFuc2lvbiB8IEZvcmJpZFJpZ2h0RXhwYW5zaW9uOworICAgICAg
ICAgICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yID0gUEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uIHwg
UEFMOjpGb3JiaWRSaWdodEV4cGFuc2lvbjsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yID0gKHJ1bklzQWZ0ZXJFeHBhbnNpb24gPyBGb3JiaWRM
ZWZ0RXhwYW5zaW9uIDogQWxsb3dMZWZ0RXhwYW5zaW9uKSB8IEFsbG93UmlnaHRFeHBhbnNpb247
CisgICAgICAgICAgICAgICAgZXhwYW5zaW9uQmVoYXZpb3IgPSAocnVuSXNBZnRlckV4cGFuc2lv
biA/IFBBTDo6Rm9yYmlkTGVmdEV4cGFuc2lvbiA6IFBBTDo6QWxsb3dMZWZ0RXhwYW5zaW9uKSB8
IFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbjsKICAgICAgICAgICAgICAgICBhdXRvJiB0ZXh0Q29u
dGVudCA9ICpydW4udGV4dENvbnRlbnQoKTsKICAgICAgICAgICAgICAgICAvLyBUcmFpbGluZyBo
YW5naW5nIHdoaXRlc3BhY2Ugc2VxdWVuY2UgaXMgaWdub3JlZCB3aGVuIGNvbXB1dGluZyB0aGUg
ZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMuCiAgICAgICAgICAgICAgICAgYXV0byBoYW5naW5nVHJh
aWxpbmdDb250ZW50SW5DdXJyZW50UnVuID0gc3RkOjptaW4odGV4dENvbnRlbnQubGVuZ3RoLCBo
YW5naW5nVHJhaWxpbmdDb250ZW50TGVuZ3RoKTsKQEAgLTE0Myw4ICsxNDMsOCBAQCB2b2lkIExp
bmU6OmFwcGx5UnVuRXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgaG9yaXpvbnRhbEF2YWlsYWJs
ZVNwYWNlKQogICAgIC8vIE5lZWQgdG8gZml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4
cGFuc2lvbi4KICAgICBpZiAobGFzdFJ1bkluZGV4V2l0aENvbnRlbnQgJiYgcnVuc0V4cGFuc2lv
bk9wcG9ydHVuaXRpZXNbKmxhc3RSdW5JbmRleFdpdGhDb250ZW50XSkgewogICAgICAgICAvLyBU
dXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRoZSBmb3JiaWQgdHJhaWxp
bmcgZXhwYW5zaW9uLgotICAgICAgICBhdXRvIGxlYWRpbmdFeHBhbnNpb24gPSBydW5zRXhwYW5z
aW9uQmVoYXZpb3JzWypsYXN0UnVuSW5kZXhXaXRoQ29udGVudF0gJiBMZWZ0RXhwYW5zaW9uTWFz
azsKLSAgICAgICAgcnVuc0V4cGFuc2lvbkJlaGF2aW9yc1sqbGFzdFJ1bkluZGV4V2l0aENvbnRl
bnRdID0gbGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJpZFJpZ2h0RXhwYW5zaW9uOworICAgICAgICBh
dXRvIGxlYWRpbmdFeHBhbnNpb24gPSBydW5zRXhwYW5zaW9uQmVoYXZpb3JzWypsYXN0UnVuSW5k
ZXhXaXRoQ29udGVudF0gJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrOworICAgICAgICBydW5zRXhw
YW5zaW9uQmVoYXZpb3JzWypsYXN0UnVuSW5kZXhXaXRoQ29udGVudF0gPSBsZWFkaW5nRXhwYW5z
aW9uIHwgUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lvbjsKICAgICAgICAgaWYgKHJ1bklzQWZ0ZXJF
eHBhbnNpb24pIHsKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxhc3QgcnVuIGhhcyBhbiBhZnRl
ciBleHBhbnNpb24gKGUuZy4gQ0pLIGlkZW9ncmFwaCkgd2UgbmVlZCB0byByZW1vdmUgdGhpcyB0
cmFpbGluZyBleHBhbnNpb24gb3Bwb3J0dW5pdHkuCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBpcyBub3QgYWJvdXQgdHJhaWxpbmcgY29sbGFwc2libGUgd2hpdGVzcGFjZSBhcyBhdCB0
aGlzIHBvaW50IHdlIHRyaW1tZWQgdGhlbSBhbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmgKaW5k
ZXggZDQwN2I5NDU3ODNjMTA0MTk1ODc5MjZkZGI4M2U3NWU0Y2QxYzE4My4uZGJiNjA2NTI0N2Nj
YzdkOTg5MmM5OGMwOTM3ZmU2NzYyYTk2YjlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuaApA
QCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCB0cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGg7IH0KIAogICAgICAgICBib29sIHNob3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhhbmcoKSBj
b25zdDsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24oKSBjb25zdDsKKyAg
ICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGlubGluZURpcmVjdGlvbigpIGNvbnN0OwogICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxldHRlclNwYWNpbmcoKSBjb25zdDsKICAgICAgICAgYm9vbCBo
YXNUZXh0Q29tYmluZSgpIGNvbnN0OwogCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAg
ICAgICBJbmxpbmVEaXNwbGF5OjpCb3g6OkV4cGFuc2lvbiBtX2V4cGFuc2lvbjsKICAgICAgICAg
c3RydWN0IFN0eWxlIHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkVHJhaWxpbmdXaGl0ZXNwYWNl
SGFuZyB7IGZhbHNlIH07Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGlubGluZURpcmVjdGlv
biB7IFRleHREaXJlY3Rpb246OlJUTCB9OworICAgICAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IGlubGluZURpcmVjdGlvbiB7IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIH07CiAgICAgICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxldHRlclNwYWNpbmcgeyAwIH07CiAgICAgICAgICAgICBib29s
IGhhc1RleHRDb21iaW5lIHsgZmFsc2UgfTsKICAgICAgICAgfTsKQEAgLTI3MCw3ICsyNzAsNyBA
QCBpbmxpbmUgYm9vbCBMaW5lOjpSdW46OnNob3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhhbmcoKSBj
b25zdAogICAgIHJldHVybiBtX3N0eWxlLnNob3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhhbmc7CiB9
CiAKLWlubGluZSBUZXh0RGlyZWN0aW9uIExpbmU6OlJ1bjo6aW5saW5lRGlyZWN0aW9uKCkgY29u
c3QKK2lubGluZSBQQUw6OlRleHREaXJlY3Rpb24gTGluZTo6UnVuOjppbmxpbmVEaXJlY3Rpb24o
KSBjb25zdAogewogICAgIHJldHVybiBtX3N0eWxlLmlubGluZURpcmVjdGlvbjsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rp
c3BsYXkvSW5saW5lRGlzcGxheUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Qm94LmgKaW5kZXggNWYwYTI3
NTA0NGY0NjAyZTQ1NjYzNGYwYjE0ZGNmYmM2M2RiYzNlMy4uMGQwNjI2MTA2N2Y2ODdhNjM3NTVh
ZGUwMTZlZDIxZjFmYjQxMTc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Qm94LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9J
bmxpbmVEaXNwbGF5Qm94LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIklubGluZVJl
Y3QuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNp
bmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx1bmljb2RlL3ViaWRpLmg+
CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBAIC0xMjQsNyArMTI0LDcgQEAgc3RydWN0
IEJveCB7CiAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0PiYgdGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dDsgfQogCiAgICAgc3RydWN0IEV4cGFuc2lvbiB7Ci0gICAgICAgIEV4cGFuc2lv
bkJlaGF2aW9yIGJlaGF2aW9yIHsgRGVmYXVsdEV4cGFuc2lvbiB9OworICAgICAgICBQQUw6OkV4
cGFuc2lvbkJlaGF2aW9yIGJlaGF2aW9yIHsgUEFMOjpEZWZhdWx0RXhwYW5zaW9uIH07CiAgICAg
ICAgIExheW91dDo6SW5saW5lTGF5b3V0VW5pdCBob3Jpem9udGFsRXhwYW5zaW9uIHsgMCB9Owog
ICAgIH07CiAgICAgRXhwYW5zaW9uIGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5z
aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS90ZXh0L1RleHRVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL3RleHQvVGV4dFV0aWwuY3BwCmluZGV4IDY3MWZlZWEyMGFl
YTEzODY0NDEzZjNjMDQ3M2JkMTQ5NmY4MGZkNDkuLmVkMzFkYWQ5ZTIwNjA2YjhmZTM3MDdkNDkw
Mjg4OGI1OTEzN2E1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL3RleHQvVGV4dFV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL3RleHQvVGV4dFV0aWwuY3BwCkBAIC0x
MzQsOCArMTM0LDggQEAgVGV4dFV0aWw6OkZhbGxiYWNrRm9udExpc3QgVGV4dFV0aWw6OmZhbGxi
YWNrRm9udHNGb3JSdW4oY29uc3QgTGluZTo6UnVuJiBydW4sIGMKIAogICAgIGF1dG8gdGV4dCA9
ICpydW4udGV4dENvbnRlbnQoKTsKICAgICBpZiAodGV4dC5uZWVkc0h5cGhlbikKLSAgICAgICAg
Y29sbGVjdEZhbGxiYWNrRm9udHMoVGV4dFJ1biB7IFN0cmluZ1ZpZXcoc3R5bGUuaHlwaGVuU3Ry
aW5nKCkuc3RyaW5nKCkpLCB7IH0sIHsgfSwgRGVmYXVsdEV4cGFuc2lvbiwgc3R5bGUuZGlyZWN0
aW9uKCkgfSk7Ci0gICAgY29sbGVjdEZhbGxiYWNrRm9udHMoVGV4dFJ1biB7IFN0cmluZ1ZpZXco
aW5saW5lVGV4dEJveC5jb250ZW50KCkpLnN1YnN0cmluZyh0ZXh0LnN0YXJ0LCB0ZXh0Lmxlbmd0
aCksIHsgfSwgeyB9LCBEZWZhdWx0RXhwYW5zaW9uLCBzdHlsZS5kaXJlY3Rpb24oKSB9KTsKKyAg
ICAgICAgY29sbGVjdEZhbGxiYWNrRm9udHMoVGV4dFJ1biB7IFN0cmluZ1ZpZXcoc3R5bGUuaHlw
aGVuU3RyaW5nKCkuc3RyaW5nKCkpLCB7IH0sIHsgfSwgUEFMOjpEZWZhdWx0RXhwYW5zaW9uLCBz
dHlsZS5kaXJlY3Rpb24oKSB9KTsKKyAgICBjb2xsZWN0RmFsbGJhY2tGb250cyhUZXh0UnVuIHsg
U3RyaW5nVmlldyhpbmxpbmVUZXh0Qm94LmNvbnRlbnQoKSkuc3Vic3RyaW5nKHRleHQuc3RhcnQs
IHRleHQubGVuZ3RoKSwgeyB9LCB7IH0sIFBBTDo6RGVmYXVsdEV4cGFuc2lvbiwgc3R5bGUuZGly
ZWN0aW9uKCkgfSk7CiAgICAgcmV0dXJuIGZhbGxiYWNrRm9udHM7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmgKaW5k
ZXggODEzZjViMGU2NTkwMzQxM2ZmNDYyZTQ5ZTFmODkzNzgxODYzNmM3ZS4uNjJkMWZhOTk5ZmM2
OTU0MDA0ZTUzZTQ2ZWU4MjA2NGIwY2JmM2JiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmgKQEAgLTc4LDggKzc4LDgg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIHJpZ2h0bW9zdENhcmV0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4aW11bUNhcmV0T2Zmc2V0KCkgOiBt
aW5pbXVtQ2FyZXRPZmZzZXQoKTsgfQogCiAgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwoKSBj
b25zdDsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlM
ZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsgfQot
ICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgYm9vbCBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7IH0KIAogICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0
aW9uU3RhdGUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oCmluZGV4IDhh
YzZkZTA0ZWE5YzE0ZGM0ZGYxMDMwYTBjM2RhOGQ2OTM4Y2RlZjAuLmFlZjM2NTYzNTQzOTJmYmE1
NTU5YWUyY2RiZGI1Yjc3NjI0YTcyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgK
QEAgLTI2Nyw3ICsyNjcsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IExheW91dEludGVncmF0aW9u
OjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5saW5lRm9yQm94
KGJveCgpKTsgfQogCiAgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCgpIGNvbnN0IHsg
cmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKCkpOyB9Ci0gICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGly
ZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogCiAgICAgUmVmUHRy
PGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50PiBtX2lubGluZUNvbnRlbnQ7
CiAgICAgc2l6ZV90IG1fYm94SW5kZXggeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwCmluZGV4
IDI2MGNkOTk4ZDUyZDJhYWY0ZDkyNTUyZjBjMmU2ZDIyYTYxNDc4MDAuLjA2ZWY2NGNjYzJhMGIw
ZjhlYmU0YmUzYzQ4ZDZhYzVmMDAxMzRkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwCkBAIC03
Nyw3ICs3Nyw3IEBAIGZsb2F0IFRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9m
ZnNldCkgY29uc3QKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0KCk7CiAKICAgICBhdXRvIFtz
dGFydE9mZnNldCwgZW5kT2Zmc2V0XSA9IFsmXSB7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChkaXJlY3Rpb24oKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBzZWxlY3Rh
YmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQpLCBsZW5ndGgoKSB9OwogICAgICAgICByZXR1cm4gc3Rk
OjpwYWlyIHsgMHUsIHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKG9mZnNldCkgfTsKICAgICB9KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25Db3ZlcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAKaW5kZXggM2Q5ZmJjZDYwMWQ5ZGVmN2Y5Mzc5
NTM4ZWIwZmE2NTFjMzZkOWJkMy4uYzNjZjZiOWMxMDE2MzJhNzEwYmI5ZjFlNmQyMjIyOTZkMDlm
NGUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcApAQCAtNDM4LDkgKzQzOCw5IEBA
IHN0YXRpYyBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBjYW5Vc2VGb3JTdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEluY2x1CiAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwog
ICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05vdExUUiwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgIGlmIChzdHlsZS53cml0aW5nTW9kZSgpICE9IFdyaXRpbmdNb2RlOjpUb3BU
b0JvdHRvbSkKKyAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBQQUw6OldyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbSkKICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SXNOb3RUb3BUb0JvdHRvbSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChz
dHlsZS51bmljb2RlQmlkaSgpICE9IFVCTm9ybWFsKQorICAgIGlmIChzdHlsZS51bmljb2RlQmlk
aSgpICE9IFBBTDo6VUJOb3JtYWwpCiAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc05vbk5vcm1hbFVuaWNvZGVCaURpLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7CiAgICAgaWYgKHN0eWxlLnJ0bE9yZGVyaW5nKCkgIT0gT3JkZXI6OkxvZ2ljYWwpCiAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1JUTE9yZGVyaW5nLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAppbmRleCBjZjZjY2YyYmQwODkyNTBjNjAzZmQwNGI3NGMzZWM4YzBlNDljNGYxLi4z
ZjBlNTlkNzFjNDU1MzdkYWI0NzkwYmZmNjM1NmQ4MzVlOGFkZDY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTE4MTgsNyArMTgxOCw3IEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6OnNldEN1c3RvbUhlYWRlckZpZWxkcyhWZWN0b3I8Q3VzdG9tSGVhZGVyRmll
bGRzPiYmIGZpZWxkcykKICAgICBtX2N1c3RvbUhlYWRlckZpZWxkcyA9IFdURk1vdmUoZmllbGRz
KTsKIH0KIAotdm9pZCBEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUoY29uc3QgU3RyaW5nV2l0aERp
cmVjdGlvbiYgdGl0bGUpCit2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRUaXRsZShjb25zdCBQQUw6
OlN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQogewogICAgIGlmIChtX3BhZ2VUaXRsZSA9PSB0
aXRsZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
aAppbmRleCBmN2YzZjM4NDRmMTg0NDdiZThkZDdiODJkM2E0NDM1MDAyMjE2NzYyLi41ZjBlZDgz
OGFmNDUwNmEyYTEwMDUwYTA0NDFmOGExNDAyMTAxZTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuaApAQCAtNDgsMTAgKzQ4LDEwIEBACiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGEuaCIK
LSNpbmNsdWRlICJTdHJpbmdXaXRoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENv
bnRlbnRzLmgiCiAjaW5jbHVkZSAiU3Vic3RpdHV0ZURhdGEuaCIKICNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPHBhbC90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC0yMTUsNyArMjE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hP
bmxvYWRFdmVudHMoKTsKICAgICBib29sIHdhc09ubG9hZERpc3BhdGNoZWQoKSB7IHJldHVybiBt
X3dhc09ubG9hZERpc3BhdGNoZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzTG9hZGlu
Z0luQVBJU2Vuc2UoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRpdGxlKGNv
bnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRp
dGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIGNvbnN0IFN0cmluZyYg
b3ZlcnJpZGVFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVFbmNvZGluZzsgfQog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0yNjUsNyArMjY1LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgbGFzdENoZWNrZWRSZXF1ZXN0KCkgIHsgcmV0dXJuIG1fbGFz
dENoZWNrZWRSZXF1ZXN0OyB9CiAKICAgICB2b2lkIHN0b3BSZWNvcmRpbmdSZXNwb25zZXMoKTsK
LSAgICBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFnZVRpdGxlOyB9CisgICAgY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZVRpdGxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBVUkwg
dXJsRm9ySGlzdG9yeSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdXJsRm9ySGlz
dG9yeVJlZmxlY3RzRmFpbHVyZSgpIGNvbnN0OwpAQCAtNTc1LDcgKzU3NSw3IEBAIHByaXZhdGU6
CiAgICAgLy8gYW5kIHNob3VsZCBiZSBtZXJnZWQuCiAgICAgYm9vbCBtX3dhc09ubG9hZERpc3Bh
dGNoZWQgeyBmYWxzZSB9OwogCi0gICAgU3RyaW5nV2l0aERpcmVjdGlvbiBtX3BhZ2VUaXRsZTsK
KyAgICBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24gbV9wYWdlVGl0bGU7CiAKICAgICBTdHJpbmcg
bV9vdmVycmlkZUVuY29kaW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRXcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVy
LmNwcAppbmRleCBiMDQ2ZWYwZGUyMDQ4ZWZkNDMxOTcwMjYyMmI5NmE3ZGYyZmVhZmE3Li5hMWJh
OTQ4NzQyZjA2ZDMxN2Y5ZGVmMWNiYmI4NDFmOTUzMGNjODE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFdyaXRlci5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQAogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNpbmNs
dWRlICJTZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2lua0RvY3VtZW50LmgiCiAjaW5jbHVkZSAi
VGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAppbmRleCBkNjg4ZDgwYTliZDg4OGQyOWFiOTA2
ZTY0NjcwNjAxN2NmYjY4YTRmLi41ZDM5MjlkZGU1NThmNmFmZTY4MjQxNTkzMWU4NzY1MGM4MDYx
M2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMjgwLDcgKzI4
MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgp
IGZpbmFsIHsgfQogICAgIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3Qgc3RkOjpv
cHRpb25hbDxTaW1wbGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxSZWZQdHI8U2hh
cmVkQnVmZmVyPj4mKSBmaW5hbCB7IH0KICAgICB2b2lkIHJlcXVlc3RDYW5kaWRhdGVzRm9yU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBmaW5hbCB7IH0KLSAgICB2b2lkIGhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoUEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQpIGZpbmFsIHsgfQogCiAgICAgdm9pZCByZWdpc3RlclVuZG9T
dGVwKFVuZG9TdGVwJikgZmluYWw7CiAgICAgdm9pZCByZWdpc3RlclJlZG9TdGVwKFVuZG9TdGVw
JikgZmluYWw7CkBAIC0zNTIsNyArMzUyLDcgQEAgcHJpdmF0ZToKIAogICAgIFRleHRDaGVja2Vy
Q2xpZW50KiB0ZXh0Q2hlY2tlcigpIGZpbmFsIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50
OyB9CiAKLSAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBT
dHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikgZmluYWwgeyB9CisgICAgdm9pZCB1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgUEFMOjpHcmFt
bWFyRGV0YWlsJikgZmluYWwgeyB9CiAgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogICAgIHZvaWQgc2hvd1NwZWxsaW5n
VUkoYm9vbCkgZmluYWwgeyB9CiAgICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTM2MywxOSArMzYzLDE5IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBjYW5TaG93Rm9udFBhbmVsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IGNsYXNzIEVtcHR5VGV4dENoZWNrZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgVGV4dENoZWNrZXJD
bGllbnQgewotICAgICAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0
aW9uKFRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICAg
ICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRD
aGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdm9pZCBp
Z25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQogICAgICAg
ICB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KICAgICAgICAgdm9pZCBj
aGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiwgaW50KikgZmluYWwgeyB9CiAg
ICAgICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmKSBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAgICAgICAgdm9pZCBjaGVja0dy
YW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBp
bnQqKSBmaW5hbCB7IH0KKyAgICAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdW
aWV3LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopIGZpbmFsIHsgfQog
CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICAgICAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwgeyByZXR1cm4g
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsgfQorICAgICAgICBWZWN0b3I8UEFMOjpUZXh0
Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIE9wdGlvblNl
dDxQQUw6OlRleHRDaGVja2luZ1R5cGU+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWwg
eyByZXR1cm4gVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PigpOyB9CiAjZW5kaWYKIAog
ICAgICAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBWZWN0b3I8U3RyaW5nPiYpIGZpbmFsIHsgfQot
ICAgICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFRleHRDaGVja2luZ1JlcXVlc3Qm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgZmluYWw7CisgICAgICAgIHZvaWQgcmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIGZpbmFsOwogICAgIH07CiAKICAgICBFbXB0eVRleHRDaGVja2VyQ2xpZW50IG1f
dGV4dENoZWNrZXJDbGllbnQ7CkBAIC03NzQsNyArNzc0LDcgQEAgdm9pZCBFbXB0eUZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkKIHsKIH0KIAotdm9p
ZCBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBT
dHJpbmdXaXRoRGlyZWN0aW9uJikKK3ZvaWQgRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikKIHsKIH0K
IApAQCAtOTcwLDcgKzk3MCw3IEBAIHZvaWQgRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRl
Q2FjaGVkRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXImKQogewogfQogCi12b2lkIEVtcHR5
RnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mLCBj
b25zdCBVUkwmKQordm9pZCBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShjb25zdCBQ
QUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKQogewogfQogCkBAIC0xMTIzLDcg
KzExMjMsNyBAQCB2b2lkIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnNlbmRIMlBpbmcoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRQogICAgIGNvbXBsZXRpb25IYW5kbGVy
KG1ha2VVbmV4cGVjdGVkKGludGVybmFsRXJyb3IodXJsKSkpOwogfQogCi12b2lkIEVtcHR5RWRp
dG9yQ2xpZW50OjpFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit2b2lkIEVt
cHR5RWRpdG9yQ2xpZW50OjpFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZyhQQUw6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGRhMjBhODNk
MGQ4NmUwMDdkZmMyOTVjZjNjM2UzNjllYzVmNjJjMjIuLjMwZmJjMDQ2ZWIxMGU4ZjNhYjIzMGNk
MzRiZjJhZDJhYzA0ODgyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAg
LTEyMyw5ICsxMjMsOSBAQCBjbGFzcyBFbXB0eUNocm9tZUNsaWVudCA6IHB1YmxpYyBDaHJvbWVD
bGllbnQgewogICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSYsIGNvbnN0IEludFNp
emUmKSBjb25zdCBmaW5hbCB7IH0KICAgICB2b2lkIGludHJpbnNpY0NvbnRlbnRzU2l6ZUNoYW5n
ZWQoY29uc3QgSW50U2l6ZSYpIGNvbnN0IGZpbmFsIHsgfQogCi0gICAgdm9pZCBtb3VzZURpZE1v
dmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQsIGNvbnN0IFN0cmlu
ZyYsIFRleHREaXJlY3Rpb24pIGZpbmFsIHsgfQorICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBQQUw6
OlRleHREaXJlY3Rpb24pIGZpbmFsIHsgfQogCi0gICAgdm9pZCBwcmludChGcmFtZSYsIGNvbnN0
IFN0cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHByaW50KEZyYW1lJiwg
Y29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWwgeyB9CiAKICAgICB2b2lkIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSYsIGNvbnN0IFN0cmluZyYsIERhdGFiYXNlRGV0YWls
cykgZmluYWwgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUZy
YW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlGcmFtZUxvYWRl
ckNsaWVudC5oCmluZGV4IDIyNjk5YzljNTE4MzJhNWFhOGM4OWFiYWIyZmZjN2UwOTg1YmZjMDAu
LjQ2MzA0MjgxODBhOTBmODk0MGEyMmYxZjBlODI4MGYyYmRjZTkyM2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaApAQCAtODQsNyArODQsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKSBmaW5h
bDsKICAgICB2b2lkIGRpc3BhdGNoV2lsbENsb3NlKCkgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRj
aERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkgZmluYWw7Ci0gICAgdm9pZCBkaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWw7CisgICAgdm9pZCBk
aXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBm
aW5hbDsKICAgICB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZChzdGQ6Om9wdGlvbmFsPEhhc0lu
c2VjdXJlQ29udGVudD4sIHN0ZDo6b3B0aW9uYWw8VXNlZExlZ2FjeVRMUz4pIGZpbmFsOwogICAg
IHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3Im
LCBXaWxsQ29udGludWVMb2FkaW5nKSBmaW5hbDsKICAgICB2b2lkIGRpc3BhdGNoRGlkRmFpbExv
YWQoY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCkgZmluYWw7CiAK
ICAgICB2b2lkIHVwZGF0ZUNhY2hlZERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyJikgZmlu
YWw7Ci0gICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3Qg
VVJMJikgZmluYWw7CisgICAgdm9pZCBzZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJl
Y3Rpb24mLCBjb25zdCBVUkwmKSBmaW5hbDsKIAogICAgIFN0cmluZyB1c2VyQWdlbnQoY29uc3Qg
VVJMJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CmluZGV4IDZjNWVlM2E5YjMxYWU4Yjg0ZGI5MjBiNjZlYmYyMTRmMjZlYzlhZDYuLjBmNTMwNDZm
Y2RiYTY2ODRkZDhhNWMxODA2NjI1NDczNjEzNWEyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcApAQCAtMTE2LDcgKzExNiw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
b3IuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9s
aWN5LmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaG91bGRU
cmVhdEFzQ29udGludWluZ0xvYWQuaCIKQEAgLTEyOSw2ICsxMjgsNyBAQAogI2luY2x1ZGUgIldp
bmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRl
IDxkb20vU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmg+CisjaW5jbHVkZSA8cGFsL3RleHQvU2VnbWVu
dGVkU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyQ2xpZW50LmgKaW5kZXggNGZkNjM3YTkwMTRhNWQ0MWEyMjZlZTQ1OTE3YjZi
M2U5YTc5MGViYi4uODViMzBhN2Q0Y2IyMTkwMDEyNzhkM2JkZDQzODg4ZmIwMmQyZDU0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTY1LDYgKzY1LDEw
IEBAIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwogT0JKQ19DTEFTUyBOU1ZpZXc7CiAjZW5kaWYK
IAorbmFtZXNwYWNlIFBBTCB7CitzdHJ1Y3QgU3RyaW5nV2l0aERpcmVjdGlvbjsKK30KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKQEAgLTEw
Niw4ICsxMTAsNiBAQCBlbnVtIGNsYXNzIExvY2tCYWNrRm9yd2FyZExpc3QgOiBib29sOwogZW51
bSBjbGFzcyBQb2xpY3lEZWNpc2lvbk1vZGU7CiBlbnVtIGNsYXNzIFVzZWRMZWdhY3lUTFMgOiBi
b29sOwogCi1zdHJ1Y3QgU3RyaW5nV2l0aERpcmVjdGlvbjsKLQogdHlwZWRlZiBGdW5jdGlvbjx2
b2lkIChQb2xpY3lBY3Rpb24sIFBvbGljeUNoZWNrSWRlbnRpZmllcik+IEZyYW1lUG9saWN5RnVu
Y3Rpb247CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEZyYW1lTG9hZGVyQ2xpZW50IHsKQEAgLTE3
Myw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbENsb3Nl
KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhE
aXJlY3Rpb24mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxl
KGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRDb21taXRMb2FkKHN0ZDo6b3B0aW9uYWw8SGFzSW5zZWN1cmVDb250ZW50Piwg
c3RkOjpvcHRpb25hbDxVc2VkTGVnYWN5VExTPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYsIFdpbGxDb250
aW51ZUxvYWRpbmcpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZChj
b25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwpAQCAtMjY3LDcgKzI2OSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgUmVmPERvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ2FjaGVkRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXImKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mLCBj
b25zdCBVUkwmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFBBTDo6U3Ry
aW5nV2l0aERpcmVjdGlvbiYsIGNvbnN0IFVSTCYpID0gMDsKIAogICAgIHZpcnR1YWwgU3RyaW5n
IHVzZXJBZ2VudChjb25zdCBVUkwmKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmluZGV4IGIzYWNmMDZiNDlhODJiMmE0YTA5YzEzNWMw
OWVmODAzZWEwN2RkMzIuLjA2YThlN2UwMzJlOTY4YTMzYTk1NjJhZGMwNzlhZWFmMzVhOGMwY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcApAQCAtNjAy
LDcgKzYwMiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJy
ZW50SXRlbShIaXN0b3J5SXRlbSYgaXRlbSkKICAgICBtX2N1cnJlbnRJdGVtID0gJml0ZW07CiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJyZW50SXRlbVRp
dGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQordm9pZCBGcmFtZUxvYWRlcjo6
SGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJlbnRJdGVtVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdX
aXRoRGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIHRoZSB0
aXRsZSdzIGRpcmVjdGlvbi4KICAgICBpZiAobV9jdXJyZW50SXRlbSkKQEAgLTY1OCw3ICs2NTgs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpIaXN0b3J5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUl0ZW0o
SGlzdG9yeUl0ZW0mIGl0ZW0pCiAgICAgaWYgKG9yaWdpbmFsVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgb3JpZ2luYWxVUkwgPSBhYm91dEJsYW5rVVJMKCk7CiAgICAgCi0gICAgU3RyaW5nV2l0aERp
cmVjdGlvbiB0aXRsZSA9IGRvY3VtZW50TG9hZGVyLT50aXRsZSgpOworICAgIFBBTDo6U3RyaW5n
V2l0aERpcmVjdGlvbiB0aXRsZSA9IGRvY3VtZW50TG9hZGVyLT50aXRsZSgpOwogCiAgICAgaXRl
bS5zZXRVUkwodXJsKTsKICAgICBpdGVtLnNldFRhcmdldChtX2ZyYW1lLnRyZWUoKS51bmlxdWVO
YW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAppbmRleCAx
MDM3ZGY5OGVjNDE1NTRiZmIxZGI2MmI4OTY4MmQ4MzdmYTY1NjM3Li4wZjlkYTZmNGQwMjY3NDQx
ODAxYzBjYmZmOGVhMmEyYTllODU4MzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9y
eUNvbnRyb2xsZXIuaApAQCAtMzEsNiArMzEsMTAgQEAKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCiAKK25hbWVzcGFjZSBQQUwgeworc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb247Cit9CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CkBAIC0zOSw4ICs0Myw2IEBAIGNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogZW51bSBjbGFzcyBTaG91bGRUcmVhdEFzQ29u
dGludWluZ0xvYWQgOiB1aW50OF90OwogCi1zdHJ1Y3QgU3RyaW5nV2l0aERpcmVjdGlvbjsKLQog
Y2xhc3MgRnJhbWVMb2FkZXI6Okhpc3RvcnlDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShIaXN0b3J5Q29udHJvbGxlcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC03Myw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRl
bSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEl0ZW0uZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEN1cnJlbnRJdGVtKEhpc3RvcnlJdGVtJik7Ci0gICAgdm9pZCBzZXRDdXJy
ZW50SXRlbVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKKyAgICB2b2lkIHNldEN1
cnJlbnRJdGVtVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJik7CiAgICAgYm9v
bCBjdXJyZW50SXRlbVNob3VsZEJlUmVwbGFjZWQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlcGxhY2VDdXJyZW50SXRlbShIaXN0b3J5SXRlbSopOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAppbmRleCBjZWJkYzU1N2YxM2ZjNGFmZDgyNzUyOTc3
NGFmZDhlYzRiZWY0MjEwLi41NDhhN2EzN2NmNWM3NTU5MmI5OTQwMzdmMzI4YmRhMmZlMWQyZjFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKQEAgLTI4LDggKzI4
LDggQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgog
I2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3Mu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggMjJi
MDBkZDk0ZGFmYWYyNTUxODg5OTk5NjZmMWYzYmZmMzQwMDQ4MC4uNzY3ODRjY2U4ZjQ1ZjJiMmNh
ZDkzODY1ZTM2MTZiMTVjZWI0YTc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtMzQwLDE0
ICszNDAsMTQgQEAgdm9pZCBDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWYKICAgICAgICAgbV9wYWdlLm1haW5G
cmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtV
UkwoKS5ob3N0KCkudG9TdHJpbmcoKSk7CiAKICAgICBTdHJpbmcgdG9vbFRpcDsKLSAgICBUZXh0
RGlyZWN0aW9uIHRvb2xUaXBEaXJlY3Rpb247CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvb2xU
aXBEaXJlY3Rpb247CiAgICAgZ2V0VG9vbFRpcChyZXN1bHQsIHRvb2xUaXAsIHRvb2xUaXBEaXJl
Y3Rpb24pOwogICAgIG1fY2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9k
aWZpZXJGbGFncywgdG9vbFRpcCwgdG9vbFRpcERpcmVjdGlvbik7CiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1fcGFnZSwgcmVzdWx0LCBt
b2RpZmllckZsYWdzKTsKIH0KIAotdm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24mIHRvb2xUaXBE
aXJlY3Rpb24pCit2b2lkIENocm9tZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIFN0cmluZyYgdG9vbFRpcCwgUEFMOjpUZXh0RGlyZWN0aW9uJiB0b29sVGlwRGlyZWN0
aW9uKQogewogICAgIC8vIEZpcnN0IHByaW9yaXR5IGlzIGEgcG90ZW50aWFsIHRvb2xUaXAgcmVw
cmVzZW50aW5nIGEgc3BlbGxpbmcgb3IgZ3JhbW1hciBlcnJvcgogICAgIHRvb2xUaXAgPSByZXN1
bHQuc3BlbGxpbmdUb29sVGlwKHRvb2xUaXBEaXJlY3Rpb24pOwpAQCAtMzY0LDcgKzM2NCw3IEBA
IHZvaWQgQ2hyb21lOjpnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3Ry
aW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9y
bS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0
aW9uID0gZm9ybS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGly
ZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvb2xUaXBEaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM3NSw3ICsz
NzUsNyBAQCB2b2lkIENocm9tZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdAogICAgICAgICAgICAgLy8gRklYTUU6IE5l
ZWQgdG8gcGFzcyB0aGlzIFVSTCB0aHJvdWdoIHVzZXJWaXNpYmxlU3RyaW5nIG9uY2UgdGhhdCdz
IGluIFdlYkNvcmUKICAgICAgICAgICAgIHRvb2xUaXAgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAvLyBVUkwgYWx3YXlzIGRpc3BsYXkgYXMgTFRSLgot
ICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAg
ICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgQ2hyb21lOjpnZXRUb29sVGlw
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0
CiAgICAgICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb25zIGRvbid0IHVzZSB0ZXh0IGRpcmVj
dGlvbiBpbmZvcm1hdGlvbiBmb3IKICAgICAgICAgICAgICAgICAvLyBDaHJvbWVDbGllbnQ6Om1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50LiBXZSdsbCB3b3JrIG9uIHRvb2x0aXAgdGV4dAogICAgICAg
ICAgICAgICAgIC8vIGRpcmVjdGlvbiBkdXJpbmcgYmlkaSBjbGVhbnVwIGluIGZvcm0gaW5wdXRz
LgotICAgICAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFI7
CisgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5k
ZXggMTI0MzljMTBjYzNmYzI2Mjg0OWM3NzhmZWE2OTZlOGZkNDI5MzU1My4uODFkNTdjYWIwNjlk
ODAxMDU0ODI1NzBmZTM5ZDdlYTk3OWVlNjExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC0yMDgs
NyArMjA4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeVBvcHVwT3Blbmlu
Z09ic2VydmVycygpIGNvbnN0OwogCi0gICAgdm9pZCBnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uJik7CisgICAgdm9pZCBnZXRUb29sVGlwKGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCBTdHJpbmcmLCBQQUw6OlRleHREaXJlY3Rpb24mKTsKIAogICAg
IFBhZ2UmIG1fcGFnZTsKICAgICBDaHJvbWVDbGllbnQmIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKaW5kZXggZTQ2M2M0MGNiNmQ0Njg1YmM4ZWU2MTYzZWJhZTViMzU2MWVj
MDhiMy4uMjNhZmU3MzY4ZDY2ZjVjNzI3OWNmYTNkYmYyNWMzNzM0OWY5NzY4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC0yNDIsOSArMjQyLDkgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBib29sIHNob3VsZFVuYXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlj
a2VkKEVsZW1lbnQmLCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb24pIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3Ry
aW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmll
ckZsYWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikgPSAwOwog
Ci0gICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lJiwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlv
biYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUmLCBjb25zdCBQQUw6OlN0cmlu
Z1dpdGhEaXJlY3Rpb24mKSA9IDA7CiAKICAgICB2aXJ0dWFsIENvbG9yIHVuZGVybGF5Q29sb3Io
KSBjb25zdCB7IHJldHVybiBDb2xvcigpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5o
CmluZGV4IDgyMzc0ZTcyNjJjNzBlYTlkZmU0ZDY0ZjI1YWIxMzVhYTYwMzMzY2YuLmJhN2Y4M2Jk
MjQ0ODIwNTI0OGY5MjEzMWE3NGY1YmY4ZmVhOTk1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JD
bGllbnQuaApAQCAtMjksMTEgKzI5LDE1IEBACiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9u
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4
dEFmZmluaXR5LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSAiVW5kb1N0ZXAuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIFBBTCB7Citz
dHJ1Y3QgR3JhbW1hckRldGFpbDsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIGNs
YXNzIERPTVBhc3RlQWNjZXNzUmVzcG9uc2UgOiB1aW50OF90OwpAQCAtNDksNyArNTMsNiBAQCBj
bGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIHN0cnVj
dCBHYXBSZWN0czsKLXN0cnVjdCBHcmFtbWFyRGV0YWlsOwogc3RydWN0IFNpbXBsZVJhbmdlOwog
CiBjbGFzcyBFZGl0b3JDbGllbnQgewpAQCAtOTksNyArMTAyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0Q2xpZW50UGFzdGVib2FyZERhdGEoY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4mLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBWZWN0b3I8UmVmUHRy
PFNoYXJlZEJ1ZmZlcj4+JiBwYXN0ZWJvYXJkRGF0YSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMo
VGV4dENoZWNraW5nUmVzdWx0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGVXaXRoU29mdFNwYWNlcyhQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCkgeyB9CiAKICAg
ICB2aXJ0dWFsIERPTVBhc3RlQWNjZXNzUmVzcG9uc2UgcmVxdWVzdERPTVBhc3RlQWNjZXNzKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikgPSAwOwogCkBAIC0xNzYsNyArMTc5LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5n
JiwgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
aW5kZXggZDMyYTE2ODczZWZkZDg0M2U3MDY2ZjZlZTkxN2EzYjlmNWJkY2Q0ZS4uZGVlYzg0ZDBl
MTJlNDkxYjY1YmNhYTU0MzAxOWEzYjEwOTE0ZGM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcApAQCAtMTY1LDE0ICsxNjUsMTQgQEAgUGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9k
ZUZvclJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgcmV0dXJu
IFBhZ2luYXRpb246OlVucGFnaW5hdGVkOwogCiAgICAgYm9vbCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSA9IHN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uID0gc3R5bGUuZGlyZWN0aW9uKCk7Ci0gICAgV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gc3R5bGUuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSA9IHN0eWxlLndyaXRpbmdNb2RlKCk7CiAKICAgICAvLyBwYWdlZC14IGFsd2F5
cyBjb3JyZXNwb25kcyB0byBMZWZ0VG9SaWdodFBhZ2luYXRlZCBvciBSaWdodFRvTGVmdFBhZ2lu
YXRlZC4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgaG9yaXpvbnRhbCwgdGhlbiB3ZSB1
c2UgVGV4dERpcmVjdGlvbiB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSBvcHRpb25zLiBJZiB0aGUg
V3JpdGluZ01vZGUKICAgICAvLyBpcyB2ZXJ0aWNhbCwgdGhlbiB0aGUgZGlyZWN0aW9uIG9mIHRo
ZSB2ZXJ0aWNhbGl0eSBkaWN0YXRlcyB0aGUgY2hvaWNlLgogICAgIGlmIChvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6UGFnZWRYKSB7Ci0gICAgICAgIGlmICgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUg
JiYgdGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHx8IHdyaXRpbmdNb2RlID09
IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCkKKyAgICAgICAgaWYgKChpc0hvcml6b250YWxXcml0
aW5nTW9kZSAmJiB0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB8fCB3
cml0aW5nTW9kZSA9PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCkKICAgICAgICAgICAg
IHJldHVybiBQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDsKICAgICAgICAgcmV0dXJu
IFBhZ2luYXRpb246OlJpZ2h0VG9MZWZ0UGFnaW5hdGVkOwogICAgIH0KQEAgLTE4MCw3ICsxODAs
NyBAQCBQYWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIC8vIHBhZ2VkLXkgYWx3YXlzIGNvcnJlc3BvbmRzIHRv
IFRvcFRvQm90dG9tUGFnaW5hdGVkIG9yIEJvdHRvbVRvVG9wUGFnaW5hdGVkLiBJZiB0aGUgV3Jp
dGluZ01vZGUKICAgICAvLyBpcyBob3Jpem9udGFsLCB0aGVuIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IGhvcml6b250YWxpdHkgZGljdGF0ZXMgdGhlIGNob2ljZS4gSWYgdGhlIFdyaXRpbmdNb2RlCiAg
ICAgLy8gaXMgdmVydGljYWwsIHRoZW4gd2UgdXNlIFRleHREaXJlY3Rpb24gdG8gY2hvb3NlIGJl
dHdlZW4gdGhvc2Ugb3B0aW9ucy4gCi0gICAgaWYgKHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbSB8fCAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlICYmIHRleHREaXJlY3Rp
b24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKSkKKyAgICBpZiAod3JpdGluZ01vZGUgPT0gUEFMOjpX
cml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSAmJiB0
ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSkKICAgICAgICAgcmV0dXJu
IFBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwogICAgIHJldHVybiBQYWdpbmF0aW9u
OjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNl
Y3Rpb25PYnNlcnZlci5jcHAKaW5kZXggNTk3YjY3MjM2NTc4Yzk4OTUyYTZiYzc3NDRkYWJiMmM2
MzQ2ZWNmMi4uMDZmOWUwNjIwZWJlY2IwZmYyYzMzOWU0YmY5YWZlYTU5ODhlYzEzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTE0Niw5ICsx
NDYsOSBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6fkludGVyc2VjdGlvbk9ic2VydmVyKCkKIFN0
cmluZyBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6cm9vdE1hcmdpbigpIGNvbnN0CiB7CiAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lk
ZXMpIHsKKyAgICBmb3IgKGF1dG8gc2lkZSA6IFBBTDo6YWxsQm94U2lkZXMpIHsKICAgICAgICAg
YXV0byYgbGVuZ3RoID0gbV9yb290TWFyZ2luLmF0KHNpZGUpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChsZW5ndGguaW50VmFsdWUoKSwgbGVuZ3RoLmlzUGVyY2VudCgpID8gIiUiIDog
InB4Iiwgc2lkZSAhPSBCb3hTaWRlOjpMZWZ0ID8gIiAiIDogIiIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChsZW5ndGguaW50VmFsdWUoKSwgbGVuZ3RoLmlzUGVyY2VudCgpID8gIiUi
IDogInB4Iiwgc2lkZSAhPSBQQUw6OkJveFNpZGU6OkxlZnQgPyAiICIgOiAiIik7CiAgICAgfQog
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCBiNjQwNjEwMTZhMGQxOTU5YWE5YzE1N2U2MzU5ZWNkZjNmZGYwZjY3Li4xMjZlM2YwZjY4
ODNhNzM5ODU1MzFjYjgyZDE0Y2QxNzdlNzYxNWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTg3
MCw3ICs4NzAsNyBAQCB1bnNpZ25lZCBQYWdlOjpjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZwogCiBzdHJ1Y3QgRmluZFJlcGxh
Y2VtZW50UmFuZ2UgewogICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiByb290OwotICAgIENoYXJh
Y3RlclJhbmdlIHJhbmdlOworICAgIFBBTDo6Q2hhcmFjdGVyUmFuZ2UgcmFuZ2U7CiB9OwogCiBz
dGF0aWMgdm9pZCByZXBsYWNlUmFuZ2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxGaW5kUmVw
bGFjZW1lbnRSYW5nZT4mIHJhbmdlcywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLnlhbWwKaW5kZXggMmFlNzBjYjFkYTg0ZThjYWQzZWNjYzBjOWZm
ZWY0MzZmOGU4OWY2MC4uY2JiY2ZkYWI3ZjVhOTNjMWE4YmUxYWUzZmZmMThmMjVhYzUzMWJmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbApAQCAtMTY3LDEwICsxNjcsMTAgQEAgRm9udExv
YWRUaW1pbmdPdmVycmlkZToKIAogRm9udFJlbmRlcmluZ01vZGU6CiAgIHR5cGU6IHVpbnQzMl90
Ci0gIHJlZmluZWRUeXBlOiBGb250UmVuZGVyaW5nTW9kZQorICByZWZpbmVkVHlwZTogUEFMOjpG
b250UmVuZGVyaW5nTW9kZQogICBkZWZhdWx0VmFsdWU6CiAgICAgV2ViQ29yZToKLSAgICAgIGRl
ZmF1bHQ6IEZvbnRSZW5kZXJpbmdNb2RlOjpOb3JtYWwKKyAgICAgIGRlZmF1bHQ6IFBBTDo6Rm9u
dFJlbmRlcmluZ01vZGU6Ok5vcm1hbAogCiBGb3JjZUNvbXBvc2l0aW5nTW9kZToKICAgdHlwZTog
Ym9vbApAQCAtNTEzLDEwICs1MTMsMTAgQEAgU3RvcmFnZUJsb2NraW5nUG9saWN5OgogCiBTeXN0
ZW1MYXlvdXREaXJlY3Rpb246CiAgIHR5cGU6IHVpbnQzMl90Ci0gIHJlZmluZWRUeXBlOiBUZXh0
RGlyZWN0aW9uCisgIHJlZmluZWRUeXBlOiBQQUw6OlRleHREaXJlY3Rpb24KICAgZGVmYXVsdFZh
bHVlOgogICAgIFdlYkNvcmU6Ci0gICAgICBkZWZhdWx0OiBUZXh0RGlyZWN0aW9uOjpMVFIKKyAg
ICAgIGRlZmF1bHQ6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSCiAKIFRleHRBdXRvc2l6aW5nV2lu
ZG93U2l6ZU92ZXJyaWRlSGVpZ2h0OgogICB0eXBlOiB1aW50MzJfdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3NCYXNlLmgKaW5kZXggNDBkZGI4YTdmN2FmODQ1ZDRiNjVlNjMwZmI3YWIyZTY1NGJhMWM5
Mi4uZjg0ZGMyNjFiMzJhM2YxNzE2NzNjOWY3NDRmNzlhMGVkZjNjZTdhMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzQmFzZS5oCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRWRpdGluZ0Jl
aGF2aW9yVHlwZS5oIgogI2luY2x1ZGUgIkZvbnRHZW5lcmljRmFtaWxpZXMuaCIKICNpbmNsdWRl
ICJGb250TG9hZFRpbWluZ092ZXJyaWRlLmgiCi0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUu
aCIKICNpbmNsdWRlICJGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUuaCIKICNpbmNsdWRlICJGcmFt
ZUZsYXR0ZW5pbmcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyU2NyaXB0aW5nRmxhZ1BvbGljeS5o
IgpAQCAtNDAsMTEgKzM5LDEyIEBACiAjaW5jbHVkZSAiUERGSW1hZ2VDYWNoaW5nUG9saWN5Lmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUJsb2NraW5nUG9saWN5LmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1h
cC5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
U3VibWVudUluY2x1c2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
ICJVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvUnVudGltZUZsYWdzLmg+CisjaW5jbHVkZSA8cGFsL3RleHQvRm9udFJlbmRlcmluZ01vZGUu
aD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8dW5pY29k
ZS91c2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
U2Vjb25kcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggNjhjNTc2MzA5OGE4Njk3NmIxZGNhNThlMzM3
YzBhZDc2NTE3NzgzMy4uN2U4YWNiMzkxNDI2YjYyOTFhYmQxZWY3ZjFkNzgzZGE4NGRiNWZiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwCkBAIC0yNjcsMTcgKzI2NywxNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBj
b21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KExheW91dFVuaXQgbWluTG9jYXRpb24sIExheW91
dFVuaQogICAgIH0KIH0KIAotc3RhdGljIHN0ZDo6cGFpcjxib29sLCBib29sPiBheGVzRmxpcHBl
ZEZvcldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCitzdGF0aWMgc3RkOjpwYWlyPGJvb2wsIGJvb2w+IGF4
ZXNGbGlwcGVkRm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24oUEFMOjpXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCiB7CiAgICAgLy8gdGV4
dC1kaXJlY3Rpb24gZmxpcHMgdGhlIGlubGluZSBheGlzIGFuZCB3cml0aW5nLW1vZGUgY2FuIGZs
aXAgdGhlIGJsb2NrIGF4aXMuIFdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdyaXRpbmctbW9k
ZSBpcyB2ZXJ0aWNhbCBkZXRlcm1pbmVzIHRoZSBwaHlzaWNhbCBvcmllbnRhdGlvbiBvZiB0aGUg
YmxvY2sgYW5kIGlubGluZSBheGVzLgogICAgIGJvb2wgaGFzVmVydGljYWxXcml0aW5nTW9kZSA9
IGlzVmVydGljYWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7CiAgICAgYm9vbCBibG9ja0F4aXNG
bGlwcGVkID0gaXNGbGlwcGVkV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGJvb2wgaW5s
aW5lQXhpc0ZsaXBwZWQgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAg
ICBib29sIGlubGluZUF4aXNGbGlwcGVkID0gdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTDsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaGFzVmVydGljYWxXcml0aW5n
TW9kZSA/IGJsb2NrQXhpc0ZsaXBwZWQgOiBpbmxpbmVBeGlzRmxpcHBlZCwgaGFzVmVydGljYWxX
cml0aW5nTW9kZSA/IGlubGluZUF4aXNGbGlwcGVkIDogYmxvY2tBeGlzRmxpcHBlZCk7CiB9CiAK
LXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29u
c3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9y
dFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQordm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9s
bGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgY29uc3QgUmVuZGVyQm94
JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVu
dFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMsIFBB
TDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uKQogewogICAgIGF1dG8gc2Nyb2xsU25hcFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUu
c2Nyb2xsU25hcFR5cGUoKTsKICAgICBjb25zdCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9z
aXRpb25zID0gc2Nyb2xsaW5nRWxlbWVudEJveC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBv
c2l0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uaAppbmRleCA3YTk0YmE4NGI4YWFjNTMxYWM0YWQ5NDM2YTJkODBi
YmRiMzBhNWQ4Li5hMjM2M2Q2ZTkxNWY0YzdmNTQzY2Q0ZjNjZGMyNTZhZDEzYzQyYTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaApAQCAtOTcsNyArOTcsNyBAQCBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8TGF5b3V0
VW5pdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNuYXBPZgogLy8gVXBk
YXRlIHRoZSBzbmFwIG9mZnNldHMgZm9yIHRoaXMgc2Nyb2xsYWJsZSBhcmVhLCBnaXZlbiB0aGUg
UmVuZGVyQm94IG9mIHRoZSBzY3JvbGwgY29udGFpbmVyLCB0aGUgUmVuZGVyU3R5bGUKIC8vIHdo
aWNoIGRlZmluZXMgdGhlIHNjcm9sbC1zbmFwIHByb3BlcnRpZXMsIGFuZCB0aGUgdmlld3BvcnQg
cmVjdGFuZ2xlIHdpdGggdGhlIG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQgb2YKIC8vIHRoZSBzY3Jv
bGxpbmcgY29udGFpbmVyJ3MgYm9yZGVyIGJveC4KLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JT
Y3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5n
RWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5
b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBXcml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbik7Cit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEo
U2Nyb2xsYWJsZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNv
bnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3Bv
cnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcywgUEFMOjpXcml0aW5nTW9kZSwgUEFMOjpUZXh0
RGlyZWN0aW9uKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBTbmFwT2Zmc2V0PFQ+IG9mZnNldCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAKaW5kZXgg
MTM2Njk3NWM1YTU0Yzk0MWUzZjg3ZThkMGEzYTMyNzdlNTA0N2Y3NS4uM2ZiZDljZWM5Y2UyNGZh
YjAyMzY2YmY5MWRjY2VjNmNjYzcyMmNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAKQEAgLTY1NSw3ICs2NTUsNyBAQCB2b2lkIFNjcm9s
bGluZ1RyZWU6OnNldE1haW5GcmFtZUNhblJ1YmJlckJhbmQoUmVjdEVkZ2VzPGJvb2w+IGNhblJ1
YmJlckJhbmQpCiAgICAgbV9zd2lwZVN0YXRlLmNhblJ1YmJlckJhbmQgPSBjYW5SdWJiZXJCYW5k
OwogfQogCi1ib29sIFNjcm9sbGluZ1RyZWU6Om1haW5GcmFtZUNhblJ1YmJlckJhbmRPblNpZGUo
Qm94U2lkZSBzaWRlKQorYm9vbCBTY3JvbGxpbmdUcmVlOjptYWluRnJhbWVDYW5SdWJiZXJCYW5k
T25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKQogewogICAgIExvY2tlciBsb2NrZXIgeyBtX3N3aXBl
U3RhdGVMb2NrIH07CiAgICAgcmV0dXJuIG1fc3dpcGVTdGF0ZS5jYW5SdWJiZXJCYW5kLmF0KHNp
ZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCmlu
ZGV4IGNjZDIyNzEzYjk4MjI4YWU2MDAxODNkMzA5NDRlOGE5MmJiMjQzYzUuLjgwOTY4NjdhMjk0
ZjZhNTI2Mzg3YzQ4YjhiOGEyMzM5MGFkNDhiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgKQEAgLTE4MCw3ICsxODAsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4gV2lsbCB1cGRhdGUgd2hhdCBl
ZGdlcyBhbGxvdyBydWJiZXItYmFuZGluZy4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1h
aW5GcmFtZUNhblJ1YmJlckJhbmQoUmVjdEVkZ2VzPGJvb2w+KTsKLSAgICBib29sIG1haW5GcmFt
ZUNhblJ1YmJlckJhbmRPblNpZGUoQm94U2lkZSk7CisgICAgYm9vbCBtYWluRnJhbWVDYW5SdWJi
ZXJCYW5kT25TaWRlKFBBTDo6Qm94U2lkZSk7CiAKICAgICBib29sIGlzSGFuZGxpbmdQcm9ncmFt
bWF0aWNTY3JvbGwoKSBjb25zdCB7IHJldHVybiBtX2lzSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3Jv
bGw7IH0KICAgICB2b2lkIHNldElzSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGwoYm9vbCBpc0hh
bmRsaW5nUHJvZ3JhbW1hdGljU2Nyb2xsKSB7IG1faXNIYW5kbGluZ1Byb2dyYW1tYXRpY1Njcm9s
bCA9IGlzSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGw7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oCmluZGV4IDM2N2RmMDJjODRlZjBhYWM1OWI0Y2Vh
OWQ3ZDAwODUyZTU1ZTIxNzUuLmJmNTlmY2QyYmZkNDQzYmJhNjU0N2RmMmM0NTMyYmM1YWRhOTI5
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaApA
QCAtODEsMTMgKzgxLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdCBmaW5hbDsKICAgICBib29s
IGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25z
dCBmaW5hbDsKICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIGlzUGlubmVkT25TaWRlKEJveFNpZGUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQaW5u
ZWRPblNpZGUoUEFMOjpCb3hTaWRlKSBjb25zdCBmaW5hbDsKIAogICAgIFJlY3RFZGdlczxib29s
PiBlZGdlUGlubmVkU3RhdGUoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGFsbG93c0hvcml6b250
YWxTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xs
aW5nKCkgY29uc3QgZmluYWw7CiAKLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRPblNpZGUoQm94
U2lkZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kT25TaWRlKFBBTDo6
Qm94U2lkZSkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5h
bDsKICAgICB2b2lkIGRpZFN0b3BSdWJiZXJCYW5kQW5pbWF0aW9uKCkgZmluYWw7CiAgICAgdm9p
ZCBydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQppbmRleCBiZjAxMzJkMmQ2NDgxNmZm
YWUxMjMxNGY3YjgxMjIwNDFhMTljMzYwLi44MTEzMDY2YmE0OWVjYTQzMjZkOWQ4ZGEzMzkwYWIw
YzkwNGZhZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbQpAQCAtMTQ1LDI0ICsxNDUsMjQgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlTWFjOjpzY3JvbGxQb3NpdGlvbklzTm90UnViYmVyYmFuZGluZ0VkZ2UKICAg
ICBhdXRvIG1pbmltdW1TY3JvbGxQb3NpdGlvbiA9IHRoaXMtPm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOwogICAgIGF1dG8gbWF4aW11bVNjcm9sbFBvc2l0aW9uID0gdGhpcy0+bWF4aW11bVNjcm9s
bFBvc2l0aW9uKCk7CiAKLSAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAg
Zm9yIChhdXRvIHNpZGUgOiBQQUw6OmFsbEJveFNpZGVzKSB7CiAgICAgICAgIGlmICghcnViYmVy
YmFuZGluZ0VkZ2VzW3NpZGVdKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgc3dp
dGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICBjYXNlIFBB
TDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgaWYgKHRhcmdldFBvc2l0aW9uLnkoKSAhPSBt
aW5pbXVtU2Nyb2xsUG9zaXRpb24ueSgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgIGlmICh0YXJnZXRQb3NpdGlv
bi54KCkgIT0gbWF4aW11bVNjcm9sbFBvc2l0aW9uLngoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRv
bToKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgIGlmICh0
YXJnZXRQb3NpdGlvbi55KCkgIT0gbWF4aW11bVNjcm9sbFBvc2l0aW9uLnkoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJv
eFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICAg
ICAgaWYgKHRhcmdldFBvc2l0aW9uLngoKSAhPSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24ueCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzQs
MjIgKzI3NCwyMiBAQCBJbnRTaXplIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OnN0cmV0Y2hBbW91bnQoKSBjb25zdAogICAgIHJldHVybiBzdHJldGNoOwogfQogCi1ib29s
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmlzUGlubmVkT25TaWRlKEJv
eFNpZGUgc2lkZSkgY29uc3QKK2Jvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYzo6aXNQaW5uZWRPblNpZGUoUEFMOjpCb3hTaWRlIHNpZGUpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChzaWRlKSB7Ci0gICAgY2FzZSBCb3hTaWRlOjpUb3A6CisgICAgY2FzZSBQQUw6OkJveFNp
ZGU6OlRvcDoKICAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBjdXJyZW50U2Nyb2xsUG9zaXRpb24o
KS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOwotICAgIGNhc2UgQm94U2lkZTo6
Qm90dG9tOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgIGlmICghYWxs
b3dzVmVydGljYWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICByZXR1cm4gY3VycmVudFNjcm9sbFBvc2l0aW9uKCkueSgpID49IG1heGltdW1TY3JvbGxQb3Np
dGlvbigpLnkoKTsKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNp
ZGU6OkxlZnQ6CiAgICAgICAgIGlmICghYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGluZygpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBjdXJyZW50U2Nyb2xsUG9zaXRp
b24oKS54KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOwotICAgIGNhc2UgQm94U2lk
ZTo6UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICBpZiAoIWFs
bG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICByZXR1cm4gY3VycmVudFNjcm9sbFBvc2l0aW9uKCkueCgpID49IG1heGltdW1TY3JvbGxQ
b3NpdGlvbigpLngoKTsKQEAgLTMxMiwxNyArMzEyLDE3IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSBjb25zdAog
ICAgIHJldHVybiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlOjphbGxvd3NWZXJ0
aWNhbFNjcm9sbGluZygpOwogfQogCi1ib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWM6OnNob3VsZFJ1YmJlckJhbmRPblNpZGUoQm94U2lkZSBzaWRlKSBjb25zdAorYm9v
bCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzaG91bGRSdWJiZXJCYW5k
T25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBjb25zdAogewogICAgIGlmIChzY3JvbGxpbmdOb2Rl
KCkuaXNSb290Tm9kZSgpKQogICAgICAgICByZXR1cm4gc2Nyb2xsaW5nVHJlZSgpLm1haW5GcmFt
ZUNhblJ1YmJlckJhbmRPblNpZGUoc2lkZSk7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICBj
YXNlIEJveFNpZGU6OlRvcDoKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBB
TDo6Qm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAg
IHJldHVybiBhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpOwotICAgIGNhc2UgQm94U2lkZTo6TGVm
dDoKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0
OgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgcmV0dXJuIGFsbG93c0hv
cml6b250YWxTY3JvbGxpbmcoKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCA2ZGZlMGRkM2VhNGRhM2ExZjVmMGY2Yzc5ZDZk
MWEzYmYwMGMzMTU5Li4yYjA1NzRlYjAyZWZlNTIxMzg1YmVjY2NmODhiNzI3OWJjZmRjZGU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlRmlsZW5hbWUoY29u
c3QgU3RyaW5nJikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYsIGNvbnN0IFN0cmluZyYsIFRleHRJbmRp
Y2F0b3JEYXRhJiwgRm9udFJlbmRlcmluZ01vZGUsIGZsb2F0KQorRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYsIGNvbnN0IFN0cmluZyYsIFRleHRJbmRp
Y2F0b3JEYXRhJiwgUEFMOjpGb250UmVuZGVyaW5nTW9kZSwgZmxvYXQpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0lt
YWdlLmgKaW5kZXggMjQ2NTQ0MDkzZWVlMGZlMzZjYzljMzFhNzhlN2FiYzMwYzRhOTAyMy4uYWZl
MjNiMGZhNjllMTI0Mzc0NTYwYzNmODI2MzQ3MTkyNzg0YWQ3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0ltYWdlLmgKQEAgLTI2LDEyICsyNiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgogI2luY2x1
ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
UGF0aC5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRG
bGFncy5oPgogI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9G
b250UmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtOTEsNyArOTEsNyBAQCBXRUJDT1JFX0VYUE9SVCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiwgVGV4dEluZGljYXRvckRh
dAogV0VCQ09SRV9FWFBPUlQgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZy
YW1lJiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIGZvcmNlQmxhY2tUZXh0ID0gZmFsc2UpOwog
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckNvbG9yKGNvbnN0IENvbG9yJiwgY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQsIFBhdGgmKTsKIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JJbWFnZShGcmFtZSYsIE5vZGUmLCBJbnRSZWN0JiBpbWFnZVJlY3QsIEludFJlY3QmIGVsZW1l
bnRSZWN0KTsKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBV
UkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBUZXh0SW5kaWNhdG9yRGF0YSYsIEZvbnRSZW5kZXJp
bmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yTGluayhFbGVtZW50JiwgVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgVGV4dElu
ZGljYXRvckRhdGEmLCBQQUw6OkZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3Rvcik7CiB2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYpOwogCiBJbnRQb2ludCBk
cmFnT2Zmc2V0Rm9yTGlua0RyYWdJbWFnZShEcmFnSW1hZ2VSZWYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcAppbmRleCBi
ZDY1OWFmMzcyMDliN2Y2ZjlhZjRhZGM0Y2YwYWEwODVjNzhkYTNmLi5iYjZlM2FkMjRhZGFiNjQ0
OGE3MzA4YzE1YjZhMjI5NDljOWM0Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcApAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5o
IgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNjUsMjAgKzY1LDIwIEBAIFJlY3RFZGdlczxib29sPiBLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yOjpzY3JvbGxhYmxlRGlyZWN0aW9uc0Zyb21Qb3NpdGlvbihGbG9hCiAgICAgcmV0
dXJuIGVkZ2VzOwogfQogCi1zdGF0aWMgQm94U2lkZSBib3hTaWRlRm9yRGlyZWN0aW9uKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24pCitzdGF0aWMgUEFMOjpCb3hTaWRlIGJveFNpZGVGb3JEaXJl
Y3Rpb24oU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgewogICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxVcDoKLSAgICAgICAgcmV0dXJu
IEJveFNpZGU6OlRvcDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOwogICAgIGNh
c2UgU2Nyb2xsRGlyZWN0aW9uOjpTY3JvbGxEb3duOgotICAgICAgICByZXR1cm4gQm94U2lkZTo6
Qm90dG9tOworICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpCb3R0b207CiAgICAgY2FzZSBT
Y3JvbGxEaXJlY3Rpb246OlNjcm9sbExlZnQ6Ci0gICAgICAgIHJldHVybiBCb3hTaWRlOjpMZWZ0
OworICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpMZWZ0OwogICAgIGNhc2UgU2Nyb2xsRGly
ZWN0aW9uOjpTY3JvbGxSaWdodDoKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAg
ICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpSaWdodDsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIEJveFNpZGU6OlRvcDsKKyAgICByZXR1cm4gUEFMOjpCb3hT
aWRlOjpUb3A7CiB9CiAKIHN0YXRpYyBGbG9hdFNpemUgcGVycGVuZGljdWxhckFic29sdXRlVW5p
dFZlY3RvcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5n
dGhCb3guaAppbmRleCBjMDQ3YTg5OWVmMzM1OGQxZjNkZTYyYjhiZGM4NjE0MTAzMDNmYjQ2Li41
NDZhYjExMWZmZTM5NTFkMDllYTRmNjA3ZGIzN2MyOGE2M2IxZDAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MZW5ndGhCb3guaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiTGVuZ3RoLmgi
CiAjaW5jbHVkZSAiUmVjdEVkZ2VzLmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNs
dWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCmluZGV4IGRiZGYzYzc0YjE5NWE1
OTZiZjQ5NDMyZmFlOWIzMjBmMGI0MzAzYjUuLjZkZWNhNDk2NTYyOTA4OTVhNjY4MzQ3ODRhMjg4
NDIzOWZmMTFlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVu
dVN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaApA
QCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9OwogCi0gICAgUG9wdXBNZW51
U3R5bGUoY29uc3QgQ29sb3ImIGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kLCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUs
IGJvb2wgaGFzRGVmYXVsdEFwcGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3Jv
dW5kQ29sb3JUeXBlIGJhY2tncm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9y
LCBQb3B1cE1lbnVUeXBlIG1lbnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVu
dVNpemUgPSBQb3B1cE1lbnVTaXplTm9ybWFsKQorICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENv
bG9yJiBmb3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGJvb2wgdmlzaWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1
bHRBcHBlYXJhbmNlLCBMZW5ndGggdGV4dEluZGVudCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBCYWNrZ3JvdW5kQ29sb3JU
eXBlIGJhY2tncm91bmRDb2xvclR5cGUgPSBEZWZhdWx0QmFja2dyb3VuZENvbG9yLCBQb3B1cE1l
bnVUeXBlIG1lbnVUeXBlID0gU2VsZWN0UG9wdXAsIFBvcHVwTWVudVNpemUgbWVudVNpemUgPSBQ
b3B1cE1lbnVTaXplTm9ybWFsKQogICAgICAgICA6IG1fZm9yZWdyb3VuZENvbG9yKGZvcmVncm91
bmQpCiAgICAgICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZCkKICAgICAgICAgLCBt
X2ZvbnQoZm9udCkKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaXNwbGF5
Tm9uZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEaXNwbGF5Tm9uZTsgfQogICAgIGJvb2wgaGFzRGVm
YXVsdEFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOyB9
CiAgICAgTGVuZ3RoIHRleHRJbmRlbnQoKSBjb25zdCB7IHJldHVybiBtX3RleHRJbmRlbnQ7IH0K
LSAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHRE
aXJlY3Rpb247IH0KKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dERpcmVjdGlvbjsgfQogICAgIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92
ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGU7IH0KICAg
ICBCYWNrZ3JvdW5kQ29sb3JUeXBlIGJhY2tncm91bmRDb2xvclR5cGUoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmRDb2xvclR5cGU7IH0KICAgICBQb3B1cE1lbnVUeXBlIG1lbnVUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9tZW51VHlwZTsgfQpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc0Rpc3BsYXlOb25lOwogICAgIGJvb2wgbV9oYXNEZWZhdWx0QXBwZWFyYW5j
ZTsKICAgICBMZW5ndGggbV90ZXh0SW5kZW50OwotICAgIFRleHREaXJlY3Rpb24gbV90ZXh0RGly
ZWN0aW9uOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBtX3RleHREaXJlY3Rpb247CiAgICAgYm9v
bCBtX2hhc1RleHREaXJlY3Rpb25PdmVycmlkZTsKICAgICBCYWNrZ3JvdW5kQ29sb3JUeXBlIG1f
YmFja2dyb3VuZENvbG9yVHlwZTsKICAgICBQb3B1cE1lbnVUeXBlIG1fbWVudVR5cGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWN0RWRnZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1JlY3RFZGdlcy5oCmluZGV4IDBlMTIzMDE5MzM2MzU0ZDdjZWYyN2QxZmRm
N2E3MzIzNjA1MTlmYWEuLmQxZTM2YTAyOTBhNGRjOGJiZTE1MTJkY2E2NGJiY2NkMzIwZjU1YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlY3RFZGdlcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlY3RFZGdlcy5oCkBAIC0yNSwxOCArMjUsMTggQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgogI2luY2x1ZGUgPGFycmF5
PgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBlbnVtIGNsYXNzIEJveFNpZGVGbGFnIDogdWludDhfdCB7Ci0gICAgVG9wICAg
ICA9IDEgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJveFNpZGU6OlRvcCksCi0gICAgUmlnaHQg
ICA9IDEgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJveFNpZGU6OlJpZ2h0KSwKLSAgICBCb3R0
b20gID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQm94U2lkZTo6Qm90dG9tKSwKLSAgICBM
ZWZ0ICAgID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQm94U2lkZTo6TGVmdCkKKyAgICBU
b3AgICAgID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpCb3hTaWRlOjpUb3ApLAor
ICAgIFJpZ2h0ICAgPSAxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkJveFNpZGU6OlJp
Z2h0KSwKKyAgICBCb3R0b20gID0gMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpCb3hT
aWRlOjpCb3R0b20pLAorICAgIExlZnQgICAgPSAxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
QUw6OkJveFNpZGU6OkxlZnQpCiB9OwogCiB1c2luZyBCb3hTaWRlU2V0ID0gT3B0aW9uU2V0PEJv
eFNpZGVGbGFnPjsKQEAgLTUzLDQwICs1Myw0MCBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9zaWRl
cyh7IHsgc3RkOjpmb3J3YXJkPFQ+KHRvcCksIHN0ZDo6Zm9yd2FyZDxUPihyaWdodCksIHN0ZDo6
Zm9yd2FyZDxUPihib3R0b20pLCBzdGQ6OmZvcndhcmQ8VD4obGVmdCkgfSB9KQogICAgIHsgfQog
Ci0gICAgVCYgYXQoQm94U2lkZSBzaWRlKSB7IHJldHVybiBtX3NpZGVzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lkZSldOyB9Ci0gICAgVCYgb3BlcmF0b3JbXShCb3hTaWRlIHNpZGUpIHsgcmV0dXJu
IG1fc2lkZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KLSAgICBUJiB0b3AoKSB7IHJl
dHVybiBhdChCb3hTaWRlOjpUb3ApOyB9Ci0gICAgVCYgcmlnaHQoKSB7IHJldHVybiBhdChCb3hT
aWRlOjpSaWdodCk7IH0KLSAgICBUJiBib3R0b20oKSB7IHJldHVybiBhdChCb3hTaWRlOjpCb3R0
b20pOyB9Ci0gICAgVCYgbGVmdCgpIHsgcmV0dXJuIGF0KEJveFNpZGU6OkxlZnQpOyB9Ci0KLSAg
ICBjb25zdCBUJiBhdChCb3hTaWRlIHNpZGUpIGNvbnN0IHsgcmV0dXJuIG1fc2lkZXNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KLSAgICBjb25zdCBUJiBvcGVyYXRvcltdKEJveFNpZGUg
c2lkZSkgY29uc3QgeyByZXR1cm4gbV9zaWRlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZGUpXTsg
fQotICAgIGNvbnN0IFQmIHRvcCgpIGNvbnN0IHsgcmV0dXJuIGF0KEJveFNpZGU6OlRvcCk7IH0K
LSAgICBjb25zdCBUJiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIGF0KEJveFNpZGU6OlJpZ2h0KTsg
fQotICAgIGNvbnN0IFQmIGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGF0KEJveFNpZGU6OkJvdHRv
bSk7IH0KLSAgICBjb25zdCBUJiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gYXQoQm94U2lkZTo6TGVm
dCk7IH0KLQotICAgIHZvaWQgc2V0QXQoQm94U2lkZSBzaWRlLCBjb25zdCBUJiB2KSB7IGF0KHNp
ZGUpID0gdjsgfQotICAgIHZvaWQgc2V0VG9wKGNvbnN0IFQmIHRvcCkgeyBzZXRBdChCb3hTaWRl
OjpUb3AsIHRvcCk7IH0KLSAgICB2b2lkIHNldFJpZ2h0KGNvbnN0IFQmIHJpZ2h0KSB7IHNldEF0
KEJveFNpZGU6OlJpZ2h0LCByaWdodCk7IH0KLSAgICB2b2lkIHNldEJvdHRvbShjb25zdCBUJiBi
b3R0b20pIHsgc2V0QXQoQm94U2lkZTo6Qm90dG9tLCBib3R0b20pOyB9Ci0gICAgdm9pZCBzZXRM
ZWZ0KGNvbnN0IFQmIGxlZnQpIHsgc2V0QXQoQm94U2lkZTo6TGVmdCwgbGVmdCk7IH0KLQotICAg
IFQmIGJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGU6OkJsb2NrU3Rh
cnQpKTsgfQotICAgIFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHJldHVybiBh
dChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lk
ZTo6QmxvY2tFbmQpKTsgfQotICAgIFQmIHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUikgeyByZXR1cm4gYXQo
bWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRp
cmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9Ci0gICAgVCYgZW5kKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJl
Y3Rpb246OkxUUikgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtl
VGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVF
bmQpKTsgfQotCi0gICAgY29uc3QgVCYgYmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBj
b25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2Rl
LCBMb2dpY2FsQm94U2lkZTo6QmxvY2tTdGFydCkpOyB9Ci0gICAgY29uc3QgVCYgYWZ0ZXIoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9Q
aHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlOjpCbG9ja0VuZCkpOyB9Ci0g
ICAgY29uc3QgVCYgc3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dp
Y2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9u
KSwgTG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0KSk7IH0KLSAgICBjb25zdCBUJiBlbmQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVj
dGlvbjo6TFRSKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRl
KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6Oklu
bGluZUVuZCkpOyB9Ci0KLSAgICB2b2lkIHNldEJlZm9yZShjb25zdCBUJiBiZWZvcmUsIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKSB7IHRoaXMtPmJlZm9yZSh3cml0aW5nTW9kZSkgPSBiZWZvcmU7
IH0KLSAgICB2b2lkIHNldEFmdGVyKGNvbnN0IFQmIGFmdGVyLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgeyB0aGlzLT5hZnRlcih3cml0aW5nTW9kZSkgPSBhZnRlcjsgfQotICAgIHZvaWQgc2V0
U3RhcnQoY29uc3QgVCYgc3RhcnQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUikgeyB0aGlzLT5zdGFydCh3cml0aW5n
TW9kZSwgZGlyZWN0aW9uKSA9IHN0YXJ0OyB9Ci0gICAgdm9pZCBzZXRFbmQoY29uc3QgVCYgZW5k
LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0
RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+ZW5kKHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gZW5k
OyB9CisgICAgVCYgYXQoUEFMOjpCb3hTaWRlIHNpZGUpIHsgcmV0dXJuIG1fc2lkZXNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KKyAgICBUJiBvcGVyYXRvcltdKFBBTDo6Qm94U2lkZSBz
aWRlKSB7IHJldHVybiBtX3NpZGVzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lkZSldOyB9CisgICAg
VCYgdG9wKCkgeyByZXR1cm4gYXQoUEFMOjpCb3hTaWRlOjpUb3ApOyB9CisgICAgVCYgcmlnaHQo
KSB7IHJldHVybiBhdChQQUw6OkJveFNpZGU6OlJpZ2h0KTsgfQorICAgIFQmIGJvdHRvbSgpIHsg
cmV0dXJuIGF0KFBBTDo6Qm94U2lkZTo6Qm90dG9tKTsgfQorICAgIFQmIGxlZnQoKSB7IHJldHVy
biBhdChQQUw6OkJveFNpZGU6OkxlZnQpOyB9CisKKyAgICBjb25zdCBUJiBhdChQQUw6OkJveFNp
ZGUgc2lkZSkgY29uc3QgeyByZXR1cm4gbV9zaWRlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZGUp
XTsgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oUEFMOjpCb3hTaWRlIHNpZGUpIGNvbnN0IHsg
cmV0dXJuIG1fc2lkZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWRlKV07IH0KKyAgICBjb25zdCBU
JiB0b3AoKSBjb25zdCB7IHJldHVybiBhdChQQUw6OkJveFNpZGU6OlRvcCk7IH0KKyAgICBjb25z
dCBUJiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIGF0KFBBTDo6Qm94U2lkZTo6UmlnaHQpOyB9Cisg
ICAgY29uc3QgVCYgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gYXQoUEFMOjpCb3hTaWRlOjpCb3R0
b20pOyB9CisgICAgY29uc3QgVCYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIGF0KFBBTDo6Qm94U2lk
ZTo6TGVmdCk7IH0KKworICAgIHZvaWQgc2V0QXQoUEFMOjpCb3hTaWRlIHNpZGUsIGNvbnN0IFQm
IHYpIHsgYXQoc2lkZSkgPSB2OyB9CisgICAgdm9pZCBzZXRUb3AoY29uc3QgVCYgdG9wKSB7IHNl
dEF0KFBBTDo6Qm94U2lkZTo6VG9wLCB0b3ApOyB9CisgICAgdm9pZCBzZXRSaWdodChjb25zdCBU
JiByaWdodCkgeyBzZXRBdChQQUw6OkJveFNpZGU6OlJpZ2h0LCByaWdodCk7IH0KKyAgICB2b2lk
IHNldEJvdHRvbShjb25zdCBUJiBib3R0b20pIHsgc2V0QXQoUEFMOjpCb3hTaWRlOjpCb3R0b20s
IGJvdHRvbSk7IH0KKyAgICB2b2lkIHNldExlZnQoY29uc3QgVCYgbGVmdCkgeyBzZXRBdChQQUw6
OkJveFNpZGU6OkxlZnQsIGxlZnQpOyB9CisKKyAgICBUJiBiZWZvcmUoUEFMOjpXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3
cml0aW5nTW9kZSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6QmxvY2tTdGFydCkpOyB9CisgICAgVCYg
YWZ0ZXIoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6Qmxv
Y2tFbmQpKTsgfQorICAgIFQmIHN0YXJ0KFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyBy
ZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGlu
Z01vZGUsIGRpcmVjdGlvbiksIFBBTDo6TG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0KSk7IH0K
KyAgICBUJiBlbmQoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7IHJldHVybiBhdChtYXBM
b2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0
aW9uKSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KKworICAgIGNvbnN0IFQm
IGJlZm9yZShQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBhdCht
YXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBQQUw6OkxvZ2ljYWxCb3hT
aWRlOjpCbG9ja1N0YXJ0KSk7IH0KKyAgICBjb25zdCBUJiBhZnRlcihQQUw6OldyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxT
aWRlKHdyaXRpbmdNb2RlLCBQQUw6OkxvZ2ljYWxCb3hTaWRlOjpCbG9ja0VuZCkpOyB9CisgICAg
Y29uc3QgVCYgc3RhcnQoUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7IHJldHVy
biBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9k
ZSwgZGlyZWN0aW9uKSwgUEFMOjpMb2dpY2FsQm94U2lkZTo6SW5saW5lU3RhcnQpKTsgfQorICAg
IGNvbnN0IFQmIGVuZChQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIGNvbnN0IHsgcmV0dXJu
IGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2Rl
LCBkaXJlY3Rpb24pLCBQQUw6OkxvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsgfQorCisgICAg
dm9pZCBzZXRCZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSB7IHRoaXMtPmJlZm9yZSh3cml0aW5nTW9kZSkgPSBiZWZvcmU7IH0KKyAgICB2b2lkIHNl
dEFmdGVyKGNvbnN0IFQmIGFmdGVyLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHRo
aXMtPmFmdGVyKHdyaXRpbmdNb2RlKSA9IGFmdGVyOyB9CisgICAgdm9pZCBzZXRTdGFydChjb25z
dCBUJiBzdGFydCwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7IHRoaXMtPnN0YXJ0KHdy
aXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gc3RhcnQ7IH0KKyAgICB2b2lkIHNldEVuZChjb25zdCBU
JiBlbmQsIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyB0aGlzLT5lbmQod3JpdGluZ01v
ZGUsIGRpcmVjdGlvbikgPSBlbmQ7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWN0
RWRnZXMmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3NpZGVzID09IG90aGVyLm1fc2lkZXM7IH0K
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVjdEVkZ2VzJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9zaWRlcyAhPSBvdGhlci5tX3NpZGVzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAKaW5kZXggYjdjMTc2MjI1OGNiZGM1NDc2ZDdkY2EwYWM5MTU3NWE5
NDVhZWIyOC4uNDY1Zjk0OTU2YmZlODJkNDkxNjJkNzRjOWJhZjU4YWRkYmM2NTEwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMjk1LDcgKzI5NSw3
IEBAIFJlY3RFZGdlczxib29sPiBTY3JvbGxBbmltYXRvcjo6ZWRnZVBpbm5lZFN0YXRlKCkgY29u
c3QKICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5lZGdlUGlubmVkU3RhdGUoKTsKIH0KIAot
Ym9vbCBTY3JvbGxBbmltYXRvcjo6aXNQaW5uZWRPblNpZGUoQm94U2lkZSBzaWRlKSBjb25zdAor
Ym9vbCBTY3JvbGxBbmltYXRvcjo6aXNQaW5uZWRPblNpZGUoUEFMOjpCb3hTaWRlIHNpZGUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuaXNQaW5uZWRPblNpZGUoc2lkZSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCBkNTIxZWEz
YTM2M2FhZWIwMWU4N2UyMzJmOGYzY2MyMTMzZjg3YzEzLi5mN2MwNjdlOTk0OWVkYWZlYTdjNjE3
M2FmOGE3OWJkNjY5OGUyZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRlOgogI2lmIEhBVkUoUlVCQkVSX0JBTkRJ
TkcpCiAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgZmluYWw7CiAgICAgUmVjdEVk
Z2VzPGJvb2w+IGVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNQaW5u
ZWRPblNpZGUoQm94U2lkZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Bpbm5lZE9uU2lkZShQ
QUw6OkJveFNpZGUpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggN2JjY2ViZjgw
ZWNlNzgxNDcwMmZiNTE1MWU0Zjk1OTVkNzFmOTk5Mi4uZDkzMGFjZmNhMGQwOTIyZTZjYTgwNzcy
MDFjOGE4NzkzOTUwNzdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmNwcApAQCAtNTc0LDIyICs1NzQsMjIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6ZG9Qb3N0
VGh1bWJNb3ZlU25hcHBpbmcoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiAgICAg
c2Nyb2xsQW5pbWF0b3ItPnNjcm9sbFRvUG9zaXRpb25XaXRoQW5pbWF0aW9uKHBvc2l0aW9uKTsK
IH0KIAotYm9vbCBTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRPblNpZGUoQm94U2lkZSBzaWRlKSBj
b25zdAorYm9vbCBTY3JvbGxhYmxlQXJlYTo6aXNQaW5uZWRPblNpZGUoUEFMOjpCb3hTaWRlIHNp
ZGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBCb3hTaWRlOjpUb3A6
CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNh
bFNjcm9sbGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBz
Y3JvbGxQb3NpdGlvbigpLnkoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7Ci0gICAg
Y2FzZSBCb3hTaWRlOjpCb3R0b206CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAg
ICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpLnkoKSA+PSBtYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKS55KCk7Ci0gICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAgIGNhc2UgUEFM
OjpCb3hTaWRlOjpMZWZ0OgogICAgICAgICBpZiAoIWFsbG93c0hvcml6b250YWxTY3JvbGxpbmco
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRp
b24oKS54KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOwotICAgIGNhc2UgQm94U2lk
ZTo6UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICBpZiAoIWFs
bG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueCgpOwpAQCAtNzc5LDIzICs3NzksMjMgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y29tcHV0
ZVNjcm9sbGJhclZhbHVlQW5kT3ZlcmhhbmcoZmxvYXQgY3VycmVudFBvc2l0aW9uLCBmbG8KICAg
ICB9CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Qm94U2lkZT4gU2Nyb2xsYWJsZUFyZWE6OnRhcmdldFNp
ZGVGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUgZGVsdGEsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQor
c3RkOjpvcHRpb25hbDxQQUw6OkJveFNpZGU+IFNjcm9sbGFibGVBcmVhOjp0YXJnZXRTaWRlRm9y
U2Nyb2xsRGVsdGEoRmxvYXRTaXplIGRlbHRhLCBTY3JvbGxFdmVudEF4aXMgYXhpcykKIHsKICAg
ICBzd2l0Y2ggKGF4aXMpIHsKICAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDoK
ICAgICAgICAgaWYgKGRlbHRhLndpZHRoKCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIEJveFNp
ZGU6OkxlZnQ7CisgICAgICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpMZWZ0OwogCiAgICAg
ICAgIGlmIChkZWx0YS53aWR0aCgpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpS
aWdodDsKKyAgICAgICAgICAgIHJldHVybiBQQUw6OkJveFNpZGU6OlJpZ2h0OwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDoKICAgICAgICAgaWYg
KGRlbHRhLmhlaWdodCgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpUb3A7Cisg
ICAgICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpUb3A7CiAKICAgICAgICAgaWYgKGRlbHRh
LmhlaWdodCgpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpCb3R0b207CisgICAg
ICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRlOjpCb3R0b207CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggYWI3NDVj
NGJiYTlmMjNlMThhYmEzY2YxMzZlM2U5MTUzMTBiOTA1MS4uYzNkZWIwOTVjNzJlMzAxMTY2ZTUx
ZjZmNDZhOTllNDk3N2U1NWM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5oCkBAIC0zMzcsMTAgKzMzNywxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBzdGF0aWMgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFk
IG9yIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IGNvbXB1dGVTY3JvbGxiYXJWYWx1ZUFuZE92ZXJoYW5nKGZsb2F0IGN1cnJlbnRQb3NpdGlvbiwg
ZmxvYXQgdG90YWxTaXplLCBmbG9hdCB2aXNpYmxlU2l6ZSwgZmxvYXQmIGRvdWJsZVZhbHVlLCBm
bG9hdCYgb3ZlcmhhbmdBbW91bnQpOwogCi0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Qm94U2lk
ZT4gdGFyZ2V0U2lkZUZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSwgU2Nyb2xsRXZlbnRBeGlzKTsK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQQUw6OkJveFNpZGU+IHRhcmdldFNpZGVGb3JTY3Jv
bGxEZWx0YShGbG9hdFNpemUsIFNjcm9sbEV2ZW50QXhpcyk7CiAKICAgICAvLyAiUGlubmVkIiBt
ZWFucyBzY3JvbGxlZCBhdCBvciBiZXlvbmQgdGhlIGVkZ2UuCi0gICAgYm9vbCBpc1Bpbm5lZE9u
U2lkZShCb3hTaWRlKSBjb25zdDsKKyAgICBib29sIGlzUGlubmVkT25TaWRlKFBBTDo6Qm94U2lk
ZSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVjdEVkZ2VzPGJvb2w+IGVkZ2VQaW5uZWRT
dGF0ZSgpIGNvbnN0OwogCiAgICAgLy8gVHJ1ZSBpZiBzY3JvbGxpbmcgaGFwcGVucyBieSBtb3Zp
bmcgY29tcG9zaXRpbmcgbGF5ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgKaW5kZXggYzdhM2EyZjg1ZWEwZWQ1YTdjNmE5
NGJlMWJmMzU3MjhiMThjODhmMy4uYTNlOTQ4OWRiNGMzM2Q1NTJkOWE2YTFhNDk3YmIwY2FhODFl
NTBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlci5oCkBAIC05NSwxMCArOTUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
SW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgPSAwOwogCiAgICAgLy8gIlBpbm5lZCIgbWVh
bnMgc2Nyb2xsZWQgYXQgb3IgYmV5b25kIHRoZSBlZGdlLgotICAgIHZpcnR1YWwgYm9vbCBpc1Bp
bm5lZE9uU2lkZShCb3hTaWRlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUGlubmVk
T25TaWRlKFBBTDo6Qm94U2lkZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVjdEVkZ2VzPGJv
b2w+IGVkZ2VQaW5uZWRTdGF0ZSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRSdWJiZXJCYW5kT25TaWRlKEJveFNpZGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNpZGUpIGNvbnN0ID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCB3aWxsU3RhcnRSdWJiZXJCYW5kQW5pbWF0aW9uKCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGRpZFN0b3BSdWJiZXJCYW5kQW5pbWF0aW9uKCkgeyB9CkBAIC0yMTEsNyArMjExLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxTdGFydFJ1YmJlckJhbmRBbmltYXRpb24oKTsKICAg
ICB2b2lkIGRpZFN0b3BSdWJiZXJCYW5kQW5pbWF0aW9uKCk7CiAKLSAgICBib29sIHNob3VsZFJ1
YmJlckJhbmRPblNpZGUoQm94U2lkZSkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRSdWJiZXJCYW5k
T25TaWRlKFBBTDo6Qm94U2lkZSkgY29uc3Q7CiAgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dy
ZXNzSW50ZXJuYWwoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgp
OwogICAgIHZvaWQgdXBkYXRlUnViYmVyQmFuZGluZ0VkZ2VzKEludFNpemUgY2xpZW50U3RyZXRj
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1t
CmluZGV4IGUzOGRhZjg4NWEzNjQ3YzAwZmM0OTliMDU0ZjBkYmRlOTQzOTM3YmEuLjQyZjA0ZWMz
NzZiMDFmYzQ4NDRiYTY1MTFlMzc5ZDYyMmVmZGJkM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCkBAIC0yOTAsNyArMjkwLDcgQEAgTGlu
a0ltYWdlTGF5b3V0OjpMaW5rSW1hZ2VMYXlvdXQoVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0
bGVTdHJpbmcpCiAgICAgYm91bmRpbmdSZWN0LnNldEhlaWdodCgoc3RhdGljX2Nhc3Q8aW50Pihi
b3VuZGluZ1JlY3QuaGVpZ2h0KCkgLyAyKSAqIDIpKTsKIH0KIAotRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgZWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIFRleHRJbmRpY2F0b3JEYXRhJiwgRm9udFJlbmRlcmluZ01vZGUsIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKQorRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxl
bWVudCYgZWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFRleHRJbmRpY2F0
b3JEYXRhJiwgUEFMOjpGb250UmVuZGVyaW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ip
CiB7CiAgICAgTGlua0ltYWdlTGF5b3V0IGxheW91dCh1cmwsIHRpdGxlKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcAppbmRleCAwZDk3MTM2ZDBhNjQzMzIwNWFkZWMzNThhYTkyYzRhOWIw
NjliM2E0Li5kYTk4MmEwOGM2NmFiOTA0OTM4Y2I1Y2RkMWRmZjMyZjE0YzA2N2Y2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzc4LDcgKzM3OCw3IEBAIEZsb2F0U2l6ZSBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2Fk
ZSwgY29uc3QKICAgICByZXR1cm4gc2l6ZTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQogewogICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiAgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCmluZGV4
IDRjN2Y0OGE2Y2YwNDdjMzM5MmVlZWQyZjJjN2E4ZjU4YWI4NTIxY2QuLjAwODM1YTEwNDFkODM3
N2E2NGQ1ZjRkYWY5NmJlYjUzYWExODVjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKQEAg
LTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEZsb2F0U2l6ZSBkcmF3VGV4
dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxs
b3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiwgUEFMOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKICAgICB2b2lkIGRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpE
b05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRl
eCBmZDYwMmYzZDUzZmNiYjQwMWJhZDQyYzkwMTc3YmQyMWRkODUwMjcxLi5jZjk4Zjk4ZjY3OTNm
MzA3ZjFkZTg4MjZkZWE4ZTUwMzE2NzBiYjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1
LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENv
bnRyb2xsZXIuaCIKIAotI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMuaCIKKyNpbmNsdWRl
IDxwYWwvdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAt
MTA1LDcgKzEwNSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb21wdXRlRXhwYW5z
aW9uT3Bwb3J0dW5pdHkoKQogICAgIGlmICghbV9leHBhbnNpb24pCiAgICAgICAgIG1fZXhwYW5z
aW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRl
eHREaXJlY3Rpb246OlJUTCwgbV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSkuZmlyc3Q7CisgICAg
ICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgOiBQQUw6OlRleHREaXJlY3Rpb246OlJUTCwgbV9ydW4uZXhwYW5z
aW9uQmVoYXZpb3IoKSkuZmlyc3Q7CiAKICAgICAgICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KQogICAgICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CkBAIC0y
NzYsOSArMjc2LDkgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUJ5Q29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY29uc3QgVUNoYXIqJiBpdGVyYXRvciwgY29uc3QgVUMKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gQ29uc3VtZSBtYXJrcy4KLSAgICBib29sIHNhd0Vtb2ppR3JvdXBDYW5k
aWRhdGUgPSBpc0Vtb2ppR3JvdXBDYW5kaWRhdGUoYmFzZUNoYXJhY3Rlcik7CisgICAgYm9vbCBz
YXdFbW9qaUdyb3VwQ2FuZGlkYXRlID0gUEFMOjppc0Vtb2ppR3JvdXBDYW5kaWRhdGUoYmFzZUNo
YXJhY3Rlcik7CiAgICAgYm9vbCBzYXdKb2luZXIgPSBmYWxzZTsKLSAgICBib29sIHNhd1JlZ2lv
bmFsSW5kaWNhdG9yID0gaXNFbW9qaVJlZ2lvbmFsSW5kaWNhdG9yKGJhc2VDaGFyYWN0ZXIpOwor
ICAgIGJvb2wgc2F3UmVnaW9uYWxJbmRpY2F0b3IgPSBQQUw6OmlzRW1vamlSZWdpb25hbEluZGlj
YXRvcihiYXNlQ2hhcmFjdGVyKTsKICAgICB3aGlsZSAoaXRlcmF0b3IgPCBlbmQpIHsKICAgICAg
ICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwogICAgICAgICB1bnNpZ25lZCBtYXJrTGVuZ3RoID0g
MDsKQEAgLTI4NiwxNSArMjg2LDE1IEBAIHN0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDCiAgICAgICAg
IEFTU0VSVChlbmQgPj0gaXRlcmF0b3IpOwogICAgICAgICBVMTZfTkVYVChpdGVyYXRvciwgbWFy
a0xlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIGl0ZXJhdG9yKSwgbmV4dENoYXJh
Y3Rlcik7CiAKLSAgICAgICAgaWYgKGlzVmFyaWF0aW9uU2VsZWN0b3IobmV4dENoYXJhY3Rlcikg
fHwgaXNFbW9qaUZpdHpwYXRyaWNrTW9kaWZpZXIobmV4dENoYXJhY3RlcikpCisgICAgICAgIGlm
IChQQUw6OmlzVmFyaWF0aW9uU2VsZWN0b3IobmV4dENoYXJhY3RlcikgfHwgUEFMOjppc0Vtb2pp
Rml0enBhdHJpY2tNb2RpZmllcihuZXh0Q2hhcmFjdGVyKSkKICAgICAgICAgICAgIHNob3VsZENv
bnRpbnVlID0gdHJ1ZTsKIAotICAgICAgICBpZiAoc2F3UmVnaW9uYWxJbmRpY2F0b3IgJiYgaXNF
bW9qaVJlZ2lvbmFsSW5kaWNhdG9yKG5leHRDaGFyYWN0ZXIpKSB7CisgICAgICAgIGlmIChzYXdS
ZWdpb25hbEluZGljYXRvciAmJiBQQUw6OmlzRW1vamlSZWdpb25hbEluZGljYXRvcihuZXh0Q2hh
cmFjdGVyKSkgewogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICAg
ICAgc2F3UmVnaW9uYWxJbmRpY2F0b3IgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChzYXdKb2luZXIgJiYgaXNFbW9qaUdyb3VwQ2FuZGlkYXRlKG5leHRDaGFyYWN0ZXIpKQorICAg
ICAgICBpZiAoc2F3Sm9pbmVyICYmIFBBTDo6aXNFbW9qaUdyb3VwQ2FuZGlkYXRlKG5leHRDaGFy
YWN0ZXIpKQogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwogCiAgICAgICAgIHNh
d0pvaW5lciA9IGZhbHNlOwpAQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RkOjpv
cHRpb25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZChVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIpCiAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkU3ludGhlc2l6ZShi
b29sIGRvbnRTeW50aGVzaXplU21hbGxDYXBzLCBjb25zdCBGb250KiBuZXh0Rm9udCwgVUNoYXIz
MiBiYXNlQ2hhcmFjdGVyLCBzdGQ6Om9wdGlvbmFsPFVDaGFyMzI+IGNhcGl0YWxpemVkQmFzZSwg
Rm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50Q2FwcywgYm9vbCBlbmdhZ2VBbGxTbWFsbENhcHNQ
cm9jZXNzaW5nKQorc3RhdGljIGJvb2wgc2hvdWxkU3ludGhlc2l6ZShib29sIGRvbnRTeW50aGVz
aXplU21hbGxDYXBzLCBjb25zdCBGb250KiBuZXh0Rm9udCwgVUNoYXIzMiBiYXNlQ2hhcmFjdGVy
LCBzdGQ6Om9wdGlvbmFsPFVDaGFyMzI+IGNhcGl0YWxpemVkQmFzZSwgUEFMOjpGb250VmFyaWFu
dENhcHMgZm9udFZhcmlhbnRDYXBzLCBib29sIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3Npbmcp
CiB7CiAgICAgaWYgKGRvbnRTeW50aGVzaXplU21hbGxDYXBzKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zNTUsOSArMzU1LDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxl
Y3RDb21wbGV4VGV4dFJ1bnMoKQogICAgICAgICBjcCA9IG1fcnVuLmNoYXJhY3RlcnMxNigpOwog
CiAgICAgYXV0byBmb250VmFyaWFudENhcHMgPSBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudmFy
aWFudENhcHMoKTsKLSAgICBib29sIGRvbnRTeW50aGVzaXplU21hbGxDYXBzID0gIXN0YXRpY19j
YXN0PGJvb2w+KG1fZm9udC5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBGb250
U3ludGhlc2lzU21hbGxDYXBzKTsKLSAgICBib29sIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3Np
bmcgPSBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCB8fCBmb250
VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU7Ci0gICAgYm9vbCBlbmdh
Z2VTbWFsbENhcHNQcm9jZXNzaW5nID0gZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBm
b250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbCB8fCBmb250VmFyaWFudENh
cHMgPT0gRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU7CisgICAgYm9vbCBkb250U3ludGhlc2l6ZVNt
YWxsQ2FwcyA9ICFzdGF0aWNfY2FzdDxib29sPihtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuZm9u
dFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzU21hbGxDYXBzKTsKKyAgICBib29sIGVu
Z2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgPSBmb250VmFyaWFudENhcHMgPT0gUEFMOjpGb250
VmFyaWFudENhcHM6OkFsbFNtYWxsIHx8IGZvbnRWYXJpYW50Q2FwcyA9PSBQQUw6OkZvbnRWYXJp
YW50Q2Fwczo6QWxsUGV0aXRlOworICAgIGJvb2wgZW5nYWdlU21hbGxDYXBzUHJvY2Vzc2luZyA9
IGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgfHwgZm9udFZhcmlhbnRDYXBzID09IFBBTDo6
Rm9udFZhcmlhbnRDYXBzOjpTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gUEFMOjpGb250VmFy
aWFudENhcHM6OlBldGl0ZTsKIAogICAgIGlmIChlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5n
IHx8IGVuZ2FnZVNtYWxsQ2Fwc1Byb2Nlc3NpbmcpCiAgICAgICAgIG1fc21hbGxDYXBzQnVmZmVy
LnJlc2l6ZShtX2VuZCk7CkBAIC02NzMsMTMgKzY3MywxMyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6
cGFpcjxib29sLCBib29sPiBleHBhbnNpb25Mb2NhdGlvbihib29sIGlkZW9ncmFwaCwgYm9vbCB0
cmVhdAogCiB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5j
ZXMoKQogewotICAgIGJvb2wgYWZ0ZXJFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZp
b3IoKSAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhwYW5zaW9uOworICAgIGJv
b2wgYWZ0ZXJFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6TGVm
dEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yYmlkTGVmdEV4cGFuc2lvbjsKICAgICBzaXplX3Qg
cnVuQ291bnQgPSBtX2NvbXBsZXhUZXh0UnVucy5zaXplKCk7CiAgICAgYm9vbCBoYXNFeHRyYVNw
YWNpbmcgPSAobV9mb250LmxldHRlclNwYWNpbmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8
fCBtX2V4cGFuc2lvbikgJiYgIW1fcnVuLnNwYWNpbmdEaXNhYmxlZCgpOwotICAgIGJvb2wgcnVu
Rm9yY2VzTGVmdEV4cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4
cGFuc2lvbk1hc2spID09IEZvcmNlTGVmdEV4cGFuc2lvbjsKLSAgICBib29sIHJ1bkZvcmNlc1Jp
Z2h0RXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBSaWdodEV4cGFuc2lv
bk1hc2spID09IEZvcmNlUmlnaHRFeHBhbnNpb247Ci0gICAgYm9vbCBydW5Gb3JiaWRzTGVmdEV4
cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2sp
ID09IEZvcmJpZExlZnRFeHBhbnNpb247Ci0gICAgYm9vbCBydW5Gb3JiaWRzUmlnaHRFeHBhbnNp
b24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFJpZ2h0RXhwYW5zaW9uTWFzaykgPT0g
Rm9yYmlkUmlnaHRFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JjZXNMZWZ0RXhwYW5zaW9uID0g
KG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQ
QUw6OkZvcmNlTGVmdEV4cGFuc2lvbjsKKyAgICBib29sIHJ1bkZvcmNlc1JpZ2h0RXhwYW5zaW9u
ID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBQQUw6OlJpZ2h0RXhwYW5zaW9uTWFzaykg
PT0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOworICAgIGJvb2wgcnVuRm9yYmlkc0xlZnRFeHBh
bnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6TGVmdEV4cGFuc2lvbk1h
c2spID09IFBBTDo6Rm9yYmlkTGVmdEV4cGFuc2lvbjsKKyAgICBib29sIHJ1bkZvcmJpZHNSaWdo
dEV4cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUEFMOjpSaWdodEV4cGFu
c2lvbk1hc2spID09IFBBTDo6Rm9yYmlkUmlnaHRFeHBhbnNpb247CiAKICAgICAvLyBXZSBhcmUg
aXRlcmF0aW5nIGluIGdseXBoIG9yZGVyLCBub3Qgc3RyaW5nIG9yZGVyLiBDb21wYXJlIHRoaXMg
dG8gV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKCkKICAgICBmb3IgKHNpemVfdCBydW5J
bmRleCA9IDA7IHJ1bkluZGV4IDwgcnVuQ291bnQ7ICsrcnVuSW5kZXgpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKaW5k
ZXggMWQwZTg3OTBkYTM1YzA4MWE4MGJlZjFiMWU3MWEzYjdkOWY1MTM3Yy4uZWEzMjc1MTNmNTNh
NzIxOGUxOGE3NTYzOWJkNDVhYWVmMjdiYjNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxw
YWwvdGV4dC9UZXh0RmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBV
U0UoQ09SRV9URVhUKQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBE
ZXJpdmVGb250RnJvbUNvbnRleHQgOiBib29sIHsgTm8sIFllcyB9OwogICAgIGV4cGxpY2l0IERy
YXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMg
PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vLCBEZXJpdmVGb250RnJvbUNvbnRleHQgPSBEZXJp
dmVGb250RnJvbUNvbnRleHQ6Ok5vKTsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2Rl
KTsKIAogI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAgdm9pZCBkcmF3
TmF0aXZlVGV4dChDVEZvbnRSZWYsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJlZiwgQ0dSZWN0
IGxpbmVSZWN0KTsKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcG9wdWxh
dGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBw
b3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAg
IHZvaWQgcHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiwgRm9udFNtb290aGluZ01v
ZGUpOworICAgIHZvaWQgcHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiwgUEFMOjpG
b250U21vb3RoaW5nTW9kZSk7CiAgICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwog
CiAgICAgdm9pZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxs
cHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogICAgIGNvbnN0IEZvbnQqIG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OwotICAg
IEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpB
dXRvU21vb3RoaW5nIH07CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01v
ZGUgeyBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwogCiAgICAgc3RydWN0IFN0YXRlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNGU5NDlkZmFiOTc2
NWEyYTA3YzQ4NzhhYmVlMTAzZmJhZjIxZjU3MC4uZWE0NDE1Y2FhYTExMDVhNDM2ZDUwMzdlY2U4
MWRkZGNiNTIzYjIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAKQEAgLTM1LDcgKzM1LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgot
I2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9DaGFy
YWN0ZXJQcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKICNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCkBAIC05NCw3
ICs5NCw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRh
LCBPcmlnaW4gb3JpZ2luLCBJbnRlcnN0aXRpYWwgaW50CiAgICAgcGxhdGZvcm1HbHlwaEluaXQo
KTsKICAgICBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVS
VElDQUwpCi0gICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRh
dGlvbjo6VmVydGljYWwgJiYgb3JpZW50YXRpb25GYWxsYmFjayA9PSBPcmllbnRhdGlvbkZhbGxi
YWNrOjpObykgeworICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBQQUw6OkZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgb3JpZW50YXRpb25GYWxsYmFjayA9PSBPcmllbnRh
dGlvbkZhbGxiYWNrOjpObykgewogICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IEZvbnRDYWNoZTo6
Zm9yQ3VycmVudFRocmVhZCgpLnZlcnRpY2FsRGF0YShwbGF0Zm9ybURhdGEpOwogICAgICAgICBt
X2hhc1ZlcnRpY2FsR2x5cGhzID0gbV92ZXJ0aWNhbERhdGEuZ2V0KCkgJiYgbV92ZXJ0aWNhbERh
dGEtPmhhc1ZlcnRpY2FsTWV0cmljcygpOwogICAgIH0KQEAgLTQ0NSw3ICs0NDUsNyBAQCBjb25z
dCBGb250JiBGb250Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkgY29uc3QKIHsKICAg
ICBEZXJpdmVkRm9udHMmIGRlcml2ZWRGb250RGF0YSA9IGVuc3VyZURlcml2ZWRGb250RGF0YSgp
OwogICAgIGlmICghZGVyaXZlZEZvbnREYXRhLnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQp
IHsKLSAgICAgICAgYXV0byB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhID0gRm9udFBsYXRmb3Jt
RGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24obV9wbGF0Zm9ybURhdGEsIEZvbnRPcmllbnRhdGlv
bjo6SG9yaXpvbnRhbCk7CisgICAgICAgIGF1dG8gdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSA9
IEZvbnRQbGF0Zm9ybURhdGE6OmNsb25lV2l0aE9yaWVudGF0aW9uKG1fcGxhdGZvcm1EYXRhLCBQ
QUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCk7CiAgICAgICAgIGRlcml2ZWRGb250RGF0
YS52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250ID0gY3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEsIG9yaWdpbigpLCBJbnRlcnN0aXRpYWw6Ok5vLCBWaXNpYmlsaXR5OjpWaXNpYmxl
LCBPcmllbnRhdGlvbkZhbGxiYWNrOjpZZXMpOwogICAgIH0KICAgICBBU1NFUlQoZGVyaXZlZEZv
bnREYXRhLnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQgIT0gdGhpcyk7CkBAIC01NTAsNyAr
NTUwLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2EKIH0KIAogI2lmICFVU0UoQ09SRV9URVhU
KQotR2x5cGhCdWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmlu
Z1ZpZXcsIFRleHREaXJlY3Rpb24pIGNvbnN0CitHbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBw
bHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBib29sLCBib29s
LCBjb25zdCBBdG9tU3RyaW5nJiwgU3RyaW5nVmlldywgUEFMOjpUZXh0RGlyZWN0aW9uKSBjb25z
dAogewogICAgIHJldHVybiBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7CiB9CkBAIC02MzYsMTMg
KzYzNiwxMyBAQCB2b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKIH0K
IAogI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShGUkVFVFlQRSkKLWJvb2wgRm9udDo6dmFy
aWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9u
dFZhcmlhbnRDYXBzLCBVQ2hhcjMyKSBjb25zdAorYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBv
cnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKFBBTDo6Rm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50
Q2FwcywgVUNoYXIzMikgY29uc3QKIHsKICAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENh
cHM6OlNtYWxsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZToKKyAgICBj
YXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRDYXBzOjpBbGxQZXRpdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0
OgogICAgICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZh
bHVlcyBsaXN0ZWQgYWJvdmUuCkBAIC02ODIsNyArNjgyLDcgQEAgYm9vbCBGb250OjpjYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6
ZV90IGwKICAgICAgICAgYXV0byBjb2RlUG9pbnQgPSAqaXQ7CiAgICAgICAgICsraXQ7CiAKLSAg
ICAgICAgaWYgKGl0ICE9IGVuZCAmJiBpc1ZhcmlhdGlvblNlbGVjdG9yKCppdCkpIHsKKyAgICAg
ICAgaWYgKGl0ICE9IGVuZCAmJiBQQUw6OmlzVmFyaWF0aW9uU2VsZWN0b3IoKml0KSkgewogICAg
ICAgICAgICAgaWYgKCFwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KGNvZGVQb2ludCwgKml0KSkg
ewogICAgICAgICAgICAgICAgIC8vIFRyeSB0aGUgY2hhcmFjdGVycyBpbmRpdmlkdWFsbHkuCiAg
ICAgICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0NvZGVQb2ludChjb2RlUG9pbnQpIHx8ICFzdXBw
b3J0c0NvZGVQb2ludCgqaXQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CmluZGV4IDc0NDIwMDRmMDBiNWRiYTI3ZjNjMzJlNjY3YjM2YmNjZjc4NTE0Y2QuLmVlMzk2MTZj
NzJhMmNkZDBiMjkwYmJkOGM5MzMxODAyNjAyMDRiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PEZvbnQqPih0aGlzKTsKICAgICB9CiAKLSAgICBib29sIHZhcmlhbnRD
YXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMy
KSBjb25zdDsKKyAgICBib29sIHZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVz
aXMoUEFMOjpGb250VmFyaWFudENhcHMsIFVDaGFyMzIpIGNvbnN0OwogCiAgICAgY29uc3QgRm9u
dCYgdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnQm
IHVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKSBjb25zdDsKQEAgLTE4Miw3ICsxODIsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBDVEZvbnRSZWYgZ2V0Q1RGb250
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKGJvb2wgZW5hYmxlS2Vybmlu
ZywgRm9udE9yaWVudGF0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUpIGNvbnN0OworICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGdldENGU3RyaW5nQXR0cmlidXRlcyhib29sIGVu
YWJsZUtlcm5pbmcsIFBBTDo6Rm9udE9yaWVudGF0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGUpIGNvbnN0OwogICAgIGNvbnN0IEJpdFZlY3RvciYgZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENh
cHMoKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzKCkgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRCeVBl
dGl0ZUNhcHMoKSBjb25zdDsKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
ICAgIGJvb2wgY2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIq
LCBzaXplX3QpIGNvbnN0OwotICAgIEdseXBoQnVmZmVyQWR2YW5jZSBhcHBseVRyYW5zZm9ybXMo
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdp
bm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGlu
ZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rp
b24pIGNvbnN0OworICAgIEdseXBoQnVmZmVyQWR2YW5jZSBhcHBseVRyYW5zZm9ybXMoR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdT
dHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29u
c3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlv
bikgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIG51bGxvcHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhz
IGFyZSBPVC1TVkcgZ2x5cGhzLgogICAgIHN0ZDo6b3B0aW9uYWw8Qml0VmVjdG9yPiBmaW5kT1RT
VkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIHVuc2lnbmVkIGNvdW50KSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggNzZi
YjlmM2JiYjUxNGIwMTQ1YjdhOWUxNzQ3NzNjNTM0NzEzNWZhOS4uMDkwOTQzMjdkNGY3NzJlMTMz
NTdmOWM3MzFlNGQ5NjJhYmRlZGJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBwcml2YXRlOgogICAgICAgICB1
bnNpZ25lZCBmaXJzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5zY3JpcHQo
KSkgPDwgMTUKICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9u
LnNob3VsZERpc2FibGVMaWdhdHVyZXNGb3JTcGFjaW5nKCkpIDw8IDE0CiAgICAgICAgICAgICB8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cygpKSA8PCAxMwotICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVz
Y3JpcHRpb24uZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQpIDw8IDEyCisg
ICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5mb250U3R5bGVB
eGlzKCkgPT0gUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KSA8PCAxMgogICAgICAgICAgICAgfCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24ub3B0aWNhbFNpemluZygpKSA8PCAxMQog
ICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24udGV4dFJlbmRl
cmluZ01vZGUoKSkgPDwgOQogICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVz
Y3JpcHRpb24uZm9udFN5bnRoZXNpcygpKSA8PCA2CkBAIC0zMTAsNyArMzEwLDcgQEAgcHVibGlj
OgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMgc28gQ1NTRm9udFNlbGVjdG9yIGNhbiBo
YXZlIGEgdW5pZmllZCBub3Rpb24gb2YgcHJlaW5zdGFsbGVkIGZvbnRzIGFuZCBAZm9udC1mYWNl
LgogICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSBjcmVhdGUgYW4gQGZvbnQtZmFj
ZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBhcyBhIHByZWluc3RhbGxlZCBmb250LgotICAg
IFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJp
bGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKKyAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmLCBQQUw6OkFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9y
RmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRD
cmVhdGlvbkNvbnRleHQmID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA3YWY5Nzg2ZmVlMjM5OGZiMDM4Y2I5YzQ4OTVh
Nzk3ZGM5N2UxYTJiLi45NjM4MDQzMTk5ZGI4ODc1MmJlNTg1ZDExNTQ4Mjk3OGI5NzU2NjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKIAotI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMuaCIKKyNpbmNsdWRlIDxw
YWwvdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSAiQ29tcGxleFRleHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKQEAgLTMwMSw3ICszMDEsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aEZvclNp
bXBsZVRleHQoU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNv
bnN0CitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcgdGV4
dCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKHRl
eHQuaXNOdWxsKCkgfHwgdGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzM5
LDcgKzMzOSw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aEZvclNpbXBsZVRleHQoU3RyaW5n
VmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3RpCiBHbHlwaERhdGEgRm9udENhc2Nh
ZGU6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250VmFy
aWFudCB2YXJpYW50KSBjb25zdAogewogICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7
Ci0gICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi52YXJpYW50Q2FwcygpID09IEZvbnRWYXJp
YW50Q2Fwczo6U21hbGwpIHsKKyAgICAgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLnZhcmlhbnRD
YXBzKCkgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsKSB7CiAgICAgICAgICAgICBVQ2hh
cjMyIHVwcGVyQyA9IHVfdG91cHBlcihjKTsKICAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykg
ewogICAgICAgICAgICAgICAgIGMgPSB1cHBlckM7CkBAIC03MjYsOSArNzI2LDkgQEAgRm9udENh
c2NhZGU6OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXIKICAgICAgICAgICAgIGlmIChzdXBwbGVtZW50YXJ5Q2hhcmFjdGVy
IDw9IDB4MUYxRkYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVQYXRoOjpDb21wbGV4Owog
Ci0gICAgICAgICAgICBpZiAoaXNFbW9qaUZpdHpwYXRyaWNrTW9kaWZpZXIoc3VwcGxlbWVudGFy
eUNoYXJhY3RlcikpCisgICAgICAgICAgICBpZiAoUEFMOjppc0Vtb2ppRml0enBhdHJpY2tNb2Rp
ZmllcihzdXBwbGVtZW50YXJ5Q2hhcmFjdGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQ29k
ZVBhdGg6OkNvbXBsZXg7Ci0gICAgICAgICAgICBpZiAoaXNFbW9qaUdyb3VwQ2FuZGlkYXRlKHN1
cHBsZW1lbnRhcnlDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBpZiAoUEFMOjppc0Vtb2ppR3Jv
dXBDYW5kaWRhdGUoc3VwcGxlbWVudGFyeUNoYXJhY3RlcikpIHsKICAgICAgICAgICAgICAgICBw
cmV2aW91c0NoYXJhY3RlcklzRW1vamlHcm91cENhbmRpZGF0ZSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC05NjMsMTUgKzk2MywxNSBAQCBib29s
IEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKICAgICByZXR1
cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9u
dENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCitzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUEFMOjpUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKIHsKICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4cGFu
c2lvbkJlaGF2aW9yICYgTGVmdEV4cGFuc2lvbk1hc2spID09IEZvcmJpZExlZnRFeHBhbnNpb247
Ci0gICAgaWYgKChleHBhbnNpb25CZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3Jj
ZUxlZnRFeHBhbnNpb24pIHsKKyAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSAoZXhwYW5zaW9u
QmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmJpZExlZnRFeHBh
bnNpb247CisgICAgaWYgKChleHBhbnNpb25CZWhhdmlvciAmIFBBTDo6TGVmdEV4cGFuc2lvbk1h
c2spID09IFBBTDo6Rm9yY2VMZWZ0RXhwYW5zaW9uKSB7CiAgICAgICAgICsrY291bnQ7CiAgICAg
ICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwogICAgIH0KLSAgICBpZiAoZGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUikgeworICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaV0pKSB7CiAg
ICAgICAgICAgICAgICAgY291bnQrKzsKQEAgLTk4OCwxMCArOTg4LDEwIEBAIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMCiAgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQotICAgIGlmICghaXNBZnRlckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9u
QmVoYXZpb3IgJiBSaWdodEV4cGFuc2lvbk1hc2spID09IEZvcmNlUmlnaHRFeHBhbnNpb24pIHsK
KyAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgUEFMOjpS
aWdodEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yY2VSaWdodEV4cGFuc2lvbikgewogICAgICAg
ICArK2NvdW50OwogICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKLSAgICB9IGVsc2Ug
aWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBhbnNp
b25NYXNrKSA9PSBGb3JiaWRSaWdodEV4cGFuc2lvbikgeworICAgIH0gZWxzZSBpZiAoaXNBZnRl
ckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OlJpZ2h0RXhwYW5zaW9uTWFz
aykgPT0gUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lvbikgewogICAgICAgICBBU1NFUlQoY291bnQp
OwogICAgICAgICAtLWNvdW50OwogICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CkBA
IC05OTksMTUgKzk5OSwxNSBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRl
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTAogICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihjb3VudCwgaXNBZnRlckV4cGFuc2lvbik7CiB9CiAKLXN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCitzdGQ6
OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b25CZWhhdmlvcikKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgYm9vbCBpc0FmdGVy
RXhwYW5zaW9uID0gKGV4cGFuc2lvbkJlaGF2aW9yICYgTGVmdEV4cGFuc2lvbk1hc2spID09IEZv
cmJpZExlZnRFeHBhbnNpb247Ci0gICAgaWYgKChleHBhbnNpb25CZWhhdmlvciAmIExlZnRFeHBh
bnNpb25NYXNrKSA9PSBGb3JjZUxlZnRFeHBhbnNpb24pIHsKKyAgICBib29sIGlzQWZ0ZXJFeHBh
bnNpb24gPSAoZXhwYW5zaW9uQmVoYXZpb3IgJiBQQUw6OkxlZnRFeHBhbnNpb25NYXNrKSA9PSBQ
QUw6OkZvcmJpZExlZnRFeHBhbnNpb247CisgICAgaWYgKChleHBhbnNpb25CZWhhdmlvciAmIFBB
TDo6TGVmdEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yY2VMZWZ0RXhwYW5zaW9uKSB7CiAgICAg
ICAgICsrY291bnQ7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwogICAgIH0KLSAg
ICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgIGlmIChkaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9
IGNoYXJhY3RlcnNbaV07CiAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3Rlcikp
IHsKQEAgLTEwNTAsMTAgKzEwNTAsMTAgQEAgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFUKICAgICAg
ICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBp
ZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBhbnNp
b25NYXNrKSA9PSBGb3JjZVJpZ2h0RXhwYW5zaW9uKSB7CisgICAgaWYgKCFpc0FmdGVyRXhwYW5z
aW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSA9PSBQ
QUw6OkZvcmNlUmlnaHRFeHBhbnNpb24pIHsKICAgICAgICAgKytjb3VudDsKICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChpc0FmdGVyRXhwYW5zaW9uICYm
IChleHBhbnNpb25CZWhhdmlvciAmIFJpZ2h0RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkUmlnaHRF
eHBhbnNpb24pIHsKKyAgICB9IGVsc2UgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lv
bkJlaGF2aW9yICYgUEFMOjpSaWdodEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yYmlkUmlnaHRF
eHBhbnNpb24pIHsKICAgICAgICAgQVNTRVJUKGNvdW50KTsKICAgICAgICAgLS1jb3VudDsKICAg
ICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAgc3Rk
OjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudEludGVybmFsKGNvbnN0IFUKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoY291bnQsIGlz
QWZ0ZXJFeHBhbnNpb24pOwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNj
YWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KQorc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCiB7CiAgICAg
Ly8gRm9yIGVhY2ggY2hhcmFjdGVyLCBpdGVyYXRpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0OgogICAg
IC8vICAgSWYgaXQgaXMgcmVjb2duaXplZCBhcyBhIHNwYWNlLCBpbnNlcnQgYW4gb3Bwb3J0dW5p
dHkgYWZ0ZXIgaXQKQEAgLTEwNzIsMTMgKzEwNzIsMTMgQEAgc3RkOjpwYWlyPHVuc2lnbmVkLCBi
b29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJpbmdWaWV3IHN0
cmkKICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKHN0cmluZ1Zp
ZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwgZXhwYW5z
aW9uQmVoYXZpb3IpOwogfQogCi1ib29sIEZvbnRDYXNjYWRlOjpsZWZ0RXhwYW5zaW9uT3Bwb3J0
dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jv
b2wgRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKCFzdHJpbmdW
aWV3Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBVQ2hhcjMyIGluaXRp
YWxDaGFyYWN0ZXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsK
KyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAg
IGluaXRpYWxDaGFyYWN0ZXIgPSBzdHJpbmdWaWV3WzBdOwogICAgICAgICBpZiAoVTE2X0lTX0xF
QUQoaW5pdGlhbENoYXJhY3RlcikgJiYgc3RyaW5nVmlldy5sZW5ndGgoKSA+IDEgJiYgVTE2X0lT
X1RSQUlMKHN0cmluZ1ZpZXdbMV0pKQogICAgICAgICAgICAgaW5pdGlhbENoYXJhY3RlciA9IFUx
Nl9HRVRfU1VQUExFTUVOVEFSWShpbml0aWFsQ2hhcmFjdGVyLCBzdHJpbmdWaWV3WzFdKTsKQEAg
LTEwOTEsMTMgKzEwOTEsMTMgQEAgYm9vbCBGb250Q2FzY2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9y
dHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbgogICAgIHJldHVybiBj
YW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpICYmIGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woaW5pdGlhbENoYXJhY3Rlcik7CiB9CiAKLWJvb2wgRm9udENhc2NhZGU6OnJpZ2h0
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbikKK2Jvb2wgRm9udENhc2NhZGU6OnJpZ2h0RXhwYW5zaW9uT3Bwb3J0dW5pdHko
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewog
ICAgIGlmICghc3RyaW5nVmlldy5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgVUNoYXIzMiBmaW5hbENoYXJhY3RlcjsKLSAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OkxUUikgeworICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIpIHsKICAgICAgICAgZmluYWxDaGFyYWN0ZXIgPSBzdHJpbmdWaWV3W3N0cmluZ1ZpZXcubGVu
Z3RoKCkgLSAxXTsKICAgICAgICAgaWYgKFUxNl9JU19UUkFJTChmaW5hbENoYXJhY3RlcikgJiYg
c3RyaW5nVmlldy5sZW5ndGgoKSA+IDEgJiYgVTE2X0lTX0xFQUQoc3RyaW5nVmlld1tzdHJpbmdW
aWV3Lmxlbmd0aCgpIC0gMl0pKQogICAgICAgICAgICAgZmluYWxDaGFyYWN0ZXIgPSBVMTZfR0VU
X1NVUFBMRU1FTlRBUlkoc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMl0sIGZpbmFs
Q2hhcmFjdGVyKTsKQEAgLTEzNTcsNyArMTM1Nyw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
CiAKIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IEZvbnQm
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKIHsKLSAgICBpZiAoZm9udERhdGEucGxhdGZvcm1EYXRh
KCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsKKyAgICBp
ZiAoZm9udERhdGEucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbCkgewogICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udERh
dGEuYm91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICByZXR1cm4gYm91bmRzLngoKSArIGJv
dW5kcy53aWR0aCgpIC8gMjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2YWY1ODEyZDhhNzIyYjhmZGJkMzkzODFiZDY0ODMy
NzY5ZTRmYTNhLi44OWI3NGQwY2EzNmQxOGM4ZTY4OWI5OGI1MmFmOTRjYWM2M2I3ZmFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTEw
NSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiYs
IGZsb2F0IGxldHRlclNwYWNpbmcgPSAwLCBmbG9hdCB3b3JkU3BhY2luZyA9IDApOwogICAgIC8v
IFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBz
dGFydCB3aXRoIGEgbmF0aXZlIGZvbnQuCi0gICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIEZvbnRTbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGlu
Z01vZGU6OkF1dG9TbW9vdGhpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlID0gUEFMOjpGb250
U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyk7CiAKICAgICBGb250Q2FzY2FkZShjb25zdCBG
b250Q2FzY2FkZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlJiBvcGVyYXRvcj0o
Y29uc3QgRm9udENhc2NhZGUmKTsKQEAgLTEyNCwxNCArMTI0LDE0IEBAIHB1YmxpYzoKIAogICAg
IGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5
LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRT
aXplIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0g
c3RkOjpudWxsb3B0LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIFBBTDo6
Rm9udFNtb290aGluZ01vZGUpOwogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2Vj
dGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdp
biwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CiAKICAgICBmbG9hdCB3aWR0
aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBmbG9hdCogb3V0V2lkdGhC
ZWZvcmVSYW5nZSA9IG51bGxwdHIsIGZsb2F0KiBvdXRXaWR0aEFmdGVyUmFuZ2UgPSBudWxscHRy
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9
IDApIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQs
IFRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIGNvbnN0OworICAgIGZsb2F0IHdp
ZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbiA9IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0
TGF5b3V0LCBUZXh0TGF5b3V0RGVsZXRlcj4gY3JlYXRlTGF5b3V0KFJlbmRlclRleHQmLCBmbG9h
dCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7CiAgICAgc3RhdGljIGZsb2F0
IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0xMzksNyArMTM5LDcgQEAgcHVi
bGljOgogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9z
aXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0
U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0
ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFudENhcHM6OlNt
YWxsOyB9CisgICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2Ny
aXB0aW9uLnZhcmlhbnRDYXBzKCkgPT0gUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsOyB9CiAK
ICAgICBmbG9hdCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fd29yZFNwYWNpbmc7IH0K
ICAgICBmbG9hdCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5n
OyB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGV0dGVyU3BhY2lu
ZyhmbG9hdCBzKSB7IG1fbGV0dGVyU3BhY2luZyA9IHM7IH0KICAgICBib29sIGlzRml4ZWRQaXRj
aCgpIGNvbnN0OwogICAgIAotICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCk7IH0KKyAgICBQ
QUw6OkZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCk7IH0KIAogICAgIGJvb2wgZW5hYmxlS2Vybmlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlS2VybmluZzsgfQogICAgIGJvb2wgcmVxdWlyZXNT
aGFwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1NoYXBpbmc7IH0KQEAgLTE1OSw3ICsx
NTksNyBAQCBwdWJsaWM6CiAgICAgLy8gQSBzdGQ6Om51bGxvcHQgcmV0dXJuIHZhbHVlIGluZGlj
YXRlcyAiZm9udC1zdHlsZTogbm9ybWFsIi4KICAgICBzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rp
b25WYWx1ZT4gaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uaXRhbGlj
KCk7IH0KICAgICBGb250U2VsZWN0aW9uVmFsdWUgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGVzY3JpcHRpb24ud2VpZ2h0KCk7IH0KLSAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFy
aWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpOyB9
CisgICAgUEFMOjpGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpOyB9CiAKICAgICBib29sIGlzUGxhdGZv
cm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250cy0+aXNGb3JQbGF0Zm9ybUZvbnQoKTsgfQog
CkBAIC0xODUsMTIgKzE4NSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zICh0aGUgbnVt
YmVyIG9mIG9wcG9ydHVuaXRpZXMsIHdoZXRoZXIgdGhlIGxhc3QgZXhwYW5zaW9uIGlzIGEgdHJh
aWxpbmcgZXhwYW5zaW9uKQogICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHBvcnR1bml0aWVzLCB0
aGUgYm9vbCB3aWxsIGJlIHRydWUgaWZmIHdlIGFyZSBmb3JiaWRkaW5nIGxlYWRpbmcgZXhwYW5z
aW9ucy4KLSAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KFN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9y
KTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiwgUEFMOjpFeHBhbnNpb25C
ZWhhdmlvcik7CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhbiBleHBhbnNpb24g
b3Bwb3J0dW5pdHkganVzdCBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgIC8vIE5vdGUg
dGhhdCB0aGlzIGRvZXMgbm90IHRha2UgYSBpc0FmdGVyRXhwYW5zaW9uIGZsYWc7IHRoaXMgYXNz
dW1lcyB0aGF0IGlzQWZ0ZXJFeHBhbnNpb24gaXMgZmFsc2UKLSAgICBzdGF0aWMgYm9vbCBsZWZ0
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldywgVGV4dERpcmVjdGlvbik7Ci0gICAgc3Rh
dGljIGJvb2wgcmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3LCBUZXh0RGlyZWN0
aW9uKTsKKyAgICBzdGF0aWMgYm9vbCBsZWZ0RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmll
dywgUEFMOjpUZXh0RGlyZWN0aW9uKTsKKyAgICBzdGF0aWMgYm9vbCByaWdodEV4cGFuc2lvbk9w
cG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7CkBAIC0yMzcsOCAr
MjM3LDggQEAgcHJpdmF0ZToKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCB0bykgY29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29s
PiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKLSAgICBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJu
YWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lv
bkJlaGF2aW9yKTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgs
IFBBTDo6VGV4dERpcmVjdGlvbiwgUEFMOjpFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3RhdGlj
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVy
bmFsKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQQUw6OlRleHREaXJlY3Rpb24sIFBB
TDo6RXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9y
OwogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CkBAIC0yODcsOSArMjg3
LDkgQEAgcHJpdmF0ZToKICAgICBib29sIGFkdmFuY2VkVGV4dFJlbmRlcmluZ01vZGUoKSBjb25z
dAogICAgIHsKICAgICAgICAgYXV0byB0ZXh0UmVuZGVyaW5nTW9kZSA9IG1fZm9udERlc2NyaXB0
aW9uLnRleHRSZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVyaW5nTW9kZSA9
PSBUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uIHx8IHRleHRSZW5kZXJpbmdN
b2RlID09IFRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHkpCisgICAgICAgIGlm
ICh0ZXh0UmVuZGVyaW5nTW9kZSA9PSBQQUw6OlRleHRSZW5kZXJpbmdNb2RlOjpHZW9tZXRyaWNQ
cmVjaXNpb24gfHwgdGV4dFJlbmRlcmluZ01vZGUgPT0gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6
T3B0aW1pemVMZWdpYmlsaXR5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
ICh0ZXh0UmVuZGVyaW5nTW9kZSA9PSBUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVlZCkK
KyAgICAgICAgaWYgKHRleHRSZW5kZXJpbmdNb2RlID09IFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6
Ok9wdGltaXplU3BlZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgUExBVEZPUk0o
Q09DT0EpIHx8IFVTRShGUkVFVFlQRSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMDEsOSAr
MzAxLDkgQEAgcHJpdmF0ZToKICAgICBib29sIGNvbXB1dGVFbmFibGVLZXJuaW5nKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGF1dG8ga2VybmluZyA9IG1fZm9udERlc2NyaXB0aW9uLmtlcm5pbmco
KTsKLSAgICAgICAgaWYgKGtlcm5pbmcgPT0gS2VybmluZzo6Tm9ybWFsKQorICAgICAgICBpZiAo
a2VybmluZyA9PSBQQUw6Oktlcm5pbmc6Ok5vcm1hbCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoa2VybmluZyA9PSBLZXJuaW5nOjpOb1NoaWZ0KQorICAgICAgICBpZiAo
a2VybmluZyA9PSBQQUw6Oktlcm5pbmc6Ok5vU2hpZnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJldHVybiBhZHZhbmNlZFRleHRSZW5kZXJpbmdNb2RlKCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVE
ZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcAppbmRleCA2NzBjZDkyNGI4MGQxYjQ3NTY3ZDYwNGQyMWUzYmY0
M2I3NjYwYjNjLi4yZTAwNWM5ZTI1NzM4MTRlY2IwMzRmYmRkYjFiMWYxNzZkZGRjYzAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcApAQCAtNTMsOSArNTMsOSBAQCBDT01QSUxFX0FTU0VSVChzaXpl
b2YoRm9udENhc2NhZGVEZXNjcmlwdGlvbikgPT0gc2l6ZW9mKFNhbWVTaXplQXNGb250Q2FzY2Fk
ZURlcwogCiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uKCkK
ICAgICA6IG1faXNBYnNvbHV0ZVNpemUoZmFsc2UpCi0gICAgLCBtX2tlcm5pbmcoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEtlcm5pbmc6OkF1dG8pKQorICAgICwgbV9rZXJuaW5nKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQQUw6Oktlcm5pbmc6OkF1dG8pKQogICAgICwgbV9rZXl3b3JkU2l6ZSgwKQot
ICAgICwgbV9mb250U21vb3RoaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250U21vb3RoaW5n
TW9kZTo6QXV0b1Ntb290aGluZykpCisgICAgLCBtX2ZvbnRTbW9vdGhpbmcoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFBBTDo6Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcpKQogICAgICwg
bV9pc1NwZWNpZmllZEZvbnQoZmFsc2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKaW5kZXggMDhi
ZDkwNjY5NDc5YjJkNjJmOTliOWI2Nzg0YTE1ZTFkNTJkYzIzNC4uZGIzMGRlNGU4Njk3NzZmMjFi
ZDgwMWNkNTk4M2Q1MjgzZjlhZTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApAQCAtNzQsNyArNzQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gb25seSB1c2UgZml4ZWQgZGVmYXVsdCBzaXplIHdoZW4gdGhl
cmUgaXMgb25seSBvbmUgZm9udCBmYW1pbHksIGFuZCB0aGF0IGZhbWlseSBpcyAibW9ub3NwYWNl
IgogICAgIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUNv
dW50KCkgPT0gMSAmJiBmaXJzdEZhbWlseSgpID09IG1vbm9zcGFjZUZhbWlseTsgfQogCi0gICAg
S2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8S2VybmluZz4obV9r
ZXJuaW5nKTsgfQorICAgIFBBTDo6S2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8UEFMOjpLZXJuaW5nPihtX2tlcm5pbmcpOyB9CiAgICAgdW5zaWduZWQga2V5d29y
ZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2tleXdvcmRTaXplOyB9CiAgICAgQ1NTVmFsdWVJRCBr
ZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpIGNvbnN0CiAgICAgewpAQCAtODIsNyArODIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09IENTU1ZhbHVlSW52YWxpZCB8fCAo
aWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdl
YmtpdFh4eExhcmdlKSk7CiAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgIH0KLSAgICBG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0KKyAgICBQQUw6OkZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlPihtX2ZvbnRTbW9vdGhpbmcpOyB9CiAgICAgYm9vbCBpc1Nw
ZWNpZmllZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3BlY2lmaWVkRm9udDsgfQogCiAgICAg
dm9pZCBzZXRPbmVGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSB7IEFTU0VSVChtX2Zh
bWlsaWVzLnNpemUoKSA9PSAxKTsgbV9mYW1pbGllc1swXSA9IGZhbWlseTsgfQpAQCAtOTAsNyAr
OTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGYW1pbGllcyhjb25zdCBSZWZDb3VudGVkQXJy
YXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKSB7IG1fZmFtaWxpZXMgPSBmYW1pbGllczsgfQogICAg
IHZvaWQgc2V0U3BlY2lmaWVkU2l6ZShmbG9hdCBzKSB7IG1fc3BlY2lmaWVkU2l6ZSA9IGNsYW1w
VG9GbG9hdChzKTsgfQogICAgIHZvaWQgc2V0SXNBYnNvbHV0ZVNpemUoYm9vbCBzKSB7IG1faXNB
YnNvbHV0ZVNpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRLZXJuaW5nKEtlcm5pbmcga2VybmluZykg
eyBtX2tlcm5pbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2VybmluZyk7IH0KKyAgICB2b2lk
IHNldEtlcm5pbmcoUEFMOjpLZXJuaW5nIGtlcm5pbmcpIHsgbV9rZXJuaW5nID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGtlcm5pbmcpOyB9CiAgICAgdm9pZCBzZXRLZXl3b3JkU2l6ZSh1bnNpZ25l
ZCBzaXplKQogICAgIHsKICAgICAgICAgQVNTRVJUKHNpemUgPD0gOCk7CkBAIC0xMDMsNyArMTAz
LDcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KENTU1ZhbHVlV2Via2l0WHh4TGFy
Z2UgLSBDU1NWYWx1ZVh4U21hbGwgKyAxID09IDgsICJNYXhpbXVtIGtleXdvcmQgc2l6ZSBzaG91
bGQgYmUgOC4iKTsKICAgICAgICAgc2V0S2V5d29yZFNpemUoaWRlbnRpZmllciA/IGlkZW50aWZp
ZXIgLSBDU1NWYWx1ZVh4U21hbGwgKyAxIDogMCk7CiAgICAgfQotICAgIHZvaWQgc2V0Rm9udFNt
b290aGluZyhGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmcpIHsgbV9mb250U21vb3RoaW5nID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNtb290aGluZyk7IH0KKyAgICB2b2lkIHNldEZvbnRTbW9v
dGhpbmcoUEFMOjpGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmcpIHsgbV9mb250U21vb3RoaW5n
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNtb290aGluZyk7IH0KICAgICB2b2lkIHNldElzU3Bl
Y2lmaWVkRm9udChib29sIGlzU3BlY2lmaWVkRm9udCkgeyBtX2lzU3BlY2lmaWVkRm9udCA9IGlz
U3BlY2lmaWVkRm9udDsgfQogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKQEAgLTEyMCwx
OCArMTIwLDE4IEBAIHB1YmxpYzoKIAogICAgIC8vIEluaXRpYWwgdmFsdWVzIGZvciBmb250IHBy
b3BlcnRpZXMuCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBp
bml0aWFsSXRhbGljKCkgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0gICAgc3RhdGljIEZvbnRT
dHlsZUF4aXMgaW5pdGlhbEZvbnRTdHlsZUF4aXMoKSB7IHJldHVybiBGb250U3R5bGVBeGlzOjpz
bG50OyB9CisgICAgc3RhdGljIFBBTDo6Rm9udFN0eWxlQXhpcyBpbml0aWFsRm9udFN0eWxlQXhp
cygpIHsgcmV0dXJuIFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudDsgfQogICAgIHN0YXRpYyBGb250
U2VsZWN0aW9uVmFsdWUgaW5pdGlhbFdlaWdodCgpIHsgcmV0dXJuIG5vcm1hbFdlaWdodFZhbHVl
KCk7IH0KICAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGluaXRpYWxTdHJldGNoKCkgeyBy
ZXR1cm4gbm9ybWFsU3RyZXRjaFZhbHVlKCk7IH0KLSAgICBzdGF0aWMgRm9udFNtYWxsQ2FwcyBp
bml0aWFsU21hbGxDYXBzKCkgeyByZXR1cm4gRm9udFNtYWxsQ2Fwczo6T2ZmOyB9Ci0gICAgc3Rh
dGljIEtlcm5pbmcgaW5pdGlhbEtlcm5pbmcoKSB7IHJldHVybiBLZXJuaW5nOjpBdXRvOyB9Ci0g
ICAgc3RhdGljIEZvbnRTbW9vdGhpbmdNb2RlIGluaXRpYWxGb250U21vb3RoaW5nKCkgeyByZXR1
cm4gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc7IH0KLSAgICBzdGF0aWMgVGV4dFJl
bmRlcmluZ01vZGUgaW5pdGlhbFRleHRSZW5kZXJpbmdNb2RlKCkgeyByZXR1cm4gVGV4dFJlbmRl
cmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nOyB9Ci0gICAgc3RhdGljIEZvbnRTeW50aGVzaXMg
aW5pdGlhbEZvbnRTeW50aGVzaXMoKSB7IHJldHVybiBGb250U3ludGhlc2lzV2VpZ2h0IHwgRm9u
dFN5bnRoZXNpc1N0eWxlIHwgRm9udFN5bnRoZXNpc1NtYWxsQ2FwczsgfQotICAgIHN0YXRpYyBG
b250VmFyaWFudFBvc2l0aW9uIGluaXRpYWxWYXJpYW50UG9zaXRpb24oKSB7IHJldHVybiBGb250
VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw7IH0KLSAgICBzdGF0aWMgRm9udFZhcmlhbnRDYXBzIGlu
aXRpYWxWYXJpYW50Q2FwcygpIHsgcmV0dXJuIEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsOyB9Ci0g
ICAgc3RhdGljIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBpbml0aWFsVmFyaWFudEFsdGVybmF0ZXMo
KSB7IHJldHVybiBGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbDsgfQotICAgIHN0YXRpYyBG
b250T3B0aWNhbFNpemluZyBpbml0aWFsT3B0aWNhbFNpemluZygpIHsgcmV0dXJuIEZvbnRPcHRp
Y2FsU2l6aW5nOjpFbmFibGVkOyB9CisgICAgc3RhdGljIFBBTDo6Rm9udFNtYWxsQ2FwcyBpbml0
aWFsU21hbGxDYXBzKCkgeyByZXR1cm4gUEFMOjpGb250U21hbGxDYXBzOjpPZmY7IH0KKyAgICBz
dGF0aWMgUEFMOjpLZXJuaW5nIGluaXRpYWxLZXJuaW5nKCkgeyByZXR1cm4gUEFMOjpLZXJuaW5n
OjpBdXRvOyB9CisgICAgc3RhdGljIFBBTDo6Rm9udFNtb290aGluZ01vZGUgaW5pdGlhbEZvbnRT
bW9vdGhpbmcoKSB7IHJldHVybiBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5n
OyB9CisgICAgc3RhdGljIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgaW5pdGlhbFRleHRSZW5kZXJp
bmdNb2RlKCkgeyByZXR1cm4gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJp
bmc7IH0KKyAgICBzdGF0aWMgUEFMOjpGb250U3ludGhlc2lzIGluaXRpYWxGb250U3ludGhlc2lz
KCkgeyByZXR1cm4gUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0IHwgUEFMOjpGb250U3ludGhlc2lz
U3R5bGUgfCBQQUw6OkZvbnRTeW50aGVzaXNTbWFsbENhcHM7IH0KKyAgICBzdGF0aWMgUEFMOjpG
b250VmFyaWFudFBvc2l0aW9uIGluaXRpYWxWYXJpYW50UG9zaXRpb24oKSB7IHJldHVybiBQQUw6
OkZvbnRWYXJpYW50UG9zaXRpb246Ok5vcm1hbDsgfQorICAgIHN0YXRpYyBQQUw6OkZvbnRWYXJp
YW50Q2FwcyBpbml0aWFsVmFyaWFudENhcHMoKSB7IHJldHVybiBQQUw6OkZvbnRWYXJpYW50Q2Fw
czo6Tm9ybWFsOyB9CisgICAgc3RhdGljIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVzIGluaXRp
YWxWYXJpYW50QWx0ZXJuYXRlcygpIHsgcmV0dXJuIFBBTDo6Rm9udFZhcmlhbnRBbHRlcm5hdGVz
OjpOb3JtYWw7IH0KKyAgICBzdGF0aWMgUEFMOjpGb250T3B0aWNhbFNpemluZyBpbml0aWFsT3B0
aWNhbFNpemluZygpIHsgcmV0dXJuIFBBTDo6Rm9udE9wdGljYWxTaXppbmc6OkVuYWJsZWQ7IH0K
ICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgaW5pdGlhbFNwZWNpZmllZExvY2FsZSgpIHsg
cmV0dXJuIG51bGxBdG9tKCk7IH0KICAgICBzdGF0aWMgRm9udFBhbGV0dGUgaW5pdGlhbEZvbnRQ
YWxldHRlKCkgeyByZXR1cm4geyBGb250UGFsZXR0ZTo6VHlwZTo6Tm9ybWFsLCBudWxsQXRvbSgp
IH07IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmNwcAppbmRleCBkMzYyZmZlMmRmN2M1ZWUzYmUzMzBhYzY4ZmVjNGRiOTI1
OTZjZWYzLi5lNzcwNDZkNGY2NGM3MmJiN2ExN2VlZTE2MzVhOTMxMGU5MzFkNzRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcApAQCAtMjk0LDEwICsyOTQsMTAgQEAgc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlUm90YXRp
b24oVUNoYXIzMiBjaGFyYWN0ZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgR2x5
cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKFVD
aGFyMzIgY2hhcmFjdGVyLCBOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBjb25z
dCBHbHlwaERhdGEmIGRhdGEpCitzdGF0aWMgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0No
YXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKFVDaGFyMzIgY2hhcmFjdGVyLCBQQUw6Ok5vbkNK
S0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKIHsK
ICAgICBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLnN5
bnRoZXRpY09ibGlxdWUoKTsKLSAgICBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmll
bnRhdGlvbjo6VXByaWdodCB8fCBzaG91bGRJZ25vcmVSb3RhdGlvbihjaGFyYWN0ZXIpKSB7Cisg
ICAgaWYgKG9yaWVudGF0aW9uID09IFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6VXByaWdo
dCB8fCBzaG91bGRJZ25vcmVSb3RhdGlvbihjaGFyYWN0ZXIpKSB7CiAgICAgICAgIEdseXBoRGF0
YSB1cHJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB0aGUgZ2x5cGhzIGFy
ZSB0aGUgc2FtZSwgdGhlbiB3ZSBrbm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgaG9yaXpvbnRhbCBn
bHlwaCByb3RhdGVkIHZlcnRpY2FsbHkKICAgICAgICAgLy8gdG8gYmUgdXByaWdodC4gRm9yIHN5
bnRoZXRpYyBvYmxpcXVlLCBob3dldmVyLCB3ZSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIHVwcmln
aHREYXRhIHRvIGVuc3VyZQpAQCAtMzEwLDcgKzMxMCw3IEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFy
YWN0CiAgICAgICAgIC8vIGdseXBoLCBzbyB3ZSBmYWxsIGJhY2sgdG8gdGhlIHVwcmlnaHQgZGF0
YSBhbmQgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoLgogICAgICAgICBpZiAodXByaWdodERhdGEu
Zm9udCkKICAgICAgICAgICAgIHJldHVybiB1cHJpZ2h0RGF0YTsKLSAgICB9IGVsc2UgaWYgKG9y
aWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7CisgICAgfSBlbHNl
IGlmIChvcmllbnRhdGlvbiA9PSBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7
CiAgICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IGRhdGEuZm9udC0+dmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIp
OwogCiAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgYmFrZWQtaW4gcm90YXRlZCBnbHlwaCwgd2Ug
d2lsbCB1c2UgaXQgdW5sZXNzIHN5bnRoZXRpY09ibGlxdWUgaXMgc2V0LiBJZgpAQCAtMzU4LDcg
KzM1OCw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1G
YWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QKICAgICBpZiAoc3lzdGVtRmFsbGJhY2tT
aG91bGRCZUludmlzaWJsZSkKICAgICAgICAgc3lzdGVtRmFsbGJhY2tGb250ID0gY29uc3RfY2Fz
dDxGb250Kj4oJnN5c3RlbUZhbGxiYWNrRm9udC0+aW52aXNpYmxlRm9udCgpKTsKIAotICAgIGlm
IChzeXN0ZW1GYWxsYmFja0ZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhc3lzdGVtRmFsbGJhY2tGb250LT5oYXNWZXJ0aWNh
bEdseXBocygpICYmIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGNoYXJhY3Rl
cikpCisgICAgaWYgKHN5c3RlbUZhbGxiYWNrRm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgIXN5c3RlbUZhbGxiYWNr
Rm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhP
clN5bWJvbChjaGFyYWN0ZXIpKQogICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFy
aWFudDsKIAogICAgIEdseXBoRGF0YSBmYWxsYmFja0dseXBoRGF0YTsKQEAgLTM2Nyw3ICszNjcs
NyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJh
Y2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0CiAgICAgZWxzZQogICAgICAgICBmYWxsYmFja0ds
eXBoRGF0YSA9IHN5c3RlbUZhbGxiYWNrRm9udC0+dmFyaWFudEZvbnQoZGVzY3JpcHRpb24sIHZh
cmlhbnQpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIAotICAgIGlmIChmYWxs
YmFja0dseXBoRGF0YS5mb250ICYmIGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPnBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhZmFsbGJh
Y2tHbHlwaERhdGEuZm9udC0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7CisgICAgaWYg
KGZhbGxiYWNrR2x5cGhEYXRhLmZvbnQgJiYgZmFsbGJhY2tHbHlwaERhdGEuZm9udC0+cGxhdGZv
cm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwg
JiYgIWZhbGxiYWNrR2x5cGhEYXRhLmZvbnQtPmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkg
ewogICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50ICYmICFGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpKQogICAgICAgICAgICAgZmFsbGJhY2tH
bHlwaERhdGEgPSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlv
bihjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZmFsbGJh
Y2tHbHlwaERhdGEpOwogICAgIH0KQEAgLTQyNyw3ICs0MjcsNyBAQCBHbHlwaERhdGEgRm9udENh
c2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3Qg
Rm9udENhcwogICAgICAgICAgICAgZGF0YS5mb250ID0gJmRhdGEuZm9udC0+aW52aXNpYmxlRm9u
dCgpOwogCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSAgICAgICAg
ICAgIGlmIChkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhZGF0YS5mb250LT5pc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrKCkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLmZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVu
dGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsICYmICFkYXRhLmZvbnQt
PmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewogICAgICAgICAgICAgICAgIGlmICghRm9u
dENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVu
dGF0aW9uKGNoYXJhY3RlciwgZGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBk
YXRhKTsKIApAQCAtNDgyLDcgKzQ4Miw3IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlw
aFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmICghZm9udCB8fCBmb250LT5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCisg
ICAgaWYgKCFmb250IHx8IGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFM
OjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGlmIChkZXNpcmVkVmlzaWJpbGl0eSA9PSBGYWxsYmFja1Zpc2liaWxpdHk6OkludmlzaWJs
ZSAmJiBmb250LT52aXNpYmlsaXR5KCkgPT0gRm9udDo6VmlzaWJpbGl0eTo6VmlzaWJsZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24u
Y3BwCmluZGV4IDdiNDdiZmQxNTM4Y2Y5ZTM2OTkzNDY1NTQ3OTExMGJkOGNmMDA4MzkuLjRkMDRh
ZDFkMzI0Y2JlM2E1MmFkMDY4YmMyMjljZjU1OWQxOWY4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcApAQCAtMzksMzEg
KzM5LDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEZvbnREZXNjcmlwdGlvbjo6Rm9udERlc2Ny
aXB0aW9uKCkKICAgICA6IG1fZm9udFBhbGV0dGUoeyBGb250UGFsZXR0ZTo6VHlwZTo6Tm9ybWFs
LCBudWxsQXRvbSgpIH0pCiAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0IHsgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6aW5pdGlhbFdlaWdodCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpp
bml0aWFsU3RyZXRjaCgpLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsSXRhbGljKCkg
fQotICAgICwgbV9vcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udE9yaWVudGF0
aW9uOjpIb3Jpem9udGFsKSkKLSAgICAsIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpKQotICAgICwgbV93
aWR0aFZhcmlhbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3Vs
YXJXaWR0aCkpCi0gICAgLCBtX3JlbmRlcmluZ01vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZv
bnRSZW5kZXJpbmdNb2RlOjpOb3JtYWwpKQotICAgICwgbV90ZXh0UmVuZGVyaW5nKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcpKQorICAg
ICwgbV9vcmllbnRhdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250T3JpZW50YXRp
b246Okhvcml6b250YWwpKQorICAgICwgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSkKKyAgICAs
IG1fd2lkdGhWYXJpYW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRXaWR0aFZhcmlh
bnQ6OlJlZ3VsYXJXaWR0aCkpCisgICAgLCBtX3JlbmRlcmluZ01vZGUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFBBTDo6Rm9udFJlbmRlcmluZ01vZGU6Ok5vcm1hbCkpCisgICAgLCBtX3RleHRSZW5k
ZXJpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6VGV4dFJlbmRlcmluZ01vZGU6OkF1dG9U
ZXh0UmVuZGVyaW5nKSkKICAgICAsIG1fc2NyaXB0KFVTQ1JJUFRfQ09NTU9OKQotICAgICwgbV9m
b250U3ludGhlc2lzKEZvbnRTeW50aGVzaXNXZWlnaHQgfCBGb250U3ludGhlc2lzU3R5bGUgfCBG
b250U3ludGhlc2lzU21hbGxDYXBzKQotICAgICwgbV92YXJpYW50Q29tbW9uTGlnYXR1cmVzKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKSkKLSAgICAs
IG1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50SGlzdG9yaWNhbExp
Z2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1h
bCkpCi0gICAgLCBtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCi0gICAgLCBtX3ZhcmlhbnRQb3Np
dGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsKSkK
LSAgICAsIG1fdmFyaWFudENhcHMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50Q2Fw
czo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudE51bWVyaWNGaWd1cmUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFu
dE51bWVyaWNTcGFjaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVtZXJpY0ZyYWN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsKSkKLSAgICAs
IG1fdmFyaWFudE51bWVyaWNPcmRpbmFsKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFu
dE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpKQotICAgICwgbV92YXJpYW50TnVtZXJpY1NsYXNoZWRa
ZXJvKHN0YXRpY19jYXN0PHVuc2lnbmVkPihGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6
Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEFsdGVybmF0ZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lh
blZhcmlhbnQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6Tm9ybWFsKSkKLSAgICAsIG1fdmFyaWFudEVhc3RBc2lhbldpZHRoKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpKQotICAgICwgbV92YXJp
YW50RWFzdEFzaWFuUnVieShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpOb3JtYWwpKQotICAgICwgbV9vcHRpY2FsU2l6aW5nKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihGb250T3B0aWNhbFNpemluZzo6RW5hYmxlZCkpCi0gICAgLCBtX2ZvbnRTdHlsZUF4aXMo
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5
bGVBeGlzOjppdGFsKQotICAgICwgbV9zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKSkKKyAgICAsIG1f
Zm9udFN5bnRoZXNpcyhQQUw6OkZvbnRTeW50aGVzaXNXZWlnaHQgfCBQQUw6OkZvbnRTeW50aGVz
aXNTdHlsZSB8IFBBTDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2FwcykKKyAgICAsIG1fdmFyaWFudENv
bW1vbkxpZ2F0dXJlcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudExpZ2F0
dXJlczo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkpCisg
ICAgLCBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
QUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50Q29udGV4
dHVhbEFsdGVybmF0ZXMoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnRMaWdh
dHVyZXM6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRQb3NpdGlvbihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUEFMOjpGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50
Q2FwcyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudENhcHM6Ok5vcm1hbCkp
CisgICAgLCBtX3ZhcmlhbnROdW1lcmljRmlndXJlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6
OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudE51bWVy
aWNTcGFjaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbCkpCisg
ICAgLCBtX3ZhcmlhbnROdW1lcmljT3JkaW5hbChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvOjpOb3JtYWwpKQorICAgICwgbV92YXJpYW50QWx0ZXJuYXRlcyhzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUEFMOjpGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbCkpCisgICAg
LCBtX3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsKSkKKyAgICAsIG1fdmFyaWFudEVhc3RB
c2lhbldpZHRoKHN0YXRpY19jYXN0PHVuc2lnbmVkPihQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFu
V2lkdGg6Ok5vcm1hbCkpCisgICAgLCBtX3ZhcmlhbnRFYXN0QXNpYW5SdWJ5KHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsKSkKKyAgICAs
IG1fb3B0aWNhbFNpemluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUEFMOjpGb250T3B0aWNhbFNp
emluZzo6RW5hYmxlZCkpCisgICAgLCBtX2ZvbnRTdHlsZUF4aXMoRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6aW5pdGlhbEZvbnRTdHlsZUF4aXMoKSA9PSBQQUw6OkZvbnRTdHlsZUF4aXM6Oml0YWwp
CisgICAgLCBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykpCiAgICAgLCBtX3Nob3VsZERp
c2FibGVMaWdhdHVyZXNGb3JTcGFjaW5nKGZhbHNlKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAppbmRleCA2ODE5YTIxYTVl
YTBlM2MyYmRiNjAzOGRhNjI3MTIzNDM2MmEwMjQ1Li42OTJiNGJiNzY5ZWM0ZmM4ZWYyMDQ5Y2Ri
ZDE5ZGEyYjI5ODA1MjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RGVzY3JpcHRpb24uaApAQCAtMjUsMTEgKzI1LDExIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZvbnRQYWxldHRlLmgiCi0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUu
aCIKICNpbmNsdWRlICJGb250U2VsZWN0aW9uQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAiRm9udFRh
Z2dlZFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCisjaW5j
bHVkZSA8cGFsL3RleHQvRm9udFJlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDx1bmljb2RlL3Vz
Y3JpcHQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC01MCwzNCArNTAsMzQg
QEAgcHVibGljOgogICAgIEZvbnRTZWxlY3Rpb25WYWx1ZSBzdHJldGNoKCkgY29uc3QgeyByZXR1
cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdC53aWR0aDsgfQogICAgIEZvbnRTZWxlY3Rpb25WYWx1
ZSB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndlaWdodDsg
fQogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IGZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250U2VsZWN0aW9uUmVxdWVzdDsgfQotICAgIEZvbnRSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5n
TW9kZT4obV9yZW5kZXJpbmdNb2RlKTsgfQotICAgIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5k
ZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJlbmRlcmluZ01vZGU+
KG1fdGV4dFJlbmRlcmluZyk7IH0KKyAgICBQQUw6OkZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRSZW5kZXJpbmdNb2Rl
PihtX3JlbmRlcmluZ01vZGUpOyB9CisgICAgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dFJlbmRlcmlu
Z01vZGU+KG1fdGV4dFJlbmRlcmluZyk7IH0KICAgICBVU2NyaXB0Q29kZSBzY3JpcHQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4obV9zY3JpcHQpOyB9CiAgICAgY29u
c3QgQXRvbVN0cmluZyYgY29tcHV0ZWRMb2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsZTsg
fSAvLyBUaGlzIGlzIHdoYXQgeW91IHNob3VsZCBiZSB1c2luZyBmb3IgdGhpbmdzIGxpa2UgdGV4
dCBzaGFwaW5nIGFuZCBmb250IGZhbGxiYWNrCiAgICAgY29uc3QgQXRvbVN0cmluZyYgc3BlY2lm
aWVkTG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpZWRMb2NhbGU7IH0gLy8gVGhpcyBp
cyB3aGF0IHlvdSBzaG91bGQgYmUgdXNpbmcgZm9yIHdlYi1leHBvc2VkIHRoaW5ncyBsaWtlIC13
ZWJraXQtbG9jYWxlCiAKLSAgICBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxGb250T3JpZW50YXRpb24+KG1fb3JpZW50YXRpb24pOyB9Ci0g
ICAgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBub25DSktHbHlwaE9yaWVudGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4obV9ub25DSktHbHlw
aE9yaWVudGF0aW9uKTsgfQotICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFdpZHRoVmFyaWFudD4obV93aWR0aFZhcmlhbnQp
OyB9CisgICAgUEFMOjpGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxQQUw6OkZvbnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0KKyAg
ICBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4obV9u
b25DSktHbHlwaE9yaWVudGF0aW9uKTsgfQorICAgIFBBTDo6Rm9udFdpZHRoVmFyaWFudCB3aWR0
aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRXaWR0aFZhcmlh
bnQ+KG1fd2lkdGhWYXJpYW50KTsgfQogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZl
YXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzOyB9CiAgICAg
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5ncygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWF0aW9uU2V0dGluZ3M7IH0KLSAgICBGb250U3ludGhlc2lzIGZvbnRTeW50
aGVzaXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U3ludGhlc2lzPihtX2ZvbnRT
eW50aGVzaXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudENvbW1vbkxpZ2F0
dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1cmVzPiht
X3ZhcmlhbnRDb21tb25MaWdhdHVyZXMpOyB9Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgdmFy
aWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
b250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyk7IH0K
LSAgICBGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJpYW50TGlnYXR1cmVzPihtX3ZhcmlhbnRI
aXN0b3JpY2FsTGlnYXR1cmVzKTsgfQotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnRD
b250ZXh0dWFsQWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRWYXJp
YW50TGlnYXR1cmVzPihtX3ZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyk7IH0KLSAgICBGb250
VmFyaWFudFBvc2l0aW9uIHZhcmlhbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZvbnRWYXJpYW50UG9zaXRpb24+KG1fdmFyaWFudFBvc2l0aW9uKTsgfQotICAgIEZvbnRW
YXJpYW50Q2FwcyB2YXJpYW50Q2FwcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRW
YXJpYW50Q2Fwcz4obV92YXJpYW50Q2Fwcyk7IH0KLSAgICBGb250VmFyaWFudE51bWVyaWNGaWd1
cmUgdmFyaWFudE51bWVyaWNGaWd1cmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250
VmFyaWFudE51bWVyaWNGaWd1cmU+KG1fdmFyaWFudE51bWVyaWNGaWd1cmUpOyB9Ci0gICAgRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPihtX3ZhcmlhbnROdW1l
cmljU3BhY2luZyk7IH0KLSAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiB2YXJpYW50TnVt
ZXJpY0ZyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFZhcmlhbnROdW1l
cmljRnJhY3Rpb24+KG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbik7IH0KLSAgICBGb250VmFyaWFu
dE51bWVyaWNPcmRpbmFsIHZhcmlhbnROdW1lcmljT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+KG1fdmFyaWFudE51bWVyaWNPcmRp
bmFsKTsgfQotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnROdW1lcmlj
U2xhc2hlZFplcm8oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudE51bWVy
aWNTbGFzaGVkWmVybz4obV92YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKTsgfQotICAgIEZvbnRW
YXJpYW50QWx0ZXJuYXRlcyB2YXJpYW50QWx0ZXJuYXRlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEZvbnRWYXJpYW50QWx0ZXJuYXRlcz4obV92YXJpYW50QWx0ZXJuYXRlcyk7IH0KLSAg
ICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ+KG1f
dmFyaWFudEVhc3RBc2lhblZhcmlhbnQpOyB9Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0
aCB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250
VmFyaWFudEVhc3RBc2lhbldpZHRoPihtX3ZhcmlhbnRFYXN0QXNpYW5XaWR0aCk7IH0KLSAgICBG
b250VmFyaWFudEVhc3RBc2lhblJ1YnkgdmFyaWFudEVhc3RBc2lhblJ1YnkoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk+KG1fdmFyaWFudEVhc3RB
c2lhblJ1YnkpOyB9Ci0gICAgRm9udFZhcmlhbnRTZXR0aW5ncyB2YXJpYW50U2V0dGluZ3MoKSBj
b25zdAorICAgIFBBTDo6Rm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250U3ludGhlc2lzPihtX2ZvbnRTeW50aGVzaXMpOyB9Cisg
ICAgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50Q29tbW9uTGlnYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJp
YW50Q29tbW9uTGlnYXR1cmVzKTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgdmFy
aWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
QUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzPihtX3ZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXMgdmFyaWFudEhpc3RvcmljYWxMaWdh
dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TGlnYXR1
cmVzPihtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKTsgfQorICAgIFBBTDo6Rm9udFZhcmlh
bnRMaWdhdHVyZXMgdmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudExpZ2F0dXJlcz4obV92YXJpYW50Q29udGV4dHVh
bEFsdGVybmF0ZXMpOyB9CisgICAgUEFMOjpGb250VmFyaWFudFBvc2l0aW9uIHZhcmlhbnRQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9udFZhcmlhbnRQb3NpdGlv
bj4obV92YXJpYW50UG9zaXRpb24pOyB9CisgICAgUEFMOjpGb250VmFyaWFudENhcHMgdmFyaWFu
dENhcHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50Q2Fwcz4o
bV92YXJpYW50Q2Fwcyk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSB2YXJp
YW50TnVtZXJpY0ZpZ3VyZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljRmlndXJlPihtX3ZhcmlhbnROdW1lcmljRmlndXJlKTsgfQorICAgIFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZyB2YXJpYW50TnVtZXJpY1NwYWNpbmcoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+KG1fdmFy
aWFudE51bWVyaWNTcGFjaW5nKTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rp
b24gdmFyaWFudE51bWVyaWNGcmFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBB
TDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24+KG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbik7
IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgdmFyaWFudE51bWVyaWNPcmRp
bmFsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudE51bWVyaWNP
cmRpbmFsPihtX3ZhcmlhbnROdW1lcmljT3JkaW5hbCk7IH0KKyAgICBQQUw6OkZvbnRWYXJpYW50
TnVtZXJpY1NsYXNoZWRaZXJvIHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvPihtX3Zh
cmlhbnROdW1lcmljU2xhc2hlZFplcm8pOyB9CisgICAgUEFMOjpGb250VmFyaWFudEFsdGVybmF0
ZXMgdmFyaWFudEFsdGVybmF0ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkZv
bnRWYXJpYW50QWx0ZXJuYXRlcz4obV92YXJpYW50QWx0ZXJuYXRlcyk7IH0KKyAgICBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50RWFzdEFzaWFuVmFyaWFudCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50Piht
X3ZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aCB2YXJpYW50RWFzdEFzaWFuV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+KG1fdmFyaWFudEVhc3RBc2lhbldpZHRo
KTsgfQorICAgIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnRFYXN0QXNpYW5S
dWJ5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpGb250VmFyaWFudEVhc3RBc2lh
blJ1Ynk+KG1fdmFyaWFudEVhc3RBc2lhblJ1YnkpOyB9CisgICAgUEFMOjpGb250VmFyaWFudFNl
dHRpbmdzIHZhcmlhbnRTZXR0aW5ncygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4geyB2
YXJpYW50Q29tbW9uTGlnYXR1cmVzKCksCiAgICAgICAgICAgICB2YXJpYW50RGlzY3JldGlvbmFy
eUxpZ2F0dXJlcygpLApAQCAtOTUsOSArOTUsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2YXJp
YW50RWFzdEFzaWFuV2lkdGgoKSwKICAgICAgICAgICAgIHZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkg
fTsKICAgICB9Ci0gICAgRm9udE9wdGljYWxTaXppbmcgb3B0aWNhbFNpemluZygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZvbnRPcHRpY2FsU2l6aW5nPihtX29wdGljYWxTaXppbmcpOyB9
Ci0gICAgRm9udFN0eWxlQXhpcyBmb250U3R5bGVBeGlzKCkgY29uc3QgeyByZXR1cm4gbV9mb250
U3R5bGVBeGlzID8gRm9udFN0eWxlQXhpczo6aXRhbCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQ7IH0K
LSAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250
cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFsbG93VXNlckluc3RhbGxlZEZvbnRzPiht
X3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsgfQorICAgIFBBTDo6Rm9udE9wdGljYWxT
aXppbmcgb3B0aWNhbFNpemluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6Rm9u
dE9wdGljYWxTaXppbmc+KG1fb3B0aWNhbFNpemluZyk7IH0KKyAgICBQQUw6OkZvbnRTdHlsZUF4
aXMgZm9udFN0eWxlQXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0eWxlQXhpcyA/IFBBTDo6
Rm9udFN0eWxlQXhpczo6aXRhbCA6IFBBTDo6Rm9udFN0eWxlQXhpczo6c2xudDsgfQorICAgIFBB
TDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRz
PihtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsgfQogICAgIGJvb2wgc2hvdWxkRGlz
YWJsZUxpZ2F0dXJlc0ZvclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERpc2FibGVM
aWdhdHVyZXNGb3JTcGFjaW5nOyB9CiAgICAgRm9udFBhbGV0dGUgZm9udFBhbGV0dGUoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRQYWxldHRlOyB9CiAKQEAgLTEwNiwzMyArMTA2LDMzIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFN0cmV0Y2goRm9udFNlbGVjdGlvblZhbHVlIHN0cmV0Y2gpIHsgbV9m
b250U2VsZWN0aW9uUmVxdWVzdC53aWR0aCA9IHN0cmV0Y2g7IH0KICAgICB2b2lkIHNldElzSXRh
bGljKGJvb2wgaXNJdGFsaWMpIHsgc2V0SXRhbGljKGlzSXRhbGljID8gc3RkOjpvcHRpb25hbDxG
b250U2VsZWN0aW9uVmFsdWU+IHsgaXRhbGljVmFsdWUoKSB9IDogc3RkOjpvcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+IHsgfSk7IH0KICAgICB2b2lkIHNldFdlaWdodChGb250U2VsZWN0aW9u
VmFsdWUgd2VpZ2h0KSB7IG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2VpZ2h0ID0gd2VpZ2h0OyB9
Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpIHsgbV9y
ZW5kZXJpbmdNb2RlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1vZGUpOyB9Ci0gICAgdm9pZCBz
ZXRUZXh0UmVuZGVyaW5nTW9kZShUZXh0UmVuZGVyaW5nTW9kZSByZW5kZXJpbmcpIHsgbV90ZXh0
UmVuZGVyaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlbmRlcmluZyk7IH0KLSAgICB2b2lk
IHNldE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0
aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9yaWVudGF0aW9uKTsgfQotICAgIHZvaWQgc2V0
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcmll
bnRhdGlvbik7IH0KLSAgICB2b2lkIHNldFdpZHRoVmFyaWFudChGb250V2lkdGhWYXJpYW50IHdp
ZHRoVmFyaWFudCkgeyBtX3dpZHRoVmFyaWFudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih3aWR0
aFZhcmlhbnQpOyB9IC8vIE1ha2Ugc3VyZSBuZXcgY2FsbGVycyBvZiB0aGlzIHN5bmMgd2l0aCBG
b250UGxhdGZvcm1EYXRhOjppc0ZvclRleHRDb21iaW5lKCkhCisgICAgdm9pZCBzZXRSZW5kZXJp
bmdNb2RlKFBBTDo6Rm9udFJlbmRlcmluZ01vZGUgbW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obW9kZSk7IH0KKyAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdN
b2RlKFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7IG1fdGV4dFJlbmRlcmluZyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZW5kZXJpbmcpOyB9CisgICAgdm9pZCBzZXRPcmllbnRh
dGlvbihQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9yaWVudGF0aW9uKTsgfQorICAgIHZvaWQgc2V0Tm9uQ0pL
R2x5cGhPcmllbnRhdGlvbihQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24p
IHsgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9yaWVu
dGF0aW9uKTsgfQorICAgIHZvaWQgc2V0V2lkdGhWYXJpYW50KFBBTDo6Rm9udFdpZHRoVmFyaWFu
dCB3aWR0aFZhcmlhbnQpIHsgbV93aWR0aFZhcmlhbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
d2lkdGhWYXJpYW50KTsgfSAvLyBNYWtlIHN1cmUgbmV3IGNhbGxlcnMgb2YgdGhpcyBzeW5jIHdp
dGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JUZXh0Q29tYmluZSgpIQogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U3BlY2lmaWVkTG9jYWxlKGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICB2b2lk
IHNldEZlYXR1cmVTZXR0aW5ncyhGb250RmVhdHVyZVNldHRpbmdzJiYgc2V0dGluZ3MpIHsgbV9m
ZWF0dXJlU2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsgfQogICAgIHZvaWQgc2V0VmFyaWF0
aW9uU2V0dGluZ3MoRm9udFZhcmlhdGlvblNldHRpbmdzJiYgc2V0dGluZ3MpIHsgbV92YXJpYXRp
b25TZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOyB9Ci0gICAgdm9pZCBzZXRGb250U3ludGhl
c2lzKEZvbnRTeW50aGVzaXMgZm9udFN5bnRoZXNpcykgeyBtX2ZvbnRTeW50aGVzaXMgPSBmb250
U3ludGhlc2lzOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVzKEZvbnRWYXJp
YW50TGlnYXR1cmVzIHZhcmlhbnQpIHsgbV92YXJpYW50Q29tbW9uTGlnYXR1cmVzID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9Ci0gICAgdm9pZCBzZXRWYXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudERp
c2NyZXRpb25hcnlMaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0K
LSAgICB2b2lkIHNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1
cmVzIHZhcmlhbnQpIHsgbV92YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YXJpYW50KTsgfQotICAgIHZvaWQgc2V0VmFyaWFudENvbnRleHR1YWxBbHRl
cm5hdGVzKEZvbnRWYXJpYW50TGlnYXR1cmVzIHZhcmlhbnQpIHsgbV92YXJpYW50Q29udGV4dHVh
bEFsdGVybmF0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lk
IHNldFZhcmlhbnRQb3NpdGlvbihGb250VmFyaWFudFBvc2l0aW9uIHZhcmlhbnQpIHsgbV92YXJp
YW50UG9zaXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lk
IHNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2FwcyB2YXJpYW50KSB7IG1fdmFyaWFudENhcHMg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lkIHNldFZhcmlhbnRO
dW1lcmljRmlndXJlKEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSB2YXJpYW50KSB7IG1fdmFyaWFu
dE51bWVyaWNGaWd1cmUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2
b2lkIHNldFZhcmlhbnROdW1lcmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHZh
cmlhbnQpIHsgbV92YXJpYW50TnVtZXJpY1NwYWNpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dmFyaWFudCk7IH0KLSAgICB2b2lkIHNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb24gdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRnJhY3Rpb24gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lkIHNldFZhcmlhbnROdW1l
cmljT3JkaW5hbChGb250VmFyaWFudE51bWVyaWNPcmRpbmFsIHZhcmlhbnQpIHsgbV92YXJpYW50
TnVtZXJpY09yZGluYWwgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2
b2lkIHNldFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oRm9udFZhcmlhbnROdW1lcmljU2xhc2hl
ZFplcm8gdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lkIHNldFZhcmlhbnRBbHRlcm5hdGVzKEZv
bnRWYXJpYW50QWx0ZXJuYXRlcyB2YXJpYW50KSB7IG1fdmFyaWFudEFsdGVybmF0ZXMgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lkIHNldFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50KEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudCB2YXJpYW50KSB7IG1fdmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAg
ICB2b2lkIHNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aChGb250VmFyaWFudEVhc3RBc2lhbldpZHRo
IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuV2lkdGggPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odmFyaWFudCk7IH0KLSAgICB2b2lkIHNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KEZvbnRWYXJp
YW50RWFzdEFzaWFuUnVieSB2YXJpYW50KSB7IG1fdmFyaWFudEVhc3RBc2lhblJ1YnkgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KLSAgICB2b2lkIHNldE9wdGljYWxTaXppbmco
Rm9udE9wdGljYWxTaXppbmcgc2l6aW5nKSB7IG1fb3B0aWNhbFNpemluZyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzaXppbmcpOyB9Ci0gICAgdm9pZCBzZXRGb250U3R5bGVBeGlzKEZvbnRTdHls
ZUF4aXMgYXhpcykgeyBtX2ZvbnRTdHlsZUF4aXMgPSBheGlzID09IEZvbnRTdHlsZUF4aXM6Oml0
YWw7IH0KLSAgICB2b2lkIHNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzIHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKSB7IG1fc2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpOyB9CisgICAgdm9pZCBzZXRGb250U3ludGhlc2lzKFBBTDo6
Rm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50
aGVzaXM7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMoUEFMOjpGb250VmFy
aWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFyaWFudENvbW1vbkxpZ2F0dXJlcyA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudERpc2NyZXRp
b25hcnlMaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1fdmFy
aWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFu
dCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKFBBTDo6Rm9udFZh
cmlhbnRMaWdhdHVyZXMgdmFyaWFudCkgeyBtX3ZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlcyB2YXJpYW50KSB7IG1f
dmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlh
bnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50UG9zaXRpb24oUEFMOjpGb250VmFyaWFudFBvc2l0
aW9uIHZhcmlhbnQpIHsgbV92YXJpYW50UG9zaXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dmFyaWFudCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRDYXBzKFBBTDo6Rm9udFZhcmlhbnRDYXBz
IHZhcmlhbnQpIHsgbV92YXJpYW50Q2FwcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50
KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoUEFMOjpGb250VmFyaWFudE51
bWVyaWNGaWd1cmUgdmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljRmlndXJlID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJpYW50TnVtZXJpY1NwYWNp
bmcoUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIHZhcmlhbnQpIHsgbV92YXJpYW50TnVt
ZXJpY1NwYWNpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lk
IHNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oUEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlv
biB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNGcmFjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKFBBTDo6
Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbCB2YXJpYW50KSB7IG1fdmFyaWFudE51bWVyaWNPcmRp
bmFsID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9CisgICAgdm9pZCBzZXRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8g
dmFyaWFudCkgeyBtX3ZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRBbHRlcm5hdGVzKFBBTDo6Rm9u
dFZhcmlhbnRBbHRlcm5hdGVzIHZhcmlhbnQpIHsgbV92YXJpYW50QWx0ZXJuYXRlcyA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudCkgeyBtX3Zh
cmlhbnRFYXN0QXNpYW5WYXJpYW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhcmlhbnQpOyB9
CisgICAgdm9pZCBzZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgoUEFMOjpGb250VmFyaWFudEVhc3RB
c2lhbldpZHRoIHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFzaWFuV2lkdGggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odmFyaWFudCk7IH0KKyAgICB2b2lkIHNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5
KFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHZhcmlhbnQpIHsgbV92YXJpYW50RWFzdEFz
aWFuUnVieSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYW50KTsgfQorICAgIHZvaWQgc2V0
T3B0aWNhbFNpemluZyhQQUw6OkZvbnRPcHRpY2FsU2l6aW5nIHNpemluZykgeyBtX29wdGljYWxT
aXppbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6aW5nKTsgfQorICAgIHZvaWQgc2V0Rm9u
dFN0eWxlQXhpcyhQQUw6OkZvbnRTdHlsZUF4aXMgYXhpcykgeyBtX2ZvbnRTdHlsZUF4aXMgPSBh
eGlzID09IFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbDsgfQorICAgIHZvaWQgc2V0U2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMoUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBzaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cykgeyBtX3Nob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsg
fQogICAgIHZvaWQgc2V0U2hvdWxkRGlzYWJsZUxpZ2F0dXJlc0ZvclNwYWNpbmcoYm9vbCBzaG91
bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZykgeyBtX3Nob3VsZERpc2FibGVMaWdhdHVyZXNG
b3JTcGFjaW5nID0gc2hvdWxkRGlzYWJsZUxpZ2F0dXJlc0ZvclNwYWNpbmc7IH0KICAgICB2b2lk
IHNldEZvbnRQYWxldHRlKEZvbnRQYWxldHRlIGZvbnRQYWxldHRlKSB7IG1fZm9udFBhbGV0dGUg
PSBmb250UGFsZXR0ZTsgfQogCkBAIC0xNTUsNyArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBGb250
U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIGZsb2F0IG1fY29t
cHV0ZWRTaXplIHsgMCB9OyAvLyBDb21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0aGUgbWluaW11
bSBmb250IHNpemUgYW5kIHRoZSB6b29tIGZhY3Rvci4KICAgICB1bnNpZ25lZCBtX29yaWVudGF0
aW9uIDogMTsgLy8gRm9udE9yaWVudGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJp
bmcgb24gYSBob3Jpem9udGFsIGxpbmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgotICAgIHVuc2lnbmVk
IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24g
LSBPbmx5IHVzZWQgYnkgdmVydGljYWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmll
bnRhdGlvbiBmb3Igbm9uLWlkZW9ncmFwaCBnbHlwaHMuCisgICAgdW5zaWduZWQgbV9ub25DSktH
bHlwaE9yaWVudGF0aW9uIDogMTsgLy8gUEFMOjpOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25s
eSB1c2VkIGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRp
b24gZm9yIG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgogICAgIHVuc2lnbmVkIG1fd2lkdGhWYXJpYW50
IDogMjsgLy8gRm9udFdpZHRoVmFyaWFudAogICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6
IDE7IC8vIFVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3Mu
CiAgICAgdW5zaWduZWQgbV90ZXh0UmVuZGVyaW5nIDogMjsgLy8gVGV4dFJlbmRlcmluZ01vZGUK
QEAgLTI5NCwxMjIgKzI5NCwxMjIgQEAgc3RkOjpvcHRpb25hbDxGb250RGVzY3JpcHRpb24+IEZv
bnREZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb21wdXRl
ZFNpemUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFs
PEZvbnRPcmllbnRhdGlvbj4gb3JpZW50YXRpb247CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZv
bnRPcmllbnRhdGlvbj4gb3JpZW50YXRpb247CiAgICAgZGVjb2RlciA+PiBvcmllbnRhdGlvbjsK
ICAgICBpZiAoIW9yaWVudGF0aW9uKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgc3RkOjpvcHRpb25hbDxOb25DSktHbHlwaE9yaWVudGF0aW9uPiBub25DSktHbHlwaE9yaWVu
dGF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpOb25DSktHbHlwaE9yaWVudGF0aW9uPiBu
b25DSktHbHlwaE9yaWVudGF0aW9uOwogICAgIGRlY29kZXIgPj4gbm9uQ0pLR2x5cGhPcmllbnRh
dGlvbjsKICAgICBpZiAoIW5vbkNKS0dseXBoT3JpZW50YXRpb24pCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRo
VmFyaWFudDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFdpZHRoVmFyaWFudD4gd2lkdGhW
YXJpYW50OwogICAgIGRlY29kZXIgPj4gd2lkdGhWYXJpYW50OwogICAgIGlmICghd2lkdGhWYXJp
YW50KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxG
b250UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6
Rm9udFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGU7CiAgICAgZGVjb2RlciA+PiByZW5kZXJp
bmdNb2RlOwogICAgIGlmICghcmVuZGVyaW5nTW9kZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8VGV4dFJlbmRlcmluZ01vZGU+IHRleHRSZW5kZXJp
bmdNb2RlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpUZXh0UmVuZGVyaW5nTW9kZT4gdGV4dFJl
bmRlcmluZ01vZGU7CiAgICAgZGVjb2RlciA+PiB0ZXh0UmVuZGVyaW5nTW9kZTsKICAgICBpZiAo
IXRleHRSZW5kZXJpbmdNb2RlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
c3RkOjpvcHRpb25hbDxGb250U3ludGhlc2lzPiBmb250U3ludGhlc2lzOworICAgIHN0ZDo6b3B0
aW9uYWw8UEFMOjpGb250U3ludGhlc2lzPiBmb250U3ludGhlc2lzOwogICAgIGRlY29kZXIgPj4g
Zm9udFN5bnRoZXNpczsKICAgICBpZiAoIWZvbnRTeW50aGVzaXMpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiB2
YXJpYW50Q29tbW9uTGlnYXR1cmVzOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFu
dExpZ2F0dXJlcz4gdmFyaWFudENvbW1vbkxpZ2F0dXJlczsKICAgICBkZWNvZGVyID4+IHZhcmlh
bnRDb21tb25MaWdhdHVyZXM7CiAgICAgaWYgKCF2YXJpYW50Q29tbW9uTGlnYXR1cmVzKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFu
dExpZ2F0dXJlcz4gdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXM7CisgICAgc3RkOjpvcHRp
b25hbDxQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzPiB2YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0
dXJlczsKICAgICBkZWNvZGVyID4+IHZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwogICAg
IGlmICghdmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzPiB2YXJp
YW50SGlzdG9yaWNhbExpZ2F0dXJlczsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlh
bnRMaWdhdHVyZXM+IHZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzOwogICAgIGRlY29kZXIgPj4g
dmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXM7CiAgICAgaWYgKCF2YXJpYW50SGlzdG9yaWNhbExp
Z2F0dXJlcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9u
YWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlczsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM+IHZhcmlhbnRDb250ZXh0
dWFsQWx0ZXJuYXRlczsKICAgICBkZWNvZGVyID4+IHZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRl
czsKICAgICBpZiAoIXZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcykKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRQb3NpdGlvbj4g
dmFyaWFudFBvc2l0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudFBvc2l0
aW9uPiB2YXJpYW50UG9zaXRpb247CiAgICAgZGVjb2RlciA+PiB2YXJpYW50UG9zaXRpb247CiAg
ICAgaWYgKCF2YXJpYW50UG9zaXRpb24pCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAK
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50Q2Fwcz4gdmFyaWFudENhcHM7CisgICAgc3Rk
OjpvcHRpb25hbDxQQUw6OkZvbnRWYXJpYW50Q2Fwcz4gdmFyaWFudENhcHM7CiAgICAgZGVjb2Rl
ciA+PiB2YXJpYW50Q2FwczsKICAgICBpZiAoIXZhcmlhbnRDYXBzKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudE51bWVyaWNGaWd1
cmU+IHZhcmlhbnROdW1lcmljRmlndXJlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFy
aWFudE51bWVyaWNGaWd1cmU+IHZhcmlhbnROdW1lcmljRmlndXJlOwogICAgIGRlY29kZXIgPj4g
dmFyaWFudE51bWVyaWNGaWd1cmU7CiAgICAgaWYgKCF2YXJpYW50TnVtZXJpY0ZpZ3VyZSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlh
bnROdW1lcmljU3BhY2luZz4gdmFyaWFudE51bWVyaWNTcGFjaW5nOworICAgIHN0ZDo6b3B0aW9u
YWw8UEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nPiB2YXJpYW50TnVtZXJpY1NwYWNpbmc7
CiAgICAgZGVjb2RlciA+PiB2YXJpYW50TnVtZXJpY1NwYWNpbmc7CiAgICAgaWYgKCF2YXJpYW50
TnVtZXJpY1NwYWNpbmcpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uPiB2YXJpYW50TnVtZXJpY0ZyYWN0
aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbj4g
dmFyaWFudE51bWVyaWNGcmFjdGlvbjsKICAgICBkZWNvZGVyID4+IHZhcmlhbnROdW1lcmljRnJh
Y3Rpb247CiAgICAgaWYgKCF2YXJpYW50TnVtZXJpY0ZyYWN0aW9uKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudE51bWVyaWNPcmRp
bmFsPiB2YXJpYW50TnVtZXJpY09yZGluYWw7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRW
YXJpYW50TnVtZXJpY09yZGluYWw+IHZhcmlhbnROdW1lcmljT3JkaW5hbDsKICAgICBkZWNvZGVy
ID4+IHZhcmlhbnROdW1lcmljT3JkaW5hbDsKICAgICBpZiAoIXZhcmlhbnROdW1lcmljT3JkaW5h
bCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8+IHZhcmlhbnROdW1lcmljU2xhc2hlZFplcm87Cisg
ICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvPiB2YXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvOwogICAgIGRlY29kZXIgPj4gdmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybzsKICAgICBpZiAoIXZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8pCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50QWx0ZXJu
YXRlcz4gdmFyaWFudEFsdGVybmF0ZXM7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRWYXJp
YW50QWx0ZXJuYXRlcz4gdmFyaWFudEFsdGVybmF0ZXM7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50
QWx0ZXJuYXRlczsKICAgICBpZiAoIXZhcmlhbnRBbHRlcm5hdGVzKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ+IHZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpG
b250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ+IHZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OwogICAg
IGRlY29kZXIgPj4gdmFyaWFudEVhc3RBc2lhblZhcmlhbnQ7CiAgICAgaWYgKCF2YXJpYW50RWFz
dEFzaWFuVmFyaWFudCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6
b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aD4gdmFyaWFudEVhc3RBc2lhbldpZHRo
OworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoPiB2YXJp
YW50RWFzdEFzaWFuV2lkdGg7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50RWFzdEFzaWFuV2lkdGg7
CiAgICAgaWYgKCF2YXJpYW50RWFzdEFzaWFuV2lkdGgpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4gdmFy
aWFudEVhc3RBc2lhblJ1Ynk7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieT4gdmFyaWFudEVhc3RBc2lhblJ1Ynk7CiAgICAgZGVjb2RlciA+PiB2YXJpYW50
RWFzdEFzaWFuUnVieTsKICAgICBpZiAoIXZhcmlhbnRFYXN0QXNpYW5SdWJ5KQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxGb250T3B0aWNhbFNpemlu
Zz4gb3B0aWNhbFNpemluZzsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Rm9udE9wdGljYWxTaXpp
bmc+IG9wdGljYWxTaXppbmc7CiAgICAgZGVjb2RlciA+PiBvcHRpY2FsU2l6aW5nOwogICAgIGlm
ICghb3B0aWNhbFNpemluZykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8Rm9udFN0eWxlQXhpcz4gZm9udFN0eWxlQXhpczsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBBTDo6Rm9udFN0eWxlQXhpcz4gZm9udFN0eWxlQXhpczsKICAgICBkZWNvZGVyID4+IGZv
bnRTdHlsZUF4aXM7CiAgICAgaWYgKCFmb250U3R5bGVBeGlzKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4g
c2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHM7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkFs
bG93VXNlckluc3RhbGxlZEZvbnRzPiBzaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250czsKICAg
ICBkZWNvZGVyID4+IHNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzOwogICAgIGlmICghc2hv
dWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuY3BwCmluZGV4IDQ5NGIwNDdhNDVhODRlNDM5NGY1YWYzMmQwZTU5YzZlODMwMjZlM2Mu
LmQ5NWEzOTM4ZGI4ODY2YzNmYWE0ZDgwNjA4YTIzMjNiMGE5YmEwMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCkBA
IC0zOSw3ICszOSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RhdGljIGlubGlu
ZSBzdGQ6Om9wdGlvbmFsPFZhbHVlVHlwZT4gbWFrZU9wdGlvbmFsCiAgICAgcmV0dXJuICpwb2lu
dGVyOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRp
b24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBUZXh0UmVuZGVy
aW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgQ3JlYXRpb25EYXRhKiBjcmVhdGlvbkRh
dGEpCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBQQUw6OkZvbnRPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgUEFMOjpGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgUEFMOjpU
ZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgQ3JlYXRpb25EYXRhKiBj
cmVhdGlvbkRhdGEpCiAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fb3JpZW50YXRpb24ob3Jp
ZW50YXRpb24pCiAgICAgLCBtX3dpZHRoVmFyaWFudCh3aWR0aFZhcmlhbnQpCkBAIC01MSw3ICs1
MSw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpCiB9CiAKICNpZiAhVVNFKEZSRUVUWVBFKQot
Rm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRp
b24oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc291cmNlLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKIHsKICAgICBGb250UGxhdGZvcm1EYXRhIGNvcHkoc291cmNlKTsKICAgICBj
b3B5Lm1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCAzMGRmYWEyZDJmODVh
OWY3Y2RhMjAwODI5ZGUxOTliMTRlODRiMjE5Li5hZGNhMmRhNjRlZTAxNzg4NTkyNzRiZjYzZmM3
NzVlYWJjZDFlOWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5oIgotI2luY2x1
ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTEwOSwxMCArMTA5LDEwIEBAIHB1YmxpYzoKICAgICBGb250UGxh
dGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CiAgICAgRm9udFBsYXRm
b3JtRGF0YSgpOwogCi0gICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRo
ZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uID0gRm9udE9y
aWVudGF0aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gRm9udFdpZHRoVmFyaWFu
dDo6UmVndWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlOjpB
dXRvVGV4dFJlbmRlcmluZywgY29uc3QgQ3JlYXRpb25EYXRhKiA9IG51bGxwdHIpOworICAgIEZv
bnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY09ibGlxdWUsIFBBTDo6Rm9udE9yaWVudGF0aW9uID0gUEFMOjpGb250T3JpZW50YXRpb246
Okhvcml6b250YWwsIFBBTDo6Rm9udFdpZHRoVmFyaWFudCA9IFBBTDo6Rm9udFdpZHRoVmFyaWFu
dDo6UmVndWxhcldpZHRoLCBQQUw6OlRleHRSZW5kZXJpbmdNb2RlID0gUEFMOjpUZXh0UmVuZGVy
aW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcsIGNvbnN0IENyZWF0aW9uRGF0YSogPSBudWxscHRy
KTsKIAogI2lmIFVTRShDT1JFX1RFWFQpCi0gICAgV0VCQ09SRV9FWFBPUlQgRm9udFBsYXRmb3Jt
RGF0YShSZXRhaW5QdHI8Q1RGb250UmVmPiYmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQgPSBmYWxzZSwgYm9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlv
biA9IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IEZvbnRX
aWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCwgVGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVy
aW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcsIGNvbnN0IENyZWF0aW9uRGF0YSogPSBudWxscHRy
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250UGxhdGZvcm1EYXRhKFJldGFpblB0cjxDVEZvbnRS
ZWY+JiYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRo
ZXRpY09ibGlxdWUgPSBmYWxzZSwgUEFMOjpGb250T3JpZW50YXRpb24gPSBQQUw6OkZvbnRPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbCwgUEFMOjpGb250V2lkdGhWYXJpYW50ID0gUEFMOjpGb250V2lk
dGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsIFBBTDo6VGV4dFJlbmRlcmluZ01vZGUgPSBQQUw6OlRl
eHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZywgY29uc3QgQ3JlYXRpb25EYXRhKiA9
IG51bGxwdHIpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xMjksMTAgKzEyOSwx
MCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShGUkVFVFlQRSkKLSAgICBGb250UGxhdGZv
cm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiwgUmVmUHRyPEZjUGF0dGVybj4mJiwgZmxvYXQgc2l6
ZSwgYm9vbCBmaXhlZFdpZHRoLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2Js
aXF1ZSwgRm9udE9yaWVudGF0aW9uKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRf
ZmFjZV90KiwgUmVmUHRyPEZjUGF0dGVybj4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBmaXhlZFdpZHRo
LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgUEFMOjpGb250T3Jp
ZW50YXRpb24pOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdp
dGhPcmllbnRhdGlvbihjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgRm9udE9yaWVudGF0aW9uKTsK
KyAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhPcmllbnRhdGlvbihjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgUEFMOjpGb250T3JpZW50YXRpb24pOwogICAgIHN0YXRpYyBGb250
UGxhdGZvcm1EYXRhIGNsb25lV2l0aFN5bnRoZXRpY09ibGlxdWUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIGJvb2wpOwogICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhIGNsb25lV2l0aFNpemUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGZsb2F0KTsKIApAQCAtMTc0LDEwICsxNzQsMTAgQEAg
cHVibGljOgogICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhl
dGljQm9sZDsgfQogICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3ludGhldGljT2JsaXF1ZTsgfQogICAgIGJvb2wgaXNDb2xvckJpdG1hcEZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzQ29sb3JCaXRtYXBGb250OyB9Ci0gICAgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQotICAgIEZvbnRXaWR0aFZh
cmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aFZhcmlhbnQ7IH0KLSAg
ICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dFJlbmRlcmluZ01vZGU7IH0KLSAgICBib29sIGlzRm9yVGV4dENvbWJpbmUoKSBjb25zdCB7
IHJldHVybiB3aWR0aFZhcmlhbnQoKSAhPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGg7
IH0gLy8gS2VlcCBpbiBzeW5jIHdpdGggY2FsbGVycyBvZiBGb250RGVzY3JpcHRpb246OnNldFdp
ZHRoVmFyaWFudCgpLgorICAgIFBBTDo6Rm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorICAgIFBBTDo6Rm9udFdpZHRoVmFyaWFudCB3
aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoVmFyaWFudDsgfQorICAgIFBBTDo6
VGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRSZW5kZXJpbmdNb2RlOyB9CisgICAgYm9vbCBpc0ZvclRleHRDb21iaW5lKCkgY29uc3QgeyBy
ZXR1cm4gd2lkdGhWYXJpYW50KCkgIT0gUEFMOjpGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lk
dGg7IH0gLy8gS2VlcCBpbiBzeW5jIHdpdGggY2FsbGVycyBvZiBGb250RGVzY3JpcHRpb246OnNl
dFdpZHRoVmFyaWFudCgpLgogCiAgICAgU3RyaW5nIGZhbWlseU5hbWUoKSBjb25zdDsKICAgICBW
ZWN0b3I8Rm9udFZhcmlhdGlvbkF4aXM+IHZhcmlhdGlvbkF4ZXMoU2hvdWxkTG9jYWxpemVBeGlz
TmFtZXMpIGNvbnN0OwpAQCAtMjg0LDkgKzI4NCw5IEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBt
X3NpemUgeyAwIH07CiAKLSAgICBGb250T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbiB7IEZvbnRP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbCB9OwotICAgIEZvbnRXaWR0aFZhcmlhbnQgbV93aWR0aFZh
cmlhbnQgeyBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGggfTsKLSAgICBUZXh0UmVuZGVy
aW5nTW9kZSBtX3RleHRSZW5kZXJpbmdNb2RlIHsgVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0
UmVuZGVyaW5nIH07CisgICAgUEFMOjpGb250T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbiB7IFBB
TDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsIH07CisgICAgUEFMOjpGb250V2lkdGhWYXJp
YW50IG1fd2lkdGhWYXJpYW50IHsgUEFMOjpGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgg
fTsKKyAgICBQQUw6OlRleHRSZW5kZXJpbmdNb2RlIG1fdGV4dFJlbmRlcmluZ01vZGUgeyBQQUw6
OlRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyB9OwogCiAgICAgLy8gVGhpcyBp
cyBjb25jZXB0dWFsbHkgY29uc3QsIGJ1dCB3ZSBjYW4ndCBtYWtlIGl0IGFjdHVhbGx5IGNvbnN0
LAogICAgIC8vIGJlY2F1c2UgRm9udFBsYXRmb3JtRGF0YSBpcyB1c2VkIGFzIGEga2V5IGluIGEg
SGFzaE1hcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRTZWxlY3Rpb25BbGdvcml0aG0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaAppbmRleCA0ZDViODBhMTExYzNhM2IzMzQyY2MzZmFi
YzkwMjkxMzY4YTk3Mjg3Li4xNzE3ZTgzNWIwODY1YzFmOTBmZTBkOGVjZjJhYjEzYWIyZjk4Njk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0
aW9uQWxnb3JpdGhtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdGlvbkFsZ29yaXRobS5oCkBAIC0yNSw4ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1ZGUgPHR1cGxlPgogI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAy
Y2JiY2M1NjYzZmU1ODgwN2QxMDM2MDZmNWI1MWEwZmY4ZTU2MmRmLi4yNWI2MWZmMDQ1OWFlNTFh
ZGM2MmJkODRjMWU1OWUwZDQzMzgxOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAotI2luY2x1
ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNp
bmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaVJlc29sdmVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC01MDksNyArNTA5LDcgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4g
Zm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIGZvbnRTbW9vdGhpbmdNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2Rl
KQogewogICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CkBAIC01MjEs
MjQgKzUyMSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIEJpZGlSZXNvbHZl
cjxUZXh0Qm94SXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKLSAgICBi
aWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGly
ZWN0aW9uYWxPdmVycmlkZSgpKSk7CisgICAgUEFMOjpCaWRpUmVzb2x2ZXI8VGV4dEJveEl0ZXJh
dG9yLCBQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKKyAgICBiaWRpUmVzb2x2
ZXIuc2V0U3RhdHVzKFBBTDo6QmlkaVN0YXR1cyhydW4uZGlyZWN0aW9uKCksIHJ1bi5kaXJlY3Rp
b25hbE92ZXJyaWRlKCkpKTsKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05l
c3RlZElzb2xhdGVzKFRleHRCb3hJdGVyYXRvcigmcnVuLCAwKSk7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBvd25lcnNoaXAgc2hvdWxkIGJlIHJldmVyc2VkLiBXZSBzaG91bGQgcGFzcyBCaWRpUnVu
TGlzdAogICAgIC8vIHRvIEJpZGlSZXNvbHZlciBpbiBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCi0g
ICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlkaVJlc29sdmVy
LnJ1bnMoKTsKKyAgICBQQUw6OkJpZGlSdW5MaXN0PFBBTDo6QmlkaUNoYXJhY3RlclJ1bj4mIGJp
ZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKICAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlk
aVJ1bnNGb3JMaW5lKFRleHRCb3hJdGVyYXRvcigmcnVuLCBydW4ubGVuZ3RoKCkpKTsKIAogICAg
IGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRQ
b2ludCBjdXJyUG9pbnQgPSBwb2ludDsKLSAgICBCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0g
YmlkaVJ1bnMuZmlyc3RSdW4oKTsKKyAgICBQQUw6OkJpZGlDaGFyYWN0ZXJSdW4qIGJpZGlSdW4g
PSBiaWRpUnVucy5maXJzdFJ1bigpOwogICAgIHdoaWxlIChiaWRpUnVuKSB7CiAgICAgICAgIFRl
eHRSdW4gc3VicnVuID0gcnVuLnN1YlJ1bihiaWRpUnVuLT5zdGFydCgpLCBiaWRpUnVuLT5zdG9w
KCkgLSBiaWRpUnVuLT5zdGFydCgpKTsKICAgICAgICAgYm9vbCBpc1JUTCA9IGJpZGlSdW4tPmxl
dmVsKCkgJSAyOwotICAgICAgICBzdWJydW4uc2V0RGlyZWN0aW9uKGlzUlRMID8gVGV4dERpcmVj
dGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICAgICAgc3VicnVuLnNldERpcmVj
dGlvbihpc1JUTCA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIpOwogICAgICAgICBzdWJydW4uc2V0RGlyZWN0aW9uYWxPdmVycmlkZShiaWRpUnVuLT5k
aXJPdmVycmlkZShmYWxzZSkpOwogCiAgICAgICAgIGF1dG8gYWR2YW5jZSA9IGZvbnQuZHJhd1Rl
eHQoKnRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCBzdGQ6Om51bGxvcHQsIGN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDMyZWEyZWQxNDUxYzU0YjRjZGU4MTMwYTQ5MzdlN2Q1
MzIwMTZhM2YuLmM5ZmNjNmE5NTc1YWZhMTcwZjYwZTIwMTMzOWRhMzY4NWI3ZTY5M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CkBAIC00NzksMTEgKzQ3OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGV4dAogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVu
c2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9w
dCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2Nh
ZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZG
b250Tm90UmVhZHkpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBB
TDo6Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiAgICAgewogICAgICAgICBk
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRT
bW9vdGhpbmdNb2RlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggOWM4NzM2ZTE1NDQxZmI2Mjhl
NzcwNjU4ZjU3NjI4NDhiNmFmZDM5OC4uMTA3YTFkYWYwNGY2MWM5ZmVlZDhiOTNhYmE0YzFiY2Q0
ZWJmYzU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVs
bEdyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAKICAg
ICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
PSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0gICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9k
ZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0
IEZsb2F0UG9pbnQmLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbCB7IH0KIAogICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7IH0KICAgICB2b2lkIGRy
YXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNj
YWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAppbmRleCBiOTc5OWE0
ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li4wNTkxNWNkMDRhY2NmMzQyOWNhMWE3
MGU1MGZjNzQ5MmY2MzQzZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtNDk1LDcgKzQ5NSw3IEBAIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdEZyb21Qb2x5Z29uKGNvbnN0IEZsb2F0UG9pbnRHcmFw
aDo6UG9seWdvbiYKIH0KIAogUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBw
ZWRSZWN0c0Zvck91dGxpbmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBjb25zdCBC
b3JkZXJEYXRhJiBib3JkZXJEYXRhLAotICAgIGZsb2F0IG91dGxpbmVPZmZzZXQsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCisgICAgZmxvYXQgb3V0bGluZU9mZnNldCwgUEFMOjpUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCiB7CiAgICAgQVNTRVJUKGJvcmRlckRhdGEuaGFzQm9yZGVyUmFkaXVzKCkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKaW5k
ZXggNTAwMDQxYTJkNjQxOGM4MDQ3NWIxNzU2MTQ3NjhmY2JmYTY0M2UyNC4uNGEyYzllZjk0NDUx
YTg2YjRiMWU4ODA1OWU4MGY3Y2EwYjcyOWJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmlu
ZSBQYXRoVXRpbGl0aWVzX2gKIAogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJXcml0aW5n
TW9kZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOCw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGF0aCBwYXRoV2l0aFNocmlua1dyYXBwZWRS
ZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHJhZGl1cyk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxQYXRoPiBwYXRoc1dpdGhTaHJpbmtXcmFwcGVk
UmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpOwogCi0g
ICAgc3RhdGljIFBhdGggcGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgY29uc3QgQm9yZGVyRGF0YSYsIGZsb2F0IG91dGxpbmVPZmZz
ZXQsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7
CisgICAgc3RhdGljIFBhdGggcGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgY29uc3QgQm9yZGVyRGF0YSYsIGZsb2F0IG91dGxpbmVP
ZmZzZXQsIFBBTDo6VGV4dERpcmVjdGlvbiwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dFJ1bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dFJ1bi5oCmluZGV4IDFkNDdkNjVkNjgyNDYyNmUxNTkyODgwMGY0Njk3YzI3NmNiMjc2MzQu
LmU4NTVhY2E4YTkzNzhkNmVkMDU1N2UyNjM0M2EzMDVlYWU1ZGQzMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKQEAgLTI1LDggKzI1LDggQEAKICNkZWZp
bmUgVGV4dFJ1bl9oCiAKICNpbmNsdWRlICJUYWJTaXplLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdz
LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0Rmxh
Z3MuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsNyArNDMsNyBA
QCBzdHJ1Y3QgR2x5cGhEYXRhOwogY2xhc3MgVGV4dFJ1biB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dFJ1bihjb25zdCBTdHJpbmcmIHRl
eHQsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlv
ciBleHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBm
YWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQorICAgIGV4cGxpY2l0
IFRleHRSdW4oY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5z
aW9uID0gMCwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IFBBTDo6
RGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBj
aGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQogICAgICAgICA6IG1fdGV4dCh0ZXh0KQog
ICAgICAgICAsIG1fdGFiU2l6ZSgwKQogICAgICAgICAsIG1feHBvcyh4cG9zKQpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghbV90ZXh0LmlzTnVsbCgpKTsKICAgICB9
CiAKLSAgICBleHBsaWNpdCBUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgZmxvYXQgeHBv
cyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJl
aGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0
RGlyZWN0aW9uOjpMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNo
YXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUpCisgICAgZXhwbGljaXQgVGV4dFJ1bihTdHJp
bmdWaWV3IHN0cmluZ1ZpZXcsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBQ
QUw6OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gUEFMOjpEZWZhdWx0RXhw
YW5zaW9uLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aCA9IHRydWUpCiAgICAgICAgIDogVGV4dFJ1bihzdHJpbmdWaWV3LnRvU3Ry
aW5nV2l0aG91dENvcHlpbmcoKSwgeHBvcywgZXhwYW5zaW9uLCBleHBhbnNpb25CZWhhdmlvciwg
ZGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlLCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgp
CiAgICAgewogICAgIH0KQEAgLTEwMSwxNiArMTAxLDE2IEBAIHB1YmxpYzoKICAgICBmbG9hdCB4
UG9zKCkgY29uc3QgeyByZXR1cm4gbV94cG9zOyB9CiAgICAgdm9pZCBzZXRYUG9zKGZsb2F0IHhQ
b3MpIHsgbV94cG9zID0geFBvczsgfQogICAgIGZsb2F0IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uOyB9Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZp
b3IoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbkJlaGF2aW9yOyB9Ci0gICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9u
PihtX2RpcmVjdGlvbik7IH0KLSAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7IH0K
LSAgICBib29sIGx0cigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHREaXJlY3Rpb24+
KG1fZGlyZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OkV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25C
ZWhhdmlvcjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxQQUw6OlRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsgfQorICAg
IGJvb2wgcnRsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGlyZWN0aW9u
PihtX2RpcmVjdGlvbikgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7IH0KKyAgICBib29sIGx0
cigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9kaXJl
Y3Rpb24pID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAgICAgYm9vbCBkaXJlY3Rpb25h
bE92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb25hbE92ZXJyaWRlOyB9CiAgICAg
Ym9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3Rl
clNjYW5Gb3JDb2RlUGF0aDsgfQogICAgIGJvb2wgc3BhY2luZ0Rpc2FibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNhYmxlU3BhY2luZzsgfQogCiAgICAgdm9pZCBkaXNhYmxlU3BhY2luZygpIHsg
bV9kaXNhYmxlU3BhY2luZyA9IHRydWU7IH0KLSAgICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
aXJlY3Rpb24pOyB9CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkaXJlY3Rpb24p
OyB9CiAgICAgdm9pZCBzZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJvb2wgb3ZlcnJpZGUpIHsgbV9k
aXJlY3Rpb25hbE92ZXJyaWRlID0gb3ZlcnJpZGU7IH0KICAgICB2b2lkIHNldENoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aChib29sIHNjYW4pIHsgbV9jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSBz
Y2FuOyB9CiAgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3Bw
CmluZGV4IGFmZDc3ZGU0MWE4MjAwZTZkYjlkOWUxM2ZlMzkxZDczZGIzNWU2N2MuLmZkMzliNzll
M2NhNTAyOWIwMDBhZTU3YWJlNTI0YjViYmRkMGNhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC0yMiw3ICsyMiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2lkdGhJdGVyYXRvci5oIgogCi0jaW5j
bHVkZSAiQ2hhcmFjdGVyUHJvcGVydGllcy5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0NoYXJhY3Rl
clByb3BlcnRpZXMuaD4KICNpbmNsdWRlICJDb21wb3NlZENoYXJhY3RlckNsdXN0ZXJUZXh0SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKQEAg
LTQxLDcgKzQxLDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2UKICAgICAsIG1fcnVuKHJ1bikK
ICAgICAsIG1fZmFsbGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKQogICAgICwgbV9leHBhbnNpb24o
cnVuLmV4cGFuc2lvbigpKQotICAgICwgbV9pc0FmdGVyRXhwYW5zaW9uKChydW4uZXhwYW5zaW9u
QmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhwYW5zaW9uKQor
ICAgICwgbV9pc0FmdGVyRXhwYW5zaW9uKChydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFBBTDo6
TGVmdEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yYmlkTGVmdEV4cGFuc2lvbikKICAgICAsIG1f
YWNjb3VudEZvckdseXBoQm91bmRzKGFjY291bnRGb3JHbHlwaEJvdW5kcykKICAgICAsIG1fZW5h
YmxlS2VybmluZyhmb250LmVuYWJsZUtlcm5pbmcoKSkKICAgICAsIG1fcmVxdWlyZXNTaGFwaW5n
KGZvbnQucmVxdWlyZXNTaGFwaW5nKCkpCkBAIC01Miw3ICs1Miw3IEBAIFdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNlCiAgICAgaWYgKCFtX2V4cGFuc2lvbikKICAgICAgICAgbV9leHBhbnNpb25QZXJP
cHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCht
X3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVj
dGlvbjo6UlRMLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSkuZmlyc3Q7CisgICAgICAgIHVuc2ln
bmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgOiBQQUw6OlRleHREaXJlY3Rpb246OlJUTCwgcnVuLmV4cGFuc2lvbkJlaGF2aW9y
KCkpLmZpcnN0OwogCiAgICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKICAg
ICAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwpAQCAtMTg0LDE0ICsxODQs
MTQgQEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphcHBseUluaXRpYWxBZHZhbmNlKEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgR2x5cGhCdWZmZXJBZHYKIAogICAgIEFTU0VSVChsYXN0R2x5cGhDb3Vu
dCB8fCAoIXdpZHRoKG1fbGVmdG92ZXJJbml0aWFsQWR2YW5jZSkgJiYgIWhlaWdodChtX2xlZnRv
dmVySW5pdGlhbEFkdmFuY2UpKSk7CiAKLSAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6UlRMICYmIGxhc3RHbHlwaENvdW50KSB7CisgICAgaWYgKG1fcnVuLmRpcmVj
dGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMICYmIGxhc3RHbHlwaENvdW50KSB7CiAg
ICAgICAgIGF1dG8mIHZpc3VhbGx5TGFzdEFkdmFuY2UgPSAqZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
bGFzdEdseXBoQ291bnQpOwogICAgICAgICBleHBhbmRXaXRoSW5pdGlhbEFkdmFuY2UodmlzdWFs
bHlMYXN0QWR2YW5jZSwgbV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlKTsKICAgICAgICAgbV9ydW5X
aWR0aFNvRmFyICs9IHdpZHRoKG1fbGVmdG92ZXJJbml0aWFsQWR2YW5jZSk7CiAgICAgICAgIG1f
bGVmdG92ZXJJbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2UoKTsKICAgICB9
CiAKLSAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAg
IGlmIChtX3J1bi5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAg
ICAgbV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7CiAgICAgZWxzZSB7
CiAgICAgICAgIGlmIChsYXN0R2x5cGhDb3VudCkgewpAQCAtMjgxLDcgKzI4MSw3IEBAIGlubGlu
ZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJ
dGVyYXRvciwgR2x5cGhCdWZmCiAgICAgICAgIHVuc2lnbmVkIGFkdmFuY2VMZW5ndGggPSBjbHVz
dGVyTGVuZ3RoOwogICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlckluZGV4ICsgYWR2YW5jZUxl
bmd0aCA9PSBtX3J1bi5sZW5ndGgoKSkKICAgICAgICAgICAgIG1fbGFzdENoYXJhY3RlckluZGV4
ID0gY3VycmVudENoYXJhY3RlckluZGV4OwotICAgICAgICBib29sIGNoYXJhY3Rlck11c3REcmF3
U29tZXRoaW5nID0gIWlzRGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludChjaGFyYWN0ZXIpOworICAg
ICAgICBib29sIGNoYXJhY3Rlck11c3REcmF3U29tZXRoaW5nID0gIVBBTDo6aXNEZWZhdWx0SWdu
b3JhYmxlQ29kZVBvaW50KGNoYXJhY3Rlcik7CiAjaWYgVVNFKEZSRUVUWVBFKQogICAgICAgICAv
LyBGcmVldHlwZSBiYXNlZCBwb3J0cyBvbmx5IG92ZXJyaWRlIHRoZSBjaGFyYWN0ZXJzIHdpdGgg
RGVmYXVsdF9JZ25vcmFibGUgdW5pY29kZSBwcm9wZXJ0eSB3aGVuIHRoZSBmb250CiAgICAgICAg
IC8vIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgY29kZSBwb2ludC4gV2Ugc2hvdWxkIGlnbm9yZSB0aGVt
IGF0IHRoaXMgcG9pbnQgdG8gZW5zdXJlIHRoZXkgYXJlIG5vdCBkaXNwbGF5ZWQuCkBAIC0zODUs
MTAgKzM4NSwxMCBAQCBhdXRvIFdpZHRoSXRlcmF0b3I6OmNhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0
aChHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEdseXBoQnVmZgogICAgICAgICAgICAgaWYgKCFt
X3J1bi5sdHIoKSkKICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoaXNMZWZ0bW9zdENoYXJhY3Rl
ciwgaXNSaWdodG1vc3RDaGFyYWN0ZXIpOwogCi0gICAgICAgICAgICBib29sIGZvcmNlTGVmdEV4
cGFuc2lvbiA9IGlzTGVmdG1vc3RDaGFyYWN0ZXIgJiYgKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9y
KCkgJiBMZWZ0RXhwYW5zaW9uTWFzaykgPT0gRm9yY2VMZWZ0RXhwYW5zaW9uOwotICAgICAgICAg
ICAgYm9vbCBmb3JjZVJpZ2h0RXhwYW5zaW9uID0gaXNSaWdodG1vc3RDaGFyYWN0ZXIgJiYgKG1f
cnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBSaWdodEV4cGFuc2lvbk1hc2spID09IEZvcmNlUmln
aHRFeHBhbnNpb247Ci0gICAgICAgICAgICBib29sIGZvcmJpZExlZnRFeHBhbnNpb24gPSBpc0xl
ZnRtb3N0Q2hhcmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFu
c2lvbk1hc2spID09IEZvcmJpZExlZnRFeHBhbnNpb247Ci0gICAgICAgICAgICBib29sIGZvcmJp
ZFJpZ2h0RXhwYW5zaW9uID0gaXNSaWdodG1vc3RDaGFyYWN0ZXIgJiYgKG1fcnVuLmV4cGFuc2lv
bkJlaGF2aW9yKCkgJiBSaWdodEV4cGFuc2lvbk1hc2spID09IEZvcmJpZFJpZ2h0RXhwYW5zaW9u
OworICAgICAgICAgICAgYm9vbCBmb3JjZUxlZnRFeHBhbnNpb24gPSBpc0xlZnRtb3N0Q2hhcmFj
dGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUEFMOjpMZWZ0RXhwYW5zaW9uTWFz
aykgPT0gUEFMOjpGb3JjZUxlZnRFeHBhbnNpb247CisgICAgICAgICAgICBib29sIGZvcmNlUmln
aHRFeHBhbnNpb24gPSBpc1JpZ2h0bW9zdENoYXJhY3RlciAmJiAobV9ydW4uZXhwYW5zaW9uQmVo
YXZpb3IoKSAmIFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSA9PSBQQUw6OkZvcmNlUmlnaHRFeHBh
bnNpb247CisgICAgICAgICAgICBib29sIGZvcmJpZExlZnRFeHBhbnNpb24gPSBpc0xlZnRtb3N0
Q2hhcmFjdGVyICYmIChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgUEFMOjpMZWZ0RXhwYW5z
aW9uTWFzaykgPT0gUEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uOworICAgICAgICAgICAgYm9vbCBm
b3JiaWRSaWdodEV4cGFuc2lvbiA9IGlzUmlnaHRtb3N0Q2hhcmFjdGVyICYmIChtX3J1bi5leHBh
bnNpb25CZWhhdmlvcigpICYgUEFMOjpSaWdodEV4cGFuc2lvbk1hc2spID09IFBBTDo6Rm9yYmlk
UmlnaHRFeHBhbnNpb247CiAKICAgICAgICAgICAgIGJvb2wgaXNJZGVvZ3JhcGggPSBGb250Q2Fz
Y2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKSAmJiBGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaGFyYWN0ZXIpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKaW5kZXggMzVmMjEzZTllMTdmN2MwN2JhYTc4ODdjZTVhODM1ZmMyNTg3ZGJjOC4u
Mzk4M2RkNGYxMDhjYzQ2NjdlNmNkMjM5NTQ0YjFjZTkwYjgxYWRjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcApAQCAtNzksMTggKzc5LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRP
cGVuVHlwZUZlYXR1cmUoQ0ZNdXRhYmxlQXJyYXlSZWYgZmVhdHVyZXMsIGNvbnN0IEZvbnRGCiB0
eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgaW50LCBGb3VyQ2hhcmFjdGVyVGFnSGFzaCwgRm91ckNo
YXJhY3RlclRhZ0hhc2hUcmFpdHM+IEZlYXR1cmVzTWFwOwogdHlwZWRlZiBIYXNoTWFwPEZvbnRU
YWcsIGZsb2F0LCBGb3VyQ2hhcmFjdGVyVGFnSGFzaCwgRm91ckNoYXJhY3RlclRhZ0hhc2hUcmFp
dHM+IFZhcmlhdGlvbnNNYXA7CiAKLXN0YXRpYyBGZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNl
dHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIHZhcmlhbnRTZXR0
aW5ncykKK3N0YXRpYyBGZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlh
bnRzKGNvbnN0IFBBTDo6Rm9udFZhcmlhbnRTZXR0aW5ncyYgdmFyaWFudFNldHRpbmdzKQogewog
ICAgIEZlYXR1cmVzTWFwIHJlc3VsdDsKIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLmNv
bW1vbkxpZ2F0dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJl
VGFnKCJsaWdhIiksIDEpOwogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJjbGln
IiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpO
bzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOgogICAgICAgICByZXN1
bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJsaWdhIiksIDApOwogICAgICAgICByZXN1bHQuYWRkKGZv
bnRGZWF0dXJlVGFnKCJjbGlnIiksIDApOwogICAgICAgICBicmVhazsKQEAgLTk5LDEyICs5OSwx
MiBAQCBzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50
cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFu
dFNldHRpbmdzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TGlnYXR1cmVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpO
b3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Olll
czoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczoKICAgICAgICAgcmVz
dWx0LmFkZChmb250RmVhdHVyZVRhZygiZGxpZyIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
TGlnYXR1cmVzOjpObzoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiZGxpZyIp
LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTExMiwxMiArMTEyLDEyIEBA
IHN0YXRpYyBGZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNv
bnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0
dGluZ3MuaGlzdG9yaWNhbExpZ2F0dXJlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICByZXN1bHQuYWRk
KGZvbnRGZWF0dXJlVGFnKCJobGlnIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJobGlnIiksIDApOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTI1LDEyICsxMjUsMTIgQEAgc3RhdGlj
IEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9u
dFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5j
b250ZXh0dWFsQWx0ZXJuYXRlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDoKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRG
ZWF0dXJlVGFnKCJjYWx0IiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpObzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJjYWx0IiksIDApOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTM4LDEyICsxMzgsMTIgQEAgc3RhdGljIEZlYXR1
cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlh
bnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5wb3NpdGlv
bikgewotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudFBvc2l0aW9uOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRQb3NpdGlvbjo6U3Vic2NyaXB0OgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dFBvc2l0aW9uOjpTdWJzY3JpcHQ6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWco
InN1YnMiKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlv
bjo6U3VwZXJzY3JpcHQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVy
c2NyaXB0OgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJzdXBzIiksIDEpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTUxLDI0ICsxNTEsMjQgQEAgc3RhdGlj
IEZlYXR1cmVzTWFwIGNvbXB1dGVGZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9u
dFZhcmlhbnRTZXR0aW5ncyYKICAgICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5j
YXBzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6
Rm9udFZhcmlhbnRDYXBzOjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxT
bWFsbDoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiYzJzYyIpLCAxKTsKICAg
ICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsOgogICAgICAgICByZXN1bHQuYWRkKGZv
bnRGZWF0dXJlVGFnKCJzbWNwIiksIDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50Q2Fwczo6QWxsUGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFs
bFBldGl0ZToKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygiYzJwYyIpLCAxKTsK
ICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToK
KyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6CiAgICAgICAgIHJlc3VsdC5h
ZGQoZm9udEZlYXR1cmVUYWcoInBjYXAiKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6
OlVuaWNhc2U6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInVuaWMiKSwgMSk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlRpdGxpbmc6CiAgICAgICAgIHJlc3VsdC5hZGQo
Zm9udEZlYXR1cmVUYWcoInRpdGwiKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CkBAIC0xNzYsMTIgKzE3NiwxMiBAQCBzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVT
ZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAog
ICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNGaWd1cmUpIHsKLSAgICBjYXNlIEZv
bnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFu
dE51bWVyaWNGaWd1cmU6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudE51bWVyaWNGaWd1cmU6OkxpbmluZ051bWJlcnM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoKICAgICAgICAgcmVzdWx0LmFkZChmb250
RmVhdHVyZVRhZygibG51bSIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFy
aWFudE51bWVyaWNGaWd1cmU6Ok9sZFN0eWxlTnVtYmVyczoKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnM6CiAgICAgICAgIHJlc3VsdC5hZGQo
Zm9udEZlYXR1cmVUYWcoIm9udW0iKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CkBAIC0xODksMTIgKzE4OSwxMiBAQCBzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVT
ZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAog
ICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNTcGFjaW5nKSB7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJp
YW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
VmFyaWFudE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgorICAgIGNhc2UgUEFM
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpQcm9wb3J0aW9uYWxOdW1iZXJzOgogICAgICAg
ICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJwbnVtIiksIDEpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVyczoKICAg
ICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygidG51bSIpLCAxKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKQEAgLTIwMiwxMiArMjAyLDEyIEBAIHN0YXRpYyBGZWF0dXJlc01h
cCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50U2V0
dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MubnVtZXJpY0ZyYWN0
aW9uKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgorICAg
IGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsOgogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpEaWFnb25hbEZyYWN0
aW9uczoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFs
RnJhY3Rpb25zOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJmcmFjIiksIDEp
OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpT
dGFja2VkRnJhY3Rpb25zOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlv
bjo6U3RhY2tlZEZyYWN0aW9uczoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygi
YWZyYyIpLCAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTIxNSw5ICsyMTUs
OSBAQCBzdGF0aWMgRmVhdHVyZXNNYXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50
cyhjb25zdCBGb250VmFyaWFudFNldHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFu
dFNldHRpbmdzLm51bWVyaWNPcmRpbmFsKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNP
cmRpbmFsOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6
Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNPcmRp
bmFsOjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczoK
ICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygib3JkbiIpLCAxKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTIyNSw5ICsyMjUsOSBAQCBzdGF0aWMgRmVhdHVyZXNN
YXAgY29tcHV0ZUZlYXR1cmVTZXR0aW5nc0Zyb21WYXJpYW50cyhjb25zdCBGb250VmFyaWFudFNl
dHRpbmdzJgogICAgIH0KIAogICAgIHN3aXRjaCAodmFyaWFudFNldHRpbmdzLm51bWVyaWNTbGFz
aGVkWmVybykgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1h
bDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDoK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6
WWVzOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6WWVzOgog
ICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJ6ZXJvIiksIDEpOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgpAQCAtMjM1LDkgKzIzNSw5IEBAIHN0YXRpYyBGZWF0dXJlc01h
cCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50U2V0
dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuYWx0ZXJuYXRlcykg
ewotICAgIGNhc2UgRm9udFZhcmlhbnRBbHRlcm5hdGVzOjpOb3JtYWw6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1zOgorICAgIGNhc2UgUEFMOjpG
b250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczoKICAgICAgICAgcmVzdWx0LmFk
ZChmb250RmVhdHVyZVRhZygiaGlzdCIpLCAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKQEAgLTI0NSwyNCArMjQ1LDI0IEBAIHN0YXRpYyBGZWF0dXJlc01hcCBjb21wdXRlRmVhdHVy
ZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmCiAgICAgfQog
CiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuVmFyaWFudCkgewotICAgIGNh
c2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWw6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CisgICAgY2FzZSBQQUw6OkZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9u
dEZlYXR1cmVUYWcoImpwNzgiKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZh
cmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM4MzoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50OjpKaXM4MzoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRh
ZygianA4MyIpLCAxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OkppczkwOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZh
cmlhbnQ6OkppczkwOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJqcDkwIiks
IDEpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6SmlzMDQ6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Smlz
MDQ6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImpwMDQiKSwgMSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlm
aWVkOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZp
ZWQ6CiAgICAgICAgIHJlc3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInNtcGwiKSwgMSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpUcmFkaXRp
b25hbDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpUcmFkaXRp
b25hbDoKICAgICAgICAgcmVzdWx0LmFkZChmb250RmVhdHVyZVRhZygidHJhZCIpLCAxKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTI3MCwxMiArMjcwLDEyIEBAIHN0YXRpYyBG
ZWF0dXJlc01hcCBjb21wdXRlRmVhdHVyZVNldHRpbmdzRnJvbVZhcmlhbnRzKGNvbnN0IEZvbnRW
YXJpYW50U2V0dGluZ3MmCiAgICAgfQogCiAgICAgc3dpdGNoICh2YXJpYW50U2V0dGluZ3MuZWFz
dEFzaWFuV2lkdGgpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1h
bDoKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOgogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw6Cisg
ICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw6CiAgICAgICAgIHJl
c3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoImZ3aWQiKSwgMSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6UHJvcG9ydGlvbmFsOgorICAgIGNhc2Ug
UEFMOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpQcm9wb3J0aW9uYWw6CiAgICAgICAgIHJl
c3VsdC5hZGQoZm9udEZlYXR1cmVUYWcoInB3aWQiKSwgMSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CkBAIC0yODMsOSArMjgzLDkgQEAgc3RhdGljIEZlYXR1cmVzTWFwIGNvbXB1dGVG
ZWF0dXJlU2V0dGluZ3NGcm9tVmFyaWFudHMoY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYKICAg
ICB9CiAKICAgICBzd2l0Y2ggKHZhcmlhbnRTZXR0aW5ncy5lYXN0QXNpYW5SdWJ5KSB7Ci0gICAg
Y2FzZSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDoKKyAgICBjYXNlIFBBTDo6Rm9u
dFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50
RWFzdEFzaWFuUnVieTo6WWVzOgogICAgICAgICByZXN1bHQuYWRkKGZvbnRGZWF0dXJlVGFnKCJy
dWJ5IiksIDEpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNTM4LDggKzUzOCw4
IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9y
aWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgYXV0byBmb250U2VsZWN0aW9uUmVxdWVz
dCA9IGZvbnREZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVzdCgpOwogICAgIGF1dG8gZm9u
dFN0eWxlQXhpcyA9IGZvbnREZXNjcmlwdGlvbi5mb250U3R5bGVBeGlzKCk7CiAKLSAgICBib29s
IGZvcmNlT3B0aWNhbFNpemluZ09uID0gZm9udE9wdGljYWxTaXppbmcgPT0gRm9udE9wdGljYWxT
aXppbmc6OkVuYWJsZWQgJiYgZm9udFR5cGUudmFyaWF0aW9uVHlwZSA9PSBGb250VHlwZTo6VmFy
aWF0aW9uVHlwZTo6VHJ1ZVR5cGVHWCAmJiBkZWZhdWx0VmFsdWVzLmNvbnRhaW5zKHt7J28nLCAn
cCcsICdzJywgJ3onfX0pOwotICAgIGJvb2wgZm9yY2VWYXJpYXRpb25zID0gZGVmYXVsdFZhbHVl
cy5jb250YWlucyh7eyd3JywgJ2cnLCAnaCcsICd0J319KSB8fCBkZWZhdWx0VmFsdWVzLmNvbnRh
aW5zKHt7J3cnLCAnZCcsICd0JywgJ2gnfX0pIHx8IChmb250U3R5bGVBeGlzID09IEZvbnRTdHls
ZUF4aXM6Oml0YWwgJiYgZGVmYXVsdFZhbHVlcy5jb250YWlucyh7eydpJywgJ3QnLCAnYScsICds
J319KSkgfHwgKGZvbnRTdHlsZUF4aXMgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiBkZWZhdWx0
VmFsdWVzLmNvbnRhaW5zKHt7J3MnLCAnbCcsICduJywgJ3QnfX0pKTsKKyAgICBib29sIGZvcmNl
T3B0aWNhbFNpemluZ09uID0gZm9udE9wdGljYWxTaXppbmcgPT0gUEFMOjpGb250T3B0aWNhbFNp
emluZzo6RW5hYmxlZCAmJiBmb250VHlwZS52YXJpYXRpb25UeXBlID09IEZvbnRUeXBlOjpWYXJp
YXRpb25UeXBlOjpUcnVlVHlwZUdYICYmIGRlZmF1bHRWYWx1ZXMuY29udGFpbnMoeyB7ICdvJywg
J3AnLCAncycsICd6JyB9IH0pOworICAgIGJvb2wgZm9yY2VWYXJpYXRpb25zID0gZGVmYXVsdFZh
bHVlcy5jb250YWlucyh7IHsgJ3cnLCAnZycsICdoJywgJ3QnIH0gfSkgfHwgZGVmYXVsdFZhbHVl
cy5jb250YWlucyh7IHsgJ3cnLCAnZCcsICd0JywgJ2gnIH0gfSkgfHwgKGZvbnRTdHlsZUF4aXMg
PT0gUEFMOjpGb250U3R5bGVBeGlzOjppdGFsICYmIGRlZmF1bHRWYWx1ZXMuY29udGFpbnMoeyB7
ICdpJywgJ3QnLCAnYScsICdsJyB9IH0pKSB8fCAoZm9udFN0eWxlQXhpcyA9PSBQQUw6OkZvbnRT
dHlsZUF4aXM6OnNsbnQgJiYgZGVmYXVsdFZhbHVlcy5jb250YWlucyh7IHsgJ3MnLCAnbCcsICdu
JywgJ3QnIH0gfSkpOwogICAgIGNvbnN0IGF1dG8mIHZhcmlhdGlvbnMgPSBmb250RGVzY3JpcHRp
b24udmFyaWF0aW9uU2V0dGluZ3MoKTsKIAogICAgIGNvbnN0IGF1dG8mIGZlYXR1cmVzID0gZm9u
dERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpOwpAQCAtNTUxLDkgKzU1MSw5IEBAIFJldGFp
blB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9u
dCwgY29uc3QgRm9udERlc2NyCiAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBjaGVjayBmb250VHlw
ZS50cmFja2luZ1R5cGUgPT0gRm9udFR5cGU6OlRyYWNraW5nVHlwZTo6TWFudWFsIGhlcmUsIGJ1
dCBpbiBvcmRlciB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHJlc3Qgb2YgdGhl
IHN5c3RlbSwgd2UgZG9uJ3QuCiAgICAgYm9vbCBub0ZvbnRGZWF0dXJlU2V0dGluZ3MgPSBmZWF0
dXJlcy5pc0VtcHR5KCk7CiAgICAgYm9vbCBub0ZvbnRWYXJpYXRpb25TZXR0aW5ncyA9ICFmb3Jj
ZVZhcmlhdGlvbnMgJiYgdmFyaWF0aW9ucy5pc0VtcHR5KCk7Ci0gICAgYm9vbCB0ZXh0UmVuZGVy
aW5nTW9kZUlzQXV0byA9IHRleHRSZW5kZXJpbmdNb2RlID09IFRleHRSZW5kZXJpbmdNb2RlOjpB
dXRvVGV4dFJlbmRlcmluZzsKKyAgICBib29sIHRleHRSZW5kZXJpbmdNb2RlSXNBdXRvID0gdGV4
dFJlbmRlcmluZ01vZGUgPT0gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJp
bmc7CiAgICAgYm9vbCB2YXJpYW50U2V0dGluZ3NJc05vcm1hbCA9IHZhcmlhbnRTZXR0aW5ncy5p
c0FsbE5vcm1hbCgpOwotICAgIGJvb2wgZG9udE5lZWRUb0FwcGx5T3B0aWNhbFNpemluZyA9IGZv
bnRPcHRpY2FsU2l6aW5nID09IEZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkICYmICFmb3JjZU9w
dGljYWxTaXppbmdPbjsKKyAgICBib29sIGRvbnROZWVkVG9BcHBseU9wdGljYWxTaXppbmcgPSBm
b250T3B0aWNhbFNpemluZyA9PSBQQUw6OkZvbnRPcHRpY2FsU2l6aW5nOjpFbmFibGVkICYmICFm
b3JjZU9wdGljYWxTaXppbmdPbjsKICAgICBib29sIGZvbnRGYWNlRG9lc250U3BlY2lmeUZlYXR1
cmVzID0gIWZvbnRDcmVhdGlvbkNvbnRleHQuZm9udEZhY2VGZWF0dXJlcygpIHx8IGZvbnRDcmVh
dGlvbkNvbnRleHQuZm9udEZhY2VGZWF0dXJlcygpLT5pc0VtcHR5KCk7CiAgICAgaWYgKG5vRm9u
dEZlYXR1cmVTZXR0aW5ncyAmJiBub0ZvbnRWYXJpYXRpb25TZXR0aW5ncyAmJiB0ZXh0UmVuZGVy
aW5nTW9kZUlzQXV0byAmJiB2YXJpYW50U2V0dGluZ3NJc05vcm1hbCAmJiBkb250TmVlZFRvQXBw
bHlPcHRpY2FsU2l6aW5nICYmIGZvbnRGYWNlRG9lc250U3BlY2lmeUZlYXR1cmVzICYmICFzaG91
bGREaXNhYmxlTGlnYXR1cmVzRm9yU3BhY2luZyAmJiBkb250TmVlZFRvQXBwbHlGb250UGFsZXR0
ZXMpIHsKICNpZiBIQVZFKENURk9OVENSRUFURUZPUkNIQVJBQ1RFUlNXSVRITEFOR1VBR0VBTkRP
UFRJT04pCkBAIC02MTMsNyArNjEzLDcgQEAgUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBs
YXRmb3JtRm9udChDVEZvbnRSZWYgb3JpZ2luYWxGb250LCBjb25zdCBGb250RGVzY3IKICAgICAg
ICAgfQogICAgICAgICBhcHBseVZhcmlhdGlvbih7eyd3JywgJ2cnLCAnaCcsICd0J319LCB3ZWln
aHQpOwogICAgICAgICBhcHBseVZhcmlhdGlvbih7eyd3JywgJ2QnLCAndCcsICdoJ319LCB3aWR0
aCk7Ci0gICAgICAgIGlmIChmb250U3R5bGVBeGlzID09IEZvbnRTdHlsZUF4aXM6Oml0YWwpCisg
ICAgICAgIGlmIChmb250U3R5bGVBeGlzID09IFBBTDo6Rm9udFN0eWxlQXhpczo6aXRhbCkKICAg
ICAgICAgICAgIGFwcGx5VmFyaWF0aW9uKHt7J2knLCAndCcsICdhJywgJ2wnfX0sIDEpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBhcHBseVZhcmlhdGlvbih7eydzJywgJ2wnLCAnbicsICd0
J319LCBzbG9wZSk7CkBAIC02MzYsNyArNjM2LDcgQEAgUmV0YWluUHRyPENURm9udFJlZj4gcHJl
cGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYgb3JpZ2luYWxGb250LCBjb25zdCBGb250RGVzY3IK
ICAgICAgICAgYXBwbHlGZWF0dXJlKG5ld0ZlYXR1cmUua2V5LCBuZXdGZWF0dXJlLnZhbHVlKTsK
IAogICAgIC8vIFN0ZXAgMTE6IE90aGVyIHByb3BlcnRpZXMKLSAgICBpZiAodGV4dFJlbmRlcmlu
Z01vZGUgPT0gVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQpIHsKKyAgICBpZiAodGV4
dFJlbmRlcmluZ01vZGUgPT0gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6T3B0aW1pemVTcGVlZCkg
ewogICAgICAgICBhcHBseUZlYXR1cmUoZm9udEZlYXR1cmVUYWcoImxpZ2EiKSwgMCk7CiAgICAg
ICAgIGFwcGx5RmVhdHVyZShmb250RmVhdHVyZVRhZygiY2xpZyIpLCAwKTsKICAgICAgICAgYXBw
bHlGZWF0dXJlKGZvbnRGZWF0dXJlVGFnKCJkbGlnIiksIDApOwpAQCAtNjkxLDcgKzY5MSw3IEBA
IFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdp
bmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAKICAgICAvLyBTdGVwIDk6IGZvbnQtb3B0aWNhbC1z
aXppbmcKICAgICAvLyBGSVhNRTogQXBwbHkgdGhpcyBiZWZvcmUgZm9udC12YXJpYXRpb24tc2V0
dGluZ3MKLSAgICBpZiAoZm9yY2VPcHRpY2FsU2l6aW5nT24gfHwgdGV4dFJlbmRlcmluZ01vZGUg
PT0gVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplTGVnaWJpbGl0eSkgeworICAgIGlmIChmb3Jj
ZU9wdGljYWxTaXppbmdPbiB8fCB0ZXh0UmVuZGVyaW5nTW9kZSA9PSBQQUw6OlRleHRSZW5kZXJp
bmdNb2RlOjpPcHRpbWl6ZUxlZ2liaWxpdHkpIHsKICNpZiBIQVZFKENPUkVURVhUX0FVVE9fT1BU
SUNBTF9TSVpJTkcpCiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGF0dHJpYnV0ZXMuZ2V0
KCksIGtDVEZvbnRPcHRpY2FsU2l6ZUF0dHJpYnV0ZSwgQ0ZTVFIoImF1dG8iKSk7CiAjZWxzZQpA
QCAtNjk5LDcgKzY5OSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZv
bnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgICAgIGF1dG8g
c2l6ZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVyQ0dGbG9hdFR5cGUsICZzaXplKSk7CiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZvbnRPcHRpY2FsU2l6ZUF0dHJpYnV0ZSwgc2l6ZU51
bWJlci5nZXQoKSk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKGZvbnRPcHRpY2FsU2l6aW5nID09
IEZvbnRPcHRpY2FsU2l6aW5nOjpEaXNhYmxlZCkgeworICAgIH0gZWxzZSBpZiAoZm9udE9wdGlj
YWxTaXppbmcgPT0gUEFMOjpGb250T3B0aWNhbFNpemluZzo6RGlzYWJsZWQpIHsKICNpZiBIQVZF
KENPUkVURVhUX0FVVE9fT1BUSUNBTF9TSVpJTkcpCiAgICAgICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKGF0dHJpYnV0ZXMuZ2V0KCksIGtDVEZvbnRPcHRpY2FsU2l6ZUF0dHJpYnV0ZSwgQ0ZTVFIo
Im5vbmUiKSk7CiAjZW5kaWYKQEAgLTgzNyw4ICs4MzcsOCBAQCBTeW50aGVzaXNQYWlyIGNvbXB1
dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVmIGZvbnQsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZgogICAgICAgICAgICAgYWN0dWFsVHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Zm9udCk7CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc1N5bnRoZXRpY0JvbGQgPSAoZm9udERlc2Ny
aXB0aW9uLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNXZWlnaHQpICYmIChkZXNpcmVk
VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCkgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJh
aXRCb2xkKTsKLSAgICBib29sIG5lZWRzU3ludGhldGljT2JsaXF1ZSA9IChmb250RGVzY3JpcHRp
b24uZm9udFN5bnRoZXNpcygpICYgRm9udFN5bnRoZXNpc1N0eWxlKSAmJiAoZGVzaXJlZFRyYWl0
cyAmIGtDVEZvbnRUcmFpdEl0YWxpYykgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOworICAgIGJvb2wgbmVlZHNTeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlwdGlvbi5m
b250U3ludGhlc2lzKCkgJiBQQUw6OkZvbnRTeW50aGVzaXNXZWlnaHQpICYmIChkZXNpcmVkVHJh
aXRzICYga0NURm9udFRyYWl0Qm9sZCkgJiYgIShhY3R1YWxUcmFpdHMgJiBrQ1RGb250VHJhaXRC
b2xkKTsKKyAgICBib29sIG5lZWRzU3ludGhldGljT2JsaXF1ZSA9IChmb250RGVzY3JpcHRpb24u
Zm9udFN5bnRoZXNpcygpICYgUEFMOjpGb250U3ludGhlc2lzU3R5bGUpICYmIChkZXNpcmVkVHJh
aXRzICYga0NURm9udFRyYWl0SXRhbGljKSAmJiAhKGFjdHVhbFRyYWl0cyAmIGtDVEZvbnRUcmFp
dEl0YWxpYyk7CiAKICAgICByZXR1cm4gU3ludGhlc2lzUGFpcihuZWVkc1N5bnRoZXRpY0JvbGQs
IG5lZWRzU3ludGhldGljT2JsaXF1ZSk7CiB9CkBAIC04NjIsMTMgKzg2MiwxMyBAQCBjbGFzcyBG
b250RGF0YWJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBGb250RGF0YWJhc2UmIHNpbmdsZXRv
bkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxGb250RGF0YWJhc2U+IGRhdGFiYXNlKEFsbG93VXNlckluc3RhbGxlZEZvbnRz
OjpZZXMpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERhdGFiYXNlPiBkYXRh
YmFzZShQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpOwogICAgICAgICByZXR1cm4g
ZGF0YWJhc2U7CiAgICAgfQogCiAgICAgc3RhdGljIEZvbnREYXRhYmFzZSYgc2luZ2xldG9uRGlz
YWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKQogICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZvbnREYXRhYmFzZT4gZGF0YWJhc2UoQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
Ok5vKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREYXRhYmFzZT4gZGF0YWJh
c2UoUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pOwogICAgICAgICByZXR1cm4gZGF0
YWJhc2U7CiAgICAgfQogCkBAIC04NzgsMTQgKzg3OCwxNCBAQCBwdWJsaWM6CiAgICAgc3RydWN0
IEluc3RhbGxlZEZvbnQgewogICAgICAgICBJbnN0YWxsZWRGb250KCkgPSBkZWZhdWx0OwogCi0g
ICAgICAgIEluc3RhbGxlZEZvbnQoQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvciwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCisgICAgICAg
IEluc3RhbGxlZEZvbnQoQ1RGb250RGVzY3JpcHRvclJlZiBmb250RGVzY3JpcHRvciwgUEFMOjpB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKICAgICAgICAg
ICAgIDogZm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IpCiAgICAgICAgICAgICAsIGNhcGFi
aWxpdGllcyhjYXBhYmlsaXRpZXNGb3JGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvcikpCiAg
ICAgICAgIHsKICNpZiBIQVZFKENURk9OVENSRUFURUZPUkNIQVJBQ1RFUlNXSVRITEFOR1VBR0VB
TkRPUFRJT04pCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0oYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpOwogI2Vsc2UKLSAgICAgICAgICAgIGlmIChhbGxvd1VzZXJJbnN0YWxsZWRGb250cyAhPSBB
bGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pCisgICAgICAgICAgICBpZiAoYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgIT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBl
RGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3Mp
KTsKICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhhdHRyaWJ1dGVz
LmdldCgpLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CkBAIC05OTEsNyArOTkxLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Rm9udERhdGFi
YXNlPjsKIAotICAgIEZvbnREYXRhYmFzZShBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cykKKyAgICBGb250RGF0YWJhc2UoUEFMOjpBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKICAgICAgICAgOiBtX2FsbG93VXNlcklu
c3RhbGxlZEZvbnRzKGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogICAgIHsKICAgICB9CkBAIC05
OTksNyArOTk5LDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fZmFtaWx5TmFtZVRvRm9udERlc2Ny
aXB0b3JzTG9jazsKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEluc3RhbGxl
ZEZvbnRGYW1pbHk+PiBtX2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9ycyBXVEZfR1VBUkRFRF9C
WV9MT0NLKG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzTG9jayk7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9yczsK
LSAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRzOwor
ICAgIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgbV9hbGxvd1VzZXJJbnN0YWxsZWRGb250
czsKIH07CiAKIC8vIEJlY2F1c2UgdGhpcyBzdHJ1Y3QgaG9sZHMgaW50ZXJtZWRpYXRlIHZhbHVl
cyB3aGljaCBtYXkgYmUgaW4gdGhlIGNvbXByZXNzZWQgLTEgLSAxIEdYIHJhbmdlLCB3ZSBkb24n
dCB3YW50IHRvIHVzZSB0aGUgcmVsYXRpdmVseSBsYXJnZQpAQCAtMTE2OCw5ICsxMTY4LDkgQEAg
c3RhdGljIGNvbnN0IEZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udCogZmluZENsb3Nlc3RGb250
KGNvbnN0IEZvbnREYXRhYmFzZTo6SW4KICAgICByZXR1cm4gJmZhbWlseUZvbnRzLmluc3RhbGxl
ZEZvbnRzW2luZGV4XTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZv
bnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6
Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseU5hbWUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCiB7Ci0gICAgYXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2luZ2xl
dG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xldG9u
RGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsKKyAgICBhdXRvJiBmb250RGF0YWJhc2Ug
PSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRz
OjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRz
KCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRz
KCk7CiAgICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZh
bWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKICAgICBpZiAoZm9udHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4geyB9OwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgc3RhdGljIGJvb2wgaXNEb3RQ
cmVmaXhlZEZvcmJpZGRlbkZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQogICAgICAgICB8
fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICIuYXBwbGVzeXN0ZW11aWZv
bnRyb3VuZGVkIik7CiB9CiAKLXN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdp
dGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCBy
ZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKK3N0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1p
bHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0
LCBmbG9hdCBzaXplLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQogewogICAgIGNvbnN0IGF1dG8mIGFsbG93bGlzdCA9IGZvbnRBbGxvd2xpc3Qo
KTsKICAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkuc3RyaW5nKCkpICYmIGFsbG93bGlzdC5z
aXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQpAQCAtMTIwOSw3ICsxMjA5LDcg
QEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9Owog
ICAgIH0KIAotICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRv
bkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRp
c2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisgICAgYXV0byYgZm9udERhdGFiYXNlID0g
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
IDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
OwogICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25G
b3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKICAgICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIFRoZSBDU1Mgc3BlYyBzdGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5
IGFjY2VwdHMgYSBuYW1lIG9mIGFuIGFjdHVhbCBmb250IGZhbWlseS4gSG93ZXZlciwgaW4gV2Vi
S2l0LCB3ZSBjbGFpbSB0byBhbHNvCkBAIC0xMjYyLDcgKzEyNjIsNyBAQCBzdGF0aWMgdm9pZCBp
bnZhbGlkYXRlRm9udENhY2hlKCkKICAgICB9KTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZv
bnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgUmV0
YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzaXplLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAg
IHN0ZDo6b3B0aW9uYWw8U3lzdGVtRm9udEtpbmQ+IHN5c3RlbURlc2lnbjsKQEAgLTEzODIsNyAr
MTM4Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgaWYgKCFmb250KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChmb250RGVzY3JpcHRpb24uc2hvdWxkQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMoKSA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pCisgICAg
aWYgKGZvbnREZXNjcmlwdGlvbi5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID09IFBB
TDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQogICAgICAgICBtX3NlZW5GYW1pbGllc0Zv
clByZXdhcm1pbmcuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUo
ZmFtaWx5KSk7CiAKICAgICBhdXRvIFtzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlXSA9
IGNvbXB1dGVOZWNlc3NhcnlTeW50aGVzaXMoZm9udC5nZXQoKSwgZm9udERlc2NyaXB0aW9uKS5i
b2xkT2JsaXF1ZVBhaXIoKTsKQEAgLTE0MjYsMjEgKzE0MjYsMjEgQEAgc3RhdGljIGJvb2wgaXNV
c2VySW5zdGFsbGVkRm9udChDVEZvbnRSZWYgZm9udCkKICNlbmRpZgogCiAjaWYgSEFWRShDVEZP
TlRDUkVBVEVGT1JDSEFSQUNURVJTV0lUSExBTkdVQUdFQU5ET1BUSU9OKQotc3RhdGljIFJldGFp
blB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBmb250LCBD
RlN0cmluZ1JlZiBsb2NhbGVTdHJpbmcsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JDaGFyYWN0ZXJzKENU
Rm9udFJlZiBmb250LCBDRlN0cmluZ1JlZiBsb2NhbGVTdHJpbmcsIFBBTDo6QWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQ0ZJbmRleCBjb3ZlcmVkTGVuZ3RoID0gMDsK
LSAgICBhdXRvIGZhbGxiYWNrT3B0aW9uID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vID8ga0NURm9udEZhbGxiYWNrT3B0aW9uU3lzdGVtIDog
a0NURm9udEZhbGxiYWNrT3B0aW9uRGVmYXVsdDsKKyAgICBhdXRvIGZhbGxiYWNrT3B0aW9uID0g
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
Tm8gPyBrQ1RGb250RmFsbGJhY2tPcHRpb25TeXN0ZW0gOiBrQ1RGb250RmFsbGJhY2tPcHRpb25E
ZWZhdWx0OwogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnNXaXRo
TGFuZ3VhZ2VBbmRPcHRpb24oZm9udCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4o
Y2hhcmFjdGVycyksIGxlbmd0aCwgbG9jYWxlU3RyaW5nLCBmYWxsYmFja09wdGlvbiwgJmNvdmVy
ZWRMZW5ndGgpKTsKIH0KICNlbHNlCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRl
Rm9udEZvckNoYXJhY3RlcnMoQ1RGb250UmVmIGZvbnQsIENGU3RyaW5nUmVmIGxvY2FsZVN0cmlu
ZywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckNo
YXJhY3RlcnMoQ1RGb250UmVmIGZvbnQsIENGU3RyaW5nUmVmIGxvY2FsZVN0cmluZywgUEFMOjpB
bGxvd1VzZXJJbnN0YWxsZWRGb250cywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBDRkluZGV4IGNvdmVyZWRMZW5ndGggPSAwOwogICAgIHJldHVybiBh
ZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnNXaXRoTGFuZ3VhZ2UoZm9udCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCwgbG9jYWxlU3Ry
aW5nLCAmY292ZXJlZExlbmd0aCkpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RG
b250UmVmPiBsb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRTZWxlY3Rpb25W
YWx1ZSBmb250V2VpZ2h0LCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUsIEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGxvb2t1cEZh
bGxiYWNrRm9udChDVEZvbnRSZWYgZm9udCwgRm9udFNlbGVjdGlvblZhbHVlIGZvbnRXZWlnaHQs
IGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBh
bGxvd1VzZXJJbnN0YWxsZWRGb250cywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID4gMCk7CiAKQEAgLTE0NTQsNyArMTQ1NCw3
IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBsb29rdXBGYWxsYmFja0ZvbnQoQ1RGb250
UmVmIGZvbnQsIEZvbnRTZWxlY3Rpb25WYWx1CiAjZW5kaWYKIAogICAgIGF1dG8gcmVzdWx0ID0g
Y3JlYXRlRm9udEZvckNoYXJhY3RlcnMoZm9udCwgbG9jYWxlU3RyaW5nLmdldCgpLCBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cywgY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICBBU1NFUlQoIWlzVXNl
ckluc3RhbGxlZEZvbnQocmVzdWx0LmdldCgpKSB8fCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzKTsKKyAgICBBU1NFUlQoIWlzVXNlckluc3Rh
bGxlZEZvbnQocmVzdWx0LmdldCgpKSB8fCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBQQUw6
OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICAvLyBDYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd29uJ3QgaW5jbHVkZSBtdWx0aXBs
ZSBjb2RlIHBvaW50cy4gIkxlbmd0aCIgaXMgdG8ga25vdyBob3cgbWFueSBjb2RlIHVuaXRzCkBA
IC0xNTUzLDkgKzE1NTMsOSBAQCBzdGQ6Om9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiB9CiAKLXZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENG
TXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMg
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCit2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRG
b250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIFBBTDo6QWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7Ci0gICAgaWYgKGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykgeworICAgIGlm
IChhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRz
OjpObykgewogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLCBrQ1RGb250
VXNlckluc3RhbGxlZEF0dHJpYnV0ZSwga0NGQm9vbGVhbkZhbHNlKTsKICAgICAgICAgQ1RGb250
RmFsbGJhY2tPcHRpb24gZmFsbGJhY2tPcHRpb24gPSBrQ1RGb250RmFsbGJhY2tPcHRpb25TeXN0
ZW07CiAgICAgICAgIGF1dG8gZmFsbGJhY2tPcHRpb25OdW1iZXIgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZmYWxsYmFj
a09wdGlvbikpOwpAQCAtMTU2Myw3ICsxNTYzLDcgQEAgdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5z
dGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXIK
ICAgICB9CiB9CiAKLVJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRG
b250cyhDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnREZXNjcmlwdG9yLCBDR0Zsb2F0IHNpemUsIEFs
bG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorUmV0YWluUHRy
PENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udERlc2NyaXB0b3JS
ZWYgZm9udERlc2NyaXB0b3IsIENHRmxvYXQgc2l6ZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRG
b250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOwogICAgIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhhdHRyaWJ1dGVz
LmdldCgpLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CkBAIC0xNTc0LDcgKzE1NzQsNyBAQCBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMoQ1RGb250RGVz
Y3JpcHRvclJlZiBmb250RGVzY3JpcAogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZVdp
dGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvciwgc2l6ZSwgbnVsbHB0cikpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNGb250TWF0Y2hpbmdVc2VySW5zdGFsbGVkRm9udEZhbGxiYWNr
KENURm9udFJlZiBmb250LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvbnRNYXRjaGluZ1VzZXJJbnN0YWxsZWRG
b250RmFsbGJhY2soQ1RGb250UmVmIGZvbnQsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMg
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgYm9vbCB3aWxsRmFsbGJhY2tUb1N5c3Rl
bU9ubHkgPSBmYWxzZTsKICAgICBpZiAoYXV0byBmb250RmFsbGJhY2tPcHRpb25BdHRyaWJ1dGVS
ZWYgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDVEZvbnRDb3B5QXR0cmlidXRl
KGZvbnQsIGtDVEZvbnRGYWxsYmFja09wdGlvbkF0dHJpYnV0ZSkpKSkgewpAQCAtMTU4MywxMSAr
MTU4MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNGb250TWF0Y2hpbmdVc2VySW5zdGFsbGVk
Rm9udEZhbGxiYWNrKENURm9udFJlZiBmb250LCBBbGxvdwogICAgICAgICB3aWxsRmFsbGJhY2tU
b1N5c3RlbU9ubHkgPSBmb250RmFsbGJhY2tPcHRpb25BdHRyaWJ1dGUgPT0ga0NURm9udEZhbGxi
YWNrT3B0aW9uU3lzdGVtOwogICAgIH0KIAotICAgIGJvb2wgc2hvdWxkRmFsbGJhY2tUb1N5c3Rl
bU9ubHkgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250
czo6Tm87CisgICAgYm9vbCBzaG91bGRGYWxsYmFja1RvU3lzdGVtT25seSA9IGFsbG93VXNlcklu
c3RhbGxlZEZvbnRzID09IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vOwogICAgIHJl
dHVybiB3aWxsRmFsbGJhY2tUb1N5c3RlbU9ubHkgPT0gc2hvdWxkRmFsbGJhY2tUb1N5c3RlbU9u
bHk7CiB9CiAKLVJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250
cyhDVEZvbnRSZWYgZm9udCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCitSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9u
dHMoQ1RGb250UmVmIGZvbnQsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpCiB7CiAgICAgaWYgKGlzRm9udE1hdGNoaW5nVXNlckluc3RhbGxlZEZv
bnRGYWxsYmFjayhmb250LCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykpCiAgICAgICAgIHJldHVy
biBmb250OwpAQCAtMTYwMSwxOCArMTYwMSwxOCBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVh
dGVGb250Rm9ySW5zdGFsbGVkRm9udHMoQ1RGb250UmVmIGZvbnQsIEFsbG93VXNlckluc3RhbAog
ICAgIHJldHVybiBmb250OwogfQogCi12b2lkIGFkZEF0dHJpYnV0ZXNGb3JXZWJGb250cyhDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQordm9pZCBhZGRBdHRyaWJ1dGVzRm9yV2ViRm9udHMoQ0ZN
dXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZv
bnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewotICAgIGlmIChhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pIHsKKyAgICBpZiAoYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgPT0gUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pIHsK
ICAgICAgICAgQ1RGb250RmFsbGJhY2tPcHRpb24gZmFsbGJhY2tPcHRpb24gPSBrQ1RGb250RmFs
bGJhY2tPcHRpb25TeXN0ZW07CiAgICAgICAgIGF1dG8gZmFsbGJhY2tPcHRpb25OdW1iZXIgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2
NFR5cGUsICZmYWxsYmFja09wdGlvbikpOwogICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShh
dHRyaWJ1dGVzLCBrQ1RGb250RmFsbGJhY2tPcHRpb25BdHRyaWJ1dGUsIGZhbGxiYWNrT3B0aW9u
TnVtYmVyLmdldCgpKTsKICAgICB9CiB9CiAKLVJldGFpblB0cjxDRlNldFJlZj4gaW5zdGFsbGVk
Rm9udE1hbmRhdG9yeUF0dHJpYnV0ZXMoQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpCitSZXRhaW5QdHI8Q0ZTZXRSZWY+IGluc3RhbGxlZEZvbnRNYW5kYXRv
cnlBdHRyaWJ1dGVzKFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCiB7Ci0gICAgaWYgKGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzOjpObykgeworICAgIGlmIChhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
PSBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObykgewogICAgICAgICBDRlR5cGVSZWYg
bWFuZGF0b3J5QXR0cmlidXRlc1ZhbHVlc1tdID0geyBrQ1RGb250RmFtaWx5TmFtZUF0dHJpYnV0
ZSwga0NURm9udFBvc3RTY3JpcHROYW1lQXR0cmlidXRlLCBrQ1RGb250RW5hYmxlZEF0dHJpYnV0
ZSwga0NURm9udFVzZXJJbnN0YWxsZWRBdHRyaWJ1dGUsIGtDVEZvbnRGYWxsYmFja09wdGlvbkF0
dHJpYnV0ZSB9OwogICAgICAgICByZXR1cm4gYWRvcHRDRihDRlNldENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBtYW5kYXRvcnlBdHRyaWJ1dGVzVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKG1h
bmRhdG9yeUF0dHJpYnV0ZXNWYWx1ZXMpLCAma0NGVHlwZVNldENhbGxCYWNrcykpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5oCmluZGV4IDAwMzVhYmExZDNmNDQ5ZTJlNGZhNzY1MzFmMGM0MDg5
MDVmODVkOTYuLmY1MGQzY2UyODYwZWFiOTkyNmU3OWY4Y2IwZWRiZmM1N2I0NTllZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuaApAQCAtNjUsMTMgKzY1LDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxGb250
VGFnLCBWYXJpYXRpb25EZWZhdWx0cywgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0
ZXJUCiBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udENyZWF0aW9uQ29udGV4dCYsIGJvb2wg
YXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBjbGFzcyBTaG91
bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3ludGhlc2lzUGFp
ciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2Fs
VHJhaXRzOjpObywgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFpblB0cjxDVEZv
bnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBG
b250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOworUmV0
YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0LCBQQUw6OlRleHRSZW5kZXJpbmdNb2RlLCBm
bG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9u
dERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJlZik7Ci12b2lkIGFkZEF0dHJpYnV0ZXNGb3JJ
bnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0
YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxs
ZWRGb250cyhDVEZvbnRSZWYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKLXZvaWQgYWRkQXR0
cmlidXRlc0ZvcldlYkZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpOwotUmV0YWluUHRyPENGU2V0UmVmPiBpbnN0YWxsZWRGb250
TWFuZGF0b3J5QXR0cmlidXRlcyhBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Cit2b2lkIGFkZEF0
dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0
ZXMsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworUmV0YWluUHRyPENURm9udFJlZj4g
Y3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQg
c2l6ZSwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CitSZXRhaW5QdHI8Q1RGb250UmVm
PiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMoQ1RGb250UmVmLCBQQUw6OkFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKTsKK3ZvaWQgYWRkQXR0cmlidXRlc0ZvcldlYkZvbnRzKENGTXV0YWJsZURp
Y3Rpb25hcnlSZWYgYXR0cmlidXRlcywgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CitS
ZXRhaW5QdHI8Q0ZTZXRSZWY+IGluc3RhbGxlZEZvbnRNYW5kYXRvcnlBdHRyaWJ1dGVzKFBBTDo6
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCiBWYXJpYXRpb25EZWZhdWx0c01hcCBkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKENURm9udFJlZiwgU2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERl
c2NyaXB0aW9uQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCmluZGV4IDVhNGVjZTY5MjgxYTdmNjYxYzI1M2Zm
Nzk1NjU2NzE3Nzk5OGNkYTAuLmJiYWRiMmM4YjhjMTc4NTQxMDg2M2JjZmE5ZDc5ZmU0Njg2MzIx
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnREZXNjcmlwdGlvbkNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgc3Rh
dGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBtYXRjaFN5c3RlbUZvbnRV
c2UoY29uc3QgQXRvbVN0cmluZyYKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1zdGF0
aWMgaW5saW5lIFZlY3RvcjxSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IHN5c3RlbUZv
bnRDYXNjYWRlTGlzdChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBB
dG9tU3RyaW5nJiBjc3NGYW1pbHksIFN5c3RlbUZvbnRLaW5kIHN5c3RlbUZvbnRLaW5kLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBpbmxp
bmUgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gc3lzdGVtRm9udENhc2Nh
ZGVMaXN0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJp
bmcmIGNzc0ZhbWlseSwgU3lzdGVtRm9udEtpbmQgc3lzdGVtRm9udEtpbmQsIFBBTDo6QWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJu
IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpzaW5nbGV0b24oKS5jYXNjYWRlTGlzdChkZXNj
cmlwdGlvbiwgY3NzRmFtaWx5LCBzeXN0ZW1Gb250S2luZCwgYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuY3BwCmluZGV4IDU3
NjJlMDg5M2Q5OTNiNDM5YjkwNTg5MmIxNjI1Njc2MDliNWJkNWIuLmY4YTEzNDRlNjFmYjc0ODVm
ZDk1YThmNjYwZjMwODVkMTQzMWUzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VD
b3JlVGV4dC5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIFN5c3RlbUZvbnREYXRhYmFzZUNv
cmVUZXh0OjpjbGVhcigpCiAgICAgbV9tb25vc3BhY2VGYW1pbGllcy5jbGVhcigpOwogfQogCi1S
ZXRhaW5QdHI8Q1RGb250UmVmPiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Y3JlYXRlRm9u
dEJ5QXBwbHlpbmdXZWlnaHRXaWR0aEl0YWxpY3NBbmRGYWxsYmFja0JlaGF2aW9yKENURm9udFJl
ZiBmb250LCBDR0Zsb2F0IHdlaWdodCwgQ0dGbG9hdCB3aWR0aCwgYm9vbCBpdGFsaWMsIGZsb2F0
IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBD
RlN0cmluZ1JlZiBkZXNpZ24pCitSZXRhaW5QdHI8Q1RGb250UmVmPiBTeXN0ZW1Gb250RGF0YWJh
c2VDb3JlVGV4dDo6Y3JlYXRlRm9udEJ5QXBwbHlpbmdXZWlnaHRXaWR0aEl0YWxpY3NBbmRGYWxs
YmFja0JlaGF2aW9yKENURm9udFJlZiBmb250LCBDR0Zsb2F0IHdlaWdodCwgQ0dGbG9hdCB3aWR0
aCwgYm9vbCBpdGFsaWMsIGZsb2F0IHNpemUsIFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHMg
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIENGU3RyaW5nUmVmIGRlc2lnbikKIHsKICAgICBhdXRv
IHdlaWdodE51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga0NGTnVtYmVyQ0dGbG9hdFR5cGUsICZ3ZWlnaHQpKTsKICAgICBhdXRvIHdpZHRoTnVtYmVy
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJD
R0Zsb2F0VHlwZSwgJndpZHRoKSk7CkBAIC0yNDAsNyArMjQwLDcgQEAgc3RhdGljIENHRmxvYXQg
bWFwV2lkdGgoRm9udFNlbGVjdGlvblZhbHVlIHdpZHRoKQogICAgIHJldHVybiBwaWVjZXdpc2VQ
b2ludHNbc3RkOjpzaXplKHBpZWNld2lzZVBvaW50cykgLSAxXS5vdXRwdXQ7CiB9CiAKLVN5c3Rl
bUZvbnREYXRhYmFzZUNvcmVUZXh0OjpDYXNjYWRlTGlzdFBhcmFtZXRlcnMgU3lzdGVtRm9udERh
dGFiYXNlQ29yZVRleHQ6OnN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIFN5c3RlbUZvbnRL
aW5kIHN5c3RlbUZvbnRLaW5kLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKK1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpDYXNjYWRlTGlzdFBhcmFt
ZXRlcnMgU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OnN5c3RlbUZvbnRQYXJhbWV0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUsIFN5c3RlbUZvbnRLaW5kIHN5c3RlbUZvbnRLaW5kLCBQQUw6OkFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIENhc2NhZGVMaXN0UGFy
YW1ldGVycyByZXN1bHQ7CiAgICAgcmVzdWx0LmxvY2FsZSA9IGRlc2NyaXB0aW9uLmNvbXB1dGVk
TG9jYWxlKCk7CkBAIC0yODQsNyArMjg0LDcgQEAgU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6
OkNhc2NhZGVMaXN0UGFyYW1ldGVycyBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6c3kKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JS
ZWY+PiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Y2FzY2FkZUxpc3QoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgY3NzRmFtaWx5LCBTeXN0
ZW1Gb250S2luZCBzeXN0ZW1Gb250S2luZCwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+
PiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Y2FzY2FkZUxpc3QoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgY3NzRmFtaWx5LCBTeXN0ZW1G
b250S2luZCBzeXN0ZW1Gb250S2luZCwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICByZXR1cm4gY2FzY2FkZUxpc3Qoc3lzdGVtRm9u
dFBhcmFtZXRlcnMoZGVzY3JpcHRpb24sIGNzc0ZhbWlseSwgc3lzdGVtRm9udEtpbmQsIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKSwgc3lzdGVtRm9udEtpbmQpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29y
ZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZv
bnREYXRhYmFzZUNvcmVUZXh0LmgKaW5kZXggOWFkMWUwY2M0NTBmMGVhYTgyOTgxNzM1NTk3ODAw
YWMwODA0OTZkNC4uMjlhYmY2MzlmNzMwOTM5NWZlMjQ5ZGE1YmY2NDA3OGNhM2YwMzBkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9u
dERhdGFiYXNlQ29yZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCkBAIC04NiwxMyArODYsMTMgQEAg
cHVibGljOgogICAgICAgICBDR0Zsb2F0IHdlaWdodCB7IDAgfTsKICAgICAgICAgQ0dGbG9hdCB3
aWR0aCB7IDAgfTsKICAgICAgICAgZmxvYXQgc2l6ZSB7IDAgfTsKLSAgICAgICAgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgeyBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6Tm8gfTsKKyAgICAgICAgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cyB7IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vIH07
CiAgICAgICAgIGJvb2wgaXRhbGljIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgc3RhdGljIFN5
c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0JiBzaW5nbGV0b24oKTsKIAotICAgIFZlY3RvcjxSZXRh
aW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4+IGNhc2NhZGVMaXN0KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGNzc0ZhbWlseSwgU3lzdGVtRm9udEtpbmQsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICBWZWN0b3I8UmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+PiBjYXNjYWRlTGlzdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3Ry
aW5nJiBjc3NGYW1pbHksIFN5c3RlbUZvbnRLaW5kLCBQQUw6OkFsbG93VXNlckluc3RhbGxlZEZv
bnRzKTsKIAogICAgIFN0cmluZyBzZXJpZkZhbWlseShjb25zdCBTdHJpbmcmIGxvY2FsZSk7CiAg
ICAgU3RyaW5nIHNhbnNTZXJpZkZhbWlseShjb25zdCBTdHJpbmcmIGxvY2FsZSk7CkBAIC0xMTEs
MTAgKzExMSwxMCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZVN5
c3RlbURlc2lnbkZvbnQoU3lzdGVtRm9udEtpbmQsIGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVy
cyYpOwogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZVRleHRTdHlsZUZvbnQoY29uc3Qg
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJik7CiAKLSAgICBzdGF0aWMgUmV0YWluUHRyPENURm9udFJl
Zj4gY3JlYXRlRm9udEJ5QXBwbHlpbmdXZWlnaHRXaWR0aEl0YWxpY3NBbmRGYWxsYmFja0JlaGF2
aW9yKENURm9udFJlZiwgQ0dGbG9hdCB3ZWlnaHQsIENHRmxvYXQgd2lkdGgsIGJvb2wgaXRhbGlj
LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cywgQ0ZTdHJpbmdSZWYgZGVzaWdu
ID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRC
eUFwcGx5aW5nV2VpZ2h0V2lkdGhJdGFsaWNzQW5kRmFsbGJhY2tCZWhhdmlvcihDVEZvbnRSZWYs
IENHRmxvYXQgd2VpZ2h0LCBDR0Zsb2F0IHdpZHRoLCBib29sIGl0YWxpYywgZmxvYXQgc2l6ZSwg
UEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cywgQ0ZTdHJpbmdSZWYgZGVzaWduID0gbnVsbHB0
cik7CiAgICAgc3RhdGljIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiByZW1vdmVDYXNj
YWRlTGlzdChDVEZvbnREZXNjcmlwdG9yUmVmKTsKICAgICBzdGF0aWMgVmVjdG9yPFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPj4gY29tcHV0ZUNhc2NhZGVMaXN0KENURm9udFJlZiwgQ0ZT
dHJpbmdSZWYgbG9jYWxlKTsKLSAgICBzdGF0aWMgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzIHN5c3Rl
bUZvbnRQYXJhbWV0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseU5hbWUsIFN5c3RlbUZvbnRLaW5kLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7Cisg
ICAgc3RhdGljIENhc2NhZGVMaXN0UGFyYW1ldGVycyBzeXN0ZW1Gb250UGFyYW1ldGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBTeXN0ZW1G
b250S2luZCwgUEFMOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKICAgICBIYXNoTWFwPENh
c2NhZGVMaXN0UGFyYW1ldGVycywgVmVjdG9yPFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVm
Pj4sIENhc2NhZGVMaXN0UGFyYW1ldGVyczo6SGFzaCwgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENh
c2NhZGVMaXN0UGFyYW1ldGVycz4+IG1fc3lzdGVtRm9udENhY2hlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4
dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZDQzYmU2OTMxY2FmMTFlYWU4
MGI1ODBjY2IyZDk1YTA5MjA1OWI0Ni4uNjY0ZjkyNTk0MDkyNDQ1ZTRhZjFiNzU3NTMyYjAyZDQx
Y2Y1NWIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNw
cApAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29uCiAgICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdN
b2RlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRl
eHQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3Zv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQm
IGZvbnQsIFBBTDo6Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBBU1NF
UlQoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KENURm9udEdldE1hdHJpeChmb250LnBsYXRm
b3JtRGF0YSgpLmN0Rm9udCgpKSkpOwogCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYgZm9udCwgRm9u
dFNtb290aGluZ00KICAgICBtX3Ntb290aGluZ01vZGUgPSBzbW9vdGhpbmdNb2RlOwogCiAgICAg
bV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7Ci0g
ICAgaWYgKGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRp
b246OlZlcnRpY2FsKQorICAgIGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQogICAgICAgICBtX29yaWdpbmFsVGV4
dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgbV9vcmlnaW5hbFRleHRN
YXRyaXgpOwogCiAgICAgYXV0byYgY29udGV4dFN0YXRlID0gbV9vd25lci5zdGF0ZSgpOwpAQCAt
MzM5LDcgKzMzOSw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhz
KENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgLy8gYEZvbnRDYXNj
YWRlOjpkcmF3R2x5cGhzYCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBvcmlnaW5hbCBhZHZh
bmNlcyBmcm9tIHRoZSByZXN1bHRpbmcKICAgICAvLyBwb3NpdGlvbnMgYnkgaW52ZXJ0aW5nIHRo
ZSBvcGVyYXRpb25zIGFwcGxpZWQgdG8gdGhlIG9yaWdpbmFsIGFkdmFuY2VzLgogICAgIGF1dG8g
dGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0cml4OwotICAgIGlmIChmb250LT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAg
ICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRPcmll
bnRhdGlvbjo6VmVydGljYWwpIHsKICAgICAgICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgYXMgdGhl
IGludmVyc2Ugb2YgYGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0aW9uc2AuCiAgICAg
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdHbHlwaHNS
ZWNvcmRlcmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0ZXh0KQog
ICAgIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBzdGF0aWMgR2x5cGhzQW5kQWR2YW5jZXMgZmlsdGVy
T3V0T1RTVkdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIFBB
TDo6Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBpZiAobV9kZWNvbnN0
cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykgewogICAgICAgICBt
X293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVt
R2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENH
RmxvYXQgZm9udFNpemUsIENUTGluZQogICAgIG1fb3duZXIudHJhbnNsYXRlKGxpbmVSZWN0Lm9y
aWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUuaGVpZ2h0KTsKICAgICBt
X293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCi0gICAgcHJlcGFyZUludGVybmFsQ29u
dGV4dChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkpLCBGb250
U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgcHJlcGFyZUludGVybmFs
Q29udGV4dChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkpLCBQ
QUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKICAgICBDR0NvbnRl
eHRTZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAw
LCAwKTsKICAgICBDVExpbmVEcmF3KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNTExZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYy
YWI4ZWQyZS4uNTk0MTQyYzgyNzYxYTA5YjUzNzNmYmNkMWQ2ODFjNTAzNWEwYjVmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1Gb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgZm9udERhdGEsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQor
Rm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRh
LCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogICAgIDogbV9mb250
cyhGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGVGb3JQbGF0Zm9ybUZvbnQoZm9udERhdGEpKQogICAg
ICwgbV9lbmFibGVLZXJuaW5nKGNvbXB1dGVFbmFibGVLZXJuaW5nKCkpCiAgICAgLCBtX3JlcXVp
cmVzU2hhcGluZyhjb21wdXRlUmVxdWlyZXNTaGFwaW5nKCkpCkBAIC03MCw3ICs3MCw3IEBAIEFm
ZmluZVRyYW5zZm9ybSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoY29uc3QgRm9udCYgZm9udCkK
ICAgICByZXN1bHQuc2V0RCgtcmVzdWx0LmQoKSk7CiAgICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50
aGV0aWNPYmxpcXVlKCkpIHsKICAgICAgICAgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKGRlZzJy
YWQoRm9udENhc2NhZGU6OnN5bnRoZXRpY09ibGlxdWVBbmdsZSgpKSk7Ci0gICAgICAgIGlmIChw
bGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7
CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRPcmll
bnRhdGlvbjo6VmVydGljYWwpIHsKICAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2soKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBBZmZpbmVUcmFuc2Zvcm0o
MSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApICogcmVzdWx0OwogICAgICAgICAgICAgZWxzZQpA
QCAtOTAsNyArOTAsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4
KGNvbnN0IEZvbnQmIGZvbnQpCiAKIEFmZmluZVRyYW5zZm9ybSBjb21wdXRlVmVydGljYWxUZXh0
TWF0cml4KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcHJldmlvdXNU
ZXh0TWF0cml4KQogewotICAgIEFTU0VSVF9VTlVTRUQoZm9udCwgZm9udC5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOworICAgIEFTU0VS
VF9VTlVTRUQoZm9udCwgZm9udC5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCk7CiAgICAgLy8gVGhlIHRyYW5zbGF0aW9uIGhlcmUg
KCJlIiBhbmQgImYiIGZpZWxkcykgYXJlIGlycmVsZXZhbnQsIGJlY2F1c2UKICAgICAvLyB0aGlz
IG1hdHJpeCBpcyBpbnZlcnRlZCBpbiBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlv
bnMgdG8gcGxhY2UgdGhlIGdseXBocyBpbiB0aGUgQ1RNJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAg
ICAgLy8gQWxsIHdlJ3JlIHRyeWluZyB0byBkbyBoZXJlIGlzIHJvdGF0ZSB0aGUgdGV4dCBtYXRy
aXggc28gZ2x5cGhzIGFwcGVhciB2aXN1YWxseSB1cHJpZ2h0LgpAQCAtMTU5LDcgKzE1OSw3IEBA
IHN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHCiAKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBw
bGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwogICAgIFZlY3RvcjxDR1BvaW50LCAy
NTY+IHBvc2l0aW9ucyhjb3VudCk7Ci0gICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigp
ID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICBpZiAocGxhdGZvcm1EYXRhLm9y
aWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAg
IFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChm
b250LCB0ZXh0TWF0cml4KSwgY29udGV4dCk7CiAKICAgICAgICAgVmVjdG9yPENHU2l6ZSwgMjU2
PiB0cmFuc2xhdGlvbnMoY291bnQpOwpAQCAtMTg4LDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIHNl
dENHRm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIENHQ29u
dGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxR
dWFudGl6YXRpb24pOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgUEFMOjpGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGNvbnN0IGF1dG8mIHBsYXRmb3JtRGF0YSA9IGZv
bnQucGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtMjA1
LDE3ICsyMDUsMTcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICBib29sIHNob3VsZFNt
b290aEZvbnRzID0gdHJ1ZTsKIAogICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkK
LSAgICAgICAgc21vb3RoaW5nTW9kZSA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsK
KyAgICAgICAgc21vb3RoaW5nTW9kZSA9IFBBTDo6Rm9udFNtb290aGluZ01vZGU6Ok5vU21vb3Ro
aW5nOwogCiAgICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21vb3Ro
aW5nTW9kZTo6QW50aWFsaWFzZWQ6CisgICAgY2FzZSBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlOjpB
bnRpYWxpYXNlZDoKICAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKLSAgICBj
YXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgorICAgIGNhc2UgUEFM
OjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKKyAgICBjYXNlIFBBTDo6Rm9udFNt
b290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ6CiAgICAgICAgIHNob3VsZEFudGlhbGlh
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5v
U21vb3RoaW5nOgorICAgIGNhc2UgUEFMOjpGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6
CiAgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOwogICAgICAgICBzaG91bGRTbW9vdGhG
b250cyA9IGZhbHNlOwogICAgICAgICBicmVhazsKQEAgLTMyMiwxMSArMzIyLDExIEBAIGNvbnN0
IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlCiAgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAm
JiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFi
aWMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCi0gICAgICAgIGlmIChmb250LT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwp
IHsKKyAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFM
OjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CiAgICAgICAgICAgICBpZiAoaXNDSktJZGVv
Z3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSkgewogICAgICAgICAgICAgICAgIGlmICghZm9u
dC0+aGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZmb250
LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fZm9udERl
c2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0
aW9uOjpNaXhlZCkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5u
b25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gUEFMOjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpN
aXhlZCkgewogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRGb250ID0g
Zm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpOwogICAgICAgICAgICAgICAgIEds
eXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250LmdseXBoRm9yQ2hhcmFj
dGVyKGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5
cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCmlu
ZGV4IDM2ZGQ3MGNiNWE2ZDI0ZWRjOTcyODBhNzY0MTQ3ZDU4NTljNDJkNTcuLjRlMmQzNzdlN2Q4
NDE5NWIxZmM1YzFlYzA2NjAwZDUzMTJmMDEyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcApAQCAt
MjA1LDcgKzIwNSw3IEBAIHZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKICAgICB9CiAjZW5kaWYK
ICAgICAKLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50
YXRpb246OlZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgaWYg
KHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250T3JpZW50YXRpb246OlZl
cnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCiAgICAgICAgIG1faGFzVmVy
dGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250
KCkpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lk
IEZvbnQ6OnBsYXRmb3JtSW5pdCgpCiAKICAgICBDR0Zsb2F0IHhIZWlnaHQgPSAwOwogICAgIGlm
IChtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSB7CisgICAgICAgIGlm
IChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFBBTDo6Rm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsKSB7CiAgICAgICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVy
ICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNl
bGluZSwgYW5kIHdlIG5lZWQgdGhlCiAgICAgICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0
byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhl
IGJhc2VsaW5lLgogICAgICAgICAgICAgR2x5cGggeEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIo
J3gnKTsKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5p
dCgpCiAgICAgaW5pdENoYXJXaWR0aHMoKTsKIH0KIAotYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1
cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENh
cHMsIFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAorYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBv
cnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKFBBTDo6Rm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50
Q2FwcywgVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0CiB7CiAjaWYgKFBMQVRGT1JNKElPU19GQU1J
TFkpICYmIFRBUkdFVF9PU19JT1MpIHx8IFBMQVRGT1JNKE1BQykKICAgICBHbHlwaCBnbHlwaCA9
IGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CkBAIC0yNzksMTkgKzI3OSwxOSBAQCBib29s
IEZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlh
bnRDYXBzIGZvbnRWYXJpYW50QwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2gg
KGZvbnRWYXJpYW50Q2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewor
ICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OlNtYWxsOiB7CiAgICAgICAgIGF1dG8mIHN1
cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCk7CiAgICAgICAgIHJldHVybiBz
dXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7CiAgICAgfQot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6IHsKKyAgICBjYXNlIFBBTDo6Rm9udFZh
cmlhbnRDYXBzOjpQZXRpdGU6IHsKICAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3Vw
cG9ydGVkQnlQZXRpdGVDYXBzKCk7CiAgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4g
Z2x5cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7CiAgICAgfQotICAgIGNhc2UgRm9udFZhcmlh
bnRDYXBzOjpBbGxTbWFsbDogeworICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFNt
YWxsOiB7CiAgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzKCk7CiAgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3Vw
cG9ydGVkLmdldChnbHlwaCk7CiAgICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxQ
ZXRpdGU6IHsKKyAgICBjYXNlIFBBTDo6Rm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU6IHsKICAg
ICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKCk7
CiAgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdl
dChnbHlwaCk7CiAgICAgfQpAQCAtMzAzLDEwICszMDMsMTAgQEAgYm9vbCBGb250Ojp2YXJpYW50
Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFy
aWFudEMKICAgICBVTlVTRURfUEFSQU0oY2hhcmFjdGVyKTsKIAogICAgIHN3aXRjaCAoZm9udFZh
cmlhbnRDYXBzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOgotICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNt
YWxsOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU6CisgICAgY2FzZSBQQUw6
OkZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBQQUw6OkZvbnRWYXJpYW50Q2Fwczo6
UGV0aXRlOgorICAgIGNhc2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAgIGNh
c2UgUEFMOjpGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2
YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KQEAgLTQwNCw3ICs0MDQsNyBAQCBjb25z
dCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0
CiB9CiAjZW5kaWYKIAotc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChD
VEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBD
VEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljLCBGb250V2lkdGhWYXJpYW50IGZvbnRXaWR0aFZhcmlhbnQsIFRleHRS
ZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlLCBjb25zdCBGb250UGxhdGZvcm1EYXRhOjpD
cmVhdGlvbkRhdGEqIGNyZWF0aW9uRGF0YSkKK3N0YXRpYyBSZWZQdHI8Rm9udD4gY3JlYXRlRGVy
aXZhdGl2ZUZvbnQoQ1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIFBBTDo6Rm9udE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBQQUw6OkZvbnRXaWR0aFZhcmlhbnQg
Zm9udFdpZHRoVmFyaWFudCwgUEFMOjpUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9k
ZSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YTo6Q3JlYXRpb25EYXRhKiBjcmVhdGlvbkRhdGEpCiB7
CiAgICAgaWYgKCFmb250KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU3Niw3ICs1NzYs
NyBAQCBmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOwogCiAgICAgaWYgKHBsYXRmb3JtRGF0
YSgpLnNpemUoKSkgewotICAgICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKKyAgICAgICAgYm9v
bCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBQQUw6OkZvbnRP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKICAgICAgICAgQ1RGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24gPSBob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/IGtDVEZv
bnRPcmllbnRhdGlvbkhvcml6b250YWwgOiBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbDsKICNp
ZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNfV09SS0FST1VORCkKICAgICAgICAgQ0dGb250UmVuZGVy
aW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dG
b250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0
eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRl
cmVkOwpAQCAtNTkzLDcgKzU5Myw3IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKIAogI2VuZGlmCiAKLUdseXBoQnVmZmVyQWR2YW5jZSBGb250
OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdp
bm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFi
bGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxl
LCBTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKK0ds
eXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdT
dHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29u
c3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uKSBjb25zdAogewogICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBp
bmcpOwogCkBAIC02MjQsNyArNjI0LDcgQEAgR2x5cGhCdWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5
VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGJlZ2kKICAgICAv
LyBGSVhNRTogRW5hYmxlIGtlcm5pbmcgZm9yIHNpbmdsZSBnbHlwaHMgd2hlbiByZGFyOi8vODIx
OTU0MDUgaXMgZml4ZWQKICAgICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRT
aGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KICAgICAgICAgfCAoZW5hYmxlS2VybmluZyAmJiBu
dW1iZXJPZklucHV0R2x5cGhzID8ga0NURm9udFNoYXBlV2l0aEtlcm5pbmcgOiAwKQotICAgICAg
ICB8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCA/IGtDVEZvbnRTaGFwZVJp
Z2h0VG9MZWZ0IDogMCk7CisgICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRvTGVmdCA6IDApOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5k
ZXg7ICsraSkKICAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0ds
eXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0luZGV4OwpAQCAtNzIxLDcgKzcyMSw3IEBA
IEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpCiAgICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIENURm9u
dFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwgb3JkZXIgYnV0IHJl
dHVybnMgaXQgaW4gcGh5c2ljYWwKICAgICAvLyBvcmRlciwgd2hpY2ggbWVhbnMgdGhlIHNlY29u
ZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBleGVjdXRlIHdoZW4K
ICAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0gICAgaWYgKHRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJl
Z2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5k
ZXgpOwogCiAgICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5p
bmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwga0NURm9udFRyYW5z
Zm9ybUFwcGx5U2hhcGluZzsKQEAgLTczMSw3ICs3MzEsNyBAQCBHbHlwaEJ1ZmZlckFkdmFuY2Ug
Rm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQg
YmVnaQogI2VuZGlmCiAKICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgaW4gdGhpcyBmdW5j
dGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkgaXMuCi0gICAgaWYgKHRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJl
Z2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5k
ZXgpOwogCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwpAQCAtNzc5LDcgKzc3OSw3IEBAIEZs
b2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICBDR1JlY3QgaWdub3JlZFJlY3QgPSB7
IH07Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1f
cGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtD
VEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwsICZnbHlwaCwgJmlnbm9yZWRSZWN0LCAxKTsKKyAg
ICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gUEFMOjpGb250
T3JpZW50YXRpb246OlZlcnRpY2FsID8ga0NURm9udE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RG
b250T3JpZW50YXRpb25Ib3Jpem9udGFsLCAmZ2x5cGgsICZpZ25vcmVkUmVjdCwgMSk7CiAgICAg
Ym91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKICAgICBib3VuZGluZ0JveC5z
ZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKaW5kZXggNTlkMjE2Njc5
ZDJmZTRjODBjNjlhYWE3MWYzOTIxZDYyNTdhYWM5YS4uODJlN2I3NDZhMzA1NTYzMDU0ZjAyNmQ3
Njk1ZDUzMDMwNjJlZjQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRl
eHQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShSZXRhaW5QdHI8Q1RGb250UmVmPiYmIGZvbnQs
IGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBG
b250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50
LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSwgY29uc3QgQ3JlYXRpb25EYXRh
KiBjcmVhdGlvbkRhdGEpCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFJldGFp
blB0cjxDVEZvbnRSZWY+JiYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIFBBTDo6Rm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBQ
QUw6OkZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBQQUw6OlRleHRSZW5kZXJpbmdNb2Rl
IHRleHRSZW5kZXJpbmdNb2RlLCBjb25zdCBDcmVhdGlvbkRhdGEqIGNyZWF0aW9uRGF0YSkKICAg
ICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1
ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUsIGNyZWF0aW9u
RGF0YSkKIHsKICAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwpAQCAtNzMsMTkgKzczLDE5IEBA
IENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpyZWdpc3RlcmVkRm9udCgpIGNvbnN0CiB9CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKLWlubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RG
ZWF0dXJlU2VsZWN0b3IoRm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQoraW5saW5lIGludCBtYXBG
b250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihQQUw6OkZvbnRXaWR0aFZhcmlhbnQg
dmFyaWFudCkKIHsKICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKLSAgICBjYXNlIEZvbnRXaWR0aFZh
cmlhbnQ6OlJlZ3VsYXJXaWR0aDoKKyAgICBjYXNlIFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UmVn
dWxhcldpZHRoOgogICAgICAgICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvcjsKIAot
ICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6SGFsZldpZHRoOgorICAgIGNhc2UgUEFMOjpGb250
V2lkdGhWYXJpYW50OjpIYWxmV2lkdGg6CiAgICAgICAgIHJldHVybiBrSGFsZldpZHRoVGV4dFNl
bGVjdG9yOwogCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoOgorICAgIGNh
c2UgUEFMOjpGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoOgogICAgICAgICByZXR1cm4ga1Ro
aXJkV2lkdGhUZXh0U2VsZWN0b3I7CiAKLSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0
ZXJXaWR0aDoKKyAgICBjYXNlIFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgog
ICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvcjsKICAgICB9CiAKQEAgLTEx
OSw3ICsxMTksNyBAQCBDVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6Y3RGb250KCkgY29uc3QK
ICAgICBBU1NFUlQobV9mb250KTsKICAgICBtX2N0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRl
Q29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5nZXQoKSwgbV9zaXplLCBudWxscHRyLCBjYXNjYWRl
VG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkpKTsKIAotICAgIGlmICht
X3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpIHsKKyAgICBp
ZiAobV93aWR0aFZhcmlhbnQgIT0gUEFMOjpGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgp
IHsKICAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4dFNwYWNpbmdUeXBlOwogICAg
ICAgICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZl
YXR1cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7CiAgICAgICAgIFJldGFpblB0cjxDVEZvbnRE
ZXNjcmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERl
c2NyaXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBTdHJpbmcgRm9u
dFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5n
KGZvbnREZXNjcmlwdGlvbiwgJyAnLCBtX3NpemUsCiAgICAgICAgIChtX3N5bnRoZXRpY0JvbGQg
PyAiIHN5bnRoZXRpYyBib2xkIiA6ICIiKSwKICAgICAgICAgKG1fc3ludGhldGljT2JsaXF1ZSA/
ICIgc3ludGhldGljIG9ibGlxdWUiIDogIiIpLAotICAgICAgICAobV9vcmllbnRhdGlvbiA9PSBG
b250T3JpZW50YXRpb246OlZlcnRpY2FsID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIgOiAiIikp
OworICAgICAgICAobV9vcmllbnRhdGlvbiA9PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwgPyAiIHZlcnRpY2FsIG9yaWVudGF0aW9uIiA6ICIiKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDA5ZjJiNTdjNjRhOGQyMWUyOTY1MWVh
ZjU3YzFjNzc3OTc3ODZmNWYuLmYzOGQ5ZTliN2JjMzA4ZjFhYzdmMTk2OTc1ZDQ0Mjg0OTBlYmMy
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTMyNCw3ICszMjQs
NyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXImIGl0ZQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ds
eXBoczo6RHJhd0dseXBocyhSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZm9udElkZW50aWZp
ZXIsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhC
dWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzLCBj
b25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5n
TW9kZSkKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGZvbnRJZGVudGlmaWVyLCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywg
VmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kcywgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKICAgICA6IG1fZm9udElkZW50aWZpZXIoZm9udElkZW50
aWZpZXIpCiAgICAgLCBtX2dseXBocyhXVEZNb3ZlKGdseXBocykpCiAgICAgLCBtX2FkdmFuY2Vz
KFdURk1vdmUoYWR2YW5jZXMpKQpAQCAtMzM0LDcgKzMzNCw3IEBAIERyYXdHbHlwaHM6OkRyYXdH
bHlwaHMoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZvbnRJZGVudGlmaWVyLCBWZWN0b3I8
R2x5cGhCCiB7CiB9CiAKLURyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCitEcmF3R2x5cGhzOjpEcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CiAgICAgOiBtX2ZvbnRJZGVudGlmaWVyKGZvbnQucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCkpCiAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQogICAgICwgbV9zbW9vdGhpbmdN
b2RlKHNtb290aGluZ01vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA4
MzViMDEyZDVmYzBiNDk2MDRlZjNhZWFiZjUxMWFhNjFjYjNlMjIyLi43N2FhMWE0MDdkYTU1ZjI3
ODgwMmNlZTEwM2E0YmFkOWY0MzEzNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKQEAgLTk0OSw4ICs5NDksOCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29kZShEZWNvZGVyJik7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRHJhd0dseXBocyhSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFZlY3Rv
cjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEy
OD4mJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiwgVmVjdG9y
PEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiYmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9kZSk7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnQmKSBjb25z
dDsKIApAQCAtOTY1LDcgKzk2NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEdseXBoQnVmZmVy
QWR2YW5jZSwgMTY+IG1fYWR2YW5jZXM7CiAgICAgRmxvYXRSZWN0IG1fYm91bmRzOwogICAgIEZs
b2F0UG9pbnQgbV9sb2NhbEFuY2hvcjsKLSAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGlu
Z01vZGU7CisgICAgUEFMOjpGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGU7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMTAxMCw3ICsxMDEwLDcgQEAgc3RkOjpvcHRp
b25hbDxEcmF3R2x5cGhzPiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICBpZiAoIWxvY2FsQW5jaG9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
c3RkOjpvcHRpb25hbDxGb250U21vb3RoaW5nTW9kZT4gc21vb3RoaW5nTW9kZTsKKyAgICBzdGQ6
Om9wdGlvbmFsPFBBTDo6Rm9udFNtb290aGluZ01vZGU+IHNtb290aGluZ01vZGU7CiAgICAgZGVj
b2RlciA+PiBzbW9vdGhpbmdNb2RlOwogICAgIGlmICghc21vb3RoaW5nTW9kZSkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcAppbmRleCBkOGI4ZmNhMzkzYWY2MzZkZmI4NGY4NDcwNTc1Y2NhZmM5YTczZWFjLi5iYmJi
ZGZiMmQ2OTQzNDcyYmZhNzUxNjdkZjVkZmU0NjA3NDFhZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0xNjIsMTIgKzE2MiwxMiBAQCB2b2lkIFJlY29y
ZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdAogICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUlt
YWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0
ZXIpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgUEFMOjpGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQogewogICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwogICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDAyYWU1NzA2MTJlMzRiODIz
ZjYwNzRiZmVmZGUzNjBlZWU4N2U2MWQuLjZjNWJlMDE2NGRlOWNiYTcyMTVhMWIwMTczMTRiMzNl
NDMwYWM0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5saW5lUGF0aERhdGEuaCIK
LSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RmxhZ3MuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
ODksNyArODksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRDbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXR0ZXJu
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwpA
QCAtMjI3LDggKzIyNyw4IEBAIHByaXZhdGU6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVk
IGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIFBBTDo6Rm9udFNt
b290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0Fu
ZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuY3BwCmluZGV4IDMwMzQwODEwYWRmNmRjOTljZjYyOGExMjVlOWQ0NmRlOGE4YTg3ZTcu
LmU0MDRmY2I1Nzc1M2NmMjdmZjIwMDdjNGU0ODUxYzUzZjBlYzY3NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtMjEzLDcgKzIxMyw3IEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlCiAgICAgYXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyPihzb3VyY2VJbWFnZUlkZW50aWZpZXIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgUEFMOjpGb250U21vb3RoaW5nTW9kZSBtb2RlKQogewog
ICAgIGFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9j
YWxBbmNob3IsIG1vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaAppbmRleCAyOWU3Mjc0ZjE3NWRhOGE2Mjc5MzM4ZWRlMzQ4MzQyYjJlODU1NGE0Li5i
YWU1ZWYzMWQ2ZDI0M2QwM2JkNGJhOGNiMTIxY2JmODM2MzVmZGFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtODcsNyArODcsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcmVjb3JkQmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxBbmNob3IsIFBBTDo6Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOwogICAgIHZvaWQg
cmVjb3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAppbmRleCBiZDExM2JiNmMyNzMxZmExOWFkZGVmZDMzYTk5ZDQ2YmI0YTFm
NGEyLi5lNzUwZmVhMzUwMTQ4OGIxNjg2M2VmYmRiYzBjMWE0MmU4MWU3NmEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC00NCw4ICs0NCw4IEBAIEZvbnRQbGF0Zm9ybURhdGEg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mCiAgICAgQVNTRVJUKG1vZGlmaWVkRm9udERlc2NyaXB0b3IpOwogCiAgICAgaW50IHNp
emUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICBGb250T3JpZW50
YXRpb24gb3JpZW50YXRpb24gPSBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKTsKLSAgICBG
b250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCA9IGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlh
bnQoKTsKKyAgICBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGZvbnREZXNjcmlw
dGlvbi5vcmllbnRhdGlvbigpOworICAgIFBBTDo6Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlh
bnQgPSBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCk7CiAgICAgYXV0byBmb250ID0gYWRv
cHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobW9kaWZpZWRGb250RGVzY3JpcHRv
ci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOwogICAgIGZvbnQgPSBwcmVwYXJlUGxhdGZvcm1Gb250
KGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbiwgZm9udENyZWF0aW9uQ29udGV4dCk7CiAgICAg
QVNTRVJUKGZvbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKaW5kZXggNzE4YjliZDMxNWVj
YzY3MDc4OWM2NWNiYWFhMDM0OTI5NzVlNzJkMy4uMGUxN2QzZjY3MDg5MTgzMzEyYjFiMjYwNDk0
YWYzYThiNWQ1ZWZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCkBAIC0yMiw4ICsyMiw4
IEBACiAjZGVmaW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAogCiAjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPENvcmVGb3Vu
ZGF0aW9uL0NGQmFzZS5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRGbGFncy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhQ29yZVRleHQuY3BwCmluZGV4IGZh
YWI2ZTE0ZjAyN2E0NDRiZDZkZTI3MTJlNjY5NTRhNzY1NWRkMWIuLjlhYWJiYWJjYjJlODkzMDgy
ZDE0YTZkZWVhNzQ3ZmI5ZjIwOTA0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBGb250OjpnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoYm9vbCBlbmFibGVLZXJu
aW5nLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGxvY2Fs
ZSkgY29uc3QKK1JldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IEZvbnQ6OmdldENGU3RyaW5nQXR0
cmlidXRlcyhib29sIGVuYWJsZUtlcm5pbmcsIFBBTDo6Rm9udE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUpIGNvbnN0CiB7CiAgICAgQ0ZUeXBlUmVmIGtl
eXNbNV07CiAgICAgQ0ZUeXBlUmVmIHZhbHVlc1s1XTsKQEAgLTY5LDcgKzY5LDcgQEAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gRm9udDo6Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKGJvb2wgZW5h
YmxlS2VybmluZywgRm9udE8KICAgICAgICAgKytjb3VudDsKICAgICB9CiAKLSAgICBpZiAob3Jp
ZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgeworICAgIGlmIChvcmllbnRh
dGlvbiA9PSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKICAgICAgICAga2V5c1tj
b3VudF0gPSBrQ1RWZXJ0aWNhbEZvcm1zQXR0cmlidXRlTmFtZTsKICAgICAgICAgdmFsdWVzW2Nv
dW50XSA9IGtDRkJvb2xlYW5UcnVlOwogICAgICAgICArK2NvdW50OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggZWEyZTg2MTM0MzVhYWRmYjhhMzg4
YzBjNmU1ZmVhZTVhYmYxYjQ3ZS4uZDA1ZTdmZjJmZjMzZTViOTJmZmI4MGU1ODI3MzQ2ZmEzMDM5
Mjc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBA
IC0xMTMsNyArMTEzLDcgQEAgc3RhdGljIEZvbnRDYXNjYWRlIGNhc2NhZGVGb3JTeXN0ZW1Gb250
KENHRmxvYXQgc2l6ZSkKICAgICByZXR1cm4gRm9udENhc2NhZGUoRm9udFBsYXRmb3JtRGF0YShh
ZG9wdENGKENURm9udENyZWF0ZVdpdGhOYW1lKChDRlN0cmluZ1JlZilmb250LmZvbnROYW1lLCBm
b250LnBvaW50U2l6ZSwgbmlsKSksIGZvbnQucG9pbnRTaXplKSk7CiB9CiAKLURyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGljYXRvckRhdGEsIEZv
bnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JM
aW5rKEVsZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwg
VGV4dEluZGljYXRvckRhdGEmIGluZGljYXRvckRhdGEsIFBBTDo6Rm9udFJlbmRlcmluZ01vZGUs
IGZsb2F0KQogewogICAgIC8vIEZJWE1FOiBNb3N0IG9mIHRoaXMgY2FuIGdvIGF3YXkgb25jZSB3
ZSBjYW4gdXNlIFVJVVJMRHJhZ1ByZXZpZXdWaWV3IHVuY29uZGl0aW9uYWxseS4KICAgICBzdGF0
aWMgY29uc3QgQ0dGbG9hdCBkcmFnSW1hZ2VQYWRkaW5nID0gMTA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcAppbmRleCAzZGQ5N2MxM2Vk
NzRkMGEyN2I2YjNmMTE4N2NkZThhNDA3Y2MxYzM0Li5jYTFlNzc0YzcxZDg4ZmE1YTY0OWNjMjM2
MjM5NzFhZGRjMzIwMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
U2VsZWN0aW9uR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9T
ZWxlY3Rpb25HZW9tZXRyeS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgU2VsZWN0aW9uR2VvbWV0cnk6
OlNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVy
aW5nQmUKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1l
bnRzIHRvIGFuIGF1eGlsbGFyeSBzdHJ1Y3QuCi1TZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9u
R2VvbWV0cnkoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlv
ciBiZWhhdmlvciwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBtaW5YLCBpbnQgbWF4WCwg
aW50IG1heFksIGludCBsaW5lTnVtYmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmlyc3RP
bkxpbmUsIGJvb2wgaXNMYXN0T25MaW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29udGFp
bnNFbmQsIGJvb2wgaXNIb3Jpem9udGFsLCBib29sIGlzSW5GaXhlZFBvc2l0aW9uLCBib29sIGlz
UnVieVRleHQsIGludCBwYWdlTnVtYmVyKQorU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdl
b21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3Ig
YmVoYXZpb3IsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBtaW5YLCBpbnQgbWF4
WCwgaW50IG1heFksIGludCBsaW5lTnVtYmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmly
c3RPbkxpbmUsIGJvb2wgaXNMYXN0T25MaW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29u
dGFpbnNFbmQsIGJvb2wgaXNIb3Jpem9udGFsLCBib29sIGlzSW5GaXhlZFBvc2l0aW9uLCBib29s
IGlzUnVieVRleHQsIGludCBwYWdlTnVtYmVyKQogICAgIDogbV9xdWFkKHF1YWQpCiAgICAgLCBt
X2JlaGF2aW9yKGJlaGF2aW9yKQogICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuaAppbmRleCBjOGE0
YjFlYThhMTI4Njc0NDE3ODU2YTJjMGM1Yjg0N2Y5NGFlNjcwLi45NWE0YmE3NGE4ZTEwNDY5Mzk0
MDE1NDY5MTI1ZDIxNWViOTQ5YWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU2VsZWN0aW9uR2VvbWV0cnkuaApAQCAtMjcsOCArMjcsOCBAQAogCiAjaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgi
CiAjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZWxlY3Rp
b25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciwg
Ym9vbCBpc0hvcml6b250YWwsIGludCBjb2x1bW5OdW1iZXIpOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1eGlsbGFyeSBzdHJ1
Y3QuCi0gICAgU2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVu
ZGVyaW5nQmVoYXZpb3IsIFRleHREaXJlY3Rpb24sIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwg
Ym9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKKyAgICBTZWxl
Y3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlv
ciwgUEFMOjpUZXh0RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2wsIGJvb2wsIGJv
b2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7CiAgICAgU2VsZWN0aW9uR2Vv
bWV0cnkoKSA9IGRlZmF1bHQ7CiAgICAgflNlbGVjdGlvbkdlb21ldHJ5KCkgPSBkZWZhdWx0Owog
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBpbnQgbG9naWNhbFRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNIb3Jpem9udGFsID8gcmVjdCgpLnkoKSA6IHJlY3QoKS54KCk7IH0KICAgICBp
bnQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsID8gcmVjdCgp
LmhlaWdodCgpIDogcmVjdCgpLndpZHRoKCk7IH0KIAotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBQQUw6OlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KICAgICBpbnQgbWlu
WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluWDsgfQogICAgIGludCBtYXhYKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhYOyB9CiAgICAgaW50IG1heFkoKSBjb25zdCB7IHJldHVybiBtX21heFk7IH0KQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TG9naWNhbFRvcChpbnQpOwogICAg
IHZvaWQgc2V0TG9naWNhbEhlaWdodChpbnQpOwogCi0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KKyAgICB2
b2lkIHNldERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0
aW9uID0gZGlyZWN0aW9uOyB9CiAgICAgdm9pZCBzZXRNaW5YKGludCBtaW5YKSB7IG1fbWluWCA9
IG1pblg7IH0KICAgICB2b2lkIHNldE1heFgoaW50IG1heFgpIHsgbV9tYXhYID0gbWF4WDsgfQog
ICAgIHZvaWQgc2V0TWF4WShpbnQgbWF4WSkgeyBtX21heFkgPSBtYXhZOyB9CkBAIC05Myw3ICs5
Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fcXVhZDsKICAgICBTZWxl
Y3Rpb25SZW5kZXJpbmdCZWhhdmlvciBtX2JlaGF2aW9yIHsgU2VsZWN0aW9uUmVuZGVyaW5nQmVo
YXZpb3I6OkNvYWxlc2NlQm91bmRpbmdSZWN0cyB9OwotICAgIFRleHREaXJlY3Rpb24gbV9kaXJl
Y3Rpb24geyBUZXh0RGlyZWN0aW9uOjpMVFIgfTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gbV9k
aXJlY3Rpb24geyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiB9OwogICAgIGludCBtX21pblggeyAw
IH07CiAgICAgaW50IG1fbWF4WCB7IDAgfTsKICAgICBpbnQgbV9tYXhZIHsgMCB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAppbmRleCAzZDZh
YTgyMTkxZWViYjIwNTU1ZWZlMDNhMzFkYmI4NWUyN2Y3OWIwLi4xMTdjMDk0ODMxNzE1MTNkMWNi
NjQ2NDhlNzBlMDQxMGY4Yzg0MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMuaApAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIC8v
IFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyQ2xpZW50LgogICAgIGJvb2wgYWxsb3dzSG9yaXpv
bnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgZmluYWw7CiAg
ICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kT25TaWRlKEJveFNpZGUp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNp
ZGUpIGNvbnN0IGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCmluZGV4IDUzYTQw
NzUzZGI3NDdjNWFjNGIxZjdiMjFhOWFkNWMxZmY0NWE4MzYuLmU5MjY1MWFmMTZjZmMzNzhjNDI3
MThiMWMyZmRkOWY3YjFiOTg1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KQEAgLTE4Nyw3ICsxODcsNyBAQCBib29sIFNjcm9sbEFu
aW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIHdoZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTY3JvbGxBbmltYXRvck1h
Yzo6c2hvdWxkUnViYmVyQmFuZE9uU2lkZShCb3hTaWRlKSBjb25zdAorYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6c2hvdWxkUnViYmVyQmFuZE9uU2lkZShQQUw6OkJveFNpZGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1tCmluZGV4IDkwOWJmNDA1Mzc2Yjgw
ZWU2NDE2NGI4YWUwOWM3YWNjMTI5NWRlOWIuLjNiYjRiMmI3YzA4YTI4MjYyN2RkNjk2ZmYzZmJh
YzNjMThkY2NmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0KQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0
aWMgRmxvYXRTaXplIGRlbHRhQWxpZ25lZFRvRG9taW5hbnRBeGlzKEZsb2F0U2l6ZSBkZWx0YSkK
ICAgICByZXR1cm4gZGVsdGFBbGlnbmVkVG9BeGlzKGRlbHRhLCBkb21pbmFudEF4aXMpOwogfQog
Ci1zdGF0aWMgc3RkOjpvcHRpb25hbDxCb3hTaWRlPiBhZmZlY3RlZFNpZGVPbkRvbWluYW50QXhp
cyhGbG9hdFNpemUgZGVsdGEpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxQQUw6OkJveFNpZGU+IGFm
ZmVjdGVkU2lkZU9uRG9taW5hbnRBeGlzKEZsb2F0U2l6ZSBkZWx0YSkKIHsKICAgICBhdXRvIGRv
bWluYW50QXhpcyA9IGRvbWluYW50QXhpc0Zhdm9yaW5nVmVydGljYWwoZGVsdGEpOwogICAgIHJl
dHVybiBTY3JvbGxhYmxlQXJlYTo6dGFyZ2V0U2lkZUZvclNjcm9sbERlbHRhKGRlbHRhLCBkb21p
bmFudEF4aXMpOwpAQCAtNDY2LDcgKzQ2Niw3IEBAIHZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRy
b2xsZXI6OnN0YXJ0UnViYmVyQmFuZEFuaW1hdGlvbklmTmVjZXNzYXJ5KCkKICAgICBzdGFydFJ1
YmJlckJhbmRBbmltYXRpb24oY29udHJhaW5lZE9mZnNldCwgaW5pdGlhbFZlbG9jaXR5LCBzdHJl
dGNoQW1vdW50KTsKIH0KIAotYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxk
UnViYmVyQmFuZE9uU2lkZShCb3hTaWRlIHNpZGUpIGNvbnN0Citib29sIFNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kT25TaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSBj
b25zdAogewogICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRSdWJiZXJCYW5kT25TaWRlKHNpZGUp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVjZDEwYmYzNDg2MmM4ZWVlYTJiODQxYzc1Yzdm
ZGRhOTZmOWRmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodCByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJC
aWRpQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7Ci0gICAgdWludDMyX3QgYml0ZmllbGRzIDog
MTY7Ci0gICAgdm9pZCogcGFyZW50OwotfTsKLQotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEJpZGlD
b250ZXh0KSA9PSBzaXplb2YoU2FtZVNpemVBc0JpZGlDb250ZXh0KSwgQmlkaUNvbnRleHRfc2hv
dWxkX3N0YXlfc21hbGwpOwotCi1pbmxpbmUgQmlkaUNvbnRleHQ6OkJpZGlDb250ZXh0KHVuc2ln
bmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwg
QmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpCi0gICAgOiBt
X2xldmVsKGxldmVsKQotICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICwgbV9vdmVy
cmlkZShvdmVycmlkZSkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fcGFyZW50KHBh
cmVudCkKLXsKLX0KLQotaW5saW5lIFJlZjxCaWRpQ29udGV4dD4gQmlkaUNvbnRleHQ6OmNyZWF0
ZVVuY2FjaGVkKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBw
YXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmlkaUNvbnRleHQobGV2ZWwsIGRp
cmVjdGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFyZW50KSk7Ci19Ci0KLVJlZjxCaWRpQ29udGV4
dD4gQmlkaUNvbnRleHQ6OmNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBC
aWRpQ29udGV4dCogcGFyZW50KQotewotICAgIEFTU0VSVChkaXJlY3Rpb24gPT0gKGxldmVsICUg
MiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCkpOwotCi0gICAgaWYgKHBhcmVu
dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVVuY2FjaGVkKGxldmVsLCBkaXJlY3Rpb24sIG92ZXJy
aWRlLCBzb3VyY2UsIHBhcmVudCk7Ci0KLSAgICBBU1NFUlQobGV2ZWwgPD0gMSk7Ci0gICAgaWYg
KCFsZXZlbCkgewotICAgICAgICBpZiAoIW92ZXJyaWRlKSB7Ci0gICAgICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4gbHRyQ29udGV4dDsKLSAgICAgICAg
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBsdHJDb250ZXh0T25jZUZsYWc7Ci0gICAgICAgICAg
ICBzdGQ6OmNhbGxfb25jZShsdHJDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKLSAgICAgICAgICAg
ICAgICBsdHJDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZUX1RPX1JJR0hU
LCBmYWxzZSwgRnJvbVN0eWxlT3JET00sIDApOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICByZXR1cm4gKmx0ckNvbnRleHQuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4gbHRyT3ZlcnJpZGVDb250ZXh0Owot
ICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgbHRyT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7
Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNlKGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnLCBbJl0o
KSB7Ci0gICAgICAgICAgICBsdHJPdmVycmlkZUNvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hl
ZCgwLCBVX0xFRlRfVE9fUklHSFQsIHRydWUsIEZyb21TdHlsZU9yRE9NLCAwKTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybiAqbHRyT3ZlcnJpZGVDb250ZXh0LmdldCgpOwotICAgIH0KLQot
ICAgIGlmICghb3ZlcnJpZGUpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0
cjxCaWRpQ29udGV4dD4+IHJ0bENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBydGxDb250ZXh0T25jZUZsYWc7Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNlKHJ0bENvbnRleHRP
bmNlRmxhZywgWyZdKCkgewotICAgICAgICAgICAgcnRsQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVu
Y2FjaGVkKDEsIFVfUklHSFRfVE9fTEVGVCwgZmFsc2UsIEZyb21TdHlsZU9yRE9NLCAwKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAqcnRsQ29udGV4dC5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4gcnRsT3ZlcnJpZGVD
b250ZXh0OwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBydGxPdmVycmlkZUNvbnRleHRPbmNl
RmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShydGxPdmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZd
KCkgewotICAgICAgICBydGxPdmVycmlkZUNvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgx
LCBVX1JJR0hUX1RPX0xFRlQsIHRydWUsIEZyb21TdHlsZU9yRE9NLCAwKTsKLSAgICB9KTsKLSAg
ICByZXR1cm4gKnJ0bE92ZXJyaWRlQ29udGV4dC5nZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSBS
ZWY8QmlkaUNvbnRleHQ+IGNvcHlDb250ZXh0QW5kUmViYXNlbGluZUxldmVsKEJpZGlDb250ZXh0
JiBjb250ZXh0LCBCaWRpQ29udGV4dCogcGFyZW50KQotewotICAgIGF1dG8gbmV3TGV2ZWwgPSBw
YXJlbnQgPyBwYXJlbnQtPmxldmVsKCkgOiAwOwotICAgIGlmIChjb250ZXh0LmRpcigpID09IFVf
UklHSFRfVE9fTEVGVCkKLSAgICAgICAgbmV3TGV2ZWwgPSBuZXh0R3JlYXRlck9kZExldmVsKG5l
d0xldmVsKTsKLSAgICBlbHNlIGlmIChwYXJlbnQpCi0gICAgICAgIG5ld0xldmVsID0gbmV4dEdy
ZWF0ZXJFdmVuTGV2ZWwobmV3TGV2ZWwpOwotICAgIHJldHVybiBCaWRpQ29udGV4dDo6Y3JlYXRl
KG5ld0xldmVsLCBjb250ZXh0LmRpcigpLCBjb250ZXh0Lm92ZXJyaWRlKCksIGNvbnRleHQuc291
cmNlKCksIHBhcmVudCk7Ci19Ci0KLS8vIFRoZSBCaWRpQ29udGV4dCBzdGFjayBtdXN0IGJlIGlt
bXV0YWJsZSAtLSB0aGV5J3JlIHJlLXVzZWQgZm9yIHJlLWxheW91dCBhZnRlcgotLy8gRE9NIG1v
ZGlmaWNhdGlvbi9lZGl0aW5nIC0tIHNvIHdlIGNvcHkgYWxsIHRoZSBub24tVW5pY29kZSBjb250
ZXh0cywgYW5kCi0vLyByZWNhbGN1bGF0ZSB0aGVpciBsZXZlbHMuCi1SZWY8QmlkaUNvbnRleHQ+
IEJpZGlDb250ZXh0Ojpjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygp
Ci17Ci0gICAgVmVjdG9yPEJpZGlDb250ZXh0KiwgNjQ+IGNvbnRleHRzOwotICAgIGZvciAoYXV0
byogYW5jZXN0b3IgPSB0aGlzOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50
KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5zb3VyY2UoKSAhPSBGcm9tVW5pY29kZSkKLSAg
ICAgICAgICAgIGNvbnRleHRzLmFwcGVuZChhbmNlc3Rvcik7Ci0gICAgfQotICAgIEFTU0VSVChj
b250ZXh0cy5zaXplKCkpOwotICAgIGF1dG8gdG9wQ29udGV4dCA9IGNvcHlDb250ZXh0QW5kUmVi
YXNlbGluZUxldmVsKCpjb250ZXh0cy5sYXN0KCksIG51bGxwdHIpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGNvbnRleHRzLnNpemUoKSAtIDE7IGk7IC0taSkKLSAgICAgICAgdG9wQ29udGV4dCA9
IGNvcHlDb250ZXh0QW5kUmViYXNlbGluZUxldmVsKCpjb250ZXh0c1tpIC0gMV0sIHRvcENvbnRl
eHQucHRyKCkpOwotICAgIHJldHVybiB0b3BDb250ZXh0OwotfQotCi1ib29sIG9wZXJhdG9yPT0o
Y29uc3QgQmlkaUNvbnRleHQmIGMxLCBjb25zdCBCaWRpQ29udGV4dCYgYzIpCi17Ci0gICAgaWYg
KCZjMSA9PSAmYzIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChjMS5sZXZlbCgpICE9
IGMyLmxldmVsKCkgfHwgYzEub3ZlcnJpZGUoKSAhPSBjMi5vdmVycmlkZSgpIHx8IGMxLmRpcigp
ICE9IGMyLmRpcigpIHx8IGMxLnNvdXJjZSgpICE9IGMyLnNvdXJjZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFjMS5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuICFjMi5wYXJl
bnQoKTsKLSAgICByZXR1cm4gYzIucGFyZW50KCkgJiYgKmMxLnBhcmVudCgpID09ICpjMi5wYXJl
bnQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YThk
OTA5ZWVhOTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2EyNjAzZDcwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWVudW0gQmlkaUVtYmVkZGluZ1NvdXJjZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9t
VW5pY29kZSB9OwotCi0vLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZXhwbGljaXQgZW1iZWRkaW5n
cy4KLWNsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJpZGlD
b250ZXh0PiB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29u
dGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92
ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlk
aUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOwotCi0gICAgQmlkaUNvbnRleHQqIHBhcmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9Ci0gICAgdW5zaWduZWQgY2hhciBsZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9kaXJlY3Rpb24pOyB9
Ci0gICAgYm9vbCBvdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGU7IH0KLSAgICBC
aWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJp
ZGlFbWJlZGRpbmdTb3VyY2U+KG1fc291cmNlKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
PEJpZGlDb250ZXh0PiBjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygp
OwotCi1wcml2YXRlOgotICAgIEJpZGlDb250ZXh0KHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFy
RGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlLCBCaWRpQ29udGV4
dCogcGFyZW50KTsKLQotICAgIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZVVuY2FjaGVk
KHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRp
RW1iZWRkaW5nU291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KTsKLQotICAgIHVuc2lnbmVkIG1f
bGV2ZWwgOiA2OyAvLyBUaGUgbWF4aW1pdW0gYmlkaSBsZXZlbCBpcyA2MjogaHR0cDovL3VuaWNv
ZGUub3JnL3JlcG9ydHMvdHI5LyNFeHBsaWNpdF9MZXZlbHNfYW5kX0RpcmVjdGlvbnMKLSAgICB1
bnNpZ25lZCBtX2RpcmVjdGlvbiA6IDU7IC8vIERpcmVjdGlvbgotICAgIHVuc2lnbmVkIG1fb3Zl
cnJpZGUgOiAxOwotICAgIHVuc2lnbmVkIG1fc291cmNlIDogMTsgLy8gQmlkaUVtYmVkZGluZ1Nv
dXJjZQotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gbV9wYXJlbnQ7Ci19OwotCi1pbmxpbmUgdW5z
aWduZWQgY2hhciBuZXh0R3JlYXRlck9kZExldmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpCi17Ci0g
ICAgcmV0dXJuIChsZXZlbCArIDEpIHwgMTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGNoYXIgbmV4
dEdyZWF0ZXJFdmVuTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkKLXsKLSAgICByZXR1cm4gKGxl
dmVsICsgMikgJiB+MTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlDb250ZXh0Jiwg
Y29uc3QgQmlkaUNvbnRleHQmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY5ZDllNDZlMDg2NTY4ZGM5MDdhYjU4NGRjNDI2Njg1NzA1ZmRjZjAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiQmlkaVJ1bkxpc3QuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlck9iamVjdDsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IGNsYXNzIFdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGUgewotcHVibGljOgotICAgIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgbV90cmFu
c2l0aW9ucy5jbGVhcigpOwotICAgICAgICBtX2N1cnJlbnRUcmFuc2l0aW9uID0gMDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzdGFydElnbm9yaW5nU3BhY2VzKGNvbnN0IEl0ZXJhdG9yJiB0cmFu
c2l0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEobV90cmFuc2l0aW9ucy5zaXplKCkgJSAy
KSk7Ci0gICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRpb24pOwotICAgIH0KLQot
ICAgIHZvaWQgc3RvcElnbm9yaW5nU3BhY2VzKGNvbnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHJhbnNpdGlvbnMuc2l6ZSgpICUgMik7Ci0gICAgICAg
IG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRpb24pOwotICAgIH0KLQotICAgIC8vIFdoZW4g
aWdub3Jpbmcgc3BhY2VzLCB0aGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0
IG5lZWQgbGluZSBib3hlcyBzdWNoIGFzIFJlbmRlcklubGluZXMgb3IKLSAgICAvLyBoYXJkIGxp
bmUgYnJlYWtzIHRvIGVuc3VyZSB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCi0gICAgdm9pZCBl
bnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQot
ICAgIHsKLSAgICAgICAgSXRlcmF0b3IgdHJhbnNpdGlvbigwLCAmcmVuZGVyZXIsIDApOwotICAg
ICAgICBzdG9wSWdub3JpbmdTcGFjZXModHJhbnNpdGlvbik7Ci0gICAgICAgIHN0YXJ0SWdub3Jp
bmdTcGFjZXModHJhbnNpdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNyZW1lbnRUcmFuc2l0
aW9uQXQoc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAgICAgbV90cmFuc2l0aW9uc1tpbmRleF0u
ZmFzdERlY3JlbWVudCgpOwotICAgIH0KLQotICAgIGNvbnN0IFZlY3RvcjxJdGVyYXRvcj4mIHRy
YW5zaXRpb25zKCkgeyByZXR1cm4gbV90cmFuc2l0aW9uczsgfQotICAgIHNpemVfdCBudW1UcmFu
c2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnMuc2l6ZSgpOyB9Ci0gICAgc2l6
ZV90IGN1cnJlbnRUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VHJhbnNpdGlv
bjsgfQotICAgIHZvaWQgc2V0Q3VycmVudFRyYW5zaXRpb24oc2l6ZV90IGN1cnJlbnRUcmFuc2l0
aW9uKSB7IG1fY3VycmVudFRyYW5zaXRpb24gPSBjdXJyZW50VHJhbnNpdGlvbjsgfQotICAgIHZv
aWQgaW5jcmVtZW50Q3VycmVudFRyYW5zaXRpb24oKSB7ICsrbV9jdXJyZW50VHJhbnNpdGlvbjsg
fQotICAgIHZvaWQgZGVjcmVtZW50TnVtVHJhbnNpdGlvbnMoKSB7IG1fdHJhbnNpdGlvbnMuc2hy
aW5rKG1fdHJhbnNpdGlvbnMuc2l6ZSgpIC0gMSk7IH0KLSAgICBib29sIGJldHdlZW5UcmFuc2l0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb24gJSAyOyB9Ci1wcml2YXRl
OgotICAgIFZlY3RvcjxJdGVyYXRvcj4gbV90cmFuc2l0aW9uczsKLSAgICBzaXplX3QgbV9jdXJy
ZW50VHJhbnNpdGlvbiB7IDAgfTsKLX07Ci0KLS8vIFRoZSBCaWRpU3RhdHVzIGF0IGEgZ2l2ZW4g
cG9zaXRpb24gKHR5cGljYWxseSB0aGUgZW5kIG9mIGEgbGluZSkgY2FuCi0vLyBiZSBjYWNoZWQg
YW5kIHRoZW4gdXNlZCB0byByZXN0YXJ0IGJpZGkgcmVzb2x1dGlvbiBhdCB0aGF0IHBvc2l0aW9u
Lgotc3RydWN0IEJpZGlTdGF0dXMgewotICAgIEJpZGlTdGF0dXMoKSA9IGRlZmF1bHQ7Ci0KLSAg
ICAvLyBDcmVhdGVzIGEgQmlkaVN0YXR1cyByZXByZXNlbnRpbmcgYSBuZXcgcGFyYWdyYXBoIHJv
b3Qgd2l0aCBhIGRlZmF1bHQgZGlyZWN0aW9uLgotICAgIC8vIFVzZXMgVGV4dERpcmVjdGlvbiBh
cyBpdCBvbmx5IGhhcyB0d28gcG9zc2liaWxpdGllcyBpbnN0ZWFkIG9mIFVDaGFyRGlyZWN0aW9u
IHdoaWNoIGhhcyBhdCBsZWFzdCAxOS4KLSAgICBCaWRpU3RhdHVzKFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBib29sIGlzT3ZlcnJpZGUpCi0gICAgICAgIDogZW9yKGRpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQpCi0gICAg
ICAgICwgbGFzdFN0cm9uZyhlb3IpCi0gICAgICAgICwgbGFzdChlb3IpCi0gICAgICAgICwgY29u
dGV4dChCaWRpQ29udGV4dDo6Y3JlYXRlKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIg
PyAwIDogMSwgZW9yLCBpc092ZXJyaWRlKSkKLSAgICB7Ci0gICAgfQotCi0gICAgQmlkaVN0YXR1
cyhVQ2hhckRpcmVjdGlvbiBlb3IsIFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmcsIFVDaGFyRGly
ZWN0aW9uIGxhc3QsIFJlZlB0cjxCaWRpQ29udGV4dD4mJiBjb250ZXh0KQotICAgICAgICA6IGVv
cihlb3IpCi0gICAgICAgICwgbGFzdFN0cm9uZyhsYXN0U3Ryb25nKQotICAgICAgICAsIGxhc3Qo
bGFzdCkKLSAgICAgICAgLCBjb250ZXh0KFdURk1vdmUoY29udGV4dCkpCi0gICAgewotICAgIH0K
LQotICAgIFVDaGFyRGlyZWN0aW9uIGVvciB7IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIFVDaGFy
RGlyZWN0aW9uIGxhc3RTdHJvbmcgeyBVX09USEVSX05FVVRSQUwgfTsKLSAgICBVQ2hhckRpcmVj
dGlvbiBsYXN0IHsgVV9PVEhFUl9ORVVUUkFMIH07Ci0gICAgUmVmUHRyPEJpZGlDb250ZXh0PiBj
b250ZXh0OwotfTsKLQotc3RydWN0IEJpZGlFbWJlZGRpbmcgewotICAgIEJpZGlFbWJlZGRpbmco
VUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSkKLSAg
ICAgICAgOiBkaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICAgICAsIHNvdXJjZShzb3VyY2UpCi0g
ICAgewotICAgIH0KLQotICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICBCaWRpRW1i
ZWRkaW5nU291cmNlIHNvdXJjZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QmlkaVN0YXR1cyYgc3RhdHVzMSwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzMikKLXsKLSAgICBy
ZXR1cm4gc3RhdHVzMS5lb3IgPT0gc3RhdHVzMi5lb3IgJiYgc3RhdHVzMS5sYXN0ID09IHN0YXR1
czIubGFzdCAmJiBzdGF0dXMxLmxhc3RTdHJvbmcgPT0gc3RhdHVzMi5sYXN0U3Ryb25nICYmICoo
c3RhdHVzMS5jb250ZXh0KSA9PSAqKHN0YXR1czIuY29udGV4dCk7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzMSwgY29uc3QgQmlkaVN0YXR1cyYg
c3RhdHVzMikKLXsKLSAgICByZXR1cm4gIShzdGF0dXMxID09IHN0YXR1czIpOwotfQotCi1zdHJ1
Y3QgQmlkaUNoYXJhY3RlclJ1biB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgQmlkaUNoYXJhY3RlclJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwg
QmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbikKLSAgICAgICAg
OiBtX3N0YXJ0KHN0YXJ0KQotICAgICAgICAsIG1fc3RvcChzdG9wKQotICAgICAgICAsIG1fb3Zl
cnJpZGUoY29udGV4dC0+b3ZlcnJpZGUoKSkKLSAgICB7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgZGlyZWN0aW9uID0gY29udGV4dC0+ZGly
KCk7Ci0KLSAgICAgICAgbV9sZXZlbCA9IGNvbnRleHQtPmxldmVsKCk7Ci0KLSAgICAgICAgLy8g
YWRkIGxldmVsIG9mIHJ1biAoY2FzZXMgSTEgJiBJMikKLSAgICAgICAgaWYgKG1fbGV2ZWwgJSAy
KSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCB8fCBkaXJl
Y3Rpb24gPT0gVV9BUkFCSUNfTlVNQkVSIHx8IGRpcmVjdGlvbiA9PSBVX0VVUk9QRUFOX05VTUJF
UikKLSAgICAgICAgICAgICAgICBtX2xldmVsKys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKLSAgICAgICAgICAgICAgICBt
X2xldmVsKys7Ci0gICAgICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gVV9BUkFCSUNfTlVN
QkVSIHx8IGRpcmVjdGlvbiA9PSBVX0VVUk9QRUFOX05VTUJFUikKLSAgICAgICAgICAgICAgICBt
X2xldmVsICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB+QmlkaUNoYXJhY3RlclJ1bigp
Ci0gICAgewotICAgICAgICAvLyBEZWxldGUgdGhlIGxpbmtlZCBsaXN0IGluIGEgbG9vcCB0byBw
cmV2ZW50IGRlc3RydWN0b3IgcmVjdXJzaW9uLgotICAgICAgICBhdXRvIG5leHQgPSBXVEZNb3Zl
KG1fbmV4dCk7Ci0gICAgICAgIHdoaWxlIChuZXh0KQotICAgICAgICAgICAgbmV4dCA9IFdURk1v
dmUobmV4dC0+bV9uZXh0KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnQ7IH0KLSAgICB1bnNpZ25lZCBzdG9wKCkgY29uc3QgeyByZXR1cm4gbV9z
dG9wOyB9Ci0gICAgdW5zaWduZWQgY2hhciBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7
IH0KLSAgICBib29sIHJldmVyc2VkKGJvb2wgdmlzdWFsbHlPcmRlcmVkKSB7IHJldHVybiBtX2xl
dmVsICUgMiAmJiAhdmlzdWFsbHlPcmRlcmVkOyB9Ci0gICAgYm9vbCBkaXJPdmVycmlkZShib29s
IHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9vdmVycmlkZSB8fCB2aXN1YWxseU9yZGVyZWQ7
IH0KLQotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQu
Z2V0KCk7IH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4gdGFrZU5leHQo
KSB7IHJldHVybiBXVEZNb3ZlKG1fbmV4dCk7IH0KLSAgICB2b2lkIHNldE5leHQoc3RkOjp1bmlx
dWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+JiYgbmV4dCkgeyBtX25leHQgPSBXVEZNb3ZlKG5leHQp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IG1f
bmV4dDsKLQotcHVibGljOgotICAgIHVuc2lnbmVkIG1fc3RhcnQ7Ci0gICAgdW5zaWduZWQgbV9z
dG9wOwotICAgIHVuc2lnbmVkIGNoYXIgbV9sZXZlbDsKLSAgICBib29sIG1fb3ZlcnJpZGUgOiAx
OwotICAgIGJvb2wgbV9oYXNIeXBoZW4gOiAxOyAvLyBVc2VkIGJ5IEJpZGlSdW4gc3ViY2xhc3Mg
d2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24gYnV0IGVuYWJsZXMgdXMgdG8gc2F2ZSA4IGJ5
dGVzIHBlciBvYmplY3Qgb24gNjQtYml0LgotfTsKLQotZW51bSBWaXN1YWxEaXJlY3Rpb25PdmVy
cmlkZSB7Ci0gICAgTm9WaXN1YWxPdmVycmlkZSwKLSAgICBWaXN1YWxMZWZ0VG9SaWdodE92ZXJy
aWRlLAotICAgIFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUKLX07Ci0KLS8vIEJpZGlSZXNvbHZl
ciBpcyBXZWJLaXQncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRo
bQotLy8gaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5Ci10ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+IGNsYXNzIEJpZGlS
ZXNvbHZlckJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJpZGlSZXNvbHZlckJhc2Up
OwotcHVibGljOgotICAgIGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudDsgfQotICAgIHZvaWQgc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVz
KGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbikgeyBtX2N1cnJlbnQgPSBwb3NpdGlvbjsgfQotICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgSXRlcmF0b3ImIHBvc2l0aW9uLCB1bnNpZ25lZCBuZXN0
ZWRJc29sYXRlZENvdW50KQotICAgIHsKLSAgICAgICAgbV9jdXJyZW50ID0gcG9zaXRpb247Ci0g
ICAgICAgIG1fbmVzdGVkSXNvbGF0ZUNvdW50ID0gbmVzdGVkSXNvbGF0ZWRDb3VudDsKLSAgICB9
Ci0KLSAgICB2b2lkIGluY3JlbWVudCgpIHsgc3RhdGljX2Nhc3Q8RGVyaXZlZENsYXNzJj4oKnRo
aXMpLmluY3JlbWVudEludGVybmFsKCk7IH0KLQotICAgIEJpZGlDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXMuY29udGV4dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0Q29u
dGV4dChSZWZQdHI8QmlkaUNvbnRleHQ+JiYgY29udGV4dCkgeyBtX3N0YXR1cy5jb250ZXh0ID0g
V1RGTW92ZShjb250ZXh0KTsgfQotCi0gICAgdm9pZCBzZXRMYXN0RGlyKFVDaGFyRGlyZWN0aW9u
IGxhc3REaXIpIHsgbV9zdGF0dXMubGFzdCA9IGxhc3REaXI7IH0KLSAgICB2b2lkIHNldExhc3RT
dHJvbmdEaXIoVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZ0RpcikgeyBtX3N0YXR1cy5sYXN0U3Ry
b25nID0gbGFzdFN0cm9uZ0RpcjsgfQotICAgIHZvaWQgc2V0RW9yRGlyKFVDaGFyRGlyZWN0aW9u
IGVvckRpcikgeyBtX3N0YXR1cy5lb3IgPSBlb3JEaXI7IH0KLQotICAgIFVDaGFyRGlyZWN0aW9u
IGRpcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9Ci0gICAgdm9pZCBzZXREaXIoVUNo
YXJEaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9Ci0KLSAg
ICBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQot
ICAgIHZvaWQgc2V0U3RhdHVzKEJpZGlTdGF0dXMgc3RhdHVzKSB7IG1fc3RhdHVzID0gc3RhdHVz
OyB9Ci0KLSAgICBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlPEl0ZXJhdG9yPiYgd2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZSgpIHsgcmV0dXJuIG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsg
fQotCi0gICAgLy8gVGhlIGN1cnJlbnQgYWxnb3JpdGhtIGhhbmRsZXMgbmVzdGVkIGlzb2xhdGVz
IG9uZSBsYXllciBvZiBuZXN0aW5nIGF0IGEgdGltZS4KLSAgICAvLyBCdXQgd2hlbiB3ZSBsYXlv
dXQgZWFjaCBpc29sYXRlZCBzcGFuLCB3ZSB3aWxsIHdhbGsgaW50byAoYW5kIGlnbm9yZSkgYWxs
Ci0gICAgLy8gY2hpbGQgaXNvbGF0ZWQgc3BhbnMuCi0gICAgdm9pZCBlbnRlcklzb2xhdGUoKSB7
IG1fbmVzdGVkSXNvbGF0ZUNvdW50Kys7IH0KLSAgICB2b2lkIGV4aXRJc29sYXRlKCkgeyBBU1NF
UlQobV9uZXN0ZWRJc29sYXRlQ291bnQgPj0gMSk7IG1fbmVzdGVkSXNvbGF0ZUNvdW50LS07IH0K
LSAgICBib29sIGluSXNvbGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVzdGVkSXNvbGF0ZUNvdW50
OyB9Ci0KLSAgICB2b2lkIGVtYmVkKFVDaGFyRGlyZWN0aW9uLCBCaWRpRW1iZWRkaW5nU291cmNl
KTsKLSAgICBib29sIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7Ci0KLSAgICB2b2lkIGNyZWF0
ZUJpZGlSdW5zRm9yTGluZShjb25zdCBJdGVyYXRvciYgZW5kLCBWaXN1YWxEaXJlY3Rpb25PdmVy
cmlkZSA9IE5vVmlzdWFsT3ZlcnJpZGUsIGJvb2wgaGFyZExpbmVCcmVhayA9IGZhbHNlKTsKLQot
ICAgIEJpZGlSdW5MaXN0PFJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX3J1bnM7IH0KLQotICAgIC8v
IEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgcGFydCBvZiBkZWxldGVSdW5zKCkgYnV0IHdhcyBhIGxh
eWVyaW5nIHZpb2xhdGlvbi4KLSAgICAvLyBJdCdzIHVuY2xlYXIgaWYgdGhpcyBpcyBzdGlsbCBu
ZWVkZWQuCi0gICAgdm9pZCBtYXJrQ3VycmVudFJ1bkVtcHR5KCkgeyBtX2VtcHR5UnVuID0gdHJ1
ZTsgfQotCi0gICAgdm9pZCBzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mLCBzaXplX3QpOwotICAgIHVuc2lnbmVkIHdoaXRlc3BhY2VDb2xsYXBzaW5n
VHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQmlkaVJl
c29sdmVyQmFzZSgpID0gZGVmYXVsdDsKLQotICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIElubGlu
ZUJpZGlSZXNvbHZlcnMgc3ViY2xhc3NpbmcgdGhpcyBtZXRob2QsIHdlIHNob3VsZAotICAgIC8v
IHBhc3MgaW4gc29tZSBzb3J0IG9mIFRyYWl0cyBvYmplY3Qgd2hpY2gga25vd3MgaG93IHRvIGNy
ZWF0ZSBydW5zIGZvciBhcHBlbmRpbmcuCi0gICAgdm9pZCBhcHBlbmRSdW4oKSB7IHN0YXRpY19j
YXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5hcHBlbmRSdW5JbnRlcm5hbCgpOyB9Ci0gICAgYm9v
bCBuZWVkc0NvbnRpbnVlUGFzdEVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IERlcml2ZWRDbGFzcyY+KCp0aGlzKS5uZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCk7IH0K
LQotICAgIEl0ZXJhdG9yIG1fY3VycmVudDsKLSAgICAvLyBzb3IgYW5kIGVvciBhcmUgInN0YXJ0
IG9mIHJ1biIgYW5kICJlbmQgb2YgcnVuIiByZXNwZWN0aXZlbHkgYW5kIGNvcnJlcG9uZAotICAg
IC8vIHRvIGFicmV2aWF0aW9ucyB1c2VkIGluIFVCQSBzcGVjOiBodHRwOi8vdW5pY29kZS5vcmcv
cmVwb3J0cy90cjkvI0JENwotICAgIEl0ZXJhdG9yIG1fc29yOyAvLyBQb2ludHMgdG8gdGhlIGZp
cnN0IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBydW4uCi0gICAgSXRlcmF0b3IgbV9lb3I7IC8v
IFBvaW50cyB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgotICAgIEl0
ZXJhdG9yIG1fbGFzdDsKLSAgICBCaWRpU3RhdHVzIG1fc3RhdHVzOwotICAgIFVDaGFyRGlyZWN0
aW9uIG1fZGlyZWN0aW9uIHsgVV9PVEhFUl9ORVVUUkFMIH07Ci0gICAgSXRlcmF0b3IgZW5kT2ZM
aW5lOwotICAgIGJvb2wgbV9yZWFjaGVkRW5kT2ZMaW5lIHsgZmFsc2UgfTsKLSAgICBJdGVyYXRv
ciBtX2xhc3RCZWZvcmVFVDsgLy8gQmVmb3JlIGEgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRP
UgotICAgIGJvb2wgbV9lbXB0eVJ1biB7IHRydWUgfTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgYmVsb25nIHRvIHRoZSByZXNvbHZlciwgYnV0IHJhdGhlciBiZSBwYXNzZWQKLSAg
ICAvLyBpbnRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBieSB0aGUgY2FsbGVyLgotICAgIEJpZGlS
dW5MaXN0PFJ1bj4gbV9ydW5zOwotCi0gICAgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxJdGVy
YXRvcj4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOwotCi0gICAgdW5zaWduZWQgbV9uZXN0
ZWRJc29sYXRlQ291bnQgeyAwIH07Ci0gICAgSGFzaE1hcDxSdW4qLCB1bnNpZ25lZD4gbV93aGl0
ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bjsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIHJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tLCBV
Q2hhckRpcmVjdGlvbiB0byk7Ci0gICAgdm9pZCBsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwo
VUNoYXJEaXJlY3Rpb24gZnJvbSk7Ci0gICAgdm9pZCBjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlz
ZUVtYmVkZGluZ0xldmVsKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVu
dERpcmVjdGlvbihVQ2hhckRpcmVjdGlvbik7Ci0gICAgdm9pZCByZW9yZGVyUnVuc0Zyb21MZXZl
bHMoKTsKLSAgICB2b2lkIGluY3JlbWVudEludGVybmFsKCkgeyBtX2N1cnJlbnQuaW5jcmVtZW50
KCk7IH0KLSAgICB2b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7Ci0gICAgYm9vbCBuZWVkc0NvbnRp
bnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgVmVjdG9y
PEJpZGlFbWJlZGRpbmcsIDg+IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2U7Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuPgotY2xhc3MgQmlk
aVJlc29sdmVyIDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJl
c29sdmVyPEl0ZXJhdG9yLCBSdW4+PiB7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
ciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBJc29sYXRlUnVuPgotY2xhc3MgQmlkaVJlc29sdmVy
V2l0aElzb2xhdGUgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBCaWRp
UmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwgUnVuLCBJc29sYXRlUnVuPj4gewotcHVibGlj
OgotICAgIH5CaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZSgpOwotCi0gICAgdm9pZCBpbmNyZW1lbnRJ
bnRlcm5hbCgpOwotICAgIHZvaWQgYXBwZW5kUnVuSW50ZXJuYWwoKTsKLSAgICBib29sIG5lZWRz
Q29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdDsKLSAgICBWZWN0b3I8SXNvbGF0ZVJ1bj4m
IGlzb2xhdGVkUnVucygpIHsgcmV0dXJuIG1faXNvbGF0ZWRSdW5zOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgVmVjdG9yPElzb2xhdGVSdW4+IG1faXNvbGF0ZWRSdW5zOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgSXNvbGF0ZVJ1bj4KLWlubGlu
ZSBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwgUnVuLCBJc29sYXRlUnVuPjo6fkJp
ZGlSZXNvbHZlcldpdGhJc29sYXRlKCkKLXsKLSAgICAvLyBUaGUgb3duZXIgb2YgdGhpcyByZXNv
bHZlciBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoZSBpc29sYXRlZCBydW5zLgotICAgIEFTU0VSVCht
X2lzb2xhdGVkUnVucy5pc0VtcHR5KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
ciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZl
ckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6YXBwZW5kUnVuSW50ZXJuYWwoKQot
ewotICAgIGlmICghbV9lbXB0eVJ1biAmJiAhbV9lb3IuYXRFbmQoKSkgewotICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IG1fc29yLm9mZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRP
ZmZzZXQgPSBtX2Vvci5vZmZzZXQoKTsKLQotICAgICAgICBpZiAoIWVuZE9mTGluZS5hdEVuZCgp
ICYmIGVuZE9mZnNldCA+PSBlbmRPZkxpbmUub2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIG1fcmVh
Y2hlZEVuZE9mTGluZSA9IHRydWU7Ci0gICAgICAgICAgICBlbmRPZmZzZXQgPSBlbmRPZkxpbmUu
b2Zmc2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZW5kT2Zmc2V0ID49IHN0YXJ0T2Zm
c2V0KQotICAgICAgICAgICAgbV9ydW5zLmFwcGVuZFJ1bihtYWtlVW5pcXVlPFJ1bj4oc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCArIDEsIGNvbnRleHQoKSwgbV9kaXJlY3Rpb24pKTsKLQotICAgICAg
ICBtX2Vvci5pbmNyZW1lbnQoKTsKLSAgICAgICAgbV9zb3IgPSBtX2VvcjsKLSAgICB9Ci0KLSAg
ICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICBtX3N0YXR1cy5lb3IgPSBVX09U
SEVSX05FVVRSQUw7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBS
dW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRv
ciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjplbWJlZChVQ2hhckRpcmVjdGlvbiBkaXIsIEJpZGlFbWJl
ZGRpbmdTb3VyY2Ugc291cmNlKQotewotICAgIC8vIElzb2xhdGVkIHNwYW5zIGNvbXB1dGUgYmFz
ZSBkaXJlY3Rpb25hbGl0eSBkdXJpbmcgdGhlaXIgb3duIFVCQSBydW4uCi0gICAgLy8gRG8gbm90
IGluc2VydCBmYWtlIGVtYmVkIGNoYXJhY3RlcnMgb25jZSB3ZSBlbnRlciBhbiBpc29sYXRlZCBz
cGFuLgotICAgIEFTU0VSVCghaW5Jc29sYXRlKCkpOwotCi0gICAgQVNTRVJUKGRpciA9PSBVX1BP
UF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyID09IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkcg
fHwgZGlyID09IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERSB8fCBkaXIgPT0gVV9SSUdIVF9UT19M
RUZUX0VNQkVERElORyB8fCBkaXIgPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFKTsKLSAgICBt
X2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmFwcGVuZChCaWRpRW1iZWRkaW5nKGRp
ciwgc291cmNlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBS
dW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRv
ciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjpjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGlu
Z0xldmVsKCkKLXsKLSAgICBBU1NFUlQobV9zdGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJBTCB8
fCBtX2Vvci5hdEVuZCgpKTsKLSAgICBBU1NFUlQobV9zdGF0dXMubGFzdCAhPSBVX0RJUl9OT05f
U1BBQ0lOR19NQVJLCi0gICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9CT1VOREFSWV9ORVVU
UkFMCi0gICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElO
RwotICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkcK
LSAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUgCi0g
ICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCi0gICAg
ICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUKTsKLSAgICBp
ZiAobV9kaXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICBtX2RpcmVjdGlvbiA9
IG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUID8gVV9MRUZUX1RPX1JJR0hU
IDogVV9SSUdIVF9UT19MRUZUOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlw
ZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8
SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6bG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVs
KFVDaGFyRGlyZWN0aW9uIGZyb20pCi17Ci0gICAgaWYgKCFtX2VtcHR5UnVuICYmIG1fZW9yICE9
IG1fbGFzdCkgewotICAgICAgICBjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xl
dmVsKCk7Ci0gICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVv
cjsgbmVlZCB0byBhcHBlbmQgdGhlIGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQg
dGhyb3VnaCBiaWRpLmxhc3QKLSAgICAgICAgaWYgKGZyb20gPT0gVV9MRUZUX1RPX1JJR0hUKSB7
Ci0gICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBMCi0g
ICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0g
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgewotICAg
ICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0U3Ry
b25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwot
ICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJF
UiB8fCBtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSIHx8IG1fc3RhdHVzLmxhc3RTdHJv
bmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICB9Ci0gICAgICAg
IG1fZW9yID0gbV9sYXN0OwotICAgIH0KLQotICAgIGFwcGVuZFJ1bigpOwotICAgIG1fZW1wdHlS
dW4gPSB0cnVlOwotCi0gICAgLy8gc29yIGZvciB0aGUgbmV3IHJ1biBpcyBkZXRlcm1pbmVkIGJ5
IHRoZSBoaWdoZXIgbGV2ZWwgKHJ1bGUgWDEwKQotICAgIHNldExhc3REaXIoZnJvbSk7Ci0gICAg
c2V0TGFzdFN0cm9uZ0Rpcihmcm9tKTsKLSAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRD
bGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+
OjpyYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJE
aXJlY3Rpb24gdG8pCi17Ci0gICAgaWYgKCFtX2VtcHR5UnVuICYmIG1fZW9yICE9IG1fbGFzdCkg
ewotICAgICAgICBjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCk7Ci0g
ICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVvcjsgbmVlZCB0
byBhcHBlbmQgdGhlIGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQgdGhyb3VnaCBi
aWRpLmxhc3QKLSAgICAgICAgaWYgKHRvID09IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAg
ICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAotICAgICAgICAgICAg
aWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKLSAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xF
RlRfVE9fUklHSFQgJiYgZnJvbSA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfTEVGVF9UT19S
SUdIVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0g
VV9BUkFCSUNfTlVNQkVSCi0gICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09IFVfRVVST1BF
QU5fTlVNQkVSICYmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCB8fCBm
cm9tID09IFVfUklHSFRfVE9fTEVGVCkpCi0gICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yICE9
IFVfRVVST1BFQU5fTlVNQkVSICYmIG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJ
R0hUICYmIGZyb20gPT0gVV9SSUdIVF9UT19MRUZUKSkgewotICAgICAgICAgICAgYXBwZW5kUnVu
KCk7Ci0gICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAg
fQotICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAgICB9Ci0KLSAgICBhcHBlbmRSdW4oKTsKLSAg
ICBtX2VtcHR5UnVuID0gdHJ1ZTsKLQotICAgIHNldExhc3REaXIodG8pOwotICAgIHNldExhc3RT
dHJvbmdEaXIodG8pOwotICAgIG1fZW9yID0gSXRlcmF0b3IoKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotYm9v
bCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNvbW1pdEV4
cGxpY2l0RW1iZWRkaW5nKCkKLXsKLSAgICAvLyBXaGVuIHdlJ3JlICJpbklzb2xhdGUoKSIgd2Un
cmUgcmVzb2x2aW5nIHRoZSBwYXJlbnQgY29udGV4dCB3aGljaAotICAgIC8vIGlnbm9yZXMgKHNr
aXBzIG92ZXIpIHRoZSBpc29sYXRlZCBjb250ZW50LCBpbmNsdWRpbmcgZW1iZWRkaW5nIGxldmVs
cy4KLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYWNjcnVlIGVtYmVkZGluZyBsZXZlbHMgd2hpbGUg
c2tpcHBpbmcgb3ZlciBpc29sYXRlZCBjb250ZW50LgotICAgIEFTU0VSVCghaW5Jc29sYXRlKCkg
fHwgbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5pc0VtcHR5KCkpOwotCi0gICAg
YXV0byBmcm9tTGV2ZWwgPSBjb250ZXh0KCktPmxldmVsKCk7Ci0gICAgUmVmUHRyPEJpZGlDb250
ZXh0PiB0b0NvbnRleHQgPSBjb250ZXh0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVtYmVkZGluZyA6
IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UpIHsKLSAgICAgICAgaWYgKGVtYmVk
ZGluZy5kaXJlY3Rpb24gPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUKSB7Ci0gICAgICAgICAg
ICBpZiAoYXV0byogcGFyZW50Q29udGV4dCA9IHRvQ29udGV4dC0+cGFyZW50KCkpCi0gICAgICAg
ICAgICAgICAgdG9Db250ZXh0ID0gcGFyZW50Q29udGV4dDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiA9IChlbWJlZGRpbmcuZGlyZWN0aW9u
ID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwgZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBV
X1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUpID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJ
R0hUOwotICAgICAgICAgICAgYm9vbCBvdmVycmlkZSA9IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0g
VV9MRUZUX1RPX1JJR0hUX09WRVJSSURFIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdI
VF9UT19MRUZUX09WRVJSSURFOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCA9IHRv
Q29udGV4dC0+bGV2ZWwoKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9SSUdIVF9U
T19MRUZUKQotICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChsZXZl
bCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGV2ZWwgPSBuZXh0R3JlYXRl
ckV2ZW5MZXZlbChsZXZlbCk7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPCA2MSkKLSAgICAgICAg
ICAgICAgICB0b0NvbnRleHQgPSBCaWRpQ29udGV4dDo6Y3JlYXRlKGxldmVsLCBkaXJlY3Rpb24s
IG92ZXJyaWRlLCBlbWJlZGRpbmcuc291cmNlLCB0b0NvbnRleHQuZ2V0KCkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgYXV0byB0b0xldmVsID0gdG9Db250ZXh0LT5sZXZlbCgpOwotCi0gICAg
aWYgKHRvTGV2ZWwgPiBmcm9tTGV2ZWwpCi0gICAgICAgIHJhaXNlRXhwbGljaXRFbWJlZGRpbmdM
ZXZlbChmcm9tTGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hULCB0
b0xldmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCk7Ci0gICAgZWxz
ZSBpZiAodG9MZXZlbCA8IGZyb21MZXZlbCkKLSAgICAgICAgbG93ZXJFeHBsaWNpdEVtYmVkZGlu
Z0xldmVsKGZyb21MZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQp
OwotCi0gICAgc2V0Q29udGV4dChXVEZNb3ZlKHRvQ29udGV4dCkpOwotCi0gICAgbV9jdXJyZW50
RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5jbGVhcigpOwotCi0gICAgcmV0dXJuIGZyb21MZXZl
bCAhPSB0b0xldmVsOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUg
UnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci1pbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNl
PEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OnVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVu
dERpcmVjdGlvbihVQ2hhckRpcmVjdGlvbiBkaXJDdXJyZW50KQotewotICAgIHN3aXRjaCAoZGly
Q3VycmVudCkgewotICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKLSAgICAg
ICAgaWYgKG1fc3RhdHVzLmxhc3QgIT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAgICAgICBt
X3N0YXR1cy5sYXN0ID0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgY2FzZSBVX0NP
TU1PTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAg
ICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoK
LSAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7Ci0gICAgICAgIGNhc2UgVV9MRUZUX1RP
X1JJR0hUOgotICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgY2FzZSBVX1JJ
R0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAg
ICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBk
aXJDdXJyZW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBtX3N0YXR1cy5sYXN0ID0gVV9PVEhFUl9ORVVUUkFMOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVV9ESVJfTk9OX1NQQUNJTkdfTUFSSzoKLSAgICBjYXNlIFVfQk9V
TkRBUllfTkVVVFJBTDoKLSAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkc6Ci0gICAg
Y2FzZSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HOgotICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X09WRVJSSURFOgotICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFOgotICAgIGNhc2Ug
VV9QT1BfRElSRUNUSU9OQUxfRk9STUFUOgotICAgICAgICAvLyBpZ25vcmUgdGhlc2UKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgRkFMTFRIUk9V
R0g7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBl
bmFtZSBEZXJpdmVkQ2xhc3M+Ci1pbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9y
LCBSdW4sIERlcml2ZWRDbGFzcz46OnJlb3JkZXJSdW5zRnJvbUxldmVscygpCi17Ci0gICAgdW5z
aWduZWQgY2hhciBsZXZlbExvdyA9IDEyODsKLSAgICB1bnNpZ25lZCBjaGFyIGxldmVsSGlnaCA9
IDA7Ci0gICAgZm9yIChSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOyBydW47IHJ1biA9IHJ1
bi0+bmV4dCgpKSB7Ci0gICAgICAgIGxldmVsSGlnaCA9IHN0ZDo6bWF4KHJ1bi0+bGV2ZWwoKSwg
bGV2ZWxIaWdoKTsKLSAgICAgICAgbGV2ZWxMb3cgPSBzdGQ6Om1pbihydW4tPmxldmVsKCksIGxl
dmVsTG93KTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGltcGxlbWVudHMgcmVvcmRlcmluZyBvZiB0
aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6Ci0gICAgLy8gaHR0cDovL3VuaWNv
ZGUub3JnL3JlcG9ydHMvdHI5LyNMMgotICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdoZXN0IGxldmVs
IGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVhY2ggbGluZSwK
LSAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhh
dCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCi0KLSAgICAvLyBSZXZlcnNpbmcgaXMgb25s
eSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsLgotICAgIGlmICghKGxldmVsTG93ICUg
MikpCi0gICAgICAgIGxldmVsTG93Kys7Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IG1fcnVucy5y
dW5Db3VudCgpIC0gMTsKLQotICAgIHdoaWxlIChsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKLSAg
ICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFJ1biogcnVuID0gbV9ydW5zLmZpcnN0UnVu
KCk7Ci0gICAgICAgIHdoaWxlIChpIDwgY291bnQpIHsKLSAgICAgICAgICAgIGZvciAoO2kgPCBj
b3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpIDwgbGV2ZWxIaWdoOyBpKyspCi0gICAgICAgICAg
ICAgICAgcnVuID0gcnVuLT5uZXh0KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IGk7
Ci0gICAgICAgICAgICBmb3IgKDtpIDw9IGNvdW50ICYmIHJ1biAmJiBydW4tPmxldmVsKCkgPj0g
bGV2ZWxIaWdoOyBpKyspCi0gICAgICAgICAgICAgICAgcnVuID0gcnVuLT5uZXh0KCk7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBlbmQgPSBpIC0gMTsKLSAgICAgICAgICAgIG1fcnVucy5yZXZlcnNl
UnVucyhzdGFydCwgZW5kKTsKLSAgICAgICAgfQotICAgICAgICBsZXZlbEhpZ2gtLTsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1l
IERlcml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJp
dmVkQ2xhc3M+OjpjcmVhdGVCaWRpUnVuc0ZvckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlz
dWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgaGFyZExpbmVCcmVhaykKLXsKLSAg
ICBBU1NFUlQobV9kaXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKTsKLQotICAgIGlmIChvdmVy
cmlkZSAhPSBOb1Zpc3VhbE92ZXJyaWRlKSB7Ci0gICAgICAgIG1fZW1wdHlSdW4gPSBmYWxzZTsK
LSAgICAgICAgbV9zb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgIG1fZW9yID0gSXRlcmF0b3IoKTsK
LSAgICAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBlbmQgJiYgIW1fY3VycmVudC5hdEVuZCgpKSB7
Ci0gICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgIGluY3JlbWVudCgp
OwotICAgICAgICB9Ci0gICAgICAgIG1fZGlyZWN0aW9uID0gb3ZlcnJpZGUgPT0gVmlzdWFsTGVm
dFRvUmlnaHRPdmVycmlkZSA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKLSAg
ICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgIG1fcnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKG1f
cnVucy5sYXN0UnVuKCkpOwotICAgICAgICBpZiAob3ZlcnJpZGUgPT0gVmlzdWFsUmlnaHRUb0xl
ZnRPdmVycmlkZSAmJiBtX3J1bnMucnVuQ291bnQoKSkKLSAgICAgICAgICAgIG1fcnVucy5yZXZl
cnNlUnVucygwLCBtX3J1bnMucnVuQ291bnQoKSAtIDEpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9lbXB0eVJ1biA9IHRydWU7Ci0KLSAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci0K
LSAgICBtX2xhc3QgPSBtX2N1cnJlbnQ7Ci0gICAgYm9vbCBwYXN0RW5kID0gZmFsc2U7Ci0gICAg
QmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+IHN0YXRlQXRFbmQ7
Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJDdXJyZW50
OwotICAgICAgICBpZiAocGFzdEVuZCAmJiAoaGFyZExpbmVCcmVhayB8fCBtX2N1cnJlbnQuYXRF
bmQoKSkpIHsKLSAgICAgICAgICAgIEJpZGlDb250ZXh0KiBjID0gY29udGV4dCgpOwotICAgICAg
ICAgICAgaWYgKGhhcmRMaW5lQnJlYWspIHsKLSAgICAgICAgICAgICAgICAvLyBBIGRldmlhdGlv
biBmcm9tIHRoZSBVbmljb2RlIEJpZGkgQWxnb3JpdGhtIGluIG9yZGVyIHRvIG1hdGNoCi0gICAg
ICAgICAgICAgICAgLy8gV2luSUUgYW5kIHVzZXIgZXhwZWN0YXRpb25zOiBoYXJkIGxpbmUgYnJl
YWtzIHJlc2V0IGJpZGkgc3RhdGUKLSAgICAgICAgICAgICAgICAvLyBjb21pbmcgZnJvbSB1bmlj
b2RlIGJpZGkgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgbm90IHRob3NlIGZyb20KLSAgICAgICAg
ICAgICAgICAvLyBET00gbm9kZXMgd2l0aCBzcGVjaWZpZWQgZGlyZWN0aW9uYWxpdHkKLSAgICAg
ICAgICAgICAgICBzdGF0ZUF0RW5kLnNldENvbnRleHQoYy0+Y29weVN0YWNrUmVtb3ZpbmdVbmlj
b2RlRW1iZWRkaW5nQ29udGV4dHMoKSk7Ci0KLSAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0g
c3RhdGVBdEVuZC5jb250ZXh0KCktPmRpcigpOwotICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQu
c2V0RW9yRGlyKGRpckN1cnJlbnQpOwotICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc2V0TGFz
dERpcihkaXJDdXJyZW50KTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3RTdHJv
bmdEaXIoZGlyQ3VycmVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHdoaWxlIChjLT5wYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYyA9IGMtPnBhcmVudCgp
OwotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBjLT5kaXIoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRpckN1cnJlbnQgPSBtX2N1cnJlbnQuZGly
ZWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCgpLT5vdmVycmlkZSgpCi0gICAgICAg
ICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORwot
ICAgICAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfTEVGVF9UT19SSUdIVF9FTUJF
RERJTkcKLSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX1JJR0hUX1RPX0xF
RlRfT1ZFUlJJREUKLSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX0xFRlRf
VE9fUklHSFRfT1ZFUlJJREUKLSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBV
X1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQpCi0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IGNv
bnRleHQoKS0+ZGlyKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChkaXJDdXJyZW50ID09IFVfRElS
X05PTl9TUEFDSU5HX01BUkspCi0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IG1fc3RhdHVz
Lmxhc3Q7Ci0gICAgICAgIH0KLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgLy8gT3VyIFdp
bmRvd3MgYnVpbGQgaGFzbid0IHVwZGF0ZWQgaXRzIGhlYWRlcnMgZnJvbSBJQ1UgNi4xLCB3aGlj
aCBkb2Vzbid0IGhhdmUgdGhlc2Ugc3ltYm9scy4KLSAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rp
b24gVV9GSVJTVF9TVFJPTkdfSVNPTEFURSA9IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigx
OSk7Ci0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVfTEVGVF9UT19SSUdIVF9JU09MQVRF
ID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIwKTsKLSAgICAgICAgY29uc3QgVUNoYXJE
aXJlY3Rpb24gVV9SSUdIVF9UT19MRUZUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVj
dGlvbj4oMjEpOwotICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1BPUF9ESVJFQ1RJT05B
TF9JU09MQVRFID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIyKTsKLSNlbmRpZgotICAg
ICAgICAvLyBXZSBpZ25vcmUgYWxsIGNoYXJhY3RlciBkaXJlY3Rpb25hbGl0eSB3aGlsZSBpbiB1
bmljb2RlLWJpZGk6IGlzb2xhdGUgc3BhbnMuCi0gICAgICAgIC8vIFdlJ2xsIGhhbmRsZSBvcmRl
cmluZyB0aGUgaXNvbGF0ZWQgY2hhcmFjdGVycyBpbiBhIHNlY29uZCBwYXNzLgotICAgICAgICBp
ZiAoaW5Jc29sYXRlKCkgfHwgZGlyQ3VycmVudCA9PSBVX0ZJUlNUX1NUUk9OR19JU09MQVRFIHx8
IGRpckN1cnJlbnQgPT0gVV9MRUZUX1RPX1JJR0hUX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBV
X1JJR0hUX1RPX0xFRlRfSVNPTEFURSB8fCBkaXJDdXJyZW50ID09IFVfUE9QX0RJUkVDVElPTkFM
X0lTT0xBVEUpCi0gICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9PVEhFUl9ORVVUUkFMOwotCi0g
ICAgICAgIEFTU0VSVChtX3N0YXR1cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0
RW5kKCkpOwotICAgICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKLQotICAgICAgICAvLyBlbWJl
ZGRpbmcgYW5kIG92ZXJyaWRlcyAoWDEtWDkgaW4gdGhlIEJpZGkgc3BlY3MpCi0gICAgICAgIGNh
c2UgVV9SSUdIVF9UT19MRUZUX0VNQkVERElORzoKLSAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklH
SFRfRU1CRURESU5HOgotICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToKLSAg
ICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU6Ci0gICAgICAgIGNhc2UgVV9QT1Bf
RElSRUNUSU9OQUxfRk9STUFUOgotICAgICAgICAgICAgZW1iZWQoZGlyQ3VycmVudCwgRnJvbVVu
aWNvZGUpOwotICAgICAgICAgICAgY29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIC8vIHN0cm9uZyB0eXBlcwotICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKLSAgICAgICAgICAgIHN3aXRjaChtX3N0YXR1cy5sYXN0KSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1JJ
R0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSIHx8IG1fc3RhdHVz
Lmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKQotICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAg
ICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9C
T1VOREFSWV9ORVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6
Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAg
ICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9P
VEhFUl9ORVVUUkFMOgotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVf
RVVST1BFQU5fTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMu
bGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgbnVtYmVycyBuZWVkIHRvIGJlIG9uIGEgaGlnaGVyIGVtYmVkZGluZyBsZXZl
bCwgc28gbGV0J3MgY2xvc2UgdGhhdCBydW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
KCktPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiwgd2hp
Y2ggaXMgUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RP
X0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVN
QkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcmFiaWMgbnVtYmVycyBhcmUgYWx3
YXlzIG9uIGEgaGlnaGVyIGVtYmVkZGluZyBsZXZlbCwgc28gbGV0J3MgY2xvc2UgdGhhdCBydW4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9BUkFCSUNfTlVNQkVSOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRp
cmVjdGlvbiwgd2hpY2ggaXMgUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdI
VF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
c3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvL2xhc3Qgc3R1ZmYgdGFrZXMgZW1iZWRkaW5nIGRpcgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7IAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgIG1fc3RhdHVzLmVv
ciA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgIG1fc3RhdHVzLmxhc3RTdHJvbmcgPSBV
X0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfTEVGVF9UT19SSUdI
VDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFC
SUM6Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAgICAgICAgc3dpdGNoICht
X3N0YXR1cy5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICBj
YXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICAgICAgICAgIGNhc2UgVV9S
SUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJ
QzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFO
X05VTUJFUl9URVJNSU5BVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVS
X1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKLSAg
ICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNh
c2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfV0hJVEVfU1BB
Q0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZU
X1RPX1JJR0hUICYmIGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hUKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0
dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25n
ID09IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hUKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZW9yID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgIG1fc3Rh
dHVzLmVvciA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgIG1fc3RhdHVzLmxhc3RTdHJv
bmcgPSBkaXJDdXJyZW50OwotICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xF
RlQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gd2VhayB0eXBlczoKLQot
ICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAgICAgICAgaWYgKG1fc3RhdHVz
Lmxhc3RTdHJvbmcgIT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQykgewotICAgICAgICAgICAgICAg
IC8vIGlmIGxhc3Qgc3Ryb25nIHdhcyBBTCBjaGFuZ2UgRU4gdG8gQU4KLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19M
RUZUX0FSQUJJQzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24g
PSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEZBTExUSFJPVUdIOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVS
X1RFUk1JTkFUT1I6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFM
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVf
T1RIRVJfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRU5zIG9uIGJvdGggc2lkZXMgYmVoYXZlIGxpa2UgUnMsIHNv
IHRoZSBuZXV0cmFscyBzaG91bGQgYmUgUi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGVybWluYXRlIHRoZSBFTiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IGFuIFIgcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3Rh
dHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVU
IDogbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVO
IHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VV
Uk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIEFOIHJ1bi4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQg
fHwgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9lb3IgPSBtX3N0YXR1cy5sYXN0ID09IFVfRVVST1BFQU5fTlVNQkVSX1RF
Uk1JTkFUT1IgPyBtX2xhc3RCZWZvcmVFVCA6IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBCZWdpbiBhIG5ldyBFTiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1
cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEV4dGVuZCB0aGUgUiBydW4gdG8gaW5jbHVkZSB0aGUgbmV1dHJhbHMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX3N0YXR1cy5sYXN0ID09IFVfRVVST1BF
QU5fTlVNQkVSX1RFUk1JTkFUT1IgPyBtX2xhc3RCZWZvcmVFVCA6IG1fbGFzdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBCZWdpbiBhIG5ldyBFTiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgICAg
IG1fc3RhdHVzLmVvciA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgIGlmICht
X2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCi0gICAgICAgICAgICAgICAgICAgIG1fZGly
ZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIGNhc2UgVV9BUkFCSUNf
TlVNQkVSOgotICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAg
ICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNhc2UgVV9M
RUZUX1RPX1JJR0hUOgotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSA9
PSBVX0xFRlRfVE9fUklHSFQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJ
Q19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAg
ICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
VV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3Rh
dHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9CT1VOREFS
WV9ORVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNh
c2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9PVEhFUl9O
RVVUUkFMOgotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklD
X05VTUJFUgotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VV
Uk9QRUFOX05VTUJFUiAmJiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQg
fHwgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFOX05VTUJFUiAmJiBtX3N0YXR1
cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBjb250ZXh0KCktPmRpcigpID09IFVf
UklHSFRfVE9fTEVGVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0
aGUgcnVuIGJlZm9yZSB0aGUgbmV1dHJhbHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGFuIFIgcnVuIGZvciB0
aGUgbmV1dHJhbHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklH
SFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2RpcmVjdGlvbiA9
PSBVX09USEVSX05FVVRSQUwpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUID8gVV9MRUZUX1RPX1JJR0hU
IDogVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsK
LSAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAg
ICAgICBtX3N0YXR1cy5lb3IgPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICBpZiAobV9k
aXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9T
RVBBUkFUT1I6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05V
TUJFUl9URVJNSU5BVE9SOgotICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJP
UEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9FVVJPUEVBTl9O
VU1CRVI7Ci0gICAgICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICAg
ICAgbV9zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9z
dGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SKQotICAgICAgICAgICAg
ICAgIG1fbGFzdEJlZm9yZUVUID0gbV9lbXB0eVJ1biA/IG1fZW9yIDogbV9sYXN0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gYm91bmRhcnkgbmV1dHJhbHMgc2hvdWxkIGJlIGln
bm9yZWQKLSAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAgICBpZiAo
bV9lb3IgPT0gbV9sYXN0KQotICAgICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBuZXV0cmFscwotICAgICAgICBjYXNlIFVf
QkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gd2UgZG8gd2l0
aCBuZXdsaW5lIGFuZCBwYXJhZ3JhcGggc2VwYXJhdG9ycyB0aGF0IGNvbWUgdG8gaGVyZT8KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJ1bGUgTDEuCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHBhc3RFbmQgJiYgKG1fZW9yID09IG1fY3VycmVudCB8fCAhbmVlZHNDb250aW51ZVBhc3RFbmQo
KSkpIHsKLSAgICAgICAgICAgIGlmICghbV9yZWFjaGVkRW5kT2ZMaW5lKSB7Ci0gICAgICAgICAg
ICAgICAgbV9lb3IgPSBlbmRPZkxpbmU7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1
cy5lb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gbV9zdGF0dXMuZW9yOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJ
R0hUID8gVV9MRUZUX1RPX1JJR0hUIDogVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbmV1dHJhbHMgaW4gdGhpcyBjYXNlLiBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDgxNwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jdXJyZW50ID0g
ZW5kOwotICAgICAgICAgICAgbV9zdGF0dXMgPSBzdGF0ZUF0RW5kLm1fc3RhdHVzOwotICAgICAg
ICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1fc29yOyAKLSAgICAgICAgICAgIG1fZW9yID0gc3Rh
dGVBdEVuZC5tX2VvcjsKLSAgICAgICAgICAgIG1fbGFzdCA9IHN0YXRlQXRFbmQubV9sYXN0Owot
ICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5lID0gc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRP
ZkxpbmU7Ci0gICAgICAgICAgICBtX2xhc3RCZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVm
b3JlRVQ7Ci0gICAgICAgICAgICBtX2VtcHR5UnVuID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOwot
ICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX09USEVSX05FVVRSQUw7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERp
cmVjdGlvbihkaXJDdXJyZW50KTsKLSAgICAgICAgbV9sYXN0ID0gbV9jdXJyZW50OwotCi0gICAg
ICAgIGlmIChtX2VtcHR5UnVuKSB7Ci0gICAgICAgICAgICBtX3NvciA9IG1fY3VycmVudDsKLSAg
ICAgICAgICAgIG1fZW1wdHlSdW4gPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGluY3Jl
bWVudCgpOwotICAgICAgICBpZiAoIW1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2Uu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBib29sIGNvbW1pdHRlZCA9IGNvbW1pdEV4cGxpY2l0
RW1iZWRkaW5nKCk7Ci0gICAgICAgICAgICBpZiAoY29tbWl0dGVkICYmIHBhc3RFbmQpIHsKLSAg
ICAgICAgICAgICAgICBtX2N1cnJlbnQgPSBlbmQ7Ci0gICAgICAgICAgICAgICAgbV9zdGF0dXMg
PSBzdGF0ZUF0RW5kLm1fc3RhdHVzOwotICAgICAgICAgICAgICAgIG1fc29yID0gc3RhdGVBdEVu
ZC5tX3NvcjsgCi0gICAgICAgICAgICAgICAgbV9lb3IgPSBzdGF0ZUF0RW5kLm1fZW9yOwotICAg
ICAgICAgICAgICAgIG1fbGFzdCA9IHN0YXRlQXRFbmQubV9sYXN0OwotICAgICAgICAgICAgICAg
IG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lOwotICAg
ICAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVUID0gc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVDsK
LSAgICAgICAgICAgICAgICBtX2VtcHR5UnVuID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOwotICAg
ICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwYXN0
RW5kICYmIChtX2N1cnJlbnQgPT0gZW5kIHx8IG1fY3VycmVudC5hdEVuZCgpKSkgewotICAgICAg
ICAgICAgaWYgKG1fZW1wdHlSdW4pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBzdGF0ZUF0RW5kLm1fc3RhdHVzID0gbV9zdGF0dXM7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5k
Lm1fc29yID0gbV9zb3I7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fZW9yID0gbV9lb3I7Ci0g
ICAgICAgICAgICBzdGF0ZUF0RW5kLm1fbGFzdCA9IG1fbGFzdDsKLSAgICAgICAgICAgIHN0YXRl
QXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lID0gbV9yZWFjaGVkRW5kT2ZMaW5lOwotICAgICAgICAg
ICAgc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVCA9IG1fbGFzdEJlZm9yZUVUOwotICAgICAgICAg
ICAgc3RhdGVBdEVuZC5tX2VtcHR5UnVuID0gbV9lbXB0eVJ1bjsKLSAgICAgICAgICAgIGVuZE9m
TGluZSA9IG1fbGFzdDsKLSAgICAgICAgICAgIHBhc3RFbmQgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgbV9ydW5zLnNldExvZ2ljYWxseUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7
Ci0gICAgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7Ci0gICAgZW5kT2ZMaW5lID0gSXRlcmF0b3Io
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERl
cml2ZWRDbGFzcz46OnNldFdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVk
UnVuKFJ1biYgcnVuLCBzaXplX3QgdHJhbnNpdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fd2hpdGVz
cGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4uY29udGFpbnMoJnJ1bikpOwot
ICAgIG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4uYWRkKCZy
dW4sIHRyYW5zaXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5h
bWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci11bnNpZ25lZCBCaWRpUmVzb2x2ZXJCYXNl
PEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNp
dGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVuKQotewotICAgIHJldHVybiBtX3doaXRlc3BhY2VD
b2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLnRha2UoJnJ1bik7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQmlkaVJ1bkxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxp
c3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4MzhhMjUyYzVjMzI0ZGQzMDdm
ZDhmZTViNjJjZDQ5Mzk5MmJlZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodCByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZu
ZGVmIEJpZGlSdW5MaXN0X2gKLSNkZWZpbmUgQmlkaVJ1bkxpc3RfaAotCi0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGUgPGNsYXNz
IFJ1bj4KLWNsYXNzIEJpZGlSdW5MaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRp
UnVuTGlzdCk7Ci1wdWJsaWM6Ci0gICAgQmlkaVJ1bkxpc3QoKQotICAgICAgICA6IG1fbGFzdFJ1
bihudWxscHRyKQotICAgICAgICAsIG1fbG9naWNhbGx5TGFzdFJ1bihudWxscHRyKQotICAgICAg
ICAsIG1fcnVuQ291bnQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IE9uY2UgQmlk
aVJlc29sdmVyIG5vIGxvbmdlciBvd25zIHRoZSBCaWRpUnVuTGlzdCwKLSAgICAvLyB0aGVuIH5C
aWRpUnVuTGlzdCBzaG91bGQgY2FsbCBkZWxldGVSdW5zKCkgYXV0b21hdGljYWxseS4KLQotICAg
IFJ1biogZmlyc3RSdW4oKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UnVuLmdldCgpOyB9Ci0gICAg
UnVuKiBsYXN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuOyB9Ci0gICAgUnVuKiBsb2dp
Y2FsbHlMYXN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsbHlMYXN0UnVuOyB9Ci0gICAg
dW5zaWduZWQgcnVuQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3J1bkNvdW50OyB9Ci0KLSAgICB2
b2lkIGFwcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYmKTsKLSAgICB2b2lkIHByZXBlbmRS
dW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7Ci0KLSAgICB2b2lkIG1vdmVSdW5Ub0VuZChSdW4q
KTsKLSAgICB2b2lkIG1vdmVSdW5Ub0JlZ2lubmluZyhSdW4qKTsKLQotICAgIHZvaWQgY2xlYXIo
KTsKLSAgICB2b2lkIHJldmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOwot
ICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7Ci0KLSAgICB2b2lkIHNldExvZ2ljYWxs
eUxhc3RSdW4oUnVuKiBydW4pIHsgbV9sb2dpY2FsbHlMYXN0UnVuID0gcnVuOyB9Ci0KLSAgICB2
b2lkIHJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1bkxpc3Q8UnVuPiYg
bmV3UnVucyk7Ci0KLXByaXZhdGU6Ci0KLSAgICAvLyBUaGUgcnVucyBmb3JtIGEgc2luZ2x5LWxp
bmtlZC1saXN0LCB3aGVyZSB0aGUgbGlua3MgKFJ1bjo6bV9uZXh0KSBpbXBseSBvd25lcnNoaXAg
KGFuZCBhcmUgb2YgdHlwZSBzdGQ6OnVuaXF1ZV9wdHIpLgotICAgIC8vIFRoZSByYXcgcG9pbnRl
cnMgYmVsb3cgcG9pbnQgaW50byB0aGUgc2luZ2x5LWxpbmtlZC1saXN0LgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdW4+IG1fZmlyc3RSdW47IC8vIFRoZSBoZWFkIG9mIHRoZSBsaXN0Ci0gICAgUnVu
KiBtX2xhc3RSdW47Ci0gICAgUnVuKiBtX2xvZ2ljYWxseUxhc3RSdW47Ci0gICAgdW5zaWduZWQg
bV9ydW5Db3VudDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRp
UnVuTGlzdDxSdW4+OjphcHBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJiBydW4pCi17Ci0g
ICAgaWYgKCFtX2ZpcnN0UnVuKSB7Ci0gICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHJ1bik7
Ci0gICAgICAgIG1fbGFzdFJ1biA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9sYXN0UnVuLT5zZXROZXh0KFdURk1vdmUocnVuKSk7Ci0gICAgICAgIG1fbGFzdFJ1
biA9IG1fbGFzdFJ1bi0+bmV4dCgpOwotICAgIH0KLSAgICBtX3J1bkNvdW50Kys7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpwcmVwZW5k
UnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQotewotICAgIEFTU0VSVCghcnVuLT5uZXh0
KCkpOwotCi0gICAgaWYgKCFtX2xhc3RSdW4pCi0gICAgICAgIG1fbGFzdFJ1biA9IHJ1bi5nZXQo
KTsKLSAgICBlbHNlCi0gICAgICAgIHJ1bi0+c2V0TmV4dChXVEZNb3ZlKG1fZmlyc3RSdW4pKTsK
LSAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOwotICAgIG1fcnVuQ291bnQrKzsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFJ1bj4KLWlubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46Om1vdmVS
dW5Ub0VuZChSdW4qIHJ1bikKLXsKLSAgICBBU1NFUlQobV9maXJzdFJ1bik7Ci0gICAgQVNTRVJU
KG1fbGFzdFJ1bik7Ci0gICAgQVNTRVJUKHJ1bi0+bmV4dCgpKTsKLQotICAgIFJ1biogcHJldmlv
dXMgPSBudWxscHRyOwotICAgIFJ1biogY3VycmVudCA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAg
d2hpbGUgKGN1cnJlbnQgIT0gcnVuKSB7Ci0gICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKLSAg
ICAgICAgY3VycmVudCA9IHByZXZpb3VzLT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFwcmV2
aW91cykgewotICAgICAgICBBU1NFUlQobV9maXJzdFJ1bi5nZXQoKSA9PSBydW4pOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBvcmlnaW5hbEZpcnN0UnVuID0gV1RGTW92ZShtX2ZpcnN0
UnVuKTsKLSAgICAgICAgbV9maXJzdFJ1biA9IG9yaWdpbmFsRmlyc3RSdW4tPnRha2VOZXh0KCk7
Ci0gICAgICAgIG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKG9yaWdpbmFsRmlyc3RSdW4pKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2
aW91cy0+dGFrZU5leHQoKTsKLSAgICAgICAgcHJldmlvdXMtPnNldE5leHQoY3VycmVudC0+dGFr
ZU5leHQoKSk7Ci0gICAgICAgIG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHRhcmdldCkpOwot
ICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFJ1bj4KLWlubGluZSB2b2lkIEJpZGlSdW5MaXN0
PFJ1bj46Om1vdmVSdW5Ub0JlZ2lubmluZyhSdW4qIHJ1bikKLXsKLSAgICBBU1NFUlQobV9maXJz
dFJ1bik7Ci0gICAgQVNTRVJUKG1fbGFzdFJ1bik7Ci0gICAgQVNTRVJUKHJ1biAhPSBtX2ZpcnN0
UnVuLmdldCgpKTsKLQotICAgIFJ1biogcHJldmlvdXMgPSBtX2ZpcnN0UnVuLmdldCgpOwotICAg
IFJ1biogY3VycmVudCA9IHByZXZpb3VzLT5uZXh0KCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQgIT0g
cnVuKSB7Ci0gICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKLSAgICAgICAgY3VycmVudCA9IHBy
ZXZpb3VzLT5uZXh0KCk7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0
ID0gcHJldmlvdXMtPnRha2VOZXh0KCk7Ci0gICAgcHJldmlvdXMtPnNldE5leHQocnVuLT50YWtl
TmV4dCgpKTsKLSAgICBpZiAocnVuID09IG1fbGFzdFJ1bikKLSAgICAgICAgbV9sYXN0UnVuID0g
cHJldmlvdXM7Ci0KLSAgICB0YXJnZXQtPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7Ci0g
ICAgbV9maXJzdFJ1biA9IFdURk1vdmUodGFyZ2V0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFJ1
bj4KLXZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cmVwbGFjZVJ1bldpdGhSdW5zKFJ1biogdG9SZXBs
YWNlLCBCaWRpUnVuTGlzdDxSdW4+JiBuZXdSdW5zKQotewotICAgIEFTU0VSVChuZXdSdW5zLnJ1
bkNvdW50KCkpOwotICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsKLSAgICBBU1NFUlQodG9SZXBsYWNl
KTsKLQotICAgIG1fcnVuQ291bnQgKz0gbmV3UnVucy5ydW5Db3VudCgpIC0gMTsgLy8gV2UgYXJl
IGFkZGluZyB0aGUgbmV3IHJ1bnMgYW5kIHJlbW92aW5nIHRvUmVwbGFjZS4KLQotICAgIC8vIEZp
eCB1cCBhbnkgcG9pbnRlcnMgd2hpY2ggbWF5IGVuZCB1cCBzdGFsZS4KLSAgICBpZiAobV9sYXN0
UnVuID09IHRvUmVwbGFjZSkKLSAgICAgICAgbV9sYXN0UnVuID0gbmV3UnVucy5sYXN0UnVuKCk7
Ci0gICAgaWYgKG1fbG9naWNhbGx5TGFzdFJ1biA9PSB0b1JlcGxhY2UpCi0gICAgICAgIG1fbG9n
aWNhbGx5TGFzdFJ1biA9IG5ld1J1bnMubG9naWNhbGx5TGFzdFJ1bigpOwotCi0gICAgaWYgKG1f
Zmlyc3RSdW4uZ2V0KCkgPT0gdG9SZXBsYWNlKSB7Ci0gICAgICAgIG5ld1J1bnMubV9sYXN0UnVu
LT5zZXROZXh0KG1fZmlyc3RSdW4tPnRha2VOZXh0KCkpOwotICAgICAgICBtX2ZpcnN0UnVuID0g
V1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZp
bmQgdGhlIHJ1biBqdXN0IGJlZm9yZSAidG9SZXBsYWNlIiBpbiB0aGUgbGlzdCBvZiBydW5zLgot
ICAgICAgICBSdW4qIHByZXZpb3VzUnVuID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICAgICAgd2hp
bGUgKHByZXZpb3VzUnVuLT5uZXh0KCkgIT0gdG9SZXBsYWNlKQotICAgICAgICAgICAgcHJldmlv
dXNSdW4gPSBwcmV2aW91c1J1bi0+bmV4dCgpOwotICAgICAgICBBU1NFUlQocHJldmlvdXNSdW4p
OwotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzUnVuLT50
YWtlTmV4dCgpOwotICAgICAgICBwcmV2aW91c1J1bi0+c2V0TmV4dChXVEZNb3ZlKG5ld1J1bnMu
bV9maXJzdFJ1bikpOwotICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dCh0YXJnZXQt
PnRha2VOZXh0KCkpOwotICAgIH0KLQotICAgIG5ld1J1bnMuY2xlYXIoKTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFJ1bj4KLXZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6Y2xlYXIoKQotewotICAgIG1f
Zmlyc3RSdW4gPSBudWxscHRyOwotICAgIG1fbGFzdFJ1biA9IG51bGxwdHI7Ci0gICAgbV9sb2dp
Y2FsbHlMYXN0UnVuID0gbnVsbHB0cjsKLSAgICBtX3J1bkNvdW50ID0gMDsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFJ1bj4KLXZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cmV2ZXJzZVJ1bnModW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbmQgPCBt
X3J1bkNvdW50KTsKLQotICAgIC8vIEdldCB0aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRo
ZSBydW5zIHRvIHJldmVyc2UgYW5kIHB1dCBpdCBpbgotICAgIC8vIHxiZWZvcmVTdGFydHwuIHxj
dXJyfCBzaG91bGQgcG9pbnQgdG8gdGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgotICAgIFJ1biog
Y3VyciA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAgUnVuKiBiZWZvcmVTdGFydCA9IG51bGxwdHI7
Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCBzdGFydDsgKytpKSB7Ci0gICAg
ICAgIGJlZm9yZVN0YXJ0ID0gY3VycjsKLSAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKLSAg
ICB9Ci0gICAgUnVuKiBzdGFydFJ1biA9IGN1cnI7Ci0KLSAgICBmb3IgKDsgaSA8IGVuZDsgKytp
KQotICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCgpOwotCi0gICAgaWYgKCFjdXJyLT5uZXh0KCkp
Ci0gICAgICAgIG1fbGFzdFJ1biA9IHN0YXJ0UnVuOwotCi0gICAgLy8gU3RhbmRhcmQgInNsaWRp
bmcgd2luZG93IiBvZiAzIHBvaW50ZXJzCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJldmlv
dXMgPSBjdXJyLT50YWtlTmV4dCgpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJlbnQg
PSBiZWZvcmVTdGFydCA/IGJlZm9yZVN0YXJ0LT50YWtlTmV4dCgpIDogV1RGTW92ZShtX2ZpcnN0
UnVuKTsKLSAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVu
PiBuZXh0ID0gY3VycmVudC0+dGFrZU5leHQoKTsKLSAgICAgICAgY3VycmVudC0+c2V0TmV4dChX
VEZNb3ZlKHByZXZpb3VzKSk7Ci0gICAgICAgIHByZXZpb3VzID0gV1RGTW92ZShjdXJyZW50KTsK
LSAgICAgICAgY3VycmVudCA9IFdURk1vdmUobmV4dCk7Ci0gICAgfQotCi0gICAgaWYgKGJlZm9y
ZVN0YXJ0KQotICAgICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3VzKSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2aW91cyk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEJpZGlSdW5MaXN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjY1NjNiYzhhZWU2YTFmZGQyNGIxMjZlN2UxZGZm
ZmU0MTNlMzhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8dW5pY29kZS91Y2hh
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2pp
R3JvdXBDYW5kaWRhdGUoVUNoYXIzMiBjaGFyYWN0ZXIpCi17Ci0jZGVmaW5lIFNZTUJPTFNfQU5E
X1BJQ1RPR1JBUEhTX0VYVEVOREVEX0EgMjk4Ci0jaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0g
PCA2NAotI2RlZmluZSBVQkxPQ0tfU1lNQk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURfQSBT
WU1CT0xTX0FORF9QSUNUT0dSQVBIU19FWFRFTkRFRF9BCi0jZWxzZQotc3RhdGljX2Fzc2VydChV
QkxPQ0tfU1lNQk9MU19BTkRfUElDVE9HUkFQSFNfRVhURU5ERURfQSA9PSBTWU1CT0xTX0FORF9Q
SUNUT0dSQVBIU19FWFRFTkRFRF9BKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChzdGF0aWNfY2Fz
dDxpbnQ+KHVibG9ja19nZXRDb2RlKGNoYXJhY3RlcikpKSB7Ci0gICAgY2FzZSBVQkxPQ0tfTUlT
Q0VMTEFORU9VU19TWU1CT0xTOgotICAgIGNhc2UgVUJMT0NLX0RJTkdCQVRTOgotICAgIGNhc2Ug
VUJMT0NLX01JU0NFTExBTkVPVVNfU1lNQk9MU19BTkRfUElDVE9HUkFQSFM6Ci0gICAgY2FzZSBV
QkxPQ0tfRU1PVElDT05TOgotICAgIGNhc2UgVUJMT0NLX1RSQU5TUE9SVF9BTkRfTUFQX1NZTUJP
TFM6Ci0gICAgY2FzZSBVQkxPQ0tfU1VQUExFTUVOVEFMX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhT
OgotICAgIGNhc2UgVUJMT0NLX1NZTUJPTFNfQU5EX1BJQ1RPR1JBUEhTX0VYVEVOREVEX0E6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0Vtb2ppRml0enBhdHJpY2tNb2RpZmll
cihVQ2hhcjMyIGNoYXJhY3RlcikKLXsKLSAgICAvLyBVKzFGM0ZCIC0gRU1PSkkgTU9ESUZJRVIg
RklUWlBBVFJJQ0sgVFlQRS0xLTIKLSAgICAvLyBVKzFGM0ZDIC0gRU1PSkkgTU9ESUZJRVIgRklU
WlBBVFJJQ0sgVFlQRS0zCi0gICAgLy8gVSsxRjNGRCAtIEVNT0pJIE1PRElGSUVSIEZJVFpQQVRS
SUNLIFRZUEUtNAotICAgIC8vIFUrMUYzRkUgLSBFTU9KSSBNT0RJRklFUiBGSVRaUEFUUklDSyBU
WVBFLTUKLSAgICAvLyBVKzFGM0ZGIC0gRU1PSkkgTU9ESUZJRVIgRklUWlBBVFJJQ0sgVFlQRS02
Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyID49IDB4MUYzRkIgJiYgY2hhcmFjdGVyIDw9IDB4MUYz
RkY7Ci19Ci0KLWlubGluZSBib29sIGlzVmFyaWF0aW9uU2VsZWN0b3IoVUNoYXIzMiBjaGFyYWN0
ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA+PSAweEZFMDAgJiYgY2hhcmFjdGVyIDw9IDB4
RkUwRjsKLX0KLQotaW5saW5lIGJvb2wgaXNFbW9qaUtleWNhcEJhc2UoVUNoYXIzMiBjaGFyYWN0
ZXIpCi17Ci0gICAgcmV0dXJuIChjaGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnOScp
IHx8IGNoYXJhY3RlciA9PSAnIycgfHwgY2hhcmFjdGVyID09ICcqJzsKLX0KLQotaW5saW5lIGJv
b2wgaXNFbW9qaVJlZ2lvbmFsSW5kaWNhdG9yKFVDaGFyMzIgY2hhcmFjdGVyKQotewotICAgIHJl
dHVybiBjaGFyYWN0ZXIgPj0gMHgxRjFFNiAmJiBjaGFyYWN0ZXIgPD0gMHgxRjFGRjsKLX0KLQot
aW5saW5lIGJvb2wgaXNFbW9qaVdpdGhQcmVzZW50YXRpb25CeURlZmF1bHQoVUNoYXIzMiBjaGFy
YWN0ZXIpCi17Ci0gICAgcmV0dXJuIHVfaGFzQmluYXJ5UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hB
Ul9FTU9KSV9QUkVTRU5UQVRJT04pOwotfQotCi1pbmxpbmUgYm9vbCBpc0Vtb2ppTW9kaWZpZXJC
YXNlKFVDaGFyMzIgY2hhcmFjdGVyKQotewotICAgIHJldHVybiB1X2hhc0JpbmFyeVByb3BlcnR5
KGNoYXJhY3RlciwgVUNIQVJfRU1PSklfTU9ESUZJRVJfQkFTRSk7Ci19Ci0KLWlubGluZSBib29s
IGlzRGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlcikKLXsKLSAgICBy
ZXR1cm4gdV9oYXNCaW5hcnlQcm9wZXJ0eShjaGFyYWN0ZXIsIFVDSEFSX0RFRkFVTFRfSUdOT1JB
QkxFX0NPREVfUE9JTlQpOwotfQotCi1pbmxpbmUgYm9vbCBpc0NvbnRyb2xDaGFyYWN0ZXIoVUNo
YXIzMiBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIHVfZ2V0SW50UHJvcGVydHlWYWx1ZShjaGFy
YWN0ZXIsIFVDSEFSX0dFTkVSQUxfQ0FURUdPUlkpID09IFVfQ09OVFJPTF9DSEFSOwotfQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2ExOGJjZWEwMTc5NjMwYjkwZWVkYzYyNjQy
YjNkYTc3ZTBiMTY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGF0ZVRpbWVGb3JtYXQuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0ZVRpbWVGb3JtYXQuaCIKLQotI2lmIEVOQUJMRShEQVRF
X0FORF9USU1FX0lOUFVUX1RZUEVTKQotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBjb25zdCBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGxvd2VyQ2FzZVRvRmllbGRU
eXBlTWFwWzI2XSA9IHsKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlUGVyaW9kLCAvLyBh
Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIGIKLSAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlTG9jYWxEYXlPZldlZWtTdGFuZEFsb24sIC8vIGMKLSAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aCwgLy8gZAotICAgIERhdGVUaW1lRm9ybWF0
OjpGaWVsZFR5cGVMb2NhbERheU9mV2VlaywgLy8gZQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCAvLyBmCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vZGlmaWVk
SnVsaWFuRGF5LCAvLyBnCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMiwgLy8g
aAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBpCi0gICAgRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIGoKLSAgICBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlSG91cjI0LCAvLyBrCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IC8vIGwKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWludXRlLCAvLyBtCi0gICAgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIG4KLSAgICBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlSW52YWxpZCwgLy8gbwotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZh
bGlkLCAvLyBwCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVF1YXRlclN0YW5kQWxvbmUs
IC8vIHEKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gcgotICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVTZWNvbmQsIC8vIHMKLSAgICBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlSW52YWxpZCwgLy8gdAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVFeHRl
bmRlZFllYXIsIC8vIHUKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTm9uTG9jYXRpb25a
b25lLCAvLyB2Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVdlZWtPZlllYXIsIC8vIHcK
LSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8geAotICAgIERhdGVUaW1l
Rm9ybWF0OjpGaWVsZFR5cGVZZWFyLCAvLyB5Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZVpvbmUsIC8vIHoKLX07Ci0KLXN0YXRpYyBjb25zdCBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBl
IHVwcGVyQ2FzZVRvRmllbGRUeXBlTWFwWzI2XSA9IHsKLSAgICBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlTWlsbGlzZWNvbmRzSW5EYXksIC8vIEEKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlSW52YWxpZCwgLy8gQgotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAv
LyBDCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mWWVhciwgLy8gRAotICAgIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVEYXlPZldlZWssIC8vIEUKLSAgICBEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlRGF5T2ZXZWVrSW5Nb250aCwgLy8gRgotICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVFcmEsIC8vIEcKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjIzLCAv
LyBICi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIEkKLSAgICBEYXRl
VGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gSgotICAgIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVIb3VyMTEsIC8vIEsKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhT
dGFuZEFsb25lLCAvLyBMCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoLCAvLyBN
Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQsIC8vIE4KLSAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gTwotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCAvLyBQCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVF1YXRlciwg
Ly8gUQotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVJbnZhbGlkLCAvLyBSCi0gICAgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUZyYWN0aW9uYWxTZWNvbmQsIC8vIFMKLSAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gVAotICAgIERhdGVUaW1lRm9ybWF0OjpGaWVs
ZFR5cGVJbnZhbGlkLCAvLyBVCi0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUludmFsaWQs
IC8vIFYKLSAgICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlV2Vla09mTW9udGgsIC8vIFcKLSAg
ICBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSW52YWxpZCwgLy8gWAotICAgIERhdGVUaW1lRm9y
bWF0OjpGaWVsZFR5cGVZZWFyT2ZXZWVrT2ZZZWFyLCAvLyBZCi0gICAgRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZVJGQzgyMlpvbmUsIC8vIFoKLX07Ci0KLXN0YXRpYyBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlIG1hcENoYXJhY3RlclRvRmllbGRUeXBlKGNvbnN0IFVDaGFyIGNoKQotewotICAg
IGlmIChpc0FTQ0lJVXBwZXIoY2gpKQotICAgICAgICByZXR1cm4gdXBwZXJDYXNlVG9GaWVsZFR5
cGVNYXBbY2ggLSAnQSddOwotCi0gICAgaWYgKGlzQVNDSUlMb3dlcihjaCkpCi0gICAgICAgIHJl
dHVybiBsb3dlckNhc2VUb0ZpZWxkVHlwZU1hcFtjaCAtICdhJ107Ci0KLSAgICByZXR1cm4gRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxpdGVyYWw7Ci19Ci0KLWJvb2wgRGF0ZVRpbWVGb3JtYXQ6
OnBhcnNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBUb2tlbkhhbmRsZXImIHRva2VuSGFuZGxlcikK
LXsKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgU3RhdGVJblF1b3RlLAotICAgICAgICBTdGF0
ZUluUXVvdGVRdW90ZSwKLSAgICAgICAgU3RhdGVMaXRlcmFsLAotICAgICAgICBTdGF0ZVF1b3Rl
LAotICAgICAgICBTdGF0ZVN5bWJvbCwKLSAgICB9IHN0YXRlID0gU3RhdGVMaXRlcmFsOwotCi0g
ICAgRmllbGRUeXBlIGZpZWxkVHlwZSA9IEZpZWxkVHlwZUxpdGVyYWw7Ci0gICAgU3RyaW5nQnVp
bGRlciBsaXRlcmFsQnVmZmVyOwotICAgIGludCBmaWVsZENvdW50ZXIgPSAwOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGgoKTsgKytpbmRl
eCkgewotICAgICAgICBjb25zdCBVQ2hhciBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgIHN3
aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSBTdGF0ZUluUXVvdGU6Ci0gICAgICAgICAgICBp
ZiAoY2ggPT0gJ1wnJykgewotICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVJblF1b3RlUXVv
dGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGxpdGVyYWxCdWZmZXIuYXBwZW5kKGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgU3RhdGVJblF1b3RlUXVvdGU6Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykgewot
ICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5kKCdcJycpOwotICAgICAgICAgICAg
ICAgIHN0YXRlID0gU3RhdGVJblF1b3RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmaWVsZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0ZpZWxkVHlw
ZShjaCk7Ci0gICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUludmFsaWQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZmllbGRUeXBl
ID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFw
cGVuZChjaCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZUxpdGVyYWw7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsaXRlcmFs
QnVmZmVyLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0
ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGxpdGVyYWxC
dWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmllbGRDb3VudGVy
ID0gMTsKLSAgICAgICAgICAgIHN0YXRlID0gU3RhdGVTeW1ib2w7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIFN0YXRlTGl0ZXJhbDoKLSAgICAgICAgICAgIGlmIChjaCA9PSAn
XCcnKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVF1b3RlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaWVsZFR5cGUgPSBtYXBD
aGFyYWN0ZXJUb0ZpZWxkVHlwZShjaCk7Ci0gICAgICAgICAgICBpZiAoZmllbGRUeXBlID09IEZp
ZWxkVHlwZUludmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICBpZiAoZmllbGRUeXBlID09IEZpZWxkVHlwZUxpdGVyYWwpIHsKLSAgICAgICAgICAgICAg
ICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRv
U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuY2xlYXIoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZmllbGRDb3VudGVyID0gMTsKLSAgICAgICAgICAgIHN0
YXRlID0gU3RhdGVTeW1ib2w7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0
YXRlUXVvdGU6Ci0gICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7Ci0gICAgICAg
ICAgICBzdGF0ZSA9IGNoID09ICdcJycgPyBTdGF0ZUxpdGVyYWwgOiBTdGF0ZUluUXVvdGU7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFN0YXRlU3ltYm9sOiB7Ci0gICAgICAg
ICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZpZWxkVHlwZUludmFsaWQpOwotICAgICAgICAgICAg
QVNTRVJUKGZpZWxkVHlwZSAhPSBGaWVsZFR5cGVMaXRlcmFsKTsKLSAgICAgICAgICAgIEFTU0VS
VChsaXRlcmFsQnVmZmVyLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgICAgIEZpZWxkVHlwZSBmaWVs
ZFR5cGUyID0gbWFwQ2hhcmFjdGVyVG9GaWVsZFR5cGUoY2gpOwotICAgICAgICAgICAgaWYgKGZp
ZWxkVHlwZTIgPT0gRmllbGRUeXBlSW52YWxpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT0gZmllbGRUeXBlMikgewotICAgICAg
ICAgICAgICAgICsrZmllbGRDb3VudGVyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRGaWVsZChmaWVsZFR5cGUs
IGZpZWxkQ291bnRlcik7Ci0KLSAgICAgICAgICAgIGlmIChmaWVsZFR5cGUyID09IEZpZWxkVHlw
ZUxpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZVF1b3RlOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YXRlID0gU3RhdGVMaXRlcmFsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmllbGRDb3VudGVy
ID0gMTsKLSAgICAgICAgICAgIGZpZWxkVHlwZSA9IGZpZWxkVHlwZTI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKGZpZWxkVHlw
ZSAhPSBGaWVsZFR5cGVJbnZhbGlkKTsKLQotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNl
IFN0YXRlTGl0ZXJhbDoKLSAgICBjYXNlIFN0YXRlSW5RdW90ZVF1b3RlOgotICAgICAgICBpZiAo
bGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSkKLSAgICAgICAgICAgIHRva2VuSGFuZGxlci52aXNpdExp
dGVyYWwobGl0ZXJhbEJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBjYXNlIFN0YXRlUXVvdGU6Ci0gICAgY2FzZSBTdGF0ZUluUXVvdGU6Ci0gICAgICAgIGlm
IChsaXRlcmFsQnVmZmVyLmxlbmd0aCgpKQotICAgICAgICAgICAgdG9rZW5IYW5kbGVyLnZpc2l0
TGl0ZXJhbChsaXRlcmFsQnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBjYXNlIFN0YXRlU3ltYm9sOgotICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IEZp
ZWxkVHlwZUxpdGVyYWwpOwotICAgICAgICBBU1NFUlQoIWxpdGVyYWxCdWZmZXIubGVuZ3RoKCkp
OwotICAgICAgICB0b2tlbkhhbmRsZXIudmlzaXRGaWVsZChmaWVsZFR5cGUsIGZpZWxkQ291bnRl
cik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaXNBU0NJSUFscGhhYmV0
T3JRdW90ZShVQ2hhciBjaCkKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGNoKSB8fCBjaCA9
PSAnXCcnOwotfQotCi12b2lkIERhdGVUaW1lRm9ybWF0OjpxdW90ZUFuZEFwcGVuZExpdGVyYWwo
Y29uc3QgU3RyaW5nJiBsaXRlcmFsLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCi17Ci0gICAgaWYg
KGxpdGVyYWwubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxpdGVy
YWwuZmluZChpc0FTQ0lJQWxwaGFiZXRPclF1b3RlKSA9PSBub3RGb3VuZCkgewotICAgICAgICBi
dWZmZXIuYXBwZW5kKGxpdGVyYWwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGxpdGVyYWwuZmluZCgnXCcnKSA9PSBub3RGb3VuZCkgewotICAgICAgICBidWZmZXIuYXBwZW5k
KCdcJycsIGxpdGVyYWwsICdcJycpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpdGVyYWwubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBp
ZiAobGl0ZXJhbFtpXSA9PSAnXCcnKQotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiJyciKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKCdcJycsIFN0cmluZyB7
IGxpdGVyYWwuc3Vic3RyaW5nKGkpIH0ucmVwbGFjZSgnXCcnLCAiJyciKSwgJ1wnJyk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0RhdGVUaW1lRm9ybWF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RhdGVUaW1l
Rm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzI2ZGZmYmUxZjNlMTlk
N2E4MzFkNzcwNzY5M2UxNWM2NTY2N2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1h
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIERhdGVUaW1lRm9ybWF0X2gKLSNkZWZpbmUgRGF0ZVRpbWVGb3JtYXRfaAotCi0jaWYg
RU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRfVFlQRVMpCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBEYXRlVGltZUZvcm1hdCBwYXJzZXMgZGF0
ZSB0aW1lIGZvcm1hdCBkZWZpbmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsCi0vLyBzdGFuZGFyZCAz
NSwgTG9jYWxlIERhdGEgTWFya3VwIExhbmd1YWdlIChMRE1MKVsxXS4KLS8vIFsxXSBMRE1MIGh0
dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS02Lmh0bWwjRGF0ZV9Gb3JtYXRfUGF0
dGVybnMKLWNsYXNzIERhdGVUaW1lRm9ybWF0IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZpZWxkVHlw
ZSB7Ci0gICAgICAgIEZpZWxkVHlwZUludmFsaWQsCi0gICAgICAgIEZpZWxkVHlwZUxpdGVyYWws
Ci0KLSAgICAgICAgLy8gRXJhOiBBRAotICAgICAgICBGaWVsZFR5cGVFcmEgPSAnRycsCi0KLSAg
ICAgICAgLy8gWWVhcjogMTk5NgotICAgICAgICBGaWVsZFR5cGVZZWFyID0gJ3knLAotICAgICAg
ICBGaWVsZFR5cGVZZWFyT2ZXZWVrT2ZZZWFyID0gJ1knLAotICAgICAgICBGaWVsZFR5cGVFeHRl
bmRlZFllYXIgPSAndScsCi0KLSAgICAgICAgLy8gUXVhdGVyOiBRMgotICAgICAgICBGaWVsZFR5
cGVRdWF0ZXIgPSAnUScsCi0gICAgICAgIEZpZWxkVHlwZVF1YXRlclN0YW5kQWxvbmUgPSAncScs
Ci0KLSAgICAgICAgLy8gTW9udGg6IFNlcHRlbWJlcgotICAgICAgICBGaWVsZFR5cGVNb250aCA9
ICdNJywKLSAgICAgICAgRmllbGRUeXBlTW9udGhTdGFuZEFsb25lID0gJ0wnLAotCi0gICAgICAg
IC8vIFdlZWs6IDQyCi0gICAgICAgIEZpZWxkVHlwZVdlZWtPZlllYXIgPSAndycsCi0gICAgICAg
IEZpZWxkVHlwZVdlZWtPZk1vbnRoID0gJ1cnLAotCi0gICAgICAgIC8vIERheTogMTIKLSAgICAg
ICAgRmllbGRUeXBlRGF5T2ZNb250aCA9ICdkJywKLSAgICAgICAgRmllbGRUeXBlRGF5T2ZZZWFy
ID0gJ0QnLAotICAgICAgICBGaWVsZFR5cGVEYXlPZldlZWtJbk1vbnRoID0gJ0YnLAotICAgICAg
ICBGaWVsZFR5cGVNb2RpZmllZEp1bGlhbkRheSA9ICdnJywKLQotICAgICAgICAvLyBXZWVrIERh
eTogVHVlc2RheQotICAgICAgICBGaWVsZFR5cGVEYXlPZldlZWsgPSAnRScsCi0gICAgICAgIEZp
ZWxkVHlwZUxvY2FsRGF5T2ZXZWVrID0gJ2UnLAotICAgICAgICBGaWVsZFR5cGVMb2NhbERheU9m
V2Vla1N0YW5kQWxvbiA9ICdjJywKLQotICAgICAgICAvLyBQZXJpb2Q6IEFNIG9yIFBNCi0gICAg
ICAgIEZpZWxkVHlwZVBlcmlvZCA9ICdhJywKLQotICAgICAgICAvLyBIb3VyOiA3Ci0gICAgICAg
IEZpZWxkVHlwZUhvdXIxMiA9ICdoJywKLSAgICAgICAgRmllbGRUeXBlSG91cjIzID0gJ0gnLAot
ICAgICAgICBGaWVsZFR5cGVIb3VyMTEgPSAnSycsCi0gICAgICAgIEZpZWxkVHlwZUhvdXIyNCA9
ICdrJywKLQotICAgICAgICAvLyBNaW51dGU6IDU5Ci0gICAgICAgIEZpZWxkVHlwZU1pbnV0ZSA9
ICdtJywKLQotICAgICAgICAvLyBTZWNvbmQ6IDEyCi0gICAgICAgIEZpZWxkVHlwZVNlY29uZCA9
ICdzJywKLSAgICAgICAgRmllbGRUeXBlRnJhY3Rpb25hbFNlY29uZCA9ICdTJywKLSAgICAgICAg
RmllbGRUeXBlTWlsbGlzZWNvbmRzSW5EYXkgPSAnQScsCi0KLSAgICAgICAgLy8gWm9uZTogUERU
Ci0gICAgICAgIEZpZWxkVHlwZVpvbmUgPSAneicsCi0gICAgICAgIEZpZWxkVHlwZVJGQzgyMlpv
bmUgPSAnWicsCi0gICAgICAgIEZpZWxkVHlwZU5vbkxvY2F0aW9uWm9uZSA9ICd2JywKLSAgICB9
OwotCi0gICAgY2xhc3MgVG9rZW5IYW5kbGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgflRva2VuSGFuZGxlcigpID0gZGVmYXVsdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0
RmllbGQoRmllbGRUeXBlLCBpbnQgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycykgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRMaXRlcmFsKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB9
OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2NlZWRlZCwgZmFsc2UgaWYgZmFpbGVkLgot
ICAgIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYsIFRva2VuSGFuZGxlciYpOwotICAg
IHN0YXRpYyB2b2lkIHF1b3RlQW5kQXBwZW5kTGl0ZXJhbChjb25zdCBTdHJpbmcmLCBTdHJpbmdC
dWlsZGVyJik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotI2VuZGlm
IC8vIERhdGVUaW1lRm9ybWF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvRm9udFJlbmRlcmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
Rm9udFJlbmRlcmluZ01vZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwYWJh
NGU4OTJiM2M5OTZmNjExY2MzZGJmMjc1ZDNhMTE4N2NiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Zv
bnRSZW5kZXJpbmdNb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRoaXMgc2V0dGluZyBpcyB1c2VkIHRvIHByb3ZpZGUgd2F5
cyBvZiBzd2l0Y2hpbmcgYmV0d2VlbiBtdWx0aXBsZSByZW5kZXJpbmcgbW9kZXMgdGhhdCBtYXkg
aGF2ZSBkaWZmZXJlbnQKLS8vIG1ldHJpY3MuIEl0IGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4g
Q0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCi1lbnVtIGNsYXNzIEZvbnRSZW5kZXJpbmdNb2Rl
IDogdWludDhfdCB7Ci0gICAgTm9ybWFsLAotICAgIEFsdGVybmF0ZQotfTsKLQotfQotCi1uYW1l
c3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250
UmVuZGVyaW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAg
IFdlYkNvcmU6OkZvbnRSZW5kZXJpbmdNb2RlLAotICAgICAgICBXZWJDb3JlOjpGb250UmVuZGVy
aW5nTW9kZTo6Tm9ybWFsLAotICAgICAgICBXZWJDb3JlOjpGb250UmVuZGVyaW5nTW9kZTo6QWx0
ZXJuYXRlCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0NWQxZTU5YTk0ZTNkMjIzMmUxYjc4YmY3Y2ZmNjRkMDYxNDQ0OWU3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvSHlwaGVuYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEh5cGhlbmF0aW9uX2gKLSNkZWZpbmUgSHlwaGVuYXRpb25faAotCi0j
aW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGluZSBzdGF0aWMgYm9vbCBlbm91Z2hXaWR0aEZvckh5
cGhlbmF0aW9uKGZsb2F0IGF2YWlsYWJsZVdpZHRoLCBmbG9hdCBmb250UGl4ZWxTaXplKQotewot
ICAgIC8vIElmIHRoZSBtYXhpbXVtIHdpZHRoIGF2YWlsYWJsZSBmb3IgdGhlIHByZWZpeCBiZWZv
cmUgdGhlIGh5cGhlbiBpcyBzbWFsbCwgdGhlbiBpdCBpcyB2ZXJ5IHVubGlrZWx5Ci0gICAgLy8g
dGhhdCBhbiBoeXBoZW5hdGlvbiBvcHBvcnR1bml0eSBleGlzdHMsIHNvIGRvIG5vdCBib3RoZXIg
dG8gbG9vayBmb3IgaXQuCi0gICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRoID4gZm9udFBpeGVsU2l6
ZSAqIDUgLyA0OwotCi19Ci1ib29sIGNhbkh5cGhlbmF0ZShjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bGVJZGVudGlmaWVyKTsKLXNpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oU3RyaW5nVmlldywgc2l6
ZV90IGJlZm9yZUluZGV4LCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSHlwaGVuYXRpb25faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAppbmRleCBmNDcy
MDBiNTcyMTY4ZDRlZWZhYTc0ZTkwNzU3MWFkNWM5MmFiMDE5Li5hNzdjZmM3ZTI5YTI0ZmFkNWFj
ZDJkYjA5N2RiZDAyMjIwODJjZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcApAQCAtMzIsMTUgKzMyLDE1IEBACiAjaW5jbHVkZSAiUGxh
dGZvcm1Mb2NhbGUuaCIKIAogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAi
RGF0ZVRpbWVGb3JtYXQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVk
ZSA8cGFsL3RleHQvRGF0ZVRpbWVGb3JtYXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShEQVRFX0FORF9U
SU1FX0lOUFVUX1RZUEVTKQogCi1jbGFzcyBEYXRlVGltZVN0cmluZ0J1aWxkZXIgOiBwcml2YXRl
IERhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgeworY2xhc3MgRGF0ZVRpbWVTdHJpbmdCdWls
ZGVyIDogcHJpdmF0ZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpUb2tlbkhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERhdGVUaW1lU3RyaW5nQnVpbGRlcik7CiAKIHB1YmxpYzoKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIERhdGVUaW1lRm9ybWF0
OjpUb2tlbkhhbmRsZXIgZnVuY3Rpb25zLgotICAgIHZvaWQgdmlzaXRGaWVsZChEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlLCBpbnQpIGZpbmFsOworICAgIHZvaWQgdmlzaXRGaWVsZChQQUw6OkRh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUsIGludCkgZmluYWw7CiAgICAgdm9pZCB2aXNpdExpdGVy
YWwoY29uc3QgU3RyaW5nJikgZmluYWw7CiAKICAgICBTdHJpbmcgemVyb1BhZFN0cmluZyhjb25z
dCBTdHJpbmcmLCBzaXplX3Qgd2lkdGgpOwpAQCAtNzIsNyArNzIsNyBAQCBEYXRlVGltZVN0cmlu
Z0J1aWxkZXI6OkRhdGVUaW1lU3RyaW5nQnVpbGRlcihMb2NhbGUmIGxvY2FsaXplciwgY29uc3Qg
RGF0ZUNvbXBvbgogYm9vbCBEYXRlVGltZVN0cmluZ0J1aWxkZXI6OmJ1aWxkKGNvbnN0IFN0cmlu
ZyYgZm9ybWF0U3RyaW5nKQogewogICAgIG1fYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkoZm9ybWF0
U3RyaW5nLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gRGF0ZVRpbWVGb3JtYXQ6OnBhcnNlKGZvcm1h
dFN0cmluZywgKnRoaXMpOworICAgIHJldHVybiBQQUw6OkRhdGVUaW1lRm9ybWF0OjpwYXJzZShm
b3JtYXRTdHJpbmcsICp0aGlzKTsKIH0KIAogU3RyaW5nIERhdGVUaW1lU3RyaW5nQnVpbGRlcjo6
emVyb1BhZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHdpZHRoKQpAQCAtOTMs
MTQgKzkzLDE0IEBAIHZvaWQgRGF0ZVRpbWVTdHJpbmdCdWlsZGVyOjphcHBlbmROdW1iZXIoaW50
IG51bWJlciwgc2l6ZV90IHdpZHRoKQogICAgIG1fYnVpbGRlci5hcHBlbmQobV9sb2NhbGl6ZXIu
Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKHplcm9QYWRkZWROdW1iZXJTdHJpbmcpKTsKIH0KIAot
dm9pZCBEYXRlVGltZVN0cmluZ0J1aWxkZXI6OnZpc2l0RmllbGQoRGF0ZVRpbWVGb3JtYXQ6OkZp
ZWxkVHlwZSBmaWVsZFR5cGUsIGludCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzKQordm9pZCBE
YXRlVGltZVN0cmluZ0J1aWxkZXI6OnZpc2l0RmllbGQoUEFMOjpEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlIGZpZWxkVHlwZSwgaW50IG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMpCiB7CiAgICAg
c3dpdGNoIChmaWVsZFR5cGUpIHsKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVZ
ZWFyOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcjoKICAgICAg
ICAgLy8gQWx3YXlzIHVzZSBwYWRkaW5nIHdpZHRoIG9mIDQgc28gaXQgbWF0Y2hlcyBEYXRlVGlt
ZUVkaXRFbGVtZW50LgogICAgICAgICBhcHBlbmROdW1iZXIobV9kYXRlLmZ1bGxZZWFyKCksIDQp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9u
dGg6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aDoKICAgICAg
ICAgaWYgKG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMgPT0gMykKICAgICAgICAgICAgIG1fYnVp
bGRlci5hcHBlbmQobV9sb2NhbGl6ZXIuc2hvcnRNb250aExhYmVscygpW21fZGF0ZS5tb250aCgp
XSk7CiAgICAgICAgIGVsc2UgaWYgKG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMgPT0gNCkKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIERhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRGaWVsZChE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlIGZpZWxkVHlwZSwgaW50CiAgICAgICAgICAgICBhcHBl
bmROdW1iZXIobV9kYXRlLm1vbnRoKCkgKyAxLCAyKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhTdGFuZEFsb25lOgor
ICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTW9udGhTdGFuZEFsb25lOgog
ICAgICAgICBpZiAobnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycyA9PSAzKQogICAgICAgICAgICAg
bV9idWlsZGVyLmFwcGVuZChtX2xvY2FsaXplci5zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscygp
W21fZGF0ZS5tb250aCgpXSk7CiAgICAgICAgIGVsc2UgaWYgKG51bWJlck9mUGF0dGVybkNoYXJh
Y3RlcnMgPT0gNCkKQEAgLTEyMCw0MSArMTIwLDQxIEBAIHZvaWQgRGF0ZVRpbWVTdHJpbmdCdWls
ZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQK
ICAgICAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUubW9udGgoKSArIDEsIDIpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVE
YXlPZk1vbnRoOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZN
b250aDoKICAgICAgICAgLy8gQWx3YXlzIHVzZSBwYWRkaW5nIHdpZHRoIG9mIDIgc28gaXQgbWF0
Y2hlcyBEYXRlVGltZUVkaXRFbGVtZW50LgogICAgICAgICBhcHBlbmROdW1iZXIobV9kYXRlLm1v
bnRoRGF5KCksIDIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlV2Vla09mWWVhcjoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZVdlZWtPZlllYXI6CiAgICAgICAgIC8vIEFsd2F5cyB1c2UgcGFkZGluZyB3aWR0aCBvZiAy
IHNvIGl0IG1hdGNoZXMgRGF0ZVRpbWVFZGl0RWxlbWVudC4KICAgICAgICAgYXBwZW5kTnVtYmVy
KG1fZGF0ZS53ZWVrKCksIDIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlUGVyaW9kOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlUGVyaW9kOgogICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKG1fbG9jYWxpemVyLnRpbWVB
TVBNTGFiZWxzKClbKG1fZGF0ZS5ob3VyKCkgPj0gMTIgPyAxIDogMCldKTsKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIxMjogeworICAgIGNh
c2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOiB7CiAgICAgICAgIGludCBo
b3VyMTIgPSBtX2RhdGUuaG91cigpICUgMTI7CiAgICAgICAgIGlmICghaG91cjEyKQogICAgICAg
ICAgICAgaG91cjEyID0gMTI7CiAgICAgICAgIGFwcGVuZE51bWJlcihob3VyMTIsIG51bWJlck9m
UGF0dGVybkNoYXJhY3RlcnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzoKKyAgICBjYXNlIFBBTDo6RGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZUhvdXIyMzoKICAgICAgICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5ob3VyKCks
IG51bWJlck9mUGF0dGVybkNoYXJhY3RlcnMpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjExOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlSG91cjExOgogICAgICAgICBhcHBlbmROdW1iZXIobV9kYXRlLmhvdXIo
KSAlIDEyLCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzKTsKICAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyNDogeworICAgIGNhc2UgUEFMOjpE
YXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjI0OiB7CiAgICAgICAgIGludCBob3VyMjQgPSBt
X2RhdGUuaG91cigpOwogICAgICAgICBpZiAoIWhvdXIyNCkKICAgICAgICAgICAgIGhvdXIyNCA9
IDI0OwogICAgICAgICBhcHBlbmROdW1iZXIoaG91cjI0LCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0
ZXJzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVNaW51dGU6CisgICAgY2FzZSBQQUw6OkRhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVN
aW51dGU6CiAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUubWludXRlKCksIG51bWJlck9mUGF0
dGVybkNoYXJhY3RlcnMpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBEYXRlVGltZUZvcm1h
dDo6RmllbGRUeXBlU2Vjb25kOgorICAgIGNhc2UgUEFMOjpEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlU2Vjb25kOgogICAgICAgICBpZiAoIW1fZGF0ZS5taWxsaXNlY29uZCgpKQogICAgICAgICAg
ICAgYXBwZW5kTnVtYmVyKG1fZGF0ZS5zZWNvbmQoKSwgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVy
cyk7CiAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9RdW90ZWRQcmludGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9R
dW90ZWRQcmludGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2UzNjE0
NzE5NzFkMTI2ZjAyYmM3M2FkMmI1MDU3ZDlkMzFmNWFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVv
dGVkUHJpbnRhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlF1b3RlZFByaW50YWJsZS5oIgotCi0jaW5jbHVkZSA8d3Rm
L0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IDc2OwotCi1z
dGF0aWMgY29uc3QgY2hhciBjcmxmTGluZUVuZGluZ1tdID0gIlxyXG4iOwotCi1zdGF0aWMgc2l6
ZV90IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoY29uc3QgdWludDhfdCogaW5wdXQsIHNpemVf
dCBpbnB1dExlbmd0aCwgc2l6ZV90IGluZGV4KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGluZGV4IDwgaW5wdXRMZW5ndGgpOwotICAgIGlmIChpbnB1dFtpbmRleF0g
PT0gJ1xuJykKLSAgICAgICAgcmV0dXJuIDE7IC8vIFNpbmdsZSBMRi4KLQotICAgIGlmIChpbnB1
dFtpbmRleF0gPT0gJ1xyJykgewotICAgICAgICBpZiAoKGluZGV4ICsgMSkgPT0gaW5wdXRMZW5n
dGggfHwgaW5wdXRbaW5kZXggKyAxXSAhPSAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8v
IFNpbmdsZSBDUiAoQ2xhc3NpYyBNYWMgT1MpLgotICAgICAgICByZXR1cm4gMjsgLy8gQ1ItTEYu
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQcmlu
dGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAgICByZXR1cm4g
cXVvdGVkUHJpbnRhYmxlRW5jb2RlKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKLX0KLQot
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZUVuY29kZShjb25zdCB1aW50OF90KiBpbnB1
dCwgc2l6ZV90IGlucHV0TGVuZ3RoKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBvdXQ7Ci0gICAg
b3V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRMZW5ndGgpOwotICAgIHNpemVfdCBjdXJy
ZW50TGluZUxlbmd0aCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dExlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGJvb2wgaXNMYXN0Q2hhcmFjdGVyID0gKGkgPT0gaW5wdXRMZW5n
dGggLSAxKTsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Q2hhcmFjdGVyID0gaW5wdXRbaV07Ci0g
ICAgICAgIGJvb2wgcmVxdWlyZXNFbmNvZGluZyA9IGZhbHNlOwotICAgICAgICAvLyBBbGwgbm9u
LXByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIGFuZCA9IHJlcXVpcmUgZW5jb2RpbmcuCi0gICAg
ICAgIGlmICgoY3VycmVudENoYXJhY3RlciA8ICcgJyB8fCBjdXJyZW50Q2hhcmFjdGVyID4gJ34n
IHx8IGN1cnJlbnRDaGFyYWN0ZXIgPT0gJz0nKSAmJiBjdXJyZW50Q2hhcmFjdGVyICE9ICdcdCcp
Ci0gICAgICAgICAgICByZXF1aXJlc0VuY29kaW5nID0gdHJ1ZTsKLQotICAgICAgICAvLyBTcGFj
ZSBhbmQgdGFiIGNoYXJhY3RlcnMgaGF2ZSB0byBiZSBlbmNvZGVkIGlmIHRoZXkgYXBwZWFyIGF0
IHRoZSBlbmQgb2YgYSBsaW5lLgotICAgICAgICBpZiAoIXJlcXVpcmVzRW5jb2RpbmcgJiYgKGN1
cnJlbnRDaGFyYWN0ZXIgPT0gJ1x0JyB8fCBjdXJyZW50Q2hhcmFjdGVyID09ICcgJykgJiYgKGlz
TGFzdENoYXJhY3RlciB8fCBsZW5ndGhPZkxpbmVFbmRpbmdBdEluZGV4KGlucHV0LCBpbnB1dExl
bmd0aCwgaSArIDEpKSkKLSAgICAgICAgICAgIHJlcXVpcmVzRW5jb2RpbmcgPSB0cnVlOwotCi0g
ICAgICAgIC8vIEVuZCBvZiBsaW5lIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gQ1ItTEYgc2VxdWVu
Y2VzLgotICAgICAgICBpZiAoIWlzTGFzdENoYXJhY3RlcikgewotICAgICAgICAgICAgc2l6ZV90
IGxlbmd0aE9mTGluZUVuZGluZyA9IGxlbmd0aE9mTGluZUVuZGluZ0F0SW5kZXgoaW5wdXQsIGlu
cHV0TGVuZ3RoLCBpKTsKLSAgICAgICAgICAgIGlmIChsZW5ndGhPZkxpbmVFbmRpbmcpIHsKLSAg
ICAgICAgICAgICAgICBvdXQuYXBwZW5kKGNybGZMaW5lRW5kaW5nLCBzdHJsZW4oY3JsZkxpbmVF
bmRpbmcpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50TGluZUxlbmd0aCA9IDA7Ci0gICAgICAg
ICAgICAgICAgaSArPSAobGVuZ3RoT2ZMaW5lRW5kaW5nIC0gMSk7IC8vIC0xIGJlY2F1c2Ugd2Un
bGwgKysgaW4gdGhlIGZvcigpIGFib3ZlLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGxlbmd0aE9mRW5jb2RlZENo
YXJhY3RlciA9IDE7Ci0gICAgICAgIGlmIChyZXF1aXJlc0VuY29kaW5nKQotICAgICAgICAgICAg
bGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVyICs9IDI7Ci0gICAgICAgIGlmICghaXNMYXN0Q2hhcmFj
dGVyKQotICAgICAgICAgICAgbGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVyICs9IDE7IC8vICsgMSBm
b3IgdGhlID0gKHNvZnQgbGluZSBicmVhaykuCi0KLSAgICAgICAgLy8gSW5zZXJ0IGEgc29mdCBs
aW5lIGJyZWFrIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGN1cnJlbnRMaW5lTGVuZ3RoICsg
bGVuZ3RoT2ZFbmNvZGVkQ2hhcmFjdGVyID4gbWF4aW11bUxpbmVMZW5ndGgpIHsKLSAgICAgICAg
ICAgIG91dC5hcHBlbmQoJz0nKTsKLSAgICAgICAgICAgIG91dC5hcHBlbmQoY3JsZkxpbmVFbmRp
bmcsIHN0cmxlbihjcmxmTGluZUVuZGluZykpOwotICAgICAgICAgICAgY3VycmVudExpbmVMZW5n
dGggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmluYWxseSwgaW5zZXJ0IHRoZSBhY3R1
YWwgY2hhcmFjdGVyKHMpLgotICAgICAgICBpZiAocmVxdWlyZXNFbmNvZGluZykgewotICAgICAg
ICAgICAgb3V0LmFwcGVuZCgnPScpOwotICAgICAgICAgICAgb3V0LmFwcGVuZCh1cHBlck5pYmJs
ZVRvQVNDSUlIZXhEaWdpdChjdXJyZW50Q2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBvdXQuYXBw
ZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIpKTsKLSAgICAg
ICAgICAgIGN1cnJlbnRMaW5lTGVuZ3RoICs9IDM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBvdXQuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgY3VycmVudExp
bmVMZW5ndGgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvdXQ7Ci19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBxdW90ZWRQcmludGFibGVEZWNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpbnB1dCkKLXsKLSAgICByZXR1cm4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGlucHV0LmRhdGEo
KSwgaW5wdXQuc2l6ZSgpKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURl
Y29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gb3V0OwotICAgIGlmICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG91
dDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGNoYXIgY3VycmVudENoYXJhY3RlciA9IGRhdGFbaV07Ci0gICAgICAgIGlmIChjdXJyZW50
Q2hhcmFjdGVyICE9ICc9JykgewotICAgICAgICAgICAgb3V0LmFwcGVuZChjdXJyZW50Q2hhcmFj
dGVyKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGFy
ZSBkZWFsaW5nIHdpdGggYSAnPXh4JyBzZXF1ZW5jZS4KLSAgICAgICAgaWYgKGRhdGFMZW5ndGgg
LSBpIDwgMykgewotICAgICAgICAgICAgLy8gVW5maW5pc2hlZCA9IHNlcXVlbmNlLCBhcHBlbmQg
YXMgaXMuCi0gICAgICAgICAgICBvdXQuYXBwZW5kKGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2hhciB1cHBlckNoYXJhY3RlciA9
IGRhdGFbKytpXTsKLSAgICAgICAgY2hhciBsb3dlckNoYXJhY3RlciA9IGRhdGFbKytpXTsKLSAg
ICAgICAgaWYgKHVwcGVyQ2hhcmFjdGVyID09ICdccicgJiYgbG93ZXJDaGFyYWN0ZXIgPT0gJ1xu
JykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0
KHVwcGVyQ2hhcmFjdGVyKSB8fCAhaXNBU0NJSUhleERpZ2l0KGxvd2VyQ2hhcmFjdGVyKSkgewot
ICAgICAgICAgICAgLy8gSW52YWxpZCBzZXF1ZW5jZSwgPSBmb2xsb3dlZCBieSBub24gaGV4IGRp
Z2l0cywganVzdCBpbnNlcnQgdGhlIGNoYXJhY3RlcnMgYXMgaXMuCi0gICAgICAgICAgICBvdXQu
YXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKHVwcGVyQ2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgIG91dC5hcHBlbmQobG93ZXJDaGFyYWN0ZXIpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LmFwcGVuZCh0b0FTQ0lJSGV4VmFsdWUodXBwZXJD
aGFyYWN0ZXIsIGxvd2VyQ2hhcmFjdGVyKSk7Ci0gICAgfQotICAgIHJldHVybiBvdXQ7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRh
YmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1F1b3RlZFByaW50YWJsZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI3M2I1ZjQyOGMyNWJjODMyZTA3ZWE2YTg5
MTU1ZDM5ZTYyOWEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUXVvdGVkUHJpbnRhYmxlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVZlY3Rvcjx1aW50OF90PiBxdW90ZWRQ
cmludGFibGVFbmNvZGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7Ci1WZWN0b3I8dWludDhfdD4g
cXVvdGVkUHJpbnRhYmxlRW5jb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwotCi1WZWN0b3I8
dWludDhfdD4gcXVvdGVkUHJpbnRhYmxlRGVjb2RlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwot
VmVjdG9yPHVpbnQ4X3Q+IHF1b3RlZFByaW50YWJsZURlY29kZShjb25zdCB1aW50OF90Kiwgc2l6
ZV90KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMDgzZWE3YWY3NGMyNmMzZTQxNWNlNDU4NjBhYjdlOGQxZGRlODllLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVk
U3RyaW5nLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5s
aW5lIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6OmFwcGVuZFRvKFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIpIGNvbnN0Ci17Ci0gICAgYnVpbGRlci5hcHBlbmRTdWJzdHJpbmcoc3RyaW5n
LCBzdHJpbmcubGVuZ3RoKCkgLSBsZW5ndGgsIGxlbmd0aCk7Ci19Ci0KLVNlZ21lbnRlZFN0cmlu
ZyYgU2VnbWVudGVkU3RyaW5nOjpvcGVyYXRvcj0oU2VnbWVudGVkU3RyaW5nJiYgb3RoZXIpCi17
Ci0gICAgbV9jdXJyZW50U3Vic3RyaW5nID0gV1RGTW92ZShvdGhlci5tX2N1cnJlbnRTdWJzdHJp
bmcpOwotICAgIG1fb3RoZXJTdWJzdHJpbmdzID0gV1RGTW92ZShvdGhlci5tX290aGVyU3Vic3Ry
aW5ncyk7Ci0KLSAgICBtX2lzQ2xvc2VkID0gb3RoZXIubV9pc0Nsb3NlZDsKLQotICAgIG1fY3Vy
cmVudENoYXJhY3RlciA9IG90aGVyLm1fY3VycmVudENoYXJhY3RlcjsKLQotICAgIG1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZyA9IG90aGVyLm1fbnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmluZzsKLSAgICBtX251
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gb3RoZXIubV9udW1i
ZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZTsKLSAgICBtX2N1cnJlbnRM
aW5lID0gb3RoZXIubV9jdXJyZW50TGluZTsKLQotICAgIG1fZmFzdFBhdGhGbGFncyA9IG90aGVy
Lm1fZmFzdFBhdGhGbGFnczsKLSAgICBtX2FkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVy
RnVuY3Rpb24gPSBvdGhlci5tX2FkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rp
b247Ci0gICAgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uID0gb3RoZXIubV9h
ZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uOwotCi0gICAgb3RoZXIuY2xlYXIoKTsK
LQotICAgIHJldHVybiAqdGhpczsKLX0KLQotdW5zaWduZWQgU2VnbWVudGVkU3RyaW5nOjpsZW5n
dGgoKSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fY3VycmVudFN1YnN0cmluZy5s
ZW5ndGg7Ci0gICAgZm9yIChhdXRvJiBzdWJzdHJpbmcgOiBtX290aGVyU3Vic3RyaW5ncykKLSAg
ICAgICAgbGVuZ3RoICs9IHN1YnN0cmluZy5sZW5ndGg7Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0K
LQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEV4Y2x1ZGVMaW5lTnVtYmVycygpCi17Ci0gICAg
aWYgKCFtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMg
PSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHN1YnN0cmluZyA6IG1fb3RoZXJTdWJzdHJpbmdzKQot
ICAgICAgICBzdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMgPSBmYWxzZTsKLSAgICB1
cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmlu
Zzo6Y2xlYXIoKQotewotICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPSAwOwotICAgIG1f
b3RoZXJTdWJzdHJpbmdzLmNsZWFyKCk7Ci0KLSAgICBtX2lzQ2xvc2VkID0gZmFsc2U7Ci0KLSAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAwOwotCi0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nID0gMDsKLSAgICBtX251bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gMDsKLSAgICBtX2N1cnJlbnRMaW5lID0gMDsK
LQotICAgIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKTsKLX0K
LQotaW5saW5lIHZvaWQgU2VnbWVudGVkU3RyaW5nOjphcHBlbmRTdWJzdHJpbmcoU3Vic3RyaW5n
JiYgc3Vic3RyaW5nKQotewotICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7Ci0gICAgaWYgKCFzdWJz
dHJpbmcubGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudFN1YnN0cmlu
Zy5sZW5ndGgpCi0gICAgICAgIG1fb3RoZXJTdWJzdHJpbmdzLmFwcGVuZChXVEZNb3ZlKHN1YnN0
cmluZykpOwotICAgIGVsc2UgewotICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
UHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgKz0gbV9jdXJyZW50U3Vic3RyaW5nLm51bWJlck9mQ2hh
cmFjdGVyc0NvbnN1bWVkKCk7Ci0gICAgICAgIG1fY3VycmVudFN1YnN0cmluZyA9IFdURk1vdmUo
c3Vic3RyaW5nKTsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gbV9jdXJyZW50U3Vic3Ry
aW5nLmN1cnJlbnRDaGFyYWN0ZXIoKTsKLSAgICAgICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9p
bnRlcnMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2VnbWVudGVkU3RyaW5nOjpwdXNoQmFjayhTdHJp
bmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gV2UgbmV2ZXIgY3JlYXRlIGEgc3Vic3RyaW5nIGZvciBh
biBlbXB0eSBzdHJpbmcuCi0gICAgQVNTRVJUKHN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICAvLyBU
aGUgbmV3IHN1YnN0cmluZyB3ZSB3aWxsIGNyZWF0ZSB3b24ndCBoYXZlIHRoZSBkb05vdEV4Y2x1
ZGVMaW5lTnVtYmVycyBzZXQgYXBwcm9wcmlhdGVseS4KLSAgICAvLyBUaGF0IHdhcyBsb3N0IHdo
ZW4gdGhlIGNoYXJhY3RlcnMgd2VyZSBjb25zdW1lZCBiZWZvcmUgcHVzaGluZyB0aGVtIGJhY2su
IEJ1dCB0aGlzIGRvZXMKLSAgICAvLyBub3QgbWF0dGVyLCBiZWNhdXNlIGNsaWVudHMgbmV2ZXIg
dXNlIHRoaXMgZm9yIG5ld2xpbmVzLiBDYXRjaCB0aGF0IHdpdGggdGhpcyBhc3NlcnRpb24uCi0g
ICAgQVNTRVJUKCFzdHJpbmcuY29udGFpbnMoJ1xuJykpOwotCi0gICAgLy8gVGhlIGNoYXJhY3Rl
cnMgaW4gdGhlIHN0cmluZyBtdXN0IGJlIHByZXZpb3VzbHkgY29uc3VtZWQgY2hhcmFjdGVycyBm
cm9tIHRoaXMgc2VnbWVudGVkIHN0cmluZy4KLSAgICBBU1NFUlQoc3RyaW5nLmxlbmd0aCgpIDw9
IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkpOwotCi0gICAgbV9udW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICs9IG1fY3VycmVudFN1YnN0cmluZy5u
dW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOwotICAgIGlmIChtX2N1cnJlbnRTdWJzdHJpbmcu
bGVuZ3RoKQotICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5wcmVwZW5kKFdURk1vdmUobV9jdXJy
ZW50U3Vic3RyaW5nKSk7Ci0gICAgbV9jdXJyZW50U3Vic3RyaW5nID0gV1RGTW92ZShzdHJpbmcp
OwotICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN1YnN0cmlu
ZyAtPSBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoOwotICAgIG1fY3VycmVudENoYXJhY3RlciA9
IG1fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyKCk7Ci0gICAgdXBkYXRlQWR2YW5j
ZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmNsb3NlKCkK
LXsKLSAgICBBU1NFUlQoIW1faXNDbG9zZWQpOwotICAgIG1faXNDbG9zZWQgPSB0cnVlOwotfQot
Ci12b2lkIFNlZ21lbnRlZFN0cmluZzo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc3Ry
aW5nKQotewotICAgIGFwcGVuZFN1YnN0cmluZyhTdWJzdHJpbmcgeyBzdHJpbmcubV9jdXJyZW50
U3Vic3RyaW5nIH0pOwotICAgIGZvciAoYXV0byYgc3Vic3RyaW5nIDogc3RyaW5nLm1fb3RoZXJT
dWJzdHJpbmdzKQotICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoc3Vic3RyaW5nKTsK
LX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZChTZWdtZW50ZWRTdHJpbmcmJiBzdHJp
bmcpCi17Ci0gICAgYXBwZW5kU3Vic3RyaW5nKFdURk1vdmUoc3RyaW5nLm1fY3VycmVudFN1YnN0
cmluZykpOwotICAgIGZvciAoYXV0byYgc3Vic3RyaW5nIDogc3RyaW5nLm1fb3RoZXJTdWJzdHJp
bmdzKQotICAgICAgICBtX290aGVyU3Vic3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdWJzdHJpbmcp
KTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZChTdHJpbmcmJiBzdHJpbmcpCi17
Ci0gICAgYXBwZW5kU3Vic3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgYXBwZW5kU3Vi
c3RyaW5nKFN0cmluZyB7IHN0cmluZyB9KTsKLX0KLQotU3RyaW5nIFNlZ21lbnRlZFN0cmluZzo6
dG9TdHJpbmcoKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIG1fY3Vy
cmVudFN1YnN0cmluZy5hcHBlbmRUbyhyZXN1bHQpOwotICAgIGZvciAoYXV0byYgc3Vic3RyaW5n
IDogbV9vdGhlclN1YnN0cmluZ3MpCi0gICAgICAgIHN1YnN0cmluZy5hcHBlbmRUbyhyZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJp
bmc6OmFkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyMTYoKQotewotICAgIG1fY3VycmVu
dENoYXJhY3RlciA9ICorK21fY3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyMTY7Ci0g
ICAgZGVjcmVtZW50QW5kQ2hlY2tMZW5ndGgoKTsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6
OmFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyMTYoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRT
dWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpOwotICAgIHByb2Nlc3NQb3NzaWJsZU5l
d2xpbmUoKTsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqKyttX2N1cnJlbnRTdWJzdHJpbmcu
Y3VycmVudENoYXJhY3RlcjE2OwotICAgIGRlY3JlbWVudEFuZENoZWNrTGVuZ3RoKCk7Ci19Ci0K
LWlubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3RTaW5nbGVDaGFyYWN0ZXJT
dWJzdHJpbmdXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCkKLXsKLSAgICBBU1NFUlQobV9jdXJy
ZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxKTsKLSAgICBpZiAobV9vdGhlclN1YnN0cmluZ3MuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPSAwOwotICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAwOwotICAgICAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Q
b2ludGVyc0ZvckVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9u
dW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICs9IG1fY3Vy
cmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOwotICAgIG1fY3VycmVu
dFN1YnN0cmluZyA9IG1fb3RoZXJTdWJzdHJpbmdzLnRha2VGaXJzdCgpOwotICAgIC8vIElmIHdl
J3ZlIHByZXZpb3VzbHkgY29uc3VtZWQgc29tZSBjaGFyYWN0ZXJzIG9mIHRoZSBub24tY3VycmVu
dCBzdHJpbmcsIHdlIG5vdyBhY2NvdW50IGZvciB0aG9zZQotICAgIC8vIGNoYXJhY3RlcnMgYXMg
cGFydCBvZiB0aGUgY3VycmVudCBzdHJpbmcsIG5vdCBhcyBwYXJ0IG9mICJwcmlvciB0byBjdXJy
ZW50IHN0cmluZy4iCi0gICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJy
ZW50U3Vic3RyaW5nIC09IG1fY3VycmVudFN1YnN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZCgpOwotICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fY3VycmVudFN1YnN0cmluZy5jdXJy
ZW50Q2hhcmFjdGVyKCk7Ci0gICAgdXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnMoKTsKLX0K
LQotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3Ry
aW5nKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxKTsKLSAg
ICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKTsKLSAg
ICBwcm9jZXNzUG9zc2libGVOZXdsaW5lKCk7Ci0gICAgYWR2YW5jZVBhc3RTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmdXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Ci19Ci0KLXZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlRW1wdHkoKQotewotICAgIEFTU0VSVCghbV9jdXJyZW50U3Vic3Ry
aW5nLmxlbmd0aCk7Ci0gICAgQVNTRVJUKG1fb3RoZXJTdWJzdHJpbmdzLmlzRW1wdHkoKSk7Ci0g
ICAgQVNTRVJUKCFtX2N1cnJlbnRDaGFyYWN0ZXIpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmlu
Zzo6dXBkYXRlQWR2YW5jZUZ1bmN0aW9uUG9pbnRlcnNGb3JTaW5nbGVDaGFyYWN0ZXJTdWJzdHJp
bmcoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDEpOwotICAg
IG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7Ci0gICAgbV9hZHZhbmNlV2l0aG91dFVwZGF0
aW5nTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3RTaW5n
bGVDaGFyYWN0ZXJTdWJzdHJpbmdXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyOwotICAgIGlmICht
X2N1cnJlbnRTdWJzdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMpCi0gICAgICAgIG1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRTdHJpbmc6OmFkdmFu
Y2VQYXN0U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nOwotICAgIGVsc2UKLSAgICAgICAgbV9hZHZh
bmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5j
ZVBhc3RTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmdXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyOwot
fQotCi1PcmRpbmFsTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudExpbmUoKSBjb25zdAot
ewotICAgIHJldHVybiBPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fY3VycmVudExp
bmUpOwotfQotCi1PcmRpbmFsTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudENvbHVtbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSAtIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQ
cmlvclRvQ3VycmVudExpbmUpOwotfQotCi12b2lkIFNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVu
dFBvc2l0aW9uKE9yZGluYWxOdW1iZXIgbGluZSwgT3JkaW5hbE51bWJlciBjb2x1bW5BZnRyZVBy
b2xvZywgaW50IHByb2xvZ0xlbmd0aCkKLXsKLSAgICBtX2N1cnJlbnRMaW5lID0gbGluZS56ZXJv
QmFzZWRJbnQoKTsKLSAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSArIHByb2xvZ0xlbmd0aCAtIGNv
bHVtbkFmdHJlUHJvbG9nLnplcm9CYXNlZEludCgpOwotfQotCi1TZWdtZW50ZWRTdHJpbmc6OkFk
dmFuY2VQYXN0UmVzdWx0IFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVBhc3RTbG93Q2FzZShjb25z
dCBjaGFyKiBsaXRlcmFsLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkKLXsKLSAgICBj
b25zdGV4cHIgdW5zaWduZWQgbWF4TGVuZ3RoID0gMTA7Ci0gICAgQVNTRVJUKCFzdHJjaHIobGl0
ZXJhbCwgJ1xuJykpOwotICAgIGF1dG8gbGVuZ3RoID0gc3RybGVuKGxpdGVyYWwpOwotICAgIEFT
U0VSVChsZW5ndGggPD0gbWF4TGVuZ3RoKTsKLSAgICBpZiAobGVuZ3RoID4gdGhpcy0+bGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiBOb3RFbm91Z2hDaGFyYWN0ZXJzOwotICAgIFVDaGFyIGNvbnN1
bWVkQ2hhcmFjdGVyc1ttYXhMZW5ndGhdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIGNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3Rl
cjsKLSAgICAgICAgaWYgKGNoYXJhY3Rlck1pc21hdGNoKGNoYXJhY3RlciwgbGl0ZXJhbFtpXSwg
bGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKSkgewotICAgICAgICAgICAgaWYgKGkpCi0gICAgICAg
ICAgICAgICAgcHVzaEJhY2soU3RyaW5nIHsgY29uc3VtZWRDaGFyYWN0ZXJzLCBpIH0pOwotICAg
ICAgICAgICAgcmV0dXJuIERpZE5vdE1hdGNoOwotICAgICAgICB9Ci0gICAgICAgIGFkdmFuY2VQ
YXN0Tm9uTmV3bGluZSgpOwotICAgICAgICBjb25zdW1lZENoYXJhY3RlcnNbaV0gPSBjaGFyYWN0
ZXI7Ci0gICAgfQotICAgIHJldHVybiBEaWRNYXRjaDsKLX0KLQotdm9pZCBTZWdtZW50ZWRTdHJp
bmc6OnVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzRm9yRW1wdHlTdHJpbmcoKQotewotICAg
IEFTU0VSVCghbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCk7Ci0gICAgQVNTRVJUKG1fb3RoZXJT
dWJzdHJpbmdzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRDaGFyYWN0ZXIpOwot
ICAgIG1fZmFzdFBhdGhGbGFncyA9IE5vRmFzdFBhdGg7Ci0gICAgbV9hZHZhbmNlV2l0aG91dFVw
ZGF0aW5nTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZUVtcHR5
OwotICAgIG1fYWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbiA9ICZTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2VFbXB0eTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU2VnbWVudGVkU3RyaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZl
N2YxOTE0MDM3ZDMzNWJmOThlNDhlNWQ2ZjkzMTkzMDljMjYwYzcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TZWdtZW50ZWRTdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0vKgot
ICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1F
OiBUaGlzIHNob3VsZCBub3Qgc3RhcnQgd2l0aCAiayIuCi0vLyBGSVhNRTogVGhpcyBpcyBhIHNo
YXJlZCB0b2tlbml6ZXIgY29uY2VwdCwgbm90IGEgU2VnbWVudGVkU3RyaW5nIGNvbmNlcHQsIGJ1
dCB0aGlzIGlzIHRoZSBvbmx5IGNvbW1vbiBoZWFkZXIgZm9yIG5vdy4KLWNvbnN0ZXhwciBMQ2hh
ciBrRW5kT2ZGaWxlTWFya2VyID0gMDsKLQotY2xhc3MgU2VnbWVudGVkU3RyaW5nIHsKLXB1Ymxp
YzoKLSAgICBTZWdtZW50ZWRTdHJpbmcoKSA9IGRlZmF1bHQ7Ci0gICAgU2VnbWVudGVkU3RyaW5n
KFN0cmluZyYmKTsKLSAgICBTZWdtZW50ZWRTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBT
ZWdtZW50ZWRTdHJpbmcoU2VnbWVudGVkU3RyaW5nJiYpID0gZGVsZXRlOwotICAgIFNlZ21lbnRl
ZFN0cmluZyhjb25zdCBTZWdtZW50ZWRTdHJpbmcmKSA9IGRlbGV0ZTsKLQotICAgIFNlZ21lbnRl
ZFN0cmluZyYgb3BlcmF0b3I9KFNlZ21lbnRlZFN0cmluZyYmKTsKLSAgICBTZWdtZW50ZWRTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBTZWdtZW50ZWRTdHJpbmcmKSA9IGRlZmF1bHQ7Ci0KLSAgICB2
b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBhcHBlbmQoU2VnbWVu
dGVkU3RyaW5nJiYpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwot
Ci0gICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgdm9pZCBwdXNoQmFjayhTdHJpbmcmJik7Ci0KLSAgICB2b2lkIHNldEV4Y2x1
ZGVMaW5lTnVtYmVycygpOwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
Y3VycmVudFN1YnN0cmluZy5sZW5ndGg7IH0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsK
LQotICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ2xvc2VkOyB9Ci0KLSAg
ICB2b2lkIGFkdmFuY2UoKTsKLSAgICB2b2lkIGFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOyAvLyBG
YXN0ZXIgdGhhbiBjYWxsaW5nIGFkdmFuY2Ugd2hlbiB3ZSBrbm93IHRoZSBjdXJyZW50IGNoYXJh
Y3RlciBpcyBub3QgYSBuZXdsaW5lLgotICAgIHZvaWQgYWR2YW5jZVBhc3ROZXdsaW5lKCk7IC8v
IEZhc3RlciB0aGFuIGNhbGxpbmcgYWR2YW5jZSB3aGVuIHdlIGtub3cgdGhlIGN1cnJlbnQgY2hh
cmFjdGVyIGlzIGEgbmV3bGluZS4KLQotICAgIGVudW0gQWR2YW5jZVBhc3RSZXN1bHQgeyBEaWRO
b3RNYXRjaCwgRGlkTWF0Y2gsIE5vdEVub3VnaENoYXJhY3RlcnMgfTsKLSAgICB0ZW1wbGF0ZTx1
bnNpZ25lZCBsZW5ndGg+IEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQYXN0KGNvbnN0IGNoYXIg
KCZsaXRlcmFsKVtsZW5ndGhdKSB7IHJldHVybiBhZHZhbmNlUGFzdDxsZW5ndGgsIGZhbHNlPihs
aXRlcmFsKTsgfQotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gQWR2YW5jZVBhc3RSZXN1
bHQgYWR2YW5jZVBhc3RMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgY2hhciAoJmxpdGVy
YWwpW2xlbmd0aF0pIHsgcmV0dXJuIGFkdmFuY2VQYXN0PGxlbmd0aCwgdHJ1ZT4obGl0ZXJhbCk7
IH0KLQotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgY29uc3Q7Ci0K
LSAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLQotICAgIFVDaGFyIGN1cnJlbnRDaGFyYWN0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0KLQotICAgIE9yZGluYWxO
dW1iZXIgY3VycmVudENvbHVtbigpIGNvbnN0OwotICAgIE9yZGluYWxOdW1iZXIgY3VycmVudExp
bmUoKSBjb25zdDsKLQotICAgIC8vIFNldHMgdmFsdWUgb2YgbGluZS9jb2x1bW4gdmFyaWFibGVz
LiBDb2x1bW4gaXMgc3BlY2lmaWVkIGluZGlyZWN0bHkgYnkgYSBwYXJhbWV0ZXIgY29sdW1uQWZ0
ZXJQcm9sb2cKLSAgICAvLyB3aGljaCBpcyBhIHZhbHVlIG9mIGNvbHVtbiB0aGF0IHdlIHNob3Vs
ZCBnZXQgYWZ0ZXIgYSBwcm9sb2cgKGZpcnN0IHByb2xvZ0xlbmd0aCBjaGFyYWN0ZXJzKSBoYXMg
YmVlbiBjb25zdW1lZC4KLSAgICB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihPcmRpbmFsTnVtYmVy
IGxpbmUsIE9yZGluYWxOdW1iZXIgY29sdW1uQWZ0ZXJQcm9sb2csIGludCBwcm9sb2dMZW5ndGgp
OwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBTdWJzdHJpbmcgewotICAgICAgICBTdWJzdHJpbmco
KSA9IGRlZmF1bHQ7Ci0gICAgICAgIFN1YnN0cmluZyhTdHJpbmcmJik7Ci0KLSAgICAgICAgVUNo
YXIgY3VycmVudENoYXJhY3RlcigpIGNvbnN0OwotICAgICAgICBVQ2hhciBjdXJyZW50Q2hhcmFj
dGVyUHJlSW5jcmVtZW50KCk7Ci0KLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJz
Q29uc3VtZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBhcHBlbmRUbyhTdHJpbmdCdWlsZGVyJikg
Y29uc3Q7Ci0KLSAgICAgICAgU3RyaW5nIHN0cmluZzsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
IHsgMCB9OwotICAgICAgICBib29sIGlzOEJpdDsKLSAgICAgICAgdW5pb24gewotICAgICAgICAg
ICAgY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXI4OwotICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGN1cnJlbnRDaGFyYWN0ZXIxNjsKLSAgICAgICAgfTsKLSAgICAgICAgYm9vbCBkb05vdEV4
Y2x1ZGVMaW5lTnVtYmVycyB7IHRydWUgfTsKLSAgICB9OwotCi0gICAgZW51bSBGYXN0UGF0aEZs
YWdzIHsKLSAgICAgICAgTm9GYXN0UGF0aCA9IDAsCi0gICAgICAgIFVzZThCaXRBZHZhbmNlQW5k
VXBkYXRlTGluZU51bWJlcnMgPSAxIDw8IDAsCi0gICAgICAgIFVzZThCaXRBZHZhbmNlID0gMSA8
PCAxLAotICAgIH07Ci0KLSAgICB2b2lkIGFwcGVuZFN1YnN0cmluZyhTdWJzdHJpbmcmJik7Ci0K
LSAgICB2b2lkIHByb2Nlc3NQb3NzaWJsZU5ld2xpbmUoKTsKLSAgICB2b2lkIHN0YXJ0TmV3TGlu
ZSgpOwotCi0gICAgdm9pZCBhZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotICAg
IHZvaWQgYWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIxNigpOwotICAgIHZvaWQgYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXIxNigpOwotICAgIHZvaWQgYWR2YW5jZVBhc3RTaW5nbGVD
aGFyYWN0ZXJTdWJzdHJpbmdXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyKCk7Ci0gICAgdm9pZCBh
ZHZhbmNlUGFzdFNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpOwotICAgIHZvaWQgYWR2YW5jZUVt
cHR5KCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJzKCk7Ci0gICAg
dm9pZCB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCk7Ci0gICAg
dm9pZCB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvclNpbmdsZUNoYXJhY3RlclN1YnN0
cmluZygpOwotCi0gICAgdm9pZCBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGJvb2wgY2hhcmFjdGVyTWlzbWF0
Y2goQ2hhcmFjdGVyVHlwZSwgY2hhciwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOwot
ICAgIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2U+IEFkdmFuY2VQYXN0UmVzdWx0IGFkdmFuY2VQYXN0KGNvbnN0IGNoYXIgKCZsaXRlcmFsKVts
ZW5ndGhdKTsKLSAgICBBZHZhbmNlUGFzdFJlc3VsdCBhZHZhbmNlUGFzdFNsb3dDYXNlKGNvbnN0
IGNoYXIqIGxpdGVyYWwsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKTsKLQotICAgIFN1
YnN0cmluZyBtX2N1cnJlbnRTdWJzdHJpbmc7Ci0gICAgRGVxdWU8U3Vic3RyaW5nPiBtX290aGVy
U3Vic3RyaW5nczsKLQotICAgIGJvb2wgbV9pc0Nsb3NlZCB7IGZhbHNlIH07Ci0KLSAgICBVQ2hh
ciBtX2N1cnJlbnRDaGFyYWN0ZXIgeyAwIH07Ci0KLSAgICB1bnNpZ25lZCBtX251bWJlck9mQ2hh
cmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdWJzdHJpbmcgeyAwIH07Ci0gICAgdW5zaWdu
ZWQgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSB7IDAgfTsK
LSAgICBpbnQgbV9jdXJyZW50TGluZSB7IDAgfTsKLQotICAgIHVuc2lnbmVkIGNoYXIgbV9mYXN0
UGF0aEZsYWdzIHsgTm9GYXN0UGF0aCB9OwotICAgIHZvaWQgKFNlZ21lbnRlZFN0cmluZzo6Km1f
YWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXJGdW5jdGlvbikoKSB7ICZTZWdtZW50ZWRT
dHJpbmc6OmFkdmFuY2VFbXB0eSB9OwotICAgIHZvaWQgKFNlZ21lbnRlZFN0cmluZzo6Km1fYWR2
YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXJGdW5jdGlvbikoKSB7ICZTZWdtZW50ZWRTdHJpbmc6OmFk
dmFuY2VFbXB0eSB9OwotfTsKLQotaW5saW5lIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5nOjpT
dWJzdHJpbmcoU3RyaW5nJiYgcGFzc2VkU3RyaW5nKQotICAgIDogc3RyaW5nKFdURk1vdmUocGFz
c2VkU3RyaW5nKSkKLSAgICAsIGxlbmd0aChzdHJpbmcubGVuZ3RoKCkpCi17Ci0gICAgaWYgKGxl
bmd0aCkgewotICAgICAgICBpczhCaXQgPSBzdHJpbmcuaW1wbCgpLT5pczhCaXQoKTsKLSAgICAg
ICAgaWYgKGlzOEJpdCkKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI4ID0gc3RyaW5nLmlt
cGwoKS0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VycmVudENo
YXJhY3RlcjE2ID0gc3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVyczE2KCk7Ci0gICAgfQotfQotCi1p
bmxpbmUgdW5zaWduZWQgU2VnbWVudGVkU3RyaW5nOjpTdWJzdHJpbmc6Om51bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RyaW5nLmxlbmd0aCgpIC0gbGVu
Z3RoOwotfQotCi1BTFdBWVNfSU5MSU5FIFVDaGFyIFNlZ21lbnRlZFN0cmluZzo6U3Vic3RyaW5n
OjpjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGVuZ3RoKTsKLSAgICBy
ZXR1cm4gaXM4Qml0ID8gKmN1cnJlbnRDaGFyYWN0ZXI4IDogKmN1cnJlbnRDaGFyYWN0ZXIxNjsK
LX0KLQotQUxXQVlTX0lOTElORSBVQ2hhciBTZWdtZW50ZWRTdHJpbmc6OlN1YnN0cmluZzo6Y3Vy
cmVudENoYXJhY3RlclByZUluY3JlbWVudCgpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0gICAg
cmV0dXJuIGlzOEJpdCA/ICorK2N1cnJlbnRDaGFyYWN0ZXI4IDogKisrY3VycmVudENoYXJhY3Rl
cjE2OwotfQotCi1pbmxpbmUgU2VnbWVudGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcoU3RyaW5n
JiYgc3RyaW5nKQotICAgIDogbV9jdXJyZW50U3Vic3RyaW5nKFdURk1vdmUoc3RyaW5nKSkKLXsK
LSAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCkgewotICAgICAgICBtX2N1cnJlbnRD
aGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlcigpOwotICAgICAg
ICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVycygpOwotICAgIH0KLX0KLQotaW5saW5lIFNl
Z21lbnRlZFN0cmluZzo6U2VnbWVudGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAg
IDogU2VnbWVudGVkU3RyaW5nKFN0cmluZyB7IHN0cmluZyB9KQotewotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpCi17Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFN1YnN0cmluZy5sZW5ndGggPiAxKTsKLSAgICBpZiAoVU5MSUtF
TFkoLS1tX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoID09IDEpKQotICAgICAgICB1cGRhdGVBZHZh
bmNlRnVuY3Rpb25Qb2ludGVyc0ZvclNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpOwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgU2VnbWVudGVkU3RyaW5nOjphZHZhbmNlV2l0aG91dFVwZGF0aW5n
TGluZU51bWJlcigpCi17Ci0gICAgaWYgKExJS0VMWShtX2Zhc3RQYXRoRmxhZ3MgJiBVc2U4Qml0
QWR2YW5jZSkpIHsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gKisrbV9jdXJyZW50U3Vi
c3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXI4OwotICAgICAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0
aCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKHRoaXMtPiptX2FkdmFuY2VXaXRo
b3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rpb24pKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNlZ21l
bnRlZFN0cmluZzo6c3RhcnROZXdMaW5lKCkKLXsKLSAgICArK21fY3VycmVudExpbmU7Ci0gICAg
bV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG51bWJlck9m
Q2hhcmFjdGVyc0NvbnN1bWVkKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNlZ21lbnRlZFN0cmluZzo6
cHJvY2Vzc1Bvc3NpYmxlTmV3bGluZSgpCi17Ci0gICAgaWYgKG1fY3VycmVudENoYXJhY3RlciA9
PSAnXG4nKQotICAgICAgICBzdGFydE5ld0xpbmUoKTsKLX0KLQotaW5saW5lIHZvaWQgU2VnbWVu
dGVkU3RyaW5nOjphZHZhbmNlKCkKLXsKLSAgICBpZiAoTElLRUxZKG1fZmFzdFBhdGhGbGFncyAm
IFVzZThCaXRBZHZhbmNlKSkgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50U3Vic3RyaW5nLmxl
bmd0aCA+IDEpOwotICAgICAgICBib29sIGxhc3RDaGFyYWN0ZXJXYXNOZXdsaW5lID0gbV9jdXJy
ZW50Q2hhcmFjdGVyID09ICdcbic7Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9ICorK21f
Y3VycmVudFN1YnN0cmluZy5jdXJyZW50Q2hhcmFjdGVyODsKLSAgICAgICAgYm9vbCBoYXZlT25l
Q2hhcmFjdGVyTGVmdCA9IC0tbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA9PSAxOwotICAgICAg
ICBpZiAoTElLRUxZKCEobGFzdENoYXJhY3Rlcldhc05ld2xpbmUgfCBoYXZlT25lQ2hhcmFjdGVy
TGVmdCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAobGFzdENoYXJhY3Rlcldh
c05ld2xpbmUgJiAhIShtX2Zhc3RQYXRoRmxhZ3MgJiBVc2U4Qml0QWR2YW5jZUFuZFVwZGF0ZUxp
bmVOdW1iZXJzKSkKLSAgICAgICAgICAgIHN0YXJ0TmV3TGluZSgpOwotICAgICAgICBpZiAoaGF2
ZU9uZUNoYXJhY3RlckxlZnQpCi0gICAgICAgICAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2lu
dGVyc0ZvclNpbmdsZUNoYXJhY3RlclN1YnN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgKHRoaXMtPiptX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rpb24pKCk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0Tm9u
TmV3bGluZSgpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudENoYXJhY3RlciAhPSAnXG4nKTsKLSAg
ICBhZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcigpOwotfQotCi1pbmxpbmUgdm9pZCBT
ZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VQYXN0TmV3bGluZSgpCi17Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudENoYXJhY3RlciA9PSAnXG4nKTsKLSAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0
aCA+IDEpIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFN1YnN0cmluZy5kb05vdEV4Y2x1ZGVMaW5l
TnVtYmVycykKLSAgICAgICAgICAgIHN0YXJ0TmV3TGluZSgpOwotICAgICAgICBtX2N1cnJlbnRD
aGFyYWN0ZXIgPSBtX2N1cnJlbnRTdWJzdHJpbmcuY3VycmVudENoYXJhY3RlclByZUluY3JlbWVu
dCgpOwotICAgICAgICBkZWNyZW1lbnRBbmRDaGVja0xlbmd0aCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgKHRoaXMtPiptX2FkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyRnVuY3Rp
b24pKCk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6Om51bWJlck9mQ2hh
cmFjdGVyc0NvbnN1bWVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9udW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3Vic3RyaW5nICsgbV9jdXJyZW50U3Vic3RyaW5nLm51
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IEFMV0FZU19JTkxJTkUgYm9vbCBTZWdtZW50ZWRTdHJpbmc6OmNoYXJhY3Rlck1p
c21hdGNoKENoYXJhY3RlclR5cGUgYSwgY2hhciBiLCBib29sIGxldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSkKLXsKLSAgICByZXR1cm4gbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlID8gIWlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwoYSwgYikgOiBhICE9IGI7Ci19Ci0KLXRlbXBsYXRlPHVuc2lnbmVk
IGxlbmd0aEluY2x1ZGluZ1Rlcm1pbmF0b3IsIGJvb2wgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
PiBTZWdtZW50ZWRTdHJpbmc6OkFkdmFuY2VQYXN0UmVzdWx0IFNlZ21lbnRlZFN0cmluZzo6YWR2
YW5jZVBhc3QoY29uc3QgY2hhciAoJmxpdGVyYWwpW2xlbmd0aEluY2x1ZGluZ1Rlcm1pbmF0b3Jd
KQotewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhJbmNsdWRpbmdUZXJt
aW5hdG9yIC0gMTsKLSAgICBBU1NFUlQoIWxpdGVyYWxbbGVuZ3RoXSk7Ci0gICAgQVNTRVJUKCFz
dHJjaHIobGl0ZXJhbCwgJ1xuJykpOwotICAgIGlmIChsZW5ndGggKyAxIDwgbV9jdXJyZW50U3Vi
c3RyaW5nLmxlbmd0aCkgewotICAgICAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmlzOEJpdCkg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlck1pc21hdGNoKG1fY3VycmVudFN1YnN0cmluZy5j
dXJyZW50Q2hhcmFjdGVyOFtpXSwgbGl0ZXJhbFtpXSwgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpZE5vdE1hdGNoOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXI4ICs9IGxl
bmd0aDsKLSAgICAgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9ICptX2N1cnJlbnRTdWJzdHJp
bmcuY3VycmVudENoYXJhY3Rlcjg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y2hhcmFjdGVyTWlzbWF0Y2gobV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIxNltp
XSwgbGl0ZXJhbFtpXSwgbGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIERpZE5vdE1hdGNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9j
dXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0ZXIxNiArPSBsZW5ndGg7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSAqbV9jdXJyZW50U3Vic3RyaW5nLmN1cnJlbnRDaGFyYWN0
ZXIxNjsKLSAgICAgICAgfQotICAgICAgICBtX2N1cnJlbnRTdWJzdHJpbmcubGVuZ3RoIC09IGxl
bmd0aDsKLSAgICAgICAgcmV0dXJuIERpZE1hdGNoOwotICAgIH0KLSAgICByZXR1cm4gYWR2YW5j
ZVBhc3RTbG93Q2FzZShsaXRlcmFsLCBsZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOwotfQotCi1p
bmxpbmUgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnVwZGF0ZUFkdmFuY2VGdW5jdGlvblBvaW50ZXJz
KCkKLXsKLSAgICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCA+IDEpIHsKLSAgICAgICAg
aWYgKG1fY3VycmVudFN1YnN0cmluZy5pczhCaXQpIHsKLSAgICAgICAgICAgIG1fZmFzdFBhdGhG
bGFncyA9IFVzZThCaXRBZHZhbmNlOwotICAgICAgICAgICAgaWYgKG1fY3VycmVudFN1YnN0cmlu
Zy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycykKLSAgICAgICAgICAgICAgICBtX2Zhc3RQYXRoRmxh
Z3MgfD0gVXNlOEJpdEFkdmFuY2VBbmRVcGRhdGVMaW5lTnVtYmVyczsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2Zhc3RQYXRoRmxhZ3MgPSBOb0Zhc3RQYXRoOwot
ICAgICAgICBtX2FkdmFuY2VXaXRob3V0VXBkYXRpbmdMaW5lTnVtYmVyRnVuY3Rpb24gPSAmU2Vn
bWVudGVkU3RyaW5nOjphZHZhbmNlV2l0aG91dFVwZGF0aW5nTGluZU51bWJlcjE2OwotICAgICAg
ICBpZiAobV9jdXJyZW50U3Vic3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKQotICAgICAg
ICAgICAgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0
cmluZzo6YWR2YW5jZUFuZFVwZGF0ZUxpbmVOdW1iZXIxNjsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV9hZHZhbmNlQW5kVXBkYXRlTGluZU51bWJlckZ1bmN0aW9uID0gJlNlZ21lbnRlZFN0
cmluZzo6YWR2YW5jZVdpdGhvdXRVcGRhdGluZ0xpbmVOdW1iZXIxNjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghbV9jdXJyZW50U3Vic3RyaW5nLmxlbmd0aCkgewotICAgICAg
ICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvckVtcHR5U3RyaW5nKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB1cGRhdGVBZHZhbmNlRnVuY3Rpb25Qb2ludGVyc0ZvclNp
bmdsZUNoYXJhY3RlclN1YnN0cmluZygpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMmY0NDgyMDBjOTQ0YzRhZTE0ZjEyOThjMzhiMjkxMTg3MzVkMTM5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSW4g
c29tZSBjaXJjdW1zdGFuY2VzIHdlIHdhbnQgdG8gc3RvcmUgYSBTdHJpbmcgYWxvbmcgd2l0aCB0
aGUgVGV4dERpcmVjdGlvbgotLy8gb2YgdGhlIFN0cmluZyBhcyBsZWFybmVkIGZyb20gdGhlIGNv
bnRleHQgb2YgdGhlIFN0cmluZy4gRm9yIGV4YW1wbGUsCi0vLyBjb25zaWRlciBzdG9yaW5nIHRo
ZSB0aXRsZSBkZXJpdmVkIGZyb20gPHRpdGxlIGRpcj0ncnRsJz5zb21lIHRpdGxlPC90aXRsZT4K
LS8vIGluIHRoZSBoaXN0b3J5LgotLy8KLS8vIE5vdGUgdGhhdCBpcyBleHBsaWNpdGx5ICpub3Qq
IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHN0cmluZyBhcyBsZWFybmVkCi0vLyBmcm9tIHRoZSBjaGFy
YWN0ZXJzIG9mIHRoZSBzdHJpbmc7IGl0J3MgZXh0cmEgbWV0YWRhdGEgd2UgaGF2ZSBleHRlcm5h
bAotLy8gdG8gdGhlIHN0cmluZy4KLQotc3RydWN0IFN0cmluZ1dpdGhEaXJlY3Rpb24gewotICAg
IFN0cmluZyBzdHJpbmc7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24geyBUZXh0RGlyZWN0
aW9uOjpMVFIgfTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nV2l0
aERpcmVjdGlvbiYgYSwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYikKLXsKLSAgICByZXR1
cm4gYS5zdHJpbmcgPT0gYi5zdHJpbmcgJiYgYS5kaXJlY3Rpb24gPT0gYi5kaXJlY3Rpb247Ci19
Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYSwg
Y29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwot
fQotCi1pbmxpbmUgU3RyaW5nV2l0aERpcmVjdGlvbiB0cnVuY2F0ZUZyb21FbmQoY29uc3QgU3Ry
aW5nV2l0aERpcmVjdGlvbiYgc3RyaW5nLCB1bnNpZ25lZCBtYXhMZW5ndGgpCi17Ci0gICAgcmV0
dXJuIHsgc3RyaW5nLnN0cmluZy5sZWZ0KG1heExlbmd0aCksIHN0cmluZy5kaXJlY3Rpb24gfTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdWZmaXhU
cmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N1ZmZpeFRyZWUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0Y2U2MDIwYTliZGQ0OWViNTNkMTJlNzFmNTkyODlk
Nzg3YjUwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N1ZmZpeFRyZWUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFkYW0gQmFydGguIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVu
aWNvZGVDb2RlYm9vayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGludCBjb2RlV29yZChVQ2hhciBj
KSB7IHJldHVybiBjOyB9Ci0gICAgZW51bSB7IGNvZGVTaXplID0gMSA8PCA4ICogc2l6ZW9mKFVD
aGFyKSB9OwotfTsKLQotY2xhc3MgQVNDSUlDb2RlYm9vayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGludCBjb2RlV29yZChVQ2hhciBjKSB7IHJldHVybiBjICYgKGNvZGVTaXplIC0gMSk7IH0KLSAg
ICBlbnVtIHsgY29kZVNpemUgPSAxIDw8ICg4ICogc2l6ZW9mKGNoYXIpIC0gMSkgfTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIENvZGVib29rPgotY2xhc3MgU3VmZml4VHJlZSB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VmZml4VHJl
ZSkKLXB1YmxpYzoKLSAgICBTdWZmaXhUcmVlKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQg
ZGVwdGgpCi0gICAgICAgIDogbV9kZXB0aChkZXB0aCkKLSAgICAgICAgLCBtX2xlYWYodHJ1ZSkK
LSAgICB7Ci0gICAgICAgIGJ1aWxkKHRleHQpOwotICAgIH0KLQotICAgIGJvb2wgbWlnaHRDb250
YWluKGNvbnN0IFN0cmluZyYgcXVlcnkpCi0gICAgewotICAgICAgICBOb2RlKiBjdXJyZW50ID0g
Jm1fcm9vdDsKLSAgICAgICAgaW50IGxpbWl0ID0gc3RkOjptaW4obV9kZXB0aCwgcXVlcnkubGVu
Z3RoKCkpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbWl0OyArK2kpIHsKLSAgICAg
ICAgICAgIGF1dG8gaXQgPSBjdXJyZW50LT5maW5kKENvZGVib29rOjpjb2RlV29yZChxdWVyeVtp
XSkpOwotICAgICAgICAgICAgaWYgKGl0ID09IGN1cnJlbnQtPmVuZCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBpdC0+bm9kZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3Mg
Tm9kZSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgTm9kZShib29sIGlzTGVhZiA9IGZhbHNlKQotICAgICAgICAgICAgOiBtX2lzTGVhZihp
c0xlYWYpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIH5Ob2RlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAg
ICAgICAgICBhdXRvKiBjaGlsZCA9IGVudHJ5Lm5vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
aWxkICYmICFjaGlsZC0+bV9pc0xlYWYpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjaGls
ZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIE5vZGUqJiBjaGlsZEF0KGlu
dCBjb2RlV29yZCk7Ci0KLSAgICAgICAgYXV0byBmaW5kKGludCBjb2RlV29yZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihtX2NoaWxkcmVuLmJlZ2luKCksIG1f
Y2hpbGRyZW4uZW5kKCksIFtjb2RlV29yZF0oYXV0byYgZW50cnkpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZW50cnkuY29kZVdvcmQgPT0gY29kZVdvcmQ7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9jaGlsZHJlbi5lbmQoKTsg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RydWN0IENoaWxkV2l0aENvZGVXb3JkIHsKLSAg
ICAgICAgICAgIGludCBjb2RlV29yZDsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgVmVjdG9yPENoaWxkV2l0aENvZGVXb3JkPiBtX2NoaWxkcmVuOwotICAg
ICAgICBib29sIG1faXNMZWFmOwotICAgIH07Ci0KLSAgICB2b2lkIGJ1aWxkKGNvbnN0IFN0cmlu
ZyYgdGV4dCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYmFzZSA9IDA7IGJhc2UgPCB0
ZXh0Lmxlbmd0aCgpOyArK2Jhc2UpIHsKLSAgICAgICAgICAgIE5vZGUqIGN1cnJlbnQgPSAmbV9y
b290OwotICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihiYXNlICsgbV9kZXB0
aCwgdGV4dC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7
IGJhc2UgKyBvZmZzZXQgPCBsaW1pdDsgKytvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoY3VycmVudCAhPSAmbV9sZWFmKTsKLSAgICAgICAgICAgICAgICBOb2RlKiYgY2hpbGQgPSBj
dXJyZW50LT5jaGlsZEF0KENvZGVib29rOjpjb2RlV29yZCh0ZXh0W2Jhc2UgKyBvZmZzZXRdKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQg
PSBiYXNlICsgb2Zmc2V0ICsgMSA9PSBsaW1pdCA/ICZtX2xlYWYgOiBuZXcgTm9kZSgpOwotICAg
ICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIE5vZGUgbV9yb290OwotICAgIHVuc2lnbmVkIG1fZGVwdGg7Ci0KLSAgICAv
LyBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYSBmcmVzaCBlbXB0eSBsZWFmIG5vZGUgZm9yIGV2ZXIg
bGVhZiBpbiB0aGUgdHJlZQotICAgIC8vICh0aGVyZSBjYW4gYmUgYSBsb3Qgb2YgdGhlc2UpLCB3
ZSBhbGlhcyBhbGwgdGhlIGxlYXZlcyB0byB0aGlzICJzdGF0aWMiCi0gICAgLy8gbGVhZiBub2Rl
LgotICAgIE5vZGUgbV9sZWFmOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZWJvb2s+Ci1p
bmxpbmUgYXV0byBTdWZmaXhUcmVlPENvZGVib29rPjo6Tm9kZTo6Y2hpbGRBdChpbnQgY29kZVdv
cmQpIC0+IE5vZGUqJgotewotICAgIGF1dG8gaXQgPSBmaW5kKGNvZGVXb3JkKTsKLSAgICBpZiAo
aXQgIT0gbV9jaGlsZHJlbi5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5ub2RlOwotICAgIG1f
Y2hpbGRyZW4uYXBwZW5kKENoaWxkV2l0aENvZGVXb3JkIHsgY29kZVdvcmQsIG51bGxwdHIgfSk7
Ci0gICAgcmV0dXJuIG1fY2hpbGRyZW4ubGFzdCgpLm5vZGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJv
dW5kYXJpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmll
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ODBmZjY4MjBmMDlhNzYxMzc3
ZjEyYTk0MzkxMjRhZDJhYWI0MjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1j
b21wYW55LmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgotCi0jaW5j
bHVkZSA8dW5pY29kZS91YnJrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdW5zaWduZWQgZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmll
dyB0ZXh0KQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAgIHVuc2lnbmVkIGZpcnN0
ID0gaTsKLSAgICAgICAgVUNoYXIzMiBjaDsKLSAgICAgICAgVTE2X05FWFQodGV4dCwgaSwgbGVu
Z3RoLCBjaCk7Ci0gICAgICAgIGlmICghcmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNo
KSkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdDsKLSAgICB9Ci0gICAgcmV0dXJuIGxlbmd0aDsK
LX0KLQotdW5zaWduZWQgc3RhcnRPZkxhc3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcg
dGV4dCkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaSA+IDA7ICkgewotICAgICAgICB1bnNpZ25lZCBsYXN0ID0g
aTsKLSAgICAgICAgVUNoYXIzMiBjaDsKLSAgICAgICAgVTE2X1BSRVYodGV4dCwgMCwgaSwgY2gp
OwotICAgICAgICBpZiAoIXJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaCkpCi0gICAg
ICAgICAgICByZXR1cm4gbGFzdDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiAhUExB
VEZPUk0oQ09DT0EpCi0KLWludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoU3RyaW5nVmlldyB0ZXh0
LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKLXsKLSAgICBVQnJlYWtJdGVyYXRvciogaXQg
PSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKLQotICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAg
IHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKLSAgICAgICAgd2hpbGUg
KHBvc2l0aW9uICE9IFVCUktfRE9ORSkgewotICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hp
bmcgd2hlbiB0aGUgY2hhcmFjdGVyIHByZWNlZWRpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJp
Yy4KLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pIDwgdGV4
dC5sZW5ndGgoKSAmJiB1X2lzYWxudW0odGV4dFtwb3NpdGlvbiAtIDFdKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcG9zaXRpb247Ci0KLSAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xs
b3dpbmcoaXQsIHBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0ZXh0Lmxl
bmd0aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBvc2l0aW9uID0gdWJya19wcmVjZWRpbmco
aXQsIHBvc2l0aW9uKTsKLSAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkgewot
ICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxv
d2luZyB0aGUgYnJlYWsgaXMgYWxwaGFudW1lcmljLgotICAgICAgICAgICAgaWYgKHBvc2l0aW9u
ICYmIHVfaXNhbG51bSh0ZXh0W3Bvc2l0aW9uXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5nKGl0LCBwb3Np
dGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQg
ZmluZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFy
dCwgaW50KiBlbmQpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0
b3IodGV4dCk7Ci0gICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7Ci0gICAg
aWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsKLSAgICAqc3RhcnQg
PSB1YnJrX3ByZXZpb3VzKGl0KTsKLX0KLQotdm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KFN0cmlu
Z1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKLXsKLSAgICBVQnJlYWtJdGVyYXRv
ciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKLSAgICAqZW5kID0gdWJya19mb2xsb3dp
bmcoaXQsIHBvc2l0aW9uKTsKLSAgICBpZiAoKmVuZCA8IDApCi0gICAgICAgICplbmQgPSB1YnJr
X2xhc3QoaXQpOwotfQotCi0jZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRCb3VuZGFyaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhODczYWY0ZDdkNzNjM2FlMDk0
ZGRmZjQ3NGQ5ZGNiMzU1YWIxMzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUZXh0Qm91bmRhcmllc19oCi0j
ZGVmaW5lIFRleHRCb3VuZGFyaWVzX2gKLQotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBpbmxp
bmUgYm9vbCByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoVUNoYXIzMiBjaGFyYWN0ZXIp
Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBuZWVkZWQg
d2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNjU2IGlzIGZp
eGVkLgotCi0gICAgICAgIC8vIFdlIGNhbiBnZXQgcmlkIG9mIHRoaXMgY29uc3RhbnQgaWYgd2Ug
cmVxdWlyZSBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIElDVSBoZWFkZXJzLgotICAgICAgICBjb25z
dCBpbnQgV0tfVV9MQl9DT05ESVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSID0gMzc7Ci0KLSAgICAg
ICAgaW50IGxpbmVCcmVhayA9IHVfZ2V0SW50UHJvcGVydHlWYWx1ZShjaGFyYWN0ZXIsIFVDSEFS
X0xJTkVfQlJFQUspOwotICAgICAgICByZXR1cm4gbGluZUJyZWFrID09IFVfTEJfQ09NUExFWF9D
T05URVhUIHx8IGxpbmVCcmVhayA9PSBXS19VX0xCX0NPTkRJVElPTkFMX0pBUEFORVNFX1NUQVJU
RVIgfHwgbGluZUJyZWFrID09IFVfTEJfSURFT0dSQVBISUM7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgZW5kT2ZGaXJzdFdvcmRCb3VuZGFyeUNvbnRleHQoU3RyaW5nVmlldyk7Ci0gICAgdW5zaWdu
ZWQgc3RhcnRPZkxhc3RXb3JkQm91bmRhcnlDb250ZXh0KFN0cmluZ1ZpZXcpOwotCi0gICAgdm9p
ZCBmaW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwg
aW50KiBlbmQpOwotICAgIHZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3LCBpbnQg
cG9zaXRpb24sIGludCogZW5kKTsKLSAgICBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmlu
Z1ZpZXcsIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKTsKLQotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAppbmRleCBl
MThlZDVmMzFlOWE2YmYyNzMwYTgzZjNmNjQ3NTJkYzUyMTZmZWYwLi4yMTk0MmQ4OTk0Njg5ZTI1
ZGI0NWRmMzY4ODljMzU4ZmRiYTJiZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4
dENoZWNraW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMjIgKzM3LDIyIEBA
IGNsYXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hl
Y2tlckNsaWVudCgpID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1h
cmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFBB
TDo6VGV4dENoZWNraW5nVHlwZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVX
b3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVs
bGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBt
aXNzcGVsbGluZ0xlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0
U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywg
VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFk
R3JhbW1hckxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmlu
ZyhTdHJpbmdWaWV3LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpID0gMDsKIAogI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgdmlydHVhbCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlw
ZT4gY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlv
bikgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVj
a1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdU
eXBlPiBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0
aW9uKSA9IDA7CiAjZW5kaWYKIAogICAgIC8vIEZvciBzcGVsbGNoZWNrZXJzIHRoYXQgc3VwcG9y
dCBtdWx0aXBsZSBsYW5ndWFnZXMsIGl0J3Mgb2Z0ZW4gaW1wb3J0YW50IHRvIGJlIGFibGUgdG8g
aWRlbnRpZnkgdGhlIGxhbmd1YWdlIGluIG9yZGVyIHRvCiAgICAgLy8gcHJvdmlkZSBtb3JlIGFj
Y3VyYXRlIGNvcnJlY3Rpb24gc3VnZ2VzdGlvbnMuIENhbGxlciBjYW4gcGFzcyBpbiBtb3JlIHRl
eHQgaW4gImNvbnRleHQiIHRvIGFpZCBzdWNoIHNwZWxsY2hlY2tlcnMgb24gbGFuZ3VhZ2UKICAg
ICAvLyBpZGVudGlmaWNhdGlvbi4gTm9yYW1sbHkgaXQncyB0aGUgdGV4dCBzdXJyb3VuZGluZyB0
aGUgIndvcmQiIGZvciB3aGljaCB3ZSBhcmUgZ2V0dGluZyBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25z
LgogICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhmNmM4YzA5Zjk3MWQ1M2Y0MmY4Y2NhZTMxMjgwYzE3M2ZmOTRkNjcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgotI2lu
Y2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIu
aD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWVudW0gY2xhc3MgVGV4dENoZWNraW5nVHlwZSA6IHVpbnQ4X3QgewotICAgIE5vbmUgICAgICAg
ICAgICAgICAgICAgID0gMCwKLSAgICBTcGVsbGluZyAgICAgICAgICAgICAgICA9IDEgPDwgMCwK
LSAgICBHcmFtbWFyICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKLSAgICBMaW5rICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKLSAgICBRdW90ZSAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MywKLSAgICBEYXNoICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwKLSAgICBSZXBsYWNlbWVu
dCAgICAgICAgICAgICA9IDEgPDwgNSwKLSAgICBDb3JyZWN0aW9uICAgICAgICAgICAgICA9IDEg
PDwgNiwKLSAgICBTaG93Q29ycmVjdGlvblBhbmVsICAgICA9IDEgPDwgNywKLX07Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi10eXBlZGVmIHVpbnQ2NF90IE5TVGV4dENoZWNraW5nVHlwZXM7Ci1XRUJD
T1JFX0VYUE9SVCBOU1RleHRDaGVja2luZ1R5cGVzIG5zVGV4dENoZWNraW5nVHlwZXMoT3B0aW9u
U2V0PFRleHRDaGVja2luZ1R5cGU+KTsKLSNlbmRpZgotCi1lbnVtIFRleHRDaGVja2luZ1Byb2Nl
c3NUeXBlIHsKLSAgICBUZXh0Q2hlY2tpbmdQcm9jZXNzQmF0Y2gsCi0gICAgVGV4dENoZWNraW5n
UHJvY2Vzc0luY3JlbWVudGFsCi19OwotCi1zdHJ1Y3QgR3JhbW1hckRldGFpbCB7Ci0gICAgQ2hh
cmFjdGVyUmFuZ2UgcmFuZ2U7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICBTdHJp
bmcgdXNlckRlc2NyaXB0aW9uOwotfTsKLQotc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdCB7Ci0g
ICAgVGV4dENoZWNraW5nVHlwZSB0eXBlOwotICAgIENoYXJhY3RlclJhbmdlIHJhbmdlOwotICAg
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBkZXRhaWxzOwotICAgIFN0cmluZyByZXBsYWNlbWVudDsK
LX07Ci0KLXN0cnVjdCBUZXh0Q2hlY2tpbmdHdWVzc2VzIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzOwotICAgIGJvb2wgbWlzc3BlbGxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCB1bmdyYW1t
YXRpY2FsIHsgZmFsc2UgfTsKLX07Ci0KLWVudW0gVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZp
ZXJUeXBlIHsgfTsKLXVzaW5nIFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyID0gT2JqZWN0
SWRlbnRpZmllcjxUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllclR5cGU+OwotCi1jbGFzcyBU
ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSB7Ci0gICAgZnJpZW5kIGNsYXNzIFNwZWxsQ2hlY2tSZXF1
ZXN0OyAvLyBGb3IgYWNjZXNzIHRvIG1faWRlbnRpZmllci4KLXB1YmxpYzoKLSAgICBUZXh0Q2hl
Y2tpbmdSZXF1ZXN0RGF0YSgpID0gZGVmYXVsdDsKLSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0
YShzdGQ6Om9wdGlvbmFsPFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyPiBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2lu
Z1R5cGVzLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSkKLSAgICAgICAgOiBt
X3RleHQgeyB0ZXh0IH0KLSAgICAgICAgLCBtX2lkZW50aWZpZXIgeyBpZGVudGlmaWVyIH0KLSAg
ICAgICAgLCBtX3Byb2Nlc3NUeXBlIHsgcHJvY2Vzc1R5cGUgfQotICAgICAgICAsIG1fY2hlY2tp
bmdUeXBlcyB7IGNoZWNraW5nVHlwZXMgfQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlv
bmFsPFRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyPiBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0OyB9Ci0gICAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5n
VHlwZXMoKSBjb25zdCB7IHJldHVybiBtX2NoZWNraW5nVHlwZXM7IH0KLSAgICBUZXh0Q2hlY2tp
bmdQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc1R5cGU7
IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV90ZXh0OwotICAgIHN0ZDo6b3B0aW9uYWw8VGV4
dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKLSAgICBUZXh0Q2hlY2tp
bmdQcm9jZXNzVHlwZSBtX3Byb2Nlc3NUeXBlIHsgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVu
dGFsIH07Ci0gICAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IG1fY2hlY2tpbmdUeXBlczsK
LX07Ci0KLWNsYXNzIFRleHRDaGVja2luZ1JlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0
Q2hlY2tpbmdSZXF1ZXN0PiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+VGV4dENoZWNraW5nUmVx
dWVzdCgpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVz
dERhdGEmIGRhdGEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFN1Y2NlZWQoY29u
c3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENhbmNlbCgpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUHJvY2Vzc1R5cGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAg
ICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4
dENoZWNraW5nUHJvY2Vzc1R5cGU6OlRleHRDaGVja2luZ1Byb2Nlc3NCYXRjaCwKLSAgICAgICAg
V2ViQ29yZTo6VGV4dENoZWNraW5nUHJvY2Vzc1R5cGU6OlRleHRDaGVja2luZ1Byb2Nlc3NJbmNy
ZW1lbnRhbAotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAot
ICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlLAotICAgICAgICBXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdUeXBlOjpOb25lLAotICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZywKLSAgICAgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciwKLSAg
ICAgICAgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6TGluaywKLSAgICAgICAgV2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZTo6UXVvdGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGU6OkRhc2gsCi0gICAgICAgIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50
LAotICAgICAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uLAotICAgICAg
ICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsCi0gICAgPjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHREaXJlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVmZTk3ZGVh
MGE1YjBiZTQ4N2ZiODJiMWRiMjU3ZDNlOTAzMzE0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRE
aXJlY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIFRleHREaXJl
Y3Rpb24gOiBib29sIHsgTFRSLCBSVEwgfTsKLQotaW5saW5lIGJvb2wgaXNMZWZ0VG9SaWdodERp
cmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gZGlyZWN0aW9u
ID09IFRleHREaXJlY3Rpb246OkxUUjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEZsYWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzU5MjI0ZjBk
YjcwYzlhNzc5Mzk5OGVmZjEwNDgxZmM1ZDUzNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Rmxh
Z3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPG9wdGlvbmFsPgotI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotZW51bSBjbGFzcyBUZXh0UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3Qg
ewotICAgIEF1dG9UZXh0UmVuZGVyaW5nLAotICAgIE9wdGltaXplU3BlZWQsCi0gICAgT3B0aW1p
emVMZWdpYmlsaXR5LAotICAgIEdlb21ldHJpY1ByZWNpc2lvbgotfTsKLQotZW51bSBjbGFzcyBG
b250U21vb3RoaW5nTW9kZSA6IHVpbnQ4X3QgewotICAgIEF1dG9TbW9vdGhpbmcsCi0gICAgTm9T
bW9vdGhpbmcsCi0gICAgQW50aWFsaWFzZWQsCi0gICAgU3VicGl4ZWxBbnRpYWxpYXNlZAotfTsK
LQotZW51bSBjbGFzcyBGb250T3JpZW50YXRpb24gOiB1aW50OF90IHsKLSAgICBIb3Jpem9udGFs
LAotICAgIFZlcnRpY2FsCi19OwotCi1lbnVtIGNsYXNzIE5vbkNKS0dseXBoT3JpZW50YXRpb24g
OiB1aW50OF90IHsKLSAgICBNaXhlZCwKLSAgICBVcHJpZ2h0Ci19OwotCi1lbnVtIEV4cGFuc2lv
bkJlaGF2aW9yRmxhZ3MgewotICAgIEZvcmJpZFJpZ2h0RXhwYW5zaW9uID0gMCA8PCAwLAotICAg
IEFsbG93UmlnaHRFeHBhbnNpb24gPSAxIDw8IDAsCi0gICAgRm9yY2VSaWdodEV4cGFuc2lvbiA9
IDIgPDwgMCwKLSAgICBSaWdodEV4cGFuc2lvbk1hc2sgPSAzIDw8IDAsCi0KLSAgICBGb3JiaWRM
ZWZ0RXhwYW5zaW9uID0gMCA8PCAyLAotICAgIEFsbG93TGVmdEV4cGFuc2lvbiA9IDEgPDwgMiwK
LSAgICBGb3JjZUxlZnRFeHBhbnNpb24gPSAyIDw8IDIsCi0gICAgTGVmdEV4cGFuc2lvbk1hc2sg
PSAzIDw8IDIsCi0KLSAgICBEZWZhdWx0RXhwYW5zaW9uID0gQWxsb3dSaWdodEV4cGFuc2lvbiB8
IEZvcmJpZExlZnRFeHBhbnNpb24sCi19OwotdHlwZWRlZiB1bnNpZ25lZCBFeHBhbnNpb25CZWhh
dmlvcjsKLQotZW51bSBGb250U3ludGhlc2lzVmFsdWVzIHsKLSAgICBGb250U3ludGhlc2lzTm9u
ZSA9IDB4MCwKLSAgICBGb250U3ludGhlc2lzV2VpZ2h0ID0gMHgxLAotICAgIEZvbnRTeW50aGVz
aXNTdHlsZSA9IDB4MiwKLSAgICBGb250U3ludGhlc2lzU21hbGxDYXBzID0gMHg0Ci19OwotLy8g
RklYTUU6IFVzZSBPcHRpb25TZXQuCi10eXBlZGVmIHVuc2lnbmVkIEZvbnRTeW50aGVzaXM7Ci1j
b25zdCB1bnNpZ25lZCBGb250U3ludGhlc2lzV2lkdGggPSAzOwotCi1lbnVtIGNsYXNzIEZvbnRW
YXJpYW50TGlnYXR1cmVzIDogdWludDhfdCB7IE5vcm1hbCwgWWVzLCBObyB9OwotZW51bSBjbGFz
cyBGb250VmFyaWFudFBvc2l0aW9uIDogdWludDhfdCB7IE5vcm1hbCwgU3Vic2NyaXB0LCBTdXBl
cnNjcmlwdCB9OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJpYW50Q2FwcyA6IHVpbnQ4X3QgewotICAg
IE5vcm1hbCwKLSAgICBTbWFsbCwKLSAgICBBbGxTbWFsbCwKLSAgICBQZXRpdGUsCi0gICAgQWxs
UGV0aXRlLAotICAgIFVuaWNhc2UsCi0gICAgVGl0bGluZwotfTsKLQotZW51bSBjbGFzcyBGb250
VmFyaWFudE51bWVyaWNGaWd1cmUgOiB1aW50OF90IHsKLSAgICBOb3JtYWwsCi0gICAgTGluaW5n
TnVtYmVycywKLSAgICBPbGRTdHlsZU51bWJlcnMKLX07Ci0KLWVudW0gY2xhc3MgRm9udFZhcmlh
bnROdW1lcmljU3BhY2luZyA6IHVpbnQ4X3QgewotICAgIE5vcm1hbCwKLSAgICBQcm9wb3J0aW9u
YWxOdW1iZXJzLAotICAgIFRhYnVsYXJOdW1iZXJzCi19OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJp
YW50TnVtZXJpY0ZyYWN0aW9uIDogdWludDhfdCB7Ci0gICAgTm9ybWFsLAotICAgIERpYWdvbmFs
RnJhY3Rpb25zLAotICAgIFN0YWNrZWRGcmFjdGlvbnMKLX07Ci0KLWVudW0gY2xhc3MgRm9udFZh
cmlhbnROdW1lcmljT3JkaW5hbCA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OwotZW51bSBjbGFzcyBG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyA6IGJvb2wgeyBOb3JtYWwsIFllcyB9OwotZW51
bSBjbGFzcyBGb250VmFyaWFudEFsdGVybmF0ZXMgOiBib29sIHsgTm9ybWFsLCBIaXN0b3JpY2Fs
Rm9ybXMgfTsKLQotZW51bSBjbGFzcyBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgOiB1aW50
OF90IHsKLSAgICBOb3JtYWwsCi0gICAgSmlzNzgsCi0gICAgSmlzODMsCi0gICAgSmlzOTAsCi0g
ICAgSmlzMDQsCi0gICAgU2ltcGxpZmllZCwKLSAgICBUcmFkaXRpb25hbAotfTsKLQotZW51bSBj
bGFzcyBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIDogdWludDhfdCB7Ci0gICAgTm9ybWFsLAot
ICAgIEZ1bGwsCi0gICAgUHJvcG9ydGlvbmFsCi19OwotCi1lbnVtIGNsYXNzIEZvbnRWYXJpYW50
RWFzdEFzaWFuUnVieSA6IHVpbnQ4X3QgewotICAgIE5vcm1hbCwKLSAgICBZZXMKLX07Ci0KLXN0
cnVjdCBGb250VmFyaWFudFNldHRpbmdzIHsKLSAgICBGb250VmFyaWFudFNldHRpbmdzKCkKLSAg
ICAgICAgOiBjb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCkKLSAg
ICAgICAgLCBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3Jt
YWwpCi0gICAgICAgICwgaGlzdG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6
Tm9ybWFsKQotICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKEZvbnRWYXJpYW50TGlnYXR1
cmVzOjpOb3JtYWwpCi0gICAgICAgICwgcG9zaXRpb24oRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9y
bWFsKQotICAgICAgICAsIGNhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpCi0gICAgICAgICwg
bnVtZXJpY0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbCkKLSAgICAgICAg
LCBudW1lcmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwpCi0gICAg
ICAgICwgbnVtZXJpY0ZyYWN0aW9uKEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwp
Ci0gICAgICAgICwgbnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9y
bWFsKQotICAgICAgICAsIG51bWVyaWNTbGFzaGVkWmVybyhGb250VmFyaWFudE51bWVyaWNTbGFz
aGVkWmVybzo6Tm9ybWFsKQotICAgICAgICAsIGFsdGVybmF0ZXMoRm9udFZhcmlhbnRBbHRlcm5h
dGVzOjpOb3JtYWwpCi0gICAgICAgICwgZWFzdEFzaWFuVmFyaWFudChGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6Ok5vcm1hbCkKLSAgICAgICAgLCBlYXN0QXNpYW5XaWR0aChGb250VmFyaWFu
dEVhc3RBc2lhbldpZHRoOjpOb3JtYWwpCi0gICAgICAgICwgZWFzdEFzaWFuUnVieShGb250VmFy
aWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCkKLSAgICB7Ci0gICAgfQotCi0gICAgRm9udFZhcmlh
bnRTZXR0aW5ncygKLSAgICAgICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGlnYXR1cmVz
LAotICAgICAgICBGb250VmFyaWFudExpZ2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLAot
ICAgICAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzLAotICAgICAg
ICBGb250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlcywKLSAgICAgICAgRm9u
dFZhcmlhbnRQb3NpdGlvbiBwb3NpdGlvbiwKLSAgICAgICAgRm9udFZhcmlhbnRDYXBzIGNhcHMs
Ci0gICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBudW1lcmljRmlndXJlLAotICAgICAg
ICBGb250VmFyaWFudE51bWVyaWNTcGFjaW5nIG51bWVyaWNTcGFjaW5nLAotICAgICAgICBGb250
VmFyaWFudE51bWVyaWNGcmFjdGlvbiBudW1lcmljRnJhY3Rpb24sCi0gICAgICAgIEZvbnRWYXJp
YW50TnVtZXJpY09yZGluYWwgbnVtZXJpY09yZGluYWwsCi0gICAgICAgIEZvbnRWYXJpYW50TnVt
ZXJpY1NsYXNoZWRaZXJvIG51bWVyaWNTbGFzaGVkWmVybywKLSAgICAgICAgRm9udFZhcmlhbnRB
bHRlcm5hdGVzIGFsdGVybmF0ZXMsCi0gICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dCBlYXN0QXNpYW5WYXJpYW50LAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoIGVh
c3RBc2lhbldpZHRoLAotICAgICAgICBGb250VmFyaWFudEVhc3RBc2lhblJ1YnkgZWFzdEFzaWFu
UnVieSkKLSAgICAgICAgICAgIDogY29tbW9uTGlnYXR1cmVzKGNvbW1vbkxpZ2F0dXJlcykKLSAg
ICAgICAgICAgICwgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KQotICAgICAgICAgICAgLCBoaXN0b3JpY2FsTGlnYXR1cmVzKGhpc3RvcmljYWxMaWdhdHVyZXMp
Ci0gICAgICAgICAgICAsIGNvbnRleHR1YWxBbHRlcm5hdGVzKGNvbnRleHR1YWxBbHRlcm5hdGVz
KQotICAgICAgICAgICAgLCBwb3NpdGlvbihwb3NpdGlvbikKLSAgICAgICAgICAgICwgY2Fwcyhj
YXBzKQotICAgICAgICAgICAgLCBudW1lcmljRmlndXJlKG51bWVyaWNGaWd1cmUpCi0gICAgICAg
ICAgICAsIG51bWVyaWNTcGFjaW5nKG51bWVyaWNTcGFjaW5nKQotICAgICAgICAgICAgLCBudW1l
cmljRnJhY3Rpb24obnVtZXJpY0ZyYWN0aW9uKQotICAgICAgICAgICAgLCBudW1lcmljT3JkaW5h
bChudW1lcmljT3JkaW5hbCkKLSAgICAgICAgICAgICwgbnVtZXJpY1NsYXNoZWRaZXJvKG51bWVy
aWNTbGFzaGVkWmVybykKLSAgICAgICAgICAgICwgYWx0ZXJuYXRlcyhhbHRlcm5hdGVzKQotICAg
ICAgICAgICAgLCBlYXN0QXNpYW5WYXJpYW50KGVhc3RBc2lhblZhcmlhbnQpCi0gICAgICAgICAg
ICAsIGVhc3RBc2lhbldpZHRoKGVhc3RBc2lhbldpZHRoKQotICAgICAgICAgICAgLCBlYXN0QXNp
YW5SdWJ5KGVhc3RBc2lhblJ1YnkpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXNBbGxOb3Jt
YWwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBkaXNjcmV0aW9uYXJ5TGln
YXR1cmVzID09IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwKLSAgICAgICAgICAgICYmIGhp
c3RvcmljYWxMaWdhdHVyZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbAotICAgICAg
ICAgICAgJiYgY29udGV4dHVhbEFsdGVybmF0ZXMgPT0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbAotICAgICAgICAgICAgJiYgcG9zaXRpb24gPT0gRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9y
bWFsCi0gICAgICAgICAgICAmJiBjYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsCi0gICAg
ICAgICAgICAmJiBudW1lcmljRmlndXJlID09IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9y
bWFsCi0gICAgICAgICAgICAmJiBudW1lcmljU3BhY2luZyA9PSBGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nOjpOb3JtYWwKLSAgICAgICAgICAgICYmIG51bWVyaWNGcmFjdGlvbiA9PSBGb250VmFy
aWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBudW1lcmljT3JkaW5h
bCA9PSBGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwKLSAgICAgICAgICAgICYmIG51
bWVyaWNTbGFzaGVkWmVybyA9PSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFs
Ci0gICAgICAgICAgICAmJiBhbHRlcm5hdGVzID09IEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9y
bWFsCi0gICAgICAgICAgICAmJiBlYXN0QXNpYW5WYXJpYW50ID09IEZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6Tm9ybWFsCi0gICAgICAgICAgICAmJiBlYXN0QXNpYW5XaWR0aCA9PSBGb250
VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWwKLSAgICAgICAgICAgICYmIGVhc3RBc2lhblJ1
YnkgPT0gRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw7Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbW1vbkxpZ2F0dXJlcyA9PSBvdGhlci5jb21tb25MaWdhdHVy
ZXMKLSAgICAgICAgICAgICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMgPT0gb3RoZXIuZGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlcwotICAgICAgICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlcyA9PSBv
dGhlci5oaXN0b3JpY2FsTGlnYXR1cmVzCi0gICAgICAgICAgICAmJiBjb250ZXh0dWFsQWx0ZXJu
YXRlcyA9PSBvdGhlci5jb250ZXh0dWFsQWx0ZXJuYXRlcwotICAgICAgICAgICAgJiYgcG9zaXRp
b24gPT0gb3RoZXIucG9zaXRpb24KLSAgICAgICAgICAgICYmIGNhcHMgPT0gb3RoZXIuY2Fwcwot
ICAgICAgICAgICAgJiYgbnVtZXJpY0ZpZ3VyZSA9PSBvdGhlci5udW1lcmljRmlndXJlCi0gICAg
ICAgICAgICAmJiBudW1lcmljU3BhY2luZyA9PSBvdGhlci5udW1lcmljU3BhY2luZwotICAgICAg
ICAgICAgJiYgbnVtZXJpY0ZyYWN0aW9uID09IG90aGVyLm51bWVyaWNGcmFjdGlvbgotICAgICAg
ICAgICAgJiYgbnVtZXJpY09yZGluYWwgPT0gb3RoZXIubnVtZXJpY09yZGluYWwKLSAgICAgICAg
ICAgICYmIG51bWVyaWNTbGFzaGVkWmVybyA9PSBvdGhlci5udW1lcmljU2xhc2hlZFplcm8KLSAg
ICAgICAgICAgICYmIGFsdGVybmF0ZXMgPT0gb3RoZXIuYWx0ZXJuYXRlcwotICAgICAgICAgICAg
JiYgZWFzdEFzaWFuVmFyaWFudCA9PSBvdGhlci5lYXN0QXNpYW5WYXJpYW50Ci0gICAgICAgICAg
ICAmJiBlYXN0QXNpYW5XaWR0aCA9PSBvdGhlci5lYXN0QXNpYW5XaWR0aAotICAgICAgICAgICAg
JiYgZWFzdEFzaWFuUnVieSA9PSBvdGhlci5lYXN0QXNpYW5SdWJ5OwotICAgIH0KLQotICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgIHVuc2lnbmVkIHVuaXF1ZVZhbHVlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29tbW9u
TGlnYXR1cmVzKSA8PCAyNgotICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlcykgPDwgMjQKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhpc3RvcmljYWxMaWdhdHVyZXMpIDw8IDIyCi0gICAgICAgICAgICB8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjb250ZXh0dWFsQWx0ZXJuYXRlcykgPDwgMjAKLSAgICAgICAgICAgIHwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKSA8PCAxOAotICAgICAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2FwcykgPDwgMTUKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG51bWVyaWNGaWd1cmUpIDw8IDEzCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihudW1lcmljU3BhY2luZykgPDwgMTEKLSAgICAgICAgICAgIHwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG51bWVyaWNGcmFjdGlvbikgPDwgOQotICAgICAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obnVtZXJpY09yZGluYWwpIDw8IDgKLSAgICAgICAgICAgIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG51bWVyaWNTbGFzaGVkWmVybykgPDwgNwotICAgICAgICAgICAgfCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYWx0ZXJuYXRlcykgPDwgNgotICAgICAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZWFzdEFzaWFuVmFyaWFudCkgPDwgMwotICAgICAgICAgICAgfCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZWFzdEFzaWFuV2lkdGgpIDw8IDEKLSAgICAgICAgICAgIHwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVhc3RBc2lhblJ1YnkpIDw8IDA7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50
U2V0dGluZ3M+IGRlY29kZShEZWNvZGVyJik7Ci0KLSAgICAvLyBGSVhNRTogdGhpcyB3b3VsZCBi
ZSBtdWNoIG1vcmUgY29tcGFjdCB3aXRoIGJpdGZpZWxkcy4KLSAgICBGb250VmFyaWFudExpZ2F0
dXJlcyBjb21tb25MaWdhdHVyZXM7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgZGlzY3JldGlv
bmFyeUxpZ2F0dXJlczsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1
cmVzOwotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbnRleHR1YWxBbHRlcm5hdGVzOwotICAg
IEZvbnRWYXJpYW50UG9zaXRpb24gcG9zaXRpb247Ci0gICAgRm9udFZhcmlhbnRDYXBzIGNhcHM7
Ci0gICAgRm9udFZhcmlhbnROdW1lcmljRmlndXJlIG51bWVyaWNGaWd1cmU7Ci0gICAgRm9udFZh
cmlhbnROdW1lcmljU3BhY2luZyBudW1lcmljU3BhY2luZzsKLSAgICBGb250VmFyaWFudE51bWVy
aWNGcmFjdGlvbiBudW1lcmljRnJhY3Rpb247Ci0gICAgRm9udFZhcmlhbnROdW1lcmljT3JkaW5h
bCBudW1lcmljT3JkaW5hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyBudW1l
cmljU2xhc2hlZFplcm87Ci0gICAgRm9udFZhcmlhbnRBbHRlcm5hdGVzIGFsdGVybmF0ZXM7Ci0g
ICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IGVhc3RBc2lhblZhcmlhbnQ7Ci0gICAgRm9u
dFZhcmlhbnRFYXN0QXNpYW5XaWR0aCBlYXN0QXNpYW5XaWR0aDsKLSAgICBGb250VmFyaWFudEVh
c3RBc2lhblJ1YnkgZWFzdEFzaWFuUnVieTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Ci12b2lkIEZvbnRWYXJpYW50U2V0dGluZ3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGVuY29kZXIgPDwgY29tbW9uTGlnYXR1cmVzOwotICAgIGVuY29kZXIgPDwgZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlczsKLSAgICBlbmNvZGVyIDw8IGhpc3RvcmljYWxMaWdhdHVyZXM7
Ci0gICAgZW5jb2RlciA8PCBjb250ZXh0dWFsQWx0ZXJuYXRlczsKLSAgICBlbmNvZGVyIDw8IHBv
c2l0aW9uOwotICAgIGVuY29kZXIgPDwgY2FwczsKLSAgICBlbmNvZGVyIDw8IG51bWVyaWNGaWd1
cmU7Ci0gICAgZW5jb2RlciA8PCBudW1lcmljU3BhY2luZzsKLSAgICBlbmNvZGVyIDw8IG51bWVy
aWNGcmFjdGlvbjsKLSAgICBlbmNvZGVyIDw8IG51bWVyaWNPcmRpbmFsOwotICAgIGVuY29kZXIg
PDwgbnVtZXJpY1NsYXNoZWRaZXJvOwotICAgIGVuY29kZXIgPDwgYWx0ZXJuYXRlczsKLSAgICBl
bmNvZGVyIDw8IGVhc3RBc2lhblZhcmlhbnQ7Ci0gICAgZW5jb2RlciA8PCBlYXN0QXNpYW5XaWR0
aDsKLSAgICBlbmNvZGVyIDw8IGVhc3RBc2lhblJ1Ynk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1zdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50U2V0dGluZ3M+IEZvbnRWYXJpYW50U2V0
dGluZ3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8Rm9u
dFZhcmlhbnRMaWdhdHVyZXM+IGNvbW1vbkxpZ2F0dXJlczsKLSAgICBkZWNvZGVyID4+IGNvbW1v
bkxpZ2F0dXJlczsKLSAgICBpZiAoIWNvbW1vbkxpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGRp
c2NyZXRpb25hcnlMaWdhdHVyZXM7Ci0gICAgZGVjb2RlciA+PiBkaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzOwotICAgIGlmICghZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGhp
c3RvcmljYWxMaWdhdHVyZXM7Ci0gICAgZGVjb2RlciA+PiBoaXN0b3JpY2FsTGlnYXR1cmVzOwot
ICAgIGlmICghaGlzdG9yaWNhbExpZ2F0dXJlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRMaWdhdHVyZXM+IGNvbnRleHR1YWxB
bHRlcm5hdGVzOwotICAgIGRlY29kZXIgPj4gY29udGV4dHVhbEFsdGVybmF0ZXM7Ci0gICAgaWYg
KCFjb250ZXh0dWFsQWx0ZXJuYXRlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRQb3NpdGlvbj4gcG9zaXRpb247Ci0gICAgZGVj
b2RlciA+PiBwb3NpdGlvbjsKLSAgICBpZiAoIXBvc2l0aW9uKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudENhcHM+IGNhcHM7Ci0g
ICAgZGVjb2RlciA+PiBjYXBzOwotICAgIGlmICghY2FwcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljRmlndXJlPiBu
dW1lcmljRmlndXJlOwotICAgIGRlY29kZXIgPj4gbnVtZXJpY0ZpZ3VyZTsKLSAgICBpZiAoIW51
bWVyaWNGaWd1cmUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc+IG51bWVyaWNTcGFjaW5nOwotICAgIGRl
Y29kZXIgPj4gbnVtZXJpY1NwYWNpbmc7Ci0gICAgaWYgKCFudW1lcmljU3BhY2luZykKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRO
dW1lcmljRnJhY3Rpb24+IG51bWVyaWNGcmFjdGlvbjsKLSAgICBkZWNvZGVyID4+IG51bWVyaWNG
cmFjdGlvbjsKLSAgICBpZiAoIW51bWVyaWNGcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbD4g
bnVtZXJpY09yZGluYWw7Ci0gICAgZGVjb2RlciA+PiBudW1lcmljT3JkaW5hbDsKLSAgICBpZiAo
IW51bWVyaWNPcmRpbmFsKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3Rk
OjpvcHRpb25hbDxGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybz4gbnVtZXJpY1NsYXNoZWRa
ZXJvOwotICAgIGRlY29kZXIgPj4gbnVtZXJpY1NsYXNoZWRaZXJvOwotICAgIGlmICghbnVtZXJp
Y1NsYXNoZWRaZXJvKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudEFsdGVybmF0ZXM+IGFsdGVybmF0ZXM7Ci0gICAgZGVjb2RlciA+
PiBhbHRlcm5hdGVzOwotICAgIGlmICghYWx0ZXJuYXRlcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50
PiBlYXN0QXNpYW5WYXJpYW50OwotICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuVmFyaWFudDsKLSAg
ICBpZiAoIWVhc3RBc2lhblZhcmlhbnQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg+IGVhc3RBc2lhbldp
ZHRoOwotICAgIGRlY29kZXIgPj4gZWFzdEFzaWFuV2lkdGg7Ci0gICAgaWYgKCFlYXN0QXNpYW5X
aWR0aCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5PiBlYXN0QXNpYW5SdWJ5OwotICAgIGRlY29kZXIgPj4g
ZWFzdEFzaWFuUnVieTsKLSAgICBpZiAoIWVhc3RBc2lhblJ1YnkpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sKLSAgICAgICAgKmNvbW1vbkxpZ2F0dXJlcywK
LSAgICAgICAgKmRpc2NyZXRpb25hcnlMaWdhdHVyZXMsCi0gICAgICAgICpoaXN0b3JpY2FsTGln
YXR1cmVzLAotICAgICAgICAqY29udGV4dHVhbEFsdGVybmF0ZXMsCi0gICAgICAgICpwb3NpdGlv
biwKLSAgICAgICAgKmNhcHMsCi0gICAgICAgICpudW1lcmljRmlndXJlLAotICAgICAgICAqbnVt
ZXJpY1NwYWNpbmcsCi0gICAgICAgICpudW1lcmljRnJhY3Rpb24sCi0gICAgICAgICpudW1lcmlj
T3JkaW5hbCwKLSAgICAgICAgKm51bWVyaWNTbGFzaGVkWmVybywKLSAgICAgICAgKmFsdGVybmF0
ZXMsCi0gICAgICAgICplYXN0QXNpYW5WYXJpYW50LAotICAgICAgICAqZWFzdEFzaWFuV2lkdGgs
Ci0gICAgICAgICplYXN0QXNpYW5SdWJ5Ci0gICAgfX07Ci19Ci0KLXN0cnVjdCBGb250VmFyaWFu
dExpZ2F0dXJlc1ZhbHVlcyB7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXNWYWx1ZXMoCi0gICAg
ICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGNvbW1vbkxpZ2F0dXJlcywKLSAgICAgICAgRm9udFZh
cmlhbnRMaWdhdHVyZXMgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcywKLSAgICAgICAgRm9udFZhcmlh
bnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlcywKLSAgICAgICAgRm9udFZhcmlhbnRMaWdh
dHVyZXMgY29udGV4dHVhbEFsdGVybmF0ZXMpCi0gICAgICAgICAgICA6IGNvbW1vbkxpZ2F0dXJl
cyhjb21tb25MaWdhdHVyZXMpCi0gICAgICAgICAgICAsIGRpc2NyZXRpb25hcnlMaWdhdHVyZXMo
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlcykKLSAgICAgICAgICAgICwgaGlzdG9yaWNhbExpZ2F0dXJl
cyhoaXN0b3JpY2FsTGlnYXR1cmVzKQotICAgICAgICAgICAgLCBjb250ZXh0dWFsQWx0ZXJuYXRl
cyhjb250ZXh0dWFsQWx0ZXJuYXRlcykKLSAgICB7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50TGlnYXR1cmVzVmFs
dWVzPiBkZWNvZGUoRGVjb2RlciYpOwotCi0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9u
TGlnYXR1cmVzOwotICAgIEZvbnRWYXJpYW50TGlnYXR1cmVzIGRpc2NyZXRpb25hcnlMaWdhdHVy
ZXM7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgaGlzdG9yaWNhbExpZ2F0dXJlczsKLSAgICBG
b250VmFyaWFudExpZ2F0dXJlcyBjb250ZXh0dWFsQWx0ZXJuYXRlczsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIEZvbnRWYXJpYW50TGlnYXR1cmVzVmFsdWVzOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IGNvbW1vbkxpZ2F0dXJl
czsKLSAgICBlbmNvZGVyIDw8IGRpc2NyZXRpb25hcnlMaWdhdHVyZXM7Ci0gICAgZW5jb2RlciA8
PCBoaXN0b3JpY2FsTGlnYXR1cmVzOwotICAgIGVuY29kZXIgPDwgY29udGV4dHVhbEFsdGVybmF0
ZXM7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPEZvbnRWYXJp
YW50TGlnYXR1cmVzVmFsdWVzPiBGb250VmFyaWFudExpZ2F0dXJlc1ZhbHVlczo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJl
cz4gY29tbW9uTGlnYXR1cmVzOwotICAgIGRlY29kZXIgPj4gY29tbW9uTGlnYXR1cmVzOwotICAg
IGlmICghY29tbW9uTGlnYXR1cmVzKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gZGlzY3JldGlvbmFyeUxpZ2F0
dXJlczsKLSAgICBkZWNvZGVyID4+IGRpc2NyZXRpb25hcnlMaWdhdHVyZXM7Ci0gICAgaWYgKCFk
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gaGlzdG9yaWNhbExpZ2F0dXJl
czsKLSAgICBkZWNvZGVyID4+IGhpc3RvcmljYWxMaWdhdHVyZXM7Ci0gICAgaWYgKCFoaXN0b3Jp
Y2FsTGlnYXR1cmVzKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudExpZ2F0dXJlcz4gY29udGV4dHVhbEFsdGVybmF0ZXM7Ci0gICAg
ZGVjb2RlciA+PiBjb250ZXh0dWFsQWx0ZXJuYXRlczsKLSAgICBpZiAoIWNvbnRleHR1YWxBbHRl
cm5hdGVzKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpj
b21tb25MaWdhdHVyZXMsICpkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzLCAqaGlzdG9yaWNhbExpZ2F0
dXJlcywgKmNvbnRleHR1YWxBbHRlcm5hdGVzIH19OwotfQotCi1zdHJ1Y3QgRm9udFZhcmlhbnRO
dW1lcmljVmFsdWVzIHsKLSAgICBGb250VmFyaWFudE51bWVyaWNWYWx1ZXMoCi0gICAgICAgIEZv
bnRWYXJpYW50TnVtZXJpY0ZpZ3VyZSBmaWd1cmUsCi0gICAgICAgIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmcgc3BhY2luZywKLSAgICAgICAgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb24gZnJh
Y3Rpb24sCi0gICAgICAgIEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWwgb3JkaW5hbCwKLSAgICAg
ICAgRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8gc2xhc2hlZFplcm8pCi0gICAgICAgICAg
ICA6IGZpZ3VyZShmaWd1cmUpCi0gICAgICAgICAgICAsIHNwYWNpbmcoc3BhY2luZykKLSAgICAg
ICAgICAgICwgZnJhY3Rpb24oZnJhY3Rpb24pCi0gICAgICAgICAgICAsIG9yZGluYWwob3JkaW5h
bCkKLSAgICAgICAgICAgICwgc2xhc2hlZFplcm8oc2xhc2hlZFplcm8pCi0gICAgewotICAgIH0K
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250
VmFyaWFudE51bWVyaWNWYWx1ZXM+IGRlY29kZShEZWNvZGVyJik7Ci0KLSAgICBGb250VmFyaWFu
dE51bWVyaWNGaWd1cmUgZmlndXJlOwotICAgIEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgc3Bh
Y2luZzsKLSAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiBmcmFjdGlvbjsKLSAgICBGb250
VmFyaWFudE51bWVyaWNPcmRpbmFsIG9yZGluYWw7Ci0gICAgRm9udFZhcmlhbnROdW1lcmljU2xh
c2hlZFplcm8gc2xhc2hlZFplcm87Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBGb250VmFyaWFudE51bWVyaWNWYWx1ZXM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGVuY29kZXIgPDwgZmlndXJlOwotICAgIGVuY29kZXIgPDwgc3BhY2luZzsKLSAg
ICBlbmNvZGVyIDw8IGZyYWN0aW9uOwotICAgIGVuY29kZXIgPDwgb3JkaW5hbDsKLSAgICBlbmNv
ZGVyIDw8IHNsYXNoZWRaZXJvOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpv
cHRpb25hbDxGb250VmFyaWFudE51bWVyaWNWYWx1ZXM+IEZvbnRWYXJpYW50TnVtZXJpY1ZhbHVl
czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxGb250VmFy
aWFudE51bWVyaWNGaWd1cmU+IGZpZ3VyZTsKLSAgICBkZWNvZGVyID4+IGZpZ3VyZTsKLSAgICBp
ZiAoIWZpZ3VyZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZz4gc3BhY2luZzsKLSAgICBkZWNvZGVyID4+
IHNwYWNpbmc7Ci0gICAgaWYgKCFzcGFjaW5nKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbj4gZnJhY3Rp
b247Ci0gICAgZGVjb2RlciA+PiBmcmFjdGlvbjsKLSAgICBpZiAoIWZyYWN0aW9uKQotICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGb250VmFyaWFudE51
bWVyaWNPcmRpbmFsPiBvcmRpbmFsOwotICAgIGRlY29kZXIgPj4gb3JkaW5hbDsKLSAgICBpZiAo
IW9yZGluYWwpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlv
bmFsPEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvPiBzbGFzaGVkWmVybzsKLSAgICBkZWNv
ZGVyID4+IHNsYXNoZWRaZXJvOwotICAgIGlmICghc2xhc2hlZFplcm8pCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKmZpZ3VyZSwgKnNwYWNpbmcsICpmcmFj
dGlvbiwgKm9yZGluYWwsICpzbGFzaGVkWmVybyB9fTsKLX0KLQotc3RydWN0IEZvbnRWYXJpYW50
RWFzdEFzaWFuVmFsdWVzIHsKLSAgICBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcygKLSAgICAg
ICAgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50IHZhcmlhbnQsCi0gICAgICAgIEZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGggd2lkdGgsCi0gICAgICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuUnVi
eSBydWJ5KQotICAgICAgICAgICAgOiB2YXJpYW50KHZhcmlhbnQpCi0gICAgICAgICAgICAsIHdp
ZHRoKHdpZHRoKQotICAgICAgICAgICAgLCBydWJ5KHJ1YnkpCi0gICAgewotICAgIH0KLQotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGb250VmFyaWFu
dEVhc3RBc2lhblZhbHVlcz4gZGVjb2RlKERlY29kZXImKTsKLQotICAgIEZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudCB2YXJpYW50OwotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggd2lk
dGg7Ci0gICAgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5IHJ1Ynk7Ci19OwotCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBGb250VmFyaWFudEVhc3RBc2lhblZhbHVlczo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCB2YXJpYW50OwotICAgIGVu
Y29kZXIgPDwgd2lkdGg7Ci0gICAgZW5jb2RlciA8PCBydWJ5OwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxGb250VmFyaWFudEVhc3RBc2lhblZhbHVlcz4gRm9u
dFZhcmlhbnRFYXN0QXNpYW5WYWx1ZXM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50PiB2YXJpYW50OwotICAg
IGRlY29kZXIgPj4gdmFyaWFudDsKLSAgICBpZiAoIXZhcmlhbnQpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZvbnRWYXJpYW50RWFzdEFzaWFuV2lk
dGg+IHdpZHRoOwotICAgIGRlY29kZXIgPj4gd2lkdGg7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rm9udFZhcmlhbnRF
YXN0QXNpYW5SdWJ5PiBydWJ5OwotICAgIGRlY29kZXIgPj4gcnVieTsKLSAgICBpZiAoIXJ1Ynkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnZhcmlhbnQs
ICp3aWR0aCwgKnJ1YnkgfX07Ci19Ci0KLWVudW0gY2xhc3MgRm9udFdpZHRoVmFyaWFudCA6IHVp
bnQ4X3QgewotICAgIFJlZ3VsYXJXaWR0aCwKLSAgICBIYWxmV2lkdGgsCi0gICAgVGhpcmRXaWR0
aCwKLSAgICBRdWFydGVyV2lkdGgsCi0gICAgTGFzdEZvbnRXaWR0aFZhcmlhbnQgPSBRdWFydGVy
V2lkdGgKLX07Ci0KLWNvbnN0IHVuc2lnbmVkIEZvbnRXaWR0aFZhcmlhbnRXaWR0aCA9IDI7Ci0K
LUNPTVBJTEVfQVNTRVJUKCEoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRXaWR0aFZhcmlhbnQ6
Okxhc3RGb250V2lkdGhWYXJpYW50KSA+PiBGb250V2lkdGhWYXJpYW50V2lkdGgpLCBGb250V2lk
dGhWYXJpYW50V2lkdGhfaXNfY29ycmVjdCk7Ci0KLWVudW0gY2xhc3MgRm9udFNtYWxsQ2FwcyA6
IHVpbnQ4X3QgewotICAgIE9mZiA9IDAsCi0gICAgT24gPSAxCi19OwotCi1lbnVtIGNsYXNzIEtl
cm5pbmcgOiB1aW50OF90IHsKLSAgICBBdXRvLAotICAgIE5vcm1hbCwKLSAgICBOb1NoaWZ0Ci19
OwotCi1lbnVtIGNsYXNzIEZvbnRPcHRpY2FsU2l6aW5nIDogdWludDhfdCB7Ci0gICAgRW5hYmxl
ZCwKLSAgICBEaXNhYmxlZAotfTsKLQotLy8gaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBv
Z3JhcGh5L290c3BlYy9mdmFyLmh0bSNWQVQKLWVudW0gY2xhc3MgRm9udFN0eWxlQXhpcyA6IHVp
bnQ4X3QgewotICAgIHNsbnQsCi0gICAgaXRhbAotfTsKLQotZW51bSBjbGFzcyBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cyA6IHVpbnQ4X3QgewotICAgIE5vLAotICAgIFllcwotfTsKLQotfQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpU
ZXh0UmVuZGVyaW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAg
V2ViQ29yZTo6VGV4dFJlbmRlcmluZ01vZGUsCi0gICAgV2ViQ29yZTo6VGV4dFJlbmRlcmluZ01v
ZGU6OkF1dG9UZXh0UmVuZGVyaW5nLAotICAgIFdlYkNvcmU6OlRleHRSZW5kZXJpbmdNb2RlOjpP
cHRpbWl6ZVNwZWVkLAotICAgIFdlYkNvcmU6OlRleHRSZW5kZXJpbmdNb2RlOjpPcHRpbWl6ZUxl
Z2liaWxpdHksCi0gICAgV2ViQ29yZTo6VGV4dFJlbmRlcmluZ01vZGU6Okdlb21ldHJpY1ByZWNp
c2lvbgotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6
OkZvbnRTbW9vdGhpbmdNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAg
ICBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSwKLSAgICBXZWJDb3JlOjpGb250U21vb3RoaW5n
TW9kZTo6QXV0b1Ntb290aGluZywKLSAgICBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmcsCi0gICAgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkLAot
ICAgIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkLAotICAg
IFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nCi0gICAgPjsKLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udE9yaWVudGF0aW9uPiB7
Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250T3JpZW50
YXRpb24sCi0gICAgV2ViQ29yZTo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLAotICAgIFdl
YkNvcmU6OkZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpOb25DSktHbHlwaE9yaWVudGF0aW9uPiB7Ci0g
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpOb25DSktHbHlwaE9y
aWVudGF0aW9uLAotICAgIFdlYkNvcmU6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkLAot
ICAgIFdlYkNvcmU6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQKLSAgICA+OwotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudExpZ2F0
dXJlcz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9u
dFZhcmlhbnRMaWdhdHVyZXMsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudExpZ2F0dXJlczo6WWVzLAotICAgIFdlYkNv
cmU6OkZvbnRWYXJpYW50TGlnYXR1cmVzOjpObwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50UG9zaXRpb24+IHsKLSAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50UG9zaXRpb24s
Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9ybWFsLAotICAgIFdlYkNvcmU6
OkZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFu
dFBvc2l0aW9uOjpTdXBlcnNjcmlwdAotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50Q2Fwcz4gewotICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzLAotICAgIFdlYkNvcmU6
OkZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50Q2Fwczo6
U21hbGwsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCwKLSAgICBXZWJD
b3JlOjpGb250VmFyaWFudENhcHM6OlBldGl0ZSwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudENh
cHM6OkFsbFBldGl0ZSwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudENhcHM6OlVuaWNhc2UsCi0g
ICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nCi0gICAgPjsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJl
PiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpGb250VmFy
aWFudE51bWVyaWNGaWd1cmUsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJl
OjpOb3JtYWwsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpMaW5pbmdO
dW1iZXJzLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6T2xkU3R5bGVO
dW1iZXJzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljU3BhY2luZywKLSAgICBXZWJD
b3JlOjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3JtYWwsCi0gICAgV2ViQ29yZTo6Rm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6UHJvcG9ydGlvbmFsTnVtYmVycywKLSAgICBXZWJDb3Jl
OjpGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpUYWJ1bGFyTnVtYmVycwotICAgID47Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJp
Y0ZyYWN0aW9uPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3Jl
OjpGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51
bWVyaWNGcmFjdGlvbjo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY0Zy
YWN0aW9uOjpEaWFnb25hbEZyYWN0aW9ucywKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVy
aWNGcmFjdGlvbjo6U3RhY2tlZEZyYWN0aW9ucwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw+IHsKLSAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVt
ZXJpY09yZGluYWwsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9y
bWFsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllcwotICAgID47
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50
TnVtZXJpY1NsYXNoZWRaZXJvPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAg
ICBXZWJDb3JlOjpGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybywKLSAgICBXZWJDb3JlOjpG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZvbnRW
YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudEFsdGVybmF0ZXM+IHsKLSAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50QWx0ZXJu
YXRlcywKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEFsdGVybmF0ZXM6Ok5vcm1hbCwKLSAgICBX
ZWJDb3JlOjpGb250VmFyaWFudEFsdGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtcwotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudD4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2Vi
Q29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50LAotICAgIFdlYkNvcmU6OkZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudDo6SmlzNzgsCi0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5W
YXJpYW50OjpKaXM4MywKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6
OkppczkwLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQs
Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpTaW1wbGlmaWVkLAot
ICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9uYWwsCi0g
ICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwKLSAgICA+Owot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGb250VmFyaWFudEVh
c3RBc2lhbldpZHRoPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJD
b3JlOjpGb250VmFyaWFudEVhc3RBc2lhbldpZHRoLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50
RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCwKLSAgICBXZWJDb3JlOjpGb250VmFyaWFudEVhc3RBc2lh
bldpZHRoOjpGdWxsLAotICAgIFdlYkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlBy
b3BvcnRpb25hbAotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5LAotICAgIFdl
YkNvcmU6OkZvbnRWYXJpYW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsLAotICAgIFdlYkNvcmU6OkZv
bnRWYXJpYW50RWFzdEFzaWFuUnVieTo6WWVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9udFdpZHRoVmFyaWFudD4gewotICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6Rm9udFdpZHRoVmFyaWFudCwKLSAgICBX
ZWJDb3JlOjpGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsCi0gICAgV2ViQ29yZTo6Rm9u
dFdpZHRoVmFyaWFudDo6SGFsZldpZHRoLAotICAgIFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQ6
OlRoaXJkV2lkdGgsCi0gICAgV2ViQ29yZTo6Rm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRo
Ci0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rm9u
dFNtYWxsQ2Fwcz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29y
ZTo6Rm9udFNtYWxsQ2FwcywKLSAgICBXZWJDb3JlOjpGb250U21hbGxDYXBzOjpPZmYsCi0gICAg
V2ViQ29yZTo6Rm9udFNtYWxsQ2Fwczo6T24KLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpLZXJuaW5nPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKLSAgICBXZWJDb3JlOjpLZXJuaW5nLAotICAgIFdlYkNvcmU6Oktlcm5pbmc6OkF1
dG8sCi0gICAgV2ViQ29yZTo6S2VybmluZzo6Tm9ybWFsLAotICAgIFdlYkNvcmU6Oktlcm5pbmc6
Ok5vU2hpZnQKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpGb250T3B0aWNhbFNpemluZz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgV2ViQ29yZTo6Rm9udE9wdGljYWxTaXppbmcsCi0gICAgV2ViQ29yZTo6Rm9udE9wdGlj
YWxTaXppbmc6OkVuYWJsZWQsCi0gICAgV2ViQ29yZTo6Rm9udE9wdGljYWxTaXppbmc6OkRpc2Fi
bGVkCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
Rm9udFN0eWxlQXhpcz4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2Vi
Q29yZTo6Rm9udFN0eWxlQXhpcywKLSAgICBXZWJDb3JlOjpGb250U3R5bGVBeGlzOjpzbG50LAot
ICAgIFdlYkNvcmU6OkZvbnRTdHlsZUF4aXM6Oml0YWwKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbGxvd1VzZXJJbnN0YWxsZWRGb250cz4gewot
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6QWxsb3dVc2VySW5z
dGFsbGVkRm9udHMsCi0gICAgV2ViQ29yZTo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vLAot
ICAgIFdlYkNvcmU6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMKLSAgICA+OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1VuaWNvZGVCaWRpLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVC
aWRpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNDljZmVmZTY2YzRjY2YzNzIz
YTAyMzU5ZDQ1NzA1NzAwMWUyNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5pY29kZUJpZGlfaAotI2RlZmluZSBVbmlj
b2RlQmlkaV9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBFVW5pY29kZUJpZGkgewot
ICAgIFVCTm9ybWFsLAotICAgIEVtYmVkLAotICAgIE92ZXJyaWRlLAotICAgIElzb2xhdGUsCi0g
ICAgUGxhaW50ZXh0LAotICAgIElzb2xhdGVPdmVycmlkZSwKLX07IAotCi1pbmxpbmUgYm9vbCBp
c0lzb2xhdGVkKGNvbnN0IEVVbmljb2RlQmlkaSYgdW5pY29kZUJpZGkpCi17Ci0gICAgcmV0dXJu
IHVuaWNvZGVCaWRpID09IElzb2xhdGUgfHwgdW5pY29kZUJpZGkgPT0gSXNvbGF0ZU92ZXJyaWRl
IHx8IHVuaWNvZGVCaWRpID09IFBsYWludGV4dDsKLX0KLQotaW5saW5lIGJvb2wgaXNPdmVycmlk
ZShFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkpCi17Ci0gICAgcmV0dXJuIHVuaWNvZGVCaWRpID09
IE92ZXJyaWRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlkZTsKLX0KLQotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvV3JpdGluZ01v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIwN2EzNzQ4NDYxZmQ5ZjE5NmY4YzM3OTJmNDg5NTk1
NTgwYjJmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwyMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSwgQXBwbGUgSW5jLiBB
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
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5o
IgotI2luY2x1ZGUgPGFycmF5PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gY2xhc3Mg
V3JpdGluZ01vZGUgOiB1aW50OF90IHsKLSAgICBUb3BUb0JvdHRvbSA9IDAsIC8vIGhvcml6b250
YWwtdGIKLSAgICBCb3R0b21Ub1RvcCA9IDEsIC8vIGhvcml6b250YWwtYnQKLSAgICBMZWZ0VG9S
aWdodCA9IDIsIC8vIHZlcnRpY2FsLWxyCi0gICAgUmlnaHRUb0xlZnQgPSAzLCAvLyB2ZXJ0aWNh
bC1ybAotfTsKLQotY29uc3RleHByIHVuc2lnbmVkIG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od3JpdGluZ01vZGUpIDw8IDEgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsKLX0KLQotLy8gRGVmaW5lIHRoZSB0ZXh0IGZsb3cgaW4g
dGVybXMgb2YgdGhlIHdyaXRpbmcgbW9kZSBhbmQgdGhlIHRleHQgZGlyZWN0aW9uLiBUaGUgZmly
c3QKLS8vIHBhcnQgaXMgdGhlIGxpbmUgZ3Jvd2luZyBkaXJlY3Rpb24gYW5kIHRoZSBzZWNvbmQg
cGFydCBpcyB0aGUgYmxvY2sgZ3Jvd2luZyBkaXJlY3Rpb24uCi1lbnVtIFRleHRGbG93IHsKLSAg
ICBJbmxpbmVFYXN0QmxvY2tTb3V0aCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tLCBUZXh0RGlyZWN0aW9uOjpMVFIpLAotICAgIElubGluZVdlc3RCbG9j
a1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20s
IFRleHREaXJlY3Rpb246OlJUTCksCi0gICAgSW5saW5lRWFzdEJsb2NrTm9ydGggPSBtYWtlVGV4
dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCwgVGV4dERpcmVjdGlvbjo6
TFRSKSwKLSAgICBJbmxpbmVXZXN0QmxvY2tOb3J0aCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIo
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wLCBUZXh0RGlyZWN0aW9uOjpSVEwpLAotICAgIElubGlu
ZVNvdXRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6TGVm
dFRvUmlnaHQsIFRleHREaXJlY3Rpb246OkxUUiksCi0gICAgSW5saW5lU291dGhCbG9ja1dlc3Qg
PSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCwgVGV4dERp
cmVjdGlvbjo6UlRMKSwKLSAgICBJbmxpbmVOb3J0aEJsb2NrRWFzdCA9IG1ha2VUZXh0Rmxvd0lu
aXRhbGl6ZXIoV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0LCBUZXh0RGlyZWN0aW9uOjpMVFIpLAot
ICAgIElubGluZU5vcnRoQmxvY2tXZXN0ID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5n
TW9kZTo6UmlnaHRUb0xlZnQsIFRleHREaXJlY3Rpb246OlJUTCkKLX07Ci0KLWNvbnN0ZXhwciBp
bmxpbmUgVGV4dEZsb3cgbWFrZVRleHRGbG93KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dEZsb3c+
KG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIod3JpdGluZ01vZGUsIGRpcmVjdGlvbikpOwotfQotCi1j
b25zdGV4cHIgdW5zaWduZWQgVGV4dEZsb3dSZXZlcnNlZE1hc2sgPSAxOwotY29uc3RleHByIHVu
c2lnbmVkIFRleHRGbG93RmxpcHBlZE1hc2sgPSAyOwotY29uc3RleHByIHVuc2lnbmVkIFRleHRG
bG93VmVydGljYWxNYXNrID0gNDsKLQotY29uc3RleHByIGlubGluZSBib29sIGlzUmV2ZXJzZWRU
ZXh0RmxvdyhUZXh0RmxvdyB0ZXh0ZmxvdykKLXsKLSAgICByZXR1cm4gdGV4dGZsb3cgJiBUZXh0
Rmxvd1JldmVyc2VkTWFzazsKLX0KLQotY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBlZFRl
eHRGbG93KFRleHRGbG93IHRleHRmbG93KQotewotICAgIHJldHVybiB0ZXh0ZmxvdyAmIFRleHRG
bG93RmxpcHBlZE1hc2s7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsVGV4
dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCi17Ci0gICAgcmV0dXJuIHRleHRmbG93ICYgVGV4dEZs
b3dWZXJ0aWNhbE1hc2s7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0ZsaXBwZWRMaW5l
c1RleHRGbG93KFRleHRGbG93IHRleHRmbG93KQotewotICAgIHJldHVybiBpc0ZsaXBwZWRUZXh0
Rmxvdyh0ZXh0ZmxvdykgIT0gaXNWZXJ0aWNhbFRleHRGbG93KHRleHRmbG93KTsKLX0KLQotLy8g
TGluZXMgaGF2ZSB2ZXJ0aWNhbCBvcmllbnRhdGlvbjsgbW9kZXMgdmVydGljYWwtbHIgb3IgdmVy
dGljYWwtcmwuCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIHJldHVybiBpc1ZlcnRpY2FsVGV4dEZsb3co
bWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKLX0KLQotLy8g
QmxvY2sgcHJvZ3Jlc3Npb24gaW5jcmVhc2VzIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8g
bm9ybWFsOyBtb2RlcyB2ZXJ0aWNhbC1ybCBvciBob3Jpem9udGFsLWJ0LgotY29uc3RleHByIGlu
bGluZSBib29sIGlzRmxpcHBlZFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQot
ewotICAgIHJldHVybiBpc0ZsaXBwZWRUZXh0RmxvdyhtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb246OkxUUikpOwotfQotCi0vLyBMaW5lcyBoYXZlIGhvcml6b250YWwgb3Jp
ZW50YXRpb247IG1vZGVzIGhvcml6b250YWwtdGIgb3IgaG9yaXpvbnRhbC1idC4KLWNvbnN0ZXhw
ciBpbmxpbmUgYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKLXsKLSAgICByZXR1cm4gIWlzVmVydGljYWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7
Ci19Ci0KLS8vIEJvdHRvbSBvZiB0aGUgbGluZSBvY2N1cnMgZWFybGllciBpbiB0aGUgYmxvY2s7
IG1vZGVzIHZlcnRpY2FsLWxyIG9yIGhvcml6b250YWwtYnQuCi1jb25zdGV4cHIgaW5saW5lIGJv
b2wgaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsK
LSAgICByZXR1cm4gaXNGbGlwcGVkTGluZXNUZXh0RmxvdyhtYWtlVGV4dEZsb3cod3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb246OkxUUikpOwotfQotCi1lbnVtIGNsYXNzIExvZ2ljYWxCb3hTaWRl
IDogdWludDhfdCB7Ci0gICAgQmxvY2tTdGFydCwKLSAgICBJbmxpbmVFbmQsCi0gICAgQmxvY2tF
bmQsCi0gICAgSW5saW5lU3RhcnQKLX07Ci0KLWVudW0gY2xhc3MgQm94U2lkZSA6IHVpbnQ4X3Qg
ewotICAgIFRvcCwKLSAgICBSaWdodCwKLSAgICBCb3R0b20sCi0gICAgTGVmdAotfTsKLQotZW51
bSBjbGFzcyBMb2dpY2FsQm94Q29ybmVyIDogdWludDhfdCB7Ci0gICAgU3RhcnRTdGFydCwKLSAg
ICBTdGFydEVuZCwKLSAgICBFbmRTdGFydCwKLSAgICBFbmRFbmQKLX07Ci0KLS8vIFRoZSBtYXBw
aW5nIGlzIHdpdGggdGhlIGZpcnN0IHN0YXJ0L2VuZCBnaXZpbmcgdGhlIGJsb2NrIGF4aXMgc2lk
ZSwKLS8vIGFuZCB0aGUgc2Vjb25kIHRoZSBpbmxpbmUtYXhpcyBzaWRlLCBpLmUuIHBhdHRlcm5l
ZCBhcyAnYm9yZGVyLWJsb2NrLWlubGluZS1yYWRpdXMnLgotZW51bSBjbGFzcyBCb3hDb3JuZXIg
OiB1aW50OF90IHsKLSAgICBUb3BMZWZ0LAotICAgIFRvcFJpZ2h0LAotICAgIEJvdHRvbVJpZ2h0
LAotICAgIEJvdHRvbUxlZnQKLX07Ci0KLWVudW0gY2xhc3MgTG9naWNhbEJveEF4aXMgOiB1aW50
OF90IHsKLSAgICBJbmxpbmUsCi0gICAgQmxvY2sKLX07Ci0KLWVudW0gY2xhc3MgQm94QXhpcyA6
IHVpbnQ4X3QgewotICAgIEhvcml6b250YWwsCi0gICAgVmVydGljYWwKLX07Ci0KLWNvbnN0ZXhw
ciBzdGQ6OmFycmF5PEJveFNpZGUsIDQ+IGFsbEJveFNpZGVzID0geyBCb3hTaWRlOjpUb3AsIEJv
eFNpZGU6OlJpZ2h0LCBCb3hTaWRlOjpCb3R0b20sIEJveFNpZGU6OkxlZnQgfTsKLQotY29uc3Rl
eHByIGlubGluZSBib29sIGlzSG9yaXpvbnRhbFBoeXNpY2FsU2lkZShCb3hTaWRlIHBoeXNpY2Fs
U2lkZSkKLXsKLSAgICByZXR1cm4gcGh5c2ljYWxTaWRlID09IEJveFNpZGU6OkxlZnQgfHwgcGh5
c2ljYWxTaWRlID09IEJveFNpZGU6OlJpZ2h0OwotfQotCi1jb25zdGV4cHIgaW5saW5lIEJveFNp
ZGUgbWlycm9yUGh5c2ljYWxTaWRlKEJveFNpZGUgcGh5c2ljYWxTaWRlKQotewotICAgIC8vIHRv
cCA8LT4gYm90dG9tIGFuZCBsZWZ0IDwtPiByaWdodCBjb252ZXJzaW9uCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEJveFNpZGU+KChzdGF0aWNfY2FzdDxpbnQ+KHBoeXNpY2FsU2lkZSkgKyAyKSAl
IDQpOwotfQotCi1jb25zdGV4cHIgaW5saW5lIEJveFNpZGUgcm90YXRlUGh5c2ljYWxTaWRlKEJv
eFNpZGUgcGh5c2ljYWxTaWRlKQotewotICAgIC8vIHRvcCA8LT4gbGVmdCBhbmQgcmlnaHQgPC0+
IGJvdHRvbSBjb252ZXJzaW9uCi0gICAgYm9vbCBob3Jpem9udGFsU2lkZSA9IGlzSG9yaXpvbnRh
bFBoeXNpY2FsU2lkZShwaHlzaWNhbFNpZGUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxCb3hT
aWRlPigoc3RhdGljX2Nhc3Q8aW50PihwaHlzaWNhbFNpZGUpICsgKGhvcml6b250YWxTaWRlID8g
MSA6IDMpKSAlIDQpOwotfQotCi1jb25zdGV4cHIgaW5saW5lIEJveFNpZGUgbWFwTG9naWNhbFNp
ZGVUb1BoeXNpY2FsU2lkZShUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveFNpZGUgbG9naWNh
bFNpZGUpCi17Ci0gICAgQm94U2lkZSBwaHlzaWNhbFNpZGUgPSBzdGF0aWNfY2FzdDxCb3hTaWRl
Pihsb2dpY2FsU2lkZSk7Ci0gICAgYm9vbCBob3Jpem9udGFsU2lkZSA9IGlzSG9yaXpvbnRhbFBo
eXNpY2FsU2lkZShwaHlzaWNhbFNpZGUpOwotCi0gICAgaWYgKGlzVmVydGljYWxUZXh0Rmxvdyh0
ZXh0ZmxvdykpCi0gICAgICAgIHBoeXNpY2FsU2lkZSA9IHJvdGF0ZVBoeXNpY2FsU2lkZShwaHlz
aWNhbFNpZGUpOwotCi0gICAgaWYgKChob3Jpem9udGFsU2lkZSAmJiBpc1JldmVyc2VkVGV4dEZs
b3codGV4dGZsb3cpKSB8fCAoIWhvcml6b250YWxTaWRlICYmIGlzRmxpcHBlZFRleHRGbG93KHRl
eHRmbG93KSkpCi0gICAgICAgIHBoeXNpY2FsU2lkZSA9IG1pcnJvclBoeXNpY2FsU2lkZShwaHlz
aWNhbFNpZGUpOwotCi0gICAgcmV0dXJuIHBoeXNpY2FsU2lkZTsKLX0KLQotY29uc3RleHByIGlu
bGluZSBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKQotewotICAgIC8vIFNldCB0aGUg
ZGlyZWN0aW9uIHN1Y2ggdGhhdCBzaWRlIGlzIG1pcnJvcmVkIGlmIGlzRmxpcHBlZFdyaXRpbmdN
b2RlKCkgaXMgdHJ1ZQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gaXNGbGlwcGVkV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlv
bjo6TFRSOwotICAgIHJldHVybiBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0
Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgbG9naWNhbFNpZGUpOwotfQotCi1jb25zdGV4
cHIgaW5saW5lIEJveENvcm5lciBtYXBMb2dpY2FsQ29ybmVyVG9QaHlzaWNhbENvcm5lcihUZXh0
RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveENvcm5lciBsb2dpY2FsQm94Q29ybmVyKQotewotICAg
IGJvb2wgaXNCbG9ja1N0YXJ0ID0gbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94Q29ybmVy
OjpTdGFydFN0YXJ0IHx8IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJveENvcm5lcjo6U3Rh
cnRFbmQ7Ci0gICAgYm9vbCBpc0lubGluZVN0YXJ0ID0gbG9naWNhbEJveENvcm5lciA9PSBMb2dp
Y2FsQm94Q29ybmVyOjpTdGFydFN0YXJ0IHx8IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJv
eENvcm5lcjo6RW5kU3RhcnQ7Ci0gICAgaWYgKGlzQmxvY2tTdGFydCA9PSBpc0ZsaXBwZWRUZXh0
Rmxvdyh0ZXh0ZmxvdykpIHsKLSAgICAgICAgaWYgKGlzSW5saW5lU3RhcnQgPT0gaXNSZXZlcnNl
ZFRleHRGbG93KHRleHRmbG93KSkKLSAgICAgICAgICAgIHJldHVybiBCb3hDb3JuZXI6OkJvdHRv
bVJpZ2h0OwotICAgIH0gZWxzZSBpZiAoaXNJbmxpbmVTdGFydCAhPSBpc1JldmVyc2VkVGV4dEZs
b3codGV4dGZsb3cpKQotICAgICAgICByZXR1cm4gQm94Q29ybmVyOjpUb3BMZWZ0OwotICAgIGlm
IChpc0Jsb2NrU3RhcnQgPT0gaXNGbGlwcGVkTGluZXNUZXh0Rmxvdyh0ZXh0ZmxvdykpCi0gICAg
ICAgIHJldHVybiBCb3hDb3JuZXI6OkJvdHRvbUxlZnQ7Ci0gICAgcmV0dXJuIEJveENvcm5lcjo6
VG9wUmlnaHQ7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgQm94QXhpcyBtYXBMb2dpY2FsQXhpc1Rv
UGh5c2ljYWxBeGlzKFRleHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94QXhpcyBsb2dpY2FsQXhp
cykKLXsKLSAgICBpZiAoaXNWZXJ0aWNhbFRleHRGbG93KHRleHRmbG93KSkKLSAgICAgICAgcmV0
dXJuIGxvZ2ljYWxBeGlzID09IExvZ2ljYWxCb3hBeGlzOjpJbmxpbmUgPyBCb3hBeGlzOjpWZXJ0
aWNhbCA6IEJveEF4aXM6Okhvcml6b250YWw7Ci0gICAgcmV0dXJuIGxvZ2ljYWxBeGlzID09IExv
Z2ljYWxCb3hBeGlzOjpJbmxpbmUgPyBCb3hBeGlzOjpIb3Jpem9udGFsIDogQm94QXhpczo6VmVy
dGljYWw7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2NmL0h5cGhlbmF0aW9uQ0YuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2NjY5NmU0Yjc0MDM1OGMyNWYyMmNiYmFlZGIwMTg1ZTRhZTRmODNjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvY2YvSHlwaGVuYXRpb25DRi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkh5
cGhlbmF0aW9uLmgiCi0KLSNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RpbnlMUlVDYWNoZS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRv
ckludGVybmFsSUNVLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBU
aW55TFJVQ2FjaGVQb2xpY3k8QXRvbVN0cmluZywgUmV0YWluUHRyPENGTG9jYWxlUmVmPj4KLXsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgVGlueUxSVUNhY2hlPEF0b21TdHJpbmcsIFJldGFpblB0cjxD
RkxvY2FsZVJlZj4+JiBjYWNoZSgpCi0gICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VGlueUxSVUNhY2hlPEF0b21TdHJpbmcsIFJldGFpblB0cjxDRkxvY2FsZVJlZj4+PiBjYWNo
ZTsKLSAgICAgICAgcmV0dXJuIGNhY2hlOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzS2V5
TnVsbChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGxvY2FsZUlkZW50aWZpZXIuaXNOdWxsKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJl
dGFpblB0cjxDRkxvY2FsZVJlZj4gY3JlYXRlVmFsdWVGb3JOdWxsS2V5KCkKLSAgICB7Ci0gICAg
ICAgIC8vIENGIGh5cGhlbmF0aW9uIGZ1bmN0aW9ucyB1c2UgbG9jYWxlIChyZWdpb25hbCBmb3Jt
YXRzKSBsYW5ndWFnZSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBtYXRjaCBwcmltYXJ5IFVJ
IGxhbmd1YWdlLAotICAgICAgICAvLyBzbyB3ZSBjYW4ndCB1c2UgZGVmYXVsdCBsb2NhbGUgaGVy
ZS4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNDg5NzY2ND4uCi0gICAgICAgIFJldGFpblB0cjxDRkxv
Y2FsZVJlZj4gbG9jYWxlID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBkZWZhdWx0TGFuZ3VhZ2UoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Ci0gICAgICAg
IHJldHVybiBDRlN0cmluZ0lzSHlwaGVuYXRpb25BdmFpbGFibGVGb3JMb2NhbGUobG9jYWxlLmdl
dCgpKSA/IGxvY2FsZSA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIFJldGFpblB0cjxD
RkxvY2FsZVJlZj4gY3JlYXRlVmFsdWVGb3JLZXkoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRl
bnRpZmllcikKLSAgICB7Ci0gICAgICAgIFJldGFpblB0cjxDRkxvY2FsZVJlZj4gbG9jYWxlID0g
YWRvcHRDRihDRkxvY2FsZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBsb2NhbGVJZGVudGlm
aWVyLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLQotICAgICAgICByZXR1cm4g
Q0ZTdHJpbmdJc0h5cGhlbmF0aW9uQXZhaWxhYmxlRm9yTG9jYWxlKGxvY2FsZS5nZXQoKSkgPyBs
b2NhbGUgOiBudWxscHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBBdG9tU3RyaW5nIGNyZWF0ZUtl
eUZvclN0b3JhZ2UoY29uc3QgQXRvbVN0cmluZyYga2V5KSB7IHJldHVybiBrZXk7IH0KLX07Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBjYW5IeXBoZW5hdGUoY29uc3QgQXRvbVN0
cmluZyYgbG9jYWxlSWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gVGlueUxSVUNhY2hlUG9saWN5
PEF0b21TdHJpbmcsIFJldGFpblB0cjxDRkxvY2FsZVJlZj4+OjpjYWNoZSgpLmdldChsb2NhbGVJ
ZGVudGlmaWVyKTsKLX0KLQotc2l6ZV90IGxhc3RIeXBoZW5Mb2NhdGlvbihTdHJpbmdWaWV3IHRl
eHQsIHNpemVfdCBiZWZvcmVJbmRleCwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlSWRlbnRpZmll
cikKLXsKLSAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGxvY2FsZSA9IFRpbnlMUlVDYWNoZVBv
bGljeTxBdG9tU3RyaW5nLCBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+Pjo6Y2FjaGUoKS5nZXQobG9j
YWxlSWRlbnRpZmllcik7Ci0KLSAgICBDRk9wdGlvbkZsYWdzIHNlYXJjaEFjcm9zc1dvcmRCb3Vu
ZGFyaWVzID0gMTsKLSAgICBDRkluZGV4IHJlc3VsdCA9IENGU3RyaW5nR2V0SHlwaGVuYXRpb25M
b2NhdGlvbkJlZm9yZUluZGV4KHRleHQuY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpLmdl
dCgpLCBiZWZvcmVJbmRleCwgQ0ZSYW5nZU1ha2UoMCwgdGV4dC5sZW5ndGgoKSksIHNlYXJjaEFj
cm9zc1dvcmRCb3VuZGFyaWVzLCBsb2NhbGUuZ2V0KCksIG51bGxwdHIpOwotICAgIHJldHVybiBy
ZXN1bHQgPT0ga0NGTm90Rm91bmQgPyAwIDogcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0
Qm91bmRhcmllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3Vu
ZGFyaWVzLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTk0MDA5NTE3ZGEyN2Fm
MzEyM2FmYTA2ZDRiN2ExZmM1MmM1NTJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRCb3Vu
ZGFyaWVzLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXh0Qm91bmRhcmllcy5oIgotCi0jaW1wb3J0IDxDb3JlRm91bmRh
dGlvbi9DRlN0cmluZ1Rva2VuaXplci5oPgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VicmsuaD4KLSNpbXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4K
LSNpbXBvcnQgPHVuaWNvZGUvdXN0cmluZy5oPgotI2ltcG9ydCA8dW5pY29kZS91dHlwZXMuaD4K
LSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+Ci0jaW1wb3J0IDx3dGYv
dGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmg+Ci0jaW1wb3J0IDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiAhVVNFKEFQ
UEtJVCkKLQotc3RhdGljIGJvb2wgaXNTa2lwQ2hhcmFjdGVyKFVDaGFyMzIgYykKLXsKLSAgICBy
ZXR1cm4gYyA9PSAweEEwIHx8IGMgPT0gJ1xuJyB8fCBjID09ICcuJyB8fCBjID09ICcsJyB8fCBj
ID09ICchJyAgfHwgYyA9PSAnPycgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicgfHwgdV9pc3NwYWNl
KGMpOwotfQotCi1zdGF0aWMgYm9vbCBpc1doaXRlc3BhY2VDaGFyYWN0ZXIoVUNoYXIzMiBjKQot
ewotICAgIHJldHVybiBjID09IDB4QTAgfHwgYyA9PSAnXG4nIHx8IHVfaXNzcGFjZShjKTsKLX0K
LQotc3RhdGljIGJvb2wgaXNXb3JkRGVsaW1pdGluZ0NoYXJhY3RlcihVQ2hhcjMyIGMpCi17Ci0g
ICAgLy8gQW1wZXJzYW5kIGlzIGFuIGV4Y2VwdGlvbiBhZGRlZCB0byB0cmVhdCBBVCZUIGFzIGEg
c2luZ2xlIHdvcmQgKHNlZSA8cmRhcjovL3Byb2JsZW0vNTAyMjI2ND4pLgotICAgIHJldHVybiAh
Q0ZDaGFyYWN0ZXJTZXRJc0xvbmdDaGFyYWN0ZXJNZW1iZXIoQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVk
ZWZpbmVkKGtDRkNoYXJhY3RlclNldEFscGhhTnVtZXJpYyksIGMpICYmIGMgIT0gJyYnOwotfQot
Ci1zdGF0aWMgYm9vbCBpc1N5bWJvbENoYXJhY3RlcihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJu
IENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKENGQ2hhcmFjdGVyU2V0R2V0UHJl
ZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRTeW1ib2wpLCBjKTsKLX0KLQotc3RhdGljIGJvb2wgaXNB
bWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikKLXsKLSAgICAvLyBU
aGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZWhhdmUgYXMgd29yZCBib3VuZGFyaWVzLCBi
dXQgY2FuIGFwcGVhciB3aXRoaW4gd29yZHMuCi0gICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcn
IHx8IGNoYXJhY3RlciA9PSByaWdodFNpbmdsZVF1b3RhdGlvbk1hcmsgfHwgY2hhcmFjdGVyID09
IGhlYnJld1B1bmN0dWF0aW9uR2Vyc2hheWltOwotfQotCi1zdGF0aWMgQ0ZTdHJpbmdUb2tlbml6
ZXJSZWYgdG9rZW5pemVyRm9yU3RyaW5nKENGU3RyaW5nUmVmIHN0cikKLXsKLSAgICBzdGF0aWMg
YXV0byBsb2NhbGUgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBjb25zdCBjaGFy
KiBsb2NhbElEID0gY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCk7Ci0gICAgICAgIGF1dG8gY3Vy
cmVudExvY2FsZUlEID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlc05vQ29weShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4obG9jYWxJRCks
IHN0cmxlbihsb2NhbElEKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwgZmFsc2UsIGtDRkFsbG9j
YXRvck51bGwpKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgY3VycmVudExvY2FsZUlELmdldCgpKSk7Ci0gICAgfSgpKTsKLQotICAg
IGlmICghbG9jYWxlLmdldCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENGUmFu
Z2UgZW50aXJlUmFuZ2UgPSBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChzdHIpKTsg
ICAgCi0KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGU3RyaW5nVG9rZW5p
emVyUmVmPj4gdG9rZW5pemVyOwotICAgIGlmICghdG9rZW5pemVyLmdldCgpKQotICAgICAgICB0
b2tlbml6ZXIuZ2V0KCkgPSBhZG9wdENGKENGU3RyaW5nVG9rZW5pemVyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIHN0ciwgZW50aXJlUmFuZ2UsIGtDRlN0cmluZ1Rva2VuaXplclVuaXRXb3Jk
Qm91bmRhcnksIGxvY2FsZS5nZXQoKS5nZXQoKSkpOwotICAgIGVsc2UKLSAgICAgICAgQ0ZTdHJp
bmdUb2tlbml6ZXJTZXRTdHJpbmcodG9rZW5pemVyLmdldCgpLmdldCgpLCBzdHIsIGVudGlyZVJh
bmdlKTsKLSAgICByZXR1cm4gdG9rZW5pemVyLmdldCgpLmdldCgpOwotfQotCi0vLyBTaW1wbGUg
Y2FzZTogQSB3b3JkIGlzIGEgc3RyZWFtIG9mIGNoYXJhY3RlcnMgZGVsaW1pdGVkIGJ5IGEgc3Bl
Y2lhbCBzZXQgb2Ygd29yZC1kZWxpbWl0aW5nIGNoYXJhY3RlcnMuCi1zdGF0aWMgdm9pZCBmaW5k
U2ltcGxlV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIHN0
YXJ0LCBpbnQqIGVuZCkKLXsKLSAgICBBU1NFUlQocG9zaXRpb24gPj0gMCk7Ci0gICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbikgPCB0ZXh0Lmxlbmd0aCgpKTsKLQotICAg
IHVuc2lnbmVkIHN0YXJ0UG9zID0gcG9zaXRpb247Ci0gICAgd2hpbGUgKHN0YXJ0UG9zID4gMCkg
ewotICAgICAgICBpbnQgaSA9IHN0YXJ0UG9zOwotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlckJl
Zm9yZVN0YXJ0UG9zOwotICAgICAgICBVMTZfUFJFVih0ZXh0LCAwLCBpLCBjaGFyYWN0ZXJCZWZv
cmVTdGFydFBvcyk7Ci0gICAgICAgIGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJh
Y3RlckJlZm9yZVN0YXJ0UG9zKSkgewotICAgICAgICAgICAgQVNTRVJUKGkgPj0gMCk7Ci0gICAg
ICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlm
ICghaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihjaGFyYWN0ZXJCZWZvcmVTdGFydFBvcykp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVy
QmVmb3JlQmVmb3JlU3RhcnRQb3M7Ci0gICAgICAgICAgICBVMTZfUFJFVih0ZXh0LCAwLCBpLCBj
aGFyYWN0ZXJCZWZvcmVCZWZvcmVTdGFydFBvcyk7Ci0gICAgICAgICAgICBpZiAoaXNXb3JkRGVs
aW1pdGluZ0NoYXJhY3RlcihjaGFyYWN0ZXJCZWZvcmVCZWZvcmVTdGFydFBvcykpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVTE2X0JBQ0tfMSh0ZXh0LCAwLCBz
dGFydFBvcyk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGVuZFBvcyA9IHBvc2l0aW9uOwot
ICAgIHdoaWxlIChlbmRQb3MgPCB0ZXh0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hh
cmFjdGVyOwotICAgICAgICBVMTZfR0VUKHRleHQsIDAsIGVuZFBvcywgdGV4dC5sZW5ndGgoKSwg
Y2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKGlzV29yZERlbGltaXRpbmdDaGFyYWN0ZXIoY2hhcmFj
dGVyKSkgewotICAgICAgICAgICAgdW5zaWduZWQgaSA9IGVuZFBvczsKLSAgICAgICAgICAgIFUx
Nl9GV0RfMSh0ZXh0LCBpLCB0ZXh0Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDw9
IHRleHQubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKGkgPT0gdGV4dC5sZW5ndGgoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyQWZ0ZXJF
bmRQb3M7Ci0gICAgICAgICAgICBVMTZfTkVYVCh0ZXh0LCBpLCB0ZXh0Lmxlbmd0aCgpLCBjaGFy
YWN0ZXJBZnRlckVuZFBvcyk7Ci0gICAgICAgICAgICBpZiAoIWlzQW1iaWd1b3VzQm91bmRhcnlD
aGFyYWN0ZXIoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmIChpc1dvcmREZWxpbWl0aW5nQ2hhcmFjdGVyKGNoYXJhY3RlckFmdGVyRW5kUG9zKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBVMTZfRldEXzEodGV4dCwg
ZW5kUG9zLCB0ZXh0Lmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgdGV4dCBtYXkgY29u
c2lzdCBvZiBhbGwgZGVsaW1pdGVyIGNoYXJhY3RlcnMgKGUuZy4gIisrKysrKysrIiBvciBhIHNl
cmllcyBvZiBlbW9qaSksIGFuZCByZXR1cm5pbmcgYW4gZW1wdHkgcmFuZ2UKLSAgICAvLyBtYWtl
cyBubyBzZW5zZSAoYW5kIGRvZXNuJ3QgbWF0Y2ggZmluZENvbXBsZXhXb3JkQm91bmRhcnkoKSBi
ZWhhdmlvcikuCi0gICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcyAmJiBlbmRQb3MgPCB0ZXh0Lmxl
bmd0aCgpKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBVMTZfR0VUKHRl
eHQsIDAsIGVuZFBvcywgdGV4dC5sZW5ndGgoKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKGlz
U3ltYm9sQ2hhcmFjdGVyKGNoYXJhY3RlcikpCi0gICAgICAgICAgICBVMTZfRldEXzEodGV4dCwg
ZW5kUG9zLCB0ZXh0Lmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICAqc3RhcnQgPSBzdGFydFBvczsK
LSAgICAqZW5kID0gZW5kUG9zOwotfQotCi0vLyBDb21wbGV4IGNhc2U6IHVzZSBDRlN0cmluZ1Rv
a2VuaXplciB0byBmaW5kIHdvcmQgYm91bmRhcnkuCi1zdGF0aWMgdm9pZCBmaW5kQ29tcGxleFdv
cmRCb3VuZGFyeShTdHJpbmdWaWV3IHRleHQsIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50
KiBlbmQpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjaGFyU3RyaW5nID0gdGV4dC5j
cmVhdGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Ci0KLSAgICBDRlN0cmluZ1Rva2VuaXplclJl
ZiB0b2tlbml6ZXIgPSB0b2tlbml6ZXJGb3JTdHJpbmcoY2hhclN0cmluZy5nZXQoKSk7Ci0gICAg
aWYgKCF0b2tlbml6ZXIpIHsKLSAgICAgICAgLy8gRXJyb3IgY3JlYXRpbmcgdG9rZW5pemVyLCBz
byBqdXN0IHVzZSBzaW1wbGUgZnVuY3Rpb24uCi0gICAgICAgIGZpbmRTaW1wbGVXb3JkQm91bmRh
cnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQ0ZTdHJpbmdUb2tlbml6ZXJUb2tlblR5cGUgIHRva2VuID0gQ0ZTdHJpbmdUb2tlbml6
ZXJHb1RvVG9rZW5BdEluZGV4KHRva2VuaXplciwgcG9zaXRpb24pOwotICAgIGlmICh0b2tlbiA9
PSBrQ0ZTdHJpbmdUb2tlbml6ZXJUb2tlbk5vbmUpIHsKLSAgICAgICAgLy8gTm8gdG9rZW4gZm91
bmQ6IHNlbGVjdCBlbnRpcmUgYmxvY2suCi0gICAgICAgIC8vIE5COiBJIG5ldmVyIGhpdCB0aGlz
IHNlY3Rpb24gaW4gYWxsIG15IHRlc3RpbmcuCi0gICAgICAgICpzdGFydCA9IDA7Ci0gICAgICAg
ICplbmQgPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ0ZS
YW5nZSByZXN1bHQgPSBDRlN0cmluZ1Rva2VuaXplckdldEN1cnJlbnRUb2tlblJhbmdlKHRva2Vu
aXplcik7Ci0gICAgKnN0YXJ0ID0gcmVzdWx0LmxvY2F0aW9uOwotICAgICplbmQgPSByZXN1bHQu
bG9jYXRpb24gKyByZXN1bHQubGVuZ3RoOwotfQotCi0jZW5kaWYKLQotdm9pZCBmaW5kV29yZEJv
dW5kYXJ5KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVu
ZCkKLXsKLSNpZiBVU0UoQVBQS0lUKQotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0
TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuY3JlYXRl
TlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXSk7Ci0gICAgTlNSYW5nZSByYW5nZSA9IFth
dHRyaWJ1dGVkU3RyaW5nIGRvdWJsZUNsaWNrQXRJbmRleDpzdGQ6Om1pbjx1bnNpZ25lZD4ocG9z
aXRpb24sIHRleHQubGVuZ3RoKCkgLSAxKV07Ci0gICAgKnN0YXJ0ID0gcmFuZ2UubG9jYXRpb247
Ci0gICAgKmVuZCA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOwotI2Vsc2UKLSAgICB1
bnNpZ25lZCBwb3MgPSBwb3NpdGlvbjsKLSAgICBpZiAocG9zID09IHRleHQubGVuZ3RoKCkgJiYg
cG9zKQotICAgICAgICAtLXBvczsKLQotICAgIC8vIEZvciBjb21wbGV4IHRleHQgKFRoYWksIEph
cGFuZXNlLCBDaGluZXNlKSwgdmlzaWJsZV91bml0cyB3aWxsIHBhc3MgdGhlIHRleHQgaW4gYXMg
YSAKLSAgICAvLyBzaW5nbGUgY29udGlndW91cyBydW4gb2YgY2hhcmFjdGVycywgcHJvdmlkaW5n
IGFzIG11Y2ggY29udGV4dCBhcyBpcyBwb3NzaWJsZS4KLSAgICAvLyBXZSBvbmx5IG5lZWQgb25l
IGNoYXJhY3RlciB0byBkZXRlcm1pbmUgaWYgdGhlIHRleHQgaXMgY29tcGxleC4KLSAgICBVQ2hh
cjMyIGNoOwotICAgIHVuc2lnbmVkIGkgPSBwb3M7Ci0gICAgVTE2X05FWFQodGV4dCwgaSwgdGV4
dC5sZW5ndGgoKSwgY2gpOwotICAgIGJvb2wgaXNDb21wbGV4ID0gcmVxdWlyZXNDb250ZXh0Rm9y
V29yZEJvdW5kYXJ5KGNoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGltcHJvdmVzIG91
ciB3b3JkIGJvdW5kYXJ5IGJlaGF2aW9yLCBidXQgZG9lc24ndCBhY3R1YWxseSBnbyBmYXIgZW5v
dWdoLgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODg1Mzk1MT4gVGFrZSBjb21wbGV4IHdv
cmQgYm91bmRhcnkgZmluZGluZyBwYXRoIHdoZW4gbmVjZXNzYXJ5Ci0gICAgaWYgKCFpc0NvbXBs
ZXgpIHsKLSAgICAgICAgLy8gQ2hlY2sgYWdhaW4gZm9yIGNvbXBsZXggdGV4dCwgYXQgdGhlIHN0
YXJ0IG9mIHRoZSBydW4uCi0gICAgICAgIGkgPSAwOwotICAgICAgICBVMTZfTkVYVCh0ZXh0LCBp
LCB0ZXh0Lmxlbmd0aCgpLCBjaCk7Ci0gICAgICAgIGlzQ29tcGxleCA9IHJlcXVpcmVzQ29udGV4
dEZvcldvcmRCb3VuZGFyeShjaCk7Ci0gICAgfQotCi0gICAgaWYgKGlzQ29tcGxleCkKLSAgICAg
ICAgZmluZENvbXBsZXhXb3JkQm91bmRhcnkodGV4dCwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOwot
ICAgIGVsc2UKLSAgICAgICAgZmluZFNpbXBsZVdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwg
c3RhcnQsIGVuZCk7Ci0KLSNkZWZpbmUgTE9HX1dPUkRfQlJFQUsgMAotI2lmIExPR19XT1JEX0JS
RUFLCi0gICAgYXV0byB1bmlTdHJpbmcgPSB0ZXh0LmNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlp
bmcoKTsKLSAgICBhdXRvIGZvdW5kV29yZCA9IHRleHQuc3Vic3RyaW5nKCpzdGFydCwgKmVuZCAt
ICpzdGFydCkuY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpOwotICAgIE5TTG9nKEAiJXNf
QlJFQUsgJyVAJyAoJWQsJWQpIGluICclQCcgKCVwKSBhdCAlZCwgbGVuZ3RoPSVkIiwgaXNDb21w
bGV4ID8gIkNPTVBMRVgiIDogIlNJTVBMRSIsIGZvdW5kV29yZC5nZXQoKSwgKnN0YXJ0LCAqZW5k
LCB1bmlTdHJpbmcuZ2V0KCksIHVuaVN0cmluZy5nZXQoKSwgcG9zaXRpb24sIHRleHQubGVuZ3Ro
KCkpOwotI2VuZGlmCi0gICAgCi0jZW5kaWYKLX0KLQotdm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5
KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKLXsKLSAgICBpbnQgc3Rh
cnQ7Ci0gICAgZmluZFdvcmRCb3VuZGFyeSh0ZXh0LCBwb3NpdGlvbiwgJnN0YXJ0LCBlbmQpOwot
fQotCi1pbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KFN0cmluZ1ZpZXcgdGV4dCwgaW50IHBvc2l0
aW9uLCBib29sIGZvcndhcmQpCi17ICAgCi0jaWYgVVNFKEFQUEtJVCkKLSAgICBTdHJpbmcgdGV4
dFdpdGhvdXRVbnBhaXJlZFN1cnJvZ2F0ZXM7Ci0gICAgaWYgKGhhc1VucGFpcmVkU3Vycm9nYXRl
KHRleHQpKSB7Ci0gICAgICAgIHRleHRXaXRob3V0VW5wYWlyZWRTdXJyb2dhdGVzID0gcmVwbGFj
ZVVucGFpcmVkU3Vycm9nYXRlc1dpdGhSZXBsYWNlbWVudENoYXJhY3Rlcih0ZXh0LnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSk7Ci0gICAgICAgIHRleHQgPSB0ZXh0V2l0aG91dFVucGFpcmVkU3Vy
cm9nYXRlczsKLSAgICB9Ci0gICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5jcmVhdGVOU1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCldKTsKLSAgICByZXR1cm4gW2F0dHJpYnV0ZWRTdHJpbmcg
bmV4dFdvcmRGcm9tSW5kZXg6cG9zaXRpb24gZm9yd2FyZDpmb3J3YXJkXTsKLSNlbHNlCi0gICAg
Ly8gVGhpcyB2ZXJ5IGxpa2VseSB3b24ndCBiZWhhdmUgZXhhY3RseSBsaWtlIHRoZSBub24taVBo
b25lIHZlcnNpb24sIGJ1dCBpdCB3b3JrcwotICAgIC8vIGZvciB0aGUgY29udGV4dHMgaW4gd2hp
Y2ggaXQgaXMgdXNlZCBvbiBpUGhvbmUsIGFuZCBpbiB0aGUgZnV0dXJlIHdpbGwgYmUKLSAgICAv
LyB0dW5lZCB0byBpbXByb3ZlIHRoZSBpUGhvbmUtc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBr
ZXlib2FyZCBhbmQgdGV4dCBlZGl0aW5nLgotICAgIGludCBwb3MgPSBwb3NpdGlvbjsKLSAgICBV
QnJlYWtJdGVyYXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0KTsKLSAgICBp
ZiAoYm91bmRhcnkpIHsKLSAgICAgICAgaWYgKGZvcndhcmQpIHsKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBwb3MgPSB1YnJrX2ZvbGxvd2luZyhib3VuZGFyeSwgcG9zKTsKLSAg
ICAgICAgICAgICAgICBpZiAocG9zID09IFVCUktfRE9ORSkKLSAgICAgICAgICAgICAgICAgICAg
cG9zID0gdGV4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihwb3MpIDwgdGV4dC5sZW5ndGgoKSAmJiAocG9zID09IDAgfHwgIWlzU2tpcENoYXJh
Y3Rlcih0ZXh0W3BvcyAtIDFdKSkgJiYgaXNTa2lwQ2hhcmFjdGVyKHRleHRbcG9zXSkpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IHBvcyA9IHVicmtfcHJlY2VkaW5nKGJvdW5kYXJ5LCBwb3MpOwotICAgICAgICAgICAgICAgIGlm
IChwb3MgPT0gVUJSS19ET05FKQotICAgICAgICAgICAgICAgICAgICBwb3MgPSAwOwotICAgICAg
ICAgICAgfSB3aGlsZSAocG9zID4gMCAmJiBpc1NraXBDaGFyYWN0ZXIodGV4dFtwb3NdKSAmJiAh
aXNXaGl0ZXNwYWNlQ2hhcmFjdGVyKHRleHRbcG9zIC0gMV0pKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcG9zOwotI2VuZGlmCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvbWFjL1RleHRDaGVja2luZ01hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjVkYzE0MmRiMWEzODEzMzY3NmI1ZTgxY2M0YWQyNTBkMGJjZjA4Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9UZXh0Q2hlY2tpbmdNYWMubW0KKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXh0Q2hlY2tpbmcuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTlNUZXh0Q2hlY2tpbmdU
eXBlcyBuc1RleHRDaGVja2luZ1R5cGVzKE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiB0eXBl
cykKLXsKLSAgICBOU1RleHRDaGVja2luZ1R5cGVzIG1hc2sgPSAwOwotICAgIGlmICh0eXBlcy5j
b250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpCi0gICAgICAgIG1hc2sgfD0gTlNU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRDaGVj
a2luZ1R5cGU6OkdyYW1tYXIpKQotICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZUdy
YW1tYXI7Ci0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkxpbmspKQot
ICAgICAgICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZUxpbms7Ci0gICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1b3RlKSkKLSAgICAgICAgbWFzayB8PSBOU1RleHRD
aGVja2luZ1R5cGVRdW90ZTsKLSAgICBpZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlw
ZTo6RGFzaCkpCi0gICAgICAgIG1hc2sgfD0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaDsKLSAgICBp
ZiAodHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpKQotICAgICAg
ICBtYXNrIHw9IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OwotICAgIGlmICh0eXBlcy5j
b250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkKLSAgICAgICAgbWFzayB8PSBO
U1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOwotICAgIHJldHVybiBtYXNrOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQmlkaVJ1bi5jcHAKaW5kZXggNjFhZmVlZTM0NGJiOWExMzdhZDY3ZTA4YjA3OTVj
ZmVmNDg5NzE2MS4uYzkzMzNiZDJmZTFjODNiNDc2ODUxNTI1ODBmZGEwOTljYmE0MTY0NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcApAQCAtMzEsOCArMzEsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRM
ZWFrQ291bnRlciwgYmlkaVJ1bkNvdW50ZXIsICgiQmlkaVJ1biIpKTsKIAotQmlkaVJ1bjo6Qmlk
aVJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgQmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcikKLSAgICA6IEJpZGlD
aGFyYWN0ZXJSdW4oc3RhcnQsIHN0b3AsIGNvbnRleHQsIGRpcikKK0JpZGlSdW46OkJpZGlSdW4o
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIFBB
TDo6QmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcikKKyAgICA6IFBBTDo6
QmlkaUNoYXJhY3RlclJ1bihzdGFydCwgc3RvcCwgY29udGV4dCwgZGlyKQogICAgICwgbV9yZW5k
ZXJlcihyZW5kZXJlcikKICAgICAsIG1fYm94KG51bGxwdHIpCiB7CkBAIC01Myw4ICs1Myw4IEBA
IEJpZGlSdW46On5CaWRpUnVuKCkKIAogc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IEJpZGlSdW46
OnRha2VOZXh0KCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4gbmV4
dCA9IEJpZGlDaGFyYWN0ZXJSdW46OnRha2VOZXh0KCk7Ci0gICAgQmlkaUNoYXJhY3RlclJ1biog
cmF3ID0gbmV4dC5yZWxlYXNlKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBBTDo6QmlkaUNoYXJh
Y3RlclJ1bj4gbmV4dCA9IFBBTDo6QmlkaUNoYXJhY3RlclJ1bjo6dGFrZU5leHQoKTsKKyAgICBQ
QUw6OkJpZGlDaGFyYWN0ZXJSdW4qIHJhdyA9IG5leHQucmVsZWFzZSgpOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaWRpUnVuPiByZXN1bHQgPSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4oc3RhdGlj
X2Nhc3Q8QmlkaVJ1bio+KHJhdykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0JpZGlSdW4uaAppbmRleCBlZDc3NDVkN2QxZmEwZjRlYjM2NWRhNTJiNmVkODBiZmVl
ZGE1NjFmLi44OTY3MDU4MGE2ZjBlMjY5MzFkZGM1YWZmOWY3YTg1NTdmY2VlODEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9CaWRpUnVuLmgKQEAgLTIzLDIwICsyMywyMyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFBB
TCB7CitjbGFzcyBCaWRpQ29udGV4dDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBCaWRpQ29udGV4dDsKIGNsYXNzIExlZ2FjeUlubGluZUJveDsKIGNsYXNzIFJlbmRlck9iamVj
dDsKIAotc3RydWN0IEJpZGlSdW4gOiBCaWRpQ2hhcmFjdGVyUnVuIHsKLSAgICBCaWRpUnVuKHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJPYmplY3QmLCBCaWRpQ29udGV4dCos
IFVDaGFyRGlyZWN0aW9uKTsKK3N0cnVjdCBCaWRpUnVuIDogUEFMOjpCaWRpQ2hhcmFjdGVyUnVu
IHsKKyAgICBCaWRpUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJPYmpl
Y3QmLCBQQUw6OkJpZGlDb250ZXh0KiwgVUNoYXJEaXJlY3Rpb24pOwogICAgIH5CaWRpUnVuKCk7
CiAKLSAgICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaVJ1bio+KEJp
ZGlDaGFyYWN0ZXJSdW46Om5leHQoKSk7IH0KKyAgICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8QmlkaVJ1bio+KFBBTDo6QmlkaUNoYXJhY3RlclJ1bjo6bmV4dCgpKTsgfQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiB0YWtlTmV4dCgpOwogICAgIFJlbmRlck9iamVj
dCYgcmVuZGVyZXIoKSB7IHJldHVybiBtX3JlbmRlcmVyOyB9CiAgICAgTGVnYWN5SW5saW5lQm94
KiBib3goKSB7IHJldHVybiBtX2JveDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0JvcmRlckVkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Cb3JkZXJFZGdl
LmgKaW5kZXggY2ZiMmM5MTE3MzVkNzA4M2ZkNTMzOGE5YmE1YjdlNTBhYWE5MmQ2OC4uY2MzYTc4
OWI4NWM5MTA3MDkxNzQxNmQwMzcyNmUxYThmZTE4NGMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0JvcmRlckVkZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQm9yZGVyRWRnZS5oCkBAIC03MCw4ICs3MCw4IEBAIHVzaW5nIEJvcmRlckVkZ2VzID0gUmVj
dEVkZ2VzPEJvcmRlckVkZ2U+OwogQm9yZGVyRWRnZXMgYm9yZGVyRWRnZXMoY29uc3QgUmVuZGVy
U3R5bGUmLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRF
ZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSA9IHRydWUpOwogCiBpbmxp
bmUgYm9vbCBlZGdlc1NoYXJlQ29sb3IoY29uc3QgQm9yZGVyRWRnZSYgZmlyc3RFZGdlLCBjb25z
dCBCb3JkZXJFZGdlJiBzZWNvbmRFZGdlKSB7IHJldHVybiBmaXJzdEVkZ2UuY29sb3IoKSA9PSBz
ZWNvbmRFZGdlLmNvbG9yKCk7IH0KLWlubGluZSBCb3hTaWRlRmxhZyBlZGdlRmxhZ0ZvclNpZGUo
Qm94U2lkZSBzaWRlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCb3hTaWRlRmxhZz4oMSA8PCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc2lkZSkpOyB9Ci1pbmxpbmUgYm9vbCBpbmNsdWRlc0VkZ2UoT3B0
aW9uU2V0PEJveFNpZGVGbGFnPiBmbGFncywgQm94U2lkZSBzaWRlKSB7IHJldHVybiBmbGFncy5j
b250YWlucyhlZGdlRmxhZ0ZvclNpZGUoc2lkZSkpOyB9CitpbmxpbmUgQm94U2lkZUZsYWcgZWRn
ZUZsYWdGb3JTaWRlKFBBTDo6Qm94U2lkZSBzaWRlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCb3hT
aWRlRmxhZz4oMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2lkZSkpOyB9CitpbmxpbmUgYm9v
bCBpbmNsdWRlc0VkZ2UoT3B0aW9uU2V0PEJveFNpZGVGbGFnPiBmbGFncywgUEFMOjpCb3hTaWRl
IHNpZGUpIHsgcmV0dXJuIGZsYWdzLmNvbnRhaW5zKGVkZ2VGbGFnRm9yU2lkZShzaWRlKSk7IH0K
IAogaW5saW5lIGJvb2wgaW5jbHVkZXNBZGphY2VudEVkZ2VzKE9wdGlvblNldDxCb3hTaWRlRmxh
Zz4gZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJh
c2VsaW5lQWxpZ25tZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkQmFzZWxp
bmVBbGlnbm1lbnQuY3BwCmluZGV4IDIyM2UwMjhmMmEzZjc3N2Q5YjIyMGMwOTFhMzJlMWFiMDdj
MDMyMWYuLmM4ODRiOWI3NGUwZWM2ZGJkNDVjZjRhY2I5ZGM0ZTg4YWMzZDZmMTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkQmFzZWxpbmVBbGlnbm1lbnQuY3BwCkBA
IC0xNTgsNyArMTU4LDcgQEAgdm9pZCBHcmlkQmFzZWxpbmVBbGlnbm1lbnQ6OmNsZWFyKEdyaWRB
eGlzIGJhc2VsaW5lQXhpcykKICAgICAgICAgbV9jb2xBeGlzQWxpZ25tZW50Q29udGV4dC5jbGVh
cigpOwogfQogCi1CYXNlbGluZUdyb3VwOjpCYXNlbGluZUdyb3VwKFdyaXRpbmdNb2RlIGJsb2Nr
RmxvdywgSXRlbVBvc2l0aW9uIGNoaWxkUHJlZmVyZW5jZSkKK0Jhc2VsaW5lR3JvdXA6OkJhc2Vs
aW5lR3JvdXAoUEFMOjpXcml0aW5nTW9kZSBibG9ja0Zsb3csIEl0ZW1Qb3NpdGlvbiBjaGlsZFBy
ZWZlcmVuY2UpCiAgICAgOiBtX21heEFzY2VudCgwKSwgbV9tYXhEZXNjZW50KDApLCBtX2l0ZW1z
KCkKIHsKICAgICBtX2Jsb2NrRmxvdyA9IGJsb2NrRmxvdzsKQEAgLTE3MywzNiArMTczLDM2IEBA
IHZvaWQgQmFzZWxpbmVHcm91cDo6dXBkYXRlKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91
dFVuaXQgYXNjZW50LCBMYXlvdXRVbml0CiAgICAgfQogfQogCi1ib29sIEJhc2VsaW5lR3JvdXA6
OmlzT3Bwb3NpdGVCbG9ja0Zsb3coV3JpdGluZ01vZGUgYmxvY2tGbG93KSBjb25zdAorYm9vbCBC
YXNlbGluZUdyb3VwOjppc09wcG9zaXRlQmxvY2tGbG93KFBBTDo6V3JpdGluZ01vZGUgYmxvY2tG
bG93KSBjb25zdAogewogICAgIHN3aXRjaCAoYmxvY2tGbG93KSB7Ci0gICAgY2FzZSBXcml0aW5n
TW9kZTo6VG9wVG9Cb3R0b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bToKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1Jp
Z2h0OgotICAgICAgICByZXR1cm4gbV9ibG9ja0Zsb3cgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9M
ZWZ0OwotICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgotICAgICAgICByZXR1cm4g
bV9ibG9ja0Zsb3cgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OworICAgIGNhc2UgUEFMOjpX
cml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIHJldHVybiBtX2Jsb2NrRmxvdyA9PSBQ
QUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6
OlJpZ2h0VG9MZWZ0OgorICAgICAgICByZXR1cm4gbV9ibG9ja0Zsb3cgPT0gUEFMOjpXcml0aW5n
TW9kZTo6TGVmdFRvUmlnaHQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLWJvb2wgQmFzZWxpbmVH
cm91cDo6aXNPcnRob2dvbmFsQmxvY2tGbG93KFdyaXRpbmdNb2RlIGJsb2NrRmxvdykgY29uc3QK
K2Jvb2wgQmFzZWxpbmVHcm91cDo6aXNPcnRob2dvbmFsQmxvY2tGbG93KFBBTDo6V3JpdGluZ01v
ZGUgYmxvY2tGbG93KSBjb25zdAogewogICAgIHN3aXRjaCAoYmxvY2tGbG93KSB7Ci0gICAgY2Fz
ZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrRmxvdyAh
PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRv
UmlnaHQ6Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgIHJldHVy
biBtX2Jsb2NrRmxvdyA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207CisgICAgY2FzZSBQQUw6
OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICAgICAgcmV0dXJuIG1fYmxvY2tGbG93ICE9
IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6TGVmdFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoK
KyAgICAgICAgcmV0dXJuIG1fYmxvY2tGbG93ID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1ib29sIEJhc2VsaW5lR3JvdXA6OmlzQ29tcGF0
aWJsZShXcml0aW5nTW9kZSBjaGlsZEJsb2NrRmxvdywgSXRlbVBvc2l0aW9uIGNoaWxkUHJlZmVy
ZW5jZSkgY29uc3QKK2Jvb2wgQmFzZWxpbmVHcm91cDo6aXNDb21wYXRpYmxlKFBBTDo6V3JpdGlu
Z01vZGUgY2hpbGRCbG9ja0Zsb3csIEl0ZW1Qb3NpdGlvbiBjaGlsZFByZWZlcmVuY2UpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzQmFzZWxpbmVQb3NpdGlvbihjaGlsZFByZWZlcmVuY2UpKTsKICAg
ICBBU1NFUlQoc2l6ZSgpID4gMCk7CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBCYXNlbGluZUNv
bnRleHQ6OnVwZGF0ZVNoYXJlZEdyb3VwKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEl0ZW1Qb3Np
dGlvbiBwcmUKIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1
ZXMvNzIxCiBCYXNlbGluZUdyb3VwJiBCYXNlbGluZUNvbnRleHQ6OmZpbmRDb21wYXRpYmxlU2hh
cmVkR3JvdXAoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgSXRlbVBvc2l0aW9uIHByZWZlcmVuY2Up
CiB7Ci0gICAgV3JpdGluZ01vZGUgYmxvY2tEaXJlY3Rpb24gPSBjaGlsZC5zdHlsZSgpLndyaXRp
bmdNb2RlKCk7CisgICAgUEFMOjpXcml0aW5nTW9kZSBibG9ja0RpcmVjdGlvbiA9IGNoaWxkLnN0
eWxlKCkud3JpdGluZ01vZGUoKTsKICAgICBmb3IgKGF1dG8mIGdyb3VwIDogbV9zaGFyZWRHcm91
cHMpIHsKICAgICAgICAgaWYgKGdyb3VwLmlzQ29tcGF0aWJsZShibG9ja0RpcmVjdGlvbiwgcHJl
ZmVyZW5jZSkpCiAgICAgICAgICAgICByZXR1cm4gZ3JvdXA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmgKaW5kZXggMzBlMGVjOGZjZGI0MGEw
ZTNmMmUwMDdkYTY2NDkwYmY5ZDA3N2M1ZS4uNmE2N2M0ZjRhNTdlNTdiZjBmZjgyZjY0OTI1OTg2
ODE0OWQ4NDZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRCYXNl
bGluZUFsaWdubWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkQmFzZWxp
bmVBbGlnbm1lbnQuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiR3JpZExheW91dEZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAi
V3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Xcml0aW5nTW9kZS5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIApAQCAtNTgsMjEg
KzU4LDIxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmFzZWxpbmVD
b250ZXh0OwotICAgIEJhc2VsaW5lR3JvdXAoV3JpdGluZ01vZGUgYmxvY2tGbG93LCBJdGVtUG9z
aXRpb24gY2hpbGRQcmVmZXJlbmNlKTsKKyAgICBCYXNlbGluZUdyb3VwKFBBTDo6V3JpdGluZ01v
ZGUgYmxvY2tGbG93LCBJdGVtUG9zaXRpb24gY2hpbGRQcmVmZXJlbmNlKTsKIAogICAgIC8vIERl
dGVybWluZXMgd2hldGhlciBhIGJhc2VsaW5lLXNoYXJpbmcgZ3JvdXAgaXMgY29tcGF0aWJsZSB3
aXRoIGFuIGl0ZW0sIGJhc2VkIG9uIGl0cyAnYmxvY2stZmxvdycgYW5kCiAgICAgLy8gJ2Jhc2Vs
aW5lLXByZWZlcmVuY2UnCi0gICAgYm9vbCBpc0NvbXBhdGlibGUoV3JpdGluZ01vZGUsIEl0ZW1Q
b3NpdGlvbikgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBhdGlibGUoUEFMOjpXcml0aW5nTW9kZSwg
SXRlbVBvc2l0aW9uKSBjb25zdDsKIAogICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgYmFz
ZWxpbmUtc2hhcmluZyBncm91cCdzIGFzc29jaWF0ZWQgYmxvY2stZmxvdyBpcyBvcHBvc2l0ZSAo
TFIgdnMgUkwpIHRvIHBhcnRpY3VsYXIKICAgICAvLyBpdGVtJ3Mgd3JpdGluZy1tb2RlLgotICAg
IGJvb2wgaXNPcHBvc2l0ZUJsb2NrRmxvdyhXcml0aW5nTW9kZSBibG9ja0Zsb3cpIGNvbnN0Owor
ICAgIGJvb2wgaXNPcHBvc2l0ZUJsb2NrRmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2NrRmxvdykg
Y29uc3Q7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJhc2VsaW5lLXNoYXJpbmcg
Z3JvdXAncyBhc3NvY2lhdGVkIGJsb2NrLWZsb3cgaXMgb3J0aG9nb25hbCAodmVydGljYWwgdnMg
aG9yaXpvbnRhbCkKICAgICAvLyB0byBwYXJ0aWN1bGFyIGl0ZW0ncyB3cml0aW5nLW1vZGUuCi0g
ICAgYm9vbCBpc09ydGhvZ29uYWxCbG9ja0Zsb3coV3JpdGluZ01vZGUgYmxvY2tGbG93KSBjb25z
dDsKKyAgICBib29sIGlzT3J0aG9nb25hbEJsb2NrRmxvdyhQQUw6OldyaXRpbmdNb2RlIGJsb2Nr
RmxvdykgY29uc3Q7CiAKLSAgICBXcml0aW5nTW9kZSBtX2Jsb2NrRmxvdzsKKyAgICBQQUw6Oldy
aXRpbmdNb2RlIG1fYmxvY2tGbG93OwogICAgIEl0ZW1Qb3NpdGlvbiBtX3ByZWZlcmVuY2U7CiAg
ICAgTGF5b3V0VW5pdCBtX21heEFzY2VudDsKICAgICBMYXlvdXRVbml0IG1fbWF4RGVzY2VudDsK
QEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBTZXRzIHRoZSBHcmlkIENvbnRh
aW5lcidzIHdyaXRpbmctbW9kZSBzbyB0aGF0IHdlIGNhbiBhdm9pZCB0aGUgZGVwZW5kZWN5IG9m
IHRoZSBMYXlvdXRHcmlkIGNsYXNzIGZvcgogICAgIC8vIGRldGVybWluaW5nIHdoZXRoZXIgYSBn
cmlkIGl0ZW0gaXMgb3J0aG9nb25hbCBvciBub3QuCi0gICAgdm9pZCBzZXRCbG9ja0Zsb3coV3Jp
dGluZ01vZGUgYmxvY2tGbG93KSB7IG1fYmxvY2tGbG93ID0gYmxvY2tGbG93OyB9OworICAgIHZv
aWQgc2V0QmxvY2tGbG93KFBBTDo6V3JpdGluZ01vZGUgYmxvY2tGbG93KSB7IG1fYmxvY2tGbG93
ID0gYmxvY2tGbG93OyB9OwogCiAgICAgLy8gQ2xlYXJpbmcgdGhlIEJhc2VsaW5lIEFsaWdubWVu
dCBjb250ZXh0IGFuZCB0aGVpciBpbnRlcm5hbCBjbGFzc2VzIGFuZCBkYXRhIHN0cnVjdHVyZXMu
CiAgICAgdm9pZCBjbGVhcihHcmlkQXhpcyk7CkBAIC0xNzMsNyArMTczLDcgQEAgcHJpdmF0ZToK
ICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxCYXNlbGluZUNv
bnRleHQ+LCBEZWZhdWx0SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dW5zaWduZWQ+PiBCYXNlbGluZUNvbnRleHRzTWFwOwogCiAgICAgLy8gR3JpZCBD
b250YWluZXIncyBXcml0aW5nTW9kZSwgdXNlZCB0byBkZXRlcm1pbmUgZ3JpZCBpdGVtJ3Mgb3J0
aG9nb25hbGl0eS4KLSAgICBXcml0aW5nTW9kZSBtX2Jsb2NrRmxvdzsKKyAgICBQQUw6OldyaXRp
bmdNb2RlIG1fYmxvY2tGbG93OwogICAgIEJhc2VsaW5lQ29udGV4dHNNYXAgbV9yb3dBeGlzQWxp
Z25tZW50Q29udGV4dDsKICAgICBCYXNlbGluZUNvbnRleHRzTWFwIG1fY29sQXhpc0FsaWdubWVu
dENvbnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
CmluZGV4IGY2YjExZDlkNjI5YWNmYmZiODc4NjBjYjdiOGNkMjhjZWJjMWIxOGIuLjU0NDM5YjNm
NDk5NzY5MzZmY2ZkZDA0MzAwZTBlZWMwYTRlYWE5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTIyNyw5ICsyMjcsOSBAQCBTdHJpbmcgSGl0VGVz
dFJlc3VsdDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
IH0KIAotU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcChUZXh0RGlyZWN0aW9u
JiBkaXIpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlwKFBBTDo6
VGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAogewotICAgIGRpciA9IFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICBkaXIgPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAvLyBSZXR1cm4gdGhl
IHRvb2wgdGlwIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb2ludCwgaWYgYW55LiBPbmx5
IG1hcmtlcnMgYXNzb2NpYXRlZCB3aXRoIGJhZCBncmFtbWFyCiAgICAgLy8gY3VycmVudGx5IHN1
cHBseSBzdHJpbmdzLCBidXQgbWF5YmUgc29tZWRheSBtYXJrZXJzIGFzc29jaWF0ZWQgd2l0aCBt
aXNzcGVsbGVkIHdvcmRzIHdpbGwgYWxzby4KICAgICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2Rl
KQpAQCAtMjU4LDkgKzI1OCw5IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpyZXBsYWNlZFN0cmlu
ZygpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKIH0gICAgCiAgICAg
Ci1TdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAor
U3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFBBTDo6VGV4dERpcmVjdGlvbiYgZGlyKSBjb25z
dAogewotICAgIGRpciA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBkaXIgPSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUjsKICAgICAvLyBGaW5kIHRoZSB0aXRsZSBpbiB0aGUgbmVhcmVzdCBlbmNs
b3NpbmcgRE9NIG5vZGUuCiAgICAgLy8gRm9yIDxhcmVhPiB0YWdzIGluIGltYWdlIG1hcHMsIHdh
bGsgdGhlIHRyZWUgZm9yIHRoZSA8YXJlYT4sIG5vdCB0aGUgPGltZz4gdXNpbmcgaXQuCiAgICAg
Zm9yIChOb2RlKiB0aXRsZU5vZGUgPSBtX2lubmVyTm9kZS5nZXQoKTsgdGl0bGVOb2RlOyB0aXRs
ZU5vZGUgPSB0aXRsZU5vZGUtPnBhcmVudEluQ29tcG9zZWRUcmVlKCkpIHsKQEAgLTI3Nyw3ICsy
NzcsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBj
b25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIEhpdFRlc3RSZXN1bHQ6Omlu
bmVyVGV4dElmVHJ1bmNhdGVkKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKK1N0cmluZyBIaXRU
ZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChQQUw6OlRleHREaXJlY3Rpb24mIGRpcikg
Y29uc3QKIHsKICAgICBmb3IgKE5vZGUqIHRydW5jYXRlZE5vZGUgPSBtX2lubmVyTm9kZS5nZXQo
KTsgdHJ1bmNhdGVkTm9kZTsgdHJ1bmNhdGVkTm9kZSA9IHRydW5jYXRlZE5vZGUtPnBhcmVudElu
Q29tcG9zZWRUcmVlKCkpIHsKICAgICAgICAgaWYgKCFpczxFbGVtZW50PigqdHJ1bmNhdGVkTm9k
ZSkpCkBAIC0yOTksNyArMjk5LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OmlubmVyVGV4dElm
VHJ1bmNhdGVkKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGRpciA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBkaXIgPSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUjsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDM1YWE4MGI3NDQwOGIzMDA0MmZjYjM0NWYyZTRkMTk0
MmUyMjU5MTcuLjQ0MWJkN2Y2Mjk1MGQwZjgzNjhiMzYzMmQ3MzMwOGI2MDM3YTM2ZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtOTQsMTAgKzk0LDEwIEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSogdGFyZ2V0RnJhbWUoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzU2VsZWN0ZWQoKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHNwZWxsaW5nVG9vbFRpcChUZXh0RGlyZWN0aW9uJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHNwZWxsaW5nVG9vbFRpcChQQUw6OlRleHREaXJlY3Rpb24mKSBjb25z
dDsKICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgdGl0bGUoVGV4dERpcmVjdGlvbiYpIGNvbnN0OwotICAgIFN0cmluZyBpbm5lclRl
eHRJZlRydW5jYXRlZChUZXh0RGlyZWN0aW9uJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHRpdGxlKFBBTDo6VGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFN0cmluZyBpbm5l
clRleHRJZlRydW5jYXRlZChQQUw6OlRleHREaXJlY3Rpb24mKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgYWx0RGlzcGxheVN0cmluZygpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIFN0cmluZyB0aXRsZURpc3BsYXlTdHJpbmcoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBJbWFnZSogaW1hZ2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3hQYWludGVyLmNwcAppbmRleCA1YzE5YzkzMDA2MDBlMzc3ZDkyZWQ2M2YxZThiOWVhNGU2
YmNiNmVmLi41YWFkMWJmYjE2OGQ2OGYzZDI5MjE4NWEwNWE3OWY2ZTBkODNlMTIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCkBAIC0zMTksNyAr
MzE5LDcgQEAgdm9pZCBJbmxpbmVCb3hQYWludGVyOjpwYWludEZpbGxMYXllcihjb25zdCBDb2xv
ciYgY29sb3IsIGNvbnN0IEZpbGxMYXllciYgZmlsbEwKICAgICAvLyB0aGUgcHJldmlvdXMgbGlu
ZSBsZWZ0IG9mZi4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXRPbkxpbmU7CiAgICAgTGF5
b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aDsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmRp
cmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgIGlmIChyZW5kZXJlcigpLnN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsKICAgICAgICAg
Zm9yIChhdXRvIGJveCA9IG1faW5saW5lQm94LnByZXZpb3VzSW5saW5lQm94KCk7IGJveDsgYm94
LnRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3goKSkKICAgICAgICAgICAgIGxvZ2ljYWxPZmZzZXRP
bkxpbmUgKz0gYm94LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGgg
PSBsb2dpY2FsT2Zmc2V0T25MaW5lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lFbGxpcHNpc0JveC5jcHAKaW5kZXggNDZkY2Q0NmZmN2RlMjk4NjZiNDk5OGUzZmM2Yzc1MDY5
ZGJlZWI0Ny4uMzE3OWFmNjEzZTA1N2RiNTQwMThhYmY3YzRmNDQ3MmJkMTUzZjMyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCkBAIC03MCw3
ICs3MCw3IEBAIHZvaWQgTGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgfQogCiAgICAgLy8gRklYTUU6
IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4g
ZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC5kcmF3VGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihtX3N0ciwgbGluZVN0eWxlLCBBbGxvd1JpZ2h0RXhwYW5zaW9uKSwgTGF5
b3V0UG9pbnQoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBs
aW5lU3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOworICAgIGNvbnRleHQuZHJhd1RleHQo
Zm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIGxpbmVTdHlsZSwgUEFM
OjpBbGxvd1JpZ2h0RXhwYW5zaW9uKSwgTGF5b3V0UG9pbnQoeCgpICsgcGFpbnRPZmZzZXQueCgp
LCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSkpOwogCiAgICAgLy8gUmVzdG9yZSB0aGUgcmVndWxhciBmaWxsIGNvbG9yLgogICAgIGlmICh0
ZXh0Q29sb3IgIT0gY29udGV4dC5maWxsQ29sb3IoKSkKQEAgLTExOSw3ICsxMTksNyBAQCBJbnRS
ZWN0IExlZ2FjeUVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KCkgY29uc3QKICAgICBjb25zdCBM
ZWdhY3lSb290SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwogICAgIC8vIEZJWE1FOiBXaHkg
aXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdz
IGJlbG93LgogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQoeCgpKSwg
TGF5b3V0VW5pdCh5KCkgKyByb290Qm94LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5n
QmxvY2soKSksIDBfbHUsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQcmVjZWRp
bmdCbG9jaygpIH07Ci0gICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bihtX3N0ciwgbGluZVN0eWxlLCBBbGxvd1JpZ2h0RXhwYW5z
aW9uKSwgc2VsZWN0aW9uUmVjdCk7CisgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihtX3N0ciwgbGluZVN0eWxlLCBQQUw6OkFs
bG93UmlnaHRFeHBhbnNpb24pLCBzZWxlY3Rpb25SZWN0KTsKICAgICAvLyBGSVhNRTogdXNlIGRp
cmVjdGlvbmFsIHBpeGVsIHNuYXBwaW5nIGluc3RlYWQuCiAgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiB9CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBMZWdhY3lF
bGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXlvdXRQb2kKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNz
aW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rp
b25SZWN0IHsgTGF5b3V0VW5pdCh4KCkgKyBwYWludE9mZnNldC54KCkpLCByb290Qm94LnNlbGVj
dGlvblRvcCgpICsgcGFpbnRPZmZzZXQueSgpLCAwX2x1LCByb290Qm94LnNlbGVjdGlvbkhlaWdo
dCgpIH07Ci0gICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1biht
X3N0ciwgc3R5bGUsIEFsbG93UmlnaHRFeHBhbnNpb24pOworICAgIFRleHRSdW4gcnVuID0gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxlLCBQQUw6OkFsbG93UmlnaHRF
eHBhbnNpb24pOwogICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxl
Y3Rpb25SZWN0KTsKICAgICBjb250ZXh0LmZpbGxSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKSwgYyk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKaW5kZXggYTkyNGY2YTJhMjA5YzU0NDg2YWU3MTFl
MzI2ODE4MmE2MTJhMTM0Ni4uOGE1NGIxZmYyZWI5MTIxNzY1YzhjZGNlOGM1NDRiZTFkY2VjNTJk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guaApAQCAtMjMs
NyArMjMsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Qm94TW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiVGV4
dEZsYWdzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgpAQCAtMjA4LDggKzIwOCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGNo
YXIgYmlkaUxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuYmlkaUVtYmVkZGluZ0xl
dmVsKCk7IH0KICAgICB2b2lkIHNldEJpZGlMZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKSB7IG1f
Yml0ZmllbGRzLnNldEJpZGlFbWJlZGRpbmdMZXZlbChsZXZlbCk7IH0KLSAgICBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFRleHREaXJl
Y3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsgfQotICAgIGJvb2wgaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBiaWRpTGV2ZWwoKSAlIDIgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSOyB9CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KICAgICBp
bnQgY2FyZXRMZWZ0bW9zdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9mZnNldCgpOyB9CiAgICAgaW50
IGNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gY2FyZXRNYXhPZmZzZXQoKSA6IGNhcmV0TWluT2Zmc2V0KCk7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCmluZGV4IDJj
ZGRlZGIxNWVmMGFlNDg3ODNjYzFjYTdiMzQ0ZmIwMjQzNDUwMmUuLmI3NWYwZWYyZGIzNDJmOTdj
MmM5YmFlYmY3MDcwNGQ1NDA5ZGNjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBib29sIExlZ2Fj
eUlubGluZUZsb3dCb3g6OnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZShjb25zdCBHbHlwaE92
ZXJmbG93QW5kRmFsbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0gICAgaWYgKGxpbmVTdHlsZS5m
b250RGVzY3JpcHRpb24oKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwKKyAgICBpZiAobGluZVN0eWxlLmZvbnREZXNjcmlwdGlvbigpLm9yaWVudGF0aW9uKCkgPT0g
UEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsCiAgICAgICAgIHx8IGxpbmVTdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuaGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJ
bmxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0
ZXJhdG9yLmgKaW5kZXggN2M0YjY3YjkxMWMxNjg3YzgwNmNkZjk0NzZkYWJjNGM3MTg5NDYzMC4u
MzkwNzg3NzVkOWZhNjNiODU2NTEyZjEyODNiNDQ2MzljMjg3MjZhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmgKQEAgLTE0MCwxMSArMTQw
LDExIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3Im
IGl0MSwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0CiAgICAgcmV0dXJuIGl0MS5vZmZzZXQoKSAh
PSBpdDIub2Zmc2V0KCkgfHwgaXQxLnJlbmRlcmVyKCkgIT0gaXQyLnJlbmRlcmVyKCk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgVUNoYXJEaXJlY3Rpb24gZW1iZWRDaGFyRnJvbURpcmVjdGlvbihUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpKQorc3RhdGljIGlu
bGluZSBVQ2hhckRpcmVjdGlvbiBlbWJlZENoYXJGcm9tRGlyZWN0aW9uKFBBTDo6VGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpKQogewotICAgIGlm
ICh1bmljb2RlQmlkaSA9PSBFbWJlZCkKLSAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIDogVV9MRUZUX1RPX1JJ
R0hUX0VNQkVERElORzsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJU
TCA/IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSA6IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERTsK
KyAgICBpZiAodW5pY29kZUJpZGkgPT0gUEFMOjpFbWJlZCkKKyAgICAgICAgcmV0dXJuIGRpcmVj
dGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA/IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJ
TkcgOiBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HOworICAgIHJldHVybiBkaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUgOiBVX0xF
RlRfVE9fUklHSFRfT1ZFUlJJREU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBPYnNlcnZlcj4KQEAg
LTE1NCw4ICsxNTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVk
T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0KgogICAgICAgICByZXR1cm47
CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAg
RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gc3R5bGUudW5pY29kZUJpZGkoKTsKLSAgICBpZiAo
dW5pY29kZUJpZGkgPT0gVUJOb3JtYWwpIHsKKyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2Rl
QmlkaSA9IHN0eWxlLnVuaWNvZGVCaWRpKCk7CisgICAgaWYgKHVuaWNvZGVCaWRpID09IFBBTDo6
VUJOb3JtYWwpIHsKICAgICAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy13cml0
aW5nLW1vZGVzLyN1bmljb2RlLWJpZGkKICAgICAgICAgLy8gIlRoZSBlbGVtZW50IGRvZXMgbm90
IG9wZW4gYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBlbWJlZGRpbmcgd2l0aCByZXNwZWN0IHRvIHRo
ZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobS4iCiAgICAgICAgIC8vIFRodXMgd2UgaWdub3JlIGFu
eSBwb3NzaWJsZSBkaXI9IGF0dHJpYnV0ZSBvbiB0aGUgc3Bhbi4KQEAgLTE3MSw3ICsxNzEsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KE9ic2VydmVy
KiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0KgogICAgIH0KIAogICAgIGlmICghb2JzZXJ2ZXItPmlu
SXNvbGF0ZSgpKQotICAgICAgICBvYnNlcnZlci0+ZW1iZWQoZW1iZWRDaGFyRnJvbURpcmVjdGlv
bihzdHlsZS5kaXJlY3Rpb24oKSwgdW5pY29kZUJpZGkpLCBGcm9tU3R5bGVPckRPTSk7CisgICAg
ICAgIG9ic2VydmVyLT5lbWJlZChlbWJlZENoYXJGcm9tRGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlv
bigpLCB1bmljb2RlQmlkaSksIFBBTDo6RnJvbVN0eWxlT3JET00pOwogfQogCiB0ZW1wbGF0ZSA8
Y2xhc3MgT2JzZXJ2ZXI+CkBAIC0xODAsOCArMTgwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5v
dGlmeU9ic2VydmVyV2lsbEV4aXRPYmplY3QoT2JzZXJ2ZXIqIG9ic2VydmVyLCBSZW5kZXJPYmpl
Y3QKICAgICBpZiAoIW9ic2VydmVyIHx8ICFvYmplY3QgfHwgIW9iamVjdC0+aXNSZW5kZXJJbmxp
bmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0g
b2JqZWN0LT5zdHlsZSgpLnVuaWNvZGVCaWRpKCk7Ci0gICAgaWYgKHVuaWNvZGVCaWRpID09IFVC
Tm9ybWFsKQorICAgIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gb2JqZWN0LT5zdHls
ZSgpLnVuaWNvZGVCaWRpKCk7CisgICAgaWYgKHVuaWNvZGVCaWRpID09IFBBTDo6VUJOb3JtYWwp
CiAgICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkbyBmb3IgdW5pY29kZS1iaWRpOiBub3Jt
YWwKICAgICBpZiAoaXNJc29sYXRlZCh1bmljb2RlQmlkaSkpIHsKICAgICAgICAgb2JzZXJ2ZXIt
PmV4aXRJc29sYXRlKCk7CkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5v
dGlmeU9ic2VydmVyV2lsbEV4aXRPYmplY3QoT2JzZXJ2ZXIqIG9ic2VydmVyLCBSZW5kZXJPYmpl
Y3QKIAogICAgIC8vIE90aGVyd2lzZSB3ZSBwb3AgYW55IGVtYmVkL292ZXJyaWRlIGNoYXJhY3Rl
ciB3ZSBhZGRlZCB3aGVuIHdlIG9wZW5lZCB0aGlzIHRhZy4KICAgICBpZiAoIW9ic2VydmVyLT5p
bklzb2xhdGUoKSkKLSAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFMX0ZP
Uk1BVCwgRnJvbVN0eWxlT3JET00pOworICAgICAgICBvYnNlcnZlci0+ZW1iZWQoVV9QT1BfRElS
RUNUSU9OQUxfRk9STUFULCBQQUw6OkZyb21TdHlsZU9yRE9NKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBib29sIGlzSXRlcmF0b3JUYXJnZXQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkBAIC0zNzEsNiAr
MzcxLDEyIEBAIEFMV0FZU19JTkxJTkUgVUNoYXJEaXJlY3Rpb24gTGVnYWN5SW5saW5lSXRlcmF0
b3I6OmRpcmVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIFVfT1RIRVJfTkVVVFJBTDsKIH0KIAor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgUEFMIHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKIHRlbXBsYXRlPD4KIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZl
cjo6aW5jcmVtZW50SW50ZXJuYWwoKQogewpAQCAtNDM0LDcgKzQ0MCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGluSXNvbGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVzdGVkSXNvbGF0ZUNvdW50OyB9
CiAKICAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHdlIGVuY291bnRlciBiaWRpIGRpcmVjdGlvbmFs
IG92ZXJyaWRlcy4KLSAgICB2b2lkIGVtYmVkKFVDaGFyRGlyZWN0aW9uLCBCaWRpRW1iZWRkaW5n
U291cmNlKSB7IH0KKyAgICB2b2lkIGVtYmVkKFVDaGFyRGlyZWN0aW9uLCBQQUw6OkJpZGlFbWJl
ZGRpbmdTb3VyY2UpIHsgfQogICAgIHZvaWQgY29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKSB7IH0K
IAogICAgIHZvaWQgYWRkRmFrZVJ1bklmTmVjZXNzYXJ5KFJlbmRlck9iamVjdCYgb2JqLCB1bnNp
Z25lZCBwb3MsIHVuc2lnbmVkIGVuZCwgUmVuZGVyRWxlbWVudCYgcm9vdCwgSW5saW5lQmlkaVJl
c29sdmVyJiByZXNvbHZlcikKQEAgLTUwNyw0ICs1MTMsNCBAQCBpbmxpbmUgYm9vbCBJbmxpbmVC
aWRpUmVzb2x2ZXI6Om5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdAogICAgIHJl
dHVybiBtX2N1cnJlbnQucmVuZGVyZXIoKSA9PSBlbmRPZkxpbmUucmVuZGVyZXIoKTsKIH0KIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggOTY1MGQ5NGMy
YTFmN2QxZDAxZmZhZDA0OGNmYWFmMGU3NWM1OTg2My4uNDE0N2QwYzc3Njk0YjNiNmQzMTRmYTcz
MzRhNmM3ZDYxNjY3NWVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94LmNwcApAQCAtNDg2LDIzICs0ODYsMjMgQEAgY29uc3QgUmVuZGVyQ29t
YmluZVRleHQqIExlZ2FjeUlubGluZVRleHRCb3g6OmNvbWJpbmVkVGV4dCgpIGNvbnN0CiAgICAg
cmV0dXJuIGxpbmVTdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRl
eHQ+KHJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigp
KS5pc0NvbWJpbmVkKCkgPyAmZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkp
IDogbnVsbHB0cjsKIH0KIAotRXhwYW5zaW9uQmVoYXZpb3IgTGVnYWN5SW5saW5lVGV4dEJveDo6
ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAorUEFMOjpFeHBhbnNpb25CZWhhdmlvciBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7Ci0gICAgRXhwYW5zaW9u
QmVoYXZpb3IgbGVmdEJlaGF2aW9yOworICAgIFBBTDo6RXhwYW5zaW9uQmVoYXZpb3IgbGVmdEJl
aGF2aW9yOwogICAgIGlmIChmb3JjZUxlZnRFeHBhbnNpb24oKSkKLSAgICAgICAgbGVmdEJlaGF2
aW9yID0gRm9yY2VMZWZ0RXhwYW5zaW9uOworICAgICAgICBsZWZ0QmVoYXZpb3IgPSBQQUw6OkZv
cmNlTGVmdEV4cGFuc2lvbjsKICAgICBlbHNlIGlmIChjYW5IYXZlTGVmdEV4cGFuc2lvbigpKQot
ICAgICAgICBsZWZ0QmVoYXZpb3IgPSBBbGxvd0xlZnRFeHBhbnNpb247CisgICAgICAgIGxlZnRC
ZWhhdmlvciA9IFBBTDo6QWxsb3dMZWZ0RXhwYW5zaW9uOwogICAgIGVsc2UKLSAgICAgICAgbGVm
dEJlaGF2aW9yID0gRm9yYmlkTGVmdEV4cGFuc2lvbjsKKyAgICAgICAgbGVmdEJlaGF2aW9yID0g
UEFMOjpGb3JiaWRMZWZ0RXhwYW5zaW9uOwogCi0gICAgRXhwYW5zaW9uQmVoYXZpb3IgcmlnaHRC
ZWhhdmlvcjsKKyAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yIHJpZ2h0QmVoYXZpb3I7CiAgICAg
aWYgKGZvcmNlUmlnaHRFeHBhbnNpb24oKSkKLSAgICAgICAgcmlnaHRCZWhhdmlvciA9IEZvcmNl
UmlnaHRFeHBhbnNpb247CisgICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBQQUw6OkZvcmNlUmlnaHRF
eHBhbnNpb247CiAgICAgZWxzZSBpZiAoZXhwYW5zaW9uKCkgJiYgbmV4dExlYWZPbkxpbmUoKSAm
JiAhbmV4dExlYWZPbkxpbmUoKS0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmlnaHRCZWhhdmlv
ciA9IEFsbG93UmlnaHRFeHBhbnNpb247CisgICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBQQUw6OkFs
bG93UmlnaHRFeHBhbnNpb247CiAgICAgZWxzZQotICAgICAgICByaWdodEJlaGF2aW9yID0gRm9y
YmlkUmlnaHRFeHBhbnNpb247CisgICAgICAgIHJpZ2h0QmVoYXZpb3IgPSBQQUw6OkZvcmJpZFJp
Z2h0RXhwYW5zaW9uOwogCiAgICAgcmV0dXJuIGxlZnRCZWhhdmlvciB8IHJpZ2h0QmVoYXZpb3I7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4
dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApp
bmRleCAyNzMyZmYwMWZkOWI0Yjg1MzFlNmQ5ZTgwYzgwZjg1Nzc2MTllOGNiLi4zMzliZDcyZWUw
MzIwY2E2NmI1ZjVjMDRlY2UzYmFjYzJmYWJjMjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogICAgIFN0cmluZyB0ZXh0KGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wg
aWdub3JlSHlwaGVuID0gZmFsc2UpIGNvbnN0OyAvLyBUaGUgZWZmZWN0aXZlIHRleHQgZm9yIHRo
ZSBydW4uCiAgICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKGJvb2wgaWdub3JlQ29tYmluZWRUZXh0
ID0gZmFsc2UsIGJvb2wgaWdub3JlSHlwaGVuID0gZmFsc2UpIGNvbnN0OwogCi0gICAgRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKKyAgICBQQUw6OkV4cGFuc2lv
bkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAKICAgICB2b2lkIGJlaGF2ZXNM
aWtlVGV4dCgpIGNvbnN0ID0gZGVsZXRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5TGluZUxheW91dC5jcHAKaW5kZXggOGNlOGYxZjczYzJjYWYxMGIyN2RkMDc5ZWVhMzBk
ODBiOTkzMjI0NC4uYjY4NWZmOGYzYjg5Zjg1OGQ5YmYxNTMwNmRmMGQ5ZGZjNDdiZDQxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcApAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUxpbmVMYXlvdXQuaCIKIAogI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDxwYWwv
dGV4dC9CaWRpUmVzb2x2ZXIuaD4KICNpbmNsdWRlICJCcmVha2luZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJEb2N1bWVudElubGluZXMuaCIKICNpbmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKQEAg
LTcwLDcgKzcwLDcgQEAgTGVnYWN5TGluZUxheW91dDo6fkxlZ2FjeUxpbmVMYXlvdXQoKQogICAg
IGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hUcmVlKCk7CiB9OwogCi1zdGF0aWMgdm9pZCBkZXRl
cm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0ZXJh
dG9yIGl0ZXIpCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShQQUw6OlRleHRE
aXJlY3Rpb24mIGRpciwgTGVnYWN5SW5saW5lSXRlcmF0b3IgaXRlcikKIHsKICAgICB3aGlsZSAo
IWl0ZXIuYXRFbmQoKSkgewogICAgICAgICBpZiAoaXRlci5hdFBhcmFncmFwaFNlcGFyYXRvcigp
KQpAQCAtNzgsMTEgKzc4LDExIEBAIHN0YXRpYyB2b2lkIGRldGVybWluZURpcmVjdGlvbmFsaXR5
KFRleHREaXJlY3Rpb24mIGRpciwgTGVnYWN5SW5saW5lSXRlcmF0b3IgaXRlCiAgICAgICAgIGlm
IChVQ2hhciBjdXJyZW50ID0gaXRlci5jdXJyZW50KCkpIHsKICAgICAgICAgICAgIFVDaGFyRGly
ZWN0aW9uIGNoYXJEaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCk7CiAgICAgICAg
ICAgICBpZiAoY2hhckRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAg
ICAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICAgICAgZGlyID0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGNoYXJEaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUIHx8
IGNoYXJEaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQykgewotICAgICAgICAgICAg
ICAgIGRpciA9IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgICAgICAgICBkaXIgPSBQQUw6
OlRleHREaXJlY3Rpb246OlJUTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTk1LDcgKzk1LDcgQEAgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxC
aWRpUnVuPiBjcmVhdGVSdW4oaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QmIG9iaiwK
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCaWRpUnVuPihzdGFydCwgZW5kLCBvYmosIHJlc29sdmVy
LmNvbnRleHQoKSwgcmVzb2x2ZXIuZGlyKCkpOwogfQogCi12b2lkIExlZ2FjeUxpbmVMYXlvdXQ6
OmFwcGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4qIHJ1bnMsIGludCBzdGFy
dCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2
ZXIpCit2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QoUEFMOjpCaWRp
UnVuTGlzdDxCaWRpUnVuPiogcnVucywgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3Qm
IG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKICAgICBpZiAoc3RhcnQgPiBl
bmQgfHwgUmVuZGVyQmxvY2s6OnNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBlbmRzV2l0aEhUTUxTcGFjZXMoY29uc3Qg
Q2hhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHJlYWNoZWRFbmRPZlRleHRS
ZW5kZXJlcihjb25zdCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMpCitzdGF0aWMgYm9v
bCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29uc3QgUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkaVJ1bnMpCiB7CiAgICAgQmlkaVJ1biogcnVuID0gYmlkaVJ1bnMubG9naWNhbGx5TGFz
dFJ1bigpOwogICAgIGlmICghcnVuKQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBib29sIHJl
YWNoZWRFbmRPZlRleHRSZW5kZXJlcihjb25zdCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1
bnMpCiAgICAgcmV0dXJuIGVuZHNXaXRoSFRNTFNwYWNlcyh0ZXh0LmNoYXJhY3RlcnMxNigpLCBw
b3NpdGlvbiwgbGVuZ3RoKTsKIH0KIAotTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5TGluZUxh
eW91dDo6Y29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0
IExpbmVJbmZvJiBsaW5lSW5mbykKK0xlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlv
dXQ6OmNvbnN0cnVjdExpbmUoUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNv
bnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKICAgICBBU1NFUlQoYmlkaVJ1bnMuZmlyc3RSdW4o
KSk7CiAKQEAgLTM2Myw3ICszNjMsNyBAQCBUZXh0QWxpZ25Nb2RlIExlZ2FjeUxpbmVMYXlvdXQ6
OnRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dpdGhTb2Z0QnJlYWspIGNvbgogI2lmIEVO
QUJMRShDU1MzX1RFWFQpCiAgICAgVGV4dEp1c3RpZnkgdGV4dEp1c3RpZnkgPSBzdHlsZSgpLnRl
eHRKdXN0aWZ5KCk7CiAgICAgaWYgKGFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
ICYmIHRleHRKdXN0aWZ5ID09IFRleHRKdXN0aWZ5OjpOb25lKQotICAgICAgICByZXR1cm4gc3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpM
ZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7CisgICAgICAgIHJldHVybiBzdHlsZSgpLmRpcmVj
dGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gVGV4dEFsaWduTW9kZTo6TGVmdCA6
IFRleHRBbGlnbk1vZGU6OlJpZ2h0OwogI2VuZGlmCiAKICAgICBpZiAoZW5kc1dpdGhTb2Z0QnJl
YWspCkBAIC02MzEsOCArNjMxLDggQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojpjb21wdXRlRXhw
YW5zaW9uRm9ySnVzdGlmaWVkVGV4dChCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVIKIAogdm9pZCBM
ZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxv
Y2tGbG93JiBmbG93LCBjb25zdCBUZXh0QWxpZ25Nb2RlJiB0ZXh0QWxpZ24sIGNvbnN0IExlZ2Fj
eVJvb3RJbmxpbmVCb3gqIHJvb3RJbmxpbmVCb3gsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4s
IGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQmIHRvdGFsTG9naWNhbFdpZHRoLCBmbG9hdCYgYXZh
aWxhYmxlTG9naWNhbFdpZHRoLCBpbnQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKIHsKLSAg
ICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICBpZiAocm9vdElubGluZUJveCAmJiBmbG93
LnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQbGFpbnRleHQpCisgICAgUEFMOjpUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbjsKKyAgICBpZiAocm9vdElubGluZUJveCAmJiBmbG93LnN0eWxlKCkudW5p
Y29kZUJpZGkoKSA9PSBQQUw6OlBsYWludGV4dCkKICAgICAgICAgZGlyZWN0aW9uID0gcm9vdElu
bGluZUJveC0+ZGlyZWN0aW9uKCk7CiAgICAgZWxzZQogICAgICAgICBkaXJlY3Rpb24gPSBmbG93
LnN0eWxlKCkuZGlyZWN0aW9uKCk7CkBAIC02NjcsMTMgKzY2NywxMyBAQCB2b2lkIExlZ2FjeUxp
bmVMYXlvdXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudChSZW5kZXJCbG9ja0Zsb3cm
IGZsb3csIGNvbgogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KQogICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxM
b2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmln
aHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxX
aWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KQogICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yUmlnaHRBbGlnbmVkQmxvY2soaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFs
TG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmln
aHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxX
aWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKQEAgLTcxOSwxMyArNzE5LDEzIEBAIHZvaWQg
TGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUo
TGVnYWN5Um9vdElubGluZUJvCiAgICAgbGluZUJveC0+cGxhY2VCb3hlc0luSW5saW5lRGlyZWN0
aW9uKGxpbmVMb2dpY2FsTGVmdCwgbmVlZHNXb3JkU3BhY2luZyk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KFJl
bmRlckJsb2NrRmxvdyYgYmxvY2ssIExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIEJpZGlS
dW4qIHByZXZpb3VzUnVuLCBCaWRpUnVuKiBuZXh0UnVuLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGln
biwgYm9vbCBpc0FmdGVyRXhwYW5zaW9uKQorc3RhdGljIGlubGluZSBQQUw6OkV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChSZW5kZXJCbG9ja0Zsb3cm
IGJsb2NrLCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBCaWRpUnVuKiBwcmV2aW91c1J1
biwgQmlkaVJ1biogbmV4dFJ1biwgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIGJvb2wgaXNBZnRl
ckV4cGFuc2lvbikKIHsKICAgICAvLyBUYXRlY2h1eW9rbyBpcyBtb2RlbGVkIGFzIHRoZSBPYmpl
Y3QgUmVwbGFjZW1lbnQgQ2hhcmFjdGVyIChVK0ZGRkMpLCB3aGljaCBjYW4gbmV2ZXIgaGF2ZSBl
eHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbnNpZGUgbm9yIGludHJpbnNpY2FsbHkgYWRqYWNlbnQg
dG8gaXQuCiAgICAgaWYgKHRleHRCb3gucmVuZGVyZXIoKS5zdHlsZSgpLnRleHRDb21iaW5lKCkg
PT0gVGV4dENvbWJpbmU6Okhvcml6b250YWwpCi0gICAgICAgIHJldHVybiBGb3JiaWRMZWZ0RXhw
YW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb247CisgICAgICAgIHJldHVybiBQQUw6OkZvcmJp
ZExlZnRFeHBhbnNpb24gfCBQQUw6OkZvcmJpZFJpZ2h0RXhwYW5zaW9uOwogCi0gICAgRXhwYW5z
aW9uQmVoYXZpb3IgcmVzdWx0ID0gMDsKKyAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yIHJlc3Vs
dCA9IDA7CiAgICAgYm9vbCBzZXRMZWZ0RXhwYW5zaW9uID0gZmFsc2U7CiAgICAgYm9vbCBzZXRS
aWdodEV4cGFuc2lvbiA9IGZhbHNlOwogICAgIGlmICh0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeSkgewpAQCAtNzM4LDcgKzczOCw3IEBAIHN0YXRpYyBpbmxpbmUgRXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KFJlbmRlckJsb2NrRmxv
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBsZWZ0RXhwYW5zaW9uT3Bw
b3J0dW5pdHkgZG9lc24ndCBhY3R1YWxseSB3b3JrIGJlY2F1c2UgaXQgZG9lc24ndCBwZXJmb3Jt
IHRoZSBVQkEKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGb250Q2FzY2FkZTo6bGVmdEV4
cGFuc2lvbk9wcG9ydHVuaXR5KGRvd25jYXN0PFJlbmRlclRleHQ+KGxlYWZDaGlsZC0+cmVuZGVy
ZXIoKSkuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigpKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldFJpZ2h0RXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gRm9yY2VSaWdodEV4cGFuc2lvbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gUEFMOjpGb3JjZVJpZ2h0RXhwYW5zaW9uOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNzUzLDcgKzc1Myw3IEBAIHN0YXRpYyBpbmxpbmUgRXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KFJlbmRlckJsb2NrRmxvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBsZWZ0RXhwYW5zaW9uT3Bwb3J0
dW5pdHkgZG9lc24ndCBhY3R1YWxseSB3b3JrIGJlY2F1c2UgaXQgZG9lc24ndCBwZXJmb3JtIHRo
ZSBVQkEKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGb250Q2FzY2FkZTo6cmlnaHRFeHBh
bnNpb25PcHBvcnR1bml0eShkb3duY2FzdDxSZW5kZXJUZXh0PihsZWFmQ2hpbGQtPnJlbmRlcmVy
KCkpLnN0cmluZ1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRMZWZ0RXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgfD0gRm9yY2VMZWZ0RXhwYW5zaW9uOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KQEAgLTc2NCw0NCArNzY0LDQ0IEBAIHN0YXRpYyBpbmxpbmUgRXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KFJlbmRlckJsb2NrRmxvCiAgICAg
ICAgICAgICBSZW5kZXJSdWJ5QmFzZSYgcnVieUJhc2UgPSBkb3duY2FzdDxSZW5kZXJSdWJ5QmFz
ZT4oYmxvY2spOwogICAgICAgICAgICAgaWYgKCZ0ZXh0Qm94ID09IHJ1YnlCYXNlLmZpcnN0Um9v
dEJveCgpLT5maXJzdExlYWZEZXNjZW5kYW50KCkpIHsKICAgICAgICAgICAgICAgICBzZXRMZWZ0
RXhwYW5zaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXN1bHQgfD0gRm9yYmlkTGVmdEV4
cGFuc2lvbjsKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gUEFMOjpGb3JiaWRMZWZ0RXhwYW5z
aW9uOwogICAgICAgICAgICAgfSBpZiAoJnRleHRCb3ggPT0gcnVieUJhc2UuZmlyc3RSb290Qm94
KCktPmxhc3RMZWFmRGVzY2VuZGFudCgpKSB7CiAgICAgICAgICAgICAgICAgc2V0UmlnaHRFeHBh
bnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBGb3JiaWRSaWdodEV4cGFu
c2lvbjsKKyAgICAgICAgICAgICAgICByZXN1bHQgfD0gUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lv
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIXNldExlZnRFeHBh
bnNpb24pCi0gICAgICAgIHJlc3VsdCB8PSBpc0FmdGVyRXhwYW5zaW9uID8gRm9yYmlkTGVmdEV4
cGFuc2lvbiA6IEFsbG93TGVmdEV4cGFuc2lvbjsKKyAgICAgICAgcmVzdWx0IHw9IGlzQWZ0ZXJF
eHBhbnNpb24gPyBQQUw6OkZvcmJpZExlZnRFeHBhbnNpb24gOiBQQUw6OkFsbG93TGVmdEV4cGFu
c2lvbjsKICAgICBpZiAoIXNldFJpZ2h0RXhwYW5zaW9uKQotICAgICAgICByZXN1bHQgfD0gQWxs
b3dSaWdodEV4cGFuc2lvbjsKKyAgICAgICAgcmVzdWx0IHw9IFBBTDo6QWxsb3dSaWdodEV4cGFu
c2lvbjsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlF
eHBhbnNpb25CZWhhdmlvcihMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUV4cGFu
c2lvbkJlaGF2aW9yKExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIFBBTDo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCiB7Ci0gICAgc3dpdGNoIChleHBhbnNpb25CZWhh
dmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSB7Ci0gICAgY2FzZSBGb3JjZUxlZnRFeHBhbnNpb246
CisgICAgc3dpdGNoIChleHBhbnNpb25CZWhhdmlvciAmIFBBTDo6TGVmdEV4cGFuc2lvbk1hc2sp
IHsKKyAgICBjYXNlIFBBTDo6Rm9yY2VMZWZ0RXhwYW5zaW9uOgogICAgICAgICB0ZXh0Qm94LnNl
dEZvcmNlTGVmdEV4cGFuc2lvbigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvcmJpZExl
ZnRFeHBhbnNpb246CisgICAgY2FzZSBQQUw6OkZvcmJpZExlZnRFeHBhbnNpb246CiAgICAgICAg
IHRleHRCb3guc2V0Q2FuSGF2ZUxlZnRFeHBhbnNpb24oZmFsc2UpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFsbG93TGVmdEV4cGFuc2lvbjoKKyAgICBjYXNlIFBBTDo6QWxsb3dMZWZ0RXhw
YW5zaW9uOgogICAgICAgICB0ZXh0Qm94LnNldENhbkhhdmVMZWZ0RXhwYW5zaW9uKHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHN3aXRjaCAoZXhwYW5zaW9uQmVoYXZpb3Ig
JiBSaWdodEV4cGFuc2lvbk1hc2spIHsKLSAgICBjYXNlIEZvcmNlUmlnaHRFeHBhbnNpb246Cisg
ICAgc3dpdGNoIChleHBhbnNpb25CZWhhdmlvciAmIFBBTDo6UmlnaHRFeHBhbnNpb25NYXNrKSB7
CisgICAgY2FzZSBQQUw6OkZvcmNlUmlnaHRFeHBhbnNpb246CiAgICAgICAgIHRleHRCb3guc2V0
Rm9yY2VSaWdodEV4cGFuc2lvbigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvcmJpZFJp
Z2h0RXhwYW5zaW9uOgorICAgIGNhc2UgUEFMOjpGb3JiaWRSaWdodEV4cGFuc2lvbjoKICAgICAg
ICAgdGV4dEJveC5zZXRDYW5IYXZlUmlnaHRFeHBhbnNpb24oZmFsc2UpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEFsbG93UmlnaHRFeHBhbnNpb246CisgICAgY2FzZSBQQUw6OkFsbG93Umln
aHRFeHBhbnNpb246CiAgICAgICAgIHRleHRCb3guc2V0Q2FuSGF2ZVJpZ2h0RXhwYW5zaW9uKHRy
dWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtODk3LDE0ICs4OTcsMTQgQEAg
QmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvclNlZ21lbnQoTGVnYWN5Um9vdEkKICAgICBCaWRpUnVuKiBwcmV2aW91c1J1biA9IG51bGxw
dHI7CiAgICAgZm9yICg7IHJ1bjsgcnVuID0gcnVuLT5uZXh0KCkpIHsKICAgICAgICAgYXV0byBj
b21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyA9IFsmZXhwYW5zaW9uT3Bwb3J0dW5pdGllcywg
JmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIHRleHRBbGlnbiwgJmlzQWZ0ZXJFeHBhbnNpb25d
IChSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLAotICAgICAgICAgICAgTGVnYWN5SW5saW5lVGV4dEJv
eCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4qIG5leHRSdW4sIFN0cmlu
Z1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCisgICAgICAgICAgICBM
ZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBCaWRpUnVuKiBwcmV2aW91c1J1biwgQmlkaVJ1
biogbmV4dFJ1biwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24gZGly
ZWN0aW9uKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoc3RyaW5nVmlldy5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAvLyBFbXB0eSBydW5zIHNob3VsZCBzdGlsbCBwcm9kdWNlIGFu
IGVudHJ5IGluIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgbGlzdCBzbyB0aGF0IHRoZSBudW1iZXIg
b2YgaXRlbXMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHJ1bnMuCiAgICAgICAgICAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVo
YXZpb3IgPSBleHBhbnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3goYmxvY2ssIHRleHRCb3gs
IHByZXZpb3VzUnVuLCBuZXh0UnVuLCB0ZXh0QWxpZ24sIGlzQWZ0ZXJFeHBhbnNpb24pOworICAg
ICAgICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IGV4cGFu
c2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChibG9jaywgdGV4dEJveCwgcHJldmlvdXNSdW4s
IG5leHRSdW4sIHRleHRBbGlnbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAgICAgICBhcHBs
eUV4cGFuc2lvbkJlaGF2aW9yKHRleHRCb3gsIGV4cGFuc2lvbkJlaGF2aW9yKTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1bjsKICAgICAgICAgICAgIHN0ZDo6dGllKG9w
cG9ydHVuaXRpZXNJblJ1biwgaXNBZnRlckV4cGFuc2lvbikgPSBGb250Q2FzY2FkZTo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudChzdHJpbmdWaWV3LCBkaXJlY3Rpb24sIGV4cGFuc2lvbkJlaGF2
aW9yKTsKQEAgLTEwOTEsNyArMTA5MSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmluZEZp
cnN0VHJhaWxpbmdTcGFjZShjb25zdCBSZW5kZXJUZXh0JiBsYXN0VGV4dCwgY29uc3QKICAgICBy
ZXR1cm4gZmlyc3RTcGFjZTsKIH0KIAotaW5saW5lIEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlvdXQ6
OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgQmlk
aUNvbnRleHQqIGN1cnJlbnRDb250ZXh0KQoraW5saW5lIEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlv
dXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlS
dW5zLCBQQUw6OkJpZGlDb250ZXh0KiBjdXJyZW50Q29udGV4dCkKIHsKICAgICBpZiAoIWJpZGlS
dW5zLnJ1bkNvdW50KCkKICAgICAgICAgfHwgIWJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKS0+
cmVuZGVyZXIoKS5zdHlsZSgpLmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpCkBAIC0xMTEzLDE3
ICsxMTEzLDE3IEBAIGlubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFp
bGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkCiAgICAgaWYgKGZpcnN0U3BhY2Ug
PT0gdHJhaWxpbmdTcGFjZVJ1bi0+c3RvcCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICBi
b29sIHNob3VsZFJlb3JkZXIgPSB0cmFpbGluZ1NwYWNlUnVuICE9IChkaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6TFRSID8gYmlkaVJ1bnMubGFzdFJ1bigpIDogYmlkaVJ1bnMuZmlyc3RSdW4o
KSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9u
KCk7CisgICAgYm9vbCBzaG91bGRSZW9yZGVyID0gdHJhaWxpbmdTcGFjZVJ1biAhPSAoZGlyZWN0
aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gYmlkaVJ1bnMubGFzdFJ1bigpIDogYmlk
aVJ1bnMuZmlyc3RSdW4oKSk7CiAgICAgaWYgKGZpcnN0U3BhY2UgIT0gdHJhaWxpbmdTcGFjZVJ1
bi0+c3RhcnQoKSkgewotICAgICAgICBCaWRpQ29udGV4dCogYmFzZUNvbnRleHQgPSBjdXJyZW50
Q29udGV4dDsKLSAgICAgICAgd2hpbGUgKEJpZGlDb250ZXh0KiBwYXJlbnQgPSBiYXNlQ29udGV4
dC0+cGFyZW50KCkpCisgICAgICAgIFBBTDo6QmlkaUNvbnRleHQqIGJhc2VDb250ZXh0ID0gY3Vy
cmVudENvbnRleHQ7CisgICAgICAgIHdoaWxlIChQQUw6OkJpZGlDb250ZXh0KiBwYXJlbnQgPSBi
YXNlQ29udGV4dC0+cGFyZW50KCkpCiAgICAgICAgICAgICBiYXNlQ29udGV4dCA9IHBhcmVudDsK
IAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gbmV3VHJhaWxpbmdSdW4gPSBtYWtl
VW5pcXVlPEJpZGlSdW4+KGZpcnN0U3BhY2UsIHRyYWlsaW5nU3BhY2VSdW4tPm1fc3RvcCwgdHJh
aWxpbmdTcGFjZVJ1bi0+cmVuZGVyZXIoKSwgYmFzZUNvbnRleHQsIFVfT1RIRVJfTkVVVFJBTCk7
CiAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fc3RvcCA9IGZpcnN0U3BhY2U7CiAgICAgICAg
IHRyYWlsaW5nU3BhY2VSdW4gPSBuZXdUcmFpbGluZ1J1bi5nZXQoKTsKLSAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBiaWRpUnVucy5hcHBlbmRSdW4o
V1RGTW92ZShuZXdUcmFpbGluZ1J1bikpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBiaWRp
UnVucy5wcmVwZW5kUnVuKFdURk1vdmUobmV3VHJhaWxpbmdSdW4pKTsKQEAgLTExMzIsNyArMTEz
Miw3IEBAIGlubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1Nw
YWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkCiAgICAgaWYgKCFzaG91bGRSZW9yZGVyKQog
ICAgICAgICByZXR1cm4gdHJhaWxpbmdTcGFjZVJ1bjsKIAotICAgIGlmIChkaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikgewogICAgICAgICBiaWRpUnVucy5tb3ZlUnVuVG9FbmQodHJhaWxpbmdTcGFj
ZVJ1bik7CiAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fbGV2ZWwgPSAwOwogICAgIH0gZWxz
ZSB7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0VXBSZXNvbHZl
clRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsCiB9CiAKIC8v
IEZJWE1FOiBCaWRpUmVzb2x2ZXIgc2hvdWxkIGhhdmUgdGhpcyBsb2dpYy4KLXN0YXRpYyBpbmxp
bmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJlc29sdmVyJiB0
b3BSZXNvbHZlciwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJ
bmxpbmVJdGVyYXRvciYgZW5kT2ZSdW5zLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlk
ZSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCitzdGF0aWMgaW5saW5lIHZvaWQgY29u
c3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIs
IFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJ
dGVyYXRvciYgZW5kT2ZSdW5zLCBQQUw6OlZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRl
LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHBhc3MgYSBCaWRpUnVuTGlzdCBpbnRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBpbnN0ZWFk
CiAgICAgLy8gb2YgdGhlIHJlc29sdmVyIG93bmluZyB0aGUgcnVucy4KQEAgLTExOTIsMTkgKzEx
OTIsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJ
bmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLAogICAgICAgICAvLyB0cmVlIHRvIHNlZSB3
aGljaCBwYXJlbnQgaW5saW5lIGlzIHRoZSBpc29sYXRlLiBXZSBjb3VsZCBjaGFuZ2UgZW50ZXJJ
c29sYXRlCiAgICAgICAgIC8vIHRvIHRha2UgYSBSZW5kZXJPYmplY3QgYW5kIGRvIHRoaXMgbG9n
aWMgdGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIGEgbGF5ZXJpbmcKICAgICAgICAgLy8gdmlvbGF0
aW9uIGZvciBCaWRpUmVzb2x2ZXIgKHdoaWNoIGtub3dzIG5vdGhpbmcgYWJvdXQgUmVuZGVyT2Jq
ZWN0KS4KLSAgICAgICAgUmVuZGVySW5saW5lKiBpc29sYXRlZElubGluZSA9IGRvd25jYXN0PFJl
bmRlcklubGluZT4oaGlnaGVzdENvbnRhaW5pbmdJc29sYXRlV2l0aGluUm9vdChzdGFydE9iamVj
dCwgY3VycmVudFJvb3QpKTsKKyAgICAgICAgUmVuZGVySW5saW5lKiBpc29sYXRlZElubGluZSA9
IGRvd25jYXN0PFJlbmRlcklubGluZT4oUEFMOjpoaWdoZXN0Q29udGFpbmluZ0lzb2xhdGVXaXRo
aW5Sb290KHN0YXJ0T2JqZWN0LCBjdXJyZW50Um9vdCkpOwogICAgICAgICBBU1NFUlQoaXNvbGF0
ZWRJbmxpbmUpOwogCiAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciBpc29sYXRlZFJlc29sdmVy
OwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBpc29sYXRlZElubGluZS0+c3R5
bGUoKS51bmljb2RlQmlkaSgpOwotICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAg
ICAgICAgaWYgKHVuaWNvZGVCaWRpID09IFBsYWludGV4dCkKKyAgICAgICAgUEFMOjpFVW5pY29k
ZUJpZGkgdW5pY29kZUJpZGkgPSBpc29sYXRlZElubGluZS0+c3R5bGUoKS51bmljb2RlQmlkaSgp
OworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgICAgICBpZiAodW5p
Y29kZUJpZGkgPT0gUEFMOjpQbGFpbnRleHQpCiAgICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rp
b25hbGl0eShkaXJlY3Rpb24sIExlZ2FjeUlubGluZUl0ZXJhdG9yKGlzb2xhdGVkSW5saW5lLCAm
aXNvbGF0ZWRSdW4ub2JqZWN0LCAwKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKHVuaWNvZGVCaWRpID09IElzb2xhdGUgfHwgdW5pY29kZUJpZGkgPT0gSXNvbGF0ZU92ZXJy
aWRlKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmljb2RlQmlkaSA9PSBQQUw6Oklzb2xhdGUgfHwg
dW5pY29kZUJpZGkgPT0gUEFMOjpJc29sYXRlT3ZlcnJpZGUpOwogICAgICAgICAgICAgZGlyZWN0
aW9uID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgaXNvbGF0ZWRSZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlz
T3ZlcnJpZGUodW5pY29kZUJpZGkpKSk7CisgICAgICAgIGlzb2xhdGVkUmVzb2x2ZXIuc2V0U3Rh
dHVzKFBBTDo6QmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUodW5pY29kZUJpZGkpKSk7
CiAKICAgICAgICAgc2V0VXBSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKGlzb2xhdGVkUmVzb2x2
ZXIsIHRvcFJlc29sdmVyLCBpc29sYXRlZFJ1bi5ydW5Ub1JlcGxhY2UsIGlzb2xhdGVkSW5saW5l
LCAmc3RhcnRPYmplY3QpOwogCkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVz
b2x2ZXIsCiAgICAgICAgIC8vIFdlIHN0b3AgYXQgdGhlIG5leHQgZW5kIG9mIGxpbmU7IHdlIG1h
eSByZS1lbnRlciB0aGlzIGlzb2xhdGUgaW4gdGhlIG5leHQgY2FsbCB0byBjb25zdHJ1Y3RCaWRp
UnVucygpLgogICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgZW5kIGFuZCBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkgYmU/CiAgICAgICAgIC8vIHJuaXdhIHNheXMgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5IGlzIGp1c3QgYSBXaW5JRSBoYWNrIGFuZCBjb3VsZCBhbHdheXMgYmUgZmFsc2Ug
aGVyZT8KLSAgICAgICAgaXNvbGF0ZWRSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5k
T2ZSdW5zLCBOb1Zpc3VhbE92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOworICAg
ICAgICBpc29sYXRlZFJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmRPZlJ1bnMsIFBB
TDo6Tm9WaXN1YWxPdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGRvIG5vdCBkZWxldGUgdGhlIHJ1bnMgZnJvbSB0aGUgcmVzb2x2ZXIu
CiAgICAgICAgIC8vIFdlJ3JlIG5vdCBndWFyYW50ZWVkIHRvIGdldCBhbnkgQmlkaVJ1bnMgaW4g
dGhlIHByZXZpb3VzIHN0ZXAuIElmIHdlIGRvbid0LCB3ZSBhbGxvdyB0aGUgcGxhY2Vob2xkZXIK
ICAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHR1cm5lZCBpbnRvIGFuIElubGluZUJveC4gV2UgY2Fu
J3QgcmVtb3ZlIGl0IGhlcmUgd2l0aG91dCBwb3RlbnRpYWxseSBsb3NpbmcgdHJhY2sgb2YKQEAg
LTEyMzcsNyArMTIzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0Zv
clNlZ21lbnQoSW5saW5lQmlkaVJlc29sdmVyJiB0b3BSZXNvbHZlciwKIH0KIAogLy8gVGhpcyBm
dW5jdGlvbiBjb25zdHJ1Y3RzIGxpbmUgYm94ZXMgZm9yIGFsbCBvZiB0aGUgdGV4dCBydW5zIGlu
IHRoZSByZXNvbHZlciBhbmQgY29tcHV0ZXMgdGhlaXIgcG9zaXRpb24uCi1MZWdhY3lSb290SW5s
aW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5z
aWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExl
Z2FjeUlubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiBsaW5lSW5mbywgVmVydGljYWxQb3Np
dGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VS
dW4sIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCitMZWdhY3lSb290SW5saW5l
Qm94KiBMZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWdu
ZWQgYmlkaUxldmVsLCBQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3Qg
TGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZCwgTGluZUluZm8mIGxpbmVJbmZvLCBWZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgQmlkaVJ1biogdHJhaWxpbmdTcGFj
ZVJ1biwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykKIHsKICAgICBpZiAoIWJp
ZGlSdW5zLnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTMzOCw3ICsx
MzM4LDcgQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGEKICAgICAvLyBXZSBhbHNvIGZpbmQgdGhl
IGZpcnN0IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuIFdlIHdpbGwgYWRkIHRo
ZW0gYmFjawogICAgIC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIGFibGUgdG8gc3luY2hy
b25pemUgYWZ0ZXIgaGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5lcy4KICAgICBMZWdhY3lJbmxp
bmVJdGVyYXRvciBjbGVhbkxpbmVTdGFydDsKLSAgICBCaWRpU3RhdHVzIGNsZWFuTGluZUJpZGlT
dGF0dXM7CisgICAgUEFMOjpCaWRpU3RhdHVzIGNsZWFuTGluZUJpZGlTdGF0dXM7CiAgICAgaWYg
KCFsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSAmJiBzdGFydExpbmUpCiAgICAgICAgIGRldGVy
bWluZUVuZFBvc2l0aW9uKGxheW91dFN0YXRlLCBzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBj
bGVhbkxpbmVCaWRpU3RhdHVzKTsKIApAQCAtMTM3OCw3ICsxMzc4LDcgQEAgaW5saW5lIGNvbnN0
IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBMZWdhY3lMaW5lTGF5b3V0OjpyZXN0YXJ0TGF5b3V0UnVu
c0FuZEZsb2F0c0kKICAgICByZXR1cm4gb2xkRW5kOwogfQogCi12b2lkIExlZ2FjeUxpbmVMYXlv
dXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJh
dG9yJiBjbGVhbkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1
cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCit2b2lkIExlZ2FjeUxpbmVM
YXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0
ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBjbGVhbkxpbmVC
aWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcykKIHsKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgYm9vbCBwYWdpbmF0
ZWQgPSBsYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSAmJiBsYXlvdXRDb250ZXh0KCkubGF5
b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKTsKQEAgLTE0MzEsMTUgKzE0MzEsMTUgQEAgdm9pZCBM
ZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLAogICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCiAgICAgICAg
ICAgICAgICAgbGFzdFJvb3RCb3goKS0+c2V0TGluZUJyZWFrSW5mbyhlbmQucmVuZGVyZXIoKSwg
ZW5kLm9mZnNldCgpLCByZXNvbHZlci5zdGF0dXMoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSA9IChzdHlsZVRvVXNlLnJ0
bE9yZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbCA/IChzdHlsZVRvVXNlLmRpcmVjdGlvbigpID09
IFRleHREaXJlY3Rpb246OkxUUiA/IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1YWxS
aWdodFRvTGVmdE92ZXJyaWRlKSA6IE5vVmlzdWFsT3ZlcnJpZGUpOworICAgICAgICAgICAgUEFM
OjpWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSA9IChzdHlsZVRvVXNlLnJ0bE9yZGVy
aW5nKCkgPT0gT3JkZXI6OlZpc3VhbCA/IChzdHlsZVRvVXNlLmRpcmVjdGlvbigpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSID8gUEFMOjpWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogUEFM
OjpWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlKSA6IFBBTDo6Tm9WaXN1YWxPdmVycmlkZSk7CiAK
LSAgICAgICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHlsZVRvVXNlLnVuaWNvZGVC
aWRpKCkgPT0gUGxhaW50ZXh0ICYmICFyZXNvbHZlci5jb250ZXh0KCktPnBhcmVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZVRvVXNlLmRpcmVj
dGlvbigpOworICAgICAgICAgICAgaWYgKGlzTmV3VUJBUGFyYWdyYXBoICYmIHN0eWxlVG9Vc2Uu
dW5pY29kZUJpZGkoKSA9PSBQQUw6OlBsYWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5w
YXJlbnQoKSkgeworICAgICAgICAgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24g
PSBzdHlsZVRvVXNlLmRpcmVjdGlvbigpOwogICAgICAgICAgICAgICAgIGRldGVybWluZURpcmVj
dGlvbmFsaXR5KGRpcmVjdGlvbiwgcmVzb2x2ZXIucG9zaXRpb24oKSk7Ci0gICAgICAgICAgICAg
ICAgcmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHN0
eWxlVG9Vc2UudW5pY29kZUJpZGkoKSkpKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlci5zZXRT
dGF0dXMoUEFMOjpCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZVRvVXNlLnVu
aWNvZGVCaWRpKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBvd25lcnNoaXAgaXMgcmV2ZXJzZWQuIFdlIHNob3VsZCBvd24gdGhlIEJpZGlSdW5MaXN0IGFu
ZCBwYXNzIGl0IHRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4KLSAgICAgICAgICAgIEJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucyA9IHJlc29sdmVyLnJ1bnMoKTsKKyAgICAgICAgICAgIFBB
TDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zID0gcmVzb2x2ZXIucnVucygpOwogICAg
ICAgICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHJlc29sdmVyLCBiaWRpUnVucywg
ZW5kLCBvdmVycmlkZSwgbGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKSA9PSBlbmQp
OwogCkBAIC0xNTI3LDcgKzE1MjcsNyBAQCB2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1
bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgICAg
IH0KIAogICAgICAgICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5yZXNldCgpOwotICAg
ICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihlbmQsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhl
bmQpKTsKKyAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kLCBQQUw6Om51bWJlck9mSXNv
bGF0ZUFuY2VzdG9ycyhlbmQpKTsKICAgICB9CiAKICAgICAvLyBJbiBjYXNlIHdlIGFscmVhZHkg
YWRqdXN0ZWQgdGhlIGxpbmUgcG9zaXRpb25zIGR1cmluZyB0aGlzIGxheW91dCB0byBhdm9pZCB3
aWRvd3MKQEAgLTE5NjAsMjAgKzE5NjAsMjAgQEAgTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5
TGluZUxheW91dDo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGwKICAg
ICBpZiAobGFzdExpbmUpIHsKICAgICAgICAgbV9mbG93LnNldExvZ2ljYWxIZWlnaHQobGFzdExp
bmUtPmxpbmVCb3hCb3R0b20oKSk7CiAgICAgICAgIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIg
PSBMZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBsYXN0TGluZS0+bGluZUJyZWFrT2JqKCks
IGxhc3RMaW5lLT5saW5lQnJlYWtQb3MoKSk7Ci0gICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9u
KGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7CisgICAgICAgIHJlc29sdmVy
LnNldFBvc2l0aW9uKGl0ZXIsIFBBTDo6bnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGl0ZXIpKTsK
ICAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKGxhc3RMaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVz
KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5
bGUoKS5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKHN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQ
bGFpbnRleHQpCisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZSgp
LmRpcmVjdGlvbigpOworICAgICAgICBpZiAoc3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBBTDo6
UGxhaW50ZXh0KQogICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGlyZWN0aW9u
LCBMZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBmaXJzdElubGluZVJlbmRlcmVyU2tpcHBp
bmdFbXB0eShtX2Zsb3cpLCAwKSk7Ci0gICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3Rh
dHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpKSk7CisgICAg
ICAgIHJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJy
aWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSkpKTsKICAgICAgICAgTGVnYWN5SW5saW5lSXRlcmF0
b3IgaXRlciA9IExlZ2FjeUlubGluZUl0ZXJhdG9yKCZtX2Zsb3csIGZpcnN0SW5saW5lUmVuZGVy
ZXJTa2lwcGluZ0VtcHR5KG1fZmxvdywgJnJlc29sdmVyKSwgMCk7Ci0gICAgICAgIHJlc29sdmVy
LnNldFBvc2l0aW9uKGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7CisgICAg
ICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKGl0ZXIsIFBBTDo6bnVtYmVyT2ZJc29sYXRlQW5jZXN0
b3JzKGl0ZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIGN1cnJlbnRMaW5lOwogfQogCi12b2lkIExl
Z2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIExlZ2FjeVJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgTGVnYWN5SW5saW5lSXRl
cmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKQor
dm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBMZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlu
bGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgUEFMOjpCaWRpU3RhdHVzJiBjbGVhbkxpbmVC
aWRpU3RhdHVzKQogewogICAgIGF1dG8gaXRlcmF0b3JGb3JGaXJzdERpcnR5RmxvYXQgPSBbXShM
aW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdCYgZmxvYXRzKSB7CiAgICAgICAgIGF1dG8gbGFzdENs
ZWFuRmxvYXQgPSBmbG9hdHMubGFzdENsZWFuRmxvYXQoKTsKQEAgLTIwODUsNyArMjA4NSw3IEBA
IGJvb2wgTGVnYWN5TGluZUxheW91dDo6bGluZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNoYW5nZWQo
TGVnYWN5Um9vdElubGluZUJveCogcm9vCiAgICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExp
bmVXaWR0aCgpICE9IG1fZmxvdy5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KGN1cnJl
bnRGcmFnbWVudCk7CiB9CiAKLWJvb2wgTGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUo
TGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3Qg
QmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cykKK2Jvb2wgTGVnYWN5TGluZUxheW91dDo6bWF0Y2hl
ZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVJl
c29sdmVyJiByZXNvbHZlciwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFy
dCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKQogewogICAgIGlmIChyZXNv
bHZlci5wb3NpdGlvbigpID09IGVuZExpbmVTdGFydCkgewogICAgICAgICBpZiAocmVzb2x2ZXIu
c3RhdHVzKCkgIT0gZW5kTGluZVN0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5TGluZUxheW91dC5oCmluZGV4IDEyYWQ3Yzk1ODAzNmYzNTUxMjQ3Y2Y1NTBiMjIwMjc2ZDNj
NmU3YzguLmU5YWM0ODcyMGM1ZTViYmQ3MDg0N2NiN2I1MTliOWM3YmJjNTMwMDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuaApAQCAtMzEsOSArMzEsMTQg
QEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlRyYWlsaW5n
T2JqZWN0cy5oIgogCituYW1lc3BhY2UgUEFMIHsKK2NsYXNzIEJpZGlDb250ZXh0OwordGVtcGxh
dGUgPGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJ1bkxpc3Q7CitzdHJ1Y3QgQmlkaVN0YXR1czsKK30K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCaWRpQ29udGV4dDsKIGNsYXNzIEZsb2F0
aW5nT2JqZWN0OwogY2xhc3MgRmxvYXRXaXRoUmVjdDsKIGNsYXNzIEZyYW1lVmlld0xheW91dENv
bnRleHQ7CkBAIC00NiwxMCArNTEsOCBAQCBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5k
ZXJSdWJ5UnVuOwogY2xhc3MgTGVnYWN5Um9vdElubGluZUJveDsKIGNsYXNzIFZlcnRpY2FsUG9z
aXRpb25DYWNoZTsKLXN0cnVjdCBCaWRpU3RhdHVzOwogc3RydWN0IFdvcmRNZWFzdXJlbWVudDsK
IAotdGVtcGxhdGUgPGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJ1bkxpc3Q7CiB0eXBlZGVmIFZlY3Rv
cjxXb3JkTWVhc3VyZW1lbnQsIDY0PiBXb3JkTWVhc3VyZW1lbnRzOwogCiBjbGFzcyBMZWdhY3lM
aW5lTGF5b3V0IHsKQEAgLTY2LDE0ICs2OSwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGxheW91
dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dp
Y2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAKLSAgICBMZWdhY3lS
b290SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgY29uc3Qg
TGluZUluZm8mKTsKKyAgICBMZWdhY3lSb290SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5lKFBBTDo6
QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBjb25zdCBMaW5lSW5mbyYpOwogICAgIGJvb2wgcG9zaXRp
b25OZXdGbG9hdE9uTGluZShjb25zdCBGbG9hdGluZ09iamVjdCYgbmV3RmxvYXQsIEZsb2F0aW5n
T2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBMaW5lSW5mbyYsIExpbmVXaWR0aCYp
OwogICAgIHZvaWQgYWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKTsKIAogICAgIHNpemVf
dCBsaW5lQ291bnQoKSBjb25zdDsKICAgICBzaXplX3QgbGluZUNvdW50VW50aWwoY29uc3QgTGVn
YWN5Um9vdElubGluZUJveCopIGNvbnN0OwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zv
ck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVy
T2JqZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kUnVu
c0Zvck9iamVjdChQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+KiwgaW50IHN0YXJ0LCBpbnQgZW5k
LCBSZW5kZXJPYmplY3QmLCBJbmxpbmVCaWRpUmVzb2x2ZXImKTsKICAgICBzdGF0aWMgdm9pZCB1
cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgVGV4
dEFsaWduTW9kZSYsIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqLCBCaWRpUnVuKiB0cmFpbGlu
Z1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwg
ZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQpOwogCiBwcml2YXRlOgpAQCAtODksMjAgKzkyLDIwIEBAIHByaXZhdGU6CiAgICAgQmlkaVJ1
biogY29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQoTGVnYWN5Um9vdElu
bGluZUJveCosIGNvbnN0IExpbmVJbmZvJiwgVGV4dEFsaWduTW9kZSwgZmxvYXQmIGxvZ2ljYWxM
ZWZ0LCBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
LCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9pZCBy
ZW1vdmVJbmxpbmVCb3goQmlkaVJ1biYsIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmKSBjb25z
dDsKICAgICB2b2lkIGNvbXB1dGVCbG9ja0RpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoTGVnYWN5
Um9vdElubGluZUJveCosIEJpZGlSdW4qIGZpcnN0UnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOwotICAg
IGlubGluZSBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBjdXJyZW50Q29udGV4dCk7CisgICAgaW5saW5lIEJp
ZGlSdW4qIGhhbmRsZVRyYWlsaW5nU3BhY2VzKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJp
ZGlSdW5zLCBQQUw6OkJpZGlDb250ZXh0KiBjdXJyZW50Q29udGV4dCk7CiAgICAgdm9pZCBhcHBl
bmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoRmxvYXRpbmdPYmplY3QmKTsKLSAgICBMZWdhY3lS
b290SW5saW5lQm94KiBjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxl
dmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGluZUl0
ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiwgQmlkaVJ1biog
dHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1cmVtZW50cyYpOworICAgIExlZ2FjeVJvb3RJbmxp
bmVCb3gqIGNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyh1bnNpZ25lZCBiaWRpTGV2ZWwsIFBB
TDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVy
YXRvciYgZW5kLCBMaW5lSW5mbyYsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYsIEJpZGlSdW4qIHRy
YWlsaW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmKTsKICAgICB2b2lkIGxheW91dFJ1bnNB
bmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiwgYm9vbCBoYXNJbmxpbmVDaGlsZCk7CiAgICAgaW5s
aW5lIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiByZXN0YXJ0TGF5b3V0UnVuc0FuZEZsb2F0
c0luUmFuZ2UoTGF5b3V0VW5pdCBvbGRMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IG5ld0xvZ2lj
YWxIZWlnaHQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJbmxp
bmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIG9sZEVuZCk7Ci0g
ICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmLCBJbmxp
bmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3Rh
cnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNl
Y3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKKyAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHNJblJh
bmdlKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IExlZ2FjeUlu
bGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBjbGVh
bkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAg
ICAgdm9pZCByZWF0dGFjaENsZWFuTGluZUZsb2F0cyhMZWdhY3lSb290SW5saW5lQm94JiBjbGVh
bkxpbmUsIExheW91dFVuaXQgZGVsdGEsIGJvb2wgaXNGaXJzdENsZWFuTGluZSk7CiAgICAgdm9p
ZCBsaW5rVG9FbmRMaW5lSWZOZWVkZWQoTGluZUxheW91dFN0YXRlJik7CiAgICAgdm9pZCBjaGVj
a0Zsb2F0SW5DbGVhbkxpbmUoTGVnYWN5Um9vdElubGluZUJveCYgY2xlYW5MaW5lLCBSZW5kZXJC
b3gmIGZsb2F0Qm94T25DbGVhbkxpbmUsIEZsb2F0V2l0aFJlY3QmIG1hdGNoaW5nRmxvYXRXaXRo
UmVjdCwgYm9vbCYgZW5jb3VudGVyZWROZXdGbG9hdCwgYm9vbCYgZGlydGllZEJ5RmxvYXQpOwog
ICAgIExlZ2FjeVJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91
dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVyJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVFbmRQb3Np
dGlvbihMaW5lTGF5b3V0U3RhdGUmLCBMZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExl
Z2FjeUlubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5l
QmlkaVN0YXR1cyk7CisgICAgdm9pZCBkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3Rh
dGUmLCBMZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9y
JiBjbGVhbkxpbmVTdGFydCwgUEFMOjpCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsK
ICAgICBib29sIGNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3Rh
dGUmKTsKICAgICBib29sIGxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKExlZ2FjeVJv
b3RJbmxpbmVCb3gqIHJvb3RCb3gsIExheW91dFVuaXQgbGluZURlbHRhLCBSZW5kZXJGcmFnbWVu
dGVkRmxvdyopIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRl
JiwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3Im
IGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cyk7CisgICAgYm9v
bCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmLCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2
ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBjb25zdCBQQUw6
OkJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpOwogICAgIHZvaWQgZGVsZXRlRWxsaXBzaXNMaW5l
Qm94ZXMoKTsKICAgICB2b2lkIGNoZWNrTGluZXNGb3JUZXh0T3ZlcmZsb3coKTsKICAgICB2b2lk
IHVwZGF0ZUZyYWdtZW50Rm9yTGluZShMZWdhY3lSb290SW5saW5lQm94KikgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAKaW5kZXgg
OGUxYTBmYmVmNTZjZjYxMGVkMTdmYWQ3YzVlODRjYTY0Yzc1ZDAyYi4uNzVhZTRhZjc1ZDQ4MDQ3
NmJiNDU5MGJiNzM0NTE5ZmM0OTIzOGE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lSb290SW5saW5lQm94LmNwcApAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxlZ2FjeVJvb3RJbmxpbmVCb3guaCIKIAotI2luY2x1ZGUg
IkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyUnVieVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
VmVydGljYWxQb3NpdGlvbkNhY2hlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaVJlc29sdmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMTk5LDEwICsxOTksMTAgQEAgdm9pZCBMZWdhY3lSb290SW5saW5lQm94OjphZGp1
c3RQb3NpdGlvbihmbG9hdCBkeCwgZmxvYXQgZHkpCiB2b2lkIExlZ2FjeVJvb3RJbmxpbmVCb3g6
OmNoaWxkUmVtb3ZlZChMZWdhY3lJbmxpbmVCb3gqIGJveCkKIHsKICAgICBpZiAoJmJveC0+cmVu
ZGVyZXIoKSA9PSBtX2xpbmVCcmVha09iaikKLSAgICAgICAgc2V0TGluZUJyZWFrSW5mbyhudWxs
cHRyLCAwLCBCaWRpU3RhdHVzKCkpOworICAgICAgICBzZXRMaW5lQnJlYWtJbmZvKG51bGxwdHIs
IDAsIFBBTDo6QmlkaVN0YXR1cygpKTsKIAogICAgIGZvciAoYXV0byogcHJldiA9IHByZXZSb290
Qm94KCk7IHByZXYgJiYgcHJldi0+bGluZUJyZWFrT2JqKCkgPT0gJmJveC0+cmVuZGVyZXIoKTsg
cHJldiA9IHByZXYtPnByZXZSb290Qm94KCkpIHsKLSAgICAgICAgcHJldi0+c2V0TGluZUJyZWFr
SW5mbyhudWxscHRyLCAwLCBCaWRpU3RhdHVzKCkpOworICAgICAgICBwcmV2LT5zZXRMaW5lQnJl
YWtJbmZvKG51bGxwdHIsIDAsIFBBTDo6QmlkaVN0YXR1cygpKTsKICAgICAgICAgcHJldi0+bWFy
a0RpcnR5KCk7CiAgICAgfQogfQpAQCAtNTk4LDEyICs1OTgsMTIgQEAgUmVuZGVyQmxvY2tGbG93
JiBMZWdhY3lSb290SW5saW5lQm94OjpibG9ja0Zsb3coKSBjb25zdAogICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpOwogfQogCi1CaWRpU3RhdHVzIExlZ2Fj
eVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdAorUEFMOjpCaWRpU3Rh
dHVzIExlZ2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdAogeyAK
ICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9saW5lQnJlYWtCaWRp
U3RhdHVzRW9yKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0
YXR1c0xhc3RTdHJvbmcpLCBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9saW5lQnJlYWtC
aWRpU3RhdHVzTGFzdCksIG1fbGluZUJyZWFrQ29udGV4dC5jb3B5UmVmKCkgfTsKIH0KIAotdm9p
ZCBMZWdhY3lSb290SW5saW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCB1bnNpZ25lZCBicmVha1Bvc2l0aW9uLCBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMpCit2
b2lkIExlZ2FjeVJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiBv
YmplY3QsIHVuc2lnbmVkIGJyZWFrUG9zaXRpb24sIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgc3Rh
dHVzKQogewogICAgIG1fbGluZUJyZWFrT2JqID0gb2JqZWN0OwogICAgIG1fbGluZUJyZWFrUG9z
ID0gYnJlYWtQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lSb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9v
dElubGluZUJveC5oCmluZGV4IGVjZWUyNjRkYjVjMzI5ZjU0ZmRkMDhlZjE5YWFjMDZlMDgwNDM2
ZTUuLmU1OWI2NDYyZTg4MjliNWY2NWVjOTk3NjUxNmFiMjU1NDBmYzM0MDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaApAQCAtMjAsMTEgKzIw
LDE1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQmlkaUNvbnRleHQuaCIKICNpbmNs
dWRlICJMZWdhY3lJbmxpbmVGbG93Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5j
bHVkZSA8cGFsL3RleHQvQmlkaUNvbnRleHQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgog
CituYW1lc3BhY2UgUEFMIHsKK3N0cnVjdCBCaWRpU3RhdHVzOworfQorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC0zMyw3ICszNyw2IEBAIGNsYXNzIExv
Z2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXM7CiBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiBjbGFz
cyBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjsKIAotc3RydWN0IEJpZGlTdGF0dXM7CiBzdHJ1Y3Qg
R2FwUmVjdHM7CiAKIGNsYXNzIExlZ2FjeVJvb3RJbmxpbmVCb3ggOiBwdWJsaWMgTGVnYWN5SW5s
aW5lRmxvd0JveCwgcHVibGljIENhbk1ha2VXZWFrUHRyPExlZ2FjeVJvb3RJbmxpbmVCb3g+IHsK
QEAgLTkxLDggKzk0LDggQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogbGlu
ZUJyZWFrT2JqKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtPYmouZ2V0KCk7IH0KLSAgICBC
aWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdDsKLSAgICB2b2lkIHNldExpbmVC
cmVha0luZm8oUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQgYnJlYWtQb3MsIGNvbnN0IEJpZGlTdGF0
dXMmKTsKKyAgICBQQUw6OkJpZGlTdGF0dXMgbGluZUJyZWFrQmlkaVN0YXR1cygpIGNvbnN0Owor
ICAgIHZvaWQgc2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqLCB1bnNpZ25lZCBicmVha1Bv
cywgY29uc3QgUEFMOjpCaWRpU3RhdHVzJik7CiAKICAgICB1bnNpZ25lZCBsaW5lQnJlYWtQb3Mo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVCcmVha1BvczsgfQogICAgIHZvaWQgc2V0TGluZUJyZWFr
UG9zKHVuc2lnbmVkIHApIHsgbV9saW5lQnJlYWtQb3MgPSBwOyB9CkBAIC0yMDIsNyArMjA1LDcg
QEAgcHJpdmF0ZToKICAgICAvLyBXaGVyZSB0aGlzIGxpbmUgZW5kZWQuIFRoZSBleGFjdCBvYmpl
Y3QgYW5kIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhhdCBvYmplY3QgYXJlIHN0b3JlZCBzbyB0aGF0
CiAgICAgLy8gd2UgY2FuIGNyZWF0ZSBhbiBMZWdhY3lJbmxpbmVJdGVyYXRvciBiZWdpbm5pbmcg
anVzdCBhZnRlciB0aGUgZW5kIG9mIHRoaXMgbGluZS4KICAgICBXZWFrUHRyPFJlbmRlck9iamVj
dD4gbV9saW5lQnJlYWtPYmo7Ci0gICAgUmVmUHRyPEJpZGlDb250ZXh0PiBtX2xpbmVCcmVha0Nv
bnRleHQ7CisgICAgUmVmUHRyPFBBTDo6QmlkaUNvbnRleHQ+IG1fbGluZUJyZWFrQ29udGV4dDsK
IAogICAgIExheW91dFVuaXQgbV9saW5lVG9wOwogICAgIExheW91dFVuaXQgbV9saW5lQm90dG9t
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzU2NjJlNmIw
MzFjNTM1MWUwOGU1ODg0NGRiNGI5OTAzMzY3M2E3OC4uZDE0ZTJlOWE2YjU5ZTkyODRiZmJmYzEw
NTlmYjFjNjE5NGI0MzU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCkBAIC0zMDg3LDkgKzMwODcsOSBAQCBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVuZGVy
TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJSZW5kZXJCbG9jayI7CiB9CiAKLVRleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZs
YWdzIGZsYWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihTdHJpbmdW
aWV3IHN0cmluZ1ZpZXcsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUEFMOjpFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKLSAgICBhdXRvIHRleHRE
aXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0g
c3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsOwogICAgIGlmIChmbGFncyAhPSBE
ZWZhdWx0VGV4dFJ1bkZsYWdzKSB7CiAgICAgICAgIGlmIChmbGFncyAmIFJlc3BlY3REaXJlY3Rp
b24pCkBAIC0zMTA2LDM0ICszMTA2LDM0IEBAIFRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBjb25zdCBSZW5kZXJTdHlsZSYKICAgICBy
ZXR1cm4gVGV4dFJ1bihXVEZNb3ZlKHVwZGF0ZWRTdHJpbmcpLCAwLCAwLCBleHBhbnNpb24sIHRl
eHREaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOwogfQogCi1UZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZs
YWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQQUw6OkV4cGFuc2lvbkJlaGF2aW9y
IGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIHJldHVybiBjb25zdHJ1Y3RU
ZXh0UnVuKFN0cmluZ1ZpZXcoc3RyaW5nKSwgc3R5bGUsIGV4cGFuc2lvbiwgZmxhZ3MpOwogfQog
Ci1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IEF0b21TdHJpbmcm
IGF0b21TdHJpbmcsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRXhwYW5zaW9uQmVoYXZpb3Ig
ZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKGNvbnN0IEF0b21TdHJpbmcmIGF0b21TdHJpbmcsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFn
cyBmbGFncykKIHsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihTdHJpbmdWaWV3KGF0b21T
dHJpbmcpLCBzdHlsZSwgZXhwYW5zaW9uLCBmbGFncyk7CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4odGV4dC5zdHJpbmdWaWV3KCksIHN0eWxlLCBleHBh
bnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0
IFJlbmRlclRleHQmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRS
dW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgdW5zaWduZWQgc3Rv
cCA9IG9mZnNldCArIGxlbmd0aDsKICAgICBBU1NFUlQoc3RvcCA8PSB0ZXh0LnRleHQoKS5sZW5n
dGgoKSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4odGV4dC5zdHJpbmdWaWV3KG9mZnNl
dCwgc3RvcCksIHN0eWxlLCBleHBhbnNpb24pOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQor
VGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBBTDo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVu
KFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVuZ3RoKSwgc3R5bGUsIGV4cGFuc2lvbik7CiB9CiAK
LVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFeHBhbnNp
b25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgUEFMOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAg
cmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBsZW5ndGgpLCBz
dHlsZSwgZXhwYW5zaW9uKTsKIH0KQEAgLTMzMDcsMTIgKzMzMDcsMTIgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0Qm9yZGVyQm94UmVjdEZvclBhaW50aW5nKExheW91dFJlY3QmIHBhaW50UmVj
dCkKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IExheW91dFVuaXQgeU9mZiA9IHN0ZDo6bWF4KDBfbHUsIChsZWdlbmQtPmhlaWdodCgpIC0gUmVu
ZGVyQm94Ojpib3JkZXJCZWZvcmUoKSkgLyAyKTsKICAgICAgICAgcGFpbnRSZWN0LnNldEhlaWdo
dChwYWludFJlY3QuaGVpZ2h0KCkgLSB5T2ZmKTsKLSAgICAgICAgaWYgKHN0eWxlKCkud3JpdGlu
Z01vZGUoKSA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCisgICAgICAgIGlmIChzdHlsZSgp
LndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCiAgICAgICAg
ICAgICBwYWludFJlY3Quc2V0WShwYWludFJlY3QueSgpICsgeU9mZik7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgTGF5b3V0VW5pdCB4T2ZmID0gc3RkOjptYXgoMF9sdSwgKGxlZ2VuZC0+d2lkdGgo
KSAtIFJlbmRlckJveDo6Ym9yZGVyQmVmb3JlKCkpIC8gMik7CiAgICAgICAgIHBhaW50UmVjdC5z
ZXRXaWR0aChwYWludFJlY3Qud2lkdGgoKSAtIHhPZmYpOwotICAgICAgICBpZiAoc3R5bGUoKS53
cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCkKKyAgICAgICAgaWYgKHN0
eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCkKICAg
ICAgICAgICAgIHBhaW50UmVjdC5zZXRYKHBhaW50UmVjdC54KCkgKyB4T2ZmKTsKICAgICB9CiB9
CkBAIC0zMzI5LDExICszMzI5LDExIEBAIExheW91dFJlY3QgUmVuZGVyQmxvY2s6OnBhaW50UmVj
dFRvQ2xpcE91dEZyb21Cb3JkZXIoY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0CiAgICAgTGF5
b3V0VW5pdCBib3JkZXJFeHRlbnQgPSBSZW5kZXJCb3g6OmJvcmRlckJlZm9yZSgpOwogICAgIGlm
IChzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgY2xpcFJlY3Qu
c2V0WChwYWludFJlY3QueCgpICsgbGVnZW5kLT54KCkpOwotICAgICAgICBjbGlwUmVjdC5zZXRZ
KHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gPyBwYWlu
dFJlY3QueSgpIDogcGFpbnRSZWN0LnkoKSArIHBhaW50UmVjdC5oZWlnaHQoKSAtIGJvcmRlckV4
dGVudCk7CisgICAgICAgIGNsaXBSZWN0LnNldFkoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBB
TDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tID8gcGFpbnRSZWN0LnkoKSA6IHBhaW50UmVjdC55
KCkgKyBwYWludFJlY3QuaGVpZ2h0KCkgLSBib3JkZXJFeHRlbnQpOwogICAgICAgICBjbGlwUmVj
dC5zZXRXaWR0aChsZWdlbmQtPndpZHRoKCkpOwogICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQo
Ym9yZGVyRXh0ZW50KTsKICAgICB9IGVsc2UgewotICAgICAgICBjbGlwUmVjdC5zZXRYKHN0eWxl
KCkud3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgPyBwYWludFJlY3Qu
eCgpIDogcGFpbnRSZWN0LngoKSArIHBhaW50UmVjdC53aWR0aCgpIC0gYm9yZGVyRXh0ZW50KTsK
KyAgICAgICAgY2xpcFJlY3Quc2V0WChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0
aW5nTW9kZTo6TGVmdFRvUmlnaHQgPyBwYWludFJlY3QueCgpIDogcGFpbnRSZWN0LngoKSArIHBh
aW50UmVjdC53aWR0aCgpIC0gYm9yZGVyRXh0ZW50KTsKICAgICAgICAgY2xpcFJlY3Quc2V0WShw
YWludFJlY3QueSgpICsgbGVnZW5kLT55KCkpOwogICAgICAgICBjbGlwUmVjdC5zZXRXaWR0aChi
b3JkZXJFeHRlbnQpOwogICAgICAgICBjbGlwUmVjdC5zZXRIZWlnaHQobGVnZW5kLT5oZWlnaHQo
KSk7CkBAIC0zMzYwLDI4ICszMzYwLDI4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldEludHJpbnNp
Y0JvcmRlckZvckZpZWxkc2V0KExheW91dFVuaXQgcGFkZGluZykKIAogTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6Ym9yZGVyVG9wKCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9k
ZSgpICE9IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSB8fCAhaW50cmluc2ljQm9yZGVyRm9yRmll
bGRzZXQoKSkKKyAgICBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpICE9IFBBTDo6V3JpdGluZ01v
ZGU6OlRvcFRvQm90dG9tIHx8ICFpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpKQogICAgICAg
ICByZXR1cm4gUmVuZGVyQm94Ojpib3JkZXJUb3AoKTsKICAgICByZXR1cm4gUmVuZGVyQm94Ojpi
b3JkZXJUb3AoKSArIGludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCk7CiB9CiAKIExheW91dFVu
aXQgUmVuZGVyQmxvY2s6OmJvcmRlckxlZnQoKSBjb25zdAogewotICAgIGlmIChzdHlsZSgpLndy
aXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0IHx8ICFpbnRyaW5zaWNCb3Jk
ZXJGb3JGaWVsZHNldCgpKQorICAgIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgIT0gUEFMOjpX
cml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgfHwgIWludHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCkp
CiAgICAgICAgIHJldHVybiBSZW5kZXJCb3g6OmJvcmRlckxlZnQoKTsKICAgICByZXR1cm4gUmVu
ZGVyQm94Ojpib3JkZXJMZWZ0KCkgKyBpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpOwogfQog
CiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpib3JkZXJCb3R0b20oKSBjb25zdAogewotICAgIGlm
IChzdHlsZSgpLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wIHx8ICFp
bnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpKQorICAgIGlmIChzdHlsZSgpLndyaXRpbmdNb2Rl
KCkgIT0gUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AgfHwgIWludHJpbnNpY0JvcmRlckZv
ckZpZWxkc2V0KCkpCiAgICAgICAgIHJldHVybiBSZW5kZXJCb3g6OmJvcmRlckJvdHRvbSgpOwog
ICAgIHJldHVybiBSZW5kZXJCb3g6OmJvcmRlckJvdHRvbSgpICsgaW50cmluc2ljQm9yZGVyRm9y
RmllbGRzZXQoKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Ym9yZGVyUmlnaHQoKSBj
b25zdAogewotICAgIGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OlJp
Z2h0VG9MZWZ0IHx8ICFpbnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpKQorICAgIGlmIChzdHls
ZSgpLndyaXRpbmdNb2RlKCkgIT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQgfHwgIWlu
dHJpbnNpY0JvcmRlckZvckZpZWxkc2V0KCkpCiAgICAgICAgIHJldHVybiBSZW5kZXJCb3g6OmJv
cmRlclJpZ2h0KCk7CiAgICAgcmV0dXJuIFJlbmRlckJveDo6Ym9yZGVyUmlnaHQoKSArIGludHJp
bnNpY0JvcmRlckZvckZpZWxkc2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCmluZGV4IDIxZTYyMTBlNTljMzI3YThjNzQyNWFkNDBmMDcxYmQzMzE3NzNlNGUuLmRh
ZWM1NjIxOGQxYzY3NjU5YTA4YTkzMGRmYzU0ZjFiZjU4OGY1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0xOTQsMTkgKzE5NCwxOSBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihTdHJpbmdWaWV3LCBjb25z
dCBSZW5kZXJTdHlsZSYsCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFu
c2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7CisgICAgICAgIFBBTDo6
RXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9
IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW4oY29uc3QgU3RyaW5nJiwgY29uc3QgUmVuZGVyU3R5bGUmLAotICAgICAgICBFeHBhbnNpb25C
ZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVu
RmxhZ3MpOworICAgICAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yID0gUEFMOjpEZWZhdWx0RXhw
YW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKICAgICBzdGF0aWMg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBSZW5kZXJT
dHlsZSYsCi0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbiwgVGV4
dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7CisgICAgICAgIFBBTDo6RXhwYW5zaW9u
QmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRU
ZXh0UnVuRmxhZ3MpOwogICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyVGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZp
b3IgPSBEZWZhdWx0RXhwYW5zaW9uKTsKKyAgICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciA9
IFBBTDo6RGVmYXVsdEV4cGFuc2lvbik7CiAgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4
dFJ1bihjb25zdCBSZW5kZXJUZXh0JiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFJlbmRlclN0eWxlJiwKLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0
RXhwYW5zaW9uKTsKKyAgICAgICAgUEFMOjpFeHBhbnNpb25CZWhhdmlvciA9IFBBTDo6RGVmYXVs
dEV4cGFuc2lvbik7CiAgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCi0g
ICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbik7CisgICAgICAgIFBB
TDo6RXhwYW5zaW9uQmVoYXZpb3IgPSBQQUw6OkRlZmF1bHRFeHBhbnNpb24pOwogICAgIHN0YXRp
YyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmLAotICAgICAgICBFeHBhbnNpb25CZWhhdmlv
ciA9IERlZmF1bHRFeHBhbnNpb24pOworICAgICAgICBQQUw6OkV4cGFuc2lvbkJlaGF2aW9yID0g
UEFMOjpEZWZhdWx0RXhwYW5zaW9uKTsKICAgICAKICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25T
dHJ1dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KExheW91dFVuaXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBhNjBiYTZkMDMwZDliNWVk
ZDRkMmM3Y2RiZGJlNjg2Y2E4YWZjYWY5Li41MjgzNjI1NWExZTg4OGMwYWE4ODA1YWJhYjlkZjBi
YmRhNGY3ZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNzks
MTAgKzc5LDEwIEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgotI2luY2x1ZGUgIlRl
eHREaXJlY3Rpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KICNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8cGFsL3RleHQvVGV4dERpcmVj
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0YWNrU3RhdHMuaD4KIApAQCAtMzAyMSwyMCArMzAyMSwyMCBAQCBSZW5kZXJCb3hGcmFnbWVu
dEluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94RnJhZ21lbnRJbmZvKFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKgogc3RhdGljIGJvb2wgc2hvdWxkRmxpcEJlZm9yZUFmdGVyTWFyZ2lucyhjb25zdCBS
ZW5kZXJTdHlsZSYgY29udGFpbmluZ0Jsb2NrU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBjaGls
ZFN0eWxlKQogewogICAgIEFTU0VSVChjb250YWluaW5nQmxvY2tTdHlsZS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpICE9IGNoaWxkU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwot
ICAgIFdyaXRpbmdNb2RlIGNoaWxkV3JpdGluZ01vZGUgPSBjaGlsZFN0eWxlLT53cml0aW5nTW9k
ZSgpOworICAgIFBBTDo6V3JpdGluZ01vZGUgY2hpbGRXcml0aW5nTW9kZSA9IGNoaWxkU3R5bGUt
PndyaXRpbmdNb2RlKCk7CiAgICAgYm9vbCBzaG91bGRGbGlwID0gZmFsc2U7CiAgICAgc3dpdGNo
IChjb250YWluaW5nQmxvY2tTdHlsZS53cml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5n
TW9kZTo6VG9wVG9Cb3R0b206Ci0gICAgICAgIHNob3VsZEZsaXAgPSAoY2hpbGRXcml0aW5nTW9k
ZSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CisgICAgICAgIHNob3VsZEZsaXAgPSAoY2hpbGRXcml0aW5nTW9kZSA9
PSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgotICAgICAgICBzaG91bGRGbGlwID0gKGNoaWxk
V3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KTsKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgICAgICBzaG91bGRGbGlwID0gKGNoaWxkV3Jp
dGluZ01vZGUgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAgc2hvdWxkRmxp
cCA9IChjaGlsZFdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCk7CisgICAg
Y2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICAgICAgc2hvdWxkRmxpcCA9
IChjaGlsZFdyaXRpbmdNb2RlID09IFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAg
IHNob3VsZEZsaXAgPSAoY2hpbGRXcml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9U
b3ApOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgIHNo
b3VsZEZsaXAgPSAoY2hpbGRXcml0aW5nTW9kZSA9PSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzc3MSwxNCArMzc3MSwxNCBAQCBz
dGF0aWMgdm9pZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVm
dCwgTGVuZ3RoJiBsb2dpY2FsUmlnaAogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJPYmpl
Y3QqIHBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAgICBUZXh0RGlyZWN0aW9uIHBhcmVudERp
cmVjdGlvbiA9IHBhcmVudC0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBQQUw6OlRleHREaXJl
Y3Rpb24gcGFyZW50RGlyZWN0aW9uID0gcGFyZW50LT5zdHlsZSgpLmRpcmVjdGlvbigpOwogCiAg
ICAgLy8gVGhpcyBtZXRob2QgaXMgdXNpbmcgZW5jbG9zaW5nQm94KCkgd2hpY2ggaXMgd3Jvbmcg
Zm9yIGFic29sdXRlbHkKICAgICAvLyBwb3NpdGlvbmVkIGdyaWQgaXRlbXMsIGFzIHRoZXkgcmVs
eSBvbiB0aGUgZ3JpZCBhcmVhLiBTbyBmb3IgZ3JpZCBpdGVtcyBpZgogICAgIC8vIGJvdGggImxl
ZnQiIGFuZCAicmlnaHQiIHByb3BlcnRpZXMgYXJlICJhdXRvIiwgd2UgY2FuIGNvbnNpZGVyIHRo
YXQgb25lIG9mCiAgICAgLy8gdGhlbSAoZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24pIGlzIHNp
bXBseSAiMCIuCiAgICAgaWYgKHBhcmVudC0+aXNSZW5kZXJHcmlkKCkgJiYgcGFyZW50ID09IGNo
aWxkLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICBpZiAocGFyZW50RGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKHBhcmVudERpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0LnNldFZhbHVlKExl
bmd0aFR5cGU6OkZpeGVkLCAwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9naWNhbFJp
Z2h0LnNldFZhbHVlKExlbmd0aFR5cGU6OkZpeGVkLCAwKTsKQEAgLTM3ODYsNyArMzc4Niw3IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxM
ZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAgfQogCiAgICAgLy8gRm9yIG9ydGhvZ29uYWwg
Zmxvd3Mgd2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZSBwYXJlbnQgaXMgTFRSIG9yIFJUTCBiZWNh
dXNlIGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgcG9zaXRpb24gaW4gb3VyIGlubGluZSBheGlzLgot
ICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSIHx8IGlzT3J0aG9n
b25hbCgqY2hpbGQsICpwYXJlbnQpKSB7CisgICAgaWYgKHBhcmVudERpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiB8fCBpc09ydGhvZ29uYWwoKmNoaWxkLCAqcGFyZW50KSkgewog
ICAgICAgICBMYXlvdXRVbml0IHN0YXRpY1Bvc2l0aW9uID0gaXNPcnRob2dvbmFsKCpjaGlsZCwg
KnBhcmVudCkgPyBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljQmxvY2tQb3NpdGlvbigpIC0gY29udGFp
bmVyQmxvY2suYm9yZGVyQmVmb3JlKCkgOiBjaGlsZC0+bGF5ZXIoKS0+c3RhdGljSW5saW5lUG9z
aXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLmJvcmRlckxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgIGZv
ciAoYXV0byogY3VycmVudCA9IHBhcmVudDsgY3VycmVudCAmJiBjdXJyZW50ICE9ICZjb250YWlu
ZXJCbG9jazsgY3VycmVudCA9IGN1cnJlbnQtPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBp
ZiAoIWlzPFJlbmRlckJveD4oKmN1cnJlbnQpKQpAQCAtMzg3NSw3ICszODc1LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyYgY29tcHUKICAgICAvLyBVc2UgdGhlIGNvbnRhaW5lciBibG9jaydzIGRpcmVj
dGlvbiBleGNlcHQgd2hlbiBjYWxjdWxhdGluZyB0aGUgc3RhdGljIGRpc3RhbmNlCiAgICAgLy8g
VGhpcyBjb25mb3JtcyB3aXRoIHRoZSByZWZlcmVuY2UgcmVzdWx0cyBmb3IgYWJzcG9zLXJlcGxh
Y2VkLXdpZHRoLW1hcmdpbi0wMDAuaHRtCiAgICAgLy8gb2YgdGhlIENTUyAyLjEgdGVzdCBzdWl0
ZQotICAgIFRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uID0gY29udGFpbmVyQmxvY2su
c3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGly
ZWN0aW9uID0gY29udGFpbmVyQmxvY2suc3R5bGUoKS5kaXJlY3Rpb24oKTsKIAogICAgIGJvb2wg
aXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBMYXlv
dXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgo
KTsKQEAgLTQwMDgsNyArNDAwOCw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsTGVmdFBv
c2l0aW9uZWRPZmZzZXQoTGF5b3V0VW5pdCYgbG9naWNhbExlZnRQb3MsIGNvbnN0CiAgICAgICAg
IGxvZ2ljYWxMZWZ0UG9zICs9IChjaGlsZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNv
bnRhaW5lckJsb2NrLmJvcmRlckxlZnQoKSA6IGNvbnRhaW5lckJsb2NrLmJvcmRlclRvcCgpKTsK
IH0KIAotdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmco
U2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIFRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0
aW9uLAordm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmco
U2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIFBBTDo6VGV4dERpcmVjdGlvbiBjb250YWluZXJE
aXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBib3JkZXJz
UGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMZW5ndGggbG9naWNhbExlZnQsIExlbmd0aCBsb2dpY2FsUmlnaHQsIExlbmd0aCBt
YXJnaW5Mb2dpY2FsTGVmdCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxSaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CkBAIC00MDcyLDcgKzQwNzIsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlw
ZSB3aWR0aFR5cGUsIExlbmd0aCBsbwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBkaXJlY3Rpb24gcmF0aGVyIHRoYW4g
dGhlIHBhcmVudCBibG9jaydzCiAgICAgICAgICAgICAgICAgLy8gcGVyIENTUyAyLjEgcmVmZXJl
bmNlIHRlc3QgYWJzcG9zLW5vbi1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLgotICAgICAgICAg
ICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUikgewogICAgICAgICAgICAgICAgICAgICBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlID0g
MDsKICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUgPSBhdmFpbGFi
bGVTcGFjZTsgLy8gd2lsbCBiZSBuZWdhdGl2ZQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBA
IC00MDk1LDcgKzQwOTUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsV2lkdGhVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUsIExlbmd0aCBsbwogCiAgICAgICAgICAg
ICAvLyBVc2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBkaXJlY3Rpb24gcmF0aGVyIHRoYW4gdGhl
IHBhcmVudCBibG9jaydzCiAgICAgICAgICAgICAvLyBwZXIgQ1NTIDIuMSByZWZlcmVuY2UgdGVz
dCBhYnNwb3Mtbm9uLXJlcGxhY2VkLXdpZHRoLW1hcmdpbi0wMDAuCi0gICAgICAgICAgICBpZiAo
IWlzT3J0aG9nb25hbCgqdGhpcywgY29udGFpbmVyQmxvY2spICYmIGNvbnRhaW5lckRpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgICAgICBpZiAoIWlzT3J0aG9nb25hbCgq
dGhpcywgY29udGFpbmVyQmxvY2spICYmIGNvbnRhaW5lckRpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTCkKICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFZhbHVlID0gKGF2YWls
YWJsZVNwYWNlICsgbG9naWNhbExlZnRWYWx1ZSkgLSBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlIC0g
bWFyZ2luTG9naWNhbFJpZ2h0VmFsdWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNDIy
NSw3ICs0MjI1LDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUJsb2NrU3RhdGljRGlzdGFuY2UoTGVu
Z3RoJiBsb2dpY2FsVG9wLCBMZW5ndGgmIGxvZ2ljYWxCb3R0b20KIAogICAgIC8vIElmIHRoZSBw
YXJlbnQgaXMgUlRMIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBjb29yZGluYXRlIGJ5IHNldHRp
bmcgdGhlIGxvZ2ljYWwgYm90dG9tIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgdG9wLiBUaGF0IG9u
bHkgbmVlZHMKICAgICAvLyB0byBiZSBkb25lIGluIGNhc2Ugb2Ygb3J0aG9nb25hbCB3cml0aW5n
IG1vZGVzLCBmb3IgaG9yaXpvbnRhbCBvbmVzIHRoZSB0ZXh0IGRpcmVjdGlvbiBvZiB0aGUgcGFy
ZW50IGRvZXMgbm90IGFmZmVjdCB0aGUgYmxvY2sgcG9zaXRpb24uCi0gICAgaWYgKHBhcmVudC0+
c3R5bGUoKS5kaXJlY3Rpb24oKSAhPSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYgaXNPcnRob2dvbmFs
KCpjaGlsZCwgKnBhcmVudCkpCisgICAgaWYgKHBhcmVudC0+c3R5bGUoKS5kaXJlY3Rpb24oKSAh
PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiAmJiBpc09ydGhvZ29uYWwoKmNoaWxkLCAqcGFyZW50
KSkKICAgICAgICAgbG9naWNhbEJvdHRvbS5zZXRWYWx1ZShMZW5ndGhUeXBlOjpGaXhlZCwgc3Rh
dGljTG9naWNhbFRvcCk7CiAgICAgZWxzZQogICAgICAgICBsb2dpY2FsVG9wLnNldFZhbHVlKExl
bmd0aFR5cGU6OkZpeGVkLCBzdGF0aWNMb2dpY2FsVG9wKTsKQEAgLTQ1MzAsNyArNDUzMCw3IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlCiAKICAgICAvLyBUbyBtYXRjaCBXaW5JRSwgaW4gcXVp
cmtzIG1vZGUgdXNlIHRoZSBwYXJlbnQncyAnZGlyZWN0aW9uJyBwcm9wZXJ0eQogICAgIC8vIGlu
c3RlYWQgb2YgdGhlIGNvbnRhaW5lciBibG9jaydzLgotICAgIFRleHREaXJlY3Rpb24gY29udGFp
bmVyRGlyZWN0aW9uID0gY29udGFpbmVyQmxvY2suc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBQ
QUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uID0gY29udGFpbmVyQmxvY2suc3R5
bGUoKS5kaXJlY3Rpb24oKTsKIAogICAgIC8vIFZhcmlhYmxlcyB0byBzb2x2ZS4KICAgICBib29s
IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CkBAIC00NTk2LDcgKzQ1
OTYsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBs
YWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gVXNlIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgZGlyZWN0aW9uIHJhdGhlciB0aGFu
IHRoZSBwYXJlbnQgYmxvY2sncwogICAgICAgICAgICAgLy8gcGVyIENTUyAyLjEgcmVmZXJlbmNl
IHRlc3QgYWJzcG9zLXJlcGxhY2VkLXdpZHRoLW1hcmdpbi0wMDAuCi0gICAgICAgICAgICBpZiAo
Y29udGFpbmVyRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgICAgICAgICAg
aWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgewogICAg
ICAgICAgICAgICAgIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXMgPSAwOwogICAgICAgICAgICAgICAg
IG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzID0gZGlmZmVyZW5jZTsgLy8gd2lsbCBiZSBuZWdhdGl2
ZQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2NDQsNyArNDY0NCw3IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlCiAgICAgICAgIGxvZ2ljYWxSaWdodFZhbHVlID0gdmFsdWVGb3JMZW5ndGgo
bG9naWNhbFJpZ2h0LCBjb250YWluZXJMb2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsTGVm
dFZhbHVlID0gdmFsdWVGb3JMZW5ndGgobG9naWNhbExlZnQsIGNvbnRhaW5lckxvZ2ljYWxXaWR0
aCk7CiAgICAgICAgIC8vIElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIHJpZ2h0LXRvLWxlZnQs
IHRoZW4gcHVzaCB0aGUgbGVmdCBwb3NpdGlvbiBhcyBmYXIgdG8gdGhlIHJpZ2h0IGFzIHBvc3Np
YmxlCi0gICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRM
KSB7CisgICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEwpIHsKICAgICAgICAgICAgIGludCB0b3RhbExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50ICsgbG9naWNhbExlZnRWYWx1ZSArIGxvZ2ljYWxSaWdodFZhbHVlICsgIG1h
cmdpbkxvZ2ljYWxMZWZ0QWxpYXMgKyBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhczsKICAgICAgICAg
ICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBjb250YWluZXJMb2dpY2FsV2lkdGggLSAodG90YWxMb2dp
Y2FsV2lkdGggLSBsb2dpY2FsTGVmdFZhbHVlKTsKICAgICAgICAgfQpAQCAtNTE0Miw5ICs1MTQy
LDkgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnQKICAgICAKICAgICAvLyBXZSBhcmUgcHV0dGlu
ZyBvdXJzZWx2ZXMgaW50byBvdXIgcGFyZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4gIElmIHRoZXJl
IGlzIGEgZmxpcHBlZCBibG9jayBtaXNtYXRjaAogICAgIC8vIGluIGEgcGFydGljdWxhciBheGlz
LCB0aGVuIHdlIGhhdmUgdG8gZmxpcCB0aGUgcmVjdCBhbG9uZyB0aGF0IGF4aXMuCi0gICAgaWYg
KHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQgfHwgcGFy
ZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQorICAg
IGlmIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6Umln
aHRUb0xlZnQpCiAgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwotICAg
IGVsc2UgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9U
b3AgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkJvdHRvbVRv
VG9wKQorICAgIGVsc2UgaWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdN
b2RlOjpCb3R0b21Ub1RvcCB8fCBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBQQUw6Oldy
aXRpbmdNb2RlOjpCb3R0b21Ub1RvcCkKICAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVj
dC5tYXhZKCkpOwogCiAgICAgcmV0dXJuIHJlY3Q7CkBAIC01MjA1LDkgKzUyMDUsOSBAQCBMYXlv
dXRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudAogICAgIAogICAgIC8vIFdlIGFyZSBwdXR0aW5nIG91cnNlbHZl
cyBpbnRvIG91ciBwYXJlbnQncyBjb29yZGluYXRlIHNwYWNlLiAgSWYgdGhlcmUgaXMgYSBmbGlw
cGVkIGJsb2NrIG1pc21hdGNoCiAgICAgLy8gaW4gYSBwYXJ0aWN1bGFyIGF4aXMsIHRoZW4gd2Ug
aGF2ZSB0byBmbGlwIHRoZSByZWN0IGFsb25nIHRoYXQgYXhpcy4KLSAgICBpZiAoc3R5bGUoKS53
cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCB8fCBwYXJlbnRTdHlsZS0+
d3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQpCisgICAgaWYgKHN0eWxl
KCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCB8fCBwYXJl
bnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCkK
ICAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0Lm1heFgoKSk7Ci0gICAgZWxzZSBpZiAo
c3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCB8fCBwYXJl
bnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3ApCisgICAg
ZWxzZSBpZiAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OkJvdHRv
bVRvVG9wIHx8IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6
OkJvdHRvbVRvVG9wKQogICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7
CiAKICAgICByZXR1cm4gcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRl
eCBiMjI1YTdiMjZlNjM0MGVjMDY0NTM1MWUxYzg3OTBlODA0MDA0NjViLi45YjNhNGUwZGQzMzE5
MTg2ODEyMTJiOGQ1OTEwYzVhYTkyNTFkZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCkBAIC03NTcsNyArNzU3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcGFpbnRMYXll
clJlY3RzRm9ySW1hZ2UoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBGaWxsTGF5ZXImIGxheWVycywg
Ym9vbCBkcmF3aW5nQmFja2dyb3VuZCk7CiAKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKLSAgICB2b2lk
IGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUsIExlbmd0aCBsb2dp
Y2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jaywgVGV4
dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCisgICAgdm9pZCBjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIFBBTDo6VGV4dERpcmVjdGlvbiBj
b250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRl
cnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTGVuZ3RoIGxvZ2ljYWxMZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2lu
TG9naWNhbExlZnQsIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKaW5kZXggMmRkMTU4NzFkN2I3MTYzODJlMDU3NjBkODIyZTllNTc5NWU5YmY0Yi4u
Y2U2NGUxNzU5NTM2MmZmZjI4NzE4ZTZhZmQyNjc0NWI0OGYxOGRhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xNDg4LDcg
KzE0ODgsNyBAQCBzdGF0aWMgYm9vbCBib3JkZXJTdHlsZUlzRG90dGVkT3JEYXNoZWQoQm9yZGVy
U3R5bGUgc3R5bGUpCiAKIC8vIEJvcmRlclN0eWxlOjpPdXRzZXQgZGFya2VucyB0aGUgYm90dG9t
IGFuZCByaWdodCAoYW5kIG1heWJlIGxpZ2h0ZW5zIHRoZSB0b3AgYW5kIGxlZnQpCiAvLyBCb3Jk
ZXJTdHlsZTo6SW5zZXQgZGFya2VucyB0aGUgdG9wIGFuZCBsZWZ0IChhbmQgbWF5YmUgbGlnaHRl
bnMgdGhlIGJvdHRvbSBhbmQgcmlnaHQpCi1zdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVI
YXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94U2lkZSBzaWRl
LCBCb3hTaWRlIGFkamFjZW50U2lkZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBib3JkZXJTdHlsZUhh
c1VubWF0Y2hlZENvbG9yc0F0Q29ybmVyKEJvcmRlclN0eWxlIHN0eWxlLCBQQUw6OkJveFNpZGUg
c2lkZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSkKIHsKICAgICAvLyBUaGVzZSBzdHlsZXMg
bWF0Y2ggYXQgdGhlIHRvcC9sZWZ0IGFuZCBib3R0b20vcmlnaHQuCiAgICAgaWYgKHN0eWxlID09
IEJvcmRlclN0eWxlOjpJbnNldCB8fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6R3Jvb3ZlIHx8IHN0
eWxlID09IEJvcmRlclN0eWxlOjpSaWRnZSB8fCBzdHlsZSA9PSBCb3JkZXJTdHlsZTo6T3V0c2V0
KSB7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVI
YXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihCb3JkZXJTdHlsZSBzdHlsZSwgQm94UwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNvbG9yc01hdGNoQXRDb3JuZXIo
Qm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWRnZXMmIGVk
Z2VzKQorc3RhdGljIGlubGluZSBib29sIGNvbG9yc01hdGNoQXRDb3JuZXIoUEFMOjpCb3hTaWRl
IHNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUsIGNvbnN0IEJvcmRlckVkZ2VzJiBlZGdl
cykKIHsKICAgICBhdXRvJiBlZGdlID0gZWRnZXMuYXQoc2lkZSk7CiAgICAgYXV0byYgYWRqYWNl
bnRFZGdlID0gZWRnZXMuYXQoYWRqYWNlbnRTaWRlKTsKQEAgLTE1MTYsNyArMTUxNiw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjb2xvcnNNYXRjaEF0Q29ybmVyKEJveFNpZGUgc2lkZSwgQm94U2lk
ZSBhZGphY2VudFNpZGUsIGNvbnN0CiB9CiAKIAotc3RhdGljIGlubGluZSBib29sIGNvbG9yTmVl
ZHNBbnRpQWxpYXNBdENvcm5lcihCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlLCBj
b25zdCBCb3JkZXJFZGdlcyYgZWRnZXMpCitzdGF0aWMgaW5saW5lIGJvb2wgY29sb3JOZWVkc0Fu
dGlBbGlhc0F0Q29ybmVyKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRT
aWRlLCBjb25zdCBCb3JkZXJFZGdlcyYgZWRnZXMpCiB7CiAgICAgYXV0byYgZWRnZSA9IGVkZ2Vz
LmF0KHNpZGUpOwogICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IGVkZ2VzLmF0KGFkamFjZW50U2lk
ZSk7CkBAIC0xNTM0LDExICsxNTM0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb2xvck5lZWRz
QW50aUFsaWFzQXRDb3JuZXIoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkCiB9CiAK
IC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGRyYXcgaW4gb3JkZXI6IHRvcCwgYm90dG9tLCBsZWZ0
LCByaWdodC4KLXN0YXRpYyBpbmxpbmUgYm9vbCB3aWxsQmVPdmVyZHJhd24oQm94U2lkZSBzaWRl
LCBCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzKQorc3RhdGlj
IGlubGluZSBib29sIHdpbGxCZU92ZXJkcmF3bihQQUw6OkJveFNpZGUgc2lkZSwgUEFMOjpCb3hT
aWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzKQogewogICAgIHN3aXRj
aCAoc2lkZSkgewotICAgIGNhc2UgQm94U2lkZTo6VG9wOgotICAgIGNhc2UgQm94U2lkZTo6Qm90
dG9tOiB7CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lk
ZTo6Qm90dG9tOiB7CiAgICAgICAgIGF1dG8mIGVkZ2UgPSBlZGdlcy5hdChzaWRlKTsKICAgICAg
ICAgYXV0byYgYWRqYWNlbnRFZGdlID0gZWRnZXMuYXQoYWRqYWNlbnRTaWRlKTsKIApAQCAtMTU1
MywxNSArMTU1MywxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgd2lsbEJlT3ZlcmRyYXduKEJveFNp
ZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGNvbnN0IEJvcgogCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6Ci0gICAgY2FzZSBCb3hTaWRl
OjpSaWdodDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94
U2lkZTo6UmlnaHQ6CiAgICAgICAgIC8vIFRoZXNlIGRyYXcgbGFzdCwgc28gYXJlIG5ldmVyIG92
ZXJkcmF3bi4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBib3JkZXJTdHlsZXNSZXF1aXJlTWl0cmUoQm94U2lk
ZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwgQm9yZGVyU3R5bGUgc3R5bGUsIEJvcmRlclN0
eWxlIGFkamFjZW50U3R5bGUpCitzdGF0aWMgaW5saW5lIGJvb2wgYm9yZGVyU3R5bGVzUmVxdWly
ZU1pdHJlKFBBTDo6Qm94U2lkZSBzaWRlLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlLCBCb3Jk
ZXJTdHlsZSBzdHlsZSwgQm9yZGVyU3R5bGUgYWRqYWNlbnRTdHlsZSkKIHsKICAgICBpZiAoc3R5
bGUgPT0gQm9yZGVyU3R5bGU6OkRvdWJsZSB8fCBhZGphY2VudFN0eWxlID09IEJvcmRlclN0eWxl
OjpEb3VibGUgfHwgYWRqYWNlbnRTdHlsZSA9PSBCb3JkZXJTdHlsZTo6R3Jvb3ZlIHx8IGFkamFj
ZW50U3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE1NzUsNyArMTU3NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBib3JkZXJTdHlsZXNSZXF1aXJl
TWl0cmUoQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZSwKICAgICByZXR1cm4gYm9y
ZGVyU3R5bGVIYXNVbm1hdGNoZWRDb2xvcnNBdENvcm5lcihzdHlsZSwgc2lkZSwgYWRqYWNlbnRT
aWRlKTsKIH0KIAotc3RhdGljIGJvb2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaWRlLCBC
b3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzLCBib29sIGFsbG93
T3ZlcmRyYXcpCitzdGF0aWMgYm9vbCBqb2luUmVxdWlyZXNNaXRyZShQQUw6OkJveFNpZGUgc2lk
ZSwgUEFMOjpCb3hTaWRlIGFkamFjZW50U2lkZSwgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzLCBi
b29sIGFsbG93T3ZlcmRyYXcpCiB7CiAgICAgYXV0byYgZWRnZSA9IGVkZ2VzLmF0KHNpZGUpOwog
ICAgIGF1dG8mIGFkamFjZW50RWRnZSA9IGVkZ2VzLmF0KGFkamFjZW50U2lkZSk7CkBAIC0xNTk1
LDcgKzE1OTUsNyBAQCBzdGF0aWMgYm9vbCBqb2luUmVxdWlyZXNNaXRyZShCb3hTaWRlIHNpZGUs
IEJveFNpZGUgYWRqYWNlbnRTaWRlLCBjb25zdCBCb3JkZXJFZAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotc3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29u
c3QgUm91bmRlZFJlY3QmaW5uZXJCb3JkZXIsIEJveFNpZGUgc2lkZSkKK3N0YXRpYyBSb3VuZGVk
UmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRSZWN0JmlubmVy
Qm9yZGVyLCBQQUw6OkJveFNpZGUgc2lkZSkKIHsKICAgICAvLyBFeHBhbmQgdGhlIGlubmVyIGJv
cmRlciBhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCBhIHJvdW5kZWQgcmVjdCAoaS5lLiByYWRpaSBj
b250YWluZWQgd2l0aGluIGVhY2ggZWRnZSkuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMg
b24gdGhlIGZhY3Qgd2Ugb25seSBnZXQgcmFkaWkgbm90IGNvbnRhaW5lZCB3aXRoaW4gZWFjaCBl
ZGdlIGlmIG9uZSBvZiB0aGUgcmFkaWkKQEAgLTE2MDcsNyArMTYwNyw3IEBAIHN0YXRpYyBSb3Vu
ZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRSZWN0Jmlu
bmVyQm9yZGVyLCBCCiAgICAgZmxvYXQgbWF4UmFkaWk7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsK
LSAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAg
ICAgICBvdmVyc2hvb3QgPSBuZXdSYWRpaS50b3BMZWZ0KCkud2lkdGgoKSArIG5ld1JhZGlpLnRv
cFJpZ2h0KCkud2lkdGgoKSAtIG5ld1JlY3Qud2lkdGgoKTsKICAgICAgICAgaWYgKG92ZXJzaG9v
dCA+IDApIHsKICAgICAgICAgICAgIEFTU0VSVCghKG5ld1JhZGlpLnRvcExlZnQoKS53aWR0aCgp
ICYmIG5ld1JhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSkpOwpAQCAtMTYyMiw3ICsxNjIyLDcgQEAg
c3RhdGljIFJvdW5kZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29uc3QgUm91
bmRlZFJlY3QmaW5uZXJCb3JkZXIsIEIKICAgICAgICAgICAgIG5ld1JlY3Quc2V0SGVpZ2h0KG1h
eFJhZGlpKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAg
ICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICBvdmVyc2hvb3QgPSBuZXdSYWRp
aS5ib3R0b21MZWZ0KCkud2lkdGgoKSArIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSAt
IG5ld1JlY3Qud2lkdGgoKTsKICAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsKICAgICAgICAg
ICAgIEFTU0VSVCghKG5ld1JhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpICYmIG5ld1JhZGlpLmJv
dHRvbVJpZ2h0KCkud2lkdGgoKSkpOwpAQCAtMTYzOSw3ICsxNjM5LDcgQEAgc3RhdGljIFJvdW5k
ZWRSZWN0IGNhbGN1bGF0ZUFkanVzdGVkSW5uZXJCb3JkZXIoY29uc3QgUm91bmRlZFJlY3QmaW5u
ZXJCb3JkZXIsIEIKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQm94U2lk
ZTo6TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgb3ZlcnNob290
ID0gbmV3UmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICsgbmV3UmFkaWkuYm90dG9tTGVmdCgpLmhl
aWdodCgpIC0gbmV3UmVjdC5oZWlnaHQoKTsKICAgICAgICAgaWYgKG92ZXJzaG9vdCA+IDApIHsK
ICAgICAgICAgICAgIEFTU0VSVCghKG5ld1JhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAmJiBuZXdS
YWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkpKTsKQEAgLTE2NTQsNyArMTY1NCw3IEBAIHN0YXRp
YyBSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0IFJvdW5kZWRS
ZWN0JmlubmVyQm9yZGVyLCBCCiAgICAgICAgICAgICBuZXdSZWN0LnNldFdpZHRoKG1heFJhZGlp
KTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgorICAgIGNhc2Ug
UEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgb3ZlcnNob290ID0gbmV3UmFkaWkudG9wUmln
aHQoKS5oZWlnaHQoKSArIG5ld1JhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkgLSBuZXdSZWN0
LmhlaWdodCgpOwogICAgICAgICBpZiAob3ZlcnNob290ID4gMCkgewogICAgICAgICAgICAgQVNT
RVJUKCEobmV3UmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiBuZXdSYWRpaS5ib3R0b21SaWdo
dCgpLmhlaWdodCgpKSk7CkBAIC0xNjc2LDcgKzE2NzYsNyBAQCBzdGF0aWMgUm91bmRlZFJlY3Qg
Y2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRlcihjb25zdCBSb3VuZGVkUmVjdCZpbm5lckJvcmRl
ciwgQgogfQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUo
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5u
ZXJCb3JkZXIsCi0gICAgY29uc3QgTGF5b3V0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUgc2lkZSwg
Qm94U2lkZSBhZGphY2VudFNpZGUxLCBCb3hTaWRlIGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRl
ckVkZ2VzJiBlZGdlcywgY29uc3QgUGF0aCogcGF0aCwKKyAgICBjb25zdCBMYXlvdXRSZWN0JiBz
aWRlUmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUxLCBQ
QUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzLCBjb25z
dCBQYXRoKiBwYXRoLAogICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5j
ZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRF
ZGdlLCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IpCiB7CiAgICAg
YXV0byYgZWRnZVRvUmVuZGVyID0gZWRnZXMuYXQoc2lkZSk7CkBAIC0xNzIyLDIyICsxNzIyLDIy
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T25lQm9yZGVyU2lkZShHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRSZWN0
IGNhbGN1bGF0ZVNpZGVSZWN0KGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3Qg
Qm9yZGVyRWRnZXMmIGVkZ2VzLCBCb3hTaWRlIHNpZGUpCitzdGF0aWMgTGF5b3V0UmVjdCBjYWxj
dWxhdGVTaWRlUmVjdChjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRl
ckVkZ2VzJiBlZGdlcywgUEFMOjpCb3hTaWRlIHNpZGUpCiB7CiAgICAgTGF5b3V0UmVjdCBzaWRl
UmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKICAgICBmbG9hdCB3aWR0aCA9IGVkZ2VzLmF0KHNp
ZGUpLndpZHRoRm9yUGFpbnRpbmcoKTsKIAogICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2Ug
Qm94U2lkZTo6VG9wOgorICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAgIHNpZGVS
ZWN0LnNldEhlaWdodCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm94U2lkZTo6
UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICBzaWRlUmVjdC5z
aGlmdFhFZGdlVG8oc2lkZVJlY3QubWF4WCgpIC0gd2lkdGgpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgog
ICAgICAgICBzaWRlUmVjdC5zaGlmdFlFZGdlVG8oc2lkZVJlY3QubWF4WSgpIC0gd2lkdGgpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJv
eFNpZGU6OkxlZnQ6CiAgICAgICAgIHNpZGVSZWN0LnNldFdpZHRoKHdpZHRoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMTc2MCw3ICsxNzYwLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnRCb3JkZXJTaWRlcyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y28KICAgICAvLyBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHNvbGlkIGJvcmRlcnMgYW5kIHRoZSBz
aGFwZSBvZiB0aGUgYm9yZGVyIHBhaW50ZWQgYnkgZHJhd0JveFNpZGVGcm9tUGF0aAogICAgIC8v
IG9ubHkgZGVwZW5kcyBvbiBzaWRlUmVjdCB3aGVuIHBhaW50aW5nIHNvbGlkIGJvcmRlcnMuCiAK
LSAgICBhdXRvIHBhaW50T25lU2lkZSA9IFsmXShCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNl
bnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNpZGUyKSB7CisgICAgYXV0byBwYWludE9uZVNpZGUg
PSBbJl0oUEFMOjpCb3hTaWRlIHNpZGUsIFBBTDo6Qm94U2lkZSBhZGphY2VudFNpZGUxLCBQQUw6
OkJveFNpZGUgYWRqYWNlbnRTaWRlMikgewogICAgICAgICBhdXRvJiBlZGdlID0gZWRnZXMuYXQo
c2lkZSk7CiAgICAgICAgIGlmICghZWRnZS5zaG91bGRSZW5kZXIoKSB8fCAhZWRnZVNldC5jb250
YWlucyhlZGdlRmxhZ0ZvclNpZGUoc2lkZSkpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc3
MCwyMiArMTc3MCwyMiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlclNp
ZGVzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjbwogICAgICAgICBMYXlvdXRT
aXplIHNlY29uZFJhZGl1czsKIAogICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICAgICAgY2Fz
ZSBCb3hTaWRlOjpUb3A6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpUb3A6CiAgICAgICAg
ICAgICBzaWRlUmVjdC5zZXRIZWlnaHQoZWRnZS53aWR0aEZvclBhaW50aW5nKCkgKyBpbm5lckJv
cmRlckFkanVzdG1lbnQueSgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5uZXJCb3Jk
ZXIucmFkaWkoKS50b3BMZWZ0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBpbm5lckJv
cmRlci5yYWRpaSgpLnRvcFJpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBCb3hTaWRlOjpSaWdodDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAg
ICAgICAgICAgc2lkZVJlY3Quc2hpZnRYRWRnZVRvKHNpZGVSZWN0Lm1heFgoKSAtIGVkZ2Uud2lk
dGhGb3JQYWludGluZygpIC0gaW5uZXJCb3JkZXJBZGp1c3RtZW50LngoKSk7CiAgICAgICAgICAg
ICBmaXJzdFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKTsKICAgICAg
ICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAg
Y2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgIHNpZGVSZWN0LnNoaWZ0WUVk
Z2VUbyhzaWRlUmVjdC5tYXhZKCkgLSBlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSAtIGlubmVyQm9y
ZGVyQWRqdXN0bWVudC55KCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRl
ci5yYWRpaSgpLmJvdHRvbUxlZnQoKTsKICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVy
Qm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0Ogog
ICAgICAgICAgICAgc2lkZVJlY3Quc2V0V2lkdGgoZWRnZS53aWR0aEZvclBhaW50aW5nKCkgKyBp
bm5lckJvcmRlckFkanVzdG1lbnQueCgpKTsKICAgICAgICAgICAgIGZpcnN0UmFkaXVzID0gaW5u
ZXJCb3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMg
PSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKTsKQEAgLTE3OTYsMTggKzE3OTYsMTggQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXJTaWRlcyhHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICAgICAgcGFpbnRPbmVCb3JkZXJTaWRlKGdyYXBo
aWNzQ29udGV4dCwgc3R5bGUsIG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgc2lkZVJlY3QsIHNp
ZGUsIGFkamFjZW50U2lkZTEsIGFkamFjZW50U2lkZTIsIGVkZ2VzLCB1c2VQYXRoID8gJnJvdW5k
ZWRQYXRoIDogbnVsbHB0ciwgYmxlZWRBdm9pZGFuY2UsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2Us
IGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlLCBhbnRpYWxpYXMsIG92ZXJyaWRlQ29sb3IpOwogICAg
IH07CiAKLSAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6VG9wLCBCb3hTaWRlOjpMZWZ0LCBCb3hT
aWRlOjpSaWdodCk7Ci0gICAgcGFpbnRPbmVTaWRlKEJveFNpZGU6OkJvdHRvbSwgQm94U2lkZTo6
TGVmdCwgQm94U2lkZTo6UmlnaHQpOwotICAgIHBhaW50T25lU2lkZShCb3hTaWRlOjpMZWZ0LCBC
b3hTaWRlOjpUb3AsIEJveFNpZGU6OkJvdHRvbSk7Ci0gICAgcGFpbnRPbmVTaWRlKEJveFNpZGU6
OlJpZ2h0LCBCb3hTaWRlOjpUb3AsIEJveFNpZGU6OkJvdHRvbSk7CisgICAgcGFpbnRPbmVTaWRl
KFBBTDo6Qm94U2lkZTo6VG9wLCBQQUw6OkJveFNpZGU6OkxlZnQsIFBBTDo6Qm94U2lkZTo6Umln
aHQpOworICAgIHBhaW50T25lU2lkZShQQUw6OkJveFNpZGU6OkJvdHRvbSwgUEFMOjpCb3hTaWRl
OjpMZWZ0LCBQQUw6OkJveFNpZGU6OlJpZ2h0KTsKKyAgICBwYWludE9uZVNpZGUoUEFMOjpCb3hT
aWRlOjpMZWZ0LCBQQUw6OkJveFNpZGU6OlRvcCwgUEFMOjpCb3hTaWRlOjpCb3R0b20pOworICAg
IHBhaW50T25lU2lkZShQQUw6OkJveFNpZGU6OlJpZ2h0LCBQQUw6OkJveFNpZGU6OlRvcCwgUEFM
OjpCb3hTaWRlOjpCb3R0b20pOwogfQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dFRyYW5zbHVjZW50Qm9yZGVyU2lkZXMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVy
LCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0IEludFBvaW50JiBpbm5lckJv
cmRlckFkanVzdG1lbnQsCiAgICAgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzLCBCb3hTaWRlU2V0
IGVkZ2VzVG9EcmF3LCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIGJv
b2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSwg
Ym9vbCBhbnRpYWxpYXMpCiB7CiAgICAgLy8gd2lsbEJlT3ZlcmRyYXduIGFzc3VtZXMgdGhhdCB3
ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQuCi0gICAgLy8gVGhpcyBp
cyBkaWZmZXJlbnQgZnJvbSBCb3hTaWRlIGVudW0gb3JkZXIuCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzdGQ6OmFycmF5PEJveFNpZGUsIDQ+IHBhaW50T3JkZXJTaWRlcyA9IHsgQm94U2lkZTo6VG9w
LCBCb3hTaWRlOjpCb3R0b20sIEJveFNpZGU6OkxlZnQsIEJveFNpZGU6OlJpZ2h0IH07CisgICAg
Ly8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBQQUw6OkJveFNpZGUgZW51bSBvcmRlci4KKyAgICBz
dGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8UEFMOjpCb3hTaWRlLCA0PiBwYWludE9yZGVyU2lk
ZXMgPSB7IFBBTDo6Qm94U2lkZTo6VG9wLCBQQUw6OkJveFNpZGU6OkJvdHRvbSwgUEFMOjpCb3hT
aWRlOjpMZWZ0LCBQQUw6OkJveFNpZGU6OlJpZ2h0IH07CiAKICAgICB3aGlsZSAoZWRnZXNUb0Ry
YXcpIHsKICAgICAgICAgLy8gRmluZCB1bmRyYXduIGVkZ2VzIHNoYXJpbmcgYSBjb2xvci4KQEAg
LTE4OTUsMTAgKzE4OTUsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3Jk
ZXIoY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWN0JgogICAgIGJvb2wgaGF2
ZUFsbERvdWJsZUVkZ2VzID0gdHJ1ZTsKICAgICBpbnQgbnVtRWRnZXNWaXNpYmxlID0gNDsKICAg
ICBib29sIGFsbEVkZ2VzU2hhcmVDb2xvciA9IHRydWU7Ci0gICAgc3RkOjpvcHRpb25hbDxCb3hT
aWRlPiBmaXJzdFZpc2libGVTaWRlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiBm
aXJzdFZpc2libGVTaWRlOwogICAgIEJveFNpZGVTZXQgZWRnZXNUb0RyYXc7CiAKLSAgICBmb3Ig
KGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFs
bEJveFNpZGVzKSB7CiAgICAgICAgIGF1dG8mIGN1cnJFZGdlID0gZWRnZXMuYXQoc2lkZSk7CiAK
ICAgICAgICAgaWYgKGN1cnJFZGdlLnNob3VsZFJlbmRlcigpKQpAQCAtMTk1MiwyNCArMTk1Miwy
NCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IExheW91dFJlY3QmCiAgICAgICAgICAgICBpZiAoaGF2ZUFsbERvdWJs
ZUVkZ2VzKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBpbm5lclRoaXJkUmVjdCA9IG91
dGVyQm9yZGVyLnJlY3QoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IG91dGVyVGhpcmRS
ZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byBzaWRl
IDogYWxsQm94U2lkZXMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gc2lkZSA6IFBBTDo6
YWxsQm94U2lkZXMpIHsKICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvdXRlcldpZHRo
OwogICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGlubmVyV2lkdGg7CiAgICAgICAgICAg
ICAgICAgICAgIGVkZ2VzLmF0KHNpZGUpLmdldERvdWJsZUJvcmRlclN0cmlwZVdpZHRocyhvdXRl
cldpZHRoLCBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgICAgICAgICAgICAgaW5u
ZXJUaGlyZFJlY3Quc2hpZnRZRWRnZVRvKGlubmVyVGhpcmRSZWN0LnkoKSArIGlubmVyV2lkdGgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJUaGlyZFJlY3Quc2hpZnRZRWRnZVRvKG91
dGVyVGhpcmRSZWN0LnkoKSArIG91dGVyV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6UmlnaHQ6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlubmVyVGhpcmRSZWN0LnNldFdpZHRoKGlubmVyVGhpcmRSZWN0LndpZHRoKCkgLSBp
bm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSZWN0LnNldFdp
ZHRoKG91dGVyVGhpcmRSZWN0LndpZHRoKCkgLSBvdXRlcldpZHRoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRv
bToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0LnNldEhlaWdodChpbm5lclRoaXJkUmVj
dC5oZWlnaHQoKSAtIGlubmVyV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJU
aGlyZFJlY3Quc2V0SGVpZ2h0KG91dGVyVGhpcmRSZWN0LmhlaWdodCgpIC0gb3V0ZXJXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6
TGVmdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVGhpcmRSZWN0LnNoaWZ0WEVkZ2VU
byhpbm5lclRoaXJkUmVjdC54KCkgKyBpbm5lcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dGVyVGhpcmRSZWN0LnNoaWZ0WEVkZ2VUbyhvdXRlclRoaXJkUmVjdC54KCkgKyBvdXRl
cldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjAwNyw3ICsyMDA3
LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWN0JgogICAgICAgICBpZiAoaGF2ZUFsbFNvbGlkRWRn
ZXMgJiYgbnVtRWRnZXNWaXNpYmxlICE9IDQgJiYgIW91dGVyQm9yZGVyLmlzUm91bmRlZCgpICYm
IGhhdmVBbHBoYUNvbG9yKSB7CiAgICAgICAgICAgICBQYXRoIHBhdGg7CiAKLSAgICAgICAgICAg
IGZvciAoYXV0byBzaWRlIDogYWxsQm94U2lkZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBz
aWRlIDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICAgICAgICAgIGlmIChlZGdlcy5hdChz
aWRlKS5zaG91bGRSZW5kZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHNpZGVSZWN0
ID0gY2FsY3VsYXRlU2lkZVJlY3Qob3V0ZXJCb3JkZXIsIGVkZ2VzLCBzaWRlKTsKICAgICAgICAg
ICAgICAgICAgICAgcGF0aC5hZGRSZWN0KHNpZGVSZWN0KTsgLy8gRklYTUU6IE5lZWQgcGl4ZWwg
c25hcHBpbmcgaGVyZS4KQEAgLTIwNDQsNyArMjA0NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVj
dCYKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVy
UmVjdCwgY29uc3QgUGF0aCYgYm9yZGVyUGF0aCwgY29uc3QgQm9yZGVyRWRnZXMmIGVkZ2VzLAot
ICAgIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSBzaWRlLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENvbG9yIGNvbG9yLCBCb3JkZXJTdHlsZSBib3JkZXJT
dHlsZSwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLAorICAgIGZsb2F0
IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgUEFMOjpCb3hTaWRlIHNpZGUsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxlIGJvcmRlclN0eWxl
LCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsCiAgICAgYm9vbCBpbmNs
dWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKQogewogICAg
IGlmICh0aGlja25lc3MgPD0gMCkKQEAgLTIxOTIsNyArMjE5Miw3IEBAIHZvaWQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsCiB9CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRl
UG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgUm91bmRlZFJl
Y3QmIG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm94U2lkZSBzaWRlLCBi
b29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpCisgICAgUEFMOjpC
b3hTaWRlIHNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRFZGdlTWF0Y2hl
cykKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKICAgICBjb25zdCBGbG9hdFJlY3QmIG91dGVyUmVjdCA9IHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMob3V0ZXJCb3JkZXIucmVjdCgpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CkBAIC0y
MjE1LDcgKzIyMTUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lk
ZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgIFZlY3RvcjxGbG9h
dFBvaW50PiBxdWFkOwogICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAgICBz
d2l0Y2ggKHNpZGUpIHsKLSAgICBjYXNlIEJveFNpZGU6OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94
U2lkZTo6VG9wOgogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1p
bllDb3JuZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5Y
TWluWUNvcm5lcigpKTsKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1h
eFhNaW5ZQ29ybmVyKCkpOwpAQCAtMjIyOCw3ICsyMjI4LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXgKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1heFhNaW5ZQ29y
bmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3Ju
ZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIHF1YWRbMl0pOwogICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVm
dDoKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkpOwogICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3Ju
ZXIoKSk7CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNv
cm5lcigpKTsKQEAgLTIyNDEsNyArMjI0MSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAg
ICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBp
bm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlu
bmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFkWzJdKTsKICAgICAgICAgYnJlYWs7CiAKLSAg
ICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgog
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSk7
CiAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigp
KTsKICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCkpOwpAQCAtMjI1NCw3ICsyMjU0LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xp
cEJvcmRlclNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXgKICAgICAg
ICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCksIHF1YWRbMl0pOwogICAgICAgICBicmVhazsKIAotICAgIGNh
c2UgQm94U2lkZTo6UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CiAgICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKICAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwpA
QCAtMjI4Myw3ICsyMjgzLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRl
clNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXgKICAgICAgICAgcXVh
ZFswXSwKICAgICAgICAgcXVhZFsxXSwKICAgICAgICAgcXVhZFsyXSwKLSAgICAgICAgc2lkZSA9
PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1
YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNd
LnkoKSksCisgICAgICAgIHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6
OkJveFNpZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQocXVhZFszXS54KCksIHF1YWRbMl0ueSgpKSA6
IEZsb2F0UG9pbnQocXVhZFsyXS54KCksIHF1YWRbM10ueSgpKSwKICAgICAgICAgcXVhZFszXQog
ICAgIH07CiAgICAgYm9vbCB3YXNBbnRpYWxpYXNlZCA9IGdyYXBoaWNzQ29udGV4dC5zaG91bGRB
bnRpYWxpYXMoKTsKQEAgLTIyOTIsNyArMjI5Miw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
CiAKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gc2Vjb25kUXVhZCA9IHsKICAgICAgICAgcXVhZFsw
XSwKLSAgICAgICAgc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0
b20gPyBGbG9hdFBvaW50KHF1YWRbMF0ueCgpLCBxdWFkWzFdLnkoKSkgOiBGbG9hdFBvaW50KHF1
YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSksCisgICAgICAgIHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpU
b3AgfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OkJvdHRvbSA/IEZsb2F0UG9pbnQocXVhZFswXS54
KCksIHF1YWRbMV0ueSgpKSA6IEZsb2F0UG9pbnQocXVhZFsxXS54KCksIHF1YWRbMF0ueSgpKSwK
ICAgICAgICAgcXVhZFsxXSwKICAgICAgICAgcXVhZFsyXSwKICAgICAgICAgcXVhZFszXQpAQCAt
MjMwOCwxMCArMjMwOCwxMCBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNj
dXJlc0JhY2tncm91bmRFZGdlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGV4dAogewogICAgIGF1dG8g
ZWRnZXMgPSBib3JkZXJFZGdlcyhzdHlsZSgpLCBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCkpOwogCi0gICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgIGZvciAoYXV0
byBzaWRlIDogUEFMOjphbGxCb3hTaWRlcykgewogICAgICAgICBhdXRvJiBjdXJyRWRnZSA9IGVk
Z2VzLmF0KHNpZGUpOwogICAgICAgICAvLyBGSVhNRTogZm9yIHZlcnRpY2FsIHRleHQKLSAgICAg
ICAgZmxvYXQgYXhpc1NjYWxlID0gKHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94
U2lkZTo6Qm90dG9tKSA/IGNvbnRleHRTY2FsZS5oZWlnaHQoKSA6IGNvbnRleHRTY2FsZS53aWR0
aCgpOworICAgICAgICBmbG9hdCBheGlzU2NhbGUgPSAoc2lkZSA9PSBQQUw6OkJveFNpZGU6OlRv
cCB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tKSA/IGNvbnRleHRTY2FsZS5oZWlnaHQo
KSA6IGNvbnRleHRTY2FsZS53aWR0aCgpOwogICAgICAgICBpZiAoIWN1cnJFZGdlLm9ic2N1cmVz
QmFja2dyb3VuZEVkZ2UoYXhpc1NjYWxlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkBAIC0yMzMwLDcgKzIzMzAsNyBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3Jk
ZXJPYnNjdXJlc0JhY2tncm91bmQoKSBjb25zdAogCiAgICAgYXV0byBlZGdlcyA9IGJvcmRlckVk
Z2VzKHN0eWxlKCksIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKLSAgICBmb3Ig
KGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7CisgICAgZm9yIChhdXRvIHNpZGUgOiBQQUw6OmFs
bEJveFNpZGVzKSB7CiAgICAgICAgIGlmICghZWRnZXMuYXQoc2lkZSkub2JzY3VyZXNCYWNrZ3Jv
dW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCAxNWZkZjkzNGRlZTIz
NmZjMzkzYmExOTAwMjA3NjNmMmQ1ZmQ1YjQyLi4wZDEzZWQ0NTI5OGM3OWU3MjI2OGZkYmJmNzhl
NzMwZGZiMTk4ZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaApAQCAtMzE1LDEwICszMTUsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIGZp
eGVkQmFja2dyb3VuZFBhaW50c0luTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwogCiAgICAgdm9p
ZCBjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUm91bmRlZFJl
Y3QmIG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQm94U2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVzLCBi
b29sIHNlY29uZEVkZ2VNYXRjaGVzKTsKKyAgICAgICAgUEFMOjpCb3hTaWRlLCBib29sIGZpcnN0
RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpOwogCiAgICAgdm9pZCBwYWludE9u
ZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBS
b3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwK
LSAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUsIEJveFNpZGUgYWRq
YWNlbnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNpZGUyLCBjb25zdCBCb3JkZXJFZGdlcyYsCisg
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIHNpZGVSZWN0LCBQQUw6OkJveFNpZGUsIFBBTDo6Qm94
U2lkZSBhZGphY2VudFNpZGUxLCBQQUw6OkJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9y
ZGVyRWRnZXMmLAogICAgICAgICBjb25zdCBQYXRoKiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNl
LCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVk
Z2UsIGJvb2wgYW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvciA9IG51bGxwdHIp
OwogICAgIHZvaWQgcGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25z
dCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsIGNvbnN0IEludFBvaW50JiBpbm5lckJvcmRlckFk
anVzdG1lbnQsCiAgICAgICAgIGNvbnN0IEJvcmRlckVkZ2VzJiwgQm94U2lkZVNldCwgQmFja2dy
b3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UpOwpAQCAtMzI2LDcg
KzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEludFBvaW50JiBpbm5lckJvcmRlckFk
anVzdG1lbnQsIGNvbnN0IEJvcmRlckVkZ2VzJiwgQm94U2lkZVNldCwgQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlLAogICAgICAgICBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UsIGNvbnN0IENvbG9y
KiBvdmVycmlkZUNvbG9yID0gbnVsbHB0cik7CiAgICAgdm9pZCBkcmF3Qm94U2lkZUZyb21QYXRo
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBQYXRoJiwgY29uc3Qg
Qm9yZGVyRWRnZXMmLAotICAgICAgICBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRyYXdUaGlja25l
c3MsIEJveFNpZGUsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICAgICAgZmxvYXQgdGhpY2tuZXNz
LCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBQQUw6OkJveFNpZGUsIGNvbnN0IFJlbmRlclN0eWxlJiwK
ICAgICAgICAgQ29sb3IsIEJvcmRlclN0eWxlLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIGJv
b2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7
CiAgICAgdm9pZCBwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciosIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IElubGluZUl0ZXJhdG9yOjpJbmxpbmVCb3hJdGVyYXRvciYsIGNvbnN0
IExheW91dFJlY3QmKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmNwcAppbmRleCA2ZWNjMGRlMzk3MmQyNzkwNjNmM2M1ZTczN2E3NTg4MTNmNzQz
YjQwLi4zY2E1OWNiYzk1ODNjY2ZiNzYxNzlhYmIxNWQ1YjI0NDUzNDBlYTUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKQEAgLTEyMiw3ICsx
MjIsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dElmTmVlZGVkKCkKIAog
ICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZv
bnRTZWxlY3RvcigpOwogCi0gICAgZGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oRm9udE9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsKTsgLy8gV2UgYXJlIGdvaW5nIHRvIGRyYXcgY29tYmluZWQgdGV4
dCBob3Jpem9udGFsbHkuCisgICAgZGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oUEFMOjpGb250
T3JpZW50YXRpb246Okhvcml6b250YWwpOyAvLyBXZSBhcmUgZ29pbmcgdG8gZHJhdyBjb21iaW5l
ZCB0ZXh0IGhvcml6b250YWxseS4KIAogICAgIEZvbnRDYXNjYWRlIGhvcml6b250YWxGb250KEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24geyBkZXNjcmlwdGlvbiB9LCBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkubGV0dGVyU3BhY2luZygpLCBzdHlsZSgpLmZvbnRDYXNjYWRlKCkud29yZFNwYWNpbmcoKSk7
CiAgICAgaG9yaXpvbnRhbEZvbnQudXBkYXRlKGZvbnRTZWxlY3Rvcik7CkBAIC0xNDAsNyArMTQw
LDcgQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHRJZk5lZWRlZCgpCiAgICAg
ICAgIHNob3VsZFVwZGF0ZUZvbnQgPSBtX2NvbWJpbmVGb250U3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7IC8vIE5lZWQgdG8gY2hhbmdlIGZvbnQgb3JpZW50
YXRpb24gdG8gaG9yaXpvbnRhbC4KICAgICBlbHNlIHsKICAgICAgICAgLy8gTmVlZCB0byB0cnkg
Y29tcHJlc3NlZCBnbHlwaHMuCi0gICAgICAgIHN0YXRpYyBjb25zdCBGb250V2lkdGhWYXJpYW50
IHdpZHRoVmFyaWFudHNbXSA9IHsgRm9udFdpZHRoVmFyaWFudDo6SGFsZldpZHRoLCBGb250V2lk
dGhWYXJpYW50OjpUaGlyZFdpZHRoLCBGb250V2lkdGhWYXJpYW50OjpRdWFydGVyV2lkdGggfTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFBBTDo6Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnRz
W10gPSB7IFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6SGFsZldpZHRoLCBQQUw6OkZvbnRXaWR0aFZh
cmlhbnQ6OlRoaXJkV2lkdGgsIFBBTDo6Rm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoIH07
CiAgICAgICAgIGZvciAoYXV0byB3aWR0aFZhcmlhbnQgOiB3aWR0aFZhcmlhbnRzKSB7CiAgICAg
ICAgICAgICBkZXNjcmlwdGlvbi5zZXRXaWR0aFZhcmlhbnQod2lkdGhWYXJpYW50KTsgLy8gV2hl
biBtb2RpZnlpbmcgdGhpcywgbWFrZSBzdXJlIHRvIGtlZXAgaXQgaW4gc3luYyB3aXRoIEZvbnRQ
bGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAppbmRleCA3
ZTE4ZmYwYTZlNWZlYTQyZDYzNmE0OGUxMTA3MmM2MzYzMjc0YjhiLi5lYTM0MTg4NjQ3ZTM5ZGNj
ZjJiODAxY2QzYWRhYzU4NzEwZGRlZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcApAQCAtMTA0Myw3ICsx
MDQzLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFwcGx5TGluZUNsYW1w
KEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wKICAgICAgICAgY2hpbGQtPmxheW91dElm
TmVlZGVkKCk7CiAKICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgZG9uJ3Qgc3VwcG9ydCBSVEwu
Ci0gICAgICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpICE9IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKHN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBHZXQgdGhlIGxhc3QgbGlu
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3Bw
CmluZGV4IDFlNDMyY2Q2MTYzMDgxOTMxNTkyZWNiYTVhYWMxNTY5OTZmYzM3MTIuLmZmNDAwNDA4
N2EzMzBjZjk0YmEzOGVjY2MzYjQyNTg1NTg5NzQ4ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKQEAgLTc2LDE5ICs3NiwxOSBAQCBz
dGF0aWMgUGF0aCBjcmVhdGVSaWdodEFycm93UGF0aCgpCiBSZW5kZXJEZXRhaWxzTWFya2VyOjpP
cmllbnRhdGlvbiBSZW5kZXJEZXRhaWxzTWFya2VyOjpvcmllbnRhdGlvbigpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChzdHlsZSgpLndyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgog
ICAgICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm4gaXNPcGVuKCkgPyBEb3duIDogUmlnaHQ7CiAgICAgICAgIHJldHVybiBpc09wZW4o
KSA/IERvd24gOiBMZWZ0OwotICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAg
IGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CiAgICAgICAgIGlmIChzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBpc09wZW4oKSA/
IExlZnQgOiBEb3duOwogICAgICAgICByZXR1cm4gaXNPcGVuKCkgPyBMZWZ0IDogVXA7Ci0gICAg
Y2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodDoKICAgICAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIGlzT3BlbigpID8gUmlnaHQgOiBEb3duOwogICAgICAg
ICByZXR1cm4gaXNPcGVuKCkgPyBSaWdodCA6IFVwOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJv
dHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAgICAg
ICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBpc09wZW4oKSA/IFVwIDogUmlnaHQ7CiAgICAgICAgIHJldHVybiBpc09wZW4oKSA/IFVw
IDogTGVmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRl
eCA1NDYzZGY0NDM3YTgxOWY1MGQzMTQyMWZhOTk5MmM3ZTM5ZmEwZWIzLi45OTBkODhjMmMxNTA2
OTU0MThhMTkyZTU4ZDQ0OTk4MWVkZTBhYjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50
OjppbnZhbGlkYXRlQ2FjaGVkRmlyc3RMaW5lU3R5bGUoKQogCiB2b2lkIFJlbmRlckVsZW1lbnQ6
OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlKQogewotICAgIEFTU0VSVChzZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKCkgfHwgbmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkuc2hvdWxkQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMoKSA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pOworICAgIEFT
U0VSVChzZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgfHwgbmV3U3R5
bGUuZm9udERlc2NyaXB0aW9uKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA9PSBQ
QUw6OkFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CiAKICAgICBhdXRvKiBvbGRTdHlsZSA9
IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAob2xk
U3R5bGUpIHsKQEAgLTE3NDYsNyArMTc0Niw3IEBAIExheW91dFJlY3QgUmVuZGVyRWxlbWVudDo6
YWJzb2x1dGVBbmNob3JSZWN0V2l0aFNjcm9sbE1hcmdpbihib29sKiBpbnNpZGVGaXhlZCkKICAg
ICByZXR1cm4gYWJzb2x1dGVBbmNob3JSZWN0KGluc2lkZUZpeGVkKTsKIH0KIAotdm9pZCBSZW5k
ZXJFbGVtZW50OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwg
Qm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGph
Y2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0Cit2b2lkIFJlbmRlckVsZW1lbnQ6OmRy
YXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBQQUw6OkJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0
eWxlIGJvcmRlclN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0
aDIsIGJvb2wgYW50aWFsaWFzKSBjb25zdAogewogICAgIGF1dG8gZHJhd0JvcmRlclJlY3QgPSBb
JmdyYXBoaWNzQ29udGV4dF0gKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICB7CkBAIC0xNzU1
LDcgKzE3NTUsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd1JlY3QocmVjdCk7CiAgICAgfTsKIAotICAgIGF1dG8gZHJhd0xpbmVGb3IgPSBb
dGhpcywgJmdyYXBoaWNzQ29udGV4dCwgY29sb3IsIGFudGlhbGlhc10gKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgQm94U2lkZSBzaWRlLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgY29uc3QgRmxv
YXRTaXplJiBhZGphY2VudCkKKyAgICBhdXRvIGRyYXdMaW5lRm9yID0gW3RoaXMsICZncmFwaGlj
c0NvbnRleHQsIGNvbG9yLCBhbnRpYWxpYXNdIChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFBBTDo6
Qm94U2lkZSBzaWRlLCBCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSwgY29uc3QgRmxvYXRTaXplJiBh
ZGphY2VudCkKICAgICB7CiAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE3NjgsNyArMTc2OCw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZHJhd0xp
bmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGCiAg
ICAgZmxvYXQgeTIgPSByZWN0Lm1heFkoKTsKICAgICBmbG9hdCB0aGlja25lc3M7CiAgICAgZmxv
YXQgbGVuZ3RoOwotICAgIGlmIChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNp
ZGU6OkJvdHRvbSkgeworICAgIGlmIChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUg
PT0gUEFMOjpCb3hTaWRlOjpCb3R0b20pIHsKICAgICAgICAgdGhpY2tuZXNzID0geTIgLSB5MTsK
ICAgICAgICAgbGVuZ3RoID0geDIgLSB4MTsKICAgICB9IGVsc2UgewpAQCAtMTgxNCwxMyArMTgx
NCwxMyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldFNob3VsZEFudGlhbGlhcyhhbnRpYWxpYXMpOwogCiAgICAgICAgICAgICBzd2l0Y2gg
KHNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgotICAgICAgICAgICAgY2Fz
ZSBCb3hTaWRlOjpCb3R0b206CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgor
ICAgICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OkJvdHRvbToKICAgICAgICAgICAgICAgICBk
cmF3Qm9yZGVyUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEsIHkxLCBs
ZW5ndGgsIHRoaXJkT2ZUaGlja25lc3MpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAg
ICAgICAgIGRyYXdCb3JkZXJSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4
MSwgeTIgLSB0aGlyZE9mVGhpY2tuZXNzLCBsZW5ndGgsIHRoaXJkT2ZUaGlja25lc3MpLCBkZXZp
Y2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBCb3hTaWRlOjpMZWZ0OgotICAgICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICAg
ICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBQQUw6OkJv
eFNpZGU6OlJpZ2h0OgogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJSZWN0KHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSwgeTEsIHRoaXJkT2ZUaGlja25lc3MsIGxlbmd0aCks
IGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlclJlY3Qoc25h
cFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgyIC0gdGhpcmRPZlRoaWNrbmVzcywgeTEs
IHRoaXJkT2ZUaGlja25lc3MsIGxlbmd0aCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xODQyLDI4ICsxODQyLDI4IEBAIHZvaWQgUmVuZGVyRWxlbWVu
dDo6ZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBGCiAKICAgICAgICAgICAgIEZsb2F0UmVjdCBwYWludEJvcmRlclJlY3Q7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAg
ICAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlRvcDoKICAgICAgICAgICAgICAgICBwYWludEJv
cmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QoeDEgKyBtaXRyZU9m
ZnNldDEsIHkxLCAoeDIgLSBtaXRyZU9mZnNldDMpIC0gKHgxICsgbWl0cmVPZmZzZXQxKSwgdGhp
cmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgICAgICBkcmF3
TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRT
aXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdUaGlyZCkpOwogCiAgICAgICAgICAg
ICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0
KHgxICsgbWl0cmVPZmZzZXQyLCB5MiAtIHRoaXJkT2ZUaGlja25lc3MsICh4MiAtIG1pdHJlT2Zm
c2V0NCkgLSAoeDEgKyBtaXRyZU9mZnNldDIpLCB0aGlyZE9mVGhpY2tuZXNzKSwgZGV2aWNlU2Nh
bGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdMaW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwg
c2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnVGhpcmQsIGFk
amFjZW50MkJpZ1RoaXJkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEJveFNpZGU6OkxlZnQ6CisgICAgICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoK
ICAgICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KExheW91dFJlY3QoeDEsIHkxICsgbWl0cmVPZmZzZXQxLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIg
LSBtaXRyZU9mZnNldDMpIC0gKHkxICsgbWl0cmVPZmZzZXQxKSksIGRldmljZVNjYWxlRmFjdG9y
KTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJv
cmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJC
aWdUaGlyZCkpOwogCiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJSZWN0ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgyIC0gdGhpcmRPZlRoaWNrbmVzcywgeTEgKyBtaXRy
ZU9mZnNldDIsIHRoaXJkT2ZUaGlja25lc3MsICh5MiAtIG1pdHJlT2Zmc2V0NCkgLSAoeTEgKyBt
aXRyZU9mZnNldDIpKSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgICAgIGRyYXdM
aW5lRm9yKHBhaW50Qm9yZGVyUmVjdCwgc2lkZSwgQm9yZGVyU3R5bGU6OlNvbGlkLCBGbG9hdFNp
emUoYWRqYWNlbnQxQmlnVGhpcmQsIGFkamFjZW50MkJpZ1RoaXJkKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgICAg
IGNhc2UgUEFMOjpCb3hTaWRlOjpCb3R0b206CiAgICAgICAgICAgICAgICAgcGFpbnRCb3JkZXJS
ZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxICsgbWl0cmVPZmZzZXQy
LCB5MSwgKHgyIC0gbWl0cmVPZmZzZXQ0KSAtICh4MSArIG1pdHJlT2Zmc2V0MiksIHRoaXJkT2ZU
aGlja25lc3MpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICAgICAgZHJhd0xpbmVG
b3IocGFpbnRCb3JkZXJSZWN0LCBzaWRlLCBCb3JkZXJTdHlsZTo6U29saWQsIEZsb2F0U2l6ZShh
ZGphY2VudDFCaWdUaGlyZCwgYWRqYWNlbnQyQmlnVGhpcmQpKTsKIAogICAgICAgICAgICAgICAg
IHBhaW50Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh4MSAr
IG1pdHJlT2Zmc2V0MSwgeTIgLSB0aGlyZE9mVGhpY2tuZXNzLCAoeDIgLSBtaXRyZU9mZnNldDMp
IC0gKHgxICsgbWl0cmVPZmZzZXQxKSwgdGhpcmRPZlRoaWNrbmVzcyksIGRldmljZVNjYWxlRmFj
dG9yKTsKICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUs
IEJvcmRlclN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2Vu
dDJCaWdUaGlyZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBC
b3hTaWRlOjpSaWdodDoKKyAgICAgICAgICAgIGNhc2UgUEFMOjpCb3hTaWRlOjpSaWdodDoKICAg
ICAgICAgICAgICAgICBwYWludEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExh
eW91dFJlY3QoeDEsIHkxICsgbWl0cmVPZmZzZXQyLCB0aGlyZE9mVGhpY2tuZXNzLCAoeTIgLSBt
aXRyZU9mZnNldDQpIC0gKHkxICsgbWl0cmVPZmZzZXQyKSksIGRldmljZVNjYWxlRmFjdG9yKTsK
ICAgICAgICAgICAgICAgICBkcmF3TGluZUZvcihwYWludEJvcmRlclJlY3QsIHNpZGUsIEJvcmRl
clN0eWxlOjpTb2xpZCwgRmxvYXRTaXplKGFkamFjZW50MUJpZ1RoaXJkLCBhZGphY2VudDJCaWdU
aGlyZCkpOwogCkBAIC0xODk5LDE2ICsxODk5LDE2IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZHJh
d0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBG
CiAgICAgICAgIGZsb2F0IG9mZnNldDMgPSAwOwogICAgICAgICBmbG9hdCBvZmZzZXQ0ID0gMDsK
IAotICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6
OkxlZnQpICYmIGFkamFjZW50V2lkdGgxIDwgMCkgfHwgKChzaWRlID09IEJveFNpZGU6OkJvdHRv
bSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApKQorICAg
ICAgICBpZiAoKChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gUEFMOjpCb3hT
aWRlOjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMSA8IDApIHx8ICgoc2lkZSA9PSBQQUw6OkJveFNp
ZGU6OkJvdHRvbSB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lk
dGgxID4gMCkpCiAgICAgICAgICAgICBvZmZzZXQxID0gZmxvb3JUb0RldmljZVBpeGVsKGFkamFj
ZW50V2lkdGgxIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgICAgIGlmICgoKHNpZGUg
PT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6TGVmdCkgJiYgYWRqYWNlbnRXaWR0
aDIgPCAwKSB8fCAoKHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0gQm94U2lkZTo6
UmlnaHQpICYmIGFkamFjZW50V2lkdGgyID4gMCkpCisgICAgICAgIGlmICgoKHNpZGUgPT0gUEFM
OjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50
V2lkdGgyIDwgMCkgfHwgKChzaWRlID09IFBBTDo6Qm94U2lkZTo6Qm90dG9tIHx8IHNpZGUgPT0g
UEFMOjpCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDIgPiAwKSkKICAgICAgICAgICAg
IG9mZnNldDIgPSBjZWlsVG9EZXZpY2VQaXhlbChhZGphY2VudFdpZHRoMiAvIDIsIGRldmljZVNj
YWxlRmFjdG9yKTsKIAotICAgICAgICBpZiAoKChzaWRlID09IEJveFNpZGU6OlRvcCB8fCBzaWRl
ID09IEJveFNpZGU6OkxlZnQpICYmIGFkamFjZW50V2lkdGgxID4gMCkgfHwgKChzaWRlID09IEJv
eFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IEJveFNpZGU6OlJpZ2h0KSAmJiBhZGphY2VudFdpZHRo
MSA8IDApKQorICAgICAgICBpZiAoKChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8IHNpZGUg
PT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSAmJiBhZGphY2VudFdpZHRoMSA+IDApIHx8ICgoc2lkZSA9
PSBQQUw6OkJveFNpZGU6OkJvdHRvbSB8fCBzaWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQpICYm
IGFkamFjZW50V2lkdGgxIDwgMCkpCiAgICAgICAgICAgICBvZmZzZXQzID0gZmxvb3JUb0Rldmlj
ZVBpeGVsKGZhYnMoYWRqYWNlbnRXaWR0aDEpIC8gMiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0g
ICAgICAgIGlmICgoKHNpZGUgPT0gQm94U2lkZTo6VG9wIHx8IHNpZGUgPT0gQm94U2lkZTo6TGVm
dCkgJiYgYWRqYWNlbnRXaWR0aDIgPiAwKSB8fCAoKHNpZGUgPT0gQm94U2lkZTo6Qm90dG9tIHx8
IHNpZGUgPT0gQm94U2lkZTo6UmlnaHQpICYmIGFkamFjZW50V2lkdGgyIDwgMCkpCisgICAgICAg
IGlmICgoKHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBQQUw6OkJveFNpZGU6
OkxlZnQpICYmIGFkamFjZW50V2lkdGgyID4gMCkgfHwgKChzaWRlID09IFBBTDo6Qm94U2lkZTo6
Qm90dG9tIHx8IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpSaWdodCkgJiYgYWRqYWNlbnRXaWR0aDIg
PCAwKSkKICAgICAgICAgICAgIG9mZnNldDQgPSBjZWlsVG9EZXZpY2VQaXhlbChhZGphY2VudFdp
ZHRoMiAvIDIsIGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgICAgICBmbG9hdCBhZGp1c3RlZFgg
PSBjZWlsVG9EZXZpY2VQaXhlbCgoeDEgKyB4MikgLyAyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CkBA
IC0xOTIwLDE5ICsxOTIwLDE5IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVGb3JCb3hT
aWRlKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGCiAgICAgICAgIHky
ID0gcm91bmRUb0RldmljZVBpeGVsKHkyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICAgICAg
c3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgorICAgICAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoeDEgKyBvZmZzZXQxLCB5MSksIEZsb2F0UG9pbnQoeDIgLSBvZmZzZXQyLCBhZGp1
c3RlZFkpKSwgc2lkZSwgczEsIEZsb2F0U2l6ZShhZGphY2VudDFCaWdIYWxmLCBhZGphY2VudDJC
aWdIYWxmKSk7CiAgICAgICAgICAgICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludCh4
MSArIG9mZnNldDMsIGFkanVzdGVkWSksIEZsb2F0UG9pbnQoeDIgLSBvZmZzZXQ0LCB5MikpLCBz
aWRlLCBzMiwgRmxvYXRTaXplKGFkamFjZW50MVNtYWxsSGFsZiwgYWRqYWNlbnQyU21hbGxIYWxm
KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgorICAg
ICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgIGRyYXdMaW5lRm9yKEZs
b2F0UmVjdChGbG9hdFBvaW50KHgxLCB5MSArIG9mZnNldDEpLCBGbG9hdFBvaW50KGFkanVzdGVk
WCwgeTIgLSBvZmZzZXQyKSksIHNpZGUsIHMxLCBGbG9hdFNpemUoYWRqYWNlbnQxQmlnSGFsZiwg
YWRqYWNlbnQyQmlnSGFsZikpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoYWRqdXN0ZWRYLCB5MSArIG9mZnNldDMpLCBGbG9hdFBvaW50KHgyLCB5MiAtIG9m
ZnNldDQpKSwgc2lkZSwgczIsIEZsb2F0U2l6ZShhZGphY2VudDFTbWFsbEhhbGYsIGFkamFjZW50
MlNtYWxsSGFsZikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm94U2lkZTo6
Qm90dG9tOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICAgICAg
ZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoeDEgKyBvZmZzZXQxLCB5MSksIEZsb2F0
UG9pbnQoeDIgLSBvZmZzZXQyLCBhZGp1c3RlZFkpKSwgc2lkZSwgczIsIEZsb2F0U2l6ZShhZGph
Y2VudDFCaWdIYWxmLCBhZGphY2VudDJCaWdIYWxmKSk7CiAgICAgICAgICAgICBkcmF3TGluZUZv
cihGbG9hdFJlY3QoRmxvYXRQb2ludCh4MSArIG9mZnNldDMsIGFkanVzdGVkWSksIEZsb2F0UG9p
bnQoeDIgLSBvZmZzZXQ0LCB5MikpLCBzaWRlLCBzMSwgRmxvYXRTaXplKGFkamFjZW50MVNtYWxs
SGFsZiwgYWRqYWNlbnQyU21hbGxIYWxmKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0Ogog
ICAgICAgICAgICAgZHJhd0xpbmVGb3IoRmxvYXRSZWN0KEZsb2F0UG9pbnQoeDEsIHkxICsgb2Zm
c2V0MSksIEZsb2F0UG9pbnQoYWRqdXN0ZWRYLCB5MiAtIG9mZnNldDIpKSwgc2lkZSwgczIsIEZs
b2F0U2l6ZShhZGphY2VudDFCaWdIYWxmLCBhZGphY2VudDJCaWdIYWxmKSk7CiAgICAgICAgICAg
ICBkcmF3TGluZUZvcihGbG9hdFJlY3QoRmxvYXRQb2ludChhZGp1c3RlZFgsIHkxICsgb2Zmc2V0
MyksIEZsb2F0UG9pbnQoeDIsIHkyIC0gb2Zmc2V0NCkpLCBzaWRlLCBzMSwgRmxvYXRTaXplKGFk
amFjZW50MVNtYWxsSGFsZiwgYWRqYWNlbnQyU21hbGxIYWxmKSk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTE5NjcsMjUgKzE5NjcsMjUgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpkcmF3TGluZUZv
ckJveFNpZGUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEYKICAgICAg
ICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7CiAgICAgICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSg0KTsKICAgICAgICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgICAgIGNhc2UgQm94U2lk
ZTo6VG9wOgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEs
IDApLCB5MSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6
Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSk7CiAgICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwg
MCksIHkyIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6
bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MSB9KTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICAgICAgY2FzZSBQQUw6OkJveFNp
ZGU6OkJvdHRvbToKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6
Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7CiAgICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwg
MCksIHkyIH0pOwogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6
bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKICAgICAgICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAw
KSwgeTEgfSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0
OgorICAgICAgICBjYXNlIFBBTDo6Qm94U2lkZTo6TGVmdDoKICAgICAgICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwg
MCkgfSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6
bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0pOwogICAgICAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAw
KSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjpt
YXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCkgfSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKKyAgICAgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJp
Z2h0OgogICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1h
eDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKICAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkg
fSk7CiAgICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4
PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0pOwpAQCAtMjE0MiwxMCArMjE0MiwxMCBAQCB2
b2lkIFJlbmRlckVsZW1lbnQ6OnBhaW50T3V0bGluZShQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UmVjdCYgcGFpbnRSZQogICAgIGZsb2F0IGJvdHRvbU91dGVyID0gb3V0ZXIubWF4
WSgpOwogICAgIGZsb2F0IGJvdHRvbUlubmVyID0gc3RkOjptaW4oaW5uZXIubWF4WSgpLCBib3R0
b21PdXRlcik7CiAKLSAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9h
dFJlY3QoRmxvYXRQb2ludChsZWZ0T3V0ZXIsIHRvcE91dGVyKSwgRmxvYXRQb2ludChsZWZ0SW5u
ZXIsIGJvdHRvbU91dGVyKSksIEJveFNpZGU6OkxlZnQsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0
eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7Ci0gICAgZHJhd0xpbmVGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQobGVmdE91dGVyLCB0b3BPdXRl
ciksIEZsb2F0UG9pbnQocmlnaHRPdXRlciwgdG9wSW5uZXIpKSwgQm94U2lkZTo6VG9wLCBvdXRs
aW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwotICAg
IGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50
KHJpZ2h0SW5uZXIsIHRvcE91dGVyKSwgRmxvYXRQb2ludChyaWdodE91dGVyLCBib3R0b21PdXRl
cikpLCBCb3hTaWRlOjpSaWdodCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIG91dGxpbmVX
aWR0aCwgb3V0bGluZVdpZHRoKTsKLSAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludChsZWZ0T3V0ZXIsIGJvdHRvbUlubmVyKSwgRmxvYXRQ
b2ludChyaWdodE91dGVyLCBib3R0b21PdXRlcikpLCBCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVD
b2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CisgICAgZHJh
d0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQobGVm
dE91dGVyLCB0b3BPdXRlciksIEZsb2F0UG9pbnQobGVmdElubmVyLCBib3R0b21PdXRlcikpLCBQ
QUw6OkJveFNpZGU6OkxlZnQsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lk
dGgsIG91dGxpbmVXaWR0aCk7CisgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4
dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQobGVmdE91dGVyLCB0b3BPdXRlciksIEZsb2F0UG9pbnQo
cmlnaHRPdXRlciwgdG9wSW5uZXIpKSwgUEFMOjpCb3hTaWRlOjpUb3AsIG91dGxpbmVDb2xvciwg
b3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CisgICAgZHJhd0xpbmVG
b3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQocmlnaHRJbm5l
ciwgdG9wT3V0ZXIpLCBGbG9hdFBvaW50KHJpZ2h0T3V0ZXIsIGJvdHRvbU91dGVyKSksIFBBTDo6
Qm94U2lkZTo6UmlnaHQsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgs
IG91dGxpbmVXaWR0aCk7CisgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQobGVmdE91dGVyLCBib3R0b21Jbm5lciksIEZsb2F0UG9pbnQo
cmlnaHRPdXRlciwgYm90dG9tT3V0ZXIpKSwgUEFMOjpCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVD
b2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CiAKICAgICBp
ZiAodXNlVHJhbnNwYXJlbmN5TGF5ZXIpCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5lbmRUcmFu
c3BhcmVuY3lMYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
aW5kZXggYjhlZGEyNGMyMDFmMWVmNjM1Y2VlY2JiZTIwMmJiYzJmNzgzOTAxZC4uM2ZkYTEzOTQy
MjY0MDNlMjhiYzk0MWE4MGQzN2NlNWM4ZWE5ZWQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5oCkBAIC0yMjgsNyArMjI4LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzQ291bnRlck5vZGVNYXAoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvdW50ZXJOb2RlTWFwOyB9
CiAgICAgdm9pZCBzZXRIYXNDb3VudGVyTm9kZU1hcChib29sIGYpIHsgbV9oYXNDb3VudGVyTm9k
ZU1hcCA9IGY7IH0KIAotICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIEJveFNpZGUsIENvbG9yLCBCb3JkZXJTdHlsZSwgZmxvYXQg
YWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlhcyA9IGZh
bHNlKSBjb25zdDsKKyAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmLCBQQUw6OkJveFNpZGUsIENvbG9yLCBCb3JkZXJTdHlsZSwgZmxv
YXQgYWRqYWNlbnRXaWR0aDEsIGZsb2F0IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlhcyA9
IGZhbHNlKSBjb25zdDsKIAogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAgdm9pZCBh
ZGp1c3RDb21wdXRlZEZvbnRTaXplc09uQmxvY2tzKGZsb2F0IHNpemUsIGZsb2F0IHZpc2libGVX
aWR0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAppbmRleCA4Nzg1ZjIyOTljODBkMzk0NmU4ZmZkMjE2NjJkMDI5MjE5NDYz
MWY3Li4yOTIyZTE5M2Q2NzI4MDNiNjViYjVhOTA0NzhhOTczNjkzYWJlNjc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAK
QEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9i
amVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbgogICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkgewogICAgICAgICBjb25zdCBT
dHJpbmcmIGRpc3BsYXllZEZpbGVuYW1lID0gZmlsZVRleHRWYWx1ZSgpOwogICAgICAgICBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKLSAgICAgICAgVGV4
dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihkaXNwbGF5ZWRGaWxlbmFtZSwgc3R5bGUo
KSwgQWxsb3dSaWdodEV4cGFuc2lvbiwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJlY3Rp
b25PdmVycmlkZSk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4o
ZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbiwgUmVz
cGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJlY3Rpb25PdmVycmlkZSk7CiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgICAgICBpbnQgaWNvbkhlaWdodCA9IG5vZGVIZWlnaHQodXBsb2Fk
QnV0dG9uKCkpOwpAQCAtMjA1LDEwICsyMDUsMTAgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWMK
ICAgICBjb25zdCBTdHJpbmcgY2hhcmFjdGVyQXNTdHJpbmcgPSBTdHJpbmcoJmNoYXJhY3Rlciwg
MSk7CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7
CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcyBjb25zdF9jYXN0IGJ5IG1h
a2luZyBjb25zdHJ1Y3RUZXh0UnVuIHRha2UgYSBjb25zdCBSZW5kZXJPYmplY3QqLgotICAgIGZs
b2F0IG1pbkRlZmF1bHRMYWJlbFdpZHRoID0gZGVmYXVsdFdpZHRoTnVtQ2hhcnMgKiBmb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW4oY2hhcmFjdGVyQXNTdHJpbmcsIHN0eWxlKCksIEFsbG93Umln
aHRFeHBhbnNpb24pKTsKKyAgICBmbG9hdCBtaW5EZWZhdWx0TGFiZWxXaWR0aCA9IGRlZmF1bHRX
aWR0aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKGNoYXJhY3RlckFzU3Ry
aW5nLCBzdHlsZSgpLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24pKTsKIAogICAgIGNvbnN0IFN0
cmluZyBsYWJlbCA9IHRoZW1lKCkuZmlsZUxpc3REZWZhdWx0TGFiZWwoaW5wdXRFbGVtZW50KCku
bXVsdGlwbGUoKSk7Ci0gICAgZmxvYXQgZGVmYXVsdExhYmVsV2lkdGggPSBmb250LndpZHRoKGNv
bnN0cnVjdFRleHRSdW4obGFiZWwsIHN0eWxlKCksIEFsbG93UmlnaHRFeHBhbnNpb24pKTsKKyAg
ICBmbG9hdCBkZWZhdWx0TGFiZWxXaWR0aCA9IGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bihs
YWJlbCwgc3R5bGUoKSwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uKSk7CiAgICAgaWYgKEhUTUxJ
bnB1dEVsZW1lbnQqIGJ1dHRvbiA9IHVwbG9hZEJ1dHRvbigpKQogICAgICAgICBpZiAoUmVuZGVy
T2JqZWN0KiBidXR0b25SZW5kZXJlciA9IGJ1dHRvbi0+cmVuZGVyZXIoKSkKICAgICAgICAgICAg
IGRlZmF1bHRMYWJlbFdpZHRoICs9IGJ1dHRvblJlbmRlcmVyLT5tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSArIGFmdGVyQnV0dG9uU3BhY2luZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxleGlibGVCb3guY3BwCmluZGV4IGMyOTY5NjJiYWVjZjlkMWMxNTllNDExOTQ2
MDcxN2NiNmFiMWVjZDMuLmNhNTQ1NjIxZTA1YmQ5NmM5MjdiMTdjZTc3NThmMDI2ZDJkOTY3ZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcApA
QCAtNDIsOCArNDIsOCBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAi
V3JpdGluZ01vZGUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8cGFsL3RleHQvV3Jp
dGluZ01vZGUuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CkBAIC00OTAs
NyArNDkwLDcgQEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6aXNIb3Jpem9udGFsRmxvdygpIGNv
bnN0CiBib29sIFJlbmRlckZsZXhpYmxlQm94Ojppc0xlZnRUb1JpZ2h0RmxvdygpIGNvbnN0CiB7
CiAgICAgaWYgKGlzQ29sdW1uRmxvdygpKQotICAgICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5n
TW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSB8fCBzdHlsZSgpLndyaXRpbmdNb2Rl
KCkgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OworICAgICAgICByZXR1cm4gc3R5bGUoKS53
cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8IHN0eWxlKCku
d3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDsKICAgICByZXR1
cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgXiAoc3R5bGUoKS5mbGV4RGlyZWN0
aW9uKCkgPT0gRmxleERpcmVjdGlvbjo6Um93UmV2ZXJzZSk7CiB9CiAKQEAgLTY4MywyMiArNjgz
LDIyIEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmNvbXB1
dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKFJlbmRlCiAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVM
b2dpY2FsV2lkdGhJbkZyYWdtZW50VXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSwgKnRoaXMsIGZyYWdtZW50KSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2Fs
V2lkdGgoKTsKIH0KIAotV3JpdGluZ01vZGUgUmVuZGVyRmxleGlibGVCb3g6OnRyYW5zZm9ybWVk
V3JpdGluZ01vZGUoKSBjb25zdAorUEFMOjpXcml0aW5nTW9kZSBSZW5kZXJGbGV4aWJsZUJveDo6
dHJhbnNmb3JtZWRXcml0aW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgV3JpdGluZ01vZGUgbW9kZSA9
IHN0eWxlKCkud3JpdGluZ01vZGUoKTsKKyAgICBQQUw6OldyaXRpbmdNb2RlIG1vZGUgPSBzdHls
ZSgpLndyaXRpbmdNb2RlKCk7CiAgICAgaWYgKCFpc0NvbHVtbkZsb3coKSkKICAgICAgICAgcmV0
dXJuIG1vZGU7CiAgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6Ci0gICAg
ICAgIHJldHVybiBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFdyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodCA6IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDsKLSAgICBjYXNlIFdyaXRp
bmdNb2RlOjpMZWZ0VG9SaWdodDoKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoK
LSAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gV3JpdGlu
Z01vZGU6OlRvcFRvQm90dG9tIDogV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOworICAgIGNhc2Ug
UEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpCb3R0b21Ub1RvcDoKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgOiBQQUw6OldyaXRpbmdNb2Rl
OjpSaWdodFRvTGVmdDsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0Ogor
ICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgIHJldHVybiBz
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFBBTDo6V3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tIDogUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A7CiAgICAgfQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207Cisg
ICAgcmV0dXJuIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOwogfQogCiBMYXlvdXRVbml0
IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0CkBAIC03MTgs
MTMgKzcxOCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjpmbG93QXdhcmVCb3Jk
ZXJFbmQoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9y
ZGVyQmVmb3JlKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGluZ01vZGUo
KSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2UgUEFMOjpX
cml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVybiBib3JkZXJUb3AoKTsKLSAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OkJvdHRvbVRvVG9wOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7Ci0gICAgY2Fz
ZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpM
ZWZ0VG9SaWdodDoKICAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQoKTsKLSAgICBjYXNlIFdyaXRp
bmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9M
ZWZ0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHQoKTsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC03MzQsMTMgKzczNCwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhp
YmxlQm94OjpmbG93QXdhcmVCb3JkZXJCZWZvcmUoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJG
bGV4aWJsZUJveDo6Zmxvd0F3YXJlQm9yZGVyQWZ0ZXIoKSBjb25zdAogewogICAgIHN3aXRjaCAo
dHJhbnNmb3JtZWRXcml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6VG9wVG9C
b3R0b206CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKICAgICAgICAg
cmV0dXJuIGJvcmRlckJvdHRvbSgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9w
OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CiAgICAgICAgIHJldHVy
biBib3JkZXJUb3AoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBj
YXNlIFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gYm9yZGVy
UmlnaHQoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBB
TDo6V3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgogICAgICAgICByZXR1cm4gYm9yZGVyTGVmdCgp
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc2NCwxMyArNzY0LDEzIEBA
IExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZsb3dBd2FyZVBhZGRpbmdFbmQoKSBjb25z
dAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlUGFkZGluZ0JlZm9yZSgp
IGNvbnN0CiB7CiAgICAgc3dpdGNoICh0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkpIHsKLSAgICBj
YXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6
OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gcGFkZGluZ1RvcCgpOwotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6Qm90dG9t
VG9Ub3A6CiAgICAgICAgIHJldHVybiBwYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5n
TW9kZTo6TGVmdFRvUmlnaHQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdo
dDoKICAgICAgICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6
UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAg
ICAgICAgcmV0dXJuIHBhZGRpbmdSaWdodCgpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTc4MCwxMyArNzgwLDEzIEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6
OmZsb3dBd2FyZVBhZGRpbmdCZWZvcmUoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJs
ZUJveDo6Zmxvd0F3YXJlUGFkZGluZ0FmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRyYW5z
Zm9ybWVkV3JpdGluZ01vZGUoKSkgewotICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9t
OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVy
biBwYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6Cisg
ICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIHBh
ZGRpbmdUb3AoKTsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNl
IFBBTDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gcGFkZGluZ1Jp
Z2h0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6
OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKICAgICAgICAgcmV0dXJuIHBhZGRpbmdMZWZ0KCk7
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODEwLDEzICs4MTAsMTMgQEAg
TGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6Zmxvd0F3YXJlTWFyZ2luRW5kRm9yQ2hpbGQo
Y29uc3QgUmVuZGVyQm94JiBjaGlsZCkKIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmZs
b3dBd2FyZU1hcmdpbkJlZm9yZUZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0
CiB7CiAgICAgc3dpdGNoICh0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFdy
aXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOgogICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luVG9wKCk7Ci0gICAgY2FzZSBXcml0
aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpCb3R0b21U
b1RvcDoKICAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOwotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6TGVmdFRv
UmlnaHQ6CiAgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5MZWZ0KCk7Ci0gICAgY2FzZSBXcml0
aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRv
TGVmdDoKICAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblJpZ2h0KCk7CiAgICAgfQogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guaAppbmRleCAyMTc1YTIzYjc3ZDI3MGI0YjYxZmU0NTQ0MjJmNTIyM2NiMTg3Y2Uw
Li45MzkwMWNlNzJmMjAxZGIxZmVhNTk3ZmRiYmFmNjVhZjVhZGNlOTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaApAQCAtMTI3LDcgKzEyNyw3IEBA
IHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCkgY29uc3Q7
CiAgICAgTGF5b3V0VW5pdCBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdCBjb250ZW50
TG9naWNhbEhlaWdodCk7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlTWFp
bkF4aXNFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBTaXplVHlwZSwgY29uc3QgTGVu
Z3RoJiBzaXplKTsKLSAgICBXcml0aW5nTW9kZSB0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29u
c3Q7CisgICAgUEFMOjpXcml0aW5nTW9kZSB0cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7
CiAgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0OwogICAgIExheW91
dFVuaXQgZmxvd0F3YXJlQm9yZGVyRW5kKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBmbG93QXdh
cmVCb3JkZXJCZWZvcmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCmluZGV4IDI2NWI4OTRmMzNmMmExM2E0MmNkZDg1MDI4
OWM2ODgwY2Y5NGFlOWMuLmRjODE4NTk3OTcyMjBhMzMxMDRjOTI3MGJkZGUzYzQ2ZTk1MjA1NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93
LmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0
ZUxvZ2ljYWxXaWR0aCgpCiAgICAgLy8gSWYgdGhlIGZyYWdtZW50cyBoYXZlIG5vbi11bmlmb3Jt
IGxvZ2ljYWwgd2lkdGhzLCB0aGVuIGluc2VydCBpbnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIFJl
bmRlckZyYWdtZW50ZWRGbG93LgogICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50
TGlzdCkgewogICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21l
bnQtPnBhZ2VMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9
IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2lj
YWxXaWR0aCAtIGZyYWdtZW50TG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0ID0gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/
IDBfbHUgOiBsb2dpY2FsV2lkdGggLSBmcmFnbWVudExvZ2ljYWxXaWR0aDsKICAgICAgICAgZnJh
Z21lbnQtPnNldFJlbmRlckJveEZyYWdtZW50SW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwgZnJhZ21l
bnRMb2dpY2FsV2lkdGgsIGZhbHNlKTsKICAgICB9CiB9CkBAIC04NDIsNyArODQyLDcgQEAgdm9p
ZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6dXBkYXRlRnJhZ21lbnRzRnJhZ21lbnRlZEZsb3dQb3J0
aW9uUmVjdCgpCiAgICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFn
bWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9n
aWNhbEhlaWdodCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZyYWdtZW50ZWRGbG93Ojpt
YXhMb2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0LCBmcmFnbWVudC0+bG9naWNhbEhlaWdo
dE9mQWxsRnJhZ21lbnRlZEZsb3dDb250ZW50KCkpOwogCi0gICAgICAgIExheW91dFJlY3QgZnJh
Z21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9s
dSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQs
IGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOworICAgICAgICBM
YXlvdXRSZWN0IGZyYWdtZW50UmVjdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxI
ZWlnaHQpOwogCiAgICAgICAgIGZyYWdtZW50LT5zZXRGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3Qu
dHJhbnNwb3NlZFJlY3QoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAKaW5kZXggOGNmNGZlMjVjMDBmY2ZkOTIwYmFiM2E2ZTcyMWU3MjYyNzM4YjUzZS4uYWI2
MDQwNGFiNjA1MjM3OWY3ZjM2ZDkwMWQ3MzE4NDMyMDdjNjRkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBMCiAgICAgICAgIGJvdHRvbVJpZ2h0Lm1vdmUoMCwgLTIgKiBvdXRsaW5l
T2Zmc2V0KTsKICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSAtb3V0bGluZVdpZHRoOwogICAgIH0K
LSAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVm
dCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHls
ZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOworICAgIGRyYXdM
aW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21S
aWdodCksIFBBTDo6Qm94U2lkZTo6TGVmdCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFk
amFjZW50V2lkdGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKICAgICAKICAgICAvLyBy
aWdodCBlZGdlCiAgICAgdG9wTGVmdCA9IG91dGxpbmVCb3hSZWN0Lm1heFhNaW5ZQ29ybmVyKCk7
CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9y
TGluZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAgICAgICBi
b3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwgLTIgKiBvdXRsaW5lT2Zmc2V0KTsKICAgICAg
ICAgYWRqYWNlbnRXaWR0aDIgPSAtb3V0bGluZVdpZHRoOwogICAgIH0KLSAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQp
LCBCb3hTaWRlOjpSaWdodCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lk
dGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICBkcmF3TGluZUZvckJveFNpZGUo
Z3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBQQUw6OkJv
eFNpZGU6OlJpZ2h0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEs
IGFkamFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOwogCiAgICAgLy8gdXBwZXIgZWRnZQogICAgIGlm
ICh0aGlzTGluZS54KCkgPCBwcmV2aW91c0xpbmUueCgpKSB7CkBAIC0xMDUxLDcgKzEwNTEsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTAogICAgICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSAt
b3V0bGluZVdpZHRoOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkamFjZW50V2lkdGgy
ID0gb3V0bGluZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpUb3AsIG91dGxp
bmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFu
dGlhbGlhcyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZs
b2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6VG9wLCBvdXRsaW5l
Q29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgyLCBhbnRp
YWxpYXMpOwogICAgIH0KICAgICAKICAgICBpZiAocHJldmlvdXNMaW5lLm1heFgoKSA8IHRoaXNM
aW5lLm1heFgoKSkgewpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBh
aW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEwKICAgICAgICAgYm90dG9tUmlnaHQgPSBvdXRsaW5lQm94UmVjdC5tYXhYTWluWUNvcm5lcigp
OwogICAgICAgICBib3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwgMCk7CiAgICAgICAgIGFk
amFjZW50V2lkdGgyID0gb3V0bGluZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUo
Z3JhcGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRl
OjpUb3AsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNl
bnRXaWR0aDIsIGFudGlhbGlhcyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGlj
c0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6
VG9wLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50
V2lkdGgyLCBhbnRpYWxpYXMpOwogICAgIH0KIAogICAgIGlmICh0aGlzTGluZS54KCkgPT0gdGhp
c0xpbmUubWF4WCgpKSB7CkBAIC0xMDc1LDcgKzEwNzUsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6
cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgTAogICAgICAgICBib3R0b21SaWdodCA9IG91dGxpbmVCb3hSZWN0Lm1heFhNaW5ZQ29ybmVy
KCk7CiAgICAgICAgIGJvdHRvbVJpZ2h0Lm1vdmUob3V0bGluZVdpZHRoLCAwKTsKICAgICAgICAg
YWRqYWNlbnRXaWR0aDIgPSBvdXRsaW5lV2lkdGg7Ci0gICAgICAgIGRyYXdMaW5lRm9yQm94U2lk
ZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIEJveFNp
ZGU6OlRvcCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGph
Y2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBo
aWNzQ29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJpZ2h0KSwgUEFMOjpCb3hTaWRl
OjpUb3AsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNl
bnRXaWR0aDIsIGFudGlhbGlhcyk7CiAgICAgfQogCiAgICAgLy8gbG93ZXIgZWRnZQpAQCAtMTA5
MCw3ICsxMDkwLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEwKICAgICAgICAgICAgIGFkamFj
ZW50V2lkdGgyID0gLW91dGxpbmVXaWR0aDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBh
ZGphY2VudFdpZHRoMiA9IG91dGxpbmVXaWR0aDsKLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQsIGJvdHRvbVJpZ2h0KSwgQm94U2lk
ZTo6Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFk
amFjZW50V2lkdGgyLCBhbnRpYWxpYXMpOworICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3Jh
cGhpY3NDb250ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBQQUw6OkJveFNp
ZGU6OkJvdHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIGFkamFjZW50V2lkdGgxLCBh
ZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG5leHRMaW5l
Lm1heFgoKSA8IHRoaXNMaW5lLm1heFgoKSkgewpAQCAtMTEwNCw3ICsxMTA0LDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEwKICAgICAgICAgYm90dG9tUmlnaHQgPSBvdXRsaW5lQm94UmVjdC5t
YXhYTWF4WUNvcm5lcigpOwogICAgICAgICBib3R0b21SaWdodC5tb3ZlKG91dGxpbmVXaWR0aCwg
b3V0bGluZVdpZHRoKTsKICAgICAgICAgYWRqYWNlbnRXaWR0aDIgPSBvdXRsaW5lV2lkdGg7Ci0g
ICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIEZsb2F0UmVjdCh0b3BM
ZWZ0LCBib3R0b21SaWdodCksIEJveFNpZGU6OkJvdHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5l
U3R5bGUsIGFkamFjZW50V2lkdGgxLCBhZGphY2VudFdpZHRoMiwgYW50aWFsaWFzKTsKKyAgICAg
ICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgRmxvYXRSZWN0KHRvcExlZnQs
IGJvdHRvbVJpZ2h0KSwgUEFMOjpCb3hTaWRlOjpCb3R0b20sIG91dGxpbmVDb2xvciwgb3V0bGlu
ZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIsIGFudGlhbGlhcyk7CiAgICAg
fQogCiAgICAgaWYgKHRoaXNMaW5lLngoKSA9PSB0aGlzTGluZS5tYXhYKCkpIHsKQEAgLTExMTQs
NyArMTExNCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBMCiAgICAgICAgIGJvdHRvbVJpZ2h0
ID0gb3V0bGluZUJveFJlY3QubWF4WE1heFlDb3JuZXIoKTsKICAgICAgICAgYm90dG9tUmlnaHQu
bW92ZShvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CiAgICAgICAgIGFkamFjZW50V2lkdGgy
ID0gb3V0bGluZVdpZHRoOwotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LCBGbG9hdFJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpLCBCb3hTaWRlOjpCb3R0b20sIG91
dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBhZGphY2VudFdpZHRoMSwgYWRqYWNlbnRXaWR0aDIs
IGFudGlhbGlhcyk7CisgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
IEZsb2F0UmVjdCh0b3BMZWZ0LCBib3R0b21SaWdodCksIFBBTDo6Qm94U2lkZTo6Qm90dG9tLCBv
dXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgYWRqYWNlbnRXaWR0aDEsIGFkamFjZW50V2lkdGgy
LCBhbnRpYWxpYXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggZmJlZjQ2MDkwZDA3NGUyZmI2ZmEyYzQ3NWMxZTU5Zjc0MWNjYTJjMi4u
Y2ZmMjE5MTBmYjZlYjkzZWRjOWExYzJjMTljNmQzNjVkMmM5M2UxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC01MjI5LDggKzUyMjksOCBAQCBzdGF0aWMg
Ym9vbCBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIpCiAKIHN0YXRpYyBib29sIHN0eWxlSGFzU21vb3RoaW5nVGV4dE1vZGUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGluZ01vZGUgPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCk7Ci0gICAg
cmV0dXJuIHNtb290aGluZ01vZGUgPT0gRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcg
fHwgc21vb3RoaW5nTW9kZSA9PSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNl
ZDsKKyAgICBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUgPSBzdHlsZS5mb250
RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCk7CisgICAgcmV0dXJuIHNtb290aGluZ01vZGUg
PT0gUEFMOjpGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB8fCBzbW9vdGhpbmdNb2Rl
ID09IFBBTDo6Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ7CiB9CiAKIC8v
IENvbnN0cmFpbiB0aGUgZGVwdGggYW5kIGJyZWFkdGggb2YgdGhlIHNlYXJjaCBmb3IgcGVyZm9y
bWFuY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHAKaW5kZXggZjI5NTA0YTJmMzJlODVhZDU4MzI3ZjY2YTM0YjE5MTI4YjZkNjg3
OC4uOWE0ZjM5OTM2YTM5YmFiYTY5NTA0NDI3YTJiYjk2ZjkxZjVjZmEzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAt
MTgyLDcgKzE4Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2hvdWxkUGxhY2VW
ZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCgpIGNvbnN0CiAgICAgY2FzZSBVc2VySW50ZXJmYWNlRGly
ZWN0aW9uUG9saWN5OjpDb250ZW50OgogICAgICAgICByZXR1cm4gc3R5bGUoKS5zaG91bGRQbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCk7CiAgICAgY2FzZSBVc2VySW50ZXJmYWNlRGlyZWN0
aW9uUG9saWN5OjpTeXN0ZW06Ci0gICAgICAgIHJldHVybiBzZXR0aW5ncygpLnN5c3RlbUxheW91
dERpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgcmV0dXJuIHNldHRp
bmdzKCkuc3lzdGVtTGF5b3V0RGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBzdHlsZSgpLnNo
b3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAppbmRleCBmYTFh
ZWE0NDgwNGNiNTE5M2EwNGI5ZThlZDViNTAwMjBjM2NhY2Q2Li42ODA5ZTY3MDFjOTI2NjZlZmZh
M2E2MDUxZGEyOTgxMjg4NzE5NDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0xMDQyLDcgKzEwNDIsNyBA
QCB2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxPcmlnaW4oKQog
ICAgIEFTU0VSVChib3gpOwogCiAgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3Vu
ZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91
bGRQbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkgLyp8fCBib3gtPnN0eWxlKCkud3JpdGlu
Z01vZGUoKSA9PSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQqLykKKyAgICBpZiAoc2hvdWxkUGxh
Y2VWZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCgpIC8qfHwgYm94LT5zdHlsZSgpLndyaXRpbmdNb2Rl
KCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQqLykKICAgICAgICAgc2Nyb2xsYWJs
ZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgaW50IHNjcm9s
bGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVy
VG9wKCkpOwogICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVy
ZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDljMDdjODA5YjkwMTM5NDAyOTY1MjM3MjZhZDdmMzQ4
MDJhNzUyYmQuLjdmZjcxZmFkNjM4NTIxNThmY2M1YmMwMzMxNDNjZjQzZDZkM2U2NWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTE0NCw3ICsxNDQs
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAg
IGlmICh0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIHRleHQgPSBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4dCwgJyAnKTsKLSAgICAg
ICAgICAgIGF1dG8gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4odGV4dCwgc3R5bGUoKSwgQWxs
b3dSaWdodEV4cGFuc2lvbik7CisgICAgICAgICAgICBhdXRvIHRleHRSdW4gPSBjb25zdHJ1Y3RU
ZXh0UnVuKHRleHQsIHN0eWxlKCksIFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbik7CiAgICAgICAg
ICAgICB3aWR0aCA9IHN0ZDo6bWF4KHdpZHRoLCBzZWxlY3RGb250KCkud2lkdGgodGV4dFJ1bikp
OwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBJcyBjZWlsaW5nIHJpZ2h0IGhlcmUsIG9y
IHNob3VsZCB3ZSBiZSBkb2luZyBzb21lIGtpbmQgb2Ygcm91bmRpbmcgaW5zdGVhZD8KQEAgLTQy
Miw3ICs0MjIsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgcGFpbnRJbmZvLmNv
bnRleHQoKS5zZXRGaWxsQ29sb3IodGV4dENvbG9yKTsKIAotICAgIFRleHRSdW4gdGV4dFJ1bihp
dGVtVGV4dCwgMCwgMCwgQWxsb3dSaWdodEV4cGFuc2lvbiwgaXRlbVN0eWxlLmRpcmVjdGlvbigp
LCBpc092ZXJyaWRlKGl0ZW1TdHlsZS51bmljb2RlQmlkaSgpKSwgdHJ1ZSk7CisgICAgVGV4dFJ1
biB0ZXh0UnVuKGl0ZW1UZXh0LCAwLCAwLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24sIGl0ZW1T
dHlsZS5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShpdGVtU3R5bGUudW5pY29kZUJpZGkoKSksIHRy
dWUpOwogICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwog
ICAgIExheW91dFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJ
bmRleCk7CiAgICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1biwgJml0ZW1T
dHlsZSwgaXRlbUZvbnQsIHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwCmluZGV4IGFlMjgyMmM2ZWRlYTY5NmMwOGQ2YjM5MTU1NWY3YzUyMzZiNjQyZjgu
LjU0ZjU5YTM5ZmUwMGJjNzU5ZmViYmRiZmYyYjkzNjYzYjFlMjBiZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCisj
aW5jbHVkZSA8cGFsL3RleHQvVW5pY29kZUJpZGkuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgpAQCAtNzQsMTAgKzc0LDEwIEBAIFJlbmRlclN0eWxlIFJlbmRlckxpc3RJ
dGVtOjpjb21wdXRlTWFya2VyU3R5bGUoKSBjb25zdAogICAgIC8vIG90aGVyd2lzZSBzZXQgaW4g
dGhlIHVzZXItYWdlbnQgc3R5bGVzaGVldCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IDo6YmVmb3Jl
OjptYXJrZXIgb3IKICAgICAvLyA6OmFmdGVyOjptYXJrZXIuIFNlZSBidWdzLndlYmtpdC5vcmcv
Yi8yMTg4OTcuCiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZSgpLmZvbnREZXNjcmlw
dGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnMpOworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoUEFMOjpGb250VmFyaWFudE51bWVyaWNTcGFj
aW5nOjpUYWJ1bGFyTnVtYmVycyk7CiAgICAgbWFya2VyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiAgICAgbWFya2VyU3R5bGUuZm9udENhc2NhZGUo
KS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwotICAgIG1hcmtlclN0eWxlLnNl
dFVuaWNvZGVCaWRpKEVVbmljb2RlQmlkaTo6SXNvbGF0ZSk7CisgICAgbWFya2VyU3R5bGUuc2V0
VW5pY29kZUJpZGkoUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGUpOwogICAgIG1hcmtlclN0eWxl
LnNldFdoaXRlU3BhY2UoV2hpdGVTcGFjZTo6UHJlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRUZXh0
VHJhbnNmb3JtKFRleHRUcmFuc2Zvcm06Ok5vbmUpOwogICAgIHJldHVybiBtYXJrZXJTdHlsZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCBiMTM0NmEx
MDViNzMyOGU1OGY1ZmJhN2U5ODA5MjZjYTE5OTgxZTkwLi5lNGQwMzRmNTBjODllNzVjMzM3NWI0
YjkyMzQ5MDIxMzliNTQxZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCkBAIC0xMDMsMTMgKzEwMywxMyBAQCBNYXJxdWVlRGlyZWN0aW9uIFJlbmRlck1h
cnF1ZWU6OmRpcmVjdGlvbigpIGNvbnN0CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIENTUzMg
ImF1dG8iIHZhbHVlIGZvciBkZXRlcm1pbmluZyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtYXJxdWVl
LgogICAgIC8vIEZvciBub3cganVzdCBtYXAgTWFycXVlZURpcmVjdGlvbjo6QXV0byB0byBNYXJx
dWVlRGlyZWN0aW9uOjpCYWNrd2FyZAogICAgIE1hcnF1ZWVEaXJlY3Rpb24gcmVzdWx0ID0gbV9s
YXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVEaXJlY3Rpb24oKTsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpciA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gZGlyID0gbV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmRp
cmVjdGlvbigpOwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QXV0bykKICAg
ICAgICAgcmVzdWx0ID0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgaWYgKHJlc3Vs
dCA9PSBNYXJxdWVlRGlyZWN0aW9uOjpGb3J3YXJkKQotICAgICAgICByZXN1bHQgPSAoZGlyID09
IFRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodCA6IE1hcnF1ZWVE
aXJlY3Rpb246OkxlZnQ7CisgICAgICAgIHJlc3VsdCA9IChkaXIgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIpID8gTWFycXVlZURpcmVjdGlvbjo6UmlnaHQgOiBNYXJxdWVlRGlyZWN0aW9uOjpM
ZWZ0OwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQpCi0gICAg
ICAgIHJlc3VsdCA9IChkaXIgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSA/IE1hcnF1ZWVEaXJlY3Rp
b246OkxlZnQgOiBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgcmVzdWx0ID0gKGRp
ciA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0IDog
TWFycXVlZURpcmVjdGlvbjo6UmlnaHQ7CiAgICAgCiAgICAgLy8gTm93IHdlIGhhdmUgdGhlIHJl
YWwgZGlyZWN0aW9uLiAgTmV4dCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGluY3JlbWVudCBpcyBu
ZWdhdGl2ZS4KICAgICAvLyBJZiBzbywgdGhlbiB3ZSByZXZlcnNlIHRoZSBkaXJlY3Rpb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCAwZjUxMTY1
Y2VhYjdkYTZmZmE1M2VjZTZjOGJkNWIwYjk2OTA0MWMzLi43MTIxNGY0ZGRhNzNiMzI2YjZjMGZj
OThjMzNlNjlkNDAwNWY1YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAKQEAgLTEzMiwxNiArMTMyLDE2IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFk
anVzdElubmVyU3R5bGUoKQogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBub3Qg
cmVzcGVjdCB0aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLAogICAg
ICAgICAvLyBzbyB3ZSBtdXN0IGFkanVzdCBvdXIgb3duIHN0eWxlIHRvIG1hdGNoLgogICAgICAg
ICBpbm5lclN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpMZWZ0KTsKLSAgICAgICAg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSAobV9idXR0b25UZXh0ICYmIG1fYnV0dG9uVGV4dC0+
dGV4dCgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19MRUZUKSA/IFRl
eHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYgbV9idXR0b25UZXh0LT50ZXh0
KCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgaW5u
ZXJTdHlsZS5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1B
bGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKSkgewotICAgICAgICBpbm5lclN0
eWxlLnNldFRleHRBbGlnbihzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxU
UiA/IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodCk7Ci0gICAgICAg
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJp
ZGk7CisgICAgICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKHN0eWxlKCkuZGlyZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFs
aWduTW9kZTo6UmlnaHQpOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwor
ICAgICAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaTsKICAgICAgICAgaWYgKG11bHRp
cGxlKCkgJiYgc2VsZWN0ZWRPcHRpb25Db3VudCgqdGhpcykgIT0gMSkgewotICAgICAgICAgICAg
ZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS5kZWZhdWx0
V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBUZXh0RGlyZWN0aW9uOjpS
VEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgICAgICAgICB1bmljb2RlQmlkaSA9IFVCTm9y
bWFsOworICAgICAgICAgICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRl
eHQtPnRleHQoKS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkg
PyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOworICAg
ICAgICAgICAgdW5pY29kZUJpZGkgPSBQQUw6OlVCTm9ybWFsOwogICAgICAgICB9IGVsc2UgaWYg
KG1fb3B0aW9uU3R5bGUpIHsKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG1fb3B0aW9uU3R5bGUt
PmRpcmVjdGlvbigpOwogICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBtX29wdGlvblN0eWxlLT51
bmljb2RlQmlkaSgpOwpAQCAtNTc0LDcgKzU3NCw3IEBAIGNvbnN0IGludCBlbmRPZkxpbmVQYWRk
aW5nID0gMjsKIAogTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQo
KSBjb25zdAogewotICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkgJiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsK
KyAgICBpZiAoKHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCB8
fCBzdHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpICYm
IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAg
ICAgLy8gRm9yIHRoZXNlIGFwcGVhcmFuY2UgdmFsdWVzLCB0aGUgdGhlbWUgYXBwbGllcyBwYWRk
aW5nIHRvIGxlYXZlIHJvb20gZm9yIHRoZQogICAgICAgICAvLyBkcm9wLWRvd24gYnV0dG9uLiBC
dXQgbGVhdmluZyByb29tIGZvciB0aGUgYnV0dG9uIGluc2lkZSB0aGUgcG9wdXAgbWVudSBpdHNl
bGYKICAgICAgICAgLy8gbG9va3Mgc3RyYW5nZSwgc28gd2UgcmV0dXJuIGEgc21hbGwgZGVmYXVs
dCBwYWRkaW5nIHRvIGF2b2lkIGhhdmluZyBhIGxhcmdlIGVtcHR5CkBAIC01ODgsNyArNTg4LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAog
CiBMYXlvdXRVbml0IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAog
ewotICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkg
JiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKChz
dHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5l
ZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRp
cmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm4gZW5k
T2ZMaW5lUGFkZGluZzsKIAogICAgIHJldHVybiBwYWRkaW5nUmlnaHQoKSArIG1faW5uZXJCbG9j
ay0+cGFkZGluZ1JpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU2V0LmNwcAppbmRleCBlMzk2ZmExMjI4Mjk4ZDUwZDYwZDZhZmY3NmNkNDJj
ZWUwZTJiYmE0Li4wODhlMzYyMDc0YjE5N2U1NWE0ODZjNmFiYjhhNTIwNmY5MDk2YWRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAK
QEAgLTYzMSw5ICs2MzEsOSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVt
blJ1bGVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQbwogICAgICAgICBMYXlv
dXRVbml0IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKICAgICAgICAg
TGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBsZWZ0VG9SaWdodCA/IDBfbHUgOiBjb250ZW50
TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgaW5saW5lRGlyZWN0aW9uU2l6ZSA9
IGNvbXB1dGVkQ29sdW1uV2lkdGgoKTsKLSAgICAgICAgQm94U2lkZSBib3hTaWRlID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKQotICAgICAgICAgICAgPyBsZWZ0VG9SaWdodCA/IEJveFNpZGU6
OkxlZnQgOiBCb3hTaWRlOjpSaWdodAotICAgICAgICAgICAgOiBsZWZ0VG9SaWdodCA/IEJveFNp
ZGU6OlRvcCA6IEJveFNpZGU6OkJvdHRvbTsKKyAgICAgICAgUEFMOjpCb3hTaWRlIGJveFNpZGUg
PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpCisgICAgICAgICAgICA/IGxlZnRUb1JpZ2h0ID8g
UEFMOjpCb3hTaWRlOjpMZWZ0IDogUEFMOjpCb3hTaWRlOjpSaWdodAorICAgICAgICAgICAgOiBs
ZWZ0VG9SaWdodCA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRlOjpCb3R0b207CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAg
ICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCkBAIC02NzQsNyArNjc0LDcgQEAg
dm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG8KIAogICAgICAgICBydWxlUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOwogCi0gICAgICAgIEJveFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyB0b3BUb0JvdHRvbSA/IEJveFNpZGU6OlRvcCA6IEJveFNpZGU6OkJvdHRvbSA6IHRv
cFRvQm90dG9tID8gQm94U2lkZTo6TGVmdCA6IEJveFNpZGU6OlJpZ2h0OworICAgICAgICBQQUw6
OkJveFNpZGUgYm94U2lkZSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB0b3BUb0JvdHRv
bSA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFMOjpCb3hTaWRlOjpCb3R0b20gOiB0b3BUb0JvdHRv
bSA/IFBBTDo6Qm94U2lkZTo6TGVmdCA6IFBBTDo6Qm94U2lkZTo6UmlnaHQ7CiAKICAgICAgICAg
TGF5b3V0U2l6ZSBzdGVwKDBfbHUsIHRvcFRvQm90dG9tID8gY29tcHV0ZWRDb2x1bW5IZWlnaHQo
KSArIGNvbEdhcCA6IC0oY29tcHV0ZWRDb2x1bW5IZWlnaHQoKSArIGNvbEdhcCkpOwogICAgICAg
ICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDBkMzQzZTY0YjY3MTljYTM0OTQyMDkzYmQ4MTliMDVh
YTEyZTkxMDMuLmZhNGIzNzliN2Y4ZWZkNjNhNjZmZDYzZDk5N2NjOTIyNmNkODM3NjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xODc5LDcgKzE4Nzks
NyBAQCBSZW5kZXJGcmFnbWVudGVkRmxvdyogUmVuZGVyT2JqZWN0Ojpsb2NhdGVFbmNsb3NpbmdG
cmFnbWVudGVkRmxvdygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jayA/IGNvbnRh
aW5pbmdCbG9jay0+ZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSA6IG51bGxwdHI7CiB9CiAKLXZv
aWQgUmVuZGVyT2JqZWN0OjpjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKGNvbnN0IEJvcmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgQm94U2lkZSYgc2lkZSwgQ29sb3ImIGNvbG9yKQordm9pZCBSZW5k
ZXJPYmplY3Q6OmNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoY29uc3QgQm9yZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBQQUw6OkJveFNpZGUmIHNpZGUsIENvbG9yJiBjb2xvcikKIHsKICAgICBBU1NF
UlQoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0IHx8IHN0eWxlID09IEJvcmRlclN0eWxlOjpP
dXRzZXQpOwogCkBAIC0xODg5LDcgKzE4ODksNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y2FsY3Vs
YXRlQm9yZGVyU3R5bGVDb2xvcihjb25zdCBCb3JkZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJveAog
CiAgICAgZW51bSBPcGVyYXRpb24geyBEYXJrZW4sIExpZ2h0ZW4gfTsKIAotICAgIE9wZXJhdGlv
biBvcGVyYXRpb24gPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpM
ZWZ0KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47
CisgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChzaWRlID09IFBBTDo6Qm94U2lkZTo6VG9wIHx8
IHNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0KSA9PSAoc3R5bGUgPT0gQm9yZGVyU3R5bGU6Oklu
c2V0KSA/IERhcmtlbiA6IExpZ2h0ZW47CiAKICAgICAvLyBIZXJlIHdlIHdpbGwgZGFya2VuIHRo
ZSBib3JkZXIgZGVjb3JhdGlvbiBjb2xvciB3aGVuIG5lZWRlZC4gVGhpcyB3aWxsIHlpZWxkIGEg
c2ltaWxhciBiZWhhdmlvciBhcyBpbiBGRi4KICAgICBpZiAob3BlcmF0aW9uID09IERhcmtlbikg
ewpAQCAtMjMxNSw3ICsyMzE1LDcgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rp
b25HZW9tZXRyaWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgICAgICBp
ZiAoZ2VvbWV0cmllc1tqXS5iZWhhdmlvcigpID09IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9y
OjpVc2VJbmRpdmlkdWFsUXVhZHMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0
byYgcHJldmlvdXNSZWN0ID0gZ2VvbWV0cmllc1tqIC0gMV07Ci0gICAgICAgIGJvb2wgcHJldmlv
dXNSZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09
IFRleHREaXJlY3Rpb246OkxUUiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwgKHBy
ZXZpb3VzUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlvdXNS
ZWN0LmNvbnRhaW5zU3RhcnQoKSk7CisgICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5Tm90UmVh
Y2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSICYmIHByZXZpb3VzUmVjdC5jb250YWluc0VuZCgpKSB8fCAocHJldmlvdXNSZWN0
LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMICYmIHByZXZpb3VzUmVjdC5j
b250YWluc1N0YXJ0KCkpOwogICAgICAgICBpZiAocHJldmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdo
dEVkZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaW50IGFkanVzdGVkV2lkdGgg
PSBnZW9tZXRyaWVzW2pdLmxvZ2ljYWxMZWZ0KCkgLSBwcmV2aW91c1JlY3QubG9naWNhbExlZnQo
KTsKQEAgLTIzMzIsMTAgKzIzMzIsMTAgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxl
Y3Rpb25HZW9tZXRyaWVzSW50ZXJuYWwoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzZWxlY3Rpb25HZW9tZXRyeS5iZWhhdmlvcigp
ID09IFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yOjpVc2VJbmRpdmlkdWFsUXVhZHMpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0ZpcnN0T25M
aW5lKCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6UlRMICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzRmlyc3RPbkxpbmUo
KSkgewogICAgICAgICAgICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0TG9naWNhbFdpZHRoKHNlbGVj
dGlvbkdlb21ldHJ5LmxvZ2ljYWxXaWR0aCgpICsgc2VsZWN0aW9uR2VvbWV0cnkubG9naWNhbExl
ZnQoKSAtIHNlbGVjdGlvbkdlb21ldHJ5Lm1pblgoKSk7CiAgICAgICAgICAgICBzZWxlY3Rpb25H
ZW9tZXRyeS5zZXRMb2dpY2FsTGVmdChzZWxlY3Rpb25HZW9tZXRyeS5taW5YKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rp
b246OkxUUiAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0xhc3RPbkxpbmUoKSkKKyAgICAgICAgfSBl
bHNlIGlmIChzZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OkxUUiAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0xhc3RPbkxpbmUoKSkKICAgICAgICAgICAg
IHNlbGVjdGlvbkdlb21ldHJ5LnNldExvZ2ljYWxXaWR0aChzZWxlY3Rpb25HZW9tZXRyeS5tYXhY
KCkgLSBzZWxlY3Rpb25HZW9tZXRyeS5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBhOThiMTJhMTZlYWRlYWFjMDc1OGFj
Y2Q2ZmEyYTkyOTIxNzE5Yzc0Li5mOWI0ZjBmM2IzMTliNTk2OTc5MzI1ZDAzOWNhMmQxYTlkZmU3
MzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC03NjUsNyAr
NzY1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxv
d0xheW91dEJpdChib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFs
Rmxvd0xheW91dChiKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJGcmFnbWVudGVkRmxvdyogbG9j
YXRlRW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBjYWxj
dWxhdGVCb3JkZXJTdHlsZUNvbG9yKGNvbnN0IEJvcmRlclN0eWxlJiwgY29uc3QgQm94U2lkZSYs
IENvbG9yJik7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQm9yZGVyU3R5bGVDb2xvcihjb25z
dCBCb3JkZXJTdHlsZSYsIGNvbnN0IFBBTDo6Qm94U2lkZSYsIENvbG9yJik7CiAKICAgICBzdGF0
aWMgRnJhZ21lbnRlZEZsb3dTdGF0ZSBjb21wdXRlZEZyYWdtZW50ZWRGbG93U3RhdGUoY29uc3Qg
UmVuZGVyT2JqZWN0Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAKaW5kZXggZjhhMTkxMGM1YjZjN2ExYTEzZTgwYTUyYjUyMzkxZmMwNjVmNjJlNS4u
OTA3M2RjMTYxODBkMzlhZDViYjkxZjhmNzVjM2YzNGIwNDRiODQ4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTMwNiw3ICszMDYsNyBAQCBM
YXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcCgpIGNvbnN0CiAgICAgTGF5b3V0
VW5pdCByZXN1bHQgPSBjb21wdXRlZENTU1BhZGRpbmdUb3AoKTsKICAgICBpZiAoIWlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIHJl
c3VsdCArIChzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9t
ID8gaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOwor
ICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGlu
Z01vZGU6OlRvcFRvQm90dG9tID8gaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2lj
UGFkZGluZ0FmdGVyKCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGlu
Z0JvdHRvbSgpIGNvbnN0CkBAIC0zMTQsNyArMzE0LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUYWJs
ZUNlbGw6OnBhZGRpbmdCb3R0b20oKSBjb25zdAogICAgIExheW91dFVuaXQgcmVzdWx0ID0gY29t
cHV0ZWRDU1NQYWRkaW5nQm90dG9tKCk7CiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUo
KS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/IGludHJpbnNpY1Bh
ZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0ICsgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0Jv
dHRvbSA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgp
KTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdMZWZ0KCkgY29uc3QK
QEAgLTMyMiw3ICszMjIsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0xl
ZnQoKSBjb25zdAogICAgIExheW91dFVuaXQgcmVzdWx0ID0gY29tcHV0ZWRDU1NQYWRkaW5nTGVm
dCgpOwogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIHJldHVybiByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdy
aXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6IGludHJp
bnNpY1BhZGRpbmdBZnRlcigpKTsKKyAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCkud3JpdGlu
Z01vZGUoKSA9PSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRp
bmdCZWZvcmUoKSA6IGludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKIH0KIAogTGF5b3V0VW5pdCBS
ZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCgpIGNvbnN0CkBAIC0zMzAsNyArMzMwLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdSaWdodCgpIGNvbnN0CiAgICAgTGF5
b3V0VW5pdCByZXN1bHQgPSBjb21wdXRlZENTU1BhZGRpbmdSaWdodCgpOwogICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVy
biByZXN1bHQgKyAoc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodCA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmluc2ljUGFkZGluZ0JlZm9yZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6Oldy
aXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmlu
c2ljUGFkZGluZ0JlZm9yZSgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJUYWJsZUNlbGw6OnBh
ZGRpbmdCZWZvcmUoKSBjb25zdApAQCAtMTEyNiw3ICsxMTI2LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZUNlbGw6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQKIAogc3RydWN0IENvbGxhcHNlZEJvcmRlciB7CiAgICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUgYm9yZGVyVmFsdWU7Ci0gICAgQm94U2lkZSBzaWRlOworICAgIFBBTDo6Qm94U2lkZSBz
aWRlOwogICAgIGJvb2wgc2hvdWxkUGFpbnQ7CiAgICAgTGF5b3V0VW5pdCB4MTsKICAgICBMYXlv
dXRVbml0IHkxOwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRl
clZhbHVlLCBCb3hTaWRlIGJvcmRlclNpZGUsIGJvb2wgc2hvdWxkUGFpbnQsCisgICAgdm9pZCBh
ZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBQQUw6OkJv
eFNpZGUgYm9yZGVyU2lkZSwgYm9vbCBzaG91bGRQYWludCwKICAgICAgICAgTGF5b3V0VW5pdCB4
MSwgTGF5b3V0VW5pdCB5MSwgTGF5b3V0VW5pdCB4MiwgTGF5b3V0VW5pdCB5MiwgQm9yZGVyU3R5
bGUgYm9yZGVyU3R5bGUpCiAgICAgewogICAgICAgICBpZiAoYm9yZGVyVmFsdWUuZXhpc3RzKCkg
JiYgc2hvdWxkUGFpbnQpIHsKQEAgLTEyNjQsMTAgKzEyNjQsMTAgQEAgdm9pZCBSZW5kZXJUYWJs
ZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVycyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG8KICAgICAvLyBXZSBuZXZlciBwYWludCBkaWFnb25hbHMgYXQgdGhlIGpvaW5zLiAg
V2Ugc2ltcGx5IGxldCB0aGUgYm9yZGVyIHdpdGggdGhlIGhpZ2hlc3QKICAgICAvLyBwcmVjZWRl
bmNlIHBhaW50IG9uIHRvcCBvZiBib3JkZXJzIHdpdGggbG93ZXIgcHJlY2VkZW5jZS4gIAogICAg
IENvbGxhcHNlZEJvcmRlcnMgYm9yZGVyczsKLSAgICBib3JkZXJzLmFkZEJvcmRlcih0b3BWYWws
IEJveFNpZGU6OlRvcCwgcmVuZGVyVG9wLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCks
IGJvcmRlclJlY3QubWF4WCgpLCBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7
Ci0gICAgYm9yZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBCb3hTaWRlOjpCb3R0b20sIHJlbmRl
ckJvdHRvbSwgYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgs
IGJvcmRlclJlY3QubWF4WCgpLCBib3JkZXJSZWN0Lm1heFkoKSwgYm90dG9tU3R5bGUpOwotICAg
IGJvcmRlcnMuYWRkQm9yZGVyKGxlZnRWYWwsIEJveFNpZGU6OkxlZnQsIHJlbmRlckxlZnQsIGJv
cmRlclJlY3QueCgpLCBib3JkZXJSZWN0LnkoKSwgYm9yZGVyUmVjdC54KCkgKyBsZWZ0V2lkdGgs
IGJvcmRlclJlY3QubWF4WSgpLCBsZWZ0U3R5bGUpOwotICAgIGJvcmRlcnMuYWRkQm9yZGVyKHJp
Z2h0VmFsLCBCb3hTaWRlOjpSaWdodCwgcmVuZGVyUmlnaHQsIGJvcmRlclJlY3QubWF4WCgpIC0g
cmlnaHRXaWR0aCwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QubWF4WCgpLCBib3JkZXJSZWN0
Lm1heFkoKSwgcmlnaHRTdHlsZSk7CisgICAgYm9yZGVycy5hZGRCb3JkZXIodG9wVmFsLCBQQUw6
OkJveFNpZGU6OlRvcCwgcmVuZGVyVG9wLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCks
IGJvcmRlclJlY3QubWF4WCgpLCBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCB0b3BTdHlsZSk7
CisgICAgYm9yZGVycy5hZGRCb3JkZXIoYm90dG9tVmFsLCBQQUw6OkJveFNpZGU6OkJvdHRvbSwg
cmVuZGVyQm90dG9tLCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSBib3R0b21X
aWR0aCwgYm9yZGVyUmVjdC5tYXhYKCksIGJvcmRlclJlY3QubWF4WSgpLCBib3R0b21TdHlsZSk7
CisgICAgYm9yZGVycy5hZGRCb3JkZXIobGVmdFZhbCwgUEFMOjpCb3hTaWRlOjpMZWZ0LCByZW5k
ZXJMZWZ0LCBib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QueCgpICsg
bGVmdFdpZHRoLCBib3JkZXJSZWN0Lm1heFkoKSwgbGVmdFN0eWxlKTsKKyAgICBib3JkZXJzLmFk
ZEJvcmRlcihyaWdodFZhbCwgUEFMOjpCb3hTaWRlOjpSaWdodCwgcmVuZGVyUmlnaHQsIGJvcmRl
clJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVyUmVjdC55KCksIGJvcmRlclJlY3QubWF4
WCgpLCBib3JkZXJSZWN0Lm1heFkoKSwgcmlnaHRTdHlsZSk7CiAKICAgICBib29sIGFudGlhbGlh
cyA9IHNob3VsZEFudGlhbGlhc0xpbmVzKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGE0ZWJh
MDgwYzQ1ZjVhOGFkNjY2OTQ4NWZiOGRhZTA2ODEwNDFiNWIuLmE5OTA1Njk4YjA2YTNkNGIyNTMx
ZjdmYmZkNmJmZmU5MWI1ZTZjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBDZWxsU3BhbiBSZW5k
ZXJUYWJsZVNlY3Rpb246OnNwYW5uZWRDb2x1bW5zKGNvbnN0IExheW91dFJlY3QmIGZsaXBwZWRS
ZWN0LCBTaG91bAogICAgIHJldHVybiBDZWxsU3BhbihzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCb3JkZXIoY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0IHJlY3QsIEJv
eFNpZGUgc2lkZSwgQ1NTUHJvcGVydHlJRCBib3JkZXJDb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVy
U3R5bGUsIEJvcmRlclN0eWxlIHRhYmxlQm9yZGVyU3R5bGUpCit2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYm9v
bCBhbnRpYWxpYXMsIExheW91dFJlY3QgcmVjdCwgUEFMOjpCb3hTaWRlIHNpZGUsIENTU1Byb3Bl
cnR5SUQgYm9yZGVyQ29sb3IsIEJvcmRlclN0eWxlIGJvcmRlclN0eWxlLCBCb3JkZXJTdHlsZSB0
YWJsZUJvcmRlclN0eWxlKQogewogICAgIGlmICh0YWJsZUJvcmRlclN0eWxlID09IEJvcmRlclN0
eWxlOjpIaWRkZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTEwOTIsMTQgKzEwOTIsMTQgQEAgTGF5
b3V0VW5pdCBSZW5kZXJUYWJsZVNlY3Rpb246Om9mZnNldExlZnRGb3JSb3dHcm91cEJvcmRlcihS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwKICAgICByZXR1cm4gcm93R3JvdXBSZWN0LndpZHRoKCkgLSBt
X3Jvd1Bvc1tyb3cgKyAxXSArIChpc0xhc3RSb3cgPyAtb3V0ZXJCb3JkZXJMZWZ0KCZzdHlsZSgp
KSA6IDBfbHUpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6b2Zmc2V0VG9w
Rm9yUm93R3JvdXBCb3JkZXIoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBCb3hTaWRlIGJvcmRlclNp
ZGUsIHVuc2lnbmVkIHJvdykKK0xheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpvZmZzZXRU
b3BGb3JSb3dHcm91cEJvcmRlcihSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBBTDo6Qm94U2lkZSBi
b3JkZXJTaWRlLCB1bnNpZ25lZCByb3cpCiB7CiAgICAgYm9vbCBpc0xhc3RSb3cgPSByb3cgKyAx
ID09IG1fZ3JpZC5zaXplKCk7CiAgICAgaWYgKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIG1fcm93UG9zW3Jvd10gKyAoIXJvdyAmJiBib3JkZXJTaWRl
ID09IEJveFNpZGU6OlJpZ2h0ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IGlzTGFzdFJv
dyAmJiBib3JkZXJTaWRlID09IEJveFNpZGU6OkxlZnQgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUo
KSkgOiAwX2x1KTsKKyAgICAgICAgcmV0dXJuIG1fcm93UG9zW3Jvd10gKyAoIXJvdyAmJiBib3Jk
ZXJTaWRlID09IFBBTDo6Qm94U2lkZTo6UmlnaHQgPyAtb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKCkp
IDogaXNMYXN0Um93ICYmIGJvcmRlclNpZGUgPT0gUEFMOjpCb3hTaWRlOjpMZWZ0ID8gb3V0ZXJC
b3JkZXJUb3AoJnN0eWxlKCkpIDogMF9sdSk7CiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICByZXR1cm4gKGNlbGwgPyBjZWxsLT55KCkgKyBjZWxsLT5o
ZWlnaHQoKSA6IDBfbHUpICsgKGJvcmRlclNpZGUgPT0gQm94U2lkZTo6TGVmdCA/IG91dGVyQm9y
ZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHUpOwotICAgIHJldHVybiBib3JkZXJTaWRlID09IEJveFNp
ZGU6OlJpZ2h0ID8gLW91dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHU7CisgICAgICAgIHJl
dHVybiAoY2VsbCA/IGNlbGwtPnkoKSArIGNlbGwtPmhlaWdodCgpIDogMF9sdSkgKyAoYm9yZGVy
U2lkZSA9PSBQQUw6OkJveFNpZGU6OkxlZnQgPyBvdXRlckJvcmRlclRvcCgmc3R5bGUoKSkgOiAw
X2x1KTsKKyAgICByZXR1cm4gYm9yZGVyU2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0ID8gLW91
dGVyQm9yZGVyVG9wKCZzdHlsZSgpKSA6IDBfbHU7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyVGFi
bGVTZWN0aW9uOjp2ZXJ0aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KFJlbmRlclRhYmxlQ2VsbCog
Y2VsbCwgY29uc3QgTGF5b3V0UmVjdCYgcm93R3JvdXBSZWN0LCB1bnNpZ25lZCByb3cpCkBAIC0x
MTIzLDcgKzExMjMsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6aG9yaXpvbnRh
bFJvd0dyb3VwQm9yZGVyV2lkdGgoUmVuZGVyVGFibGVDZWxsKiBjZQogICAgIHJldHVybiBtX3Jv
d1Bvc1tyb3cgKyAxXSAtIG1fcm93UG9zW3Jvd10gKyAoaXNMYXN0Um93ID8gb3V0ZXJCb3JkZXJM
ZWZ0KCZzdHlsZSgpKSA6ICFyb3cgPyBvdXRlckJvcmRlclJpZ2h0KCZzdHlsZSgpKSA6IDBfbHUp
OwogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcklmUmVx
dWlyZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4sIEJveFNpZGUgYm9yZGVyU2lk
ZSwgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
Um93R3JvdXBCb3JkZXJJZlJlcXVpcmVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sdW1u
LCBQQUw6OkJveFNpZGUgYm9yZGVyU2lkZSwgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQogewogICAg
IGlmICh0YWJsZSgpLT5jdXJyZW50Qm9yZGVyVmFsdWUoKS0+cHJlY2VkZW5jZSgpID4gQm9yZGVy
UHJlY2VkZW5jZTo6Um93R3JvdXApCiAgICAgICAgIHJldHVybjsKQEAgLTExMzMsMjQgKzExMzMs
MjQgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCb3JkZXJJZlJlcXVp
cmVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIGJvb2wgYW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFz
TGluZXMocGFpbnRJbmZvLmNvbnRleHQoKSk7CiAgICAgTGF5b3V0UmVjdCByb3dHcm91cFJlY3Qg
PSBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpOwotICAgIHJvd0dyb3VwUmVjdC5tb3Zl
QnkoLUxheW91dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAoYm9yZGVyU2lkZSA9PSBC
b3hTaWRlOjpSaWdodCkgPyAwX2x1IDogb3V0ZXJCb3JkZXJUb3AoJnN0eWxlKSkpOworICAgIHJv
d0dyb3VwUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KG91dGVyQm9yZGVyTGVmdCgmc3R5bGUpLCAo
Ym9yZGVyU2lkZSA9PSBQQUw6OkJveFNpZGU6OlJpZ2h0KSA/IDBfbHUgOiBvdXRlckJvcmRlclRv
cCgmc3R5bGUpKSk7CiAKICAgICBzd2l0Y2ggKGJvcmRlclNpZGUpIHsKLSAgICBjYXNlIEJveFNp
ZGU6OlRvcDoKKyAgICBjYXNlIFBBTDo6Qm94U2lkZTo6VG9wOgogICAgICAgICBwYWludFJvd0dy
b3VwQm9yZGVyKHBhaW50SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0Lngo
KSArIG9mZnNldExlZnRGb3JSb3dHcm91cEJvcmRlcihjZWxsLCByb3dHcm91cFJlY3QsIHJvdyks
IHJvd0dyb3VwUmVjdC55KCksIAotICAgICAgICAgICAgaG9yaXpvbnRhbFJvd0dyb3VwQm9yZGVy
V2lkdGgoY2VsbCwgcm93R3JvdXBSZWN0LCByb3csIGNvbHVtbiksIExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyVG9wKCkud2lkdGgoKSkpLCBCb3hTaWRlOjpUb3AsIENTU1Byb3BlcnR5Qm9yZGVyVG9w
Q29sb3IsIHN0eWxlLmJvcmRlclRvcFN0eWxlKCksIHRhYmxlKCktPnN0eWxlKCkuYm9yZGVyVG9w
U3R5bGUoKSk7CisgICAgICAgICAgICBob3Jpem9udGFsUm93R3JvdXBCb3JkZXJXaWR0aChjZWxs
LCByb3dHcm91cFJlY3QsIHJvdywgY29sdW1uKSwgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJUb3Ao
KS53aWR0aCgpKSksIFBBTDo6Qm94U2lkZTo6VG9wLCBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9y
LCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclRvcFN0eWxl
KCkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKKyAgICBjYXNl
IFBBTDo6Qm94U2lkZTo6Qm90dG9tOgogICAgICAgICBwYWludFJvd0dyb3VwQm9yZGVyKHBhaW50
SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LngoKSArIG9mZnNldExlZnRG
b3JSb3dHcm91cEJvcmRlcihjZWxsLCByb3dHcm91cFJlY3QsIHJvdyksIHJvd0dyb3VwUmVjdC55
KCkgKyByb3dHcm91cFJlY3QuaGVpZ2h0KCksIAotICAgICAgICAgICAgaG9yaXpvbnRhbFJvd0dy
b3VwQm9yZGVyV2lkdGgoY2VsbCwgcm93R3JvdXBSZWN0LCByb3csIGNvbHVtbiksIExheW91dFVu
aXQoc3R5bGUuYm9yZGVyQm90dG9tKCkud2lkdGgoKSkpLCBCb3hTaWRlOjpCb3R0b20sIENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIHN0eWxlLmJvcmRlckJvdHRvbVN0eWxlKCksIHRhYmxl
KCktPnN0eWxlKCkuYm9yZGVyQm90dG9tU3R5bGUoKSk7CisgICAgICAgICAgICBob3Jpem9udGFs
Um93R3JvdXBCb3JkZXJXaWR0aChjZWxsLCByb3dHcm91cFJlY3QsIHJvdywgY29sdW1uKSwgTGF5
b3V0VW5pdChzdHlsZS5ib3JkZXJCb3R0b20oKS53aWR0aCgpKSksIFBBTDo6Qm94U2lkZTo6Qm90
dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBzdHlsZS5ib3JkZXJCb3R0b21TdHls
ZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlckJvdHRvbVN0eWxlKCkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEJveFNpZGU6OkxlZnQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OkxlZnQ6
CiAgICAgICAgIHBhaW50Um93R3JvdXBCb3JkZXIocGFpbnRJbmZvLCBhbnRpYWxpYXMsIExheW91
dFJlY3Qocm93R3JvdXBSZWN0LngoKSwgcm93R3JvdXBSZWN0LnkoKSArIG9mZnNldFRvcEZvclJv
d0dyb3VwQm9yZGVyKGNlbGwsIGJvcmRlclNpZGUsIHJvdyksIExheW91dFVuaXQoc3R5bGUuYm9y
ZGVyTGVmdCgpLndpZHRoKCkpLAotICAgICAgICAgICAgdmVydGljYWxSb3dHcm91cEJvcmRlckhl
aWdodChjZWxsLCByb3dHcm91cFJlY3QsIHJvdykpLCBCb3hTaWRlOjpMZWZ0LCBDU1NQcm9wZXJ0
eUJvcmRlckxlZnRDb2xvciwgc3R5bGUuYm9yZGVyTGVmdFN0eWxlKCksIHRhYmxlKCktPnN0eWxl
KCkuYm9yZGVyTGVmdFN0eWxlKCkpOworICAgICAgICAgICAgdmVydGljYWxSb3dHcm91cEJvcmRl
ckhlaWdodChjZWxsLCByb3dHcm91cFJlY3QsIHJvdykpLCBQQUw6OkJveFNpZGU6OkxlZnQsIENT
U1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBzdHlsZS5ib3JkZXJMZWZ0U3R5bGUoKSwgdGFibGUo
KS0+c3R5bGUoKS5ib3JkZXJMZWZ0U3R5bGUoKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Qm94U2lkZTo6UmlnaHQ6CisgICAgY2FzZSBQQUw6OkJveFNpZGU6OlJpZ2h0OgogICAgICAgICBw
YWludFJvd0dyb3VwQm9yZGVyKHBhaW50SW5mbywgYW50aWFsaWFzLCBMYXlvdXRSZWN0KHJvd0dy
b3VwUmVjdC54KCkgKyByb3dHcm91cFJlY3Qud2lkdGgoKSwgcm93R3JvdXBSZWN0LnkoKSArIG9m
ZnNldFRvcEZvclJvd0dyb3VwQm9yZGVyKGNlbGwsIGJvcmRlclNpZGUsIHJvdyksIExheW91dFVu
aXQoc3R5bGUuYm9yZGVyUmlnaHQoKS53aWR0aCgpKSwKLSAgICAgICAgICAgIHZlcnRpY2FsUm93
R3JvdXBCb3JkZXJIZWlnaHQoY2VsbCwgcm93R3JvdXBSZWN0LCByb3cpKSwgQm94U2lkZTo6Umln
aHQsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgc3R5bGUuYm9yZGVyUmlnaHRTdHlsZSgp
LCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7CisgICAgICAgICAgICB2ZXJ0
aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KGNlbGwsIHJvd0dyb3VwUmVjdCwgcm93KSksIFBBTDo6
Qm94U2lkZTo6UmlnaHQsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgc3R5bGUuYm9yZGVy
UmlnaHRTdHlsZSgpLCB0YWJsZSgpLT5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMTE1OCwyOSArMTE1
OCwyOSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvcmRlcklmUmVx
dWlyZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBo
eXNpY2FsQm9yZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxG
bG93LCBDb2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCitzdGF0aWMgUEFMOjpCb3hTaWRlIHBoeXNp
Y2FsQm9yZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93
LCBDb2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCiB7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAg
ICBjYXNlIENCU1N0YXJ0OgogICAgICAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCb3hTaWRlOjpMZWZ0IDogQm94U2lkZTo6UmlnaHQ7
Ci0gICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBCb3hTaWRlOjpUb3AgOiBCb3hTaWRlOjpCb3R0b207CisgICAgICAgICAgICByZXR1cm4g
c3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFMOjpCb3hTaWRl
OjpMZWZ0IDogUEFMOjpCb3hTaWRlOjpSaWdodDsKKyAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2Vs
bEZsb3ctPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFBBTDo6Qm94U2lkZTo6VG9wIDogUEFM
OjpCb3hTaWRlOjpCb3R0b207CiAgICAgY2FzZSBDQlNFbmQ6CiAgICAgICAgIGlmIChzdHlsZUZv
ckNlbGxGbG93LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJveFNpZGU6OlJp
Z2h0IDogQm94U2lkZTo6TGVmdDsKLSAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJveFNpZGU6OkJvdHRvbSA6IEJveFNpZGU6OlRvcDsK
KyAgICAgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBQQUw6OkJveFNpZGU6OlJpZ2h0IDogUEFMOjpCb3hTaWRlOjpMZWZ0OworICAgICAg
ICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUEFM
OjpCb3hTaWRlOjpCb3R0b20gOiBQQUw6OkJveFNpZGU6OlRvcDsKICAgICBjYXNlIENCU0JlZm9y
ZToKICAgICAgICAgaWYgKHN0eWxlRm9yQ2VsbEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCi0gICAgICAgICAgICByZXR1cm4gQm94U2lkZTo6VG9wOwotICAgICAgICByZXR1cm4gc3R5
bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gQm94U2lkZTo6UmlnaHQg
OiBCb3hTaWRlOjpMZWZ0OworICAgICAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6VG9wOwor
ICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gUEFMOjpCb3hTaWRlOjpSaWdodCA6IFBBTDo6Qm94U2lkZTo6TGVmdDsKICAgICBjYXNlIENC
U0FmdGVyOgogICAgICAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBCb3hTaWRlOjpCb3R0b207Ci0gICAgICAgIHJl
dHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCb3hTaWRl
OjpMZWZ0IDogQm94U2lkZTo6UmlnaHQ7CisgICAgICAgICAgICByZXR1cm4gUEFMOjpCb3hTaWRl
OjpCb3R0b207CisgICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBQQUw6OkJveFNpZGU6OkxlZnQgOiBQQUw6OkJveFNpZGU6OlJpZ2h0Owog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gQm94U2lkZTo6TGVmdDsKKyAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aAppbmRleCA4NWNiMTJkYjkzYmIxOTJhZmI2NTZiMTYxNGQyOWYyZGQ2M2VlMTRhLi42MWM3ZTVl
ZjA3NTMwZGVlZTc0ZmU1ZjdmMzIwYzhiZTZhN2FkNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xNzEsMTEgKzE3MSwxMSBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiwgUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludFJvd0dyb3VwQm9yZGVy
KGNvbnN0IFBhaW50SW5mbyYsIGJvb2wgYW50aWFsaWFzLCBMYXlvdXRSZWN0LCBCb3hTaWRlLCBD
U1NQcm9wZXJ0eUlEIGJvcmRlckNvbG9yLCBCb3JkZXJTdHlsZSwgQm9yZGVyU3R5bGUgdGFibGVC
b3JkZXJTdHlsZSk7Ci0gICAgdm9pZCBwYWludFJvd0dyb3VwQm9yZGVySWZSZXF1aXJlZChjb25z
dCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIHVuc2lnbmVkIHJv
dywgdW5zaWduZWQgY29sLCBCb3hTaWRlLCBSZW5kZXJUYWJsZUNlbGwqID0gMCk7CisgICAgdm9p
ZCBwYWludFJvd0dyb3VwQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYsIGJvb2wgYW50aWFsaWFzLCBM
YXlvdXRSZWN0LCBQQUw6OkJveFNpZGUsIENTU1Byb3BlcnR5SUQgYm9yZGVyQ29sb3IsIEJvcmRl
clN0eWxlLCBCb3JkZXJTdHlsZSB0YWJsZUJvcmRlclN0eWxlKTsKKyAgICB2b2lkIHBhaW50Um93
R3JvdXBCb3JkZXJJZlJlcXVpcmVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2wsIFBBTDo6Qm94U2lkZSwg
UmVuZGVyVGFibGVDZWxsKiA9IDApOwogICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdEZvclJvd0dy
b3VwQm9yZGVyKFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExheW91dFJlY3QmIHJvd0dyb3VwUmVj
dCwgdW5zaWduZWQgcm93KTsKIAotICAgIExheW91dFVuaXQgb2Zmc2V0VG9wRm9yUm93R3JvdXBC
b3JkZXIoUmVuZGVyVGFibGVDZWxsKiwgQm94U2lkZSBib3JkZXJTaWRlLCB1bnNpZ25lZCByb3cp
OworICAgIExheW91dFVuaXQgb2Zmc2V0VG9wRm9yUm93R3JvdXBCb3JkZXIoUmVuZGVyVGFibGVD
ZWxsKiwgUEFMOjpCb3hTaWRlIGJvcmRlclNpZGUsIHVuc2lnbmVkIHJvdyk7CiAgICAgTGF5b3V0
VW5pdCB2ZXJ0aWNhbFJvd0dyb3VwQm9yZGVySGVpZ2h0KFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0
IExheW91dFJlY3QmIHJvd0dyb3VwUmVjdCwgdW5zaWduZWQgcm93KTsKICAgICBMYXlvdXRVbml0
IGhvcml6b250YWxSb3dHcm91cEJvcmRlcldpZHRoKFJlbmRlclRhYmxlQ2VsbCosIGNvbnN0IExh
eW91dFJlY3QmIHJvd0dyb3VwUmVjdCwgdW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4pOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggOGM0MjU0ZWM0Mjk0
M2UxMzc4MmM0N2NkM2JiNmVjZmQ5M2U2NjUxOS4uYzQyNzQzM2Y5OTMzNTA5OTY3NzUwMjdhNDQ0
ZjE5ZDAwYmQ4ZWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApA
QCAtMjgsMTQgKzI4LDE0IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUg
IkJyZWFrTGluZXMuaCIKICNpbmNsdWRlICJCcmVha2luZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJD
aGFyYWN0ZXJQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQ2hhcmFjdGVyUHJvcGVy
dGllcy5oPgogI2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9t
cy5oIgotI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvSHlwaGVu
YXRpb24uaD4KICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJJbmxp
bmVJdGVyYXRvckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIklubGluZUl0ZXJh
dG9yVGV4dEJveC5oIgpAQCAtOTMzLDcgKzkzMyw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJh
Z21lbnRXaWR0aChSZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
CiAgICAgVmVjdG9yPGludCwgOD4gaHlwaGVuTG9jYXRpb25zOwogICAgIEFTU0VSVCh3b3JkLmxl
bmd0aCgpID49IG1pbmltdW1TdWZmaXhMZW5ndGgpOwogICAgIHVuc2lnbmVkIGh5cGhlbkxvY2F0
aW9uID0gd29yZC5sZW5ndGgoKSAtIG1pbmltdW1TdWZmaXhMZW5ndGg7Ci0gICAgd2hpbGUgKCho
eXBoZW5Mb2NhdGlvbiA9IGxhc3RIeXBoZW5Mb2NhdGlvbih3b3JkLCBoeXBoZW5Mb2NhdGlvbiwg
c3R5bGUuY29tcHV0ZWRMb2NhbGUoKSkpID49IHN0ZDo6bWF4KG1pbmltdW1QcmVmaXhMZW5ndGgs
IDFVKSkKKyAgICB3aGlsZSAoKGh5cGhlbkxvY2F0aW9uID0gUEFMOjpsYXN0SHlwaGVuTG9jYXRp
b24od29yZCwgaHlwaGVuTG9jYXRpb24sIHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKSA+PSBzdGQ6
Om1heChtaW5pbXVtUHJlZml4TGVuZ3RoLCAxVSkpCiAgICAgICAgIGh5cGhlbkxvY2F0aW9ucy5h
cHBlbmQoaHlwaGVuTG9jYXRpb24pOwogCiAgICAgaWYgKGh5cGhlbkxvY2F0aW9ucy5pc0VtcHR5
KCkpCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGbwogICAgIGZs
b2F0IG1heFdvcmRXaWR0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKICAg
ICB1bnNpZ25lZCBtaW5pbXVtUHJlZml4TGVuZ3RoID0gMDsKICAgICB1bnNpZ25lZCBtaW5pbXVt
U3VmZml4TGVuZ3RoID0gMDsKLSAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1
dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKSB7CisgICAgaWYgKHN0
eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvICYmIFBBTDo6Y2FuSHlwaGVuYXRlKHN0eWxl
LmNvbXB1dGVkTG9jYWxlKCkpKSB7CiAgICAgICAgIG1heFdvcmRXaWR0aCA9IDA7CiAKICAgICAg
ICAgLy8gTWFwICdoeXBoZW5hdGUtbGltaXQte2JlZm9yZSxhZnRlcn06IGF1dG87JyB0byAyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXgg
MGYyODFhMDU3Y2Y2NTE4MGU0YmU4Njk5MDZlODJjNmIxN2I4MDIwYy4uZTFhZjE4ZGZhMDlmNzcw
YjIwNDM2ZTU0NjFmY2EzMjI0NDgzMTQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgZmxvYXQgUmVuZGVy
VGV4dENvbnRyb2w6OmdldEF2ZXJhZ2VDaGFyV2lkdGgoKQogICAgIGNvbnN0IFVDaGFyIGNoID0g
JzAnOwogICAgIGNvbnN0IFN0cmluZyBzdHIgPSBTdHJpbmcoJmNoLCAxKTsKICAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKLSAgICBUZXh0UnVuIHRl
eHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0ciwgc3R5bGUoKSwgQWxsb3dSaWdodEV4cGFuc2lv
bik7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHIsIHN0eWxlKCks
IFBBTDo6QWxsb3dSaWdodEV4cGFuc2lvbik7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1
bik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRl
eCBjZGIyYjBhMmQxYjc0MGVjNzIxODUwY2M2NzczN2NjNGM5MTgxNDZhLi44ZGEzMWQ2ZTU4ZGU5
ZGY2N2JjNWEyOGNlMmMwMTE4MjAzOWE0N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCkBAIC03MDUsNyArNzA1LDcgQEAgTGVuZ3RoQm94IFJlbmRlclRo
ZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnMKICAgICB9CiAKICAgICBpZiAoc3R5bGUuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4geyAwLCAwLCAwLCBzdGF0aWNf
Y2FzdDxpbnQ+KHBhZGRpbmcgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSB9OwogICAgICAgICBy
ZXR1cm4geyAwLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmcgKyBzdHlsZS5ib3JkZXJUb3BXaWR0
aCgpKSwgMCwgMCB9OwogICAgIH0KQEAgLTg0Nyw3ICs4NDcsNyBAQCB2b2lkIFJlbmRlclRoZW1l
SU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiBib3gs
IGNvbnN0CiAjZW5kaWYKIAogICAgIGF1dG8mIHN0eWxlID0gYm94LnN0eWxlKCk7Ci0gICAgYm9v
bCBpc1JUTCA9IHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBi
b29sIGlzUlRMID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7
CiAgICAgZmxvYXQgYm9yZGVyVG9wV2lkdGggPSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAg
IEZsb2F0UmVjdCBjbGlwKHJlY3QueCgpICsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3Qu
eSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwgcmVjdC53aWR0aCgpIC0gc3R5bGUuYm9yZGVy
TGVmdFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSBz
dHlsZS5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCk7CkBAIC04ODksNyArODg5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51
TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYgYm94LCBjb25zdAogCiAgICAg
ZmxvYXQgc2VwYXJhdG9yUG9zaXRpb24gPSBpc1JUTCA/IChjbGlwLngoKSArIE1lbnVMaXN0QnV0
dG9uUGFkZGluZ0FmdGVyKSA6IChjbGlwLm1heFgoKSAtIE1lbnVMaXN0QnV0dG9uUGFkZGluZ0Fm
dGVyKTsKIAotICAgIGJveC5kcmF3TGluZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQoKSwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQoc2VwYXJhdG9yUG9zaXRpb24gLSBib3JkZXJUb3BXaWR0aCwg
Y2xpcC55KCkpLCBGbG9hdFBvaW50KHNlcGFyYXRvclBvc2l0aW9uLCBjbGlwLm1heFkoKSkpLCBC
b3hTaWRlOjpSaWdodCwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9y
ZGVyVG9wQ29sb3IpLCBzdHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAwLCAwKTsKKyAgICBib3guZHJh
d0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250ZXh0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50
KHNlcGFyYXRvclBvc2l0aW9uIC0gYm9yZGVyVG9wV2lkdGgsIGNsaXAueSgpKSwgRmxvYXRQb2lu
dChzZXBhcmF0b3JQb3NpdGlvbiwgY2xpcC5tYXhZKCkpKSwgUEFMOjpCb3hTaWRlOjpSaWdodCwg
c3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLCBz
dHlsZS5ib3JkZXJUb3BTdHlsZSgpLCAwLCAwKTsKIAogICAgIEZsb2F0UmVjdCBidXR0b25DbGlw
OwogICAgIGlmIChpc1JUTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQppbmRleCA5NjQ4NTYxMGFmYTAyYzFjZWI1MThhNTJlYjMyMDE3MTFiOThlNjA3Li4xMTEz
NzE2MDhhMDNkNjU0NGU3YzVlZWUyY2NjMTgzMGQ3ZTQ3NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xNTQyLDcgKzE1NDIsNyBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgY29uc3QgUAogCiB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0
dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBib29sIGlzUlRMID0g
cmVuZGVyZXIuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAg
Ym9vbCBpc1JUTCA9IHJlbmRlcmVyLnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEw7CiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVu
ZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKICAgICAgICAgcmVjdC55KCkgKyByZW5k
ZXJlci5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCksCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJl
bmRlcmVyLnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRl
clJpZ2h0V2lkdGgoKSwKQEAgLTE2NTAsNyArMTY1MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBl
KSBjCiBMZW5ndGhCb3ggUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2V0dGluZ3MmKSBjb25zdAogewogICAgIGlm
IChzdHlsZS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAg
IGNvbnN0IGludCogcGFkZGluZyA9IHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpLCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAg
ICAgICBjb25zdCBpbnQqIHBhZGRpbmcgPSBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVG
b3JGb250KHN0eWxlKSwgc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpS
VEwpOwogICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmdbdG9wUGFkZGlu
Z10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihwYWRkaW5nW3JpZ2h0UGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5nW2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKSwKQEAgLTE2NjEsNyArMTY2MSw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVt
ZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zCiAgICAgICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIChzdHlsZS5j
b21wdXRlZEZvbnRQaXhlbFNpemUoKSAvIGJhc2VGb250U2l6ZSk7CiAgICAgICAgIGZsb2F0IHJp
Z2h0UGFkZGluZyA9IGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nQmVmb3JlICsgYXJy
b3dQYWRkaW5nQWZ0ZXIgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7CiAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3R5bGVkUG9wdXBQYWRkaW5n
TGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgc3RkOjpzd2FwKHJpZ2h0
UGFkZGluZywgbGVmdFBhZGRpbmcpOwogICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+
KHN0eWxlZFBvcHVwUGFkZGluZ1RvcCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSksCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KHJpZ2h0UGFkZGluZyksCkBAIC0xNzEyLDcgKzE3MTIsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IEludFNpegogICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJh
c2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCiAgICAgc2V0Q29udHJv
bFNpemUocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgYnV0dG9uU2l6ZSwgby5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBwb3B1cEJ1dHRvbi51c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uID0gby5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxU
UiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgcG9wdXBCdXR0b24udXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbiA9IG8uc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAKICAgICAv
LyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hl
Y2tlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAgLTIxMzAsNyArMjEzMCw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJv
eCYgYm94LCBjb25zdCBQCiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gYWRqdXN0ZWRSZXN1
bHRCdXR0b25SZWN0KFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qoc25h
cHBlZEludFJlY3QoaW5wdXRCb3guY29udGVudEJveFJlY3QoKSkpXSk7CiAgICAgLy8gQWRqdXN0
IHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBjb250ZW50IGRpcmVjdGlvbi4KICAgICBmbG9hdCBhZGp1
c3RlZFhQb3NpdGlvbjsKLSAgICBpZiAoYm94LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERp
cmVjdGlvbjo6UlRMKQorICAgIGlmIChib3guc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5j
b250ZW50Qm94UmVjdCgpLm1heFgoKSAtIGxvY2FsQm91bmRzLnNpemUoKS53aWR0aCgpOwogICAg
IGVsc2UKICAgICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94UmVj
dCgpLngoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cAppbmRleCBiOTBmMWI2NWQ5NmM4OWE3YzE5NzMxY2I0N2ZhOTc1NDEwYjkwN2YyLi4xOGVlY2Ex
NzE1MjcxZTM5N2E4OTFmNWM3OWU1Yzk1ZjFiNzQ5ZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zMjgsMTMgKzMyOCwxMyBAQCB2b2lk
IFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJPYmplY3QmIG8sCiAgICAgICAgIExheW91dFVuaXQgYm9yZGVyTGVmdCA9IGJveC5i
b3JkZXJMZWZ0KCk7CiAgICAgICAgIGlmIChib3guaXNGaWVsZHNldCgpKSB7CiAgICAgICAgICAg
ICBjb25zdCBhdXRvJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihib3gpOwotICAgICAg
ICAgICAgaWYgKG8uc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpUb3BUb0Jv
dHRvbSkKKyAgICAgICAgICAgIGlmIChvLnN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBQQUw6Oldy
aXRpbmdNb2RlOjpUb3BUb0JvdHRvbSkKICAgICAgICAgICAgICAgICBib3JkZXJUb3AgLT0gYmxv
Y2suaW50cmluc2ljQm9yZGVyRm9yRmllbGRzZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG8u
c3R5bGUoKS53cml0aW5nTW9kZSgpID09IFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCkKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG8uc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFBBTDo6V3JpdGluZ01v
ZGU6OkJvdHRvbVRvVG9wKQogICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbSAtPSBibG9jay5p
bnRyaW5zaWNCb3JkZXJGb3JGaWVsZHNldCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoby5zdHls
ZSgpLndyaXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0KQorICAgICAgICAg
ICAgZWxzZSBpZiAoby5zdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6
TGVmdFRvUmlnaHQpCiAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCAtPSBibG9jay5pbnRyaW5z
aWNCb3JkZXJGb3JGaWVsZHNldCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoby5zdHlsZSgpLndy
aXRpbmdNb2RlKCkgPT0gV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0KQorICAgICAgICAgICAgZWxz
ZSBpZiAoby5zdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQpCiAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQgLT0gYmxvY2suaW50cmluc2ljQm9y
ZGVyRm9yRmllbGRzZXQoKTsKICAgICAgICAgICAgIAogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAppbmRleCA0NzRmN2ViYTc2ODgzNTA2ZjI2
NDk0ZDlkZjRlZTI3MGYzYzRmYTY3Li42Y2JjNzY1MWFmOTYxMzQ1ZDc2OWUyMTc0ZDVhZWU5YTFh
OGYyMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAK
QEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRB
bmREZWNvcmF0aW9ucygpCiAgICAgICAgICAgICBpZiAoIXRleHRCb3goKS5pc0hvcml6b250YWwo
KSkgewogICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Qu
bW92ZSgwLCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZSk7CiAgICAgICAgICAgICAgICAgdGV4dERl
Y29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRIZWlnaHQobG9naWNhbFNlbGVjdGlvbldp
ZHRoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGV4dEJveCgpLmRpcmVjdGlvbigpID09IFRl
eHREaXJlY3Rpb246OlJUTCkgeworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Qm94KCkuZGly
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgICAgICAgICB0
ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJS
YW5nZSwgMCk7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0
UmVjdC5zZXRXaWR0aChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwogICAgICAgICAgICAgfSBlbHNl
IHsKQEAgLTQxOCw5ICs0MTgsOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0
aW9uVW5kZXJsaW5lcygpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWlycm9yUlRM
U2VnbWVudChmbG9hdCBsb2dpY2FsV2lkdGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9h
dCYgc3RhcnQsIGZsb2F0IHdpZHRoKQorc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21l
bnQoZmxvYXQgbG9naWNhbFdpZHRoLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9h
dCYgc3RhcnQsIGZsb2F0IHdpZHRoKQogewotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSKQorICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
CiAgICAgICAgIHJldHVybjsKICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3Rh
cnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCBhNTll
ZWQ0NGY0YWEzNDQ2MzcyOGZiNmUyNjExNWQ4OTVlNTQ0NzljLi5jYjNjMzVlMmFjZTkxYzRhN2Q4
MTExMTBkMzIzZTNmODQ2M2YyNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TaGFk
b3dBcHBsaWVyOjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwg
Y29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxk
RHJhd1RleHQsIGJvb2wgb3BhcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCitTaGFk
b3dBcHBsaWVyOjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwg
Y29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxk
RHJhd1RleHQsIGJvb2wgb3BhcXVlLCBQQUw6OkZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
ICAgICA6IG1fY29udGV4dCB7IGNvbnRleHQgfQogICAgICwgbV9zaGFkb3cgeyBzaGFkb3cgfQog
ICAgICwgbV9vbmx5RHJhd3NTaGFkb3cgeyAhaXNMYXN0U2hhZG93SXRlcmF0aW9uKCkgfHwgIWxh
c3RTaGFkb3dJdGVyYXRpb25TaG91bGREcmF3VGV4dCB9CkBAIC01MCw4ICs1MCw4IEBAIFNoYWRv
d0FwcGxpZXI6OlNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3csCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmbG9hdCBz
aGFkb3dYID0gb3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsID8gc2hh
ZG93LT54KCkudmFsdWUoKSA6IHNoYWRvdy0+eSgpLnZhbHVlKCk7Ci0gICAgZmxvYXQgc2hhZG93
WSA9IG9yaWVudGF0aW9uID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCA/IHNoYWRvdy0+
eSgpLnZhbHVlKCkgOiAtc2hhZG93LT54KCkudmFsdWUoKTsKKyAgICBmbG9hdCBzaGFkb3dYID0g
b3JpZW50YXRpb24gPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgPyBzaGFkb3ct
PngoKS52YWx1ZSgpIDogc2hhZG93LT55KCkudmFsdWUoKTsKKyAgICBmbG9hdCBzaGFkb3dZID0g
b3JpZW50YXRpb24gPT0gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgPyBzaGFkb3ct
PnkoKS52YWx1ZSgpIDogLXNoYWRvdy0+eCgpLnZhbHVlKCk7CiAgICAgRmxvYXRTaXplIHNoYWRv
d09mZnNldChzaGFkb3dYLCBzaGFkb3dZKTsKICAgICBhdXRvIHNoYWRvd1JhZGl1cyA9IHNoYWRv
dy0+cmFkaXVzKCk7CiAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CkBA
IC0xNDEsNyArMTQxLDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3Mo
Y29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGaWx0ZXJPcGUKICAgICBpZiAoIW9wYXF1
ZSkKICAgICAgICAgbV9jb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogICAgIHdo
aWxlIChzaGFkb3cpIHsKLSAgICAgICAgU2hhZG93QXBwbGllciBzaGFkb3dBcHBsaWVyKG1fY29u
dGV4dCwgc2hhZG93LCBjb2xvckZpbHRlciwgYm94UmVjdCwgbGFzdFNoYWRvd0l0ZXJhdGlvblNo
b3VsZERyYXdUZXh0LCBvcGFxdWUsIG1fdGV4dEJveElzSG9yaXpvbnRhbCA/IEZvbnRPcmllbnRh
dGlvbjo6SG9yaXpvbnRhbCA6IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOworICAgICAgICBT
aGFkb3dBcHBsaWVyIHNoYWRvd0FwcGxpZXIobV9jb250ZXh0LCBzaGFkb3csIGNvbG9yRmlsdGVy
LCBib3hSZWN0LCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQsIG9wYXF1ZSwgbV90
ZXh0Qm94SXNIb3Jpem9udGFsID8gUEFMOjpGb250T3JpZW50YXRpb246Okhvcml6b250YWwgOiBQ
QUw6OkZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpOwogICAgICAgICBpZiAoIXNoYWRvd0FwcGxp
ZXIubm90aGluZ1RvRHJhdygpKQogICAgICAgICAgICAgcGFpbnRUZXh0T3JFbXBoYXNpc01hcmtz
KGZvbnQsIHRleHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCB0ZXh0T3Jp
Z2luICsgc2hhZG93QXBwbGllci5leHRyYU9mZnNldCgpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
KTsKICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0UGFpbnRlci5oCmluZGV4IGU0NTM0Y2JmYmYxODcwMTc2NDc0N2E1ODMzODVkNzk4ZDA3
MTU5ODIuLjc4M2U3ZGRiMjhhNjA2MGQ4NGY1MDNhN2U5MGM2ZTcwZTMwOGIwOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
R2x5cGhEaXNwbGF5TGlzdENhY2hlLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVk
ZSA8cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCBpbmxp
bmUgdm9pZCBUZXh0UGFpbnRlcjo6c2V0RW1waGFzaXNNYXJrKGNvbnN0IEF0b21TdHJpbmcmIG1h
cmssIGZsb2F0IG9mZnNldCwgYwogCiBjbGFzcyBTaGFkb3dBcHBsaWVyIHsKIHB1YmxpYzoKLSAg
ICBTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFNoYWRvd0RhdGEqLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVj
dCwgYm9vbCBsYXN0U2hhZG93SXRlcmF0aW9uU2hvdWxkRHJhd1RleHQgPSB0cnVlLCBib29sIG9w
YXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhvcml6b250
YWwpOworICAgIFNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgU2hhZG93RGF0
YSosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIGNvbG9yRmlsdGVyLCBjb25zdCBGbG9hdFJlY3Qm
IHRleHRSZWN0LCBib29sIGxhc3RTaGFkb3dJdGVyYXRpb25TaG91bGREcmF3VGV4dCA9IHRydWUs
IGJvb2wgb3BhcXVlID0gZmFsc2UsIFBBTDo6Rm9udE9yaWVudGF0aW9uID0gUEFMOjpGb250T3Jp
ZW50YXRpb246Okhvcml6b250YWwpOwogICAgIEZsb2F0U2l6ZSBleHRyYU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fZXh0cmFPZmZzZXQ7IH0KICAgICBib29sIG5vdGhpbmdUb0RyYXcoKSBjb25z
dCB7IHJldHVybiBtX25vdGhpbmdUb0RyYXc7IH0KICAgICBib29sIGRpZFNhdmVDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9kaWRTYXZlQ29udGV4dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCAzZDlmZjk5NWJiYzM3NDQ3ZmNh
ODcyMDVkYTkxNzU5ZjdhNjI5NTk1Li4wODI4ZjIyNGI1M2EwOTQwYjFhNDM2ZDhmODE5MzBkMTFi
ZDdiZjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2lu
Z0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHQuaApAQCAtMjUsNyArMjUsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCcmVh
a0xpbmVzLmgiCi0jaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9I
eXBoZW5hdGlvbi5oPgogI2luY2x1ZGUgIkxpbmVCcmVha2VyLmgiCiAjaW5jbHVkZSAiTGluZUlu
Zm8uaCIKICNpbmNsdWRlICJMaW5lTGF5b3V0U3RhdGUuaCIKQEAgLTI2Niw2ICsyNjYsMTUgQEAg
aW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjppbmNyZW1lbnQoKQogICAgIG1fYXRTdGFydCA9
IGZhbHNlOwogfQogCisvLyBXaGVuIGlnbm9yaW5nIHNwYWNlcywgdGhpcyBuZWVkcyB0byBiZSBj
YWxsZWQgZm9yIG9iamVjdHMgdGhhdCBuZWVkIGxpbmUgYm94ZXMgc3VjaCBhcyBSZW5kZXJJbmxp
bmVzIG9yCisvLyBoYXJkIGxpbmUgYnJlYWtzIHRvIGVuc3VyZSB0aGF0IHRoZXkncmUgbm90IGln
bm9yZWQuCitzdGF0aWMgdm9pZCBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhMaW5l
V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSYgc3RhdGUsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIp
Cit7CisgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgdHJhbnNpdGlvbigwLCAmcmVuZGVyZXIsIDAp
OworICAgIHN0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsKKyAgICBzdGF0ZS5z
dGFydElnbm9yaW5nU3BhY2VzKHRyYW5zaXRpb24pOworfQorCiBpbmxpbmUgdm9pZCBCcmVha2lu
Z0NvbnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogewogICAgIGlmIChmaXRz
T25MaW5lT3JIYW5nc0F0RW5kKCkpIHsKQEAgLTI4Nyw3ICsyOTYsNyBAQCBpbmxpbmUgdm9pZCBC
cmVha2luZ0NvbnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogICAgICAgICAv
LyBuZWVkIHRvIGNoZWNrIGZvciBmbG9hdHMgdG8gY2xlYXIgLSBzbyBpZiB3ZSdyZSBpZ25vcmlu
ZyBzcGFjZXMsIHN0b3AgaWdub3JpbmcgdGhlbSBhbmQgYWRkIGEKICAgICAgICAgLy8gcnVuIGZv
ciB0aGlzIG9iamVjdC4KICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMgJiYgUmVuZGVyU3R5
bGU6OnVzZWRDbGVhcihicikgIT0gVXNlZENsZWFyOjpOb25lKQotICAgICAgICAgICAgbV9saW5l
V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNl
cyhicik7CisgICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2xp
bmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLCBicik7CiAgICAgICAgIC8vIElmIHdlIHdlcmUg
cHJlY2VkZWQgYnkgY29sbGFwc2luZyBzcGFjZSBhbmQgYXJlIGluIGEgcmlnaHQtYWxpZ25lZCBj
b250YWluZXIgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHNwYWNlIGdldHMKICAgICAgICAgLy8gY29s
bGFwc2VkIGF3YXkgc28gdGhhdCBpdCBkb2Vzbid0IHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhl
IGNvbnRhaW5lcidzIHJpZ2h0LWhhbmQgZWRnZS4KICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMg
cmVnYXJkbGVzcyBvZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJl
YmFzZWxpbmluZyBhIGxvdCBvZiB0ZXN0IHJlc3VsdHMuCkBAIC0zNzAsNyArMzc5LDcgQEAgaW5s
aW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVPdXRPZkZsb3dQb3NpdGlvbmVkKFZlY3Rv
cjxSZW5kZXJCb3gqPiYgcG9zaXQKICAgICAvLyB0aGVuIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyBh
Z2Fpbi4KICAgICBpZiAoaXNJbmxpbmVUeXBlIHx8IGJveC5jb250YWluZXIoKS0+aXNSZW5kZXJJ
bmxpbmUoKSkgewogICAgICAgICBpZiAobV9pZ25vcmluZ1NwYWNlcykKLSAgICAgICAgICAgIG1f
bGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRT
cGFjZXMoYm94KTsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2Vz
KG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIGJveCk7CiAgICAgICAgIG1fdHJhaWxp
bmdPYmplY3RzLmFwcGVuZEJveElmTmVlZGVkKGJveCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBv
c2l0aW9uZWRPYmplY3RzLmFwcGVuZCgmYm94KTsKQEAgLTQzOCw3ICs0NDcsNyBAQCBpbmxpbmUg
dm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKICAgICAgICAgICAgIG1f
bGluZUluZm8uc2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmbV93aWR0aCk7CiAgICAgICAgIGlm
IChtX2lnbm9yaW5nU3BhY2VzKSB7CiAgICAgICAgICAgICBtX3RyYWlsaW5nT2JqZWN0cy5jbGVh
cigpOwotICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVM
aW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcygqbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgICAg
ICAgICAgZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobV9saW5lV2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZSwgKm1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICAgICAgfSBlbHNlIGlm
IChtX2Jsb2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgbV9yZXNvbHZlci5wb3NpdGlv
bigpLnJlbmRlcmVyKCkgPT0gbV9jdXJyZW50LnJlbmRlcmVyKCkKICAgICAgICAgICAgICYmIHNo
b3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBtX2N1cnJlbnQucmVu
ZGVyZXIoKSwgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSkpIHsKICAgICAgICAgICAg
IC8vIExpa2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0byBt
YWtlIHN1cmUgdGhhdCBhbnkKQEAgLTU5Myw3ICs2MDIsNyBAQCBpbmxpbmUgdm9pZCB0cnlIeXBo
ZW5hdGluZyhSZW5kZXJUZXh0JiB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
QXRvbQogICAgIGZsb2F0IGh5cGhlbldpZHRoID0gbWVhc3VyZUh5cGhlbldpZHRoKHRleHQsIGZv
bnQpOwogCiAgICAgZmxvYXQgbWF4UHJlZml4V2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHhQb3Mg
LSBoeXBoZW5XaWR0aCAtIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwotICAgIGlmICghZW5vdWdoV2lk
dGhGb3JIeXBoZW5hdGlvbihtYXhQcmVmaXhXaWR0aCwgZm9udC5waXhlbFNpemUoKSkpCisgICAg
aWYgKCFQQUw6OmVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24obWF4UHJlZml4V2lkdGgsIGZvbnQu
cGl4ZWxTaXplKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSB0ZXh0LnN0eWxlKCk7CkBAIC02MDUsNyArNjE0LDcgQEAgaW5saW5lIHZvaWQgdHJ5
SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCYgdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNv
bnN0IEF0b20KICAgICBpZiAocHJlZml4TGVuZ3RoIDwgbWluaW11bVByZWZpeExlbmd0aCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgcHJlZml4TGVuZ3RoID0gbGFzdEh5cGhlbkxvY2F0aW9uKFN0
cmluZ1ZpZXcodGV4dC50ZXh0KCkpLnN1YnN0cmluZyhsYXN0U3BhY2UsIHBvcyAtIGxhc3RTcGFj
ZSksIHN0ZDo6bWluKHByZWZpeExlbmd0aCwgcG9zIC0gbGFzdFNwYWNlIC0gbWluaW11bVN1ZmZp
eExlbmd0aCkgKyAxLCBsb2NhbGVJZGVudGlmaWVyKTsKKyAgICBwcmVmaXhMZW5ndGggPSBQQUw6
Omxhc3RIeXBoZW5Mb2NhdGlvbihTdHJpbmdWaWV3KHRleHQudGV4dCgpKS5zdWJzdHJpbmcobGFz
dFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UpLCBzdGQ6Om1pbihwcmVmaXhMZW5ndGgsIHBvcyAtIGxh
c3RTcGFjZSAtIG1pbmltdW1TdWZmaXhMZW5ndGgpICsgMSwgbG9jYWxlSWRlbnRpZmllcik7CiAg
ICAgaWYgKCFwcmVmaXhMZW5ndGggfHwgcHJlZml4TGVuZ3RoIDwgbWluaW11bVByZWZpeExlbmd0
aCkKICAgICAgICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjk0LDcgQEAgaW5saW5lIGJvb2wgQnJl
YWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVu
dHMsIGJvb2wKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUocmVuZGVy
ZXIsIG1fbGluZUluZm8pOwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUuZm9u
dENhc2NhZGUoKTsKICAgICBib29sIGlzRml4ZWRQaXRjaCA9IGZvbnQuaXNGaXhlZFBpdGNoKCk7
Ci0gICAgYm9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0
byAmJiBXZWJDb3JlOjpjYW5IeXBoZW5hdGUoc3R5bGUuY29tcHV0ZWRMb2NhbGUoKSk7CisgICAg
Ym9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBQ
QUw6OmNhbkh5cGhlbmF0ZShzdHlsZS5jb21wdXRlZExvY2FsZSgpKTsKICAgICBib29sIGNhbkhh
bmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBzdHlsZS5oYW5naW5nUHVuY3R1YXRpb24oKS5jb250YWlu
cyhIYW5naW5nUHVuY3R1YXRpb246OkZpcnN0KTsKICAgICBib29sIGNhbkhhbmdQdW5jdHVhdGlv
bkF0RW5kID0gc3R5bGUuaGFuZ2luZ1B1bmN0dWF0aW9uKCkuY29udGFpbnMoSGFuZ2luZ1B1bmN0
dWF0aW9uOjpMYXN0KTsKICAgICBib29sIGNhbkhhbmdTdG9wT3JDb21tYUF0TGluZUVuZCA9IHN0
eWxlLmhhbmdpbmdQdW5jdHVhdGlvbigpLmNvbnRhaW5zKEhhbmdpbmdQdW5jdHVhdGlvbjo6QWxs
b3dFbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxp
bmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2Jq
ZWN0cy5jcHAKaW5kZXggYmUyZmVhMTU0NWFmYTRhNjU1MjZiOWFmNjdiYjQ4OWIzNDQxYjY3NS4u
NTgwMDBlZWM1YTQ0ZWU1OWI2MGQ3YmVhMDIyYWI5YTU2ZDBiNWU1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCkBAIC01MCw3ICs1
MCw3IEBAIHZvaWQgVHJhaWxpbmdPYmplY3RzOjp1cGRhdGVXaGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25zRm9yVHJhaWxpbmdCb3hlcyhMaW5lCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9ib3hlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRUcmFu
c2l0aW9uID49IGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25zKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgdHJhbnNpdGlvbiBmb3IgdGhp
cyBib3ggeWV0LgotICAgICAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
LmVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAg
ICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVXaGl0ZXNwYWNlQ29s
bGFwc2luZ1N0YXRlLCBtX2JveGVzW2ldKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25z
KClbY3VycmVudFRyYW5zaXRpb25dLnJlbmRlcmVyKCkgPT0gJihtX2JveGVzW2ldLmdldCgpKSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRy
YW5zaXRpb25zKClbY3VycmVudFRyYW5zaXRpb24gKyAxXS5yZW5kZXJlcigpID09ICYobV9ib3hl
c1tpXS5nZXQoKSkpOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBk
YXRlV2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGluZQog
ICAgICAgICBMZWdhY3lJbmxpbmVJdGVyYXRvciBlbmRNaWQoMCwgbV93aGl0ZXNwYWNlLCBwb3Mp
OwogICAgICAgICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5zdGFydElnbm9yaW5nU3Bh
Y2VzKGVuZE1pZCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ib3hlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3Vy
ZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgZW5z
dXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3Rh
dGUsIG1fYm94ZXNbaV0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9UcmFpbGluZ09iamVjdHMuaAppbmRleCAzNmVhM2JiN2U4ZTgyYjI1MmRkMTUwYTMw
NjdiYThkMDdlNDc3YzJjLi45OTQwZjcxMzVmMTBjMGQzYTdlODk5Mzg3ZWZlMzQ0MDljZjQ5OTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVj
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMu
aApAQCAtMjYsNiArMjYsMTIgQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNw
YWNlIFBBTCB7Cit0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3MgQmlk
aVJlc29sdmVyOwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIElz
b2xhdGVSdW4+IGNsYXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlOwordGVtcGxhdGUgPGNsYXNz
IEl0ZXJhdG9yPiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOworfQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIExlZ2FjeUlubGluZUl0ZXJhdG9yOwpAQCAtMzUsMTEgKzQx
LDggQEAgY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBCaWRpUnVuOwogc3RydWN0IEJpZGlJc29s
YXRlZFJ1bjsKIAotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJp
ZGlSZXNvbHZlcjsKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBJ
c29sYXRlUnVuPiBjbGFzcyBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTsKLXRlbXBsYXRlIDxjbGFz
cyBJdGVyYXRvcj4gY2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLXR5cGVkZWYgQmlk
aVJlc29sdmVyV2l0aElzb2xhdGU8TGVnYWN5SW5saW5lSXRlcmF0b3IsIEJpZGlSdW4sIEJpZGlJ
c29sYXRlZFJ1bj4gSW5saW5lQmlkaVJlc29sdmVyOwotdHlwZWRlZiBXaGl0ZXNwYWNlQ29sbGFw
c2luZ1N0YXRlPExlZ2FjeUlubGluZUl0ZXJhdG9yPiBMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdT
dGF0ZTsKK3R5cGVkZWYgUEFMOjpCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxMZWdhY3lJbmxpbmVJ
dGVyYXRvciwgQmlkaVJ1biwgQmlkaUlzb2xhdGVkUnVuPiBJbmxpbmVCaWRpUmVzb2x2ZXI7Cit0
eXBlZGVmIFBBTDo6V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRv
cj4gTGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7CiAKIGNsYXNzIFRyYWlsaW5nT2JqZWN0
cyB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwCmluZGV4IGVkOGYyMGY5ODViYWEyNTQ3NDg0MWIyNjhhNDU0
OTc5NjRlZjJlYmUuLmIyZGI0OGNkYjg2MzU4Y2M5NDJkYzFhN2M3OTY2OWQ2ZTg3ZTY3NGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCkBAIC04OSw3ICs4OSw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6
Om1hdGhBeGlzSGVpZ2h0KCkgY29uc3QKIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6
bWlycm9ySWZOZWVkZWQoTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBMYXlvdXRVbml0IGJv
eFdpZHRoKSBjb25zdAogewotICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJl
Y3Rpb246OlJUTCkKKyAgICBpZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTCkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gYm94V2lkdGggLSBo
b3Jpem9udGFsT2Zmc2V0OwogCiAgICAgcmV0dXJuIGhvcml6b250YWxPZmZzZXQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwCmluZGV4IGFhMWZlNTUyYTE4M2FhZDMyMmJjYjM0ZDEwOGZlMWFhYzEzMzUxNTAuLmFh
Mzk0YmUyNGExNWVhODVkOGRlZTkxNWYzMmU2NjYxNzI1ZjI2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0Qmxv
Y2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2cKICAgICAgICAgc2V0
TG9naWNhbFdpZHRoKHdpZHRoKTsKIAogICAgICAgICAvLyBXZSB0aGVuIG1vdmUgdGhlIGNoaWxk
cmVuIHRvIHRha2Ugc3BhY2luZyBpbnRvIGFjY291bnQuCi0gICAgICAgIExheW91dFBvaW50IGhv
cml6b250YWxTaGlmdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/
IGxlYWRpbmdTcGFjZVZhbHVlIDogLWxlYWRpbmdTcGFjZVZhbHVlLCAwX2x1KTsKKyAgICAgICAg
TGF5b3V0UG9pbnQgaG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1
ZSwgMF9sdSk7CiAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQt
PnNldExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgaG9yaXpvbnRhbFNoaWZ0KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDZkMzdiZDIw
YTVlYTIxMjBiYWE0YTNlYjU4ZGQ4ODlkZGMzYjkwOTEuLjdiYzY2Y2RkNDQ1NzQ5ZDY5YTg3OWNi
NGQ0MWNjZjZhZjkwZTgyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNy
ZWF0ZVBvbHlnb25TaGFwZShWZWN0b3I8RmxvYXRQb2ludD4mJiB2ZXJ0aWNlcywKICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxQb2x5Z29uU2hhcGU+KFdURk1vdmUodmVydGljZXMpLCBmaWxsUnVsZSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IHBoeXNpY2FsUmVjdFRvTG9naWNhbChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxvZ2ljYWxCb3hIZWlnaHQsIFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKQorc3RhdGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2Fs
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgUEFMOjpXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpKQogICAgICAgICByZXR1cm4gcmVjdDsKQEAgLTc2LDcgKzc2LDcgQEAgc3Rh
dGljIGlubGluZSBGbG9hdFJlY3QgcGh5c2ljYWxSZWN0VG9Mb2dpY2FsKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbG9naWMKICAgICByZXR1cm4gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwog
fQogCi1zdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9naWNhbChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgcGh5c2ljYWxQb2ludFRvTG9n
aWNhbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgbG9naWNhbEJveEhlaWdodCwgUEFM
OjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1cm4gcG9pbnQ7CkBAIC04NSwxNCArODUs
MTQgQEAgc3RhdGljIGlubGluZSBGbG9hdFBvaW50IHBoeXNpY2FsUG9pbnRUb0xvZ2ljYWwoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IGwKICAgICByZXR1cm4gcG9pbnQudHJhbnNwb3Nl
ZFBvaW50KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIHBoeXNpY2FsU2l6ZVRvTG9n
aWNhbChjb25zdCBGbG9hdFNpemUmIHNpemUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorc3Rh
dGljIGlubGluZSBGbG9hdFNpemUgcGh5c2ljYWxTaXplVG9Mb2dpY2FsKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpKQogICAgICAgICByZXR1cm4gc2l6ZTsKICAg
ICByZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U2hh
cGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBCYXNpY1NoYXBlJiBiYXNpY1NoYXBlLCBjb25z
dCBMYXlvdXRTaXplJiBsb2dpY2FsQm94U2l6ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGZs
b2F0IG1hcmdpbikKK3N0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVNoYXBlKGNv
bnN0IEJhc2ljU2hhcGUmIGJhc2ljU2hhcGUsIGNvbnN0IExheW91dFNpemUmIGxvZ2ljYWxCb3hT
aXplLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pCiB7CiAgICAg
Ym9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7CiAgICAgZmxvYXQgYm94V2lkdGggPSBob3Jpem9udGFsV3JpdGluZ01vZGUgPyBs
b2dpY2FsQm94U2l6ZS53aWR0aCgpIDogbG9naWNhbEJveFNpemUuaGVpZ2h0KCk7CkBAIC0xNzMs
NyArMTczLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29u
c3QgQmFzaWNTaGFwZSYgYmFzaWNTaGFwZSwgY29uc3QgTGEKICAgICByZXR1cm4gc2hhcGU7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdl
KiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjb25zdCBMYXlvdXRSZWN0JiBpbWFnZVIsIGNvbnN0
IExheW91dFJlY3QmIG1hcmdpblIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBtYXJn
aW4pCitzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFn
ZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSLCBjb25z
dCBMYXlvdXRSZWN0JiBtYXJnaW5SLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9h
dCBtYXJnaW4pCiB7CiAgICAgQVNTRVJUKG1hcmdpblIuaGVpZ2h0KCkgPj0gMCk7CiAKQEAgLTIz
Niw3ICsyMzYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJT
aGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIHJldHVybiBjcmVhdGVT
aGFwZSgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVCb3hTaGFw
ZShjb25zdCBSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
LCBmbG9hdCBtYXJnaW4pCitzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVCb3hT
aGFwZShjb25zdCBSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIFBBTDo6V3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUsIGZsb2F0IG1hcmdpbikKIHsKICAgICBBU1NFUlQocm91bmRlZFJlY3QucmVjdCgp
LndpZHRoKCkgPj0gMCAmJiByb3VuZGVkUmVjdC5yZWN0KCkuaGVpZ2h0KCkgPj0gMCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuaAppbmRleCAyYmNhN2I1MGY0MzY4OTEy
Y2NjN2Y4MGM4YTU4MzE4OTE0NjQzMThmLi45Y2JmYTg0M2I5ZjNmZTdlOTFhZjc5MDM4NDY4ZjA3
ZDg5YjY3ZDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5oCkBAIC0z
MSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0aC5o
IgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvV3JpdGluZ01v
ZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoK
ICAgICAgICAgUGF0aCBtYXJnaW5TaGFwZTsKICAgICB9OwogCi0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxTaGFwZT4gY3JlYXRlU2hhcGUoY29uc3QgQmFzaWNTaGFwZSYsIGNvbnN0IExheW91
dFNpemUmIGxvZ2ljYWxCb3hTaXplLCBXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSosIGZs
b2F0IHRocmVzaG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBtYXJnaW5SZWN0LCBXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVCb3hTaGFwZShjb25zdCBSb3VuZGVkUmVjdCYs
IFdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
U2hhcGU+IGNyZWF0ZVNoYXBlKGNvbnN0IEJhc2ljU2hhcGUmLCBjb25zdCBMYXlvdXRTaXplJiBs
b2dpY2FsQm94U2l6ZSwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSosIGZsb2F0
IHRocmVzaG9sZCwgY29uc3QgTGF5b3V0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRSZWN0
JiBtYXJnaW5SZWN0LCBQQUw6OldyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pOworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IGNyZWF0ZUJveFNoYXBlKGNvbnN0IFJvdW5kZWRSZWN0
JiwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKTsKIAogICAgIHZpcnR1YWwgflNoYXBl
KCkgPSBkZWZhdWx0OwogCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biAobGluZVRvcCA8IHJlY3QubWF4WSgpICYmIGxpbmVUb3AgKyBsaW5lSGVpZ2h0ID4gcmVjdC55
KCkpIHx8ICghbGluZUhlaWdodCAmJiBsaW5lVG9wID09IHJlY3QueSgpKTsKICAgICB9CiAKLSAg
ICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworICAgIFBBTDo6V3JpdGluZ01vZGUgbV93cml0
aW5nTW9kZTsKICAgICBmbG9hdCBtX21hcmdpbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCmluZGV4IGMxYjhjNGEz
MzJiOTJlZjY4OTBjZmZlNmQyNjc2NmZiOWFmMmQ4NmUuLjIwOTQzZjA2NjI1ODVkMWJlODUwNjRm
NzAzMDI0N2E5ZTc3OGVmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBM
YXlvdXRSZWN0IGdldFNoYXBlSW1hZ2VNYXJnaW5SZWN0KGNvbnN0IFJlbmRlckJveCYgcmVuZGVy
Qm94LCBjb25zdCBMYXlvCiAgICAgcmV0dXJuIExheW91dFJlY3QobWFyZ2luQm94T3JpZ2luLCBt
YXJnaW5SZWN0U2l6ZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGVPdXRzaWRl
SW5mbzo6Y3JlYXRlU2hhcGVGb3JJbWFnZShTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCBz
aGFwZUltYWdlVGhyZXNob2xkLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxvYXQgbWFyZ2lu
KSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZU91dHNpZGVJbmZvOjpjcmVhdGVT
aGFwZUZvckltYWdlKFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UsIGZsb2F0IHNoYXBlSW1hZ2VUaHJl
c2hvbGQsIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IG1hcmdpbikgY29uc3QK
IHsKICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IG1fcmVuZGVyZXIuY2FsY3VsYXRlSW1hZ2VJ
bnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1hZ2UsIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUs
IFJlbmRlckltYWdlOjpTY2FsZUJ5RWZmZWN0aXZlWm9vbSk7CiAgICAgc3R5bGVJbWFnZS0+c2V0
Q29udGFpbmVyQ29udGV4dEZvclJlbmRlcmVyKG1fcmVuZGVyZXIsIGltYWdlU2l6ZSwgbV9yZW5k
ZXJlci5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CkBAIC0xNjksNyArMTY5LDcgQEAgY29uc3Qg
U2hhcGUmIFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVkU2hhcGUoKSBjb25zdAogICAgIEFTU0VS
VChtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
Y29udGFpbmluZ0Jsb2NrU3R5bGUgPSBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHls
ZSgpOwogCi0gICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBjb250YWluaW5nQmxvY2tTdHls
ZS53cml0aW5nTW9kZSgpOworICAgIFBBTDo6V3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBjb250
YWluaW5nQmxvY2tTdHlsZS53cml0aW5nTW9kZSgpOwogICAgIGF1dG8gbWFyZ2luID0gWyZdIHsK
ICAgICAgICAgYXV0byBzaGFwZU1hcmdpbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgobV9yZW5kZXJl
ci5zdHlsZSgpLnNoYXBlTWFyZ2luKCksIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkgPyBt
X3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5jb250ZW50V2lkdGgoKSA6IDBfbHUpOwogICAg
ICAgICByZXR1cm4gaXNuYW4oc2hhcGVNYXJnaW4pID8gMC4wZiA6IHNoYXBlTWFyZ2luOwpAQCAt
MTk5LDI2ICsxOTksMjYgQEAgY29uc3QgU2hhcGUmIFNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVk
U2hhcGUoKSBjb25zdAogICAgIHJldHVybiAqbV9zaGFwZTsKIH0KIAotc3RhdGljIGlubGluZSBM
YXlvdXRVbml0IGJvcmRlckJlZm9yZUluV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQg
Ym9yZGVyQmVmb3JlSW5Xcml0aW5nTW9kZShjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBQQUw6
OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsK
LSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbTogcmV0dXJuIHJlbmRlcmVyLmJvcmRl
clRvcCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVy
ZXIuYm9yZGVyQm90dG9tKCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6IHJl
dHVybiByZW5kZXJlci5ib3JkZXJMZWZ0KCk7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQ6IHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOworICAgIGNhc2UgUEFMOjpXcml0
aW5nTW9kZTo6VG9wVG9Cb3R0b206IHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKTsKKyAgICBj
YXNlIFBBTDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
Qm90dG9tKCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDogcmV0dXJu
IHJlbmRlcmVyLmJvcmRlckxlZnQoKTsKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJpZ2h0
VG9MZWZ0OiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKTsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQmVmb3JlKCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlSW5Xcml0
aW5nTW9kZShjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlSW5Xcml0
aW5nTW9kZShjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBQQUw6OldyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKQogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKLSAgICBjYXNlIFdyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIu
cGFkZGluZ1RvcCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4g
cmVuZGVyZXIuYm9yZGVyQm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci0gICAg
Y2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6IHJldHVybiByZW5kZXJlci5ib3JkZXJMZWZ0
KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpOwotICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0
VG9MZWZ0OiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdS
aWdodCgpOworICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206IHJldHVybiBy
ZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKTsKKyAgICBjYXNlIFBB
TDo6V3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9t
KCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2Rl
OjpMZWZ0VG9SaWdodDogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBh
ZGRpbmdMZWZ0KCk7CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDogcmV0
dXJuIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCkgKyByZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKICAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKaW5kZXggOTQ4NDMxNzE5NDdjMDIz
MDlhYjdmNGZiMWI5N2MyNjM4ODJlZTM3MS4uZGVjNjNhNWY0YTcxNGIxNzc2YTZhMWVmZDc5Mjcz
ZDNjZGIwOTUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZU91dHNpZGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZU91dHNpZGVJbmZvLmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFNoYXBlT3V0c2lkZUluZm8qIGluZm8oY29uc3QgUmVuZGVyQm94JiBrZXkpIHsgcmV0dXJuIGlu
Zm9NYXAoKS5nZXQoJmtleSk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hh
cGU+IGNyZWF0ZVNoYXBlRm9ySW1hZ2UoU3R5bGVJbWFnZSosIGZsb2F0IHNoYXBlSW1hZ2VUaHJl
c2hvbGQsIFdyaXRpbmdNb2RlLCBmbG9hdCBtYXJnaW4pIGNvbnN0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFwZT4gY3JlYXRlU2hhcGVGb3JJbWFnZShTdHlsZUltYWdlKiwgZmxvYXQgc2hhcGVJ
bWFnZVRocmVzaG9sZCwgUEFMOjpXcml0aW5nTW9kZSwgZmxvYXQgbWFyZ2luKSBjb25zdDsKIAog
ICAgIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0OwogICAgIExheW91dFVuaXQg
bG9naWNhbExlZnRPZmZzZXQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL05pbmVQaWVjZUltYWdlLmgKaW5kZXggYzM5ZGVjMzM0NDEyZGQ5NTA2MGE1YTE2ZjQy
ZmY5NDgyYmUzYmQ0ZS4uZGE2Y2IxMjNlMjIzM2NlZDM4ZjA3MWNmM2ExZjk5ZWQzOTgwYTAzMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgK
QEAgLTgyLDI0ICs4MiwyNCBAQCBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsUGllY2UoSW1hZ2VQaWVj
ZSBwaWVjZSkKICAgICByZXR1cm4gcGllY2UgPT0gTGVmdFBpZWNlIHx8IHBpZWNlID09IFJpZ2h0
UGllY2UgfHwgcGllY2UgPT0gTWlkZGxlUGllY2U7CiB9CiAKLWlubGluZSBzdGQ6Om9wdGlvbmFs
PEJveFNpZGU+IGltYWdlUGllY2VIb3Jpem9udGFsU2lkZShJbWFnZVBpZWNlIHBpZWNlKQoraW5s
aW5lIHN0ZDo6b3B0aW9uYWw8UEFMOjpCb3hTaWRlPiBpbWFnZVBpZWNlSG9yaXpvbnRhbFNpZGUo
SW1hZ2VQaWVjZSBwaWVjZSkKIHsKICAgICBpZiAocGllY2UgPT0gVG9wTGVmdFBpZWNlIHx8IHBp
ZWNlID09IFRvcFBpZWNlIHx8IHBpZWNlID09IFRvcFJpZ2h0UGllY2UpCi0gICAgICAgIHJldHVy
biBCb3hTaWRlOjpUb3A7CisgICAgICAgIHJldHVybiBQQUw6OkJveFNpZGU6OlRvcDsKIAogICAg
IGlmIChwaWVjZSA9PSBCb3R0b21MZWZ0UGllY2UgfHwgcGllY2UgPT0gQm90dG9tUGllY2UgfHwg
cGllY2UgPT0gQm90dG9tUmlnaHRQaWVjZSkKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OkJvdHRv
bTsKKyAgICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6Qm90dG9tOwogCiAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIH0KIAotaW5saW5lIHN0ZDo6b3B0aW9uYWw8Qm94U2lkZT4gaW1hZ2VQaWVj
ZVZlcnRpY2FsU2lkZShJbWFnZVBpZWNlIHBpZWNlKQoraW5saW5lIHN0ZDo6b3B0aW9uYWw8UEFM
OjpCb3hTaWRlPiBpbWFnZVBpZWNlVmVydGljYWxTaWRlKEltYWdlUGllY2UgcGllY2UpCiB7CiAg
ICAgaWYgKHBpZWNlID09IFRvcExlZnRQaWVjZSB8fCBwaWVjZSA9PSBMZWZ0UGllY2UgfHwgcGll
Y2UgPT0gQm90dG9tTGVmdFBpZWNlKQotICAgICAgICByZXR1cm4gQm94U2lkZTo6TGVmdDsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6Qm94U2lkZTo6TGVmdDsKIAogICAgIGlmIChwaWVjZSA9PSBUb3BS
aWdodFBpZWNlIHx8IHBpZWNlID09IFJpZ2h0UGllY2UgfHwgcGllY2UgPT0gQm90dG9tUmlnaHRQ
aWVjZSkKLSAgICAgICAgcmV0dXJuIEJveFNpZGU6OlJpZ2h0OworICAgICAgICByZXR1cm4gUEFM
OjpCb3hTaWRlOjpSaWdodDsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA2MTcyM2I1
NTZlZDQzMDE5ODhhNGQ0OTZmYmY4YjAxMTE4ZmVmMDMxLi5mM2Y5MjcxZWI5ODA1ZTY0YzBjOTQz
MzI4YzE4OTI1MTBhOWU0OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTIyNjcsMTMgKzIyNjcsMTMgQEAgQ29sb3IgUmVuZGVyU3R5
bGU6OmVmZmVjdGl2ZUFjY2VudENvbG9yKCkgY29uc3QKIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5k
ZXJTdHlsZTo6Ym9yZGVyQmVmb3JlKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2Rl
KCkpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyVG9wKCk7Ci0g
ICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRpbmdN
b2RlOjpCb3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIGJvcmRlckJvdHRvbSgpOwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
TGVmdFRvUmlnaHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCk7Ci0gICAgY2FzZSBXcml0
aW5nTW9kZTo6UmlnaHRUb0xlZnQ6CisgICAgY2FzZSBQQUw6OldyaXRpbmdNb2RlOjpSaWdodFRv
TGVmdDoKICAgICAgICAgcmV0dXJuIGJvcmRlclJpZ2h0KCk7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjI4MywxMyArMjI4MywxMyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYg
UmVuZGVyU3R5bGU6OmJvcmRlckJlZm9yZSgpIGNvbnN0CiBjb25zdCBCb3JkZXJWYWx1ZSYgUmVu
ZGVyU3R5bGU6OmJvcmRlckFmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2Rl
KCkpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tKCk7
Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3A6CisgICAgY2FzZSBQQUw6OldyaXRp
bmdNb2RlOjpCb3R0b21Ub1RvcDoKICAgICAgICAgcmV0dXJuIGJvcmRlclRvcCgpOwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
TGVmdFRvUmlnaHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJSaWdodCgpOwotICAgIGNhc2UgV3Jp
dGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCk7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjMxMywxMyArMjMxMywxMyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYg
UmVuZGVyU3R5bGU6OmJvcmRlckVuZCgpIGNvbnN0CiBmbG9hdCBSZW5kZXJTdHlsZTo6Ym9yZGVy
QmVmb3JlV2lkdGgoKSBjb25zdAogewogICAgIHN3aXRjaCAod3JpdGluZ01vZGUoKSkgewotICAg
IGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CiAgICAgICAgIHJldHVybiBib3JkZXJUb3BXaWR0aCgpOwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wOgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
Qm90dG9tVG9Ub3A6CiAgICAgICAgIHJldHVybiBib3JkZXJCb3R0b21XaWR0aCgpOwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9kZTo6
TGVmdFRvUmlnaHQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0V2lkdGgoKTsKLSAgICBjYXNl
IFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01vZGU6OlJp
Z2h0VG9MZWZ0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHRXaWR0aCgpOwogICAgIH0KICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzMjksMTMgKzIzMjksMTMgQEAgZmxvYXQgUmVu
ZGVyU3R5bGU6OmJvcmRlckJlZm9yZVdpZHRoKCkgY29uc3QKIGZsb2F0IFJlbmRlclN0eWxlOjpi
b3JkZXJBZnRlcldpZHRoKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKCkpIHsK
LSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKKyAgICBjYXNlIFBBTDo6V3JpdGlu
Z01vZGU6OlRvcFRvQm90dG9tOgogICAgICAgICByZXR1cm4gYm9yZGVyQm90dG9tV2lkdGgoKTsK
LSAgICBjYXNlIFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcDoKKyAgICBjYXNlIFBBTDo6V3JpdGlu
Z01vZGU6OkJvdHRvbVRvVG9wOgogICAgICAgICByZXR1cm4gYm9yZGVyVG9wV2lkdGgoKTsKLSAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodDoKKyAgICBjYXNlIFBBTDo6V3JpdGluZ01v
ZGU6OkxlZnRUb1JpZ2h0OgogICAgICAgICByZXR1cm4gYm9yZGVyUmlnaHRXaWR0aCgpOwotICAg
IGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgIGNhc2UgUEFMOjpXcml0aW5nTW9k
ZTo6UmlnaHRUb0xlZnQ6CiAgICAgICAgIHJldHVybiBib3JkZXJMZWZ0V2lkdGgoKTsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNDE1LDIzICsyNDE1LDIzIEBAIExheW91
dEJveEV4dGVudCBSZW5kZXJTdHlsZTo6aW1hZ2VPdXRzZXRzKGNvbnN0IE5pbmVQaWVjZUltYWdl
JiBpbWFnZSkgY29uc3QKICAgICB9OwogfQogCi1zdGQ6OnBhaXI8Rm9udE9yaWVudGF0aW9uLCBO
b25DSktHbHlwaE9yaWVudGF0aW9uPiBSZW5kZXJTdHlsZTo6Zm9udEFuZEdseXBoT3JpZW50YXRp
b24oKQorc3RkOjpwYWlyPFBBTDo6Rm9udE9yaWVudGF0aW9uLCBQQUw6Ok5vbkNKS0dseXBoT3Jp
ZW50YXRpb24+IFJlbmRlclN0eWxlOjpmb250QW5kR2x5cGhPcmllbnRhdGlvbigpCiB7CiAgICAg
Ly8gRklYTUU6IFRleHRPcmllbnRhdGlvblNpZGV3YXlzIHNob3VsZCBtYXAgdG8gc2lkZXdheXMt
bGVmdCBpbiB2ZXJ0aWNhbC1sciwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCB5ZXQuCiAKICAgICBp
ZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHsgRm9udE9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsLCBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OworICAg
ICAgICByZXR1cm4geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgUEFMOjpOb25D
SktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OwogCiAgICAgc3dpdGNoICh0ZXh0T3JpZW50YXRp
b24oKSkgewogICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uOjpNaXhlZDoKLSAgICAgICAgcmV0dXJu
IHsgRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4
ZWQgfTsKKyAgICAgICAgcmV0dXJuIHsgUEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBQ
QUw6Ok5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkIH07CiAgICAgY2FzZSBUZXh0T3JpZW50
YXRpb246OlVwcmlnaHQ6Ci0gICAgICAgIHJldHVybiB7IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwsIE5vbkNKS0dseXBoT3JpZW50YXRpb246OlVwcmlnaHQgfTsKKyAgICAgICAgcmV0dXJuIHsg
UEFMOjpGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBQQUw6Ok5vbkNKS0dseXBoT3JpZW50YXRp
b246OlVwcmlnaHQgfTsKICAgICBjYXNlIFRleHRPcmllbnRhdGlvbjo6U2lkZXdheXM6Ci0gICAg
ICAgIHJldHVybiB7IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgTm9uQ0pLR2x5cGhPcmll
bnRhdGlvbjo6TWl4ZWQgfTsKKyAgICAgICAgcmV0dXJuIHsgUEFMOjpGb250T3JpZW50YXRpb246
Okhvcml6b250YWwsIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQgfTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsg
Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhl
ZCB9OworICAgICAgICByZXR1cm4geyBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwg
UEFMOjpOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCB9OwogICAgIH0KIH0KIApAQCAtMjcx
Nyw3ICsyNzE3LDcgQEAgZmxvYXQgUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQoKSBjb25zdAog
CiBib29sIFJlbmRlclN0eWxlOjpzaG91bGRQbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgfHwgd3JpdGluZ01vZGUoKSA9PSBXcml0aW5nTW9kZTo6Umln
aHRUb0xlZnQ7CisgICAgcmV0dXJuICghaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IHdyaXRpbmdNb2RlKCkgPT0gUEFMOjpXcml0aW5nTW9k
ZTo6UmlnaHRUb0xlZnQ7CiB9CiAKIFZlY3RvcjxQYWludFR5cGUsIDM+IFJlbmRlclN0eWxlOjpw
YWludFR5cGVzRm9yUGFpbnRPcmRlcihQYWludE9yZGVyIG9yZGVyKQpAQCAtMjgxMyw3ICsyODEz
LDcgQEAgVXNlZENsZWFyIFJlbmRlclN0eWxlOjp1c2VkQ2xlYXIoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlcikKICAgICBjYXNlIENsZWFyOjpJbmxpbmVTdGFydDoKICAgICBjYXNlIENsZWFy
OjpJbmxpbmVFbmQ6CiAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID0gcmVu
ZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlm
IChjb250YWluaW5nQmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAg
ICBpZiAoY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRM
KQogICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0
ID8gVXNlZENsZWFyOjpSaWdodCA6IFVzZWRDbGVhcjo6TGVmdDsKICAgICAgICAgcmV0dXJuIGNv
bXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENsZWFyOjpMZWZ0IDogVXNl
ZENsZWFyOjpSaWdodDsKICAgICB9CkBAIC0yODM0LDcgKzI4MzQsNyBAQCBVc2VkRmxvYXQgUmVu
ZGVyU3R5bGU6OnVzZWRGbG9hdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIGNh
c2UgRmxvYXQ6OklubGluZVN0YXJ0OgogICAgIGNhc2UgRmxvYXQ6OklubGluZUVuZDoKICAgICAg
ICAgYXV0byBjb250YWluaW5nQmxvY2tEaXJlY3Rpb24gPSByZW5kZXJlci5jb250YWluaW5nQmxv
Y2soKS0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0Rp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChjb250YWluaW5nQmxv
Y2tEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1
cm4gY29tcHV0ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6OlJpZ2h0
IDogVXNlZEZsb2F0OjpMZWZ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9PSBGbG9h
dDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6OkxlZnQgOiBVc2VkRmxvYXQ6OlJpZ2h0OwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXgg
NTYyYWNjNWVkYjEzZjUxZjYyZjNlZWIwMmNmNjRhYWUxNGIyOGIyOS4uZTdmZWNmMzY3YTUwNzhh
NDZjMjE3OWZlNDc4OTQ4MGIyMTExZDlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTY1LDEzICs2NSwxMyBAQAogI2luY2x1ZGUgIlN0eWxl
U3Vycm91bmREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVUcmFuc2Zvcm1EYXRhLmgiCiAjaW5jbHVk
ZSAiU3R5bGVWaXN1YWxEYXRhLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8
cGFsL3RleHQvVGV4dEZsYWdzLmg+CiAjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUg
IlRvdWNoQWN0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRp
LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuaWNvZGVCaWRpLmg+
CiAjaW5jbHVkZSA8d3RmL0RhdGFSZWYuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMzQ4LDcgKzM0OCw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBMZW5ndGhCb3gmIGNsaXAoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbERhdGEt
PmNsaXA7IH0KICAgICBib29sIGhhc0NsaXAoKSBjb25zdCB7IHJldHVybiBtX3Zpc3VhbERhdGEt
Pmhhc0NsaXA7IH0KIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEVVbmljb2RlQmlkaT4obV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2Rl
QmlkaSk7IH0KKyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFBBTDo6RVVuaWNvZGVCaWRpPihtX25vbkluaGVyaXRlZEZsYWdzLnVu
aWNvZGVCaWRpKTsgfQogCiAgICAgQ2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxDbGVhcj4obV9ub25Jbmhlcml0ZWRGbGFncy5jbGVhcik7IH0KICAgICBzdGF0aWMgVXNl
ZENsZWFyIHVzZWRDbGVhcihjb25zdCBSZW5kZXJPYmplY3QmKTsKQEAgLTM2MCw3ICszNjAsNyBA
QCBwdWJsaWM6CiAgICAgZmxvYXQgc3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKICAgICBmbG9h
dCBjb21wdXRlZEZvbnRTaXplKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY29tcHV0ZWRGb250UGl4
ZWxTaXplKCkgY29uc3Q7Ci0gICAgc3RkOjpwYWlyPEZvbnRPcmllbnRhdGlvbiwgTm9uQ0pLR2x5
cGhPcmllbnRhdGlvbj4gZm9udEFuZEdseXBoT3JpZW50YXRpb24oKTsKKyAgICBzdGQ6OnBhaXI8
UEFMOjpGb250T3JpZW50YXRpb24sIFBBTDo6Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4gZm9udEFu
ZEdseXBoT3JpZW50YXRpb24oKTsKIAogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBmb250VmFy
aWF0aW9uU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS52YXJpYXRp
b25TZXR0aW5ncygpOyB9CiAgICAgRm9udFNlbGVjdGlvblZhbHVlIGZvbnRXZWlnaHQoKSBjb25z
dCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKTsgfQpAQCAtMzk0LDggKzM5NCw4
IEBAIHB1YmxpYzoKICAgICAKICAgICBUZXh0Wm9vbSB0ZXh0Wm9vbSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHRab29tPihtX3JhcmVJbmhlcml0ZWREYXRhLT50ZXh0Wm9vbSk7IH0K
IAotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dERpcmVjdGlvbj4obV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24pOyB9Ci0gICAgYm9v
bCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0g
VGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9pbmhlcml0
ZWRGbGFncy5kaXJlY3Rpb24pOyB9CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0K
ICAgICBib29sIGhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX25v
bkluaGVyaXRlZEZsYWdzLmhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb247IH0KIAogICAgIGNvbnN0
IExlbmd0aCYgc3BlY2lmaWVkTGluZUhlaWdodCgpIGNvbnN0OwpAQCAtNzkyLDExICs3OTIsMTEg
QEAgcHVibGljOgogICAgIFRleHRTZWN1cml0eSB0ZXh0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0U2VjdXJpdHk+KG1fcmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1
cml0eSk7IH0KICAgICBJbnB1dFNlY3VyaXR5IGlucHV0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxJbnB1dFNlY3VyaXR5PihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5pbnB1
dFNlY3VyaXR5KTsgfQogCi0gICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxXcml0aW5nTW9kZT4obV9pbmhlcml0ZWRGbGFncy53cml0aW5nTW9k
ZSk7IH0KLSAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
V2ViQ29yZTo6aXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KLSAgICBi
b29sIGlzVmVydGljYWxXcml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzVmVy
dGljYWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQotICAgIGJvb2wgaXNGbGlwcGVkTGlu
ZXNXcml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KLSAgICBib29sIGlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6aXNGbGlwcGVkV3JpdGluZ01vZGUod3Jp
dGluZ01vZGUoKSk7IH0KKyAgICBQQUw6OldyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpXcml0aW5nTW9kZT4obV9pbmhlcml0ZWRGbGFncy53
cml0aW5nTW9kZSk7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gUEFMOjppc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSgpKTsgfQor
ICAgIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUEFMOjppc1Zl
cnRpY2FsV3JpdGluZ01vZGUod3JpdGluZ01vZGUoKSk7IH0KKyAgICBib29sIGlzRmxpcHBlZExp
bmVzV3JpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBQQUw6OmlzRmxpcHBlZExpbmVzV3JpdGlu
Z01vZGUod3JpdGluZ01vZGUoKSk7IH0KKyAgICBib29sIGlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkgY29uc3QgeyByZXR1cm4gUEFMOjppc0ZsaXBwZWRXcml0aW5nTW9kZSh3cml0aW5nTW9k
ZSgpKTsgfQogCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBpbWFnZU9yaWVudGF0aW9uKCkgY29uc3Q7
CiAKQEAgLTk2Nyw3ICs5NjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwKExlbmd0aCYm
IHRvcCwgTGVuZ3RoJiYgcmlnaHQsIExlbmd0aCYmIGJvdHRvbSwgTGVuZ3RoJiYgbGVmdCk7CiAg
ICAgdm9pZCBzZXRDbGlwKExlbmd0aEJveCYmIGJveCkgeyBTRVRfVkFSKG1fdmlzdWFsRGF0YSwg
Y2xpcCwgV1RGTW92ZShib3gpKTsgfQogCi0gICAgdm9pZCBzZXRVbmljb2RlQmlkaShFVW5pY29k
ZUJpZGkgdikgeyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRpID0gdjsgfQorICAgIHZv
aWQgc2V0VW5pY29kZUJpZGkoUEFMOjpFVW5pY29kZUJpZGkgdikgeyBtX25vbkluaGVyaXRlZEZs
YWdzLnVuaWNvZGVCaWRpID0gdjsgfQogCiAgICAgdm9pZCBzZXRDbGVhcihDbGVhciB2KSB7IG1f
bm9uSW5oZXJpdGVkRmxhZ3MuY2xlYXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KICAg
ICB2b2lkIHNldFRhYmxlTGF5b3V0KFRhYmxlTGF5b3V0VHlwZSB2KSB7IG1fbm9uSW5oZXJpdGVk
RmxhZ3MudGFibGVMYXlvdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KQEAgLTk5NSw3
ICs5OTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oVGV4
dFVuZGVybGluZVBvc2l0aW9uIHBvc2l0aW9uKSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0
YSwgdGV4dFVuZGVybGluZVBvc2l0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24p
KTsgfQogICAgIHZvaWQgc2V0VGV4dFVuZGVybGluZU9mZnNldChUZXh0VW5kZXJsaW5lT2Zmc2V0
IHRleHRVbmRlcmxpbmVPZmZzZXQpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0
VW5kZXJsaW5lT2Zmc2V0LCB0ZXh0VW5kZXJsaW5lT2Zmc2V0KTsgfQogICAgIHZvaWQgc2V0VGV4
dERlY29yYXRpb25UaGlja25lc3MoVGV4dERlY29yYXRpb25UaGlja25lc3MgdGV4dERlY29yYXRp
b25UaGlja25lc3MpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RGVjb3JhdGlv
blRoaWNrbmVzcywgdGV4dERlY29yYXRpb25UaGlja25lc3MpOyB9Ci0gICAgdm9pZCBzZXREaXJl
Y3Rpb24oVGV4dERpcmVjdGlvbiB2KSB7IG1faW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHYpOyB9CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0
RGlyZWN0aW9uIHYpIHsgbV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odik7IH0KICAgICB2b2lkIHNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oYm9v
bCB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldERpcmVjdGlvbiA9IHY7
IH0KICAgICB2b2lkIHNldExpbmVIZWlnaHQoTGVuZ3RoJiYpOwogICAgIGJvb2wgc2V0Wm9vbShm
bG9hdCk7CkBAIC0xNTIwLDcgKzE1MjAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rpc3BsYXlU
YWJsZU9yVGFibGVQYXJ0KCkgY29uc3QgeyByZXR1cm4gaXNEaXNwbGF5VGFibGVPclRhYmxlUGFy
dChkaXNwbGF5KCkpOyB9CiAgICAgYm9vbCBpc09yaWdpbmFsRGlzcGxheUxpc3RJdGVtVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGlzRGlzcGxheUxpc3RJdGVtVHlwZShvcmlnaW5hbERpc3BsYXkoKSk7
IH0KIAotICAgIGJvb2wgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUpOworICAgIGJvb2wgc2V0
V3JpdGluZ01vZGUoUEFMOjpXcml0aW5nTW9kZSk7CiAKICAgICBib29sIGhhc0V4cGxpY2l0bHlT
ZXRXcml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhw
bGljaXRseVNldFdyaXRpbmdNb2RlOyB9CiAgICAgdm9pZCBzZXRIYXNFeHBsaWNpdGx5U2V0V3Jp
dGluZ01vZGUoYm9vbCB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldFdy
aXRpbmdNb2RlID0gdjsgfQpAQCAtMTU2Miw3ICsxNTYyLDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIENsZWFyIGluaXRpYWxDbGVhcigpIHsgcmV0dXJuIENsZWFyOjpOb25lOyB9CiAgICAgc3Rh
dGljIERpc3BsYXlUeXBlIGluaXRpYWxEaXNwbGF5KCkgeyByZXR1cm4gRGlzcGxheVR5cGU6Oklu
bGluZTsgfQotICAgIHN0YXRpYyBFVW5pY29kZUJpZGkgaW5pdGlhbFVuaWNvZGVCaWRpKCkgeyBy
ZXR1cm4gVUJOb3JtYWw7IH0KKyAgICBzdGF0aWMgUEFMOjpFVW5pY29kZUJpZGkgaW5pdGlhbFVu
aWNvZGVCaWRpKCkgeyByZXR1cm4gUEFMOjpVQk5vcm1hbDsgfQogICAgIHN0YXRpYyBQb3NpdGlv
blR5cGUgaW5pdGlhbFBvc2l0aW9uKCkgeyByZXR1cm4gUG9zaXRpb25UeXBlOjpTdGF0aWM7IH0K
ICAgICBzdGF0aWMgVmVydGljYWxBbGlnbiBpbml0aWFsVmVydGljYWxBbGlnbigpIHsgcmV0dXJu
IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOyB9CiAgICAgc3RhdGljIEZsb2F0IGluaXRpYWxGbG9h
dGluZygpIHsgcmV0dXJuIEZsb2F0OjpOb25lOyB9CkBAIC0xNTc4LDggKzE1NzgsOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIENhcHRpb25TaWRlIGluaXRpYWxDYXB0aW9uU2lkZSgpIHsgcmV0dXJu
IENhcHRpb25TaWRlOjpUb3A7IH0KICAgICBzdGF0aWMgQ29sdW1uQXhpcyBpbml0aWFsQ29sdW1u
QXhpcygpIHsgcmV0dXJuIENvbHVtbkF4aXM6OkF1dG87IH0KICAgICBzdGF0aWMgQ29sdW1uUHJv
Z3Jlc3Npb24gaW5pdGlhbENvbHVtblByb2dyZXNzaW9uKCkgeyByZXR1cm4gQ29sdW1uUHJvZ3Jl
c3Npb246Ok5vcm1hbDsgfQotICAgIHN0YXRpYyBUZXh0RGlyZWN0aW9uIGluaXRpYWxEaXJlY3Rp
b24oKSB7IHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBzdGF0aWMgV3JpdGluZ01v
ZGUgaW5pdGlhbFdyaXRpbmdNb2RlKCkgeyByZXR1cm4gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9t
OyB9CisgICAgc3RhdGljIFBBTDo6VGV4dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0aW9uKCkgeyBy
ZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBzdGF0aWMgUEFMOjpXcml0aW5n
TW9kZSBpbml0aWFsV3JpdGluZ01vZGUoKSB7IHJldHVybiBQQUw6OldyaXRpbmdNb2RlOjpUb3BU
b0JvdHRvbTsgfQogICAgIHN0YXRpYyBUZXh0Q29tYmluZSBpbml0aWFsVGV4dENvbWJpbmUoKSB7
IHJldHVybiBUZXh0Q29tYmluZTo6Tm9uZTsgfQogICAgIHN0YXRpYyBUZXh0T3JpZW50YXRpb24g
aW5pdGlhbFRleHRPcmllbnRhdGlvbigpIHsgcmV0dXJuIFRleHRPcmllbnRhdGlvbjo6TWl4ZWQ7
IH0KICAgICBzdGF0aWMgT2JqZWN0Rml0IGluaXRpYWxPYmplY3RGaXQoKSB7IHJldHVybiBPYmpl
Y3RGaXQ6OkZpbGw7IH0KQEAgLTE5MjYsNyArMTkyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVu
c2lnbmVkIHZlcnRpY2FsQWxpZ24gOiA0OyAvLyBWZXJ0aWNhbEFsaWduCiAgICAgICAgIHVuc2ln
bmVkIGNsZWFyIDogMzsgLy8gQ2xlYXIKICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gOiAzOyAv
LyBQb3NpdGlvblR5cGUKLSAgICAgICAgdW5zaWduZWQgdW5pY29kZUJpZGkgOiAzOyAvLyBFVW5p
Y29kZUJpZGkKKyAgICAgICAgdW5zaWduZWQgdW5pY29kZUJpZGkgOiAzOyAvLyBQQUw6OkVVbmlj
b2RlQmlkaQogICAgICAgICB1bnNpZ25lZCBmbG9hdGluZyA6IDM7IC8vIEZsb2F0CiAgICAgICAg
IHVuc2lnbmVkIHRhYmxlTGF5b3V0IDogMTsgLy8gVGFibGVMYXlvdXRUeXBlCiAKQEAgLTIzNzks
NyArMjM3OSw3IEBAIGlubGluZSBib29sIFJlbmRlclN0eWxlOjppc0Rpc3BsYXlSZWdpb25UeXBl
KCkgY29uc3QKICAgICAgICAgfHwgZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpMaXN0SXRlbTsK
IH0KIAotaW5saW5lIGJvb2wgUmVuZGVyU3R5bGU6OnNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2Rl
IHYpCitpbmxpbmUgYm9vbCBSZW5kZXJTdHlsZTo6c2V0V3JpdGluZ01vZGUoUEFMOjpXcml0aW5n
TW9kZSB2KQogewogICAgIGlmICh2ID09IHdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCmluZGV4IDlhMzliZDFiNGUzZmNlZDdjMTkzMzFhYzc4MTI0OTRhZjIzMTk3
MjUuLjQzYmNkY2QzZjE5N2FhNTViOTJhYzc5NjQzZmJhNjNjOGFjOTAyZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApA
QCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1Nj
YWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlCiB7CiAgICAgLy8gQWx0
ZXIgZm9udC1zaXplIHRvIHRoZSByaWdodCBvbi1zY3JlZW4gdmFsdWUgdG8gYXZvaWQgc2NhbGlu
ZyB0aGUgZ2x5cGhzIHRoZW1zZWx2ZXMsIGV4Y2VwdCB3aGVuIEdlb21ldHJpY1ByZWNpc2lvbiBp
cyBzcGVjaWZpZWQKICAgICBzY2FsaW5nRmFjdG9yID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2Fs
Y3VsYXRlU2NyZWVuRm9udFNpemVTY2FsaW5nRmFjdG9yKHJlbmRlcmVyKTsKLSAgICBpZiAoIXNj
YWxpbmdGYWN0b3IgfHwgc3R5bGUuZm9udERlc2NyaXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUo
KSA9PSBUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uKSB7CisgICAgaWYgKCFz
Y2FsaW5nRmFjdG9yIHx8IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLnRleHRSZW5kZXJpbmdNb2Rl
KCkgPT0gUEFMOjpUZXh0UmVuZGVyaW5nTW9kZTo6R2VvbWV0cmljUHJlY2lzaW9uKSB7CiAgICAg
ICAgIHNjYWxpbmdGYWN0b3IgPSAxOwogICAgICAgICBzY2FsZWRGb250ID0gc3R5bGUuZm9udENh
c2NhZGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjIyLDggKzIyMiw4IEBAIHZvaWQgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlCiAKICAgICAvLyBTVkcgY29udHJvbHMgaXRzIG93biBnbHlwaCBvcmllbnRh
dGlvbiwgc28gZG9uJ3QgYWxsb3cgd3JpdGluZy1tb2RlCiAgICAgLy8gdG8gYWZmZWN0IGl0Lgot
ICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSAhPSBGb250T3JpZW50YXRpb246
Okhvcml6b250YWwpCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihGb250
T3JpZW50YXRpb246Okhvcml6b250YWwpOworICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSAhPSBQQUw6OkZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKFBBTDo6Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9u
dGFsKTsKIAogICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbiksIDAsIDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVudCgp
LmZvbnRTZWxlY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCmluZGV4IDhmNTIzNjBjYTZhMWNmNmE5ZDJmM2M3ZDc5NTNkZWFi
NGJkMmNkZjUuLmI0YzlhZTdjYzg0NWY5ZWEyOGFhYmZmYmM4ODczNWFkMGVkNTNkOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApA
QCAtMzg0LDcgKzM4NCw3IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4
dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNWR1RlCiAgICAgVGV4dFJ1biBy
dW4oU3RyaW5nVmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKGZyYWdtZW50LmNoYXJh
Y3Rlck9mZnNldCwgZnJhZ21lbnQubGVuZ3RoKQogICAgICAgICAgICAgICAgICwgMCAvKiB4UG9z
LCBvbmx5IHJlbGV2YW50IHdpdGggYWxsb3dUYWJzPXRydWUgKi8KICAgICAgICAgICAgICAgICAs
IDAgLyogcGFkZGluZywgb25seSByZWxldmFudCBmb3IganVzdGlmaWVkIHRleHQsIG5vdCByZWxl
dmFudCBmb3IgU1ZHICovCi0gICAgICAgICAgICAgICAgLCBBbGxvd1JpZ2h0RXhwYW5zaW9uCisg
ICAgICAgICAgICAgICAgLCBQQUw6OkFsbG93UmlnaHRFeHBhbnNpb24KICAgICAgICAgICAgICAg
ICAsIGRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5ydGxPcmRlcmluZygpID09
IE9yZGVyOjpWaXN1YWwgLyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKaW5kZXggMzkwOTFlZjhh
ZjNkOWIzMDQ4ZGM3YjJiMmNmNDgyMTE5OTY1ZmM1Yi4uN2I1ODc4NTdjNTE5NzNkZjViYjBhMzM4
ZGRjY2ZhNjk3ZDQzNDIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljcy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgVGV4dFJ1biBTVkdUZXh0TWV0cmlj
czo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTVkdJbmxpbmVUZXh0JiB0ZXh0LCB1bnNpZ25lZCBw
b3MKICAgICBUZXh0UnVuIHJ1bihTdHJpbmdWaWV3KHRleHQudGV4dCgpKS5zdWJzdHJpbmcocG9z
aXRpb24sIGxlbmd0aCkKICAgICAgICAgICAgICAgICAsIDAgLyogeFBvcywgb25seSByZWxldmFu
dCB3aXRoIGFsbG93VGFicz10cnVlICovCiAgICAgICAgICAgICAgICAgLCAwIC8qIHBhZGRpbmcs
IG9ubHkgcmVsZXZhbnQgZm9yIGp1c3RpZmllZCB0ZXh0LCBub3QgcmVsZXZhbnQgZm9yIFNWRyAq
LwotICAgICAgICAgICAgICAgICwgQWxsb3dSaWdodEV4cGFuc2lvbgorICAgICAgICAgICAgICAg
ICwgUEFMOjpBbGxvd1JpZ2h0RXhwYW5zaW9uCiAgICAgICAgICAgICAgICAgLCBzdHlsZS5kaXJl
Y3Rpb24oKQogICAgICAgICAgICAgICAgICwgaXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgp
KSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICovKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGZlZmE0ODVjYWZiZjRiYmM4NGJlOTVmNDU5
YTc5OWUyNzY4ZDY1ZjUuLjczNmIyMGRhNDUyNTc5MTIwY2U3YzJiMGQxYzI1NjQ5NzA5NjA1YjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAg
LTU0MSw3ICs1NDEsNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVz
KGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzLCBib29sIGluYwogICAgICAgICBpZiAoaXM8
SFRNTEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsK
ICAgICAgICAgICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihz
dHlsZWRFbGVtZW50KS5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8p
OwotICAgICAgICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6TFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNs
YXJhdGlvbigpOworICAgICAgICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24g
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiBy
aWdodFRvTGVmdERlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAg
ICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRp
b25PcmlnaW46OkF1dGhvcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VS
dWxlQ29sbGVjdG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFh
MTY4OWI0Li4yOGIyYzQ3ODgxOTU4OTNmNDY2YzIwNmRkMTRjZTVlNGM3N2Q0YjAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC00Myw3ICs0Myw3IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2Uq
IHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlCiAKIGJvb2wgUGFnZVJ1bGVDb2xsZWN0b3I6OmlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKLSAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9
IG1fcm9vdERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc0ZpcnN0
UGFnZUxlZnQgPSBtX3Jvb3REaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAg
ICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oCmluZGV4IGU0NTJjNzQ0
YTYwNGI0ZTI3NDExN2Y1NmE3ZGM5MTAxNmY3YjhlNjUuLjVlNGNmMGI1ZDBjOTBmNTVmM2E0MGVh
ODE5MDViZjdiZDhmY2Y2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VS
dWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0
b3IuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgU3R5bGUgewogCiBjbGFzcyBQYWdlUnVs
ZUNvbGxlY3RvciB7CiBwdWJsaWM6Ci0gICAgUGFnZVJ1bGVDb2xsZWN0b3IoU2NvcGVSdWxlU2V0
cyYgcnVsZVNldHMsIFRleHREaXJlY3Rpb24gcm9vdERpcmVjdGlvbikKKyAgICBQYWdlUnVsZUNv
bGxlY3RvcihTY29wZVJ1bGVTZXRzJiBydWxlU2V0cywgUEFMOjpUZXh0RGlyZWN0aW9uIHJvb3RE
aXJlY3Rpb24pCiAgICAgICAgIDogbV9ydWxlU2V0cyhydWxlU2V0cykKICAgICAgICAgLCBtX3Jv
b3REaXJlY3Rpb24ocm9vdERpcmVjdGlvbikKICAgICB7IH0KQEAgLTUxLDcgKzUxLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFn
ZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBi
b29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUp
OwogCiAgICAgU2NvcGVSdWxlU2V0cyYgbV9ydWxlU2V0czsKLSAgICBUZXh0RGlyZWN0aW9uIG1f
cm9vdERpcmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gbV9yb290RGlyZWN0aW9uOwog
CiAgICAgTWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0
eUNhc2NhZGUuaAppbmRleCA1MWQyMTc2MWM3NTAzM2NhMzM2YzY3ZmE4OTk1ODdhYTAyNjU5NWRm
Li40MzY1ZDM5YTBmZDM1ZTdiMzA0Mzc1NDI5NjE3MjM2OWJmNjk3YmIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAtNDIsOCArNDIsOCBAQCBwdWJsaWM6CiAgICAg
ZW51bSBJbmNsdWRlZFByb3BlcnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKIAogICAgIHN0
cnVjdCBEaXJlY3Rpb24gewotICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247Ci0g
ICAgICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlOworICAgICAgICBQQUw6OlRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbjsKKyAgICAgICAgUEFMOjpXcml0aW5nTW9kZSB3cml0aW5nTW9kZTsK
ICAgICB9OwogCiAgICAgUHJvcGVydHlDYXNjYWRlKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2Fk
ZUxldmVsLCBJbmNsdWRlZFByb3BlcnRpZXMsIERpcmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDNjNTMyZTg0NDAwNmEwNTk1YTQ0MTU3OTc4YmUyNzk1
MzMzMmE3ZmEuLjE3NDI5NGMzM2Q4NWFkZjYwNjNkODE5YzFjMmZmNjgzMGFlNWI1MTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC0zNDQsMTAgKzM0NCwxMCBAQCB2
b2lkIEFkanVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSogdXNlckFnZW50QXBwZWFyYW5jZQogICAgICAgICAgICAgc3R5bGUuc2V0V3JpdGluZ01vZGUo
bV9wYXJlbnRTdHlsZS53cml0aW5nTW9kZSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2luY2Ug
d2UgZG9uJ3Qgc3VwcG9ydCBibG9jay1mbG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxs
b3cgc2V0dGluZwotICAgICAgICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRo
YW4gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tLgorICAgICAgICAvLyBvZiBibG9jay1mbG93IHRv
IGFueXRoaW5nIG90aGVyIHRoYW4gUEFMOjpXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20uCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOCAtIEZs
ZXhpYmxlIGJveCBzdXBwb3J0LgotICAgICAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBX
cml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gJiYgKHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlw
ZTo6Qm94IHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lQm94KSkKLSAg
ICAgICAgICAgIHN0eWxlLnNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSk7
CisgICAgICAgIGlmIChzdHlsZS53cml0aW5nTW9kZSgpICE9IFBBTDo6V3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tICYmIChzdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OklubGluZUJveCkpCisgICAgICAgICAgICBzdHls
ZS5zZXRXcml0aW5nTW9kZShQQUw6OldyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSk7CiAKICAgICAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1kaXNwbGF5LyN0cmFuc2Zvcm1hdGlvbnMK
ICAgICAgICAgLy8gIkEgcGFyZW50IHdpdGggYSBncmlkIG9yIGZsZXggZGlzcGxheSB2YWx1ZSBi
bG9ja2lmaWVzIHRoZSBib3jigJlzIGRpc3BsYXkgdHlwZS4iCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDA4Zjc5MDQ0NTNhOGEwYTY5YzU4MTJm
N2Q2NDMzNzRlYjlmMjQ1YmEuLmFmOWUwYjYyMmY1YTMwZDY1NTE0MDRkZWZkNDQ5MGQ5ZGFjYzBk
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBA
IC0xNTQsNyArMTU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNv
bnZlcnRHbHlwaE9yaWVudGF0aW9uKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAg
ICAgc3RhdGljIEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb25PckF1dG8o
QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxMZW5ndGg+IGNvbnZlcnRMaW5lSGVpZ2h0KEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
JiwgZmxvYXQgbXVsdGlwbGllciA9IDEuZik7Ci0gICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29u
dmVydEZvbnRTeW50aGVzaXMoQnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgUEFMOjpGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKEJ1aWxkZXJTdGF0
ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIEZvbnRQYWxldHRlIGNvbnZlcnRGb250
UGFsZXR0ZShCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIAogICAgIHN0YXRp
YyBCcmVha0JldHdlZW4gY29udmVydFBhZ2VCcmVha0JldHdlZW4oQnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmKTsKQEAgLTE1NjQsMjUgKzE1NjQsMjUgQEAgaW5saW5lIHN0ZDo6b3B0aW9u
YWw8TGVuZ3RoPiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChCdWlsZGVyU3Rh
dGUmIGIKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1pbmxpbmUgRm9udFN5bnRoZXNp
cyBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN5bnRoZXNpcyhCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUEFMOjpGb250U3ludGhlc2lzIEJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRGb250U3ludGhlc2lzKEJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewog
ICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgcmV0dXJuIEZvbnRTeW50aGVzaXNOb25lOwor
ICAgICAgICByZXR1cm4gUEFMOjpGb250U3ludGhlc2lzTm9uZTsKICAgICB9CiAKLSAgICBGb250
U3ludGhlc2lzIHJlc3VsdCA9IEZvbnRTeW50aGVzaXNOb25lOworICAgIFBBTDo6Rm9udFN5bnRo
ZXNpcyByZXN1bHQgPSBQQUw6OkZvbnRTeW50aGVzaXNOb25lOwogICAgIEFTU0VSVChpczxDU1NW
YWx1ZUxpc3Q+KHZhbHVlKSk7CiAgICAgZm9yIChjb25zdCBDU1NWYWx1ZSYgdiA6IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHYpLnZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlV2VpZ2h0
OgotICAgICAgICAgICAgcmVzdWx0IHw9IEZvbnRTeW50aGVzaXNXZWlnaHQ7CisgICAgICAgICAg
ICByZXN1bHQgfD0gUEFMOjpGb250U3ludGhlc2lzV2VpZ2h0OwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVTdHlsZToKLSAgICAgICAgICAgIHJlc3VsdCB8PSBGb250
U3ludGhlc2lzU3R5bGU7CisgICAgICAgICAgICByZXN1bHQgfD0gUEFMOjpGb250U3ludGhlc2lz
U3R5bGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2Fw
czoKLSAgICAgICAgICAgIHJlc3VsdCB8PSBGb250U3ludGhlc2lzU21hbGxDYXBzOworICAgICAg
ICAgICAgcmVzdWx0IHw9IFBBTDo6Rm9udFN5bnRoZXNpc1NtYWxsQ2FwczsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDllZTNh
NDI3Nzg3MzJjNWVhM2RiNWNiNWI2NGMwM2EyMjRmOWYxYzkuLjhhNWVjYWFiZjZhNDg3MTBiMmQ3
ZjAwNmYxNmVlYzg5OWEzODg2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCkBAIC0xNjI5LDEwICsxNjI5LDEwIEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKEJ1aWxkZXJTdGF0ZSYgYnVpbGRl
CiBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0
dXJlcyhCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBhdXRvIGZvbnREZXNjcmlw
dGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudENvbW1vbkxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFs
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMo
Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRD
b21tb25MaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoUEFMOjpGb250
VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dEhpc3RvcmljYWxMaWdhdHVyZXMoUEFMOjpGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKFBBTDo6
Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCk7CiAgICAgYnVpbGRlclN0YXRlLnNldEZvbnRE
ZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCkBAIC0xNjYxLDExICsx
NjYxLDExIEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJp
YW50TnVtZXJpYyhCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTCiBpbmxpbmUgdm9pZCBCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudE51bWVyaWMoQnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUpCiB7CiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERl
c2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJl
KEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1h
bCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZh
cmlhbnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnROdW1lcmljT3JkaW5hbChGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZvbnRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50TnVtZXJpY0ZpZ3VyZShQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFs
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKFBBTDo6Rm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudE51bWVyaWNGcmFjdGlvbihQQUw6OkZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpO
b3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwoUEFM
OjpGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKFBBTDo6Rm9udFZhcmlhbnROdW1lcmljU2xh
c2hlZFplcm86Ok5vcm1hbCk7CiAgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCkBAIC0xNjkzLDkgKzE2OTMsOSBAQCBpbmxp
bmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudEVhc3RBc2lhbihC
dWlsZGVyU3RhdGUmIGJ1aWxkZQogaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRm9udFZhcmlhbnRFYXN0QXNpYW4oQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudEVhc3RBc2lhbldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCk7Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KEZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQoUEFMOjpGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aChQQUw6OkZvbnRWYXJp
YW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRFYXN0QXNpYW5SdWJ5KFBBTDo6Rm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpOwog
ICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRp
b24pKTsKIH0KIApAQCAtMTc5MSw3ICsxNzkxLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUZvbnRTdHlsZShCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmEK
ICAgICBhdXRvJiBmb250U3R5bGVWYWx1ZSA9IGRvd25jYXN0PENTU0ZvbnRTdHlsZVZhbHVlPih2
YWx1ZSk7CiAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlKGZvbnRTdHlsZVZhbHVlKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoZm9udFN0eWxlVmFsdWUuZm9udFN0eWxlVmFsdWUt
PnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUl0YWxpYyA/IEZvbnRTdHlsZUF4aXM6Oml0YWwgOiBGb250
U3R5bGVBeGlzOjpzbG50KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhm
b250U3R5bGVWYWx1ZS5mb250U3R5bGVWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSXRhbGlj
ID8gUEFMOjpGb250U3R5bGVBeGlzOjppdGFsIDogUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KTsK
ICAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0
aW9uKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
clN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcApp
bmRleCBjYmUzZTVkMjU4YWUxNzU4ZTAyNGZlMDc2YWJiMDhhNDMwMGFmMjk5Li42MzYxZGExMjA3
NjQxMmNmOGFlYzI1ZjBkNTk4YWEzNmE2MmZhNzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBCdWlsZGVyU3Rh
dGU6OmFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCkKIAogICAgIG1fc3R5bGUuc2V0
VGV4dEFsaWduKFRleHRBbGlnbk1vZGU6OkNlbnRlcik7CiAgICAgaWYgKG1fc3R5bGUuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgbV9zdHlsZS5zZXRXcml0aW5nTW9kZShXcml0
aW5nTW9kZTo6TGVmdFRvUmlnaHQpOworICAgICAgICBtX3N0eWxlLnNldFdyaXRpbmdNb2RlKFBB
TDo6V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0KTsKIH0KIAogdm9pZCBCdWlsZGVyU3RhdGU6OnVw
ZGF0ZUZvbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVy
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKaW5kZXgg
YzUxZjJhZWFkNDdhYTRiNmRjYzk5ZTEwNzYwMzVjNDY3OWIyYTM3MC4uMTFiOGFjMmFmNDY0ZTQ4
NzcwNGE2MjM2YTRjMGUxNTY5NDNiMjZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1
aWxkZXJTdGF0ZS5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZvbnRT
aXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKICAgICB2b2lkIHNldFpv
b20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFpvb20oZik7IH0KICAgICB2
b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNl
dEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUod3Jp
dGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShQQUw6OldyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUod3JpdGlu
Z01vZGUpOyB9CiAgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRl
eHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFRleHRPcmllbnRhdGlv
bih0ZXh0T3JpZW50YXRpb24pOyB9CiAKICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERpcnR5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHAKaW5kZXggMzMxODliZDY0Y2FjYmVkZjkzNjhkMzRmYTlmYjU2NGQ1
OGJkMWYzNi4uODY2NWEzYWZmMzlkZmNmMGY2ZjdiZGNiOGNhMGFlM2YzOTkxZWFlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcApAQCAt
MTExLDcgKzExMSw3IEBAIFJlbmRlclN0eWxlIHJlc29sdmVGb3JEb2N1bWVudChjb25zdCBEb2N1
bWVudCYgZG9jdW1lbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZExvY2FsZShk
b2N1bWVudC5jb250ZW50TGFuZ3VhZ2UoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRl
cmluZ01vZGUoc2V0dGluZ3MuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzLnNob3VsZEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHM6Ok5vKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3Muc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMo
KSA/IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IFBBTDo6QWxsb3dVc2VySW5z
dGFsbGVkRm9udHM6Ok5vKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZy
b21JZGVudGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKICAgICBpbnQgc2l6ZSA9IGZvbnRTaXplRm9y
S2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAKaW5kZXggNDI3ZGQ4ODU0OGJl
ZjY0ZjYyYzZlOWZmY2JiYjE5MjEyNzUxZjQwOS4uMDcyMTcxZGVkZDcwNzNhODc3ZDJhMzc2MGQ1
ZTc5M2NlYmQ5YjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNv
bHZlRm9yRm9udFJhdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
Rm9yRm9udFJhdy5jcHAKQEAgLTEyNiwzMCArMTI2LDMwIEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0Rm9udFN0eWxlQXhpcygoZm9udFJhdy5zdHlsZSAmJiBmb250UmF3LnN0eWxlLT5z
dHlsZSA9PSBDU1NWYWx1ZUl0YWxpYykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxl
QXhpczo6c2xudCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoKGZvbnRS
YXcuc3R5bGUgJiYgZm9udFJhdy5zdHlsZS0+c3R5bGUgPT0gQ1NTVmFsdWVJdGFsaWMpID8gUEFM
OjpGb250U3R5bGVBeGlzOjppdGFsIDogUEFMOjpGb250U3R5bGVBeGlzOjpzbG50KTsKIAogICAg
IGlmIChmb250UmF3LnZhcmlhbnRDYXBzKSB7CiAgICAgICAgIHN3aXRjaCAoKmZvbnRSYXcudmFy
aWFudENhcHMpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6Ok5vcm1hbCk7Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFu
dENhcHM6Ok5vcm1hbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1
ZVNtYWxsQ2FwczoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhG
b250VmFyaWFudENhcHM6OlNtYWxsKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50Q2FwcyhQQUw6OkZvbnRWYXJpYW50Q2Fwczo6U21hbGwpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxTbWFsbENhcHM6Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCk7Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFu
dENhcHM6OkFsbFNtYWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Zh
bHVlUGV0aXRlQ2FwczoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2Fw
cyhGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6Ci0gICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRp
dGUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKFBBTDo6Rm9u
dFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTVmFsdWVVbmljYXNlOgotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudENhcHMoUEFMOjpGb250VmFyaWFudENhcHM6OlVuaWNhc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlRp
dGxpbmcpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKFBBTDo6
Rm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDBlYTc4ZWFkYWJlOTE1MTlkODU1ZGMzZDkxMjk4
NTY5ZjI4NjlkZWIuLjExZTZhODlmZGIzOTE5Yjg1MzdjY2JhZDlkMDJjNzU0ODVkYmE5MTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NTYsNyArNDU2LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxl
bWVudChjb25zdCBFbGVtZW50KiBlbGUKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZShzaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGNvbXB1dGVk
Rm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0
ZVNpemUoKSwgaXM8U1ZHRWxlbWVudD4oZWxlbWVudCksIHN0eWxlLmdldCgpLCBkb2N1bWVudCgp
KSk7CiAKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMoc2V0dGluZ3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHM6OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7CisgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdz
KCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IFBBTDo6QWxsb3dVc2VySW5zdGFs
bGVkRm9udHM6OlllcyA6IFBBTDo6QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKTsKICAgICBz
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiAKICAg
ICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBmMWE3ZTIy
MTEyMGU3MWE5Njk5MWIzMjMzYTM4NTQzMDMxODlkNWIwLi5mOThjYzlhMzA4Mjc4YzE0OTVlNmE5
YTZlY2FiMmEyZTk1MTY4ZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFsU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgVXNlckludGVyZmFj
ZURpcmVjdGlvblBvbGljeSA9IFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k7
CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeShV
c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5KTsKIAotICAgIHVzaW5nIFN5c3RlbUxheW91dERp
cmVjdGlvbiA9IFRleHREaXJlY3Rpb247CisgICAgdXNpbmcgU3lzdGVtTGF5b3V0RGlyZWN0aW9u
ID0gUEFMOjpUZXh0RGlyZWN0aW9uOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN5c3RlbUxh
eW91dERpcmVjdGlvbihTeXN0ZW1MYXlvdXREaXJlY3Rpb24pOwogCiAgICAgdXNpbmcgRm9udExv
YWRUaW1pbmdPdmVycmlkZSA9IFdlYkNvcmU6OkZvbnRMb2FkVGltaW5nT3ZlcnJpZGU7CkBAIC0x
NDcsNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgV2ViQ29yZTo6RWRpdGluZ0JlaGF2aW9y
VHlwZSBtX29yaWdpbmFsRWRpdGluZ0JlaGF2aW9yOwogICAgICAgICBXZWJDb3JlOjpTdG9yYWdl
QmxvY2tpbmdQb2xpY3kgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7CiAgICAgICAgIFdlYkNvcmU6
OlVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kgbV91c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9s
aWN5OwotICAgICAgICBUZXh0RGlyZWN0aW9uIG1fc3lzdGVtTGF5b3V0RGlyZWN0aW9uOworICAg
ICAgICBQQUw6OlRleHREaXJlY3Rpb24gbV9zeXN0ZW1MYXlvdXREaXJlY3Rpb247CiAgICAgICAg
IFdlYkNvcmU6OlBERkltYWdlQ2FjaGluZ1BvbGljeSBtX3BkZkltYWdlQ2FjaGluZ1BvbGljeTsK
ICAgICAgICAgV2ViQ29yZTo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIG1fZm9yY2VkQ29sb3Jz
QXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWU7CiAgICAgICAgIFdlYkNvcmU6OkZvcmNlZEFj
Y2Vzc2liaWxpdHlWYWx1ZSBtX2ZvcmNlZERpc3BsYXlJc01vbm9jaHJvbWVBY2Nlc3NpYmlsaXR5
VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOWFjM2IyNzlmMzQy
MDQ5NGQwZTVjYTM3ZWM2NTUwZWE1ZmFiNGE1Ni4uODQ2MzJjMDk0ZjQyZGIxZTM5OTkyYTUwYWM0
Y2NiZmQ1NTllODhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjU5
Nyw4ICsyNTk3LDggQEAgdm9pZCBJbnRlcm5hbHM6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGNv
bnN0IFN0cmluZyYgY2FuZGlkYXRlLCB1bnNpZ25lZCBsb2NhdGkKICAgICBpZiAoIWNvbnRleHRE
b2N1bWVudCgpIHx8ICFjb250ZXh0RG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICByZXN1bHQudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGU6Ok5vbmU7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0
OworICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOwogICAgIHJl
c3VsdC5yYW5nZSA9IHsgbG9jYXRpb24sIGxlbmd0aCB9OwogICAgIHJlc3VsdC5yZXBsYWNlbWVu
dCA9IGNhbmRpZGF0ZTsKICAgICBjb250ZXh0RG9jdW1lbnQoKS0+ZWRpdG9yKCkuaGFuZGxlQWNj
ZXB0ZWRDYW5kaWRhdGUocmVzdWx0KTsKQEAgLTM5MDgsNyArMzkwOCw3IEBAIFN0cmluZyBJbnRl
cm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoJmVsZW1lbnQp
OwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb247CiAgICAgcmV0dXJuIHJlc3VsdC50aXRsZShkaXJlY3Rpb24pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNl
cklubGluZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lcy5oCmluZGV4IGY3NDkwZjZjNTZjMzYwOWMxMWQ1MGRiNTFlMDkzNjVhMTY2
NjgyYzYuLjY0YWY0MGJkN2E4Mzc4Y2JmNzFmNGM5M2MzNjQ5NDYyYTJjZWQ5OTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lcy5oCkBAIC0zMCwxMyArMzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1pbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBTdHJpbmdCdWlsZGVyJiBjb25zdW1lZENoYXJhY3RlcnMpCitpbmxpbmUgdm9pZCB1bmNv
bnN1bWVDaGFyYWN0ZXJzKFBBTDo6U2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxk
ZXImIGNvbnN1bWVkQ2hhcmFjdGVycykKIHsKICAgICBzb3VyY2UucHVzaEJhY2soY29uc3VtZWRD
aGFyYWN0ZXJzLnRvU3RyaW5nKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVu
Y3Rpb25zPgotYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hD
aGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK2Jvb2wgY29uc3Vt
ZUNoYXJhY3RlclJlZmVyZW5jZShQQUw6OlNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdC
dWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hh
ciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKIHsKICAgICBBU1NFUlQoIWFkZGl0aW9uYWxB
bGxvd2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyID09ICc+Jyk7CiAgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggN2U2
YmY0YWEwMzY1MWFkNjE3OWEyYmI0OTdmMGFiMzA4ZmNlYTU2Ni4uOGE0YmE2OWM4MTdkNGMyYmI4
MDViYmUzZmFhNDMxMDMxNTgyZjY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpjbGVhckN1cnJlbnROb2RlU3RhY2soKQogICAgIH0KIH0KIAotdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6aW5zZXJ0KFNlZ21lbnRlZFN0cmluZyYmKQordm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6aW5zZXJ0KFBBTDo6U2VnbWVudGVkU3RyaW5nJiYpCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyLmgKaW5kZXggMWNkYTk3YzE3NjUwNmQ5NWQ2YjIxMWUxMjExNmZlMjY4N2YxZGIzYy4u
NjQwOGIwMjllMjJkMGRmY2RjYzJjY2JhZjkzZThlOGJlNzUxZDI0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTAgKzI3LDEwIEBA
CiAjaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiUGVu
ZGluZ1NjcmlwdENsaWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5o
IgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlhNTEVycm9ycy5oIgog
I2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CiAjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgor
I2luY2x1ZGUgPHBhbC90ZXh0L1NlZ21lbnRlZFN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQmLCBGcmFtZVZpZXcqID0gbnVsbHB0cik7CiAg
ICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCYsIEhhc2hNYXA8QXRvbVN0cmlu
ZywgQXRvbVN0cmluZz4mJiwgY29uc3QgQXRvbVN0cmluZyYsIFBhcnNlckNvbnRlbnRQb2xpY3kp
OwogCi0gICAgdm9pZCBpbnNlcnQoU2VnbWVudGVkU3RyaW5nJiYpIGZpbmFsOworICAgIHZvaWQg
aW5zZXJ0KFBBTDo6U2VnbWVudGVkU3RyaW5nJiYpIGZpbmFsOwogICAgIHZvaWQgYXBwZW5kKFJl
ZlB0cjxTdHJpbmdJbXBsPiYmKSBmaW5hbDsKICAgICB2b2lkIGZpbmlzaCgpIGZpbmFsOwogICAg
IHZvaWQgc3RvcFBhcnNpbmcoKSBmaW5hbDsKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgog
CiAgICAgRnJhbWVWaWV3KiBtX3ZpZXcgeyBudWxscHRyIH07CiAKLSAgICBTZWdtZW50ZWRTdHJp
bmcgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybTsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmlu
ZyBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtOwogCiAgICAgUmVmUHRyPFhNTFBhcnNlckNv
bnRleHQ+IG1fY29udGV4dDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0NhbGxiYWNrcz4g
bV9wZW5kaW5nQ2FsbGJhY2tzOwpAQCAtMTgzLDcgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPiBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwOwogICAg
IEF0b21TdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogCi0gICAgU2VnbWVudGVkU3RyaW5n
IG1fcGVuZGluZ1NyYzsKKyAgICBQQUw6OlNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CiB9
OwogCiAjaWYgRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQppbmRleCAwOTMwY2Y5MTdiYTc5MGU1NzVkODRiOTY5ZWFjMDU4MWY1MmY1MTZlLi41MWI0
M2E5NTgwNzZhNDFiZGU1OGU3NDZjN2FlNDE2ZWU3NzNjZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTY5Myw3ICs2OTMsMTEgQEAgZGVmIGhlYWRlcnNf
Zm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JzogWyc8d3RmL01hY2hTZW5k
UmlnaHQuaD4nXSwKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwK
ICAgICAgICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAorICAg
ICAgICAnUEFMOjpGb250U21vb3RoaW5nTW9kZSc6IFsnPFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5o
PiddLAogICAgICAgICAnUEFMOjpTZXNzaW9uSUQnOiBbJzxwYWwvU2Vzc2lvbklELmg+J10sCisg
ICAgICAgICdQQUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJzogWyc8cGFsL3RleHQvVGV4dENo
ZWNraW5nLmg+J10sCisgICAgICAgICdQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCc6IFsnPFdlYkNv
cmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwKKyAgICAgICAgJ1BBTDo6VGV4dENoZWNraW5nVHlw
ZSc6IFsnPHBhbC90ZXh0L1RleHRDaGVja2luZy5oPiddLAogICAgICAgICAnUEFMOjpXZWJHUFU6
OkFkZHJlc3NNb2RlJzogWyc8cGFsL2dyYXBoaWNzL1dlYkdQVS9XZWJHUFVBZGRyZXNzTW9kZS5o
PiddLAogICAgICAgICAnUEFMOjpXZWJHUFU6OkJsZW5kRmFjdG9yJzogWyc8cGFsL2dyYXBoaWNz
L1dlYkdQVS9XZWJHUFVCbGVuZEZhY3Rvci5oPiddLAogICAgICAgICAnUEFMOjpXZWJHUFU6OkJs
ZW5kT3BlcmF0aW9uJzogWyc8cGFsL2dyYXBoaWNzL1dlYkdQVS9XZWJHUFVCbGVuZE9wZXJhdGlv
bi5oPiddLApAQCAtNzcyLDEwICs3NzYsMTAgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6
CiAgICAgICAgICdXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJzogWyc8V2ViQ29yZS9GaWxl
Q2hvb3Nlci5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGUnOiBbJzxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPiddLAogICAgICAg
ICAnV2ViQ29yZTo6Rm9udENoYW5nZXMnOiBbJzxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVDaGFuZ2Vz
Lmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSc6IFsnPFdlYkNvcmUv
R3JhcGhpY3NUeXBlcy5oPiddLAorICAgICAgICAnUEFMOjpGb250U21vb3RoaW5nTW9kZSc6IFsn
PFdlYkNvcmUvR3JhcGhpY3NUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVMb2Fk
VHlwZSc6IFsnPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPiddLAogICAgICAgICAnV2ViQ29y
ZTo6R2VuZXJpY0N1ZURhdGEnOiBbJzxXZWJDb3JlL0luYmFuZEdlbmVyaWNDdWUuaD4nXSwKLSAg
ICAgICAgJ1dlYkNvcmU6OkdyYW1tYXJEZXRhaWwnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xp
ZW50Lmg+J10sCisgICAgICAgICdQQUw6OkdyYW1tYXJEZXRhaWwnOiBbJzxXZWJDb3JlL1RleHRD
aGVja2VyQ2xpZW50Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQn
OiBbJzxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6Okhp
Z2hsaWdodFJlcXVlc3RPcmlnaW5hdGVkSW5BcHAnOiBbJzxXZWJDb3JlL0FwcEhpZ2hsaWdodC5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6SGlnaGxpZ2h0VmlzaWJpbGl0eSc6IFsnPFdlYkNvcmUv
SGlnaGxpZ2h0VmlzaWJpbGl0eS5oPiddLApAQCAtODQyLDkgKzg0Niw2IEBAIGRlZiBoZWFkZXJz
X2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQnOiBbJzxXZWJDb3JlL0RvY3VtZW50U3RvcmFnZUFjY2Vzcy5oPiddLAogICAgICAgICAnV2Vi
Q29yZTo6U3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcic6IFsnPFdlYkNvcmUvUGx1Z2luRGF0YS5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8nOiBbJzxXZWJDb3JlL0Zy
YW1lTG9hZGVyVHlwZXMuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVl
c3REYXRhJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6
OlRleHRDaGVja2luZ1Jlc3VsdCc6IFsnPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwK
LSAgICAgICAgJ1dlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUnOiBbJzxXZWJDb3JlL1RleHRDaGVj
a2luZy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEnOiBbJzxXZWJD
b3JlL1RleHRJbmRpY2F0b3IuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OlRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGUnOiBbJzxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPiddLAog
ICAgICAgICAnV2ViQ29yZTo6VXNlZExlZ2FjeVRMUyc6IFsnPFdlYkNvcmUvUmVzb3VyY2VSZXNw
b25zZUJhc2UuaD4nXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2Ev
V2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggODdmNGViMWViYTI4NzJlMGNiMGFi
OTU5MTZhZmVkZTI5ZmNiYTI0NC4uZGQ4NWJmYTAzNjI1NTM4M2ZiMDZkZDg0NGFiZjVhYzQ2NTI5
ZDQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KQEAgLTUyMywxNyArNTIzLDE3IEBAIHN0YXRpYyBSZXRh
aW5QdHI8Q1RGb250UmVmPiBjcmVhdGVDVEZvbnQoQ0ZEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMs
IGZsb2F0IHNpemUsCiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YT4g
QXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVj
b2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZvbnRPcmllbnRh
dGlvbj4gb3JpZW50YXRpb247CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkZvbnRPcmllbnRhdGlv
bj4gb3JpZW50YXRpb247CiAgICAgZGVjb2RlciA+PiBvcmllbnRhdGlvbjsKICAgICBpZiAoIW9y
aWVudGF0aW9uKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpGb250V2lkdGhWYXJpYW50PiB3aWR0aFZhcmlhbnQ7CisgICAgc3RkOjpv
cHRpb25hbDxQQUw6OkZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRoVmFyaWFudDsKICAgICBkZWNvZGVy
ID4+IHdpZHRoVmFyaWFudDsKICAgICBpZiAoIXdpZHRoVmFyaWFudCkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dFJlbmRlcmlu
Z01vZGU+IHRleHRSZW5kZXJpbmdNb2RlOworICAgIHN0ZDo6b3B0aW9uYWw8UEFMOjpUZXh0UmVu
ZGVyaW5nTW9kZT4gdGV4dFJlbmRlcmluZ01vZGU7CiAgICAgZGVjb2RlciA+PiB0ZXh0UmVuZGVy
aW5nTW9kZTsKICAgICBpZiAoIXRleHRSZW5kZXJpbmdNb2RlKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1Jhbmdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKaW5kZXggZDYzZGM1
MzliNDdmZDEyZjZkMmQ5MjE3Y2NlNzY4YmM2OTYzYWVjMi4uMDczNmFmZmY0ODI4ZmU2ZTJhYTBj
YmM3NGZjYjRhNzhkOTdjN2ZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRp
dGluZ1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3Bw
CkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpTaW1wbGVSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBm
cmFtZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVs
YXRpdmVUbyBiYXNlKQogewogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90
Rm91bmQpOwotICAgIFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlIHJhbmdlIHsgZWRpdGluZ1Jhbmdl
LmxvY2F0aW9uLCBlZGl0aW5nUmFuZ2UubGVuZ3RoIH07CisgICAgUEFMOjpDaGFyYWN0ZXJSYW5n
ZSByYW5nZSB7IGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgZWRpdGluZ1JhbmdlLmxlbmd0aCB9Owog
CiAgICAgaWYgKGJhc2UgPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3Qp
IHsKICAgICAgICAgLy8gT3VyIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUg
cGF0aCBpcyBjYWxsZWQgYnkgaW5wdXQgbWV0aG9kcyB0aGF0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA2NDk4MmJjNDgxMDJhNGFkYjIw
YTdlNjBlMjFiZDQ5MmQ2NTMzNzRjLi4wYTZhYzFjOGNmNWFiOTk5OTRmNTE1NDdhMWVkMmFlYTRl
NTk4YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKQEAgLTMwMCwxMyArMzAwLDEzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDYWNoZVF1ZXJ5
T3B0aW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDYWNoZVF1ZXJ5T3B0aW9uCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxDaGFyYWN0ZXJSYW5nZT46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UpCit2b2lk
IEFyZ3VtZW50Q29kZXI8UEFMOjpDaGFyYWN0ZXJSYW5nZT46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBQQUw6OkNoYXJhY3RlclJhbmdlJiByYW5nZSkKIHsKICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYW5nZS5sb2NhdGlvbik7CiAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4ocmFuZ2UubGVuZ3RoKTsKIH0KIAotc3RkOjpvcHRpb25hbDxD
aGFyYWN0ZXJSYW5nZT4gQXJndW1lbnRDb2RlcjxDaGFyYWN0ZXJSYW5nZT46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorc3RkOjpvcHRpb25hbDxQQUw6OkNoYXJhY3RlclJhbmdlPiBBcmd1bWVu
dENvZGVyPFBBTDo6Q2hhcmFjdGVyUmFuZ2U+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBsb2NhdGlvbjsKICAgICBkZWNvZGVyID4+IGxv
Y2F0aW9uOwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAgc3RkOjpvcHRpb25hbDxTZWxlY3Rpb25HZW9t
ZXRyeT4gQXJndW1lbnRDb2RlcjxTZWxlY3Rpb25HZW9tZXRyeT46OmRlY29kZShEZWNvZGUKICAg
ICB1aW50MzJfdCBkaXJlY3Rpb247CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkaXJlY3Rpb24p
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNl
dERpcmVjdGlvbigoVGV4dERpcmVjdGlvbilkaXJlY3Rpb24pOworICAgIHNlbGVjdGlvbkdlb21l
dHJ5LnNldERpcmVjdGlvbigoUEFMOjpUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbik7CiAKICAgICBp
bnQgaW50VmFsdWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbnRWYWx1ZSkpCkBAIC0xNzgz
LDcgKzE3ODMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmU+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRGljdGF0aQogCiBzdGQ6Om9wdGlvbmFsPERp
Y3RhdGlvbkFsdGVybmF0aXZlPiBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlPjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJS
YW5nZT4gcmFuZ2U7CisgICAgc3RkOjpvcHRpb25hbDxQQUw6OkNoYXJhY3RlclJhbmdlPiByYW5n
ZTsKICAgICBkZWNvZGVyID4+IHJhbmdlOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CkBAIC0xODc5LDE2ICsxODc5LDE2IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxTaGFyZURhdGFXaXRoUGFyc2VkVVJMPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNoYXJl
RGF0YVdpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxHcmFtbWFy
RGV0YWlsPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRl
dGFpbCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxQQUw6OkdyYW1tYXJEZXRhaWw+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJiBkZXRhaWwpCiB7CiAgICAg
ZW5jb2RlciA8PCBkZXRhaWwucmFuZ2U7CiAgICAgZW5jb2RlciA8PCBkZXRhaWwuZ3Vlc3NlczsK
ICAgICBlbmNvZGVyIDw8IGRldGFpbC51c2VyRGVzY3JpcHRpb247CiB9CiAKLXN0ZDo6b3B0aW9u
YWw8R3JhbW1hckRldGFpbD4gQXJndW1lbnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFBBTDo6R3JhbW1hckRldGFpbD4gQXJndW1l
bnRDb2RlcjxQQUw6OkdyYW1tYXJEZXRhaWw+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
LSAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiByYW5nZTsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBBTDo6Q2hhcmFjdGVyUmFuZ2U+IHJhbmdlOwogICAgIGRlY29kZXIgPj4gcmFuZ2U7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTE5MDYsNyAr
MTkwNiw3IEBAIHN0ZDo6b3B0aW9uYWw8R3JhbW1hckRldGFpbD4gQXJndW1lbnRDb2RlcjxHcmFt
bWFyRGV0YWlsPjo6ZGVjb2RlKERlY29kZXImIGRlY29kCiAgICAgcmV0dXJuIHsgeyAqcmFuZ2Us
IFdURk1vdmUoKmd1ZXNzZXMpLCBXVEZNb3ZlKCp1c2VyRGVzY3JpcHRpb24pIH0gfTsKIH0KIAot
dm9pZCBBcmd1bWVudENvZGVyPFRleHRDaGVja2luZ1JlcXVlc3REYXRhPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQordm9p
ZCBBcmd1bWVudENvZGVyPFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGE+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVxdWVz
dCkKIHsKICAgICBlbmNvZGVyIDw8IHJlcXVlc3QuaWRlbnRpZmllcigpOwogICAgIGVuY29kZXIg
PDwgcmVxdWVzdC50ZXh0KCk7CkBAIC0xOTE0LDkgKzE5MTQsOSBAQCB2b2lkIEFyZ3VtZW50Q29k
ZXI8VGV4dENoZWNraW5nUmVxdWVzdERhdGE+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgVGV4dAogICAgIGVuY29kZXIgPDwgcmVxdWVzdC5wcm9jZXNzVHlwZSgpOwogfQogCi1ib29s
IEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVxdWVzdERhdGE+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3QpCitib29sIEFyZ3VtZW50
Q29kZXI8UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YT46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiByZXF1ZXN0KQogewotICAgIHN0ZDo6
b3B0aW9uYWw8VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAg
c3RkOjpvcHRpb25hbDxQQUw6OlRleHRDaGVja2luZ1JlcXVlc3RJZGVudGlmaWVyPiBpZGVudGlm
aWVyOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMTkyNCwxOSArMTkyNCwxOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8VGV4
dENoZWNraW5nUmVxdWVzdERhdGE+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGV4dENoZWNr
aQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzOworICAgIE9w
dGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXM7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjaGVja2luZ1R5cGVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGU7CisgICAgUEFMOjpUZXh0Q2hl
Y2tpbmdQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBy
b2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVxdWVzdCA9IFRleHRD
aGVja2luZ1JlcXVlc3REYXRhIHsgaWRlbnRpZmllciwgdGV4dCwgY2hlY2tpbmdUeXBlcywgcHJv
Y2Vzc1R5cGUgfTsKKyAgICByZXF1ZXN0ID0gUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSB7
IGlkZW50aWZpZXIsIHRleHQsIGNoZWNraW5nVHlwZXMsIHByb2Nlc3NUeXBlIH07CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQp
Cit2b2lkIEFyZ3VtZW50Q29kZXI8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkKIHsK
ICAgICBlbmNvZGVyIDw8IHJlc3VsdC50eXBlOwogICAgIGVuY29kZXIgPDwgcmVzdWx0LnJhbmdl
OwpAQCAtMTk0NCwxOCArMTk0NCwxOCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5n
UmVzdWx0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRleHRDaGVjawogICAgIGVu
Y29kZXIgPDwgcmVzdWx0LnJlcGxhY2VtZW50OwogfQogCi1zdGQ6Om9wdGlvbmFsPFRleHRDaGVj
a2luZ1Jlc3VsdD4gQXJndW1lbnRDb2RlcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IEFy
Z3VtZW50Q29kZXI8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICBUZXh0Q2hlY2tpbmdUeXBlIHR5cGU7CisgICAgUEFMOjpUZXh0Q2hlY2tp
bmdUeXBlIHR5cGU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0eXBlKSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdl
PiByYW5nZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFBBTDo6Q2hhcmFjdGVyUmFuZ2U+IHJhbmdlOwog
ICAgIGRlY29kZXIgPj4gcmFuZ2U7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEdyYW1tYXJEZXRhaWw+PiBk
ZXRhaWxzOworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4+IGRl
dGFpbHM7CiAgICAgZGVjb2RlciA+PiBkZXRhaWxzOwogICAgIGlmICghZGV0YWlscykKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgKaW5kZXggMjVmMDFjMDI5MmEwMTlmMDY3NjI0YmJiNTUzNDAyZGYxYTMz
YzViNi4uMGJlNzZiNDA3NjdlZWRhOGM0NjEyZTM0ZWQyYzgxNDI4YjU4YWU2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTEwMyw2ICsxMDMs
MTMgQEAgY2xhc3MgTWFjaFNlbmRSaWdodDsKIH0KICNlbmRpZgogCituYW1lc3BhY2UgUEFMIHsK
K3N0cnVjdCBDaGFyYWN0ZXJSYW5nZTsKK3N0cnVjdCBHcmFtbWFyRGV0YWlsOworY2xhc3MgVGV4
dENoZWNraW5nUmVxdWVzdERhdGE7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OworfQorCiAj
aWYgVVNFKEFWRk9VTkRBVElPTikKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIqIENWUGl4ZWxC
dWZmZXJSZWY7CiAjZW5kaWYKQEAgLTE0MiwxMyArMTQ5LDExIEBAIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIGNsYXNzIFNwcmluZ1RpbWluZ0Z1bmN0aW9uOwogY2xhc3MgU3RlcHNUaW1pbmdGdW5jdGlv
bjsKIGNsYXNzIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKLWNsYXNzIFRleHRD
aGVja2luZ1JlcXVlc3REYXRhOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBV
c2VyU3R5bGVTaGVldDsKIAogc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmc7CiBzdHJ1Y3QgQ2FjaGVR
dWVyeU9wdGlvbnM7Ci1zdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2U7CiBzdHJ1Y3QgQ29tcG9zaXRpb25V
bmRlcmxpbmU7CiBzdHJ1Y3QgRGF0YURldGVjdG9yRWxlbWVudEluZm87CiBzdHJ1Y3QgRGljdGF0
aW9uQWx0ZXJuYXRpdmU7CkBAIC0xNjIsNyArMTY3LDYgQEAgc3RydWN0IFJhd0ZpbGU7CiBzdHJ1
Y3QgU2hhcmVEYXRhOwogc3RydWN0IFNoYXJlRGF0YVdpdGhQYXJzZWRVUkw7CiBzdHJ1Y3QgTGVu
Z3RoOwotc3RydWN0IEdyYW1tYXJEZXRhaWw7CiBzdHJ1Y3QgTWltZUNsYXNzSW5mbzsKIHN0cnVj
dCBQYXN0ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTDsKQEAgLTE3MSw3ICsxNzUs
NiBAQCBzdHJ1Y3QgUHJvbWlzZWRBdHRhY2htZW50SW5mbzsKIHN0cnVjdCBSZWNlbnRTZWFyY2g7
CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIHN0cnVjdCBTY3JvbGxhYmxlQXJlYVBh
cmFtZXRlcnM7Ci1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owogc3RydWN0IFRleHRJbmRpY2F0
b3JEYXRhOwogc3RydWN0IFRvdWNoQWN0aW9uRGF0YTsKIHN0cnVjdCBWZWxvY2l0eURhdGE7CkBA
IC0yNzAsOSArMjczLDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpDYWNoZVF1ZXJ5T3B0aW9ucz4gewogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJik7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlPiB7
Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDaGFyYWN0
ZXJSYW5nZSYpOwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNoYXJhY3RlclJh
bmdlPiBkZWNvZGUoRGVjb2RlciYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxQ
QUw6OkNoYXJhY3RlclJhbmdlPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBQQUw6OkNoYXJhY3RlclJhbmdlJik7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UEFM
OjpDaGFyYWN0ZXJSYW5nZT4gZGVjb2RlKERlY29kZXImKTsKIH07CiAKIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hlSW5mbz4gewpA
QCAtNTI3LDE5ICs1MzAsMTkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpTaGFyZURhdGFXaXRoUGFyc2VkVVJMPiB7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JF
VFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6U2hhcmVEYXRhV2l0aFBhcnNlZFVS
TCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsJik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4gZGVjb2RlKERlY29kZXImKTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UEFMOjpHcmFtbWFyRGV0YWlsPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBQQUw6OkdyYW1tYXJEZXRhaWwmKTsKKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxQQUw6OkdyYW1tYXJEZXRhaWw+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCi10ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRh
PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdERh
dGE+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFBBTDo6VGV4dENo
ZWNraW5nUmVxdWVzdERhdGEmKTsKKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJik7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3Vs
dD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VGV4
dENoZWNraW5nUmVzdWx0Jik7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVzdWx0PiBkZWNvZGUoRGVjb2RlciYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQmKTsKKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gZGVjb2RlKERlY29kZXIm
KTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VXNlclN0
eWxlU2hlZXQ+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRl
bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwCmluZGV4IGYwMDQ1
NGViNzI5NjM3MDBjMTIzY2JkMTQ0ODZlM2YyOWFmMzhkMDIuLmMwMjk5Yzc3ZWMzZWU2MTcwOTk1
NzkzOTU0MmE2MTEwOTUzYTI0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlBvcHVwSXRlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUG9wdXBJdGVtLmNw
cApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViUG9wdXBJdGVtOjpX
ZWJQb3B1cEl0ZW0oKQogICAgIDogbV90eXBlKFR5cGU6Okl0ZW0pCi0gICAgLCBtX3RleHREaXJl
Y3Rpb24oV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSKQorICAgICwgbV90ZXh0RGlyZWN0aW9u
KFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICwgbV9oYXNUZXh0RGlyZWN0aW9uT3ZlcnJp
ZGUoZmFsc2UpCiAgICAgLCBtX2lzRW5hYmxlZCh0cnVlKQogICAgICwgbV9pc1NlbGVjdGVkKGZh
bHNlKQpAQCAtNDIsNyArNDIsNyBAQCBXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbSgpCiAKIFdl
YlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKFR5cGUgdHlwZSkKICAgICA6IG1fdHlwZSh0eXBlKQot
ICAgICwgbV90ZXh0RGlyZWN0aW9uKFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUikKKyAgICAs
IG1fdGV4dERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAsIG1faGFzVGV4
dERpcmVjdGlvbk92ZXJyaWRlKGZhbHNlKQogICAgICwgbV9pc0VuYWJsZWQodHJ1ZSkKICAgICAs
IG1faXNMYWJlbChmYWxzZSkKQEAgLTUwLDcgKzUwLDcgQEAgV2ViUG9wdXBJdGVtOjpXZWJQb3B1
cEl0ZW0oVHlwZSB0eXBlKQogewogfQogCi1XZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbShUeXBl
IHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5nJiB0b29s
VGlwLCBjb25zdCBTdHJpbmcmIGFjY2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9v
bCBpc0xhYmVsLCBib29sIGlzU2VsZWN0ZWQpCitXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbShU
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJl
Y3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBjb25zdCBTdHJpbmcmIHRvb2xU
aXAsIGNvbnN0IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRleHQsIGJvb2wgaXNFbmFibGVkLCBib29s
IGlzTGFiZWwsIGJvb2wgaXNTZWxlY3RlZCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV90
ZXh0KHRleHQpCiAgICAgLCBtX3RleHREaXJlY3Rpb24odGV4dERpcmVjdGlvbikKQEAgLTg2LDcg
Kzg2LDcgQEAgc3RkOjpvcHRpb25hbDxXZWJQb3B1cEl0ZW0+IFdlYlBvcHVwSXRlbTo6ZGVjb2Rl
KElQQzo6RGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHQpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAotICAgIFdlYkNvcmU6OlRleHREaXJl
Y3Rpb24gdGV4dERpcmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
bjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHREaXJlY3Rpb24pKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
b3B1cEl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCmluZGV4IDJj
Mzc1NDVlY2M2YzcyZjhkZmZiM2IwODFhZTU5ZWU2Yjc5MjU3ZDMuLjY1ODAwNWUxODgxNzg5YjUx
MTQ3N2Y3YTRlYzYwZjJiY2Y4MDY1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlBvcHVwSXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5o
CkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8V2ViQ29yZS9X
cml0aW5nTW9kZS5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAjaW5jbHVk
ZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtNDQsMTQgKzQ0LDE0IEBAIHN0cnVjdCBXZWJQb3B1cEl0ZW0gewogCiAgICAgV2ViUG9wdXBJ
dGVtKCk7CiAgICAgV2ViUG9wdXBJdGVtKFR5cGUpOwotICAgIFdlYlBvcHVwSXRlbShUeXBlLCBj
b25zdCBTdHJpbmcmIHRleHQsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERp
cmVjdGlvbk92ZXJyaWRlLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0IFN0cmluZyYgYWNj
ZXNzaWJpbGl0eVRleHQsIGJvb2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWwsIGJvb2wgaXNTZWxl
Y3RlZCk7CisgICAgV2ViUG9wdXBJdGVtKFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgUEFMOjpU
ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5n
JiB0b29sVGlwLCBjb25zdCBTdHJpbmcmIGFjY2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxl
ZCwgYm9vbCBpc0xhYmVsLCBib29sIGlzU2VsZWN0ZWQpOwogCiAgICAgdm9pZCBlbmNvZGUoSVBD
OjpFbmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViUG9wdXBJdGVt
PiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcg
bV90ZXh0OwotICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gbV90ZXh0RGlyZWN0aW9uOworICAg
IFBBTDo6VGV4dERpcmVjdGlvbiBtX3RleHREaXJlY3Rpb247CiAgICAgYm9vbCBtX2hhc1RleHRE
aXJlY3Rpb25PdmVycmlkZTsKICAgICBTdHJpbmcgbV90b29sVGlwOwogICAgIFN0cmluZyBtX2Fj
Y2Vzc2liaWxpdHlUZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KaW5kZXggYTcyZDBkMmM5MmQ3ZGVkNDVlMGU0MTBiNDFkY2I4ZmI0ZGE1YWU4
NS4uMTI3ZWFmNmVkNTI4YmI3ZjZmOThhYTk0MzE5NGQwYmNmZDk4OTZjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xMzgsNyArMTM4
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViVmlld1Zpc3Vh
bElkZW50aWZpY2F0aW9uT3ZlcmxheS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5o
PgorI2ltcG9ydCA8cGFsL3RleHQvV3JpdGluZ01vZGUuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0
ci5oPgogI2ltcG9ydCA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2ltcG9ydCA8d3RmL0hh
c2hNYXAuaD4KQEAgLTUwNCw3ICs1MDQsNyBAQCBzdGF0aWMgdm9pZCBoYXJkd2FyZUtleWJvYXJk
QXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLAogICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRJbmxpbmVNZWRpYVBsYXliYWNr
UmVxdWlyZXNQbGF5c0lubGluZUF0dHJpYnV0ZSghIVtfY29uZmlndXJhdGlvbiBfaW5saW5lTWVk
aWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGVdKTsKICAgICBwYWdlQ29uZmln
dXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxh
eWJhY2soISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJh
Y2tdICYmIHNob3VsZEFsbG93UGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2soKSk7CiAgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VzKCktPnNldFVzZXJJbnRlcmZhY2VEaXJlY3Rp
b25Qb2xpY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VEaXJl
Y3Rpb25Qb2xpY3k6OkNvbnRlbnQpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5j
ZXMoKS0+c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJD
b3JlOjpUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVy
ZW5jZXMoKS0+c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVpbnQzMl90PihQ
QUw6OlRleHREaXJlY3Rpb246OkxUUikpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJl
bmNlcygpLT5zZXRBbGxvd1NldHRpbmdBbnlYSFJIZWFkZXJGcm9tRmlsZVVSTHMoc2hvdWxkQWxs
b3dTZXR0aW5nQW55WEhSSGVhZGVyRnJvbUZpbGVVUkxzKCkpOwogICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRTaG91bGREZWNpZGVQb2xpY3lCZWZvcmVMb2FkaW5nUXVp
Y2tMb29rUHJldmlldyghIVtfY29uZmlndXJhdGlvbiBfc2hvdWxkRGVjaWRlUG9saWN5QmVmb3Jl
TG9hZGluZ1F1aWNrTG9va1ByZXZpZXddKTsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQppbmRleCAz
ZDllODc3YjBjYjc1NjU0YjYzOTE2Mzk1NTdmNTJiNjAzOTJjYWM5Li4wZjZjNTNkZmU2MjljYWFm
ZDJjNGI3YjlkM2IwYjk0ZTAyNzNiOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtMzU0MiwyMyArMzU0MiwyMyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwg
TlNBcnJheTxOUwogI2VuZGlmCiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgV2ViQ29yZTo6VGV4dENo
ZWNraW5nVHlwZSBjb3JlVGV4dENoZWNraW5nVHlwZShOU1RleHRDaGVja2luZ1R5cGUgdHlwZSkK
K3N0YXRpYyBjb25zdGV4cHIgUEFMOjpUZXh0Q2hlY2tpbmdUeXBlIGNvcmVUZXh0Q2hlY2tpbmdU
eXBlKE5TVGV4dENoZWNraW5nVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjoKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CisgICAgICAgIHJldHVybiBQQUw6OlRl
eHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVS
ZXBsYWNlbWVudDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6OlJl
cGxhY2VtZW50OworICAgICAgICByZXR1cm4gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNl
bWVudDsKICAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOgotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CisgICAgICAgIHJldHVybiBQ
QUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOworICAgICAgICByZXR1cm4gUEFM
OjpUZXh0Q2hlY2tpbmdUeXBlOjpOb25lOwogICAgIH0KIH0KIAotc3RhdGljIFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Jlc3VsdCB0ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1
bHQoTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKm5zUmVzdWx0KQorc3RhdGljIFBBTDo6VGV4dENoZWNr
aW5nUmVzdWx0IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdChOU1Rl
eHRDaGVja2luZ1Jlc3VsdCAqbnNSZXN1bHQpCiB7Ci0gICAgV2ViQ29yZTo6VGV4dENoZWNraW5n
UmVzdWx0IHJlc3VsdDsKKyAgICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAg
cmVzdWx0LnR5cGUgPSBjb3JlVGV4dENoZWNraW5nVHlwZShuc1Jlc3VsdC5yZXN1bHRUeXBlKTsK
ICAgICByZXN1bHQucmFuZ2UgPSBuc1Jlc3VsdC5yYW5nZTsKICAgICByZXN1bHQucmVwbGFjZW1l
bnQgPSBuc1Jlc3VsdC5yZXBsYWNlbWVudFN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1RleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Rl
eHRDaGVja2VyLmNwcAppbmRleCAzZjgyNmY1MDY2YmNkZWQ4YmRiZjY3ZjliNWYyNjU3M2FiMzll
ZWNjLi4yZjU1NzQwMjIxZWRjNGQ4Y2JlODA3NGI4YWNhYmI3MjEyNjFlNDdkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXIuY3BwCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgVGV4
dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdW
aWV3LCBpbnQzMl90JiwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBW
ZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lk
IFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJp
bmdWaWV3LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgVGV4
dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQordm9pZCBUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFBBTDo6R3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hl
Y2tpbmdPZlN0cmluZyhSZWY8VGV4dENoZWNrZXJDb21wbGV0aW9uPiYmLCBpbnQzMl90KQogfQog
CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnLCBT
dHJpbmdWaWV3LCBpbnQzMl90LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4sIGJvb2wpCitW
ZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90LCBPcHRpb25TZXQ8
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9UZXh0
Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAppbmRleCA1
OGMzYWZlMzczOTNkODA1NTAxZWE0NjAxNmE1ZDBjMjkzNzcwM2U0Li5hOTNkNTU0MWQyOTcyYzY2
MTE1YTgxYTUxMDUxZGJjMGM0OWE2NGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmgKQEAgLTc3LDE0ICs3NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNwZWxsRG9jdW1l
bnRUYWcgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKTsKICAgICBzdGF0aWMg
dm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKFNwZWxsRG9jdW1lbnRUYWcpOwogI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcsIFN0
cmluZ1ZpZXcsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdUeXBlPiwgYm9vbCBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVkKTsKKyAgICBz
dGF0aWMgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFw
aChTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90IGluc2VydGlvblBvaW50LCBP
cHRpb25TZXQ8UEFMOjpUZXh0Q2hlY2tpbmdUeXBlPiwgYm9vbCBpbml0aWFsQ2FwaXRhbGl6YXRp
b25FbmFibGVkKTsKICNlbmRpZgogICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICBzdGF0aWMgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIFZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgY2hlY2tHcmFt
bWFyT2ZTdHJpbmcoU3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8UEFM
OjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYg
YmFkR3JhbW1hckxlbmd0aCk7CiAgICAgc3RhdGljIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygp
OwogICAgIHN0YXRpYyB2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKICAgICBzdGF0
aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFNwZWxsRG9jdW1lbnRU
YWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKyAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBQQUw6OkdyYW1t
YXJEZXRhaWwmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChTcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJf
dCBpbnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMsIGJvb2wgaW5pdGlhbENh
cGl0YWxpemF0aW9uRW5hYmxlZCk7CiAgICAgc3RhdGljIHZvaWQgbGVhcm5Xb3JkKFNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgc3RhdGljIHZvaWQgaWdub3JlV29y
ZChTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1RleHRDaGVja2VyQ29tcGxldGlvbi5jcHAKaW5kZXggOWVjYjhkNzcy
NWJlNDg4N2E5NjM1YmJjMjliNDU1N2IzMWRmMDcxNi4uMmI5OGM5YmI2ZTIzN2VkYzM3N2JkMWVm
ZTdhZmMxMTU0Nzc4YjFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4
dENoZWNrZXJDb21wbGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9UZXh0
Q2hlY2tlckNvbXBsZXRpb24uY3BwCkBAIC0zMSwxOSArMzEsMTkgQEAKIG5hbWVzcGFjZSBXZWJL
aXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVJlZjxUZXh0Q2hlY2tlckNvbXBsZXRp
b24+IFRleHRDaGVja2VyQ29tcGxldGlvbjo6Y3JlYXRlKFRleHRDaGVja2VyUmVxdWVzdElEIHJl
cXVlc3RJRCwgY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBXZWJQ
YWdlUHJveHkqIHBhZ2UpCitSZWY8VGV4dENoZWNrZXJDb21wbGV0aW9uPiBUZXh0Q2hlY2tlckNv
bXBsZXRpb246OmNyZWF0ZShUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIGNvbnN0IFBB
TDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBXZWJQYWdlUHJveHkqIHBh
Z2UpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dENoZWNrZXJDb21wbGV0aW9uKHJl
cXVlc3RJRCwgcmVxdWVzdERhdGEsIHBhZ2UpKTsKIH0KIAotVGV4dENoZWNrZXJDb21wbGV0aW9u
OjpUZXh0Q2hlY2tlckNvbXBsZXRpb24oVGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBj
b25zdCBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIFdlYlBhZ2VQcm94eSog
cGFnZSkKK1RleHRDaGVja2VyQ29tcGxldGlvbjo6VGV4dENoZWNrZXJDb21wbGV0aW9uKFRleHRD
aGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICA6IG1fcmVxdWVzdElE
KHJlcXVlc3RJRCkKICAgICAsIG1fcmVxdWVzdERhdGEocmVxdWVzdERhdGEpCiAgICAgLCBtX3Bh
Z2UocGFnZSkKIHsKIH0KIAotY29uc3QgVGV4dENoZWNraW5nUmVxdWVzdERhdGEmIFRleHRDaGVj
a2VyQ29tcGxldGlvbjo6dGV4dENoZWNraW5nUmVxdWVzdERhdGEoKSBjb25zdAorY29uc3QgUEFM
OjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgVGV4dENoZWNrZXJDb21wbGV0aW9uOjp0ZXh0Q2hl
Y2tpbmdSZXF1ZXN0RGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVxdWVzdERhdGE7CiB9
CkBAIC01Myw3ICs1Myw3IEBAIGludDY0X3QgVGV4dENoZWNrZXJDb21wbGV0aW9uOjpzcGVsbERv
Y3VtZW50VGFnKCkKICAgICByZXR1cm4gbV9wYWdlLT5zcGVsbERvY3VtZW50VGFnKCk7CiB9CiAK
LXZvaWQgVGV4dENoZWNrZXJDb21wbGV0aW9uOjpkaWRGaW5pc2hDaGVja2luZ1RleHQoY29uc3Qg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgVGV4dENoZWNr
ZXJDb21wbGV0aW9uOjpkaWRGaW5pc2hDaGVja2luZ1RleHQoY29uc3QgVmVjdG9yPFBBTDo6VGV4
dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChyZXN1bHQuaXNFbXB0
eSgpKQogICAgICAgICBkaWRDYW5jZWxDaGVja2luZ1RleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1RleHRDaGVja2VyQ29tcGxldGlvbi5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmgKaW5kZXggNzJmMmY5OTUzYjZjYWNk
NWRhZmRhNmM3ZGU4NTM2MmE3ODM5MWE3My4uOTUwMDU3YzBkNWM5YjI5MDMwMjg5YzQwNTc0NTY5
ZDdkMTZmMzY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNr
ZXJDb21wbGV0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVGV4dENoZWNrZXJD
b21wbGV0aW9uLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SWRlbnRpZmllclR5cGVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KKyNp
bmNsdWRlIDxwYWwvdGV4dC9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM3LDE4ICszNywxOCBAQCBjbGFzcyBXZWJQYWdl
UHJveHk7CiAKIGNsYXNzIFRleHRDaGVja2VyQ29tcGxldGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PFRleHRDaGVja2VyQ29tcGxldGlvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VGV4dENo
ZWNrZXJDb21wbGV0aW9uPiBjcmVhdGUoVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgV2ViUGFnZVByb3h5Kik7CisgICAgc3RhdGlj
IFJlZjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNyZWF0ZShUZXh0Q2hlY2tlclJlcXVlc3RJRCwg
Y29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYsIFdlYlBhZ2VQcm94eSopOwogCi0g
ICAgY29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmIHRleHRDaGVja2luZ1Jl
cXVlc3REYXRhKCkgY29uc3Q7CisgICAgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0
YSYgdGV4dENoZWNraW5nUmVxdWVzdERhdGEoKSBjb25zdDsKICAgICBTcGVsbERvY3VtZW50VGFn
IHNwZWxsRG9jdW1lbnRUYWcoKTsKLSAgICB2b2lkIGRpZEZpbmlzaENoZWNraW5nVGV4dChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYpIGNvbnN0OworICAgIHZvaWQg
ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3Vs
dD4mKSBjb25zdDsKICAgICB2b2lkIGRpZENhbmNlbENoZWNraW5nVGV4dCgpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIFRleHRDaGVja2VyQ29tcGxldGlvbihUZXh0Q2hlY2tlclJlcXVlc3RJRCwg
Y29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmLCBXZWJQYWdlUHJveHkqKTsK
KyAgICBUZXh0Q2hlY2tlckNvbXBsZXRpb24oVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0IFBB
TDo6VGV4dENoZWNraW5nUmVxdWVzdERhdGEmLCBXZWJQYWdlUHJveHkqKTsKIAogICAgIGNvbnN0
IFRleHRDaGVja2VyUmVxdWVzdElEIG1fcmVxdWVzdElEOwotICAgIGNvbnN0IFdlYkNvcmU6OlRl
eHRDaGVja2luZ1JlcXVlc3REYXRhIG1fcmVxdWVzdERhdGE7CisgICAgY29uc3QgUEFMOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0RGF0YSBtX3JlcXVlc3REYXRhOwogICAgIFdlYlBhZ2VQcm94eSogbV9w
YWdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
YTYzN2U2MmY2YzE2ZmYxOTNmMWQ1MWU5NjM3YWNjNjg4ZDZiNDAyMy4uYzI2MTAyMDZhYjM0NTZj
YzhmMTJhYjhjZjM2ZDY2OGQ5NzE3MGM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCkBAIC02ODYzLDcgKzY4NjMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2hv
d1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCB1aW50NjRfdCB0ZXh0RGlyZWN0aW9uLCBj
bwogCiAgICAgLy8gU2hvd2luZyBhIHBvcHVwIG1lbnUgcnVucyBhIG5lc3RlZCBydW5sb29wLCB3
aGljaCBjYW4gaGFuZGxlIG1lc3NhZ2VzIHRoYXQgY2F1c2UgfHRoaXN8IHRvIGdldCBjbG9zZWQu
CiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgbV9hY3RpdmVQb3B1
cE1lbnUtPnNob3dQb3B1cE1lbnUocmVjdCwgc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4odGV4
dERpcmVjdGlvbiksIG1fcGFnZVNjYWxlRmFjdG9yLCBpdGVtcywgZGF0YSwgc2VsZWN0ZWRJbmRl
eCk7CisgICAgbV9hY3RpdmVQb3B1cE1lbnUtPnNob3dQb3B1cE1lbnUocmVjdCwgc3RhdGljX2Nh
c3Q8UEFMOjpUZXh0RGlyZWN0aW9uPih0ZXh0RGlyZWN0aW9uKSwgbV9wYWdlU2NhbGVGYWN0b3Is
IGl0ZW1zLCBkYXRhLCBzZWxlY3RlZEluZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omhp
ZGVQb3B1cE1lbnUoKQpAQCAtNzE5MCw3ICs3MTkwLDcgQEAgU3BlbGxEb2N1bWVudFRhZyBXZWJQ
YWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBp
bnQzMl90IGluc2VydGlvblBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBX
ZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0
aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNl
cnRpb25Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8UEFMOjpUZXh0Q2hlY2tp
bmdSZXN1bHQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGNvbXBsZXRpb25IYW5k
bGVyKFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50VGFnKCks
IHRleHQsIGluc2VydGlvblBvaW50LCBjaGVja2luZ1R5cGVzLCBtX2luaXRpYWxDYXBpdGFsaXph
dGlvbkVuYWJsZWQpKTsKIH0KQEAgLTcyMDQsOSArNzIwNCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBDb21wbGV0aW9uSGFu
ZGxlcjx2CiAgICAgY29tcGxldGlvbkhhbmRsZXIobWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3Bl
bGxpbmdMZW5ndGgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYmLCBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJf
dCBiYWRHcmFtbWFyTGVuZ3RoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFBBTDo6R3JhbW1hckRldGFpbD4mJiwgaW50MzJfdCBiYWRHcmFt
bWFyTG9jYXRpb24sIGludDMyX3QgYmFkR3JhbW1hckxlbmd0aCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOworICAgIFZl
Y3RvcjxQQUw6OkdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOwogICAgIGludDMyX3QgYmFk
R3JhbW1hckxvY2F0aW9uID0gMDsKICAgICBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGggPSAwOwog
ICAgIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCks
IHRleHQsIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5n
dGgpOwpAQCAtNzIyMyw3ICs3MjIzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV28KICAgICBU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3Vt
ZW50VGFnKCksIG1pc3NwZWxsZWRXb3JkKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJh
c2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit2b2lkIFdlYlBhZ2VQcm94
eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3Jh
bW1hclBocmFzZSwgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewog
ICAgIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxE
b2N1bWVudFRhZygpLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KQEAgLTcy
NTEsMTIgKzcyNTEsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omlnbm9yZVdvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkKQogICAgIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWco
KSwgd29yZCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luZ1JlcXVl
c3REYXRhJiByZXF1ZXN0LCBpbnQzMl90IGluc2VydGlvblBvaW50KQordm9pZCBXZWJQYWdlUHJv
eHk6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJ
RCwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYgcmVxdWVzdCwgaW50MzJfdCBp
bnNlcnRpb25Qb2ludCkKIHsKICAgICBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoVGV4dENoZWNrZXJDb21wbGV0aW9uOjpjcmVhdGUocmVxdWVzdElELCByZXF1ZXN0LCB0aGlz
KSwgaW5zZXJ0aW9uUG9pbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hl
Y2tpbmdUZXh0KFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRGaW5pc2hDaGVja2luZ1RleHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBjb25z
dCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHQpCiB7CiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlcXVlc3RJRCwgcmVzdWx0
KSk7CiB9CkBAIC05NjUwLDcgKzk2NTAsNyBAQCBOU09iamVjdCAqV2ViUGFnZVByb3h5OjppbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQdAogICAg
IHJldHVybiBwYWdlQ2xpZW50KCkuaW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZv
ckhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdCwgdHlwZSwgdXNlckRhdGEpOwogfQogCi12b2lk
IFdlYlBhZ2VQcm94eTo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoV2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRl
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KGFjY2VwdGVkQ2FuZGlkYXRlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IDlhODE2ZmRiMzE4M2ExOWI2NzllODc3MDNhMGY0NDBlNWFiOTA5MDMuLjEzM2Vh
Nzg1ZTM2ZDA5OTIzNmFlMWI0MWZjOGRmNDMwNmI1NDU5N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xMTAsNyArMTEwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1J1bkphdmFTY3JpcHRQYXJhbWV0ZXJzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxUeXBl
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RyYW5zbGF0aW9uQ29udGV4dE1lbnVJbmZvLmg+CkBAIC0xMTgsNiArMTE3
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KKyNpbmNsdWRlIDxw
YWwvdGV4dC9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CkBAIC0yMjEsNiArMjIxLDEwIEBAIGNsYXNzIFVJQ2xpZW50OwogY2xhc3MgVVJMUmVxdWVzdDsK
IH0KIAorbmFtZXNwYWNlIFBBTCB7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OworfQorCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIGVudW0gY2xhc3MgSW5zcGVjdG9yVGFyZ2V0VHlwZSA6IHVp
bnQ4X3Q7CiB9CkBAIC0zMDgsNyArMzEyLDYgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsK
IHN0cnVjdCBTaGFyZURhdGE7CiBzdHJ1Y3QgU3BlZWNoUmVjb2duaXRpb25FcnJvcjsKIHN0cnVj
dCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U7Ci1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owog
c3RydWN0IFRleHRSZWNvZ25pdGlvblJlc3VsdDsKIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7
CiBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CkBAIC0xNDk4LDcgKzE1MDEsNyBAQCBwdWJsaWM6CiAK
ICAgICBTcGVsbERvY3VtZW50VGFnIHNwZWxsRG9jdW1lbnRUYWcoKTsKIAotICAgIHZvaWQgZGlk
RmluaXNoQ2hlY2tpbmdUZXh0KFRleHRDaGVja2VyUmVxdWVzdElELCBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYpOworICAgIHZvaWQgZGlkRmluaXNoQ2hlY2tpbmdU
ZXh0KFRleHRDaGVja2VyUmVxdWVzdElELCBjb25zdCBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+Jik7CiAgICAgdm9pZCBkaWRDYW5jZWxDaGVja2luZ1RleHQoVGV4dENoZWNrZXJSZXF1
ZXN0SUQpOwogICAgICAgICAKICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihXZWJD
b3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3IpOwpAQCAtMTU3OCw3ICsxNTgxLDcgQEAgcHVibGlj
OgogCiAgICAgTlNPYmplY3QgKmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JI
aXRUZXN0UmVzdWx0KFJlZlB0cjxBUEk6OkhpdFRlc3RSZXN1bHQ+LCB1aW50NjRfdCwgUmVmUHRy
PEFQSTo6T2JqZWN0Pik7CiAKLSAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFdlYkNv
cmU6OlRleHRDaGVja2luZ1Jlc3VsdCk7CisgICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZShQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCk7CiAgICAgdm9pZCBkaWRIYW5kbGVBY2NlcHRlZENh
bmRpZGF0ZSgpOwogCiAgICAgdm9pZCBzZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGlu
dCk7CkBAIC0xNTkyLDcgKzE1OTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnN0YWxsQWN0aXZp
dHlTdGF0ZUNoYW5nZUNvbXBsZXRpb25IYW5kbGVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29yZTo6VGV4dENo
ZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYmKT4m
Jik7CisgICAgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBTdHJpbmcmIHRleHQsIE9w
dGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5z
ZXJ0aW9uUG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFBBTDo6VGV4dENoZWNr
aW5nUmVzdWx0PiYmKT4mJik7CiAjZW5kaWYKICAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQzMl90IGluc2VydGlv
blBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKIApA
QCAtMjMzMiwxMyArMjMzNSwxMyBAQCBwcml2YXRlOgogCiAgICAgLy8gU3BlbGxpbmcgYW5kIGdy
YW1tYXIuCiAgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCk+JiYpOwotICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJp
bmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYmLCBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJf
dCBiYWRHcmFtbWFyTGVuZ3RoKT4mJik7CisgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhj
b25zdCBTdHJpbmcmIHRleHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFBBTDo6R3Jh
bW1hckRldGFpbD4mJiwgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QgYmFkR3Jh
bW1hckxlbmd0aCk+JiYpOwogICAgIHZvaWQgc3BlbGxpbmdVSUlzU2hvd2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7Ci0gICAgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhy
YXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisgICAgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBj
b25zdCBQQUw6OkdyYW1tYXJEZXRhaWwmKTsKICAgICB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJp
bmcmIHdvcmQpOwogICAgIHZvaWQgaWdub3JlV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOwotICAg
IHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0
IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhJiwgaW50MzJfdCBpbnNlcnRpb25Qb2lu
dCk7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hlY2tlclJlcXVlc3RJ
RCwgY29uc3QgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSYsIGludDMyX3QgaW5zZXJ0aW9u
UG9pbnQpOwogCiAgICAgdm9pZCB0YWtlRm9jdXModWludDhfdCBkaXJlY3Rpb24pOwogICAgIHZv
aWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBkNTYzNmEzYTYyYzdhZjg0ZDcyZDQ5
OGFmZGFlMWYzMmI4ZjRiNTU0Li5hMGQ2YTY2YzEzMzIzM2U5MmVmNTM1NWFkNDBhNzE4ZmZmNTQ1
ZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC0yODEsMTcgKzI4MSwxNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewog
CiAgICAgIyBTcGVsbGluZyBhbmQgZ3JhbW1hciBtZXNzYWdlcwogI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCi0gICAgQ2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nIHRleHQsIE9wdGlv
blNldDxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBpbnQzMl90IGlu
c2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0cykgU3luY2hyb25vdXMKKyAgICBDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwg
T3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBp
bnNlcnRpb25Qb2ludCkgLT4gKFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0
cykgU3luY2hyb25vdXMKICNlbmRpZgogICAgIENoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmcg
dGV4dCkgLT4gKGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCBtaXNzcGVsbGlu
Z0xlbmd0aCkgU3luY2hyb25vdXMKLSAgICBDaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmcgdGV4
dCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiByZXN1bHRzLCBpbnQzMl90IGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCBiYWRHcmFtbWFyTGVuZ3RoKSBTeW5jaHJvbm91cwor
ICAgIENoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoVmVjdG9yPFBBTDo6R3Jh
bW1hckRldGFpbD4gcmVzdWx0cywgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3Qg
YmFkR3JhbW1hckxlbmd0aCkgU3luY2hyb25vdXMKICAgICBTcGVsbGluZ1VJSXNTaG93aW5nKCkg
LT4gKGJvb2wgaXNTaG93aW5nKSBTeW5jaHJvbm91cwogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoU3RyaW5nIG1pc3NwZWxsZWRXb3JkKQotICAgIFVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmcgYmFkR3JhbW1hclBocmFzZSwgc3RydWN0IFdlYkNv
cmU6OkdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbCkKKyAgICBVcGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIHN0cnVjdCBQQUw6OkdyYW1t
YXJEZXRhaWwgZ3JhbW1hckRldGFpbCkKICAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29y
ZCwgU3RyaW5nIGNvbnRleHQsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8U3Ry
aW5nPiBndWVzc2VzKSBTeW5jaHJvbm91cwogICAgIExlYXJuV29yZChTdHJpbmcgd29yZCkKICAg
ICBJZ25vcmVXb3JkKFN0cmluZyB3b3JkKQotICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdl
YktpdDo6VGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXF1ZXN0RGF0YSByZXF1ZXN0LCBpbnQzMl90IGluc2VydGlvblBvaW50KQorICAgIFJlcXVl
c3RDaGVja2luZ09mU3RyaW5nKFdlYktpdDo6VGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElE
LCBQQUw6OlRleHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3QsIGludDMyX3QgaW5zZXJ0aW9u
UG9pbnQpCiAKICAgICAjIERyYWcgYW5kIGRyb3AgbWVzc2FnZXMKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUG9wdXBNZW51
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBvcHVwTWVudVByb3h5LmgKaW5k
ZXggNjFkZWUyZTRiNjY4MGE0YTdiNjg5YTQwZDA3NGMzZTIyMGM2MTIxYi4uMzM4YzllNWI5MDg5
MDQwMjBlNDFhOTQzOTdmZGZmMjhkYWIxZjY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUG9wdXBNZW51UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQb3B1cE1lbnVQcm94eS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYlBvcHVw
TWVudVByb3h5X2gKICNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlfaAogCi0jaW5jbHVkZSA8V2Vi
Q29yZS9Xcml0aW5nTW9kZS5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1dyaXRpbmdNb2RlLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBA
IC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgV2ViQ29yZTo6VGV4
dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVw
SXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVj
dGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgUEFMOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBN
ZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBo
aWRlUG9wdXBNZW51KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxUcmFja2luZygpIHsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KaW5k
ZXggMDQ3MzVkZGRiZTEyZWNlZTViNWNiM2U4MzY4OTdkNDhiZDBhOWY0NS4uN2EyOThkZDc1M2Qz
Y2JjZDk1M2EyOTBlOGUzMjkwNGViMGY2MWJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpAQCAtMTg5LDEwICsxODksMTAgQEAgc3RhdGljIFJl
dGFpblB0cjxVSVRleHRDaGVja2VyPiB0ZXh0Q2hlY2tlckZvcihTcGVsbERvY3VtZW50VGFnIHNw
ZWxsRG9jdW1lbnRUYWcKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFy
YWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0
LCBpbnQzMl90IC8qIGluc2VydGlvblBvaW50ICovLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlw
ZT4gY2hlY2tpbmdUeXBlcywgYm9vbCAvKiBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVkICov
KQorVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3
IHRleHQsIGludDMyX3QgLyogaW5zZXJ0aW9uUG9pbnQgKi8sIE9wdGlvblNldDxQQUw6OlRleHRD
aGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGJvb2wgLyogaW5pdGlhbENhcGl0YWxpemF0aW9u
RW5hYmxlZCAqLykKIHsKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwot
ICAgIGlmICghY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZykpCisgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIGlm
ICghY2hlY2tpbmdUeXBlcy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
KSkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKICAgICBhdXRvIHRleHRDaGVja2VyID0gdGV4
dENoZWNrZXJGb3Ioc3BlbGxEb2N1bWVudFRhZyk7CkBAIC0yMTQsOCArMjE0LDggQEAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNw
ZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgaWYgKG1pc3NwZWxsZWRSYW5nZS5sb2NhdGlvbiA9
PSBOU05vdEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgVGV4dENoZWNraW5n
UmVzdWx0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZzsKKyAgICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAg
ICByZXN1bHQudHlwZSA9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAg
IHJlc3VsdC5yYW5nZSA9IG1pc3NwZWxsZWRSYW5nZTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
V1RGTW92ZShyZXN1bHQpKTsKIApAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgVGV4dENoZWNrZXI6
OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQz
Ml90JiwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBW
ZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKIHsKICAgICAv
LyBpT1MgdXNlcyBjaGVja1RleHRPZlBhcmFncmFwaCgpIGluc3RlYWQuCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBHcmFtbWFyRGV0YWlsJikKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmLCBjb25zdCBQQUw6
OkdyYW1tYXJEZXRhaWwmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQppbmRleCA3NWNiNzUxMmNjYTY3NDc0YTU1NDI0YWQzYTI4Y2Y2YzdlZTBhY2Q1Li4xMDM3OTc3
ZWIxNGIxYjAxOTIxMzY3MmQzNDFjODk5YjAzY2FjODZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMw
MjgsNyArMzAyOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJl
Y29nbml6ZXIgKmEsIFVJR2VzdHVyZVJlY29nbml6ZXIgKmIsIFVJCiAgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkoc2VsZWN0aW9uR2VvbWV0cmllcywgW10gKGF1dG8mIGdlb21ldHJ5KSB7CiAgICAg
ICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAg
ICAgICB3ZWJSZWN0LnJlY3QgPSBnZW9tZXRyeS5yZWN0KCk7Ci0gICAgICAgIHdlYlJlY3Qud3Jp
dGluZ0RpcmVjdGlvbiA9IGdlb21ldHJ5LmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlRleHREaXJl
Y3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGly
ZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGdl
b21ldHJ5LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5n
RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAg
ICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGdlb21ldHJ5LmlzTGluZUJyZWFrKCk7CiAgICAg
ICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKTsKICAg
ICAgICAgd2ViUmVjdC5pc0xhc3RPbkxpbmUgPSBnZW9tZXRyeS5pc0xhc3RPbkxpbmUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0K
aW5kZXggZTMxZGM4MDUyZTJmMDJiNzA4MDNjMzlmZTBmMTExYjM4ODNlMTc1MS4uMDE0MDE4MDdi
NjVjYWM4OTFhMDFjNWUwNzU0NjhjODA3ZGQyODZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KQEAgLTEzOCw3ICsxMzgsNyBA
QAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIC0gKFVJVGV4dFdyaXRpbmdE
aXJlY3Rpb24pd3JpdGluZ0RpcmVjdGlvbgogewotICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0
cnkuZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSID8gVUlUZXh0V3Jp
dGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogVUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9M
ZWZ0OworICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBVSVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBV
SVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiB9CiBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L0NvcnJlY3Rpb25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rp
b25QYW5lbC5oCmluZGV4IDQ5NzljZTM5NjQwNGQ2NGI0N2IxNWZlNTE0YWM5NzQ4YTkxZDYyYzEu
LmY5YzNiODNiYTA4Y2I3ZjhjNWZjNDIxNTJkMTIyMTUwODc0ZDNjMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgQ29ycmVjdGlvblBhbmVsX2gKICNkZWZpbmUgQ29ycmVjdGlvblBhbmVsX2gKIAot
I2ltcG9ydCA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KKyNpbXBvcnQgPHBhbC90ZXh0L1RleHRD
aGVja2luZy5oPgogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KaW5kZXggNGNjMjJkZjAzMDgy
NTBiZTI1MDYxNjIxMmM1ODAzMDdlMjAzMTAyMi4uNTRiMTE3ZGM1ZTNhMDkzODUxOGY0ZTAwODAw
MDFlN2MwMDg5MmY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Rl
eHRDaGVja2VyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hl
Y2tlck1hYy5tbQpAQCAtMzE5LDkgKzMxOSw5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcoU3BlbGxEb2N1bWVudFRhZyB0YWcpCiAKICNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tl
cjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcGVsbERvY3VtZW50VGFn
LCBTdHJpbmdWaWV3IHRleHQsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIE9wdGlvblNldDxUZXh0
Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBib29sIGluaXRpYWxDYXBpdGFsaXphdGlvbkVu
YWJsZWQpCitWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVj
a1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwZWxsRG9jdW1lbnRUYWcsIFN0cmlu
Z1ZpZXcgdGV4dCwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwgT3B0aW9uU2V0PFBBTDo6VGV4dENo
ZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgYm9vbCBpbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFi
bGVkKQogewotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgVmVj
dG9yPFBBTDo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCiAgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiB0ZXh0U3RyaW5nID0gdGV4dC5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7
CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsKQEAgLTM0MCwxOSArMzQwLDE5IEBAIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFw
aChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgIEFTU0VSVChpbmNvbWluZ1Jlc3VsdC5yYW5n
ZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKTsKICAgICAgICAgQVNTRVJUKGluY29taW5nUmVzdWx0
LnJhbmdlLmxlbmd0aCA+IDApOwogICAgICAgICBhdXRvIHJlc3VsdFJhbmdlID0gaW5jb21pbmdS
ZXN1bHQucmFuZ2U7Ci0gICAgICAgIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3Bl
bGxpbmcpKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAg
ICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKKyAgICAgICAg
aWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgY2hlY2tpbmdU
eXBlcy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgeworICAgICAg
ICAgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVz
dWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1
bHQpOwotICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBl
R3JhbW1hciAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1t
YXIpKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKKyAg
ICAgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIE5T
QXJyYXkgKmRldGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwotICAgICAg
ICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOworICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAg
ICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIGZvciAoTlNEaWN0
aW9uYXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGluY29taW5nRGV0YWlsKTsKLSAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFp
bDsKKyAgICAgICAgICAgICAgICBQQUw6OkdyYW1tYXJEZXRhaWwgZGV0YWlsOwogICAgICAgICAg
ICAgICAgIE5TVmFsdWUgKmRldGFpbFJhbmdlQXNOU1ZhbHVlID0gW2luY29taW5nRGV0YWlsIG9i
amVjdEZvcktleTpOU0dyYW1tYXJSYW5nZV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFp
bFJhbmdlQXNOU1ZhbHVlKTsKICAgICAgICAgICAgICAgICBOU1JhbmdlIGRldGFpbE5TUmFuZ2Ug
PSBbZGV0YWlsUmFuZ2VBc05TVmFsdWUgcmFuZ2VWYWx1ZV07CkBAIC0zNjYsMzMgKzM2NiwzMyBA
QCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxz
LmFwcGVuZChkZXRhaWwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQocmVzdWx0KTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNr
aW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpM
aW5rKSkgewotICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAg
ICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6TGluazsKKyAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdUeXBl
cy5jb250YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmspKSB7CisgICAgICAgICAgICBQ
QUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9
IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNvbWlu
Z1Jlc3VsdCBVUkxdIGFic29sdXRlU3RyaW5nXTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHJlc3VsdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2lu
Z1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1
b3RlKSkgewotICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAg
ICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CisgICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5
cGVzLmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CisgICAgICAgICAg
ICBQQUw6OlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlw
ZSA9IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAgICAgICByZXN1bHQucmFu
Z2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNv
bWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVu
ZChyZXN1bHQpOwotICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tp
bmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRh
c2gpKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoOworICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKKyAgICAgICAgICAgIFBB
TDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0g
cmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdS
ZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVz
dWx0KTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlw
ZVJlcGxhY2VtZW50ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6
UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0Owot
ICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsK
KyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxh
Y2VtZW50ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpS
ZXBsYWNlbWVudCkpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3Vs
dDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBs
YWNlbWVudDsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAg
ICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3Ry
aW5nXTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNr
aW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpIHsKLSAgICAg
ICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlw
ZSA9IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CisgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMu
Y29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkgeworICAgICAgICAg
ICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnR5
cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAgICAgICByZXN1
bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9
IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChyZXN1bHQpOwpAQCAtNDEwLDcgKzQxMCw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBpbnQzMl90
JiwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dy
YW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29y
ZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2Vy
OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0
b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKIHsKICAgICAvLyBN
YWMgdXNlcyBjaGVja1RleHRPZlBhcmFncmFwaCBpbnN0ZWFkLgogICAgIG5vdEltcGxlbWVudGVk
KCk7CkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHIKICAgICBbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhN
aXNzcGVsbGVkV29yZDptaXNzcGVsbGVkV29yZF07CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRh
aWwpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
U3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBQ
QUw6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7CiAgICAgQ2hlY2tlZFVpbnQ2NCBl
bmRPZlJhbmdlQ2hlY2tlZCA9IGdyYW1tYXJEZXRhaWwucmFuZ2UubG9jYXRpb247CiAgICAgZW5k
T2ZSYW5nZUNoZWNrZWQgKz0gZ3JhbW1hckRldGFpbC5yYW5nZS5sZW5ndGg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5oCmluZGV4IDA5
MGUxNDk4MjU0MTNiZDA4M2M3YjQyMjM4ZmUwZmNhODgyY2M0NWYuLjBjNzA3ODBkMWY2YWRlMjc0
NjQ0MjZmMzliNGRkOTQxNTMyOTEyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5oCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGlj
OgogICAgIH0KICAgICB+V2ViUG9wdXBNZW51UHJveHlNYWMoKTsKIAotICAgIHZvaWQgc2hvd1Bv
cHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwg
ZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mLCBjb25z
dCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRl
OworICAgIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUEFMOjpU
ZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9w
dXBJdGVtPiYsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJ
bmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBoaWRlUG9wdXBNZW51KCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBjYW5jZWxUcmFja2luZygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYlBvcHVw
TWVudVByb3h5TWFjKE5TVmlldyAqLCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Jik7CiAKLSAg
ICB2b2lkIHBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgTlNGb250ICosIFdl
YkNvcmU6OlRleHREaXJlY3Rpb24pOworICAgIHZvaWQgcG9wdWxhdGUoY29uc3QgVmVjdG9yPFdl
YlBvcHVwSXRlbT4mLCBOU0ZvbnQgKiwgUEFMOjpUZXh0RGlyZWN0aW9uKTsKIAogICAgIFJldGFp
blB0cjxOU1BvcFVwQnV0dG9uQ2VsbD4gbV9wb3B1cDsKICAgICBOU1ZpZXcgKm1fd2ViVmlldzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94
eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1h
Yy5tbQppbmRleCA4ZWYzYzBkN2ZhNzVmMjJkYjlhMTRkMjA4ZGNlZTc3ZDY5OWNmNGNjLi41NGU3
YjUxZDc1ZmRmYjZiYjdkMDQ5ODE5YmFiYjU2YzY5MGZkOTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCkBAIC01NSw3ICs1
NSw3IEBAIFdlYlBvcHVwTWVudVByb3h5TWFjOjp+V2ViUG9wdXBNZW51UHJveHlNYWMoKQogICAg
ICAgICBbbV9wb3B1cCBzZXRDb250cm9sVmlldzpuaWxdOwogfQogCi12b2lkIFdlYlBvcHVwTWVu
dVByb3h5TWFjOjpwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIE5T
Rm9udCAqZm9udCwgVGV4dERpcmVjdGlvbiBtZW51VGV4dERpcmVjdGlvbikKK3ZvaWQgV2ViUG9w
dXBNZW51UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVt
cywgTlNGb250ICpmb250LCBQQUw6OlRleHREaXJlY3Rpb24gbWVudVRleHREaXJlY3Rpb24pCiB7
CiAgICAgaWYgKG1fcG9wdXApCiAgICAgICAgIFttX3BvcHVwIHJlbW92ZUFsbEl0ZW1zXTsKQEAg
LTc1LDkgKzc1LDkgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3Qg
VmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBOU0ZvbnQgKmYKICAgICAgICAgICAgIE5TTWVu
dUl0ZW0gKm1lbnVJdGVtID0gW21fcG9wdXAgbGFzdEl0ZW1dOwogCiAgICAgICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaFN0eWxlID0gYWRvcHROUyhb
W05TUGFyYWdyYXBoU3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV0pOwot
ICAgICAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBpdGVtc1tp
XS5tX3RleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAg
ICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gaXRlbXNbaV0ubV90ZXh0
RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0aW9u
TGVmdFRvUmlnaHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgICAg
IFtwYXJhZ3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjp3cml0aW5nRGlyZWN0aW9u
XTsKLSAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6bWVudVRleHREaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNUZXh0QWxpZ25tZW50TGVmdCA6IE5TVGV4
dEFsaWdubWVudFJpZ2h0XTsKKyAgICAgICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1l
bnQ6bWVudVRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1RleHRB
bGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHRdOwogICAgICAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKICAgICAgICAgICAgICAg
ICBwYXJhZ3JhcGhTdHlsZS5nZXQoKSwgTlNQYXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWUsCiAg
ICAgICAgICAgICAgICAgZm9udCwgTlNGb250QXR0cmlidXRlTmFtZSwKQEAgLTk5LDcgKzk5LDcg
QEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVjdG9yPFdlYlBv
cHVwSXRlbT4mIGl0ZW1zLCBOU0ZvbnQgKmYKICAgICB9CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51
UHJveHlNYWM6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2Vi
UG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgZGF0YSwgaW50
MzJfdCBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVw
TWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
biwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0
ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEsIGludDMyX3Qgc2VsZWN0ZWRJ
bmRleCkKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdl
OjpDYW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKICAgICBOU0ZvbnQgKmZvbnQ7CkBA
IC0xMjMsMTAgKzEyMywxMCBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5TWFjOjpzaG93UG9wdXBN
ZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24gdGV4dAogCiAgICAgW21fcG9w
dXAgYXR0YWNoUG9wVXBXaXRoRnJhbWU6cmVjdCBpblZpZXc6bV93ZWJWaWV3XTsKICAgICBbbV9w
b3B1cCBzZWxlY3RJdGVtQXRJbmRleDpzZWxlY3RlZEluZGV4XTsKLSAgICBbbV9wb3B1cCBzZXRV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1Vz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW21fcG9wdXAgc2V0
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQg
OiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICBOU01l
bnUgKm1lbnUgPSBbbV9wb3B1cCBtZW51XTsKLSAgICBbbWVudSBzZXRVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW21lbnUgc2V0VXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBi
b3Jyb3dlZCBmcm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUu
CiAgICAgY29uc3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEzOwpAQCAtMTQxLDE4
ICsxNDEsMTggQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVwTWVudShjb25z
dCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uIHRleHQKICAgICAgICAgaWYgKHRpdGxlRnJh
bWUuc2l6ZS53aWR0aCA8PSAwIHx8IHRpdGxlRnJhbWUuc2l6ZS5oZWlnaHQgPD0gMCkKICAgICAg
ICAgICAgIHRpdGxlRnJhbWUgPSByZWN0OwogICAgICAgICBmbG9hdCB2ZXJ0aWNhbE9mZnNldCA9
IHJvdW5kZigoTlNNYXhZKHJlY3QpIC0gTlNNYXhZKHRpdGxlRnJhbWUpKSArIE5TSGVpZ2h0KHRp
dGxlRnJhbWUpKSArIDE7Ci0gICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUikKKyAgICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIpCiAgICAgICAgICAgICBsb2NhdGlvbiA9IE5TTWFrZVBvaW50KE5TTWluWChyZWN0KSAr
IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0LCBOU01heFkocmVjdCkgLSB2ZXJ0aWNhbE9mZnNldCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhY
KHJlY3QpIC0gcG9wT3Zlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShyZWN0KSAtIHZlcnRpY2Fs
T2Zmc2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01pblgo
cmVjdCkgKyBwb3BVbmRlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShyZWN0KSArIHBvcFVuZGVy
VmVydGljYWxBZGp1c3QpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9IE5T
TWFrZVBvaW50KE5TTWF4WChyZWN0KSAtIHBvcFVuZGVySG9yaXpvbnRhbEFkanVzdCwgTlNNYXhZ
KHJlY3QpICsgcG9wVW5kZXJWZXJ0aWNhbEFkanVzdCk7CiAgICAgfQogICAgIFJldGFpblB0cjxO
U1ZpZXc+IGR1bW15VmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
cmVjdF0pOwotICAgIFtkdW1teVZpZXcuZ2V0KCkgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbjp0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uUmlnaHRUb0xlZnRdOworICAgIFtkdW1teVZpZXcuZ2V0KCkgc2V0VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8g
TlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAgICAgW21fd2ViVmlldyBhZGRTdWJ2aWV3
OmR1bW15Vmlldy5nZXQoKV07CiAgICAgbG9jYXRpb24gPSBbZHVtbXlWaWV3IGNvbnZlcnRQb2lu
dDpsb2NhdGlvbiBmcm9tVmlldzptX3dlYlZpZXddOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQueGNzY2hl
bWUgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1l
cy9XZWJLaXQueGNzY2hlbWUKaW5kZXggNjEwMzliMWM3MTczOGYzMjMzZGI4YjM1OTg0M2M0NGM4
M2VmOWM5Zi4uMjE4ZGIyYjM3Njk5MGM0NThiNWU5ODNiMTVkODJmOWRjNGEzMTg2YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVt
ZXMvV2ViS2l0Lnhjc2NoZW1lCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai94
Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYktpdC54Y3NjaGVtZQpAQCAtMzEsNyArMzEsNyBAQAog
ICAgICAgPC9UZXN0YWJsZXM+CiAgICA8L1Rlc3RBY3Rpb24+CiAgICA8TGF1bmNoQWN0aW9uCi0g
ICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFzZSIKKyAgICAgIGJ1aWxkQ29uZmlndXJh
dGlvbiA9ICJEZWJ1ZyIKICAgICAgIHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyID0gIlhjb2Rl
LkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCIgogICAgICAgc2VsZWN0ZWRMYXVuY2hl
cklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCiAg
ICAgICBsYXVuY2hTdHlsZSA9ICIwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkuY3BwCmluZGV4IDMyYTM0MmRiZmJkZmE3ZjBjMzliYzYzNmE0NzkyMDMxYWUxNzc0
MDguLmYxMTJiMzM5NmY3YmZhNjRmYmVlMTVmZDU1YmEyNWQyZDI0ZDgyZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKQEAgLTIwMCw3ICsyMDAsNyBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbAogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlSWRlbnRp
Zmllciwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7
IGZpbHRlciB9KSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9k
ZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCiB7CiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNw
bGF5TGlzdDo6RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2Nh
bEFuY2hvciwgbW9kZSB9KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaAppbmRleCA2Zjc4MDlkNWVlZTMwMmQyMjE5MzZjYTA1M2I4NzM5NGNiYTQ3ZTUzLi5m
M2I5NWMxNTQ2MjUwOTkxMjNhYjE1OTZhMjNmZWVlMjNlYmNmOTc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlY29yZEJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSkg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJD
b3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhz
KGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBQQUw6OkZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdl
YkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCmluZGV4IDEzODI0ZmYxNmJlMWY1NTJkZTk4MDBmZDNiNjY5YzhkZGI3MzliN2QuLjYy
MTBiYjcwZWM1ZDMzZWFjMjFjY2ZlZTg4ZmI4OGNhMjk4YzVkODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCkBAIC03MTEsNyArNzExLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnVuYXZhaWxh
YmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJFbWIKICAgICBV
TlVTRURfUEFSQU0ocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pOwogfQogCi12b2lkIFdlYkNo
cm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYg
aGl0VGVzdFJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29s
VGlwLCBUZXh0RGlyZWN0aW9uKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIHVuc2lnbmVkIG1v
ZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgUEFMOjpUZXh0RGlyZWN0aW9uKQog
ewogICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gdXNlckRhdGE7CiAKQEAgLTcyNSw3ICs3MjUsNyBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdAogCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eFRpdGxlTGVuZ3RoID0gMTAwMDsgLy8gQ2xvc2VzdCBwb3dlciBvZiAxMCBhYm92ZSB0aGUgVzND
IHJlY29tbWVuZGF0aW9uIGZvciBUaXRsZSBsZW5ndGguCiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpwcmludChGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQor
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lJiBmcmFtZSwgY29uc3QgUEFMOjpTdHJp
bmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJG
cmFtZTo6ZnJvbUNvcmVGcmFtZShmcmFtZSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAppbmRleCBjYjIxNDcwYTEwZGM0NTM0NDlhMjFjMzc1ZTY4M2VkZWZjMmFlMWE4
Li4zZmM3ODFiMzcxNDQ1YTczYWIwNjQzNjM2YTAxOGFlZDUwZDc0MTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCkBAIC0xNDEsOSArMTQxLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFVuYXZh
aWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0
OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmluYWw7CiAgICAgdm9pZCB1bmF2
YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViQ29yZTo6RWxlbWVudCYsIFdlYkNvcmU6OlJl
bmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmlu
YWw7CiAKLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmIHRvb2xU
aXAsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pIGZpbmFsOworICAgIHZvaWQgbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlm
aWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgUEFMOjpUZXh0RGlyZWN0aW9uKSBmaW5h
bDsKIAotICAgIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpTdHJp
bmdXaXRoRGlyZWN0aW9uJikgZmluYWw7CisgICAgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSYs
IGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFsOwogCiAgICAgdm9pZCBleGNl
ZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
TmFtZSwgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmNwcAppbmRleCA4MWUzNzllMzNkMWE5YWNkYzg2ZWY1YzRiZTIxYTcyNjBkOTRkNDhlLi5mYTRl
NWRjYTE2YmE2MmUxODdhOWU5MzIzYTcyMzhjNTJlMWQyYjZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmNwcApAQCAtNDgxLDExICs0ODEsMTEgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxs
QmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKICAgICBtX3BhZ2UtPmluamVj
dGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZFBlcmZvcm1BY3Rpb25JblRleHRGaWVsZChtX3Bh
Z2UsIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLCB0b0lucHV0RmllbGRBY3Rp
b24oV0tJbnB1dEZpZWxkQWN0aW9uVHlwZUluc2VydERlbGV0ZSksIHdlYkZyYW1lKTsKIH0KIAot
Ym9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0
aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUgdHlwZSkgY29uc3QKK2Jvb2wgV2ViRWRpdG9y
Q2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6OlRleHRD
aGVja2luZ1R5cGUgdHlwZSkgY29uc3QKIHsKICAgICAvLyBUaGlzIHByZXZlbnRzIGVyYXNpbmcg
c3BlbGxpbmcgbWFya2VycyBvbiBPUyBYIExpb24gb3IgbGF0ZXIgdG8gbWF0Y2ggQXBwS2l0IG9u
IHRoZXNlIE1hYyBPUyBYIHZlcnNpb25zLgogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJldHVy
biB0eXBlICE9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOworICAgIHJldHVybiB0eXBlICE9
IFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TSh0eXBlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUxOCw3ICs1MTgsNyBAQCBTdHJpbmcgV2Vi
RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNv
cmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50KiBiYWRHcmFtbWFyTG9jYXRp
b24sIGludCogYmFkR3JhbW1hckxlbmd0aCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dy
YW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxQQUw6OkdyYW1tYXJEZXRhaWw+
JiBncmFtbWFyRGV0YWlscywgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1h
ckxlbmd0aCkKIHsKICAgICBpbnQzMl90IHJlc3VsdExvY2F0aW9uID0gLTE7CiAgICAgaW50MzJf
dCByZXN1bHRMZW5ndGggPSAwOwpAQCAtNTM3LDE2ICs1MzcsMTYgQEAgc3RhdGljIHVpbnQ2NF90
IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgY3VycmUKIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3Ry
aW5nVmlldyBzdHJpbmdWaWV3LCBPcHRpb25TZXQ8V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZT4g
Y2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikK
K1ZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE9wdGlvblNldDxQQUw6OlRleHRD
aGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pCiB7Ci0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsK
KyAgICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgbV9wYWdl
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1RleHRPZlBhcmFncmFwaChz
dHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgY2hlY2tpbmdUeXBlcywgaW5zZXJ0
aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKSksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBseShyZXN1bHRzKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKICNlbmRpZgogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3ZvaWQgV2ViRWRp
dG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5n
JiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBQQUw6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRh
aWwpCiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVNw
ZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWls
KSk7CiB9CkBAIC01NzMsNyArNTczLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNz
ZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXgKICAgICBt
X3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3Jk
KHdvcmQsIGNvbnRleHQsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVu
dFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZDo6
UmVwbHkoZ3Vlc3NlcykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoVGV4dENoZWNraW5nUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQQUw6OlRleHRDaGVja2luZ1JlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7
CiAgICAgYXV0byByZXF1ZXN0SUQgPSBUZXh0Q2hlY2tlclJlcXVlc3RJRDo6Z2VuZXJhdGUoKTsK
ICAgICBtX3BhZ2UtPmFkZFRleHRDaGVja2luZ1JlcXVlc3QocmVxdWVzdElELCByZXF1ZXN0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAppbmRleCA1MDZkOWY1NDEzOGQzN2NiNGM2NGVkNDYwZjU5YTVjMjhm
ZTUyMmE2Li5mNDk5NzFkY2YyNTNlY2VlMzJhYjJkOTM2Yzg3YzM0ZGFmMzQxNTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCkBAIC0xNTAsMjUgKzE1MCwyNSBAQCBwcml2YXRlOgogCiAgICAgVGV4dENo
ZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgZmluYWwgeyByZXR1cm4gdGhpczsgfQogCi0gICAg
Ym9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdUeXBlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZEVyYXNlTWFya2Vyc0Fm
dGVyQ2hhbmdlU2VsZWN0aW9uKFBBTDo6VGV4dENoZWNraW5nVHlwZSkgY29uc3QgZmluYWw7CiAg
ICAgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpIGZpbmFsOwog
ICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIHZvaWQgY2hlY2tT
cGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
KiBtaXNzcGVsbGluZ0xlbmd0aCkgZmluYWw7CiAgICAgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpIGZp
bmFsOwotICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFk
R3JhbW1hckxlbmd0aCkgZmluYWw7CisgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0
aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIGZpbmFsOwogCiAjaWYgVVNFKFVOSUZJRURfVEVY
VF9DSEVDS0lORykKLSAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVj
a1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBPcHRpb25TZXQ8V2ViQ29yZTo6VGV4dENoZWNr
aW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYg
Y3VycmVudFNlbGVjdGlvbikgZmluYWw7CisgICAgVmVjdG9yPFBBTDo6VGV4dENoZWNraW5nUmVz
dWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBPcHRpb25TZXQ8UEFMOjpUZXh0
Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKICNlbmRpZgogCi0gICAgdm9pZCB1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6
R3JhbW1hckRldGFpbCYpIGZpbmFsOworICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFBBTDo6R3JhbW1hckRldGFpbCYpIGZpbmFs
OwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKICAgICB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykgZmluYWw7CiAg
ICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgZmluYWw7CiAgICAgdm9pZCBnZXRHdWVzc2Vz
Rm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3Qg
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmlu
Zz4mIGd1ZXNzZXMpIGZpbmFsOwogICAgIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBm
aW5hbDsKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoV2ViQ29yZTo6RWxlbWVudCopIGZp
bmFsOwotICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24pIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUEFMOjpUZXh0
Q2hlY2tpbmdSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbikgZmluYWw7CiAKICNpZiBQTEFURk9STShHVEspCiAgICAgYm9vbCBzaG91bGRT
aG93VW5pY29kZU1lbnUoKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmlu
ZGV4IDRiZGJiY2NkM2ZiYzYyMGUwNzU0MTA1Y2VhMDllZGRmMDUxMjBiNmIuLmYwY2NlNjU2ZjA5
ZTJhODdkMGUyYTZmYTY1NmI0OTgwNTY2MzdlZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcApAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogCiBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heFRpdGxlTGVuZ3RoID0gMTAwMDsgLy8gQ2xvc2VzdCBwb3dlciBvZiAxMCBhYm92ZSB0
aGUgVzNDIHJlY29tbWVuZGF0aW9uIGZvciBUaXRsZSBsZW5ndGguCiAKLXZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJl
Y3Rpb24mIHRpdGxlKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNl
aXZlVGl0bGUoY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICBX
ZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIGlmICghd2ViUGFnZSkKQEAg
LTE0NjcsNyArMTQ2Nyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUNhY2hl
ZERvY3VtZW50TG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyJiBsCiAgICAgbV9mcmFtZS0+
cGFnZSgpLT51cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihzdGF0aWNfY2FzdDxXZWJEb2N1bWVu
dExvYWRlciY+KGxvYWRlciksICptX2ZyYW1lLT5jb3JlRnJhbWUoKSk7CiB9CiAKLXZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRp
dGxlLCBjb25zdCBVUkwmIHVybCkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxl
KGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUsIGNvbnN0IFVSTCYgdXJsKQog
ewogICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCF3ZWJQ
YWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCBiYjUyOWQzYWVjNGUyYzc1ZjFh
N2RlOTFiMTBiNTU4MmQ0NTIyYjQyLi5lZjk4OGEzNTBlMDZiZjgzM2QxM2EzZmI2NGYyZTE3Zjhh
OTc2ODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtMTE0LDcgKzExNCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgpIGZpbmFs
OwogICAgIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKSBmaW5hbDsKICAgICB2b2lkIGRpc3BhdGNo
RGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSBmaW5hbDsKLSAgICB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZVRpdGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbDsKKyAg
ICB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYpIGZpbmFsOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6SGFzSW5zZWN1cmVDb250ZW50Piwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpV
c2VkTGVnYWN5VExTPikgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25h
bExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OldpbGxDb250aW51
ZUxvYWRpbmcpIGZpbmFsOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWw7CkBAIC0xOTksNyArMTk5LDcgQEAgcHJpdmF0ZToK
ICAgICBSZWY8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVE
YXRhJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcihXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRUaXRsZShjb25zdCBXZWJD
b3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiwgY29uc3QgVVJMJikgZmluYWw7CisgICAgdm9pZCBz
ZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBVUkwmKSBmaW5h
bDsKICAgICAKICAgICBTdHJpbmcgdXNlckFnZW50KGNvbnN0IFVSTCYpIGNvbnN0IGZpbmFsOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggZWI1NGYxOTZk
M2NjN2IzMjYwMTRkMGQ4YWQxNzNjYjlhZTM3NDY4NC4uYzM0MzBiZmZhMzkzMGFhNmU1MGEyNmI3
NDJiOGM2NDU5ODhiOWEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eS5tbQpAQCAtODksNyArODksNyBAQCBzdGQ6Om9wdGlvbmFsPFRleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eTo6UmFuZ2VBbmRPZmZzZXQ+IFRleHRDaGVja2luZ0NvbnRyb2xsZQogICAgIGludDY0
X3QgYWRqdXN0ZWRTdGFydExvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZS5zdGFydCwg
c2VsZWN0aW9uUmFuZ2Uuc3RhcnQgfSkgKyBvZmZzZXQ7CiAgICAgaWYgKGFkanVzdGVkU3RhcnRM
b2NhdGlvbiA8IDApCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYXV0byBhZGp1
c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlID0gQ2hhcmFjdGVyUmFuZ2UgeyBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oYWRqdXN0ZWRTdGFydExvY2F0aW9uKSwgbGVuZ3RoIH07CisgICAgYXV0byBh
ZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlID0gUEFMOjpDaGFyYWN0ZXJSYW5nZSB7IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihhZGp1c3RlZFN0YXJ0TG9jYXRpb24pLCBsZW5ndGggfTsKIAog
ICAgIHJldHVybiB7IHsgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVj
dGlvbkNoYXJhY3RlclJhbmdlKSwgYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZS5sb2Nh
dGlvbiB9IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDRhZDY3N2EzZDA2YjJiYzEzMDllYjk1ZWY2NDVkOGI2ZmI1NjdiZmUuLjIyNjI3
NjZlYmQ1ODgwNWU2ZWQ1MzVhM2E4YTNiNGI0M2U3MzIwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zOTY1LDcgKzM5NjUsNyBAQCB2b2lk
IFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0
b3JlKQogICAgIHNldHRpbmdzLnNldFZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKHJl
cXVpcmVzVXNlckdlc3R1cmVGb3JNZWRpYSB8fCBzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2Vi
UHJlZmVyZW5jZXNLZXk6OnJlcXVpcmVzVXNlckdlc3R1cmVGb3JWaWRlb1BsYXliYWNrS2V5KCkp
KTsKICAgICBzZXR0aW5ncy5zZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShyZXF1
aXJlc1VzZXJHZXN0dXJlRm9yTWVkaWEgfHwgc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlBy
ZWZlcmVuY2VzS2V5OjpyZXF1aXJlc1VzZXJHZXN0dXJlRm9yQXVkaW9QbGF5YmFja0tleSgpKSk7
CiAgICAgc2V0dGluZ3Muc2V0VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeShzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5PihzdG9yZS5nZXRVSW50MzJW
YWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6dXNlckludGVyZmFjZURpcmVjdGlvblBvbGlj
eUtleSgpKSkpOwotICAgIHNldHRpbmdzLnNldFN5c3RlbUxheW91dERpcmVjdGlvbihzdGF0aWNf
Y2FzdDxUZXh0RGlyZWN0aW9uPihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6c3lzdGVtTGF5b3V0RGlyZWN0aW9uS2V5KCkpKSk7CisgICAgc2V0dGluZ3Muc2V0
U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4oc3Rv
cmUuZ2V0VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnN5c3RlbUxheW91dERp
cmVjdGlvbktleSgpKSkpOwogICAgIHNldHRpbmdzLnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3Mo
c3RhdGljX2Nhc3Q8UnVudGltZUZsYWdzPihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQ
cmVmZXJlbmNlc0tleTo6amF2YVNjcmlwdFJ1bnRpbWVGbGFnc0tleSgpKSkpOwogICAgIHNldHRp
bmdzLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShzdGF0aWNfY2FzdDxTdG9yYWdlQmxvY2tpbmdQ
b2xpY3k+KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzdG9y
YWdlQmxvY2tpbmdQb2xpY3lLZXkoKSkpKTsKICAgICBzZXR0aW5ncy5zZXRGcmFtZUZsYXR0ZW5p
bmcoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpmcmFtZUZsYXR0
ZW5pbmdFbmFibGVkS2V5KCkpID8gV2ViQ29yZTo6RnJhbWVGbGF0dGVuaW5nOjpGdWxseUVuYWJs
ZWQgOiBXZWJDb3JlOjpGcmFtZUZsYXR0ZW5pbmc6OkRpc2FibGVkKTsKQEAgLTYwMjEsNyArNjAy
MSw3IEBAIHZvaWQgV2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVu
c2lnbmVkIGNoYXJhY3RlckNvdW50KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiByb290
Tm9kZSA9IHN1cnJvdW5kaW5nUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9v
dE5vZGUoKTsKLSAgICBhdXRvIGNoYXJhY3RlclJhbmdlID0gV2ViQ29yZTo6Q2hhcmFjdGVyUmFu
Z2UoV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoKnN1cnJvdW5kaW5nUmFuZ2UpICsgb2Zmc2V0LCBj
aGFyYWN0ZXJDb3VudCk7CisgICAgYXV0byBjaGFyYWN0ZXJSYW5nZSA9IFBBTDo6Q2hhcmFjdGVy
UmFuZ2UoV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoKnN1cnJvdW5kaW5nUmFuZ2UpICsgb2Zmc2V0
LCBjaGFyYWN0ZXJDb3VudCk7CiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMocm9vdE5vZGUpLCBjaGFy
YWN0ZXJSYW5nZSk7CiAKICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0
aW9uQ2hhbmdlcyh0cnVlKTsKQEAgLTYzNjgsMTQgKzYzNjgsMTQgQEAgYm9vbCBXZWJQYWdlOjpj
YW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgRnVuY3Rpb248Ym9v
bChjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJQYWdlOjphZGRUZXh0Q2hl
Y2tpbmdSZXF1ZXN0KFRleHRDaGVja2VyUmVxdWVzdElEIHJlcXVlc3RJRCwgUmVmPFRleHRDaGVj
a2luZ1JlcXVlc3Q+JiYgcmVxdWVzdCkKK3ZvaWQgV2ViUGFnZTo6YWRkVGV4dENoZWNraW5nUmVx
dWVzdChUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIFJlZjxQQUw6OlRleHRDaGVja2lu
Z1JlcXVlc3Q+JiYgcmVxdWVzdCkKIHsKICAgICBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0
TWFwLmFkZChyZXF1ZXN0SUQsIFdURk1vdmUocmVxdWVzdCkpOwogfQogCi12b2lkIFdlYlBhZ2U6
OmRpZEZpbmlzaENoZWNraW5nVGV4dChUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIGNv
bnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHQpCit2b2lkIFdlYlBhZ2U6OmRp
ZEZpbmlzaENoZWNraW5nVGV4dChUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQsIGNvbnN0
IFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkKIHsKLSAgICBSZWZQdHI8
VGV4dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ1RleHRDaGVja2luZ1JlcXVl
c3RNYXAudGFrZShyZXF1ZXN0SUQpOworICAgIFJlZlB0cjxQQUw6OlRleHRDaGVja2luZ1JlcXVl
c3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdSZXF1ZXN0TWFwLnRha2UocmVxdWVz
dElEKTsKICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM4NCw3ICs2
Mzg0LDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRGaW5pc2hDaGVja2luZ1RleHQoVGV4dENoZWNrZXJS
ZXF1ZXN0SUQgcmVxdWVzdElELCBjb25zdCBWZWN0b3IKIAogdm9pZCBXZWJQYWdlOjpkaWRDYW5j
ZWxDaGVja2luZ1RleHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElEKQogewotICAgIFJl
ZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gbV9wZW5kaW5nVGV4dENoZWNraW5n
UmVxdWVzdE1hcC50YWtlKHJlcXVlc3RJRCk7CisgICAgUmVmUHRyPFBBTDo6VGV4dENoZWNraW5n
UmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ1RleHRDaGVja2luZ1JlcXVlc3RNYXAudGFrZShy
ZXF1ZXN0SUQpOwogICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNTFlYmI1MWM2ZjMyODIy
Y2ExYzM1OWY2MWY5MTdhOTE1NDI1OTAzNi4uOTkxMjgzYWY1MzFiYjRiNjUwYWM2Mzc4YmI5MTMz
OTJjMGFmMTA3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aApAQCAtMTc2LDYgKzE3NiwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIGVudW0gY2xhc3MgQ3JpdGlj
YWwgOiB1aW50OF90OwogfQogCituYW1lc3BhY2UgUEFMIHsKK2NsYXNzIFRleHRDaGVja2luZ1Jl
cXVlc3Q7CitzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OworfQorCiBuYW1lc3BhY2UgQVBJIHsK
IGNsYXNzIEFycmF5OwogfQpAQCAtMjE4LDcgKzIyMyw2IEBAIGNsYXNzIFNlbGVjdGlvbkRhdGE7
CiBjbGFzcyBTZWxlY3Rpb25HZW9tZXRyeTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN1
YnN0aXR1dGVEYXRhOwotY2xhc3MgVGV4dENoZWNraW5nUmVxdWVzdDsKIGNsYXNzIFZpc2libGVQ
b3NpdGlvbjsKIAogZW51bSBTeW50aGV0aWNDbGlja1R5cGUgOiBpbnQ4X3Q7CkBAIC0yNTQsNyAr
MjU4LDYgQEAgc3RydWN0IE1lZGlhVXNhZ2VJbmZvOwogc3RydWN0IFByb21pc2VkQXR0YWNobWVu
dEluZm87CiBzdHJ1Y3QgUmVxdWVzdFN0b3JhZ2VBY2Nlc3NSZXN1bHQ7CiBzdHJ1Y3QgUnVuSmF2
YVNjcmlwdFBhcmFtZXRlcnM7Ci1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owogc3RydWN0IFRl
eHRSZWNvZ25pdGlvblJlc3VsdDsKIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50czsKIApAQCAtMTE3
Miw4ICsxMTc1LDggQEAgcHVibGljOgogICAgIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0
cmluZyYgTUlNRVR5cGUpIGNvbnN0OwogICAgIGJvb2wgY2FuU2hvd1Jlc3BvbnNlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsKIAotICAgIHZvaWQgYWRkVGV4dENoZWNr
aW5nUmVxdWVzdChUZXh0Q2hlY2tlclJlcXVlc3RJRCwgUmVmPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1JlcXVlc3Q+JiYpOwotICAgIHZvaWQgZGlkRmluaXNoQ2hlY2tpbmdUZXh0KFRleHRDaGVja2Vy
UmVxdWVzdElELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYpOwor
ICAgIHZvaWQgYWRkVGV4dENoZWNraW5nUmVxdWVzdChUZXh0Q2hlY2tlclJlcXVlc3RJRCwgUmVm
PFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdD4mJik7CisgICAgdm9pZCBkaWRGaW5pc2hDaGVja2lu
Z1RleHQoVGV4dENoZWNrZXJSZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxQQUw6OlRleHRDaGVja2lu
Z1Jlc3VsdD4mKTsKICAgICB2b2lkIGRpZENhbmNlbENoZWNraW5nVGV4dChUZXh0Q2hlY2tlclJl
cXVlc3RJRCk7CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCkBAIC0xODUxLDcgKzE4NTQs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZENoYW5nZVVJKFdlYkNvcmU6
OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEKTsKICAgICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRI
aWRlVUkoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5SUQpOwogCi0gICAgdm9pZCBo
YW5kbGVBY2NlcHRlZENhbmRpZGF0ZShXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQpOworICAg
IHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQpOwog
I2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTE5NjMsNyArMTk2Niw3IEBAIHByaXZh
dGU6CiAgICAgSGFzaFNldDxQbHVnaW5WaWV3Kj4gbV9wbHVnaW5WaWV3czsKICAgICBib29sIG1f
aGFzU2VlblBsdWdpbiB7IGZhbHNlIH07CiAKLSAgICBIYXNoTWFwPFRleHRDaGVja2VyUmVxdWVz
dElELCBSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4+IG1fcGVuZGluZ1RleHRD
aGVja2luZ1JlcXVlc3RNYXA7CisgICAgSGFzaE1hcDxUZXh0Q2hlY2tlclJlcXVlc3RJRCwgUmVm
UHRyPFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdD4+IG1fcGVuZGluZ1RleHRDaGVja2luZ1JlcXVl
c3RNYXA7CiAKICAgICBib29sIG1fdXNlRml4ZWRMYXlvdXQgeyBmYWxzZSB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpp
bmRleCA2OGY5MWNkMDQyNmViNGMwMjU5ZmI3Y2Q3NWYzZjViOGZlOTcxNTkzLi4xNzNiNjg1ZDE4
NDY1MDkzMWYxZWU5ZWNiYTNiNTk1MWNmMDg3NTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTM2Niw3ICszNjYs
NyBAQCBHZW5lcmF0ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWludDhfdCBXZWJLaXQ6
OlN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZQogICAgICMgU3BlbGxpbmcgYW5kIGdyYW1tYXIu
CiAgICAgQWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgQ2hhbmdlU3BlbGxpbmdUb1dvcmQoU3RyaW5nIHdvcmQpCi0gICAgRGlkRmluaXNoQ2hl
Y2tpbmdUZXh0KFdlYktpdDo6VGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHQpCisgICAgRGlkRmluaXNoQ2hlY2tp
bmdUZXh0KFdlYktpdDo6VGV4dENoZWNrZXJSZXF1ZXN0SUQgcmVxdWVzdElELCBWZWN0b3I8UEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdCkKICAgICBEaWRDYW5jZWxDaGVja2luZ1RleHQo
V2ViS2l0OjpUZXh0Q2hlY2tlclJlcXVlc3RJRCByZXF1ZXN0SUQpCiAjaWYgVVNFKEFQUEtJVCkK
ICAgICBVcHBlcmNhc2VXb3JkKCkKQEAgLTUxMyw3ICs1MTMsNyBAQCBHZW5lcmF0ZVN5bnRoZXRp
Y0VkaXRpbmdDb21tYW5kKGVudW06dWludDhfdCBXZWJLaXQ6OlN5bnRoZXRpY0VkaXRpbmdDb21t
YW5kVHlwZQogICAgIERhdGFEZXRlY3RvcnNEaWRDaGFuZ2VVSShXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6UGFnZU92ZXJsYXlJRCBwYWdlT3ZlcmxheSkKICAgICBEYXRhRGV0ZWN0b3JzRGlkSGlkZVVJ
KFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheUlEIHBhZ2VPdmVybGF5KQogCi0gICAg
SGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoc3RydWN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3Vs
dCBhY2NlcHRlZENhbmRpZGF0ZSkKKyAgICBIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShzdHJ1Y3Qg
UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKICAgICBTZXRVc2VT
eXN0ZW1BcHBlYXJhbmNlKGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBjOTVj
Mzg0NjM5MjIxODRmMjU3YTcxOWRiNWJhOWE0ODI5YWVkZjFiLi5kN2NlYWRkOWQxMmI0MzFkZjA4
Y2U0OGY0ODBhYTA0ZWMyNDhhODE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMzI4MSw3ICszMjgxLDcgQEAgc3RkOjpv
cHRpb25hbDxGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uPiBXZWJQYWdlOjpmb2N1c2VkRWxlbWVu
dEluZm9ybWF0aW9uKCkKICAgICAgICAgYm9vbCBpbkZpeGVkID0gZmFsc2U7CiAgICAgICAgIHJl
bmRlcmVyLT5sb2NhbFRvQ29udGFpbmVyUG9pbnQoRmxvYXRQb2ludCgpLCBudWxscHRyLCBVc2VU
cmFuc2Zvcm1zLCAmaW5GaXhlZCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmluc2lkZUZpeGVkUG9z
aXRpb24gPSBpbkZpeGVkOwotICAgICAgICBpbmZvcm1hdGlvbi5pc1JUTCA9IHJlbmRlcmVyLT5z
dHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgaW5mb3Jt
YXRpb24uaXNSVEwgPSByZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTDsKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCkBAIC00Mzk5LDcgKzQzOTksNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldp
dGhEZWx0YShpbnQ2NF90IGxvY2F0aW9uRGVsdGEsIGludDY0X3QgbGVuZ3RoRGVsdAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBuZXdTZWxlY3Rpb25SYW5nZSA9IENoYXJhY3Rl
clJhbmdlKG5ld1NlbGVjdGlvbkxvY2F0aW9uLCBuZXdTZWxlY3Rpb25MZW5ndGgpOworICAgIGF1
dG8gbmV3U2VsZWN0aW9uUmFuZ2UgPSBQQUw6OkNoYXJhY3RlclJhbmdlKG5ld1NlbGVjdGlvbkxv
Y2F0aW9uLCBuZXdTZWxlY3Rpb25MZW5ndGgpOwogICAgIGF1dG8gdXBkYXRlZFNlbGVjdGlvblJh
bmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2UsIEFmZmluaXR5OjpEb3duc3RyZWFt
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggZDQxMjgyZmM1ZGM2
M2MzMTdlNTRiODI2MGM1N2UzNDRjYTM2ZTMwOS4uNjVmNmM2YjkzOGVkY2Q1NzZjYWZlMjUyMTBm
NmNlY2IzYzQxZWJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFdlYlBhZ2U6Omdl
dFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBj
b25zdAogICAgIH0KIH0KIAotdm9pZCBXZWJQYWdlOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCit2b2lkIFdlYlBh
Z2U6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IGFjY2Vw
dGVkQ2FuZGlkYXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZEZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCmluZGV4IDAyNjRi
NTdjMjNlMmI3Y2M4ODdiOWQ2MGEyNTZmMTc3OGEzYWI0ZmMuLmE5NWZjYzljNjFhMGI3ZTE0N2Vj
YzNhNjRiMGViZTVmMTQzZTQ3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRp
YyBOU1N0cmluZyogTlNTdHJpbmdPck5pbChTdHJpbmcgY29yZVN0cmluZykKIAogLSAoTlNTdHJp
bmcgKilfc3BlbGxpbmdUb29sVGlwCiB7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcjsKICAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVzdWx0LT5z
cGVsbGluZ1Rvb2xUaXAoZGlyKSk7CiB9CiAKQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgTlNT
dHJpbmcqIE5TU3RyaW5nT3JOaWwoU3RyaW5nIGNvcmVTdHJpbmcpCiAKIC0gKE5TU3RyaW5nICop
X3RpdGxlCiB7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IGRpcjsKICAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVzdWx0LT50aXRsZShkaXIpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvUG9w
dXBNZW51TWFjLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvUG9w
dXBNZW51TWFjLm1tCmluZGV4IDNkZWIxMjVmNzkzZDhjMjZiOGU4MGIzZjgzN2I0ZjZjMDNiZWRj
NTMuLjZmYzExZjhmYWM0OTgzODgwZTNhYzBlOGVjNzEzYTgzOGUxNGI3ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMu
bW0KQEAgLTY4LDggKzY4LDggQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICBp
ZiAoIW1fY2xpZW50LT5zaG91bGRQb3BPdmVyKCkpCiAgICAgICAgIFttX3BvcHVwIGFkZEl0ZW1X
aXRoVGl0bGU6QCIiXTsKIAotICAgIFRleHREaXJlY3Rpb24gbWVudVRleHREaXJlY3Rpb24gPSBt
X2NsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpOwotICAgIFttX3BvcHVwIHNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246bWVudVRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBO
U1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgUEFMOjpUZXh0
RGlyZWN0aW9uIG1lbnVUZXh0RGlyZWN0aW9uID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLnRleHRE
aXJlY3Rpb24oKTsKKyAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
Om1lbnVUZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGludCBz
aXplID0gbV9jbGllbnQtPmxpc3RTaXplKCk7CkBAIC05Miw4ICs5Miw4IEBAIHZvaWQgUG9wdXBN
ZW51TWFjOjpwb3B1bGF0ZSgpCiAgICAgICAgIH0KIAogICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaFN0eWxlID0gYWRvcHROUyhbW05TUGFyYWdyYXBo
U3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV0pOwotICAgICAgICBbcGFy
YWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Om1lbnVUZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUiA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodF07Ci0g
ICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gc3R5bGUudGV4dERp
cmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRU
b1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgIFtwYXJhZ3Jh
cGhTdHlsZSBzZXRBbGlnbm1lbnQ6bWVudVRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgPyBOU1RleHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHRdOwor
ICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IHN0eWxlLnRleHRE
aXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIFtw
YXJhZ3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjp3cml0aW5nRGlyZWN0aW9uXTsK
ICAgICAgICAgaWYgKHN0eWxlLmhhc1RleHREaXJlY3Rpb25PdmVycmlkZSgpKSB7CiAgICAgICAg
ICAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IHdyaXRpbmdEaXJlY3Rpb25WYWx1ZSA9IGFkb3B0TlMo
W1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhJbnRlZ2VyOndyaXRpbmdEaXJlY3Rpb24gKyBOU1dy
aXRpbmdEaXJlY3Rpb25PdmVycmlkZV0pOwpAQCAtMTQzLDE0ICsxNDMsMTQgQEAgdm9pZCBQb3B1
cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgc2VsZWN0
ZWRJbmRleCkKIAogICAgIE5TVmlldyogdmlldyA9IHYtPmRvY3VtZW50VmlldygpOwogCi0gICAg
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLnRleHRE
aXJlY3Rpb24oKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IG1fY2xp
ZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCk7CiAKICAgICBbbV9wb3B1cCBhdHRhY2hQ
b3BVcFdpdGhGcmFtZTpyIGluVmlldzp2aWV3XTsKICAgICBbbV9wb3B1cCBzZWxlY3RJdGVtQXRJ
bmRleDpzZWxlY3RlZEluZGV4XTsKLSAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW21fcG9wdXAgc2V0VXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICBOU01lbnUgKm1lbnUgPSBbbV9wb3B1
cCBtZW51XTsKLSAgICBbbWVudSBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRv
TGVmdF07CisgICAgW21lbnUgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGly
ZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdo
dFRvTGVmdF07CiAKICAgICBOU1BvaW50IGxvY2F0aW9uOwogICAgIENURm9udFJlZiBmb250ID0g
bV9jbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwpA
QCAtMTY4LDEyICsxNjgsMTIgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVj
dCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgc2VsZWN0ZWRJbmRleCkKICAgICAgICAgYXV0byBkZWZh
dWx0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJ
Rm9udFN5c3RlbSwgQ1RGb250R2V0U2l6ZShmb250KSwgbmlsKSk7CiAgICAgICAgIHZlcnRPZmZz
ZXQgKz0gQ1RGb250R2V0RGVzY2VudChmb250KSAtIENURm9udEdldERlc2NlbnQoZGVmYXVsdEZv
bnQuZ2V0KCkpOwogICAgICAgICB2ZXJ0T2Zmc2V0ID0gZm1pbmYoTlNIZWlnaHQociksIHZlcnRP
ZmZzZXQpOwotICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIp
CisgICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQog
ICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01pblgocikgKyBwb3BPdmVySG9y
aXpvbnRhbEFkanVzdCwgTlNNYXhZKHIpIC0gdmVydE9mZnNldCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhYKHIpIC0gcG9wT3Zlckhvcml6
b250YWxBZGp1c3QsIE5TTWF4WShyKSAtIHZlcnRPZmZzZXQpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYg
KHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBs
b2NhdGlvbiA9IE5TTWFrZVBvaW50KE5TTWluWChyKSArIHBvcFVuZGVySG9yaXpvbnRhbEFkanVz
dCwgTlNNYXhZKHIpICsgcG9wVW5kZXJWZXJ0aWNhbEFkanVzdCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhYKHIpIC0gcG9wVW5kZXJIb3Jp
em9udGFsQWRqdXN0LCBOU01heFkocikgKyBwb3BVbmRlclZlcnRpY2FsQWRqdXN0KTsKQEAgLTE4
Niw3ICsxODYsNyBAQCB2b2lkIFBvcHVwTWVudU1hYzo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBG
cmFtZVZpZXcqIHYsIGludCBzZWxlY3RlZEluZGV4KQogICAgIFJlZjxQb3B1cE1lbnVNYWM+IHBy
b3RlY3RvcigqdGhpcyk7CiAKICAgICBSZXRhaW5QdHI8TlNWaWV3PiBkdW1teVZpZXcgPSBhZG9w
dE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJdKTsKLSAgICBbZHVtbXlWaWV3Lmdl
dCgpIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdo
dCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbZHVt
bXlWaWV3LmdldCgpIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xl
ZnRdOwogICAgIFt2aWV3IGFkZFN1YnZpZXc6ZHVtbXlWaWV3LmdldCgpXTsKICAgICBsb2NhdGlv
biA9IFtkdW1teVZpZXcgY29udmVydFBvaW50OmxvY2F0aW9uIGZyb21WaWV3OnZpZXddOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAppbmRleCAxYTFmNDc4YWRmYmNiYmMzMDY1MDIyOTk5YTBmOGUzMTcx
NTFmMDQ0Li4zMjJkOWQzM2I2MzcxNzAyODhhNjU5MWRlYmQxNDZlMWVkNzU3MjA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaApAQCAtMTE4LDExICsxMTgsMTEgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2hv
dWxkVW5hdmFpbGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0b24oV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCBmaW5hbDsKICAgICB2
b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50JiwgV2Vi
Q29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmll
ckZsYWdzLCBjb25zdCBTdHJpbmcmLCBQQUw6OlRleHREaXJlY3Rpb24pIGZpbmFsOwogCiAgICAg
dm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdm9pZCBwcmludChXZWJDb3Jl
OjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbDsKKyAg
ICB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgUEFMOjpTdHJpbmdXaXRoRGlyZWN0
aW9uJikgZmluYWw7CiAgICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJh
bWUmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxz
KSBmaW5hbDsKICAgICB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5l
ZWRlZCkgZmluYWw7CiAgICAgdm9pZCByZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiwgaW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKSBmaW5h
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCBkZDc2ZTQxZjJhZjBlMjFiYjUwYTM5YjI1OGU1OWEw
YzVjZGJlYWZiLi5hYjhkZWIwMzliMmYyY2Q5MjcwODAyMGQ2OTU3Y2I3OTY0YjMxOWVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tCkBAIC02MzMsNyArNjMzLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJF
bWIKICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZFBy
ZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbjopLCBraXQoJmVsZW1lbnQpKTsKIH0KIAotdm9pZCBXZWJD
aHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBU
ZXh0RGlyZWN0aW9uKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywg
Y29uc3QgU3RyaW5nJiB0b29sVGlwLCBQQUw6OlRleHREaXJlY3Rpb24pCiB7CiAgICAgYXV0byBl
bGVtZW50ID0gYWRvcHROUyhbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhp
dFRlc3RSZXN1bHQ6cmVzdWx0XSk7CiAgICAgW21fd2ViVmlldyBfbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQ6ZWxlbWVudC5nZXQoKSBtb2RpZmllckZsYWdzOm1vZGlmaWVyRmxhZ3NdOwpAQCAtNjQ3
LDcgKzY0Nyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKGNvbnN0IFN0cmlu
ZyYgdG9vbFRpcCkKICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfc2V0VG9v
bFRpcDp0b29sVGlwXTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lJiBm
cmFtZSwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
cHJpbnQoRnJhbWUmIGZyYW1lLCBjb25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mKQogewog
ICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IGtpdCgmZnJhbWUpOwogICAgIGlmIChbW21fd2ViVmll
dyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6cHJpbnRG
cmFtZTopXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNDVmN2MxZjVjYTc0ODJkNjBkOWJjNzRlZjYx
NmMzMmZkNjI2NzY0Ny4uNDQwYjIxNzg2YWRkNTc2NTgxMDc3YzQ0OTlkMzg4N2NlMTM4ZGY0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdlYkVkaXRv
ckNsaWVudChXZWJWaWV3ICopOwogICAgIHZpcnR1YWwgfldlYkVkaXRvckNsaWVudCgpOwogCi0g
ICAgdm9pZCBkaWRDaGVja1N1Y2NlZWQoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdElkZW50
aWZpZXIsIE5TQXJyYXkgKnJlc3VsdHMpOworICAgIHZvaWQgZGlkQ2hlY2tTdWNjZWVkKFBBTDo6
VGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIsIE5TQXJyYXkgKnJlc3VsdHMpOwogCiBwcml2
YXRlOgogICAgIGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkgZmluYWw7CkBAIC0xNTUs
MTQgKzE1NSwxNCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwZXJmb3JtVHdvU3RlcERyb3AoV2Vi
Q29yZTo6RG9jdW1lbnRGcmFnbWVudCYsIGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJiBkZXN0
aW5hdGlvbiwgYm9vbCBpc01vdmUpIGZpbmFsOwogICAgIAotICAgIGJvb2wgc2hvdWxkRXJhc2VN
YXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlv
bihQQUw6OlRleHRDaGVja2luZ1R5cGUpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgaWdub3JlV29y
ZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIGxlYXJuV29y
ZChjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhT
dHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5n
dGgpIGZpbmFsOwogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIGZpbmFsOwotICAgIFZlY3Rv
cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmlu
Z1ZpZXcsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVz
LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5h
bDsKLSAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgZmluYWw7CisgICAgdm9pZCBjaGVj
a0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYs
IGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIGZpbmFsOwor
ICAgIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
U3RyaW5nVmlldywgT3B0aW9uU2V0PFBBTDo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBl
cywgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgZmlu
YWw7CisgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgY29uc3QgUEFMOjpHcmFtbWFyRGV0YWlsJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIHZv
aWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBmaW5hbDsKICAgICBib29sIHNwZWxsaW5nVUlJ
c1Nob3dpbmcoKSBmaW5hbDsKQEAgLTE3MCwxMiArMTcwLDEyIEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgZmluYWw7CiAgICAgdm9pZCBzZXRJbnB1dE1l
dGhvZFN0YXRlKFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKLSAgICB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmLCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIHJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIGZpbmFsOwogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29u
c3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpIGZpbmFsOwogICAgIHZvaWQgaGFuZGxlUmVx
dWVzdGVkQ2FuZGlkYXRlcyhOU0ludGVnZXIsIE5TQXJyYXk8TlNUZXh0Q2hlY2tpbmdSZXN1bHQg
Kj4gKik7Ci0gICAgdm9pZCBoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFdl
YkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCkgZmluYWw7CisgICAgdm9pZCBoYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZVdpdGhTb2Z0U3BhY2VzKFBBTDo6VGV4dENoZWNraW5nUmVzdWx0KSBmaW5hbDsK
ICNlbmRpZgogCiAgICAgdm9pZCByZWdpc3RlclVuZG9PclJlZG9TdGVwKFdlYkNvcmU6OlVuZG9T
dGVwJiwgYm9vbCBpc1JlZG8pOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHByaXZhdGU6CiAgICAgUmV0
YWluUHRyPFdlYkVkaXRvclVuZG9UYXJnZXQ+IG1fdW5kb1RhcmdldDsKICAgICBib29sIG1faGF2
ZVVuZG9SZWRvT3BlcmF0aW9ucyB7IGZhbHNlIH07CiAgICAgCi0gICAgSGFzaE1hcDxXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciwgUmVmPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1JlcXVlc3Q+PiBtX3JlcXVlc3RzSW5GbGlnaHQ7CisgICAgSGFzaE1hcDxQQUw6OlRleHRDaGVj
a2luZ1JlcXVlc3RJZGVudGlmaWVyLCBSZWY8UEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0Pj4gbV9y
ZXF1ZXN0c0luRmxpZ2h0OwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBib29sIG1f
ZGVsYXlpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0aW9ucyB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQubW0KaW5kZXggYzJjNDBkM2QyYTEzM2YyODEzNDE1NjAzNGRlNTQxNDFhNGNlOWMzMi4uNWUz
ZjkzZmNlYWQ1YTNkMjk0ZTVhZTE3YzQzMWQyZDNhOTQwYmZlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQpAQCAtODg1LDEwICs4ODUsMTAgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1Ud29T
dGVwRHJvcChEb2N1bWVudEZyYWdtZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmLAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVyYXNlTWFya2Vyc0Fm
dGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGUgdHlwZSkgY29uc3QKK2Jvb2wgV2Vi
RWRpdG9yQ2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihQQUw6
OlRleHRDaGVja2luZ1R5cGUgdHlwZSkgY29uc3QKIHsKICAgICAvLyBUaGlzIHByZXZlbnRzIGVy
YXNpbmcgc3BlbGxpbmcgbWFya2VycyBvbiBPUyBYIExpb24gb3IgbGF0ZXIgdG8gbWF0Y2ggQXBw
S2l0IG9uIHRoZXNlIE1hYyBPUyBYIHZlcnNpb25zLgotICAgIHJldHVybiB0eXBlICE9IFRleHRD
aGVja2luZ1R5cGU6OlNwZWxsaW5nOworICAgIHJldHVybiB0eXBlICE9IFBBTDo6VGV4dENoZWNr
aW5nVHlwZTo6U3BlbGxpbmc7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjppZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTkyNCw3ICs5MjQsNyBAQCBT
dHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldyB0ZXh0LCBWZWN0
b3I8R3JhbW1hckRldGFpbD4mIGRldGFpbHMsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQq
IGJhZEdyYW1tYXJMZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZT
dHJpbmcoU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8UEFMOjpHcmFtbWFyRGV0YWlsPiYgZGV0YWls
cywgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkKIHsKICAg
ICBOU0FycmF5ICpncmFtbWFyRGV0YWlsczsKICAgICBOU1JhbmdlIHJhbmdlID0gW1tOU1NwZWxs
Q2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNoZWNrR3JhbW1hck9mU3RyaW5nOnRleHQuY3Jl
YXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpIHN0YXJ0aW5nQXQ6MCBsYW5ndWFnZTpu
aWwgd3JhcDpOTyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFn
KCkgZGV0YWlsczomZ3JhbW1hckRldGFpbHNdOwpAQCAtOTM1LDcgKzkzNSw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3Rv
cjxHcmFtbWFyRGV0YWlsCiAgICAgICAgICpiYWRHcmFtbWFyTGVuZ3RoID0gcmFuZ2UubGVuZ3Ro
OwogICAgIGZvciAoTlNEaWN0aW9uYXJ5ICpkZXRhaWwgaW4gZ3JhbW1hckRldGFpbHMpIHsKICAg
ICAgICAgQVNTRVJUKGRldGFpbCk7Ci0gICAgICAgIEdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFp
bDsKKyAgICAgICAgUEFMOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7CiAgICAgICAgIE5T
VmFsdWUgKmRldGFpbFJhbmdlQXNOU1ZhbHVlID0gW2RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFt
bWFyUmFuZ2VdOwogICAgICAgICBBU1NFUlQoZGV0YWlsUmFuZ2VBc05TVmFsdWUpOwogICAgICAg
ICBBU1NFUlQoZGV0YWlsUmFuZ2VBc05TVmFsdWUucmFuZ2VWYWx1ZS5sb2NhdGlvbiAhPSBOU05v
dEZvdW5kKTsKQEAgLTk0OSwyOCArOTQ5LDI4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsCiAg
ICAgfQogfQogCi1zdGF0aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5
ICppbmNvbWluZ1Jlc3VsdHMsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5
cGVzKQorc3RhdGljIFZlY3RvcjxQQUw6OlRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5
ICppbmNvbWluZ1Jlc3VsdHMsIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNr
aW5nVHlwZXMpCiB7Ci0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAg
ICBWZWN0b3I8UEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAKICAgICBmb3IgKE5T
VGV4dENoZWNraW5nUmVzdWx0ICppbmNvbWluZ1Jlc3VsdCBpbiBpbmNvbWluZ1Jlc3VsdHMpIHsK
ICAgICAgICAgTlNUZXh0Q2hlY2tpbmdUeXBlIHJlc3VsdFR5cGUgPSBbaW5jb21pbmdSZXN1bHQg
cmVzdWx0VHlwZV07CiAgICAgICAgIEFTU0VSVChpbmNvbWluZ1Jlc3VsdC5yYW5nZS5sb2NhdGlv
biAhPSBOU05vdEZvdW5kKTsKICAgICAgICAgQVNTRVJUKGluY29taW5nUmVzdWx0LnJhbmdlLmxl
bmd0aCA+IDApOwogICAgICAgICBhdXRvIHJlc3VsdFJhbmdlID0gaW5jb21pbmdSZXN1bHQucmFu
Z2U7Ci0gICAgICAgIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKSB7
Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAgICAgcmVz
dWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKKyAgICAgICAgaWYgKHJlc3Vs
dFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgY2hlY2tpbmdUeXBlcy5jb250
YWlucyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgeworICAgICAgICAgICAgUEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBQ
QUw6OlRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdl
ID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwotICAg
ICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAm
JiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7Ci0g
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKKyAgICAgICAgICAg
IFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIE5TQXJyYXkgKmRl
dGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwotICAgICAgICAgICAgcmVz
dWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOworICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBQQUw6OlRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1
bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICpp
bmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29t
aW5nRGV0YWlsKTsKLSAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKKyAgICAg
ICAgICAgICAgICBQQUw6OkdyYW1tYXJEZXRhaWwgZGV0YWlsOwogICAgICAgICAgICAgICAgIE5T
VmFsdWUgKmRldGFpbFJhbmdlQXNOU1ZhbHVlID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktl
eTpOU0dyYW1tYXJSYW5nZV07CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbFJhbmdlQXNO
U1ZhbHVlKTsKICAgICAgICAgICAgICAgICBOU1JhbmdlIGRldGFpbE5TUmFuZ2UgPSBbZGV0YWls
UmFuZ2VBc05TVmFsdWUgcmFuZ2VWYWx1ZV07CkBAIC05ODQsMzMgKzk4NCwzMyBAQCBzdGF0aWMg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5ICppbmNvbWluZ1Jlc3VsdHMs
IE9wdGlvblNldDxUZXh0QwogICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChk
ZXRhaWwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0
KTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxp
bmsgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkgewot
ICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6TGluazsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1
bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlu
cyhQQUw6OlRleHRDaGVja2luZ1R5cGU6OkxpbmspKSB7CisgICAgICAgICAgICBQQUw6OlRleHRD
aGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlwZSA9IFBBTDo6VGV4
dENoZWNraW5nVHlwZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNvbWluZ1Jlc3VsdCBV
UkxdIGFic29sdXRlU3RyaW5nXTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90
ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1b3RlKSkgewot
ICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CisgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRh
aW5zKFBBTDo6VGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CisgICAgICAgICAgICBQQUw6OlRl
eHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQudHlwZSA9IFBBTDo6
VGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3Vs
dCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQp
OwotICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFz
aCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7Ci0g
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoOworICAgICAgICB9IGVsc2UgaWYgKHJlc3Vs
dFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5z
KFBBTDo6VGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENo
ZWNraW5nUmVzdWx0IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0
Q2hlY2tpbmdUeXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFu
Z2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVw
bGFjZW1lbnRTdHJpbmddOwogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2Vt
ZW50ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1l
bnQpKSB7Ci0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwotICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKKyAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50ICYm
IGNoZWNraW5nVHlwZXMuY29udGFpbnMoUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVu
dCkpIHsKKyAgICAgICAgICAgIFBBTDo6VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKKyAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gUEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsK
ICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVz
dWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMu
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpIHsKLSAgICAgICAgICAgIFRl
eHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMo
UEFMOjpUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkgeworICAgICAgICAgICAgUEFMOjpU
ZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBQQUw6
OlRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWlu
Z1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChy
ZXN1bHQpOwpAQCAtMTAyOSwxMyArMTAyOSwxMyBAQCBzdGF0aWMgTlNVSW50ZWdlciBpbnNlcnRp
b25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbAog
ICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOwogfQogCi1WZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1Zp
ZXcgc3RyaW5nLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY29yZUNoZWNraW5nVHlwZXMs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCitWZWN0b3I8UEFMOjpU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
U3RyaW5nVmlldyBzdHJpbmcsIE9wdGlvblNldDxQQUw6OlRleHRDaGVja2luZ1R5cGU+IGNvcmVD
aGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQog
ewogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9u
UG9pbnRLZXkgOiBAKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNl
bGVjdGlvbikpIH07CiAgICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCkuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczoobnNU
ZXh0Q2hlY2tpbmdUeXBlcyhjb3JlQ2hlY2tpbmdUeXBlcykgfCBOU1RleHRDaGVja2luZ1R5cGVP
cnRob2dyYXBoeSkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxD
aGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxMXSwgY29y
ZUNoZWNraW5nVHlwZXMpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxp
bmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29u
c3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFy
UGhyYXNlLCBjb25zdCBQQUw6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7CiAgICAg
YXV0byBkaWN0aW9uYXJ5ID0gQHsKICAgICAgICAgTlNHcmFtbWFyUmFuZ2U6IFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2VdLApAQCAtMTE1OSw3ICsxMTU5LDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZVJlcXVlc3RlZENhbmRpZGF0ZXMoTlNJbnRlZ2Vy
IHNlcXVlbmNlTnVtYmVyLCBOU0FycmEKICAgICBbbV93ZWJWaWV3IHNob3dDYW5kaWRhdGVzOmNh
bmRpZGF0ZXMgZm9yU3RyaW5nOm1fcGFyYWdyYXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3Qu
Z2V0KCkgaW5SZWN0OnJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzIGZvclNlbGVjdGVkUmFuZ2U6
bV9yYW5nZUZvckNhbmRpZGF0ZXMgdmlldzptX3dlYlZpZXcgY29tcGxldGlvbkhhbmRsZXI6bmls
XTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0
aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQordm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoUEFM
OjpUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7CiAgICAgRnJhbWUqIGZy
YW1lID0gY29yZShbbV93ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFm
cmFtZSkKQEAgLTExOTAsMTUgKzExOTAsMTUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlV2l0aFNvZnRTcGFjZXMoVGV4dENoZWNraW5nUmVzdWx0IGEKIEBp
bnRlcmZhY2UgV2ViRWRpdG9yU3BlbGxDaGVja1Jlc3BvbmRlciA6IE5TT2JqZWN0CiB7CiAgICAg
V2Vha1B0cjxXZWJFZGl0b3JDbGllbnQ+IF9jbGllbnQ7Ci0gICAgVGV4dENoZWNraW5nUmVxdWVz
dElkZW50aWZpZXIgX2lkZW50aWZpZXI7CisgICAgUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRl
bnRpZmllciBfaWRlbnRpZmllcjsKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gX3Jlc3VsdHM7CiB9
Ci0tIChpZClpbml0V2l0aENsaWVudDooV2Vha1B0cjxXZWJFZGl0b3JDbGllbnQ+KWNsaWVudCBp
ZGVudGlmaWVyOihUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllcilpZGVudGlmaWVyIHJlc3Vs
dHM6KE5TQXJyYXkgKilyZXN1bHRzOworLSAoaWQpaW5pdFdpdGhDbGllbnQ6KFdlYWtQdHI8V2Vi
RWRpdG9yQ2xpZW50PiljbGllbnQgaWRlbnRpZmllcjooUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0
SWRlbnRpZmllcilpZGVudGlmaWVyIHJlc3VsdHM6KE5TQXJyYXkgKilyZXN1bHRzOwogLSAodm9p
ZClwZXJmb3JtOwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViRWRpdG9yU3BlbGxDaGVja1Jl
c3BvbmRlcgotLSAoaWQpaW5pdFdpdGhDbGllbnQ6KFdlYWtQdHI8V2ViRWRpdG9yQ2xpZW50Pilj
bGllbnQgaWRlbnRpZmllcjooVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIpaWRlbnRpZmll
ciByZXN1bHRzOihOU0FycmF5ICopcmVzdWx0cworLSAoaWQpaW5pdFdpdGhDbGllbnQ6KFdlYWtQ
dHI8V2ViRWRpdG9yQ2xpZW50PiljbGllbnQgaWRlbnRpZmllcjooUEFMOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0SWRlbnRpZmllcilpZGVudGlmaWVyIHJlc3VsdHM6KE5TQXJyYXkgKilyZXN1bHRzCiB7
CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCkBAIC0xMjE3LDcgKzEy
MTcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRo
U29mdFNwYWNlcyhUZXh0Q2hlY2tpbmdSZXN1bHQgYQogCiBAZW5kCiAKLXZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNraW5nUmVxdWVzdElkZW50aWZpZXIgaWRl
bnRpZmllciwgTlNBcnJheSAqcmVzdWx0cykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRDaGVj
a1N1Y2NlZWQoUEFMOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBO
U0FycmF5ICpyZXN1bHRzKQogewogICAgIGF1dG8gcmVxdWVzdCA9IG1fcmVxdWVzdHNJbkZsaWdo
dC50YWtlKGlkZW50aWZpZXIpOwogICAgIEFTU0VSVChyZXF1ZXN0KTsKQEAgLTEyMzAsNyArMTIz
MCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRDaGVja1N1Y2NlZWQoVGV4dENoZWNraW5n
UmVxdWVzdElkZW50aWZpZXIgaWRlbnRpZmllciwKIAogI2VuZGlmCiAKLXZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hlY2tpbmdSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQordm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBBTDo6VGV4dENoZWNraW5nUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikK
IHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBBU1NFUlQocmVxdWVzdC5kYXRhKCku
aWRlbnRpZmllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IGEyNTk4ZjMyZmI3
NjBhN2Q4ODNjOWY0Y2VlYzE4Y2Y1OTFlYjhlYWQuLjcxNDVmZWQwMWJmNzE4NzE2NDg3ZTIwZTk2
OWNiNGJlODc4YjQ3NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtMTE2LDcgKzEx
Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpIGZpbmFs
OwogICAgIHZvaWQgZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpIGZpbmFsOwotICAg
IHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERp
cmVjdGlvbiYpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3Qg
UEFMOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERpZENv
bW1pdExvYWQoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQ+LCBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OlVzZWRMZWdhY3lUTFM+KSBmaW5hbDsKICAgICB2b2lkIGRpc3Bh
dGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwg
V2ViQ29yZTo6V2lsbENvbnRpbnVlTG9hZGluZykgZmluYWw7CiAgICAgdm9pZCBkaXNwYXRjaERp
ZEZhaWxMb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbDsKQEAgLTIwMyw3
ICsyMDMsNyBAQCBwcml2YXRlOgogICAgIFJlZjxXZWJDb3JlOjpEb2N1bWVudExvYWRlcj4gY3Jl
YXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZUNhY2hlZERv
Y3VtZW50TG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyJikgZmluYWwgeyB9CiAKLSAgICB2
b2lkIHNldFRpdGxlKGNvbnN0IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBV
UkwmKSBmaW5hbDsKKyAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFBBTDo6U3RyaW5nV2l0aERpcmVj
dGlvbiYsIGNvbnN0IFVSTCYpIGZpbmFsOwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBj
cmVhdGVGcmFtZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3du
ZXJFbGVtZW50JikgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gY3JlYXRlUGx1
Z2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCYs
IGNvbnN0IFVSTCYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IGI4NDlkMmFhYzJh
OTNmYmVlNDE3MjlmMjRhODZjZGNmNmIxZmUwMTkuLjhkYTJjM2ZlZGEyZTk4NDVmOWI1OTcwYTRj
NWIzMjE4Y2Q0MTE2ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC02NzUsNyAr
Njc1LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zp
c2lvbmFsTG9hZCgpCiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4VGl0bGVMZW5ndGgg
PSAxMDAwOyAvLyBDbG9zZXN0IHBvd2VyIG9mIDEwIGFib3ZlIHRoZSBXM0MgcmVjb21tZW5kYXRp
b24gZm9yIFRpdGxlIGxlbmd0aC4KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0
bGUpCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShj
b25zdCBQQUw6OlN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQogewogICAgIGF1dG8gdHJ1bmNh
dGVkVGl0bGUgPSB0cnVuY2F0ZUZyb21FbmQodGl0bGUsIG1heFRpdGxlTGVuZ3RoKTsKIApAQCAt
MTMyMCw3ICsxMzIwLDcgQEAgUmVmPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgV2UKICAgICByZXR1cm4gV1RG
TW92ZShsb2FkZXIpOwogfQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShj
b25zdCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwgY29uc3QgVVJMJiB1cmwp
Cit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShjb25zdCBQQUw6OlN0cmluZ1dp
dGhEaXJlY3Rpb24mIHRpdGxlLCBjb25zdCBVUkwmIHVybCkKIHsKICAgICBXZWJWaWV3KiB2aWV3
ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICAKQEAgLTE0NjUsNyArMTQ2NSw3
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UoKQogICAgIC8vIGxpa2UgdGhlIG9uZXMgdGhhdCBTYWZhcmkgdXNlcyBmb3IgYm9va21h
cmtzIGl0IGlzIHRoZSBvbmx5IHdheSB0aGUgRG9jdW1lbnRMb2FkZXIKICAgICAvLyB3aWxsIGdl
dCB0aGUgcHJvcGVyIHRpdGxlLgogICAgIGlmIChhdXRvIGRvY3VtZW50TG9hZGVyID0gW2RhdGFT
b3VyY2UgX2RvY3VtZW50TG9hZGVyXSkKLSAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldFRpdGxl
KHsgW2RhdGFTb3VyY2UgcGFnZVRpdGxlXSwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSIH0p
OworICAgICAgICBkb2N1bWVudExvYWRlci0+c2V0VGl0bGUoeyBbZGF0YVNvdXJjZSBwYWdlVGl0
bGVdLCBQQUw6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKIAogICAgIGlmIChhdXRvKiBvd25lckVs
ZW1lbnQgPSBjb3JlRnJhbWUtPm93bmVyRWxlbWVudCgpKQogICAgICAgICBjb3JlRnJhbWUtPnZp
ZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJhcnMob3duZXJFbGVtZW50LT5zY3JvbGxpbmdNb2RlKCkg
IT0gV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZTo6QWx3YXlzT2ZmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA1NjY0MmMyMjJkNmJjNTQzYWY5ZTc1OWI2
MzkzMmFhNmVkODM4Njg0Li5hMmY0NTE4ZjJkZDdmNTUzNzgxOTEwZjUzYTk0MmI2YTkwMGFhMGUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC02ODY3
LDIzICs2ODY3LDIzIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUg
KmZyYW1lLCBXZWJGaW5kT3B0aW9ucyBvcHRpb25zID0gMCkKICAgICByZXR1cm4gbmlsOwogfQog
Ci1jb25zdGV4cHIgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSBjb3JlVGV4dENoZWNraW5nVHlw
ZShOU1RleHRDaGVja2luZ1R5cGUgdHlwZSkKK2NvbnN0ZXhwciBQQUw6OlRleHRDaGVja2luZ1R5
cGUgY29yZVRleHRDaGVja2luZ1R5cGUoTlNUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiB7CiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOgot
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKICAgICBjYXNl
IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CisgICAgICAgIHJldHVybiBQQUw6OlRleHRD
aGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OwogICAgIGNhc2UgTlNUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmc6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZzsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6Ok5vbmU7
CisgICAgICAgIHJldHVybiBQQUw6OlRleHRDaGVja2luZ1R5cGU6Ok5vbmU7CiAgICAgfQogfQog
Ci1zdGF0aWMgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0IHRleHRDaGVja2luZ1Jlc3VsdEZy
b21OU1RleHRDaGVja2luZ1Jlc3VsdChOU1RleHRDaGVja2luZ1Jlc3VsdCAqbnNSZXN1bHQpCitz
dGF0aWMgUEFMOjpUZXh0Q2hlY2tpbmdSZXN1bHQgdGV4dENoZWNraW5nUmVzdWx0RnJvbU5TVGV4
dENoZWNraW5nUmVzdWx0KE5TVGV4dENoZWNraW5nUmVzdWx0ICpuc1Jlc3VsdCkKIHsKLSAgICBX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OworICAgIFBBTDo6VGV4dENoZWNraW5n
UmVzdWx0IHJlc3VsdDsKICAgICByZXN1bHQudHlwZSA9IGNvcmVUZXh0Q2hlY2tpbmdUeXBlKG5z
UmVzdWx0LnJlc3VsdFR5cGUpOwogICAgIHJlc3VsdC5yYW5nZSA9IG5zUmVzdWx0LnJhbmdlOwog
ICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IG5zUmVzdWx0LnJlcGxhY2VtZW50U3RyaW5nOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcAppbmRleCBiY2YwMzI5NTViZTJlYmRmZmU2OTNkOGE4YmJkODJiZjk0
MmY5ZDk5Li4yNDNkNDk1NTMyNTE5OGIwNGJlNmY1Y2YzYjBkNmE1MDE4NTczMjIwIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIFRFU1RfRihDb21wbGV4VGV4dENv
bnRyb2xsZXJUZXN0LCBMZWZ0RXhwYW5zaW9uKQogCiAgICAgVUNoYXIgY2hhcmFjdGVyc1tdID0g
eyAnYScgfTsKICAgICBzaXplX3QgY2hhcmFjdGVyc0xlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgo
Y2hhcmFjdGVycyk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywg
Y2hhcmFjdGVyc0xlbmd0aCksIDAsIDEwMCwgRm9yY2VMZWZ0RXhwYW5zaW9uKTsKKyAgICBUZXh0
UnVuIHRleHRSdW4oU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSwgMCwg
MTAwLCBQQUw6OkZvcmNlTGVmdEV4cGFuc2lvbik7CiAgICAgYXV0byBydW4gPSBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGUoeyBGbG9hdFNpemUoMjQsIDApIH0s
IHsgfSwgeyAxNiB9LCB7IDAgfSwgRmxvYXRTaXplKCksIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hh
cmFjdGVycywgMCwgY2hhcmFjdGVyc0xlbmd0aCwgMCwgMSwgdHJ1ZSk7CiAgICAgVmVjdG9yPFJl
ZjxDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuPj4gcnVuczsKICAgICBydW5z
LmFwcGVuZChXVEZNb3ZlKHJ1bikpOwpAQCAtMzUwLDcgKzM1MCw3IEBAIFRFU1RfRihDb21wbGV4
VGV4dENvbnRyb2xsZXJUZXN0LCBUb3RhbFdpZHRoV2l0aEp1c3RpZmljYXRpb24pCiAKICAgICBV
Q2hhciBjaGFyYWN0ZXJzW10gPSB7IDB4NjQ0LCAnICcsIDB4NjQ0LCAnICcsIDB4NjQ0IH07CiAg
ICAgc2l6ZV90IGNoYXJhY3RlcnNMZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYXJhY3RlcnMp
OwotICAgIFRleHRSdW4gdGV4dFJ1bihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNM
ZW5ndGgpLCAwLCAxNCwgRGVmYXVsdEV4cGFuc2lvbiwgVGV4dERpcmVjdGlvbjo6UlRMKTsKKyAg
ICBUZXh0UnVuIHRleHRSdW4oU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3Ro
KSwgMCwgMTQsIFBBTDo6RGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwp
OwogICAgIGF1dG8gcnVuID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Y3JlYXRlKGFkdmFuY2VzLCBvcmlnaW5zLCB7IDUsIDYsIDcsIDgsIDkgfSwgeyA0LCAzLCAyLCAx
LCAwIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAs
IGNoYXJhY3RlcnNMZW5ndGgsIDAsIDUsIGZhbHNlKTsKICAgICBWZWN0b3I8UmVmPENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+PiBydW5zOwogICAgIHJ1bnMuYXBwZW5kKFdU
Rk1vdmUocnVuKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAKaW5kZXggYmQ5NDVmYmRiZWE5MTA1ZDhjOTg3
ZWRhNTY2NzMzZTEyOGY4Y2Q1Mi4uMDE1ZGM0YWJhMDI2MDNiZjdiMGRhMTc0NmU4ZmI2ZGQ5NTA5
MmNhZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0cmlu
Z1dpdGhEaXJlY3Rpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9TdHJpbmdXaXRoRGlyZWN0aW9uLmNwcApAQCAtMjcsMTkgKzI3LDE5IEBACiAKICNpbmNsdWRl
ICJUZXN0LmgiCiAjaW5jbHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9TdHJpbmdXaXRoRGlyZWN0aW9uLmg+CisjaW5jbHVkZSA8cGFsL3RleHQvU3RyaW5nV2l0
aERpcmVjdGlvbi5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFj
ZSBQQUw7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8
KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFRleHREaXJlY3Rpb24mIGRpcmVjdGlvbikKK3N0ZDo6
b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBQQUw6OlRleHREaXJl
Y3Rpb24mIGRpcmVjdGlvbikKIHsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2Ug
VGV4dERpcmVjdGlvbjo6TFRSOgorICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI6CiAg
ICAgICAgIG9zIDw8ICJUZXh0RGlyZWN0aW9uOjpMVFIiOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRleHREaXJlY3Rpb246OlJUTDoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRM
OgogICAgICAgICBvcyA8PCAiVGV4dERpcmVjdGlvbjo6UlRMIjsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtNTIsNDUgKzUyLDQ1IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVT
VChTdHJpbmdXaXRoRGlyZWN0aW9uLCBUcnVuY2F0ZUF0RW5kV2l0aExlZnRUb1JpZ2h0U3RyaW5n
KQogewotICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gc3RyaW5nIHsgIkNhcHB1Y2Npbm8iLCBUZXh0
RGlyZWN0aW9uOjpMVFIgfTsKKyAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIHN0cmluZyB7ICJDYXBw
dWNjaW5vIiwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfTsKICAgICBTdHJpbmdXaXRoRGlyZWN0
aW9uIHJlc3VsdDsKIAogICAgIHJlc3VsdCA9IHRydW5jYXRlRnJvbUVuZChzdHJpbmcsIDApOwot
ICAgIEVYUEVDVF9FUShUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOworICAg
IEVYUEVDVF9FUShQQUw6OlRleHREaXJlY3Rpb246OkxUUiwgcmVzdWx0LmRpcmVjdGlvbik7CiAg
ICAgRVhQRUNUX0VRKCIiLCByZXN1bHQuc3RyaW5nKTsKIAogICAgIHJlc3VsdCA9IHRydW5jYXRl
RnJvbUVuZChzdHJpbmcsIDEpOwotICAgIEVYUEVDVF9FUShUZXh0RGlyZWN0aW9uOjpMVFIsIHJl
c3VsdC5kaXJlY3Rpb24pOworICAgIEVYUEVDVF9FUShQQUw6OlRleHREaXJlY3Rpb246OkxUUiwg
cmVzdWx0LmRpcmVjdGlvbik7CiAgICAgRVhQRUNUX0VRKCJDIiwgcmVzdWx0LnN0cmluZyk7CiAK
ICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAyKTsKLSAgICBFWFBFQ1RfRVEo
VGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUSgi
Q2EiLCByZXN1bHQuc3RyaW5nKTsKIAogICAgIHJlc3VsdCA9IHRydW5jYXRlRnJvbUVuZChzdHJp
bmcsIDEwMDApOwotICAgIEVYUEVDVF9FUShUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJl
Y3Rpb24pOworICAgIEVYUEVDVF9FUShQQUw6OlRleHREaXJlY3Rpb246OkxUUiwgcmVzdWx0LmRp
cmVjdGlvbik7CiAgICAgRVhQRUNUX0VRKCJDYXBwdWNjaW5vIiwgcmVzdWx0LnN0cmluZyk7CiB9
CiAKIFRFU1QoU3RyaW5nV2l0aERpcmVjdGlvbiwgVHJ1bmNhdGVBdEVuZFdpdGhSaWdodFRvTGVm
dFN0cmluZykKIHsKLSAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIHN0cmluZyB7IFN0cmluZzo6ZnJv
bVVURjgoIten1rjXpNa815XWvNem1rQn15nXoNeV1rkiKSwgVGV4dERpcmVjdGlvbjo6UlRMIH07
CisgICAgU3RyaW5nV2l0aERpcmVjdGlvbiBzdHJpbmcgeyBTdHJpbmc6OmZyb21VVEY4KCLXp9a4
16TWvNeV1rzXpta0J9eZ16DXlda5IiksIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIH07CiAgICAg
U3RyaW5nV2l0aERpcmVjdGlvbiByZXN1bHQ7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21F
bmQoc3RyaW5nLCAwKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQu
ZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIHJlc3Vs
dC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUSgiIiwgcmVzdWx0LnN0cmluZyk7CiAKICAgICBy
ZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAxKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERp
cmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEwsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUShTdHJpbmc6
OmZyb21VVEY4KCLXpyIpLCByZXN1bHQuc3RyaW5nKTsKIAogICAgIHJlc3VsdCA9IHRydW5jYXRl
RnJvbUVuZChzdHJpbmcsIDIpOwotICAgIEVYUEVDVF9FUShUZXh0RGlyZWN0aW9uOjpSVEwsIHJl
c3VsdC5kaXJlY3Rpb24pOworICAgIEVYUEVDVF9FUShQQUw6OlRleHREaXJlY3Rpb246OlJUTCwg
cmVzdWx0LmRpcmVjdGlvbik7CiAgICAgRVhQRUNUX0VRKFN0cmluZzo6ZnJvbVVURjgoIten1rgi
KSwgcmVzdWx0LnN0cmluZyk7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5n
LCAxMDAwKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0
aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIHJlc3VsdC5kaXJl
Y3Rpb24pOwogICAgIEVYUEVDVF9FUShTdHJpbmc6OmZyb21VVEY4KCLXp9a416TWvNeV1rzXpta0
J9eZ16DXlda5IiksIHJlc3VsdC5zdHJpbmcpOwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQueGN3
b3Jrc3BhY2UveGNzaGFyZWRkYXRhL1dvcmtzcGFjZVNldHRpbmdzLnhjc2V0dGluZ3MgYi9XZWJL
aXQueGN3b3Jrc3BhY2UveGNzaGFyZWRkYXRhL1dvcmtzcGFjZVNldHRpbmdzLnhjc2V0dGluZ3MK
aW5kZXggN2NhMmRlNDU0N2FhMjkzMGQ3MGVhMzNiYTBkODEwZDdhZTc2M2I5Zi4uNzg0ZjIxMjgw
OWVjYjdiNmUwZjM3ZjNlMDAyMzkyN2Q5YTIzMmU5NyAxMDA2NDQKLS0tIGEvV2ViS2l0Lnhjd29y
a3NwYWNlL3hjc2hhcmVkZGF0YS9Xb3Jrc3BhY2VTZXR0aW5ncy54Y3NldHRpbmdzCisrKyBiL1dl
YktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEvV29ya3NwYWNlU2V0dGluZ3MueGNzZXR0aW5n
cwpAQCAtNCw2ICs0LDggQEAKIDxkaWN0PgogCTxrZXk+QnVpbGRTeXN0ZW1UeXBlPC9rZXk+CiAJ
PHN0cmluZz5PcmlnaW5hbDwvc3RyaW5nPgorCTxrZXk+RGlzYWJsZUJ1aWxkU3lzdGVtRGVwcmVj
YXRpb25EaWFnbm9zdGljPC9rZXk+CisJPHRydWUvPgogCTxrZXk+SURFV29ya3NwYWNlU2hhcmVk
U2V0dGluZ3NfQXV0b2NyZWF0ZUNvbnRleHRzSWZOZWVkZWQ8L2tleT4KIAk8ZmFsc2UvPgogCTxr
ZXk+UHJldmlld3NFbmFibGVkPC9rZXk+Cg==
</data>
<flag name="commit-queue"
          id="471887"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>