<?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>197376</bug_id>
          
          <creation_ts>2019-04-29 12:02:11 -0700</creation_ts>
          <short_desc>[Cocoa] Move common sandbox files from Shared/mac to Shared/Cocoa</short_desc>
          <delta_ts>2019-04-29 12:53:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1531216</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-04-29 12:02:11 -0700</bug_when>
    <thetext>I have been unsure of code changes on a number of occasions because our Cocoa Sandbox logic lives in the &apos;mac&apos; subfolder, even though it is used on all Apple platforms.

This patch just moves the relevant files from &apos;Shared/mac&apos; to &apos;Shared/Cocoa&apos; to avoid this confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531218</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-29 12:05:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/50305272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531219</commentid>
    <comment_count>2</comment_count>
      <attachid>368472</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-04-29 12:08:22 -0700</bug_when>
    <thetext>Created attachment 368472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531222</commentid>
    <comment_count>3</comment_count>
      <attachid>368472</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-04-29 12:11:35 -0700</bug_when>
    <thetext>Comment on attachment 368472
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531238</commentid>
    <comment_count>4</comment_count>
      <attachid>368472</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-29 12:53:03 -0700</bug_when>
    <thetext>Comment on attachment 368472
Patch

Clearing flags on attachment: 368472

Committed r244747: &lt;https://trac.webkit.org/changeset/244747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531239</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-29 12:53:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368472</attachid>
            <date>2019-04-29 12:08:22 -0700</date>
            <delta_ts>2019-04-29 12:53:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197376-20190429120821.patch</filename>
            <type>text/plain</type>
            <size>56366</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0NjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhlOGJhYTgxOWZiMTVmZjg4
MDU5NjFiNTQwMDE2MDBhMzI1MWJlYTcuLmY0NjFlNzJkYzZkZjFkOGNkNzFmODc3ZDM0NzJkODIz
NDZlNTAwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTktMDQtMjkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBNb3ZlIGNvbW1v
biBzYW5kYm94IGZpbGVzIGZyb20gU2hhcmVkL21hYyB0byBTaGFyZWQvQ29jb2EKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzM3NgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTAzMDUyNzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIEFwcGxlIHNhbmRib3hpbmcgbG9naWMgY3VycmVudGx5IGxp
dmVzIGluIHRoZSBpbmFwcHJvcHJpYXRlICdTaGFyZWQvbWFjJyBkaXJlY3RvcnkuIFRoaXMgaXMK
KyAgICAgICAgY29uZnVzaW5nIGJlY2F1c2UgdGhlIGNvZGUgaXMgdXNlZCBieSBhbGwgQXBwbGUg
cG9ydHMsIG5vdCBqdXN0IG1hY09TLgorCisgICAgICAgIFRoaXMgcGF0Y2gganVzdCBtb3ZlcyB0
aGUgcmVsZXZhbnQgZmlsZXMgZnJvbSAnU2hhcmVkL21hYycgdG8gJ1NoYXJlZC9Db2NvYScgdG8g
YXZvaWQgdGhpcyBjb25mdXNpb24uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvU2FuZGJveEV4
dGVuc2lvbkNvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1Nh
bmRib3hFeHRlbnNpb25NYWMubW0uCisgICAgICAgICogU2hhcmVkL0NvY29hL1NhbmRib3hJbml0
aWFsaWF0aW9uUGFyYW1ldGVyc0NvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL1NhbmRib3hJbml0aWFsaWF0aW9uUGFyYW1ldGVyc01hYy5tbS4KKyAgICAgICAg
KiBTaGFyZWQvQ29jb2EvU2FuZGJveFV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL1NhbmRib3hVdGlsaXRpZXMuaC4KKyAgICAgICAgKiBTaGFyZWQvQ29j
b2EvU2FuZGJveFV0aWxpdGllcy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9TYW5kYm94VXRpbGl0aWVzLm1tLgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDQtMjQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1bWIg
dGhlIG5hdmlnYXRpb24ncyByZXF1ZXN0IHdoZW4gZGV0ZXJtaW5pbmcgcmVjb21tZW5kZWQgY29t
cGF0aWJpbGl0eSBtb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9T
YW5kYm94RXh0ZW5zaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9TYW5k
Ym94RXh0ZW5zaW9uQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJlYzQ3M2U5YjBkMjhiYjczMWM3MTEz
NmQ4YmY0MTZlZTQ0ODVkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbQpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9u
LmgiCisKKyNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQorCisjaW1wb3J0ICJEYXRhUmVm
ZXJlbmNlLmgiCisjaW1wb3J0ICJEZWNvZGVyLmgiCisjaW1wb3J0ICJFbmNvZGVyLmgiCisjaW1w
b3J0IDxzeXMvc3RhdC5oPgorI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbXBvcnQgPHd0
Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNhbmRib3hFeHRlbnNpb25JbXBsIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNhbmRib3hFeHRlbnNpb25JbXBsPiBj
cmVhdGUoY29uc3QgY2hhciogcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZSB0eXBlLCBPcHRp
b25hbDxwaWRfdD4gcGlkID0gV1RGOjpudWxsb3B0KQorICAgIHsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFNhbmRib3hFeHRlbnNpb25JbXBsPiBpbXBsIHsgbmV3IFNhbmRib3hFeHRlbnNpb25J
bXBsKHBhdGgsIHR5cGUsIHBpZCkgfTsKKyAgICAgICAgaWYgKCFpbXBsLT5tX3Rva2VuKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKwor
ICAgIFNhbmRib3hFeHRlbnNpb25JbXBsKGNvbnN0IGNoYXIqIHNlcmlhbGl6ZWRGb3JtYXQsIHNp
emVfdCBsZW5ndGgpCisgICAgICAgIDogbV90b2tlbiB7IHN0cm5kdXAoc2VyaWFsaXplZEZvcm1h
dCwgbGVuZ3RoKSB9CisgICAgeworICAgIH0KKworICAgIH5TYW5kYm94RXh0ZW5zaW9uSW1wbCgp
CisgICAgeworICAgICAgICBmcmVlKG1fdG9rZW4pOworICAgIH0KKworICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGNvbnN1bWUoKQorICAgIHsKKyAgICAgICAgbV9oYW5kbGUgPSBzYW5kYm94
X2V4dGVuc2lvbl9jb25zdW1lKG1fdG9rZW4pOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFlfU0lN
VUxBVE9SKQorICAgICAgICByZXR1cm4gIXNhbmRib3hfY2hlY2soZ2V0cGlkKCksIDAsIFNBTkRC
T1hfRklMVEVSX05PTkUpOworI2Vsc2UKKyAgICAgICAgaWYgKG1faGFuZGxlID09IC0xKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgYSBzYW5kYm94IGV4dGVuc2lv
biBmb3IgJyVzJywgZXJybm8gPSAlZCIsIG1fdG9rZW4sIGVycm5vKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9oYW5kbGU7CisjZW5kaWYK
KyAgICB9CisKKyAgICBib29sIGludmFsaWRhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFz
YW5kYm94X2V4dGVuc2lvbl9yZWxlYXNlKHN0ZDo6ZXhjaGFuZ2UobV9oYW5kbGUsIDApKTsKKyAg
ICB9CisKKyAgICBjb25zdCBjaGFyKiBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0U2VyaWFsaXplZEZv
cm1hdChzaXplX3QmIGxlbmd0aCkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihtX3Rv
a2VuKTsKKyAgICAgICAgcmV0dXJuIG1fdG9rZW47CisgICAgfQorCitwcml2YXRlOgorICAgIGNo
YXIqIHNhbmRib3hFeHRlbnNpb25Gb3JUeXBlKGNvbnN0IGNoYXIqIHBhdGgsIFNhbmRib3hFeHRl
bnNpb246OlR5cGUgdHlwZSwgT3B0aW9uYWw8cGlkX3Q+IHBpZCA9IFdURjo6bnVsbG9wdCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRPbmx5OgorICAgICAgICAgICAgcmV0dXJuIHNhbmRib3hfZXh0ZW5zaW9u
X2lzc3VlX2ZpbGUoQVBQX1NBTkRCT1hfUkVBRCwgcGF0aCwgMCk7CisgICAgICAgIGNhc2UgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlOgorICAgICAgICAgICAgcmV0dXJuIHNhbmRi
b3hfZXh0ZW5zaW9uX2lzc3VlX2ZpbGUoQVBQX1NBTkRCT1hfUkVBRF9XUklURSwgcGF0aCwgMCk7
CisgICAgICAgIGNhc2UgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6TWFjaDoKKyNpZiBIQVZFKFNB
TkRCT1hfSVNTVUVfTUFDSF9FWFRFTlNJT05fVE9fUFJPQ0VTU19CWV9QSUQpCisgICAgICAgICAg
ICByZXR1cm4gc2FuZGJveF9leHRlbnNpb25faXNzdWVfbWFjaF90b19wcm9jZXNzX2J5X3BpZCgi
Y29tLmFwcGxlLndlYmtpdC5leHRlbnNpb24ubWFjaCJfcywgcGF0aCwgMCwgcGlkLnZhbHVlKCkp
OworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwaWQpOworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgor
ICAgICAgICBjYXNlIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OkdlbmVyaWM6CisgICAgICAgICAg
ICByZXR1cm4gc2FuZGJveF9leHRlbnNpb25faXNzdWVfZ2VuZXJpYyhwYXRoLCAwKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFNhbmRib3hFeHRlbnNpb25JbXBsKGNvbnN0IGNoYXIqIHBhdGgs
IFNhbmRib3hFeHRlbnNpb246OlR5cGUgdHlwZSwgT3B0aW9uYWw8cGlkX3Q+IHBpZCA9IFdURjo6
bnVsbG9wdCkKKyAgICAgICAgOiBtX3Rva2VuIHsgc2FuZGJveEV4dGVuc2lvbkZvclR5cGUocGF0
aCwgdHlwZSwgcGlkKSB9CisgICAgeworICAgIH0KKworICAgIGNoYXIqIG1fdG9rZW47CisgICAg
aW50NjRfdCBtX2hhbmRsZSB7IDAgfTsKK307CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6
SGFuZGxlKCkKK3sKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlOjpIYW5kbGUoSGFuZGxl
JiYpID0gZGVmYXVsdDsKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlOjpvcGVyYXRvcj0oSGFuZGxlJiYpID0gZGVmYXVsdDsKKworU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKKyAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQor
ICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPmludmFsaWRhdGUoKTsKK30KKwordm9pZCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3NhbmRib3hFeHRlbnNpb24pIHsKKyAgICAgICAgZW5jb2RlciA8PCBJ
UEM6OkRhdGFSZWZlcmVuY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVf
dCBsZW5ndGggPSAwOworICAgIGNvbnN0IGNoYXIqIHNlcmlhbGl6ZWRGb3JtYXQgPSBtX3NhbmRi
b3hFeHRlbnNpb24tPmdldFNlcmlhbGl6ZWRGb3JtYXQobGVuZ3RoKTsKKyAgICBBU1NFUlQoc2Vy
aWFsaXplZEZvcm1hdCk7CisKKyAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZXJpYWxpemVkRm9ybWF0KSwgbGVuZ3RoKTsK
KworICAgIC8vIEVuY29kaW5nIHdpbGwgZGVzdHJveSB0aGUgc2FuZGJveCBleHRlbnNpb24gbG9j
YWxseS4KKyAgICBtX3NhbmRib3hFeHRlbnNpb24gPSAwOworfQorCithdXRvIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikgLT4gT3B0aW9uYWw8
SGFuZGxlPgoreworICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBpZiAoZGF0YVJlZmVyZW5jZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7eyB9fTsKKworICAgIEhhbmRsZSBoYW5kbGU7CisgICAgaGFuZGxlLm1fc2FuZGJveEV4dGVu
c2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U2FuZGJveEV4dGVuc2lvbkltcGw+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGFSZWZlcmVuY2UuZGF0YSgpKSwgZGF0YVJlZmVyZW5jZS5z
aXplKCkpOworICAgIHJldHVybiBXVEZNb3ZlKGhhbmRsZSk7Cit9CisKK1NhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpIYW5kbGVBcnJheSgpCit7Cit9CisKK1NhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5Ojp+SGFuZGxlQXJyYXkoKQoreworfQorCit2b2lkIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2RhdGEuaXNFbXB0eSgpKTsKKworICAg
IG1fZGF0YS5yZXNpemUoc2l6ZSk7Cit9CisKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90IGkpCit7CisgICAg
UkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9kYXRhLnNpemUo
KSk7CisgICAgcmV0dXJuIG1fZGF0YVtpXTsKK30KKworY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6b3BlcmF0b3JbXShzaXplX3Qg
aSkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGkgPCBtX2RhdGEuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9kYXRhW2ldOworfQorCitzaXplX3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OnNpemUoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGEuc2l6ZSgpOworfQorCit2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemUoKSk7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBt
X2RhdGEpCisgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOworfQorCitPcHRpb25hbDxTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheT4gU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRl
Y29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNp
emU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBoYW5kbGVz
OworICAgIGhhbmRsZXMuYWxsb2NhdGUoKnNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgKnNpemU7ICsraSkgeworICAgICAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGU+IGhhbmRsZTsKKyAgICAgICAgZGVjb2RlciA+PiBoYW5kbGU7CisgICAgICAgIGlmICghaGFu
ZGxlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaGFuZGxlc1tp
XSA9IFdURk1vdmUoKmhhbmRsZSk7CisgICAgfQorICAgIHJldHVybiBXVEZNb3ZlKGhhbmRsZXMp
OworfQorCitSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
KEhhbmRsZSYmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24p
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTYW5k
Ym94RXh0ZW5zaW9uKGhhbmRsZSkpOworfQorCitzdGF0aWMgQ1N0cmluZyByZXNvbHZlU3ltbGlu
a3NJblBhdGgoY29uc3QgQ1N0cmluZyYgcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0QnVm
OworCisgICAgLy8gQ2hlY2sgaWYgdGhpcyBmaWxlIGV4aXN0cy4KKyAgICBpZiAoIXN0YXQocGF0
aC5kYXRhKCksICZzdGF0QnVmKSkgeworICAgICAgICBjaGFyIHJlc29sdmVkTmFtZVtQQVRIX01B
WF07CisKKyAgICAgICAgcmV0dXJuIHJlYWxwYXRoKHBhdGguZGF0YSgpLCByZXNvbHZlZE5hbWUp
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHNsYXNoUHRyID0gc3RycmNocihwYXRoLmRhdGEo
KSwgJy8nKTsKKyAgICBpZiAoc2xhc2hQdHIgPT0gcGF0aC5kYXRhKCkpCisgICAgICAgIHJldHVy
biBwYXRoOworCisgICAgc2l6ZV90IHBhcmVudERpcmVjdG9yeUxlbmd0aCA9IHNsYXNoUHRyIC0g
cGF0aC5kYXRhKCk7CisgICAgaWYgKHBhcmVudERpcmVjdG9yeUxlbmd0aCA+PSBQQVRIX01BWCkK
KyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIC8vIEdldCB0aGUgcGFyZW50IGRpcmVj
dG9yeS4KKyAgICBjaGFyIHBhcmVudERpcmVjdG9yeVtQQVRIX01BWF07CisgICAgbWVtY3B5KHBh
cmVudERpcmVjdG9yeSwgcGF0aC5kYXRhKCksIHBhcmVudERpcmVjdG9yeUxlbmd0aCk7CisgICAg
cGFyZW50RGlyZWN0b3J5W3BhcmVudERpcmVjdG9yeUxlbmd0aF0gPSAnXDAnOworCisgICAgLy8g
UmVzb2x2ZSBpdC4KKyAgICBDU3RyaW5nIHJlc29sdmVkUGFyZW50RGlyZWN0b3J5ID0gcmVzb2x2
ZVN5bWxpbmtzSW5QYXRoKENTdHJpbmcocGFyZW50RGlyZWN0b3J5KSk7CisgICAgaWYgKHJlc29s
dmVkUGFyZW50RGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOwor
CisgICAgc2l6ZV90IGxhc3RQYXRoQ29tcG9uZW50TGVuZ3RoID0gcGF0aC5sZW5ndGgoKSAtIHBh
cmVudERpcmVjdG9yeUxlbmd0aDsKKyAgICBzaXplX3QgcmVzb2x2ZWRQYXRoTGVuZ3RoID0gcmVz
b2x2ZWRQYXJlbnREaXJlY3RvcnkubGVuZ3RoKCkgKyBsYXN0UGF0aENvbXBvbmVudExlbmd0aDsK
KyAgICBpZiAocmVzb2x2ZWRQYXRoTGVuZ3RoID49IFBBVEhfTUFYKQorICAgICAgICByZXR1cm4g
Q1N0cmluZygpOworCisgICAgLy8gQ29tYmluZSB0aGUgcmVzb2x2ZWQgcGFyZW50IGRpcmVjdG9y
eSB3aXRoIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LgorICAgIGNoYXIqIHJlc29sdmVkUGF0aEJ1
ZmZlcjsKKyAgICBDU3RyaW5nIHJlc29sdmVkUGF0aCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6
ZWQocmVzb2x2ZWRQYXRoTGVuZ3RoLCByZXNvbHZlZFBhdGhCdWZmZXIpOworICAgIG1lbWNweShy
ZXNvbHZlZFBhdGhCdWZmZXIsIHJlc29sdmVkUGFyZW50RGlyZWN0b3J5LmRhdGEoKSwgcmVzb2x2
ZWRQYXJlbnREaXJlY3RvcnkubGVuZ3RoKCkpOworICAgIG1lbWNweShyZXNvbHZlZFBhdGhCdWZm
ZXIgKyByZXNvbHZlZFBhcmVudERpcmVjdG9yeS5sZW5ndGgoKSwgc2xhc2hQdHIsIGxhc3RQYXRo
Q29tcG9uZW50TGVuZ3RoKTsKKworICAgIHJldHVybiByZXNvbHZlZFBhdGg7Cit9CisKK1N0cmlu
ZyBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXNvbHZlU3ltbGlua3NJblBhdGgocGF0aC51
dGY4KCkpKTsKK30KKworU3RyaW5nIHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlG
b3JTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBOU0Vycm9yICpl
cnJvciA9IG5pbDsKKyAgICBOU1N0cmluZyAqbnNQYXRoID0gcGF0aDsKKworICAgIGlmICghW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFBhdGg6bnNQYXRo
IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6JmVy
cm9yXSkgeworICAgICAgICBOU0xvZyhAImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJUBc
IiBmb3IgZnV0dXJlIHNhbmRib3ggZXh0ZW5zaW9uLCBlcnJvciAlQCIsIG5zUGF0aCwgZXJyb3Ip
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiByZXNvbHZlUGF0aEZv
clNhbmRib3hFeHRlbnNpb24ocGF0aCk7Cit9CisKK1N0cmluZyByZXNvbHZlUGF0aEZvclNhbmRi
b3hFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJWE1FOiBEbyB3ZSBu
ZWVkIGJvdGggcmVzb2x2ZVN5bWxpbmtzSW5QYXRoKCkgYW5kIC1zdHJpbmdCeVN0YW5kYXJkaXpp
bmdQYXRoPworICAgIENTdHJpbmcgZmlsZVN5c3RlbVBhdGggPSBGaWxlU3lzdGVtOjpmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oWyhOU1N0cmluZyAqKXBhdGggc3RyaW5nQnlTdGFuZGFyZGl6aW5n
UGF0aF0pOworICAgIGlmIChmaWxlU3lzdGVtUGF0aC5pc051bGwoKSkgeworICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgYSB2YWxpZCBmaWxlIHN5c3RlbSByZXByZXNlbnRhdGlv
biBmb3IgdGhlIHN0cmluZyAnJXMnIG9mIGxlbmd0aCAlbHUiLCBmaWxlU3lzdGVtUGF0aC5kYXRh
KCksIGZpbGVTeXN0ZW1QYXRoLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBDU3RyaW5nIHN0YW5kYXJkaXplZFBhdGggPSByZXNvbHZlU3ltbGlua3NJblBhdGgo
ZmlsZVN5c3RlbVBhdGgpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0YW5kYXJkaXpl
ZFBhdGgpOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRS
ZXNvbHZpbmdQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgVHlwZSB0eXBlLCBIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pOworCisgICAgaGFu
ZGxlLm1fc2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb25JbXBsOjpjcmVhdGUocGF0
aC51dGY4KCkuZGF0YSgpLCB0eXBlKTsKKyAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNp
b24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIGEgc2FuZGJveCBleHRl
bnNpb24gZm9yICclcyciLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5k
bGUpCit7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKKworICAgIHJl
dHVybiBjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChyZXNvbHZlUGF0aEZvclNhbmRi
b3hFeHRlbnNpb24ocGF0aCksIHR5cGUsIGhhbmRsZSk7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgU3RyaW5nIHJlc29s
dmVkUGF0aCA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0
ZW5zaW9uKHBhdGgpOworICAgIGlmIChyZXNvbHZlZFBhdGguaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVX
aXRob3V0UmVzb2x2aW5nUGF0aChyZXNvbHZlZFBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgaGFuZGxlKTsKK30KKworU3RyaW5nIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUgdHlwZSwg
SGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9u
KTsKKyAgICAKKyAgICBWZWN0b3I8Y2hhcj4gcGF0aChQQVRIX01BWCk7CisgICAgaWYgKCFjb25m
c3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwgcGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAorICAgIC8vIFNocmluayB0aGUgdmVjdG9y
LiAgIAorICAgIHBhdGguc2hyaW5rKHN0cmxlbihwYXRoLmRhdGEoKSkpOworCisgICAgLy8gRklY
TUU6IENoYW5nZSB0byBhIHJ1bnRpbWUgYXNzZXJ0aW9uIHRoYXQgdGhlIHBhdGggZW5kcyB3aXRo
IGEgc2xhc2ggb25jZSA8cmRhcjovL3Byb2JsZW0vMjM1NzkwNzc+IGlzCisgICAgLy8gZml4ZWQg
aW4gYWxsIGlPUyBTaW11bGF0b3IgdmVyc2lvbnMgdGhhdCB3ZSB1c2UuCisgICAgaWYgKHBhdGgu
bGFzdCgpICE9ICcvJykKKyAgICAgICAgcGF0aC5hcHBlbmQoJy8nKTsKKyAgICAKKyAgICAvLyBB
cHBlbmQgdGhlIGZpbGUgbmFtZS4gICAgCisgICAgcGF0aC5hcHBlbmQocHJlZml4LnV0ZjgoKS5k
YXRhKCksIHByZWZpeC5sZW5ndGgoKSk7CisgICAgcGF0aC5hcHBlbmQoJ1wwJyk7CisgICAgCisg
ICAgaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb25JbXBsOjpjcmVh
dGUoRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGguZGF0YSgpKS5kYXRh
KCksIHR5cGUpOworCisgICAgaWYgKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSB7CisgICAg
ICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IGNyZWF0ZSBhIHNhbmRib3ggZXh0ZW5zaW9uIGZv
ciB0ZW1wb3JhcnkgZmlsZSAnJXMnIiwgcGF0aC5kYXRhKCkpOworICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcocGF0aC5kYXRhKCkpOworfQorCitib29s
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvckdlbmVyaWNFeHRlbnNpb24oY29uc3Qg
U3RyaW5nJiBleHRlbnNpb25DbGFzcywgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUKCFo
YW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKKworICAgIGhhbmRsZS5tX3NhbmRib3hFeHRlbnNp
b24gPSBTYW5kYm94RXh0ZW5zaW9uSW1wbDo6Y3JlYXRlKGV4dGVuc2lvbkNsYXNzLnV0ZjgoKS5k
YXRhKCksIFR5cGU6OkdlbmVyaWMpOworICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lv
bikgeworICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkIG5vdCBjcmVhdGUgYSAnJXMnIHNhbmRi
b3ggZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uQ2xhc3MudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cEJ5UGlkKGNvbnN0IFN0cmlu
ZyYgc2VydmljZSwgcGlkX3QgcGlkLCBIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQoIWhh
bmRsZS5tX3NhbmRib3hFeHRlbnNpb24pOworICAgIAorICAgIGhhbmRsZS5tX3NhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uSW1wbDo6Y3JlYXRlKHNlcnZpY2UudXRmOCgpLmRhdGEo
KSwgVHlwZTo6TWFjaCwgcGlkKTsKKyAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24p
IHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgY3JlYXRlIGEgJyVzJyBzYW5kYm94
IGV4dGVuc2lvbiIsIHNlcnZpY2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NhbmRib3hFeHRlbnNpb246
OlNhbmRib3hFeHRlbnNpb24oY29uc3QgSGFuZGxlJiBoYW5kbGUpCisgICAgOiBtX3NhbmRib3hF
eHRlbnNpb24oV1RGTW92ZShoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSkKK3sKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6flNhbmRib3hFeHRlbnNpb24oKQoreworICAgIGlmICghbV9zYW5kYm94
RXh0ZW5zaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fdXNlQ291bnQpOwor
fQorCitib29sIFNhbmRib3hFeHRlbnNpb246OnJldm9rZSgpCit7CisgICAgQVNTRVJUKG1fc2Fu
ZGJveEV4dGVuc2lvbik7CisgICAgQVNTRVJUKG1fdXNlQ291bnQpOworICAgIAorICAgIGlmICgt
LW1fdXNlQ291bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fc2FuZGJv
eEV4dGVuc2lvbi0+aW52YWxpZGF0ZSgpOworfQorCitib29sIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWUoKQoreworICAgIEFTU0VSVChtX3NhbmRib3hFeHRlbnNpb24pOworCisgICAgaWYgKG1f
dXNlQ291bnQrKykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9zYW5kYm94
RXh0ZW5zaW9uLT5jb25zdW1lKCk7Cit9CisKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KCkKK3sKKyAgICBBU1NFUlQobV9zYW5kYm94RXh0ZW5zaW9uKTsKKworICAg
IGJvb2wgcmVzdWx0ID0gbV9zYW5kYm94RXh0ZW5zaW9uLT5jb25zdW1lKCk7CisKKyAgICAvLyBE
ZXN0cm95IHRoZSBleHRlbnNpb24gd2l0aG91dCBpbnZhbGlkYXRpbmcgaXQuCisgICAgbV9zYW5k
Ym94RXh0ZW5zaW9uID0gbnVsbHB0cjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRsZSYgaGFuZGxl
KQoreworICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYm9vbCByZXN1bHQgPSBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uLT5j
b25zdW1lKCk7CisgICAgCisgICAgLy8gRGVzdHJveSB0aGUgZXh0ZW5zaW9uIHdpdGhvdXQgaW52
YWxpZGF0aW5nIGl0LgorICAgIGhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRyOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29jb2EvU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0ZXJzQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9TYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnND
b2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MzQ5MDlkYTk5OTlhZGM0M2U3ZTZjY2FlZDhmOGZjYWZkYjBi
NmE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvU2FuZGJv
eEluaXRpYWxpYXRpb25QYXJhbWV0ZXJzQ29jb2EubW0KQEAgLTAsMCArMSwxMDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2FuZGJveEluaXRpYWxpemF0
aW9uUGFyYW1ldGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2FuZGJveEluaXRpYWxp
emF0aW9uUGFyYW1ldGVyczo6U2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycygpCisgICAg
OiBtX3Byb2ZpbGVTZWxlY3Rpb25Nb2RlKFByb2ZpbGVTZWxlY3Rpb25Nb2RlOjpVc2VEZWZhdWx0
U2FuZGJveFByb2ZpbGVQYXRoKQoreworfQorCitTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzOjp+U2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycygpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgKyAxIDwgbV9uYW1lZFBhcmFtZXRlcnMuc2l6ZSgpOyBpICs9IDIpCisgICAg
ICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fbmFtZWRQYXJhbWV0ZXJzW2kgKyAxXSkp
OworfQorCit2b2lkIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OmFwcGVuZFBhdGhJ
bnRlcm5hbChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGNoYXIg
bm9ybWFsaXplZFBhdGhbUEFUSF9NQVhdOworICAgIGlmICghcmVhbHBhdGgocGF0aCwgbm9ybWFs
aXplZFBhdGgpKQorICAgICAgICBub3JtYWxpemVkUGF0aFswXSA9ICdcMCc7CisKKyAgICBBU1NF
UlQoIShtX25hbWVkUGFyYW1ldGVycy5zaXplKCkgJSAyKSk7CisKKyAgICBtX25hbWVkUGFyYW1l
dGVycy5hcHBlbmQobmFtZSk7CisgICAgbV9uYW1lZFBhcmFtZXRlcnMuYXBwZW5kKGZhc3RTdHJE
dXAobm9ybWFsaXplZFBhdGgpKTsKK30KKwordm9pZCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzOjphZGRDb25mRGlyZWN0b3J5UGFyYW1ldGVyKGNvbnN0IGNoYXIqIG5hbWUsIGludCBj
b25mSUQpCit7CisgICAgY2hhciBwYXRoW1BBVEhfTUFYXTsKKyAgICBpZiAoY29uZnN0cihjb25m
SUQsIHBhdGgsIFBBVEhfTUFYKSA8PSAwKQorICAgICAgICBwYXRoWzBdID0gJ1wwJzsKKworICAg
IGFwcGVuZFBhdGhJbnRlcm5hbChuYW1lLCBwYXRoKTsKK30KKwordm9pZCBTYW5kYm94SW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzOjphZGRQYXRoUGFyYW1ldGVyKGNvbnN0IGNoYXIqIG5hbWUsIE5T
U3RyaW5nICpwYXRoKQoreworICAgIGFwcGVuZFBhdGhJbnRlcm5hbChuYW1lLCBbcGF0aCBsZW5n
dGhdID8gWyhOU1N0cmluZyAqKXBhdGggZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSA6ICIiKTsK
K30KKwordm9pZCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzOjphZGRQYXRoUGFyYW1l
dGVyKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgYXBwZW5kUGF0
aEludGVybmFsKG5hbWUsIHBhdGgpOworfQorCit2b2lkIFNhbmRib3hJbml0aWFsaXphdGlvblBh
cmFtZXRlcnM6OmFkZFBhcmFtZXRlcihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1
ZSkKK3sKKyAgICBtX25hbWVkUGFyYW1ldGVycy5hcHBlbmQobmFtZSk7CisgICAgbV9uYW1lZFBh
cmFtZXRlcnMuYXBwZW5kKGZhc3RTdHJEdXAodmFsdWUpKTsKK30KKworY29uc3QgY2hhciogY29u
c3QqIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6Om5hbWVkUGFyYW1ldGVyQXJyYXko
KSBjb25zdAoreworICAgIGlmICghKG1fbmFtZWRQYXJhbWV0ZXJzLnNpemUoKSAlIDIpKQorICAg
ICAgICBtX25hbWVkUGFyYW1ldGVycy5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KDAp
KTsKKworICAgIHJldHVybiBtX25hbWVkUGFyYW1ldGVycy5kYXRhKCk7Cit9CisKK3NpemVfdCBT
YW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzOjpjb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbmFtZWRQYXJhbWV0ZXJzLnNpemUoKSAvIDI7Cit9CisKK2NvbnN0IGNoYXIqIFNhbmRi
b3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6Om5hbWUoc2l6ZV90IGluZGV4KSBjb25zdAorewor
ICAgIEFTU0VSVChpbmRleCAhPSBtX25hbWVkUGFyYW1ldGVycy5zaXplKCkpOworICAgIHJldHVy
biBtX25hbWVkUGFyYW1ldGVyc1tpbmRleCAqIDJdOworfQorCitjb25zdCBjaGFyKiBTYW5kYm94
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzOjp2YWx1ZShzaXplX3QgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbmFtZWRQYXJhbWV0ZXJzW2luZGV4ICogMiArIDFdOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1Nh
bmRib3hVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hVdGls
aXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMDVkNzgxZDgzMDZmZTYwM2M3ZTVkZDA0NzVlZjZhMGRhYjQy
YWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvU2FuZGJv
eFV0aWxpdGllcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2ltcG9ydCA8c3lzL3R5cGVzLmg+CisjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgorI2ltcG9y
dCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29s
IGNvbm5lY3RlZFByb2Nlc3NJc1NhbmRib3hlZCh4cGNfY29ubmVjdGlvbl90KTsKK2Jvb2wgY3Vy
cmVudFByb2Nlc3NJc1NhbmRib3hlZCgpOworYm9vbCBwcm9jZXNzSGFzQ29udGFpbmVyKCk7CisK
Ky8vIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBwcm9jZXNzIGlzIG5vdCBpbiBhIGNv
bnRhaW5lci4KK1N0cmluZyBwYXRoRm9yUHJvY2Vzc0NvbnRhaW5lcigpOworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9TYW5kYm94VXRpbGl0aWVzLm1tIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvU2FuZGJveFV0aWxpdGllcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NWQ1NDgyM2JiNDJmZWNkNWQ3NzFiZTU1MzJkMzlkMzdlOWEyYzFkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvU2FuZGJveFV0aWxpdGllcy5tbQpAQCAtMCww
ICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTYW5k
Ym94VXRpbGl0aWVzLmgiCisKKyNpbXBvcnQgPGFycmF5PgorI2ltcG9ydCA8c3lzL3BhcmFtLmg+
CisjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1Nh
bmRib3hTUEkuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIGN1cnJl
bnRQcm9jZXNzSXNTYW5kYm94ZWQoKQoreworICAgIHJldHVybiBzYW5kYm94X2NoZWNrKGdldHBp
ZCgpLCBudWxscHRyLCBTQU5EQk9YX0ZJTFRFUl9OT05FKTsKK30KKworYm9vbCBjb25uZWN0ZWRQ
cm9jZXNzSXNTYW5kYm94ZWQoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uVG9QYXJlbnQpCit7
CisgICAgYXVkaXRfdG9rZW5fdCB0b2tlbjsKKyAgICB4cGNfY29ubmVjdGlvbl9nZXRfYXVkaXRf
dG9rZW4oY29ubmVjdGlvblRvUGFyZW50LCAmdG9rZW4pOworICAgIHJldHVybiBzYW5kYm94X2No
ZWNrX2J5X2F1ZGl0X3Rva2VuKHRva2VuLCBudWxscHRyLCBTQU5EQk9YX0ZJTFRFUl9OT05FKTsK
K30KKworYm9vbCBwcm9jZXNzSGFzQ29udGFpbmVyKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXND
b250YWluZXIgPSAhcGF0aEZvclByb2Nlc3NDb250YWluZXIoKS5pc0VtcHR5KCk7CisgICAgcmV0
dXJuIGhhc0NvbnRhaW5lcjsKK30KKworU3RyaW5nIHBhdGhGb3JQcm9jZXNzQ29udGFpbmVyKCkK
K3sKKyAgICBzdGQ6OmFycmF5PGNoYXIsIE1BWFBBVEhMRU4+IHBhdGg7CisgICAgcGF0aFswXSA9
IDA7CisgICAgc2FuZGJveF9jb250YWluZXJfcGF0aF9mb3JfcGlkKGdldHBpZCgpLCBwYXRoLmRh
dGEoKSwgcGF0aC5zaXplKCkpOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocGF0aC5k
YXRhKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5kYm94RXh0
ZW5zaW9uTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQ5NTcxNzNiN2E1
OTk2ZmRhN2ZiZGM4ODQyNzU2ZTEzNTdhMmFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5z
aW9uTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2FuZGJveEV4dGVuc2lvbi5oIgotCi0j
aWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLQotI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5o
IgotI2ltcG9ydCAiRGVjb2Rlci5oIgotI2ltcG9ydCAiRW5jb2Rlci5oIgotI2ltcG9ydCA8c3lz
L3N0YXQuaD4KLSNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW1wb3J0IDx3dGYvc3BpL2Rh
cndpbi9TYW5kYm94U1BJLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBTYW5kYm94RXh0ZW5zaW9uSW1wbCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTYW5kYm94RXh0ZW5zaW9uSW1wbD4gY3JlYXRlKGNv
bnN0IGNoYXIqIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGUgdHlwZSwgT3B0aW9uYWw8cGlk
X3Q+IHBpZCA9IFdURjo6bnVsbG9wdCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxT
YW5kYm94RXh0ZW5zaW9uSW1wbD4gaW1wbCB7IG5ldyBTYW5kYm94RXh0ZW5zaW9uSW1wbChwYXRo
LCB0eXBlLCBwaWQpIH07Ci0gICAgICAgIGlmICghaW1wbC0+bV90b2tlbikKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gaW1wbDsKLSAgICB9Ci0KLSAgICBTYW5k
Ym94RXh0ZW5zaW9uSW1wbChjb25zdCBjaGFyKiBzZXJpYWxpemVkRm9ybWF0LCBzaXplX3QgbGVu
Z3RoKQotICAgICAgICA6IG1fdG9rZW4geyBzdHJuZHVwKHNlcmlhbGl6ZWRGb3JtYXQsIGxlbmd0
aCkgfQotICAgIHsKLSAgICB9Ci0KLSAgICB+U2FuZGJveEV4dGVuc2lvbkltcGwoKQotICAgIHsK
LSAgICAgICAgZnJlZShtX3Rva2VuKTsKLSAgICB9Ci0KLSAgICBib29sIGNvbnN1bWUoKSBXQVJO
X1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIG1faGFuZGxlID0gc2FuZGJveF9leHRlbnNp
b25fY29uc3VtZShtX3Rva2VuKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZX1NJTVVMQVRPUikK
LSAgICAgICAgcmV0dXJuICFzYW5kYm94X2NoZWNrKGdldHBpZCgpLCAwLCBTQU5EQk9YX0ZJTFRF
Ul9OT05FKTsKLSNlbHNlCi0gICAgICAgIGlmIChtX2hhbmRsZSA9PSAtMSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIGEgc2FuZGJveCBleHRlbnNpb24gZm9yICcl
cycsIGVycm5vID0gJWQiLCBtX3Rva2VuLCBlcnJubyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1faGFuZGxlOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgYm9vbCBpbnZhbGlkYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhc2FuZGJveF9l
eHRlbnNpb25fcmVsZWFzZShzdGQ6OmV4Y2hhbmdlKG1faGFuZGxlLCAwKSk7Ci0gICAgfQotCi0g
ICAgY29uc3QgY2hhciogZ2V0U2VyaWFsaXplZEZvcm1hdChzaXplX3QmIGxlbmd0aCkgV0FSTl9V
TlVTRURfUkVUVVJOCi0gICAgewotICAgICAgICBsZW5ndGggPSBzdHJsZW4obV90b2tlbik7Ci0g
ICAgICAgIHJldHVybiBtX3Rva2VuOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjaGFyKiBzYW5k
Ym94RXh0ZW5zaW9uRm9yVHlwZShjb25zdCBjaGFyKiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlIHR5cGUsIE9wdGlvbmFsPHBpZF90PiBwaWQgPSBXVEY6Om51bGxvcHQpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seToKLSAgICAgICAgICAgIHJldHVybiBzYW5kYm94X2V4dGVuc2lvbl9pc3N1ZV9m
aWxlKEFQUF9TQU5EQk9YX1JFQUQsIHBhdGgsIDApOwotICAgICAgICBjYXNlIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZToKLSAgICAgICAgICAgIHJldHVybiBzYW5kYm94X2V4dGVu
c2lvbl9pc3N1ZV9maWxlKEFQUF9TQU5EQk9YX1JFQURfV1JJVEUsIHBhdGgsIDApOwotICAgICAg
ICBjYXNlIFNhbmRib3hFeHRlbnNpb246OlR5cGU6Ok1hY2g6Ci0jaWYgSEFWRShTQU5EQk9YX0lT
U1VFX01BQ0hfRVhURU5TSU9OX1RPX1BST0NFU1NfQllfUElEKQotICAgICAgICAgICAgcmV0dXJu
IHNhbmRib3hfZXh0ZW5zaW9uX2lzc3VlX21hY2hfdG9fcHJvY2Vzc19ieV9waWQoImNvbS5hcHBs
ZS53ZWJraXQuZXh0ZW5zaW9uLm1hY2giX3MsIHBhdGgsIDAsIHBpZC52YWx1ZSgpKTsKLSNlbHNl
Ci0gICAgICAgICAgICBVTlVTRURfUEFSQU0ocGlkKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLSAgICAgICAg
Y2FzZSBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpHZW5lcmljOgotICAgICAgICAgICAgcmV0dXJu
IHNhbmRib3hfZXh0ZW5zaW9uX2lzc3VlX2dlbmVyaWMocGF0aCwgMCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uSW1wbChjb25zdCBjaGFyKiBwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlIHR5cGUsIE9wdGlvbmFsPHBpZF90PiBwaWQgPSBXVEY6Om51bGxvcHQp
Ci0gICAgICAgIDogbV90b2tlbiB7IHNhbmRib3hFeHRlbnNpb25Gb3JUeXBlKHBhdGgsIHR5cGUs
IHBpZCkgfQotICAgIHsKLSAgICB9Ci0KLSAgICBjaGFyKiBtX3Rva2VuOwotICAgIGludDY0X3Qg
bV9oYW5kbGUgeyAwIH07Ci19OwotCi1TYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU6OkhhbmRsZSgp
Ci17Ci19Ci0KLVNhbmRib3hFeHRlbnNpb246OkhhbmRsZTo6SGFuZGxlKEhhbmRsZSYmKSA9IGRl
ZmF1bHQ7Ci1TYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZTo6b3BlcmF0b3I9KEhhbmRsZSYmKSA9IGRlZmF1bHQ7Ci0KLVNhbmRib3hFeHRlbnNpb246Okhh
bmRsZTo6fkhhbmRsZSgpCi17Ci0gICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikKLSAgICAgICAg
bV9zYW5kYm94RXh0ZW5zaW9uLT5pbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGlmICghbV9zYW5kYm94RXh0ZW5zaW9uKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgSVBDOjpEYXRh
UmVmZXJlbmNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGVuZ3Ro
ID0gMDsKLSAgICBjb25zdCBjaGFyKiBzZXJpYWxpemVkRm9ybWF0ID0gbV9zYW5kYm94RXh0ZW5z
aW9uLT5nZXRTZXJpYWxpemVkRm9ybWF0KGxlbmd0aCk7Ci0gICAgQVNTRVJUKHNlcmlhbGl6ZWRG
b3JtYXQpOwotCi0gICAgZW5jb2RlciA8PCBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oc2VyaWFsaXplZEZvcm1hdCksIGxlbmd0aCk7Ci0KLSAgICAv
LyBFbmNvZGluZyB3aWxsIGRlc3Ryb3kgdGhlIHNhbmRib3ggZXh0ZW5zaW9uIGxvY2FsbHkuCi0g
ICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gMDsKLX0KLQotYXV0byBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpIC0+IE9wdGlvbmFsPEhhbmRsZT4K
LXsKLSAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGRhdGFSZWZlcmVuY2UpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgaWYgKGRhdGFSZWZlcmVuY2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4ge3sgfX07
Ci0KLSAgICBIYW5kbGUgaGFuZGxlOwotICAgIGhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24gPSBz
dGQ6Om1ha2VfdW5pcXVlPFNhbmRib3hFeHRlbnNpb25JbXBsPihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihkYXRhUmVmZXJlbmNlLmRhdGEoKSksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsK
LSAgICByZXR1cm4gV1RGTW92ZShoYW5kbGUpOwotfQotCi1TYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGVBcnJheTo6SGFuZGxlQXJyYXkoKQotewotfQotCi1TYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVB
cnJheTo6fkhhbmRsZUFycmF5KCkKLXsKLX0KLQotdm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGVBcnJheTo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKCFzaXplKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9kYXRhLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2RhdGEu
cmVzaXplKHNpemUpOwotfQotCi1TYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCBpKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fZGF0YS5zaXplKCkpOwotICAg
IHJldHVybiBtX2RhdGFbaV07Ci19Ci0KLWNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9k
YXRhLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fZGF0YVtpXTsKLX0KLQotc2l6ZV90IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRh
LnNpemUoKTsKLX0KLQotdm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzaXplKCkpOwotICAgIGZvciAoYXV0byYgaGFuZGxlIDogbV9kYXRhKQot
ICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKLX0KLQotT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlQXJyYXk+IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBzaXplOwotICAg
IGRlY29kZXIgPj4gc2l6ZTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgaGFuZGxlczsKLSAgICBo
YW5kbGVzLmFsbG9jYXRlKCpzaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXpl
OyArK2kpIHsKLSAgICAgICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBoYW5k
bGU7Ci0gICAgICAgIGRlY29kZXIgPj4gaGFuZGxlOwotICAgICAgICBpZiAoIWhhbmRsZSkKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGhhbmRsZXNbaV0gPSBXVEZN
b3ZlKCpoYW5kbGUpOwotICAgIH0KLSAgICByZXR1cm4gV1RGTW92ZShoYW5kbGVzKTsKLX0KLQot
UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShIYW5kbGUm
JiBoYW5kbGUpCi17Ci0gICAgaWYgKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2FuZGJveEV4dGVu
c2lvbihoYW5kbGUpKTsKLX0KLQotc3RhdGljIENTdHJpbmcgcmVzb2x2ZVN5bWxpbmtzSW5QYXRo
KGNvbnN0IENTdHJpbmcmIHBhdGgpCi17Ci0gICAgc3RydWN0IHN0YXQgc3RhdEJ1ZjsKLQotICAg
IC8vIENoZWNrIGlmIHRoaXMgZmlsZSBleGlzdHMuCi0gICAgaWYgKCFzdGF0KHBhdGguZGF0YSgp
LCAmc3RhdEJ1ZikpIHsKLSAgICAgICAgY2hhciByZXNvbHZlZE5hbWVbUEFUSF9NQVhdOwotCi0g
ICAgICAgIHJldHVybiByZWFscGF0aChwYXRoLmRhdGEoKSwgcmVzb2x2ZWROYW1lKTsKLSAgICB9
Ci0KLSAgICBjb25zdCBjaGFyKiBzbGFzaFB0ciA9IHN0cnJjaHIocGF0aC5kYXRhKCksICcvJyk7
Ci0gICAgaWYgKHNsYXNoUHRyID09IHBhdGguZGF0YSgpKQotICAgICAgICByZXR1cm4gcGF0aDsK
LQotICAgIHNpemVfdCBwYXJlbnREaXJlY3RvcnlMZW5ndGggPSBzbGFzaFB0ciAtIHBhdGguZGF0
YSgpOwotICAgIGlmIChwYXJlbnREaXJlY3RvcnlMZW5ndGggPj0gUEFUSF9NQVgpCi0gICAgICAg
IHJldHVybiBDU3RyaW5nKCk7Ci0KLSAgICAvLyBHZXQgdGhlIHBhcmVudCBkaXJlY3RvcnkuCi0g
ICAgY2hhciBwYXJlbnREaXJlY3RvcnlbUEFUSF9NQVhdOwotICAgIG1lbWNweShwYXJlbnREaXJl
Y3RvcnksIHBhdGguZGF0YSgpLCBwYXJlbnREaXJlY3RvcnlMZW5ndGgpOwotICAgIHBhcmVudERp
cmVjdG9yeVtwYXJlbnREaXJlY3RvcnlMZW5ndGhdID0gJ1wwJzsKLQotICAgIC8vIFJlc29sdmUg
aXQuCi0gICAgQ1N0cmluZyByZXNvbHZlZFBhcmVudERpcmVjdG9yeSA9IHJlc29sdmVTeW1saW5r
c0luUGF0aChDU3RyaW5nKHBhcmVudERpcmVjdG9yeSkpOwotICAgIGlmIChyZXNvbHZlZFBhcmVu
dERpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKLQotICAgIHNp
emVfdCBsYXN0UGF0aENvbXBvbmVudExlbmd0aCA9IHBhdGgubGVuZ3RoKCkgLSBwYXJlbnREaXJl
Y3RvcnlMZW5ndGg7Ci0gICAgc2l6ZV90IHJlc29sdmVkUGF0aExlbmd0aCA9IHJlc29sdmVkUGFy
ZW50RGlyZWN0b3J5Lmxlbmd0aCgpICsgbGFzdFBhdGhDb21wb25lbnRMZW5ndGg7Ci0gICAgaWYg
KHJlc29sdmVkUGF0aExlbmd0aCA+PSBQQVRIX01BWCkKLSAgICAgICAgcmV0dXJuIENTdHJpbmco
KTsKLQotICAgIC8vIENvbWJpbmUgdGhlIHJlc29sdmVkIHBhcmVudCBkaXJlY3Rvcnkgd2l0aCB0
aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KLSAgICBjaGFyKiByZXNvbHZlZFBhdGhCdWZmZXI7Ci0g
ICAgQ1N0cmluZyByZXNvbHZlZFBhdGggPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHJlc29s
dmVkUGF0aExlbmd0aCwgcmVzb2x2ZWRQYXRoQnVmZmVyKTsKLSAgICBtZW1jcHkocmVzb2x2ZWRQ
YXRoQnVmZmVyLCByZXNvbHZlZFBhcmVudERpcmVjdG9yeS5kYXRhKCksIHJlc29sdmVkUGFyZW50
RGlyZWN0b3J5Lmxlbmd0aCgpKTsKLSAgICBtZW1jcHkocmVzb2x2ZWRQYXRoQnVmZmVyICsgcmVz
b2x2ZWRQYXJlbnREaXJlY3RvcnkubGVuZ3RoKCksIHNsYXNoUHRyLCBsYXN0UGF0aENvbXBvbmVu
dExlbmd0aCk7Ci0KLSAgICByZXR1cm4gcmVzb2x2ZWRQYXRoOwotfQotCi1TdHJpbmcgc3RyaW5n
QnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgocmVzb2x2ZVN5bWxpbmtzSW5QYXRoKHBhdGgudXRmOCgpKSk7
Ci19Ci0KLVN0cmluZyByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJv
eEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgTlNFcnJvciAqZXJyb3IgPSBu
aWw7Ci0gICAgTlNTdHJpbmcgKm5zUGF0aCA9IHBhdGg7Ci0KLSAgICBpZiAoIVtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRQYXRoOm5zUGF0aCB3aXRoSW50
ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOiZlcnJvcl0pIHsK
LSAgICAgICAgTlNMb2coQCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVAXCIgZm9yIGZ1
dHVyZSBzYW5kYm94IGV4dGVuc2lvbiwgZXJyb3IgJUAiLCBuc1BhdGgsIGVycm9yKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb2x2ZVBhdGhGb3JTYW5kYm94
RXh0ZW5zaW9uKHBhdGgpOwotfQotCi1TdHJpbmcgcmVzb2x2ZVBhdGhGb3JTYW5kYm94RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBib3Ro
IHJlc29sdmVTeW1saW5rc0luUGF0aCgpIGFuZCAtc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aD8K
LSAgICBDU3RyaW5nIGZpbGVTeXN0ZW1QYXRoID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKFsoTlNTdHJpbmcgKilwYXRoIHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdKTsK
LSAgICBpZiAoZmlsZVN5c3RlbVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgY3JlYXRlIGEgdmFsaWQgZmlsZSBzeXN0ZW0gcmVwcmVzZW50YXRpb24gZm9yIHRo
ZSBzdHJpbmcgJyVzJyBvZiBsZW5ndGggJWx1IiwgZmlsZVN5c3RlbVBhdGguZGF0YSgpLCBmaWxl
U3lzdGVtUGF0aC5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAg
Q1N0cmluZyBzdGFuZGFyZGl6ZWRQYXRoID0gcmVzb2x2ZVN5bWxpbmtzSW5QYXRoKGZpbGVTeXN0
ZW1QYXRoKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdGFuZGFyZGl6ZWRQYXRoKTsK
LX0KLQotYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5n
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbGUpCi17Ci0g
ICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKLQotICAgIGhhbmRsZS5tX3Nh
bmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uSW1wbDo6Y3JlYXRlKHBhdGgudXRmOCgp
LmRhdGEoKSwgdHlwZSk7Ci0gICAgaWYgKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBhIHNhbmRib3ggZXh0ZW5zaW9uIGZv
ciAnJXMnIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhhbmRsZSYgaGFuZGxlKQotewot
ICAgIEFTU0VSVCghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbik7Ci0KLSAgICByZXR1cm4gY3Jl
YXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocmVzb2x2ZVBhdGhGb3JTYW5kYm94RXh0ZW5z
aW9uKHBhdGgpLCB0eXBlLCBoYW5kbGUpOwotfQotCi1ib29sIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKQotewotICAgIFN0cmluZyByZXNvbHZlZFBhdGgg
PSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihw
YXRoKTsKLSAgICBpZiAocmVzb2x2ZWRQYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJl
c29sdmluZ1BhdGgocmVzb2x2ZWRQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIGhhbmRsZSk7Ci19Ci0KLVN0cmluZyBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBUeXBlIHR5cGUsIEhhbmRsZSYg
aGFuZGxlKQotewotICAgIEFTU0VSVCghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbik7Ci0gICAg
Ci0gICAgVmVjdG9yPGNoYXI+IHBhdGgoUEFUSF9NQVgpOwotICAgIGlmICghY29uZnN0cihfQ1Nf
REFSV0lOX1VTRVJfVEVNUF9ESVIsIHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICAvLyBTaHJpbmsgdGhlIHZlY3Rvci4gICAKLSAg
ICBwYXRoLnNocmluayhzdHJsZW4ocGF0aC5kYXRhKCkpKTsKLQotICAgIC8vIEZJWE1FOiBDaGFu
Z2UgdG8gYSBydW50aW1lIGFzc2VydGlvbiB0aGF0IHRoZSBwYXRoIGVuZHMgd2l0aCBhIHNsYXNo
IG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzIzNTc5MDc3PiBpcwotICAgIC8vIGZpeGVkIGluIGFsbCBp
T1MgU2ltdWxhdG9yIHZlcnNpb25zIHRoYXQgd2UgdXNlLgotICAgIGlmIChwYXRoLmxhc3QoKSAh
PSAnLycpCi0gICAgICAgIHBhdGguYXBwZW5kKCcvJyk7Ci0gICAgCi0gICAgLy8gQXBwZW5kIHRo
ZSBmaWxlIG5hbWUuICAgIAotICAgIHBhdGguYXBwZW5kKHByZWZpeC51dGY4KCkuZGF0YSgpLCBw
cmVmaXgubGVuZ3RoKCkpOwotICAgIHBhdGguYXBwZW5kKCdcMCcpOwotICAgIAotICAgIGhhbmRs
ZS5tX3NhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uSW1wbDo6Y3JlYXRlKEZpbGVT
eXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoLmRhdGEoKSkuZGF0YSgpLCB0eXBl
KTsKLQotICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikgewotICAgICAgICBXVEZM
b2dBbHdheXMoIkNvdWxkIG5vdCBjcmVhdGUgYSBzYW5kYm94IGV4dGVuc2lvbiBmb3IgdGVtcG9y
YXJ5IGZpbGUgJyVzJyIsIHBhdGguZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKHBhdGguZGF0YSgpKTsKLX0KLQotYm9vbCBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JHZW5lcmljRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uQ2xhc3MsIEhhbmRsZSYgaGFuZGxlKQotewotICAgIEFTU0VSVCghaGFuZGxlLm1f
c2FuZGJveEV4dGVuc2lvbik7Ci0KLSAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0gU2Fu
ZGJveEV4dGVuc2lvbkltcGw6OmNyZWF0ZShleHRlbnNpb25DbGFzcy51dGY4KCkuZGF0YSgpLCBU
eXBlOjpHZW5lcmljKTsKLSAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pIHsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgY3JlYXRlIGEgJyVzJyBzYW5kYm94IGV4dGVu
c2lvbiIsIGV4dGVuc2lvbkNsYXNzLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXBCeVBpZChjb25zdCBTdHJpbmcmIHNlcnZp
Y2UsIHBpZF90IHBpZCwgSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgQVNTRVJUKCFoYW5kbGUubV9z
YW5kYm94RXh0ZW5zaW9uKTsKLSAgICAKLSAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbkltcGw6OmNyZWF0ZShzZXJ2aWNlLnV0ZjgoKS5kYXRhKCksIFR5cGU6
Ok1hY2gsIHBpZCk7Ci0gICAgaWYgKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSB7Ci0gICAg
ICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IGNyZWF0ZSBhICclcycgc2FuZGJveCBleHRlbnNp
b24iLCBzZXJ2aWNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1TYW5kYm94RXh0ZW5zaW9uOjpTYW5kYm94
RXh0ZW5zaW9uKGNvbnN0IEhhbmRsZSYgaGFuZGxlKQotICAgIDogbV9zYW5kYm94RXh0ZW5zaW9u
KFdURk1vdmUoaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikpCi17Ci19Ci0KLVNhbmRib3hFeHRl
bnNpb246On5TYW5kYm94RXh0ZW5zaW9uKCkKLXsKLSAgICBpZiAoIW1fc2FuZGJveEV4dGVuc2lv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX3VzZUNvdW50KTsKLX0KLQotYm9v
bCBTYW5kYm94RXh0ZW5zaW9uOjpyZXZva2UoKQotewotICAgIEFTU0VSVChtX3NhbmRib3hFeHRl
bnNpb24pOwotICAgIEFTU0VSVChtX3VzZUNvdW50KTsKLSAgICAKLSAgICBpZiAoLS1tX3VzZUNv
dW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX3NhbmRib3hFeHRlbnNp
b24tPmludmFsaWRhdGUoKTsKLX0KLQotYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lKCkK
LXsKLSAgICBBU1NFUlQobV9zYW5kYm94RXh0ZW5zaW9uKTsKLQotICAgIGlmIChtX3VzZUNvdW50
KyspCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIG1fc2FuZGJveEV4dGVuc2lv
bi0+Y29uc3VtZSgpOwotfQotCi1ib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5l
bnRseSgpCi17Ci0gICAgQVNTRVJUKG1fc2FuZGJveEV4dGVuc2lvbik7Ci0KLSAgICBib29sIHJl
c3VsdCA9IG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwotCi0gICAgLy8gRGVzdHJveSB0
aGUgZXh0ZW5zaW9uIHdpdGhvdXQgaW52YWxpZGF0aW5nIGl0LgotICAgIG1fc2FuZGJveEV4dGVu
c2lvbiA9IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjb25zdCBIYW5kbGUmIGhhbmRsZSkKLXsKLSAg
ICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgp
OwotICAgIAotICAgIC8vIERlc3Ryb3kgdGhlIGV4dGVuc2lvbiB3aXRob3V0IGludmFsaWRhdGlu
ZyBpdC4KLSAgICBoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uID0gbnVsbHB0cjsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKFNBTkRCT1hfRVhURU5TSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9TYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0ZXJzTWFjLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQ5MDlkYTk5OTlhZGM0M2U3ZTZjY2FlZDhmOGZjYWZk
YjBiNmE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNNYWMu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmgi
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
OjpTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzKCkKLSAgICA6IG1fcHJvZmlsZVNlbGVj
dGlvbk1vZGUoUHJvZmlsZVNlbGVjdGlvbk1vZGU6OlVzZURlZmF1bHRTYW5kYm94UHJvZmlsZVBh
dGgpCi17Ci19Ci0KLVNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6On5TYW5kYm94SW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSArIDEg
PCBtX25hbWVkUGFyYW1ldGVycy5zaXplKCk7IGkgKz0gMikKLSAgICAgICAgZmFzdEZyZWUoY29u
c3RfY2FzdDxjaGFyKj4obV9uYW1lZFBhcmFtZXRlcnNbaSArIDFdKSk7Ci19Ci0KLXZvaWQgU2Fu
ZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczo6YXBwZW5kUGF0aEludGVybmFsKGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgY2hhciBub3JtYWxpemVkUGF0aFtQ
QVRIX01BWF07Ci0gICAgaWYgKCFyZWFscGF0aChwYXRoLCBub3JtYWxpemVkUGF0aCkpCi0gICAg
ICAgIG5vcm1hbGl6ZWRQYXRoWzBdID0gJ1wwJzsKLQotICAgIEFTU0VSVCghKG1fbmFtZWRQYXJh
bWV0ZXJzLnNpemUoKSAlIDIpKTsKLQotICAgIG1fbmFtZWRQYXJhbWV0ZXJzLmFwcGVuZChuYW1l
KTsKLSAgICBtX25hbWVkUGFyYW1ldGVycy5hcHBlbmQoZmFzdFN0ckR1cChub3JtYWxpemVkUGF0
aCkpOwotfQotCi12b2lkIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OmFkZENvbmZE
aXJlY3RvcnlQYXJhbWV0ZXIoY29uc3QgY2hhciogbmFtZSwgaW50IGNvbmZJRCkKLXsKLSAgICBj
aGFyIHBhdGhbUEFUSF9NQVhdOwotICAgIGlmIChjb25mc3RyKGNvbmZJRCwgcGF0aCwgUEFUSF9N
QVgpIDw9IDApCi0gICAgICAgIHBhdGhbMF0gPSAnXDAnOwotCi0gICAgYXBwZW5kUGF0aEludGVy
bmFsKG5hbWUsIHBhdGgpOwotfQotCi12b2lkIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRl
cnM6OmFkZFBhdGhQYXJhbWV0ZXIoY29uc3QgY2hhciogbmFtZSwgTlNTdHJpbmcgKnBhdGgpCi17
Ci0gICAgYXBwZW5kUGF0aEludGVybmFsKG5hbWUsIFtwYXRoIGxlbmd0aF0gPyBbKE5TU3RyaW5n
ICopcGF0aCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dIDogIiIpOwotfQotCi12b2lkIFNhbmRi
b3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OmFkZFBhdGhQYXJhbWV0ZXIoY29uc3QgY2hhciog
bmFtZSwgY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBhcHBlbmRQYXRoSW50ZXJuYWwobmFtZSwg
cGF0aCk7Ci19Ci0KLXZvaWQgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczo6YWRkUGFy
YW1ldGVyKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKQotewotICAgIG1fbmFt
ZWRQYXJhbWV0ZXJzLmFwcGVuZChuYW1lKTsKLSAgICBtX25hbWVkUGFyYW1ldGVycy5hcHBlbmQo
ZmFzdFN0ckR1cCh2YWx1ZSkpOwotfQotCi1jb25zdCBjaGFyKiBjb25zdCogU2FuZGJveEluaXRp
YWxpemF0aW9uUGFyYW1ldGVyczo6bmFtZWRQYXJhbWV0ZXJBcnJheSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCEobV9uYW1lZFBhcmFtZXRlcnMuc2l6ZSgpICUgMikpCi0gICAgICAgIG1fbmFtZWRQYXJh
bWV0ZXJzLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oMCkpOwotCi0gICAgcmV0dXJu
IG1fbmFtZWRQYXJhbWV0ZXJzLmRhdGEoKTsKLX0KLQotc2l6ZV90IFNhbmRib3hJbml0aWFsaXph
dGlvblBhcmFtZXRlcnM6OmNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uYW1lZFBhcmFt
ZXRlcnMuc2l6ZSgpIC8gMjsKLX0KLQotY29uc3QgY2hhciogU2FuZGJveEluaXRpYWxpemF0aW9u
UGFyYW1ldGVyczo6bmFtZShzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGluZGV4
ICE9IG1fbmFtZWRQYXJhbWV0ZXJzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fbmFtZWRQYXJhbWV0
ZXJzW2luZGV4ICogMl07Ci19Ci0KLWNvbnN0IGNoYXIqIFNhbmRib3hJbml0aWFsaXphdGlvblBh
cmFtZXRlcnM6OnZhbHVlKHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uYW1l
ZFBhcmFtZXRlcnNbaW5kZXggKiAyICsgMV07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NhbmRib3hVdGlsaXRpZXMuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5kYm94VXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGMwNWQ3ODFkODMwNmZlNjAzYzdlNWRkMDQ3NWVmNmEwZGFiNDJh
ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL1NhbmRib3hVdGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2ltcG9ydCA8c3lzL3R5
cGVzLmg+Ci0jaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgotI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4v
WFBDU1BJLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1ib29sIGNvbm5lY3RlZFByb2Nlc3NJ
c1NhbmRib3hlZCh4cGNfY29ubmVjdGlvbl90KTsKLWJvb2wgY3VycmVudFByb2Nlc3NJc1NhbmRi
b3hlZCgpOwotYm9vbCBwcm9jZXNzSGFzQ29udGFpbmVyKCk7Ci0KLS8vIFJldHVybnMgYW4gZW1w
dHkgc3RyaW5nIGlmIHRoZSBwcm9jZXNzIGlzIG5vdCBpbiBhIGNvbnRhaW5lci4KLVN0cmluZyBw
YXRoRm9yUHJvY2Vzc0NvbnRhaW5lcigpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvU2FuZGJveFV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9TYW5kYm94VXRpbGl0aWVzLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWQ1
NDgyM2JiNDJmZWNkNWQ3NzFiZTU1MzJkMzlkMzdlOWEyYzFkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5k
Ym94VXRpbGl0aWVzLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgotCi0j
aW1wb3J0IDxhcnJheT4KLSNpbXBvcnQgPHN5cy9wYXJhbS5oPgotI2ltcG9ydCA8d3RmL09TT2Jq
ZWN0UHRyLmg+Ci0jaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9TYW5kYm94U1BJLmg+Ci0jaW1wb3J0
IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBjdXJyZW50UHJvY2Vzc0lzU2FuZGJveGVk
KCkKLXsKLSAgICByZXR1cm4gc2FuZGJveF9jaGVjayhnZXRwaWQoKSwgbnVsbHB0ciwgU0FOREJP
WF9GSUxURVJfTk9ORSk7Ci19Ci0KLWJvb2wgY29ubmVjdGVkUHJvY2Vzc0lzU2FuZGJveGVkKHhw
Y19jb25uZWN0aW9uX3QgY29ubmVjdGlvblRvUGFyZW50KQotewotICAgIGF1ZGl0X3Rva2VuX3Qg
dG9rZW47Ci0gICAgeHBjX2Nvbm5lY3Rpb25fZ2V0X2F1ZGl0X3Rva2VuKGNvbm5lY3Rpb25Ub1Bh
cmVudCwgJnRva2VuKTsKLSAgICByZXR1cm4gc2FuZGJveF9jaGVja19ieV9hdWRpdF90b2tlbih0
b2tlbiwgbnVsbHB0ciwgU0FOREJPWF9GSUxURVJfTk9ORSk7Ci19Ci0KLWJvb2wgcHJvY2Vzc0hh
c0NvbnRhaW5lcigpCi17Ci0gICAgc3RhdGljIGJvb2wgaGFzQ29udGFpbmVyID0gIXBhdGhGb3JQ
cm9jZXNzQ29udGFpbmVyKCkuaXNFbXB0eSgpOwotICAgIHJldHVybiBoYXNDb250YWluZXI7Ci19
Ci0KLVN0cmluZyBwYXRoRm9yUHJvY2Vzc0NvbnRhaW5lcigpCi17Ci0gICAgc3RkOjphcnJheTxj
aGFyLCBNQVhQQVRITEVOPiBwYXRoOwotICAgIHBhdGhbMF0gPSAwOwotICAgIHNhbmRib3hfY29u
dGFpbmVyX3BhdGhfZm9yX3BpZChnZXRwaWQoKSwgcGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKTsK
LQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHBhdGguZGF0YSgpKTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IGI0MDRlM2FiZWI0MTM2NjgxNDY4ZmFlODE0YzFiNDIwOGVl
MTYyZGYuLjQxODM3ZTRhMTRkY2JmNjRkYWEyYWE5ZWU3ZWRlNzVkODhjN2NmY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKQEAgLTE0Myw2ICsxNDMsOSBAQCBTaGFyZWQvQ29jb2EvQXV4aWxpYXJ5
UHJvY2Vzc0NvY29hLm1tCiBTaGFyZWQvQ29jb2EvQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tl
ci5tbQogU2hhcmVkL0NvY29hL0RhdGFEZXRlY3Rpb25SZXN1bHQubW0KIFNoYXJlZC9Db2NvYS9M
b2FkUGFyYW1ldGVyc0NvY29hLm1tCitTaGFyZWQvQ29jb2EvU2FuZGJveEV4dGVuc2lvbkNvY29h
Lm1tCitTaGFyZWQvQ29jb2EvU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0ZXJzQ29jb2EubW0K
K1NoYXJlZC9Db2NvYS9TYW5kYm94VXRpbGl0aWVzLm1tCiBTaGFyZWQvQ29jb2EvU2hhcmVkUmlu
Z0J1ZmZlclN0b3JhZ2UuY3BwCiBTaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29j
b2EubW0KIFNoYXJlZC9Db2NvYS9XZWJFcnJvcnNDb2NvYS5tbQpAQCAtMTg2LDkgKzE4OSw2IEBA
IFNoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoLm1tCiBTaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBl
cy5tbQogU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tCiBTaGFyZWQvbWFjL1ByaW50SW5mb01h
Yy5tbQotU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9uTWFjLm1tCi1TaGFyZWQvbWFjL1NhbmRi
b3hJbml0aWFsaWF0aW9uUGFyYW1ldGVyc01hYy5tbQotU2hhcmVkL21hYy9TYW5kYm94VXRpbGl0
aWVzLm1tCiBTaGFyZWQvbWFjL1NlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAKIFNoYXJlZC9tYWMvU2Vj
SXRlbVJlc3BvbnNlRGF0YS5jcHAKIFNoYXJlZC9tYWMvU2VjSXRlbVNoaW0uY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZWVjNDMy
M2I0OTg1YzIyMzk5NGUxMWRlYmRlNmM1MjZlNzE4ODI2Li43OTZlYzg5NzUxYzU2NjMzNzQzZjQ4
MWRkN2Y4MmQ3ZTc4MzMzYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMzksNyArMjIzOSw2IEBACiAJCTFBQUIwMzc4MTg1QTdD
NkEwMEVERjUwMSAvKiBNZXNzYWdlU2VuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lc3NhZ2VTZW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFB
QjAzN0IxODVGOTlEODAwRURGNTAxIC8qIEFQSURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQVBJRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBQUI0QThDMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbmRib3hFeHRlbnNpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBQjRBQTkxMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hF
eHRlbnNpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
YW5kYm94RXh0ZW5zaW9uTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFC
RkUzOTE4MjlDMUVEMDA1QjA3MEUgLyogX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlSW50ZXJuYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUmVtb3RlT2JqZWN0SW50ZXJm
YWNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBREU2RkUxMEQ4
NTVGQzAwRDNENjNEIC8qIEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IG5hbWUgPSBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSBTREtST09UOyB9OwogCQkxQUFGMDg5ODE5MjY3RUU1MDBCNjM5MEMgLyogV0tVc2VyU2NyaXB0
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tVc2VyU2NyaXB0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYyMiw2ICszNjIxLDkgQEAKIAkJ
N0E4QTlENTcxRUYxMTlBQTAwOTgwMUFFIC8qIEFQSUluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxlQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOEE5RDU5MUVGMTMwMjAwMDk4MDFBRSAv
KiBBUElJbmplY3RlZEJ1bmRsZUJ1bmRsZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBUElJbmplY3RlZEJ1bmRsZUJ1bmRsZUNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QThBOUQ1QjFFRjE0NThFMDA5ODAxQUUgLyogQVBJSW5qZWN0ZWRC
dW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFQSUluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QUI0RUEzRjIyNzc3QzQ2MDA4NUJCQUEgLyogU2FuZGJv
eEV4dGVuc2lvbkNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU2FuZGJveEV4dGVuc2lvbkNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QUI0RUE0MTIyNzc3RkM3MDA4NUJCQUEgLyogU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0
ZXJzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTYW5kYm94SW5pdGlhbGlhdGlvblBh
cmFtZXRlcnNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FCNEVBNDIy
Mjc3ODBERDAwODVCQkFBIC8qIFNhbmRib3hVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTYW5kYm94VXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUljb25EYXRhYmFzZUNsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUI2RUE0NjFFRUFCNkIwMDAwMzdCMkIgLyogQVBJ
R2VvbG9jYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElHZW9sb2NhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
Q0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU0Miw3ICs0NTQ0LDYgQEAKIAkJRTE5NTgy
RDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQREZLaXRJbXBvcnRzLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlBy
b2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL2NvbS5hcHBsZS5XZWJQcm9jZXNzLnNiOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlFMTlCREE4NDE5MzY1RjRCMDBC
OTdGNTcgLyogY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNi
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVkZWVtZXJO
ZXRzY2FwZVBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE5QkRBODcx
OTM2ODZBNDAwQjk3RjU3IC8qIFNhbmRib3hVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTYW5kYm94VXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTlCREE4ODE5MzY4NkE0MDBCOTdGNTcgLyogU2FuZGJveFV0aWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW5kYm94VXRpbGl0aWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0
RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF0dHJpYnV0ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3
MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdHRyaWJ1dGVkU3RyaW5nLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDU1Myw3ICs0NTU0LDYgQEAKIAkJRTFDQzFCOEUxMkQ3RUFE
RjAwNjI1ODM4IC8qIFByaW50SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcmludEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDQzFCOEYxMkQ3
RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFByaW50SW5mb01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTFEMjZBNEMxNzU5NjM0RTAwOTVCRkQxIC8qIFdlYkNvbnRlbnRQcm9jZXNzLnhpYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IGZpbGUueGliOyBuYW1lID0gV2ViQ29udGVudFByb2Nlc3MueGliOyBwYXRoID0g
UmVzb3VyY2VzL1dlYkNvbnRlbnRQcm9jZXNzLnhpYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTFFNTUyQzIxNkFFMDY1RTAwNEVENjUzIC8qIFNhbmRib3hJbml0aWFsaWF0aW9uUGFy
YW1ldGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNh
bmRib3hJbml0aWFsaWF0aW9uUGFyYW1ldGVyc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTFFNTUyQzMxNkFFMDY1RTAwNEVENjUzIC8qIFNhbmRib3hJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FuZGJveElu
aXRpYWxpemF0aW9uUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUVFNTNEQzExRjhDRjlGMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVFNTNFNjExRjhD
RkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzUyLDYgKzYzNTIsMTAg
QEAKIAkJCQkyRDEwODc2MjFEMkM2NDFCMDBCODVGODIgLyogTG9hZFBhcmFtZXRlcnNDb2NvYS5t
bSAqLywKIAkJCQlDRDI4NjVFQzIyNTU1NjIwMDA2MDZBQzcgLyogUHJvY2Vzc1Rhc2tTdGF0ZU9i
c2VydmVyLmggKi8sCiAJCQkJQ0QyODY1RUQyMjU1NTYyMDAwNjA2QUM3IC8qIFByb2Nlc3NUYXNr
U3RhdGVPYnNlcnZlci5tbSAqLywKKwkJCQk3QUI0RUEzRjIyNzc3QzQ2MDA4NUJCQUEgLyogU2Fu
ZGJveEV4dGVuc2lvbkNvY29hLm1tICovLAorCQkJCTdBQjRFQTQxMjI3NzdGQzcwMDg1QkJBQSAv
KiBTYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNDb2NvYS5tbSAqLywKKwkJCQlFMTlCREE4
ODE5MzY4NkE0MDBCOTdGNTcgLyogU2FuZGJveFV0aWxpdGllcy5oICovLAorCQkJCTdBQjRFQTQy
MjI3NzgwREQwMDg1QkJBQSAvKiBTYW5kYm94VXRpbGl0aWVzLm1tICovLAogCQkJCUNENEI0RDlB
MUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5jcHAgKi8sCiAJCQkJ
Q0Q0QjREOUIxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggKi8s
CiAJCQkJMUFCMUY3OEUxRDFCMzRBNjAwN0M5QkQxIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc0Nv
Y29hLm1tICovLApAQCAtNzk3NSwxMCArNzk3OSw2IEBACiAJCQkJRTE5NTgyRDIxNTNDQkZENzAw
QjYwODc1IC8qIFBERktpdEltcG9ydHMuaCAqLywKIAkJCQlFMTk1ODJENDE1M0NDMDUzMDBCNjA4
NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLywKIAkJCQlFMUNDMUI4RjEyRDdFQURGMDA2MjU4Mzgg
LyogUHJpbnRJbmZvTWFjLm1tICovLAotCQkJCTFBQUI0QUE5MTI5NkYxNTQwMDIzOTUyRiAvKiBT
YW5kYm94RXh0ZW5zaW9uTWFjLm1tICovLAotCQkJCUUxRTU1MkMyMTZBRTA2NUUwMDRFRDY1MyAv
KiBTYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNNYWMubW0gKi8sCi0JCQkJRTE5QkRBODgx
OTM2ODZBNDAwQjk3RjU3IC8qIFNhbmRib3hVdGlsaXRpZXMuaCAqLywKLQkJCQlFMTlCREE4NzE5
MzY4NkE0MDBCOTdGNTcgLyogU2FuZGJveFV0aWxpdGllcy5tbSAqLywKIAkJCQk1MUQxMzA0RjEz
ODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmNwcCAqLywKIAkJCQk1MUQxMzA1
MDEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmggKi8sCiAJCQkJNTFEMTMw
NTExMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuY3BwICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>