<?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>61772</bug_id>
          
          <creation_ts>2011-05-31 01:53:57 -0700</creation_ts>
          <short_desc>[Meta] WebKit should have a tool to manipulate project files</short_desc>
          <delta_ts>2017-07-18 08:29:23 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>63527</dependson>
    
    <dependson>64505</dependson>
    
    <dependson>64507</dependson>
    
    <dependson>81317</dependson>
    
    <dependson>61773</dependson>
    
    <dependson>63419</dependson>
    
    <dependson>63514</dependson>
    
    <dependson>64148</dependson>
    
    <dependson>64149</dependson>
    
    <dependson>64506</dependson>
    
    <dependson>64511</dependson>
    
    <dependson>82595</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>morrita</cc>
    
    <cc>ossy</cc>
    
    <cc>peter</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>412505</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 01:53:57 -0700</bug_when>
    <thetext>I often wished there was a simple tool to automate adding, removing and renaming files, and that also correctly updates all project files along the way. So, in order to scratch that itch, I&apos;d go ahead and implement said tool.

Suggested syntax:

    Tools/Scripts/webkit-file add/rm/mv [options] file...

At first I would limit webkit-file to adding files (and perhaps just files in Sources/WebCore), and gradually expand the tool. For example:

    webkit-file add -cpp -h Sources/WebCore/html/toaster/HTMLToasterElement

would:

.) if the files don&apos;t exist: add new files HTMLToasterElement.cpp and HTMLToasterElement.h to the Sources/WebCore/html/toaster, and add the default boiler plate content
.) add this file to all relevant project files, &lt;xyz&gt;AllInOne.cpp, etc.
.) if the &apos;toaster&apos; directory is new: adds a new project group &apos;toaster&apos;
.) if in a git checkout: runs &apos;git add&apos; for all affected files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592032</commentid>
    <comment_count>1</comment_count>
      <attachid>134769</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-03-30 04:15:28 -0700</bug_when>
    <thetext>Created attachment 134769
work-in-progress, all-in-one

Uploading current work-in-progress state in one big all-in-one patch, as I&apos;ll be away from the project again for a while (and in case someone wants to hack on it).

This contains everything the patches for the individual child-bugs contain as well, plus some initial code for Visual Studio projects.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134769</attachid>
            <date>2012-03-30 04:15:28 -0700</date>
            <delta_ts>2012-03-30 04:15:28 -0700</delta_ts>
            <desc>work-in-progress, all-in-one</desc>
            <filename>webkit-file.patch</filename>
            <type>text/plain</type>
            <size>305694</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0LWZpbGUgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdC1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlOGQxNDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdC1maWxlCkBAIC0wLDAgKzEsNDcg
QEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjIFRoaXMgaXMg
YSB2ZXJ5IHNpbXBsZSBzY3JpcHQgZGVzaWduZWQgdG8gY3Jhd2wgdGhlIGJ1aWxkIGRpcmVjdG9y
eQorIyBmb3IgdmlzdWFsIHN0dWRpbyBleHByZXNzIGJ1aWxkIGxvZ3MgYW5kIHByaW50IHRoZW0g
dG8gc3Rkb3V0LgorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcm9qZWN0LndlYmtpdGZpbGUgaW1w
b3J0ICoKKworCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndikgPCAzOgorICAgICAg
ICBwcmludCAiVXNhZ2U6ICVzIFs8b3B0aW9ucz5dIDxjb21tYW5kPiBbLCA8Y29tbWFuZD5dLi4u
IiAlIHN5cy5hcmd2WzBdCisgICAgICAgIHJldHVybgorICAgIHdlYmNvcmVfc2V0dXAgPSBXZWJD
b3JlU2V0dXAoKQorICAgICN3ZWJjb3JlX3NldHVwID0gV2ViQ29yZURlYnVnU2V0dXAoKQorICAg
IHdlYmtpdF9maWxlID0gV2ViS2l0RmlsZSh3ZWJjb3JlX3NldHVwLCBzeXMuYXJndlsxOl0pCisg
ICAgd2Via2l0X2ZpbGUuZXhlY3V0ZV9jb21tYW5kX2xpbmUoKQorCisKK2lmIF9fbmFtZV9fID09
ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9wcm9qZWN0L19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vcHJvamVjdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lZjY1YmVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vcHJvamVjdC9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisjIFJlcXVpcmVkIGZvciBQ
eXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvY29tbWFuZC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvY29tbWFuZC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWZkOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9jb21tYW5kLnB5CkBAIC0wLDAgKzEs
MTUzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgY29w
eQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcm9qZWN0Lm9wdGlvbnMgaW1wb3J0ICoKKworCitj
bGFzcyBDb21tb25Db21tYW5kKG9iamVjdCk6CisgICAgIiIiCisgICAgUHJvamVjdCBmaWxlIG1h
bmlwdWxhdGlvbiBjb21tYW5kcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21t
YW5kLCBjb21tb24sIG9wdGlvbnM9Tm9uZSwgYXJncz1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGNv
bW1hbmQKKyAgICAgICAgYXNzZXJ0IGNvbW1vbgorICAgICAgICBhc3NlcnQgbm90IG9wdGlvbnMg
b3IgaXNpbnN0YW5jZShvcHRpb25zLCBDb21tb25PcHRpb25zKQorICAgICAgICBzZWxmLmNvbW1h
bmQgPSBjb21tYW5kCisgICAgICAgIHNlbGYuY29tbW9uID0gY29tbW9uCisgICAgICAgIHNlbGYu
b3B0aW9ucyA9IG9wdGlvbnMgb3IgQ29tbW9uT3B0aW9ucygpCisgICAgICAgIHNlbGYuYXJncyA9
IGFyZ3Mgb3IgW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGFyc2VfY29tbWFuZChj
b21tb24sIGdsb2JhbF9vcHRpb25zLCBsaXN0KToKKyAgICAgICAgYXNzZXJ0IGdsb2JhbF9vcHRp
b25zCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGdsb2JhbF9vcHRpb25zLCBDb21tb25PcHRp
b25zKQorICAgICAgICBpZiBub3QgbGlzdDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
Q29tbWFuZCBleHBlY3RlZCEiKQorICAgICAgICBjb21tYW5kX25hbWUgPSBsaXN0LnBvcCgwKQor
ICAgICAgICBpZiBjb21tYW5kX25hbWUgPT0gImhlbHAiOgorICAgICAgICAgICAgY29tbWFuZCA9
IENvbW1vbkhlbHBDb21tYW5kKGNvbW1hbmRfbmFtZSwgY29tbW9uLCBjb3B5LmNvcHkoZ2xvYmFs
X29wdGlvbnMpKQorICAgICAgICBpZiBjb21tYW5kX25hbWUgPT0gInNvcnQiOgorICAgICAgICAg
ICAgY29tbWFuZCA9IENvbW1vblNvcnRDb21tYW5kKGNvbW1hbmRfbmFtZSwgY29tbW9uLCBjb3B5
LmNvcHkoZ2xvYmFsX29wdGlvbnMpKQorICAgICAgICBlbGlmIGNvbW1hbmRfbmFtZSA9PSAiYWRk
IjoKKyAgICAgICAgICAgIGNvbW1hbmQgPSBDb21tb25BZGRGaWxlQ29tbWFuZChjb21tYW5kX25h
bWUsIGNvbW1vbiwgY29weS5jb3B5KGdsb2JhbF9vcHRpb25zKSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGNvbW1vbi5lcnJvcigiVW5rbm93biBDb21tYW5kICclcychIiAlIGNvbW1hbmRf
bmFtZSkKKyAgICAgICAgY29tbWFuZC5vcHRpb25zLnBhcnNlKGNvbW1vbiwgbGlzdCkKKyAgICAg
ICAgd2hpbGUgbGlzdCBhbmQgbGlzdFswXSAhPSAnLCc6CisgICAgICAgICAgICBjb21tYW5kLmFy
Z3MuYXBwZW5kKGxpc3QucG9wKDApKQorICAgICAgICBjb21tYW5kLnZlcmlmeSgpCisgICAgICAg
IHJldHVybiBjb21tYW5kCisKKyAgICBkZWYgY2Fub25pY2FsaXplX2FyZ3NfZmlsZV9wYXRocyhz
ZWxmKToKKyAgICAgICAgIyBDYW5vbmljYWxpemUgcmVsYXRpdmUgZmlsZSBwYXRocyB0byBvcmln
aW5hdGUgZnJvbSB0aGUgU0NNIGNoZWNrb3V0IHJvb3QuCisgICAgICAgIGFyZ3MgPSBzZWxmLmFy
Z3NbOl0KKyAgICAgICAgc2VsZi5hcmdzID0gW10KKyAgICAgICAgZm9yIGZpbGVfcGF0aCBpbiBh
cmdzOgorICAgICAgICAgICAgaWYgJyAnIGluIGZpbGVfcGF0aDoKKyAgICAgICAgICAgICAgICBz
ZWxmLmNvbW1vbi53YXJuaW5nKCJSZXBsYWNpbmcgc3BhY2VzICcgJyB3aXRoIHVuZGVyc2NvcmVz
ICdfJyBpbiBmaWxlICVzISIgJSBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgZmlsZV9wYXRo
ID0gZmlsZV9wYXRoLnJlcGxhY2UoJyAnLCAnXycpCisgICAgICAgICAgICBpZiBub3QgZmlsZV9w
YXRoOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbW9uLndhcm5pbmcoIiclcyc6IGRpc2NhcmRp
bmcgZW1wdHkgYXJndW1lbnQiICUgc2VsZi5jb21tYW5kKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBpZiBzZWxmLmNvbW1vbi5maWxlc3lzdGVtLmlzYWJzKGZpbGVfcGF0
aCkgb3IgZmlsZV9wYXRoWzBdID09ICckJzoKKyAgICAgICAgICAgICAgICAjIEFic29sdXRlIHBh
dGggb3IgcGF0aCBzdGFydGluZyBmcm9tIGEgdmFyaWFibGUgLT4gdXNlIGFzIGlzLgorICAgICAg
ICAgICAgICAgIHNlbGYuYXJncy5hcHBlbmQoZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisgICAgICAgICAgICBhYnNwYXRoID0gc2VsZi5jb21tb24uZmlsZXN5c3RlbS5hYnNw
YXRoKGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHJlbHBhdGggPSBzZWxmLmNvbW1vbi5maWxlc3lz
dGVtLnJlbHBhdGgoZmlsZV9wYXRoLCBzZWxmLmNvbW1vbi5zY21fYWJzcGF0aCkKKyAgICAgICAg
ICAgIHNlbGYuYXJncy5hcHBlbmQocmVscGF0aCkKKworICAgIGRlZiB2ZXJpZnkoc2VsZik6Cisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVt
ZW50IgorCisgICAgZGVmIGV4ZWN1dGVfaW5fcHJvamVjdChzZWxmLCBwcm9qZWN0KToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQi
CisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBwbGF0Zm9ybV90b19wcm9qZWN0KToKKyAgICAgICAg
Zm9yIChwbGF0Zm9ybSwgcHJvamVjdCkgaW4gcGxhdGZvcm1fdG9fcHJvamVjdC5pdGVtcygpOgor
ICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmlzX3BsYXRmb3JtX2VuYWJsZWQocGxhdGZvcm0p
OgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9pbl9wcm9qZWN0KHByb2plY3QpCisKKwor
IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBD
b21tb25IZWxwQ29tbWFuZChDb21tb25Db21tYW5kKToKKyAgICAiIiIKKyAgICAnc29ydCcgY29t
bWFuZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kLCBjb21tb24sIG9w
dGlvbnM9Tm9uZSwgYXJncz1Ob25lKToKKyAgICAgICAgQ29tbW9uQ29tbWFuZC5fX2luaXRfXyhz
ZWxmLCBjb21tYW5kLCBjb21tb24sIG9wdGlvbnMsIGFyZ3MpCisKKyAgICBkZWYgdmVyaWZ5KHNl
bGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBwbGF0Zm9ybV90b19w
cm9qZWN0KToKKyAgICAgICAgIworICAgICAgICAjIFRPRE86IG91dHB1dCBoZWxwLCBzcGVjaWZp
YyB0byBhcmd1bWVudHMgKGlmIGFueSksIG9yIGdlbmVyYWwKKyAgICAgICAgIworICAgICAgICBw
YXNzCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
CitjbGFzcyBDb21tb25Tb3J0Q29tbWFuZChDb21tb25Db21tYW5kKToKKyAgICAiIiIKKyAgICAn
c29ydCcgY29tbWFuZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kLCBj
b21tb24sIG9wdGlvbnM9Tm9uZSwgYXJncz1Ob25lKToKKyAgICAgICAgQ29tbW9uQ29tbWFuZC5f
X2luaXRfXyhzZWxmLCBjb21tYW5kLCBjb21tb24sIG9wdGlvbnMsIGFyZ3MpCisKKyAgICBkZWYg
dmVyaWZ5KHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1vbi52ZXJpZnkobm90IHNlbGYuYXJncywg
Iidzb3J0JyBjb21tYW5kIGRvZXMgbm90IHRha2UgYXJndW1lbnRzISIpCisKKyAgICBkZWYgZXhl
Y3V0ZV9pbl9wcm9qZWN0KHNlbGYsIHByb2plY3QpOgorICAgICAgICBwYXNzCisKKworIyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBDb21tb25B
ZGRGaWxlQ29tbWFuZChDb21tb25Db21tYW5kKToKKyAgICAiIiIKKyAgICAnYWRkJyBjb21tYW5k
CisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGNvbW1vbiwgb3B0aW9u
cz1Ob25lLCBhcmdzPU5vbmUpOgorICAgICAgICBDb21tb25Db21tYW5kLl9faW5pdF9fKHNlbGYs
IGNvbW1hbmQsIGNvbW1vbiwgb3B0aW9ucywgYXJncykKKworICAgIGRlZiB2ZXJpZnkoc2VsZik6
CisgICAgICAgIHNlbGYuY2Fub25pY2FsaXplX2FyZ3NfZmlsZV9wYXRocygpCisgICAgICAgIHNl
bGYuY29tbW9uLnZlcmlmeShzZWxmLmFyZ3MsICInYWRkJyBjb21tYW5kIHJlcXVpcmVzIGF0IGxl
YXN0IDEgZmlsZSBwYXRoIGFyZ3VtZW50ISIpCisKKyAgICBkZWYgZXhlY3V0ZV9pbl9wcm9qZWN0
KHNlbGYsIHByb2plY3QpOgorICAgICAgICBmb3IgZmlsZV9wYXRoIGluIHNlbGYuYXJnczoKKyAg
ICAgICAgICAgIGZpbGUgPSBzZWxmLmNvbW1vbi5lbnN1cmVfZmlsZV9wYXRoKHNlbGYuY29tbW9u
LnNjbV9kaXJlY3RvcnksIGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHByb2plY3QuYWRkX2ZpbGUo
ZmlsZSkKKworCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9q
ZWN0L2NvbW1vbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvY29t
bW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTA5MTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L2NvbW1v
bi5weQpAQCAtMCwwICsxLDU3OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZGV0
ZWN0aW9uIGltcG9ydCBTQ01EZXRlY3RvcgorZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5v
cHRpb25zIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBp
bXBvcnQgRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBp
bXBvcnQgRXhlY3V0aXZlCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorCisKK2NsYXNzIENvbW1vbkZpbGUob2JqZWN0KToKKyAgICAiIiIKKyAgICBD
bGFzcyBkZXNjcmliaW5nIGEgZmlsZSBhcyBpdCBpcyBvbiBkaXNrLiBUaGlzIGlzIG5vdCBwcm9q
ZWN0LXNwZWNpZmljLgorICAgIE5vIDIgQ29tbW9uRmlsZSBvYmplY3RzIGV2ZXIgZGVzY3JpYmUg
dGhlIHNhbWUgZmlsZS4KKyAgICBMaXN0cyBhbGwgUHJvamVjdEZpbGVSZWZlcmVuY2VzIHRoaXMg
ZmlsZSBpcyByZWZlcnJlZCBieS4KKyAgICAiIiIKKyAgICBJRF9DT1VOVEVSID0gMAorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSwgZmlsZV9uYW1lKToKKyAgICAgICAgYXNzZXJ0
IGRpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRp
cmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IGZpbGVfbmFtZQorICAgICAgICBhc3NlcnQgc2VsZi5p
c192YWxpZF9maWxlX25hbWUoZmlsZV9uYW1lKQorICAgICAgICBDb21tb25GaWxlLklEX0NPVU5U
RVIgKz0gMQorICAgICAgICBzZWxmLl9pZCA9IENvbW1vbkZpbGUuSURfQ09VTlRFUgorICAgICAg
ICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorICAgICAgICBzZWxmLm5hbWUgPSBmaWxlX25h
bWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNfdmFsaWRfZmlsZV9uYW1lKG5hbWUp
OgorICAgICAgICByZXR1cm4gbmFtZSBhbmQgbmFtZSAhPSAnLicgYW5kIG5hbWUgIT0gJy4uJyBh
bmQgJy8nIG5vdCBpbiBuYW1lIGFuZCAnXFwnIG5vdCBpbiBuYW1lCisKKyAgICBkZWYgaXNfdmFs
aWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmlzX3ZhbGlkX2ZpbGVfbmFtZShzZWxmLm5h
bWUpIGFuZCBzZWxmLmRpcmVjdG9yeSBhbmQgc2VsZi5kaXJlY3RvcnkuaXNfdmFsaWQoKQorCisg
ICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKwor
ICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBvdGhl
ciBvciBzZWxmLl9pZCAhPSBvdGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIK
KworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBv
dGhlciBvciBzZWxmLl9pZCAhPSBvdGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90
IG90aGVyCisKKyAgICBkZWYgZGVidWdfcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
ZGlyZWN0b3J5LmRlYnVnX3BhdGgoKSArICcvJyArIHNlbGYubmFtZQorCisKKyMgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgQ29tbW9uRGlyZWN0
b3J5KG9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3MgYWJzdHJhY3RseSBkZXNjcmliaW5nIGEg
ZGlyZWN0b3J5LiBUaGlzIGlzIG5vdCBwcm9qZWN0LXNwZWNpZmljLgorICAgIE5vIDIgQ29tbW9u
RGlyZWN0b3J5IG9iamVjdHMgZXZlciBkZXNjcmliZSB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAg
Q29tbW9uRmlsZSBvYmplY3RzIGFyZSBhbHdheXMgYXNzaWduZWQgdG8gYSBDb21tb25EaXJlY3Rv
cnkuCisgICAgRGlyZWN0b3JpZXMgZm9ybSBhIHRyZWUgLSBncmFwaCBzdHJ1Y3R1cmVzLCBpLmUu
IGRpZmZlcmVudCBwYXRocyB0byB0aGUgc2FtZSBkaXJlY3RvcnksIGFyZSBub3Qgc3VwcG9ydGVk
LgorICAgICIiIgorICAgIElEX0NPVU5URVIgPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5X25hbWUpOgorICAgICAgICBDb21tb25EaXJlY3Rv
cnkuSURfQ09VTlRFUiArPSAxCisgICAgICAgIHNlbGYuX2lkID0gQ29tbW9uRGlyZWN0b3J5LklE
X0NPVU5URVIKKyAgICAgICAgc2VsZi5uYW1lID0gZGlyZWN0b3J5X25hbWUKKyAgICAgICAgc2Vs
Zi5wYXJlbnRfZGlyZWN0b3J5ID0gcGFyZW50X2RpcmVjdG9yeSAgICAjIG1heSBiZSBOb25lCisg
ICAgICAgIHNlbGYuZmlsZXMgPSB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXAg
ZmlsZSBuYW1lIChzdHJpbmcpIC0+IENvbW1vbkZpbGUKKyAgICAgICAgc2VsZi5kaXJlY3Rvcmll
cyA9IHsnLic6ICBzZWxmfSAgICAgICAgICAgICAjIG1hcCBkaXJlY3RvcnkgbmFtZSAoc3RyaW5n
KSAtPiBDb21tb25EaXJlY3RvcnkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIGhhc2goc2VsZi5faWQpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBzZWxmIGlzIG90aGVyIG9yIHNlbGYuX2lkICE9IG90
aGVyLl9pZAorICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorCisgICAgZGVmIF9fbmVfXyhz
ZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBub3Qgb3RoZXIgb3Igc2VsZiBpcyBvdGhlciBv
ciBzZWxmLl9pZCAhPSBvdGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVy
CisKKyAgICBkZWYgX2FkZF9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2Vy
dCBkaXJlY3RvcnkuaXNfdmFsaWQoKQorICAgICAgICBhc3NlcnQgZGlyZWN0b3J5Lm5hbWUgbm90
IGluIHNlbGYuZGlyZWN0b3JpZXMKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeS5uYW1lIG5vdCBp
biBzZWxmLmZpbGVzCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSBp
cyBzZWxmCisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXNbZGlyZWN0b3J5Lm5hbWVdID0gZGlyZWN0
b3J5CisKKyAgICBkZWYgX3JlbW92ZV9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAg
IGFzc2VydCBkaXJlY3RvcnkubmFtZSBpbiBzZWxmLmRpcmVjdG9yaWVzCisgICAgICAgIGRlbCBz
ZWxmLmRpcmVjdG9yaWVzW2RpcmVjdG9yeS5uYW1lXQorCisgICAgZGVmIF9hZGRfZmlsZShzZWxm
LCBmaWxlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAg
ICAgICAgYXNzZXJ0IENvbW1vbkZpbGUuaXNfdmFsaWRfZmlsZV9uYW1lKGZpbGUubmFtZSkKKyAg
ICAgICAgYXNzZXJ0IGZpbGUubmFtZSBub3QgaW4gc2VsZi5kaXJlY3RvcmllcworICAgICAgICBh
c3NlcnQgZmlsZS5uYW1lIG5vdCBpbiBzZWxmLmZpbGVzCisgICAgICAgIHNlbGYuZmlsZXNbZmls
ZS5uYW1lXSA9IGZpbGUKKworICAgIGRlZiBfcmVtb3ZlX2ZpbGUoc2VsZiwgZmlsZSk6CisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUsIFByb2plY3RGaWxlKQorICAgICAgICBhc3NlcnQg
ZmlsZS5uYW1lIGluIHNlbGYuZmlsZXMKKyAgICAgICAgZGVsIHNlbGYuZmlsZXNbZmlsZS5uYW1l
XQorCisgICAgZGVmIGRlYnVnX3BhdGgoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFyZW50X2Rp
cmVjdG9yeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudF9kaXJlY3RvcnkuZGVidWdf
cGF0aCgpICsgJy8nICsgc2VsZi5uYW1lCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKworICAg
IGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmRpcmVjdG9yaWVz
KSA+PSAxCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5kaXJlY3RvcmllcykgPD0gMQorCisgICAg
ZGVmIGdldF9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5X25hbWUpOgorICAgICAgICBhc3NlcnQg
ZGlyZWN0b3J5X25hbWUKKyAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5kaXJlY3Rvcmllcy5nZXQo
ZGlyZWN0b3J5X25hbWUpCisgICAgICAgIGlmIGRpcmVjdG9yeV9uYW1lID09ICcuJzoKKyAgICAg
ICAgICAgIGFzc2VydCBkaXJlY3RvcnkgaXMgc2VsZgorICAgICAgICBlbGlmIGRpcmVjdG9yeV9u
YW1lID09ICcuLic6CisgICAgICAgICAgICBhc3NlcnQgZGlyZWN0b3J5IGlzIHNlbGYucGFyZW50
X2RpcmVjdG9yeQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBkaXJlY3Rv
cnkgb3IgZGlyZWN0b3J5LnBhcmVudF9kaXJlY3RvcnkgaXMgc2VsZiBvciAoaXNpbnN0YW5jZShz
ZWxmLCBDb21tb25Dcm9zc292ZXJTdWJEaXJlY3RvcnkpIGFuZCBpc2luc3RhbmNlKGRpcmVjdG9y
eSwgQ29tbW9uQmFzZURpcmVjdG9yeSkpCisgICAgICAgIHJldHVybiBkaXJlY3RvcnkKKworICAg
IGRlZiBhZGRfZmlsZShzZWxmLCBmaWxlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmls
ZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgYXNzZXJ0IENvbW1vbkZpbGUuaXNfdmFsaWRfZmlsZV9u
YW1lKGZpbGUubmFtZSkKKyAgICAgICAgYXNzZXJ0IGZpbGUubmFtZSBub3QgaW4gc2VsZi5kaXJl
Y3RvcmllcworICAgICAgICBhc3NlcnQgZmlsZS5uYW1lIG5vdCBpbiBzZWxmLmZpbGVzCisgICAg
ICAgIHNlbGYuX2FkZF9maWxlKGZpbGUpCisgICAgICAgIGZpbGUuZGlyZWN0b3J5ID0gc2VsZgor
CisgICAgZGVmIHJlbW92ZV9maWxlKHNlbGYsIGZpbGUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShmaWxlLCBQcm9qZWN0RmlsZSkKKyAgICAgICAgYXNzZXJ0IGZpbGUubmFtZSBpbiBzZWxm
LmZpbGVzCisgICAgICAgIHNlbGYuX3JlbW92ZV9maWxlKGZpbGUpCisgICAgICAgIGZpbGUuZGly
ZWN0b3J5ID0gTm9uZQorCisgICAgZGVmIGdldF9maWxlKHNlbGYsIGZpbGVfbmFtZSk6CisgICAg
ICAgIGFzc2VydCBmaWxlX25hbWUKKyAgICAgICAgZmlsZSA9IHNlbGYuZmlsZXMuZ2V0KGZpbGVf
bmFtZSkKKyAgICAgICAgYXNzZXJ0IG5vdCBmaWxlIG9yIGZpbGUuZGlyZWN0b3J5IGlzIHNlbGYK
KyAgICAgICAgcmV0dXJuIGZpbGUKKworICAgIGRlZiBnZXRfZW50cnkoc2VsZiwgbmFtZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLmdldF9kaXJlY3RvcnkobmFtZSkgb3Igc2VsZi5nZXRfZmlsZShu
YW1lKQorCisgICAgZGVmIGRpcmVjdG9yeV9saXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBh
cmVudF9kaXJlY3Rvcnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRfZGlyZWN0b3J5
LmRpcmVjdG9yeV9saXN0KCkgKyBbc2VsZl0KKyAgICAgICAgcmV0dXJuIFtzZWxmXQorCisgICAg
ZGVmIGJhc2VfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhcmVudF9kaXJlY3Rv
cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRfZGlyZWN0b3J5LmJhc2VfZGlyZWN0
b3J5KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBjb21tb25fZGlyZWN0b3J5KHNl
bGYsIG90aGVyX2RpcmVjdG9yeSk6CisgICAgICAgIGFzc2VydCBvdGhlcl9kaXJlY3RvcnkKKyAg
ICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3RoZXJfZGlyZWN0b3J5KQorICAgICAgICBkaXJlY3Rv
cnlfbGlzdDEgPSBzZWxmLmRpcmVjdG9yeV9saXN0KCkKKyAgICAgICAgZGlyZWN0b3J5X2xpc3Qy
ID0gb3RoZXJfZGlyZWN0b3J5LmRpcmVjdG9yeV9saXN0KCkKKyAgICAgICAgY29tbW9uX2RpcmVj
dG9yeSA9IE5vbmUKKyAgICAgICAgd2hpbGUgZGlyZWN0b3J5X2xpc3QxIGFuZCBkaXJlY3Rvcnlf
bGlzdDIgYW5kIGRpcmVjdG9yeV9saXN0MVswXSA9PSBkaXJlY3RvcnlfbGlzdDJbMF06CisgICAg
ICAgICAgICBjb21tb25fZGlyZWN0b3J5ID0gZGlyZWN0b3J5X2xpc3QxLnBvcCgwKQorICAgICAg
ICAgICAgZGlyZWN0b3J5X2xpc3QyLnBvcCgwKQorICAgICAgICByZXR1cm4gY29tbW9uX2RpcmVj
dG9yeQorCisKK2NsYXNzIENvbW1vblJvb3REaXJlY3RvcnkoQ29tbW9uRGlyZWN0b3J5KToKKyAg
ICAiIiIKKyAgICBDbGFzcyBkZXNjcmliaW5nIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICAiIiIK
KyAgICBOQU1FID0gJy8nCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1v
bkRpcmVjdG9yeS5fX2luaXRfXyhzZWxmLCBOb25lLCBDb21tb25Sb290RGlyZWN0b3J5Lk5BTUUp
CisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgX2Rlc2NwYXRoX3dpdGhfc2VwKHNlbGYsIHNlcCk6CisgICAgICAgIHJldHVybiBzZXAKKwor
CitjbGFzcyBDb21tb25TQ01EaXJlY3RvcnkoQ29tbW9uRGlyZWN0b3J5KToKKyAgICAiIiIKKyAg
ICBDbGFzcyBkZXNjcmliaW5nIHRoZSBjaGVja291dCByb290IGRpcmVjdG9yeS4KKyAgICAiIiIK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5X25hbWUsIHJvb3RfZGlyZWN0b3J5LCBh
YnNwYXRoKToKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9uYW1lCisgICAgICAgIGFzc2VydCBy
b290X2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShyb290X2RpcmVjdG9yeSwg
Q29tbW9uUm9vdERpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IGFic3BhdGgKKyAgICAgICAgQ29t
bW9uRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIE5vbmUsIGRpcmVjdG9yeV9uYW1lKQorICAgICAg
ICBzZWxmLnJvb3RfZGlyZWN0b3J5ID0gcm9vdF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5hYnNw
YXRoID0gYWJzcGF0aAorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgZGVmIF9kZXNjcGF0aF93aXRoX3NlcChzZWxmLCBzZXApOgorICAgICAgICBy
ZXR1cm4gc2VsZi5uYW1lICsgc2VwCisKKworY2xhc3MgQ29tbW9uQmFzZURpcmVjdG9yeShDb21t
b25EaXJlY3RvcnkpOgorICAgICIiIgorICAgIENsYXNzIGRlc2NyaWJpbmcgYSBiYXNlIGRpcmVj
dG9yeSB0aGF0IGlzIG5vdCBsb2NhdGVkIGF0IGFueSBzcGVjaWZpYyBwbGFjZS4KKyAgICBGb3Ig
ZXhhbXBsZTogYnVpbGQgb3V0cHV0IGRpcmVjdG9yeSwgdGVtcCBkaXJlY3RvcnkKKyAgICAiIiIK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5X25hbWUpOgorICAgICAgICBhc3NlcnQg
ZGlyZWN0b3J5X25hbWUKKyAgICAgICAgQ29tbW9uRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIE5v
bmUsIGRpcmVjdG9yeV9uYW1lKQorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZXNjcGF0aF93aXRoX3NlcChzZWxmLCBzZXApOgorICAg
ICAgICByZXR1cm4gc2VsZi5uYW1lICsgc2VwCisKKworY2xhc3MgQ29tbW9uU3ViRGlyZWN0b3J5
KENvbW1vbkRpcmVjdG9yeSk6CisgICAgIiIiCisgICAgQ2xhc3MgZGVzY3JpYmluZyBhIHN1YmRp
cmVjdG9yeSB1bmRlciBhIHJvb3QtLCBiYXNlLSBvciBvdGhlciBzdWItZGlyZWN0b3J5LgorICAg
ICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJlY3Rvcnlf
bmFtZSk6CisgICAgICAgIGFzc2VydCBwYXJlbnRfZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKHBhcmVudF9kaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAgYXNz
ZXJ0IHNlbGYuaXNfdmFsaWRfc3ViZGlyZWN0b3J5X25hbWUoZGlyZWN0b3J5X25hbWUpCisgICAg
ICAgIENvbW1vbkRpcmVjdG9yeS5fX2luaXRfXyhzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJl
Y3RvcnlfbmFtZSkKKyAgICAgICAgc2VsZi5kaXJlY3Rvcmllc1snLi4nXSA9IHBhcmVudF9kaXJl
Y3RvcnkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNfdmFsaWRfc3ViZGlyZWN0b3J5
X25hbWUobmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGFuZCBuYW1lICE9ICcuJyBhbmQgbmFt
ZSAhPSAnLi4nIGFuZCAnLycgbm90IGluIG5hbWUgYW5kICdcXCcgbm90IGluIG5hbWUKKworICAg
IGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50X2RpcmVjdG9y
eSBhbmQgc2VsZi5wYXJlbnRfZGlyZWN0b3J5LmlzX3ZhbGlkKCkgYW5kIHNlbGYuaXNfdmFsaWRf
c3ViZGlyZWN0b3J5X25hbWUoc2VsZi5uYW1lKQorCisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgor
ICAgICAgICBhc3NlcnQgbGVuKHNlbGYuZGlyZWN0b3JpZXMpID49IDIKKyAgICAgICAgcmV0dXJu
IGxlbihzZWxmLmRpcmVjdG9yaWVzKSA8PSAyCisKKyAgICBkZWYgX2Rlc2NwYXRoX3dpdGhfc2Vw
KHNlbGYsIHNlcCk6CisgICAgICAgIHJldHVybiBzZWxmLnBhcmVudF9kaXJlY3RvcnkuX2Rlc2Nw
YXRoX3dpdGhfc2VwKHNlcCkgKyBzZWxmLm5hbWUgKyBzZXAKKworCitjbGFzcyBDb21tb25Dcm9z
c292ZXJTdWJEaXJlY3RvcnkoQ29tbW9uU3ViRGlyZWN0b3J5KToKKyAgICAiIiIKKyAgICBDbGFz
cyBmb3Igc3BlY2lhbCBkaXJlY3RvcmllcyB0aGF0IGhhdmUgYXQgbGVhc3Qgc29tZSBzdWItZGly
ZWN0b3JpZXMgdGhhdCBhcmUgQ29tbW9uQmFzZURpcmVjdG9yeSBvYmplY3RzIHJhdGhlciB0aGFu
IENvbW1vblN1YkRpcmVjdG9yeS4KKyAgICBGb3IgZXhhbXBsZSwgJ0Rlcml2ZWRTb3VyY2VzJyB1
bmRlciAnJHtCVUlMRH0nIGlzIHN1Y2ggYSBjYXNlLCBhcyBpdCdzIG93biAnV2ViQ29yZScgc3Vi
LWRpcmVjdG9yeSBlbnRyeSBjcm9zc2VzIG92ZXIgaW50byBhbm90aGVyIGJhc2UgZGlyZWN0b3J5
LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJl
Y3RvcnlfbmFtZSwgbmFtZV90b19zdWJkaXJlY3RvcnkpOgorICAgICAgICBhc3NlcnQgcGFyZW50
X2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJlbnRfZGlyZWN0b3J5LCBD
b21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBzZWxmLmlzX3ZhbGlkX3N1YmRpcmVjdG9y
eV9uYW1lKGRpcmVjdG9yeV9uYW1lKQorICAgICAgICBhc3NlcnQgbmFtZV90b19zdWJkaXJlY3Rv
cnkKKyAgICAgICAgQ29tbW9uU3ViRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIHBhcmVudF9kaXJl
Y3RvcnksIGRpcmVjdG9yeV9uYW1lKQorICAgICAgICBzZWxmLmRpcmVjdG9yaWVzLnVwZGF0ZShu
YW1lX3RvX3N1YmRpcmVjdG9yeSkKKworCitjbGFzcyBDb21tb25ERUZJTkUob2JqZWN0KToKKyAg
ICAiIiIKKyAgICBDbGFzcyBkZXNjcmliaW5nIGEgZ2VuZXJhbCBFTkFCTEVfLi4uIGZsYWcsIG9y
IHNpbWlsYXIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmxhZ19uYW1lKToKKyAg
ICAgICAgYXNzZXJ0IGZsYWdfbmFtZQorICAgICAgICBzZWxmLmZsYWdfbmFtZSA9IGZsYWdfbmFt
ZQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLmZs
YWdfbmFtZSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQg
bm90IG90aGVyIG9yIGlzaW5zdGFuY2Uob3RoZXIsIENvbW1vbkRFRklORSkKKyAgICAgICAgYXNz
ZXJ0IG5vdCBvdGhlciBvciBzZWxmIGlzIG90aGVyIG9yIHNlbGYuZmxhZ19uYW1lICE9IG90aGVy
LmZsYWdfbmFtZQorICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorCisgICAgZGVmIF9fbmVf
XyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBub3Qgb3RoZXIgb3IgaXNpbnN0YW5jZShv
dGhlciwgQ29tbW9uREVGSU5FKQorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIHNlbGYgaXMg
b3RoZXIgb3Igc2VsZi5mbGFnX25hbWUgIT0gb3RoZXIuZmxhZ19uYW1lCisgICAgICAgIHJldHVy
biBzZWxmIGlzIG5vdCBvdGhlcgorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworY2xhc3MgQ29tbW9uSW5mbyhvYmplY3QpOgorICAgICIiIgorICAg
IFN0dWZmIGNvbW1vbiB0byBhbGwgcGxhdGZvcm0gcHJvamVjdCBmaWxlcyB3aXRoaW4gdGhlIHNh
bWUgY2hlY2tvdXQuCisgICAgSG9sZHMgYWxsIGRpcmVjdG9yaWVzIGFuZCBhbGwgZmlsZXMgb2Yg
dGhlIGNoZWNrb3V0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0X25h
bWUsIG9wdGlvbnM9Tm9uZSwgZmlsZXN5c3RlbT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IHByb2pl
Y3RfbmFtZQorICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCisgICAgICAgICMg
dGhlIGZpbGUgc3lzdGVtIG9iamVjdCB0byB1c2UgKHNlcGFyYXRlIGNsYXNzIHRvIGFsbG93IG1v
Y2tpbmcpCisgICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0gb3IgRmlsZVN5c3Rl
bSgpCisgICAgICAgICMgdGhlIHNvdXJjZSBjb250cm9sIG1hbmFnZW1lbnQgb2JqZWN0CisgICAg
ICAgIHNlbGYuc2NtID0gU0NNRGV0ZWN0b3Ioc2VsZi5maWxlc3lzdGVtLCBzZWxmLmV4ZWN1dGl2
ZSkuZGVmYXVsdF9zY20oKQorICAgICAgICAjIGFic29sdXRlIHBhdGggb2YgdGhlIGNoZWNrb3V0
IHJvb3QgKHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMpCisgICAgICAgIHNlbGYuc2NtX2Fic3BhdGgg
PSBzZWxmLnNjbS5jaGVja291dF9yb290LnJzdHJpcCgnLycpLnJzdHJpcCgnXFwnKQorICAgICAg
ICAjIG5vbi1wbGF0Zm9ybS1zcGVjaWZpYyBuYW1lIG9mIHRoZSBwcm9qZWN0CisgICAgICAgIHNl
bGYucHJvamVjdF9uYW1lID0gcHJvamVjdF9uYW1lCisgICAgICAgICMgb3B0aW9ucyB0byB1c2UK
KyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyBvciBDb21tb25PcHRpb25zKCkKKyAgICAg
ICAgIyBTdG9yZSBhbGwgZGlyZWN0b3JpZXMgYW5kIGFsbCBmaWxlcyBmb3IgcXVpY2sgcmVmZXJl
bmNlCisgICAgICAgIHNlbGYuYWxsX2RpcmVjdG9yaWVzID0gc2V0KCkKKyAgICAgICAgc2VsZi5h
bGxfZmlsZXMgPSBzZXQoKQorICAgICAgICAjIFN0b3JlIGFsbCBmbGFncyAobWFwIGZsYWcgbmFt
ZSAtPiBDb21tb25ERUZJTkUgb2JqZWN0KQorICAgICAgICBzZWxmLmFsbF9ERUZJTkVzID0ge30K
KyAgICAgICAgIyBmaWxlIHN5c3RlbSByb290IGRpcmVjdG9yeQorICAgICAgICBzZWxmLnJvb3Rf
ZGlyZWN0b3J5ID0gc2VsZi5fY3JlYXRlX3Jvb3RfZGlyZWN0b3J5KCkKKyAgICAgICAgIyBTQ00g
YmFzZSBkaXJlY3RvcnkgLSB0aGlzIGlzIHJlbGF0aXZlLCBidXQgdGhlIGV4YWN0IGxvY2F0aW9u
IGlzIGlycmVsZXZhbnQKKyAgICAgICAgIyAoV2UgYXNzdW1lIG5vIGZpbGUgb3IgZGlyZWN0b3J5
IHRoYXQgaGFzIGFuIGFic29sdXRlIHBhdGggaXMgbG9jYXRlZCB3aXRoaW4gdGhlIFNDTSBkaXJl
Y3RvcnkuKQorICAgICAgICBzZWxmLnNjbV9kaXJlY3RvcnkgPSBzZWxmLl9jcmVhdGVfc2NtX2Rp
cmVjdG9yeSgiJHtTQ019Iiwgc2VsZi5zY21fYWJzcGF0aCkKKworCisgICAgZGVmIHNldF9vcHRp
b25zKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhc3NlcnQgb3B0aW9ucworICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShvcHRpb25zLCBDb21tb25PcHRpb25zKQorICAgICAgICBzZWxmLm9wdGlv
bnMgPSBvcHRpb25zCisKKyAgICBkZWYgZGVidWcoc2VsZiwgbXNnLCB2ZXJib3NpdHk9Q29tbW9u
T3B0aW9ucy5WRVJCT1NJVFlfREVCVUcpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVyYm9z
aXR5KCkgPj0gdmVyYm9zaXR5OgorICAgICAgICAgICAgcHJpbnQgIkRFQlVHOiAiICsgbXNnCisK
KyAgICBkZWYgaW5mbyhzZWxmLCBtc2csIHZlcmJvc2l0eT1Db21tb25PcHRpb25zLlZFUkJPU0lU
WV9WRVJCT1NFKToKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJvc2l0eSgpID49IHZlcmJv
c2l0eToKKyAgICAgICAgICAgIHByaW50ICJJTkZPOiAiICsgbXNnCisKKyAgICBkZWYgd2Fybmlu
ZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVyYm9zaXR5KCkgPj0gQ29t
bW9uT3B0aW9ucy5WRVJCT1NJVFlfTk9STUFMOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiV0FSTklORzogJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRVJST1I6ICVzXG4iICUgbXNnKQorICAgICAgICByYWlz
ZSBFeGNlcHRpb24obXNnKQorCisgICAgZGVmIHZlcmlmeShzZWxmLCBleHByLCBtc2cpOgorICAg
ICAgICBpZiBub3QgZXhwcjoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IobXNnKQorCisgICAgZGVm
IF9jcmVhdGVfcm9vdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJvb3RfZGlyZWN0b3J5ID0g
Q29tbW9uUm9vdERpcmVjdG9yeSgpCisgICAgICAgIHNlbGYuYWxsX2RpcmVjdG9yaWVzLmFkZChy
b290X2RpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHJvb3RfZGlyZWN0b3J5CisKKyAgICBkZWYg
X2NyZWF0ZV9zY21fZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeV9uYW1lLCBzY21fYWJzcGF0aCk6
CisgICAgICAgIGFzc2VydCBzY21fYWJzcGF0aAorICAgICAgICBzY21fZGlyZWN0b3J5ID0gQ29t
bW9uU0NNRGlyZWN0b3J5KGRpcmVjdG9yeV9uYW1lLCBzZWxmLnJvb3RfZGlyZWN0b3J5LCBzY21f
YWJzcGF0aCkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKHNjbV9kaXJlY3Rvcnkp
CisgICAgICAgIHJldHVybiBzY21fZGlyZWN0b3J5CisKKyAgICBkZWYgY3JlYXRlX2Jhc2VfZGly
ZWN0b3J5KHNlbGYsIGRpcmVjdG9yeV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9u
YW1lCisgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gQ29tbW9uQmFzZURpcmVjdG9yeShkaXJlY3Rv
cnlfbmFtZSkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKGJhc2VfZGlyZWN0b3J5
KQorICAgICAgICByZXR1cm4gYmFzZV9kaXJlY3RvcnkKKworICAgIGRlZiBjcmVhdGVfY3Jvc3Nv
dmVyX3N1YmRpcmVjdG9yeShzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSwg
bmFtZV90b19zdWJkaXJlY3RvcnkpOgorICAgICAgICBhc3NlcnQgcGFyZW50X2RpcmVjdG9yeQor
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJlbnRfZGlyZWN0b3J5LCBDb21tb25EaXJlY3Rv
cnkpCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBhc3NlcnQgQ29tbW9u
U3ViRGlyZWN0b3J5LmlzX3ZhbGlkX3N1YmRpcmVjdG9yeV9uYW1lKGRpcmVjdG9yeV9uYW1lKQor
ICAgICAgICBhc3NlcnQgbm90IHBhcmVudF9kaXJlY3RvcnkuZ2V0X2VudHJ5KGRpcmVjdG9yeV9u
YW1lKQorICAgICAgICBjcm9zc292ZXJfc3ViZGlyZWN0b3J5ID0gQ29tbW9uQ3Jvc3NvdmVyU3Vi
RGlyZWN0b3J5KHBhcmVudF9kaXJlY3RvcnksIGRpcmVjdG9yeV9uYW1lLCBuYW1lX3RvX3N1YmRp
cmVjdG9yeSkKKyAgICAgICAgcGFyZW50X2RpcmVjdG9yeS5fYWRkX2RpcmVjdG9yeShjcm9zc292
ZXJfc3ViZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFsbF9kaXJlY3Rvcmllcy5hZGQoY3Jvc3Nv
dmVyX3N1YmRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIGNyb3Nzb3Zlcl9zdWJkaXJlY3RvcnkK
KworICAgIGRlZiBjcmVhdGVfc3ViZGlyZWN0b3J5KHNlbGYsIHBhcmVudF9kaXJlY3RvcnksIGRp
cmVjdG9yeV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IHBhcmVudF9kaXJlY3RvcnkKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UocGFyZW50X2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAg
ICAgICBhc3NlcnQgZGlyZWN0b3J5X25hbWUKKyAgICAgICAgYXNzZXJ0IENvbW1vblN1YkRpcmVj
dG9yeS5pc192YWxpZF9zdWJkaXJlY3RvcnlfbmFtZShkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAg
YXNzZXJ0IG5vdCBwYXJlbnRfZGlyZWN0b3J5LmdldF9lbnRyeShkaXJlY3RvcnlfbmFtZSkKKyAg
ICAgICAgc3ViZGlyZWN0b3J5ID0gQ29tbW9uU3ViRGlyZWN0b3J5KHBhcmVudF9kaXJlY3Rvcnks
IGRpcmVjdG9yeV9uYW1lKQorICAgICAgICBwYXJlbnRfZGlyZWN0b3J5Ll9hZGRfZGlyZWN0b3J5
KHN1YmRpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKHN1YmRpcmVj
dG9yeSkKKyAgICAgICAgcmV0dXJuIHN1YmRpcmVjdG9yeQorCisgICAgZGVmIGVuc3VyZV9zdWJk
aXJlY3Rvcnkoc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5X25hbWUpOgorICAgICAg
ICAnJycKKyAgICAgICAgRW5zdXJlcyB0aGF0IHBhcmVudF9kaXJlY3RvcnkgaGFzIGEgc3ViLWRp
cmVjdG9yeSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm5zIGl0LgorICAgICAgICBDcmVh
dGVzIGEgQ29tbW9uRGlyZWN0b3J5IG9iamVjdCBpZiBuZWNlc3NhcnkuCisgICAgICAgICcnJwor
ICAgICAgICBhc3NlcnQgcGFyZW50X2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShwYXJlbnRfZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBkaXJl
Y3RvcnlfbmFtZQorICAgICAgICBhc3NlcnQgbm90IHBhcmVudF9kaXJlY3RvcnkuZ2V0X2ZpbGUo
ZGlyZWN0b3J5X25hbWUpCisgICAgICAgIHJldHVybiBwYXJlbnRfZGlyZWN0b3J5LmdldF9kaXJl
Y3RvcnkoZGlyZWN0b3J5X25hbWUpIG9yIHNlbGYuY3JlYXRlX3N1YmRpcmVjdG9yeShwYXJlbnRf
ZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSkKKworICAgIGRlZiBlbnN1cmVfc3ViZGlyZWN0b3J5
X3BhdGgoc2VsZiwgYmFzZV9kaXJlY3RvcnksIHJlbHBhdGgsIHNlcD1Ob25lLCB2YXJpYWJsZV90
b19kaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgICcnJworICAgICAgICBFbnN1cmVzIHRoYXQgdGhl
IHBhdGggZ2l2ZW4gYnkgYSBiYXNlIGRpcmVjdG9yeSBhbmQgcmVsYXRpdmUgcGF0aCBleGlzdHMu
CisgICAgICAgIENyZWF0ZXMgQ29tbW9uRGlyZWN0b3J5IG9iamVjdHMgd2hlcmUgbmVjZXNzYXJ5
LgorICAgICAgICB2YXJpYWJsZV90b19kaXJlY3RvcnksIGlmIGdpdmVuLCBtYXBzIHNwZWNpZmlj
IHN0cmluZ3MgdG8gc3BlY2lmaWMgZGlyZWN0b3JpZXMgd2hlbiBlbmNvdW50ZXJlZC4KKyAgICAg
ICAgJycnCisgICAgICAgIGFzc2VydCBiYXNlX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZShiYXNlX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBpZiBub3Qg
cmVscGF0aDoKKyAgICAgICAgICAgIHJldHVybiBiYXNlX2RpcmVjdG9yeQorICAgICAgICBzZXAg
PSBzZXAgb3Igc2VsZi5maWxlc3lzdGVtLnNlcAorICAgICAgICB2YXJpYWJsZV90b19kaXJlY3Rv
cnkgPSB2YXJpYWJsZV90b19kaXJlY3Rvcnkgb3Ige30KKyAgICAgICAgaWYgcmVscGF0aC5zdGFy
dHN3aXRoKHNlcCk6CisgICAgICAgICAgICBiYXNlX2RpcmVjdG9yeSA9IHNlbGYucm9vdF9kaXJl
Y3RvcnkKKyAgICAgICAgcmVscGF0aCA9IHJlbHBhdGguc3RyaXAoc2VwKQorICAgICAgICAjIFRo
ZSBmb2xsb3dpbmcgYXNzdW1lcyBzcGVjaWFsIGRpcmVjdG9yeSBuYW1lcyBvY2N1ciBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBwYXRoIHN0cmluZyBvbmx5LgorICAgICAgICBmb3IgKGRpcmVjdG9y
eV9uYW1lLCBkaXJlY3RvcnkpIGluIHZhcmlhYmxlX3RvX2RpcmVjdG9yeS5pdGVtcygpOgorICAg
ICAgICAgICAgaWYgcmVscGF0aC5zdGFydHN3aXRoKGRpcmVjdG9yeV9uYW1lICsgc2VwKSBvciBy
ZWxwYXRoID09IGRpcmVjdG9yeV9uYW1lOgorICAgICAgICAgICAgICAgIGJhc2VfZGlyZWN0b3J5
ID0gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IHJlbHBhdGhbbGVuKGRpcmVj
dG9yeV9uYW1lKTpdLmxzdHJpcChzZXApCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
Zm9yIGRpcmVjdG9yeV9uYW1lIGluIHJlbHBhdGguc3BsaXQoc2VwKToKKyAgICAgICAgICAgIGJh
c2VfZGlyZWN0b3J5ID0gc2VsZi5lbnN1cmVfc3ViZGlyZWN0b3J5KGJhc2VfZGlyZWN0b3J5LCBk
aXJlY3RvcnlfbmFtZSkKKyAgICAgICAgcmV0dXJuIGJhc2VfZGlyZWN0b3J5CisKKyAgICBkZWYg
Y3JlYXRlX2ZpbGUoc2VsZiwgY29udGFpbmluZ19kaXJlY3RvcnksIGZpbGVfbmFtZSk6CisgICAg
ICAgIGFzc2VydCBjb250YWluaW5nX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShjb250YWluaW5nX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQg
Q29tbW9uRmlsZS5pc192YWxpZF9maWxlX25hbWUoZmlsZV9uYW1lKQorICAgICAgICBhc3NlcnQg
bm90IGNvbnRhaW5pbmdfZGlyZWN0b3J5LmdldF9lbnRyeShmaWxlX25hbWUpCisgICAgICAgIGZp
bGUgPSBDb21tb25GaWxlKGNvbnRhaW5pbmdfZGlyZWN0b3J5LCBmaWxlX25hbWUpCisgICAgICAg
IGNvbnRhaW5pbmdfZGlyZWN0b3J5LmFkZF9maWxlKGZpbGUpCisgICAgICAgIHNlbGYuYWxsX2Zp
bGVzLmFkZChmaWxlKQorICAgICAgICByZXR1cm4gZmlsZQorCisgICAgZGVmIGVuc3VyZV9maWxl
KHNlbGYsIGNvbnRhaW5pbmdfZGlyZWN0b3J5LCBmaWxlX25hbWUpOgorICAgICAgICBhc3NlcnQg
Y29udGFpbmluZ19kaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29udGFpbmlu
Z19kaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IENvbW1vbkZpbGUu
aXNfdmFsaWRfZmlsZV9uYW1lKGZpbGVfbmFtZSkKKyAgICAgICAgYXNzZXJ0IG5vdCBjb250YWlu
aW5nX2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KGZpbGVfbmFtZSkKKyAgICAgICAgcmV0dXJuIGNv
bnRhaW5pbmdfZGlyZWN0b3J5LmdldF9maWxlKGZpbGVfbmFtZSkgb3Igc2VsZi5jcmVhdGVfZmls
ZShjb250YWluaW5nX2RpcmVjdG9yeSwgZmlsZV9uYW1lKQorCisgICAgZGVmIGVuc3VyZV9maWxl
X3BhdGgoc2VsZiwgYmFzZV9kaXJlY3RvcnksIHJlbHBhdGgsIHNlcD1Ob25lLCB2YXJpYWJsZV90
b19kaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgICcnJworICAgICAgICBFbnN1cmVzIHRoYXQgdGhl
IHBhdGggZ2l2ZW4gYnkgYSBiYXNlIGRpcmVjdG9yeSBhbmQgcmVsYXRpdmUgcGF0aCwgaW5jbHVk
aW5nIGEgZmlsZSBuYW1lLCBleGlzdHMuCisgICAgICAgIENyZWF0ZXMgQ29tbW9uRGlyZWN0b3J5
IGFuZCBDb21tb25GaWxlIG9iamVjdHMgd2hlcmUgbmVjZXNzYXJ5LgorICAgICAgICB2YXJpYWJs
ZV90b19kaXJlY3RvcnksIGlmIGdpdmVuLCBtYXBzIHNwZWNpZmljIHN0cmluZ3MgdG8gc3BlY2lm
aWMgZGlyZWN0b3JpZXMgd2hlbiBlbmNvdW50ZXJlZC4KKyAgICAgICAgJycnCisgICAgICAgIGFz
c2VydCBiYXNlX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShiYXNlX2RpcmVj
dG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgcmVscGF0aAorICAgICAgICBz
ZXAgPSBzZXAgb3Igc2VsZi5maWxlc3lzdGVtLnNlcAorICAgICAgICBkaXJlY3RvcnlfbmFtZXMs
IHNlcGFyYXRvciwgZmlsZV9uYW1lID0gcmVscGF0aC5ycGFydGl0aW9uKHNlcCkKKyAgICAgICAg
aWYgc2VwYXJhdG9yOgorICAgICAgICAgICAgaWYgZGlyZWN0b3J5X25hbWVzOgorICAgICAgICAg
ICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gc2VsZi5lbnN1cmVfc3ViZGlyZWN0b3J5X3BhdGgoYmFz
ZV9kaXJlY3RvcnksIGRpcmVjdG9yeV9uYW1lcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgYmFzZV9kaXJlY3RvcnkgPSBzZWxmLnJvb3RfZGlyZWN0b3J5CisgICAgICAgIHJl
dHVybiBzZWxmLmVuc3VyZV9maWxlKGJhc2VfZGlyZWN0b3J5LCBmaWxlX25hbWUpCisKKyAgICBk
ZWYgYmFzZV9kaXJlY3RvcnlfZm9yX2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnksIGRpcmVjdG9y
eV90b192YXJpYWJsZT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeQorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAgZGly
ZWN0b3J5X3RvX3ZhcmlhYmxlID0gZGlyZWN0b3J5X3RvX3ZhcmlhYmxlIG9yIHt9CisgICAgICAg
IGlmIGRpcmVjdG9yeSBpbiBkaXJlY3RvcnlfdG9fdmFyaWFibGU6CisgICAgICAgICAgICByZXR1
cm4gZGlyZWN0b3J5CisgICAgICAgIGlmIGRpcmVjdG9yeS5wYXJlbnRfZGlyZWN0b3J5OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuYmFzZV9kaXJlY3RvcnlfZm9yX2RpcmVjdG9yeShkaXJlY3Rv
cnkucGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlKQorICAgICAgICByZXR1
cm4gZGlyZWN0b3J5CisKKyAgICBkZWYgYmFzZV9kaXJlY3RvcnlfZm9yX2ZpbGUoc2VsZiwgZmls
ZSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlPU5vbmUpOgorICAgICAgICBhc3NlcnQgZmlsZQorICAg
ICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlLCBDb21tb25GaWxlKQorICAgICAgICByZXR1cm4g
c2VsZi5iYXNlX2RpcmVjdG9yeV9mb3JfZGlyZWN0b3J5KHNlbGYsIGZpbGUuZGlyZWN0b3J5LCBk
aXJlY3RvcnlfdG9fdmFyaWFibGUpCisKKyAgICBkZWYgX2RpcmVjdG9yeV9hYnNwYXRoX3ByZWZp
eChzZWxmLCBkaXJlY3RvcnksIHNlcCwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlKToKKyAgICAgICAg
bWFwcGVkX25hbWUgPSBkaXJlY3RvcnlfdG9fdmFyaWFibGUuZ2V0KGRpcmVjdG9yeSkKKyAgICAg
ICAgaWYgbWFwcGVkX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbWFwcGVk
X25hbWUKKyAgICAgICAgaWYgZGlyZWN0b3J5IGlzIHNlbGYucm9vdF9kaXJlY3Rvcnk6CisgICAg
ICAgICAgICByZXR1cm4gJycKKyAgICAgICAgaWYgbm90IGRpcmVjdG9yeS5wYXJlbnRfZGlyZWN0
b3J5OgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiQmFzZSBkaXJlY3RvcnkgJyVzJyBub3Qg
Zm91bmQgaW4gdGhlIGRpcmVjdG9yeSBtYXAgd2hlbiBnZW5lcmF0aW5nIHBhdGghIiAlIGRpcmVj
dG9yeS5uYW1lCisgICAgICAgICAgICByZXR1cm4gZGlyZWN0b3J5Lm5hbWUKKyAgICAgICAgcHJl
Zml4X3N0cmluZyA9IHNlbGYuX2RpcmVjdG9yeV9hYnNwYXRoX3ByZWZpeChkaXJlY3RvcnkucGFy
ZW50X2RpcmVjdG9yeSwgc2VwLCBkaXJlY3RvcnlfdG9fdmFyaWFibGUpCisgICAgICAgIHJldHVy
biBwcmVmaXhfc3RyaW5nICsgc2VwICsgZGlyZWN0b3J5Lm5hbWUKKworICAgIGRlZiBkaXJlY3Rv
cnlfYWJzcGF0aChzZWxmLCBkaXJlY3RvcnksIHNlcD1Ob25lLCBkaXJlY3RvcnlfdG9fdmFyaWFi
bGU9Tm9uZSk6CisgICAgICAgICcnJworICAgICAgICBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRo
IHN0cmluZyBmb3IgdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAgICAgICAgZGlyZWN0b3J5X3RvX3Zh
cmlhYmxlLCBpZiBnaXZlbiwgbWFwcyBzcGVjaWZpYyBkaXJlY3RvcmllcyB0byBkZXNpcmVkIG91
dHB1dCBzdHJpbmdzLgorICAgICAgICBJZiBhIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiBkaXJlY3Rv
cnlfdG9fdmFyaWFibGUsIGl0cyBwYXJlbnQgZGlyZWN0b3JpZXMgYXJlIE5PVCBsb29rZWQgYXQh
CisgICAgICAgID0+IG1ha2Ugc3VyZSBkaXJlY3RvcnlfdG9fdmFyaWFibGUgY29udGFpbnMgdGhl
IGZ1bGwgcGF0aCAod2l0aG91dCB0cmFpbGluZyBzZXBhcmF0b3IpIHdoZXJlIGRlc2lyZWQKKyAg
ICAgICAgJycnCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UoZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIHNlcCA9IHNlcCBvciBz
ZWxmLmZpbGVzeXN0ZW0uc2VwCisgICAgICAgIGRpcmVjdG9yeV90b192YXJpYWJsZSA9IGRpcmVj
dG9yeV90b192YXJpYWJsZSBvciB7fQorICAgICAgICBpZiBkaXJlY3RvcnkgaXMgc2VsZi5yb290
X2RpcmVjdG9yeSBhbmQgZGlyZWN0b3J5IG5vdCBpbiBkaXJlY3RvcnlfdG9fdmFyaWFibGU6Cisg
ICAgICAgICAgICByZXR1cm4gc2VwCisgICAgICAgIHJldHVybiBzZWxmLl9kaXJlY3RvcnlfYWJz
cGF0aF9wcmVmaXgoZGlyZWN0b3J5LCBzZXAsIGRpcmVjdG9yeV90b192YXJpYWJsZSkKKworICAg
IGRlZiBkaXJlY3RvcnlfcmVscGF0aChzZWxmLCBiYXNlX2RpcmVjdG9yeSwgZGlyZWN0b3J5LCBz
ZXA9Tm9uZSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlPU5vbmUsIGFsd2F5c19wcmVmaXg9RmFsc2Up
OgorICAgICAgICAnJycKKyAgICAgICAgUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBzdHJpbmcg
ZnJvbSBiYXNlX2RpcmVjdG9yeSB0byBkaXJlY3RvcnkuCisgICAgICAgIElmIGRpcmVjdG9yeSBp
cyBub3QgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRyZWUgYXMgYmFzZV9kaXJlY3RvcnksIGl0IHdp
bGwgcmV0dXJuIGFuIGFic29sdXRlIHBhdGggaW5zdGVhZC4KKyAgICAgICAgJycnCisgICAgICAg
IGFzc2VydCBiYXNlX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShiYXNlX2Rp
cmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgZGlyZWN0b3J5CisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKGRpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAg
ICBpZiBiYXNlX2RpcmVjdG9yeSA9PSBkaXJlY3Rvcnk6CisgICAgICAgICAgICByZXR1cm4gJy4n
CisgICAgICAgIHNlcCA9IHNlcCBvciBzZWxmLmZpbGVzeXN0ZW0uc2VwCisgICAgICAgIGRpcmVj
dG9yeV9saXN0MSA9IGJhc2VfZGlyZWN0b3J5LmRpcmVjdG9yeV9saXN0KCkKKyAgICAgICAgZGly
ZWN0b3J5X2xpc3QyID0gZGlyZWN0b3J5LmRpcmVjdG9yeV9saXN0KCkKKyAgICAgICAgYXNzZXJ0
IGRpcmVjdG9yeV9saXN0MQorICAgICAgICBhc3NlcnQgZGlyZWN0b3J5X2xpc3QyCisgICAgICAg
IGlmIGRpcmVjdG9yeV9saXN0MVswXSAhPSBkaXJlY3RvcnlfbGlzdDJbMF06CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5kaXJlY3RvcnlfYWJzcGF0aChkaXJlY3RvcnksIHNlcCwgZGlyZWN0b3J5
X3RvX3ZhcmlhYmxlKQorICAgICAgICB3aGlsZSBkaXJlY3RvcnlfbGlzdDEgYW5kIGRpcmVjdG9y
eV9saXN0MiBhbmQgZGlyZWN0b3J5X2xpc3QxWzBdID09IGRpcmVjdG9yeV9saXN0MlswXToKKyAg
ICAgICAgICAgIGRpcmVjdG9yeV9saXN0MS5wb3AoMCkKKyAgICAgICAgICAgIGRpcmVjdG9yeV9s
aXN0Mi5wb3AoMCkKKyAgICAgICAgaWYgYWx3YXlzX3ByZWZpeDoKKyAgICAgICAgICAgIGFzc2Vy
dCBiYXNlX2RpcmVjdG9yeSBpbiBkaXJlY3RvcnlfdG9fdmFyaWFibGUKKyAgICAgICAgICAgIHBy
ZWZpeCA9IGRpcmVjdG9yeV90b192YXJpYWJsZVtiYXNlX2RpcmVjdG9yeV0gKyBzZXAKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIHJldHVybiBwcmVmaXgg
KyBzZXAuam9pbihtYXAobGFtYmRhIGQ6ICcuLicsIGRpcmVjdG9yeV9saXN0MSkgKyBtYXAobGFt
YmRhIGQ6IGQubmFtZSwgZGlyZWN0b3J5X2xpc3QyKSkKKworICAgIGRlZiBmaWxlX2Fic3BhdGgo
c2VsZiwgZmlsZSwgc2VwPU5vbmUsIGRpcmVjdG9yeV90b192YXJpYWJsZT1Ob25lKToKKyAgICAg
ICAgJycnCisgICAgICAgIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggc3RyaW5nIGZvciB0aGUg
Z2l2ZW4gZmlsZS4KKyAgICAgICAgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlLCBpZiBnaXZlbiwgbWFw
cyBzcGVjaWZpYyBkaXJlY3RvcmllcyB0byBkZXNpcmVkIG91dHB1dCBzdHJpbmdzLgorICAgICAg
ICBJZiBhIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiBkaXJlY3RvcnlfdG9fdmFyaWFibGUsIGl0cyBw
YXJlbnQgZGlyZWN0b3JpZXMgYXJlIE5PVCBsb29rZWQgYXQhCisgICAgICAgID0+IG1ha2Ugc3Vy
ZSBkaXJlY3RvcnlfdG9fdmFyaWFibGUgY29udGFpbnMgdGhlIGZ1bGwgcGF0aCAod2l0aG91dCB0
cmFpbGluZyBzZXBhcmF0b3IpIHdoZXJlIGRlc2lyZWQKKyAgICAgICAgJycnCisgICAgICAgIGFz
c2VydCBmaWxlCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUsIENvbW1vbkZpbGUpCisg
ICAgICAgIHNlcCA9IHNlcCBvciBzZWxmLmZpbGVzeXN0ZW0uc2VwCisgICAgICAgIHJldHVybiBz
ZWxmLl9kaXJlY3RvcnlfYWJzcGF0aF9wcmVmaXgoZmlsZS5kaXJlY3RvcnksIHNlcCwgZGlyZWN0
b3J5X3RvX3ZhcmlhYmxlIG9yIHt9KSArIHNlcCArIGZpbGUubmFtZQorCisgICAgZGVmIGZpbGVf
cmVscGF0aChzZWxmLCBiYXNlX2RpcmVjdG9yeSwgZmlsZSwgc2VwPU5vbmUsIGRpcmVjdG9yeV90
b192YXJpYWJsZT1Ob25lLCBhbHdheXNfcHJlZml4PUZhbHNlKToKKyAgICAgICAgJycnCisgICAg
ICAgIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggc3RyaW5nIGZyb20gYmFzZV9kaXJlY3Rvcnkg
dG8gZmlsZS4KKyAgICAgICAgSWYgZmlsZSBpcyBub3QgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRy
ZWUgYXMgYmFzZV9kaXJlY3RvcnksIGl0IHdpbGwgcmV0dXJuIGFuIGFic29sdXRlIHBhdGggaW5z
dGVhZC4KKyAgICAgICAgJycnCisgICAgICAgIGFzc2VydCBiYXNlX2RpcmVjdG9yeQorICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZShiYXNlX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAg
ICAgICBhc3NlcnQgZmlsZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlLCBDb21tb25G
aWxlKQorICAgICAgICBpZiBiYXNlX2RpcmVjdG9yeSA9PSBmaWxlLmRpcmVjdG9yeSBhbmQgbm90
IGFsd2F5c19wcmVmaXg6CisgICAgICAgICAgICByZXR1cm4gZmlsZS5uYW1lCisgICAgICAgIHNl
cCA9IHNlcCBvciBzZWxmLmZpbGVzeXN0ZW0uc2VwCisgICAgICAgIHJldHVybiBzZWxmLmRpcmVj
dG9yeV9yZWxwYXRoKGJhc2VfZGlyZWN0b3J5LCBmaWxlLmRpcmVjdG9yeSwgc2VwLCBkaXJlY3Rv
cnlfdG9fdmFyaWFibGUsIGFsd2F5c19wcmVmaXgpICsgc2VwICsgZmlsZS5uYW1lCisKKyAgICBk
ZWYgZW5zdXJlX0RFRklORShzZWxmLCBmbGFnX25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5h
bGxfREVGSU5Fcy5zZXRkZWZhdWx0KGZsYWdfbmFtZSwgQ29tbW9uREVGSU5FKGZsYWdfbmFtZSkp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L2NvbW1v
bl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvY29t
bW9uX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhZmVj
YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9q
ZWN0L2NvbW1vbl91bml0dGVzdC5weQpAQCAtMCwwICsxLDE4MiBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRw
eS5jb21tb24ucHJvamVjdC5jb21tb24gaW1wb3J0ICoKKworCitjbGFzcyBDb21tb25JbmZvVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxm
LmNvbW1vbiA9IENvbW1vbkluZm8oIldlYkNvcmUiKQorCisgICAgZGVmIHZlcmlmeV9zdWJkaXJl
Y3Rvcnkoc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwgc3ViZGlyZWN0b3J5LCBuYW1lKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3ViZGlyZWN0b3J5LCBDb21tb25TdWJEaXJl
Y3RvcnkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyZW50X2RpcmVjdG9yeSBpbiBzZWxm
LmNvbW1vbi5hbGxfZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJkaXJl
Y3RvcnkgaW4gc2VsZi5jb21tb24uYWxsX2RpcmVjdG9yaWVzKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc3ViZGlyZWN0b3J5LnBhcmVudF9kaXJlY3RvcnkgaXMgcGFyZW50X2RpcmVjdG9yeSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcuJyBpbiBzdWJkaXJlY3RvcnkuZGlyZWN0b3JpZXMp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLi4nIGluIHN1YmRpcmVjdG9yeS5kaXJlY3Rvcmll
cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1YmRpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcu
JykgaXMgc3ViZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3ViZGlyZWN0b3J5
LmdldF9kaXJlY3RvcnkoJy4uJykgaXMgcGFyZW50X2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHN1YmRpcmVjdG9yeS5nZXRfZW50cnkoJy4nKSBpcyBzdWJkaXJlY3RvcnkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJkaXJlY3RvcnkuZ2V0X2VudHJ5KCcuLicpIGlzIHBh
cmVudF9kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIGluIHBhcmVudF9k
aXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJlbnRfZGly
ZWN0b3J5LmdldF9kaXJlY3RvcnkobmFtZSkgaXMgc3ViZGlyZWN0b3J5KQorICAgICAgICBzZWxm
LmFzc2VydFRydWUocGFyZW50X2RpcmVjdG9yeS5nZXRfZmlsZShuYW1lKSBpcyBOb25lKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFyZW50X2RpcmVjdG9yeS5nZXRfZW50cnkobmFtZSkgaXMg
c3ViZGlyZWN0b3J5KQorCisgICAgZGVmIHZlcmlmeV9maWxlKHNlbGYsIGRpcmVjdG9yeSwgZmls
ZSwgbmFtZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZpbGUsIENvbW1v
bkZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZS5kaXJlY3RvcnkgaXMgZGlyZWN0
b3J5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUubmFtZSwgbmFtZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGZpbGUgaW4gc2VsZi5jb21tb24uYWxsX2ZpbGVzKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZGlyZWN0b3J5LmdldF9maWxlKG5hbWUpIGlzIGZpbGUpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShkaXJlY3RvcnkuZ2V0X2RpcmVjdG9yeShuYW1lKSBpcyBOb25lKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyZWN0b3J5LmdldF9lbnRyeShuYW1lKSBpcyBmaWxl
KQorCisgICAgZGVmIHRlc3RfQ29tbW9uSW5mb19tZW1iZXJzKHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLmNvbW1vbi5zY21fYWJzcGF0aCwgYmFzZXN0cmlu
ZykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYuY29tbW9uLnByb2pl
Y3RfbmFtZSwgYmFzZXN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNl
KHNlbGYuY29tbW9uLm9wdGlvbnMsIENvbW1vbk9wdGlvbnMpKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoaXNpbnN0YW5jZShzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9yeSwgQ29tbW9uUm9vdERp
cmVjdG9yeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYuY29tbW9u
LnNjbV9kaXJlY3RvcnksIENvbW1vblNDTURpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9yeSBpcyBub3Qgc2VsZi5jb21tb24uc2NtX2Rp
cmVjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbW1vbi5yb290X2RpcmVj
dG9yeS5uYW1lLCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21tb24uc2Nt
X2RpcmVjdG9yeS5uYW1lLCAnJHtTQ019JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
c2VsZi5jb21tb24uYWxsX2RpcmVjdG9yaWVzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHNlbGYuY29tbW9uLnJvb3RfZGlyZWN0b3J5IGluIHNlbGYuY29tbW9uLmFsbF9kaXJlY3Rvcmll
cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY29tbW9uLnNjbV9kaXJlY3RvcnkgaW4g
c2VsZi5jb21tb24uYWxsX2RpcmVjdG9yaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4n
IGluIHNlbGYuY29tbW9uLnJvb3RfZGlyZWN0b3J5LmRpcmVjdG9yaWVzKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoJy4uJyBub3QgaW4gc2VsZi5jb21tb24ucm9vdF9kaXJlY3RvcnkuZGlyZWN0
b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9y
eS5nZXRfZGlyZWN0b3J5KCcuJykgaXMgc2VsZi5jb21tb24ucm9vdF9kaXJlY3RvcnkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9yeS5nZXRfZGlyZWN0
b3J5KCcuLicpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLicgaW4gc2VsZi5j
b21tb24uc2NtX2RpcmVjdG9yeS5kaXJlY3RvcmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KCcuLicgbm90IGluIHNlbGYuY29tbW9uLnNjbV9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5LmdldF9kaXJlY3Rv
cnkoJy4nKSBpcyBzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcuLicpIGlzIE5v
bmUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfYmFzZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAg
IGJhc2VfZGlyZWN0b3J5ID0gc2VsZi5jb21tb24uY3JlYXRlX2Jhc2VfZGlyZWN0b3J5KCcke1RF
U1R9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYmFzZV9kaXJlY3Rvcnks
IENvbW1vbkJhc2VEaXJlY3RvcnkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZV9kaXJl
Y3RvcnkgaW4gc2VsZi5jb21tb24uYWxsX2RpcmVjdG9yaWVzKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYmFzZV9kaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSBpcyBOb25lKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoJy4nIGluIGJhc2VfZGlyZWN0b3J5LmRpcmVjdG9yaWVzKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJy4uJyBub3QgaW4gYmFzZV9kaXJlY3RvcnkuZGlyZWN0b3JpZXMp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlX2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcu
JykgaXMgYmFzZV9kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1v
bi5zY21fZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkoJy4uJykgaXMgTm9uZSkKKworICAgIGRlZiB0
ZXN0X2NyZWF0ZV9zdWJkaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHN1YmRpcmVjdG9yeSA9IHNl
bGYuY29tbW9uLmNyZWF0ZV9zdWJkaXJlY3Rvcnkoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwg
J3Rlc3QnKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3Rvcnkoc2VsZi5jb21tb24uc2Nt
X2RpcmVjdG9yeSwgc3ViZGlyZWN0b3J5LCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVf
Y3Jvc3NvdmVyX3N1YmRpcmVjdG9yeShzZWxmKToKKyAgICAgICAgbmFtZSA9ICcke1RFU1R9Jwor
ICAgICAgICBiYXNlX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmNyZWF0ZV9iYXNlX2RpcmVjdG9y
eShuYW1lKQorICAgICAgICBjcm9zc292ZXJfZGlyZWN0b3J5ID0gc2VsZi5jb21tb24uY3JlYXRl
X2Nyb3Nzb3Zlcl9zdWJkaXJlY3Rvcnkoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgJ3Rlc3Qn
LCB7bmFtZTogYmFzZV9kaXJlY3Rvcnl9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0
YW5jZShjcm9zc292ZXJfZGlyZWN0b3J5LCBDb21tb25Dcm9zc292ZXJTdWJEaXJlY3RvcnkpKQor
ICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3Rvcnkoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9y
eSwgY3Jvc3NvdmVyX2RpcmVjdG9yeSwgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
YmFzZV9kaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSBpcyBOb25lKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoJy4nIGluIGJhc2VfZGlyZWN0b3J5LmRpcmVjdG9yaWVzKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoJy4uJyBub3QgaW4gYmFzZV9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlX2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcuJykgaXMg
YmFzZV9kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIGluIGNyb3Nzb3Zl
cl9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcm9zc292
ZXJfZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkobmFtZSkgaXMgYmFzZV9kaXJlY3RvcnkpCisKKyAg
ICBkZWYgdGVzdF9jcmVhdGVfZmlsZShzZWxmKToKKyAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5j
b21tb24uc2NtX2RpcmVjdG9yeQorICAgICAgICBuYW1lID0gJ3Rlc3QuY3BwJworICAgICAgICBm
aWxlID0gc2VsZi5jb21tb24uY3JlYXRlX2ZpbGUoZGlyZWN0b3J5LCBuYW1lKQorICAgICAgICBz
ZWxmLnZlcmlmeV9maWxlKGRpcmVjdG9yeSwgZmlsZSwgbmFtZSkKKworICAgIGRlZiB0ZXN0X2Ny
ZWF0ZV9maWxlKHNlbGYpOgorICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLmNvbW1vbi5zY21fZGly
ZWN0b3J5CisgICAgICAgIG5hbWUgPSAndGVzdC5jcHAnCisgICAgICAgIGZpbGUgPSBzZWxmLmNv
bW1vbi5jcmVhdGVfZmlsZShkaXJlY3RvcnksIG5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2Zp
bGUoZGlyZWN0b3J5LCBmaWxlLCBuYW1lKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX3N1YmRpcmVj
dG9yeShzZWxmKToKKyAgICAgICAgbmFtZTEgPSAndGVzdDEnCisgICAgICAgIG5hbWUyID0gJ3Rl
c3QyJworICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5CisgICAg
ICAgIHN1YmRpcmVjdG9yeTFhID0gc2VsZi5jb21tb24uY3JlYXRlX3N1YmRpcmVjdG9yeShkaXJl
Y3RvcnksIG5hbWUxKQorICAgICAgICBzdWJkaXJlY3RvcnkxYiA9IHNlbGYuY29tbW9uLmVuc3Vy
ZV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5LCBuYW1lMSkKKyAgICAgICAgc3ViZGlyZWN0b3J5MiA9
IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5LCBuYW1lMikKKyAgICAg
ICAgc2VsZi52ZXJpZnlfc3ViZGlyZWN0b3J5KGRpcmVjdG9yeSwgc3ViZGlyZWN0b3J5MWEsIG5h
bWUxKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5LCBzdWJkaXJl
Y3RvcnkxYiwgbmFtZTEpCisgICAgICAgIHNlbGYudmVyaWZ5X3N1YmRpcmVjdG9yeShkaXJlY3Rv
cnksIHN1YmRpcmVjdG9yeTIsIG5hbWUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3ViZGly
ZWN0b3J5MWEgaXMgc3ViZGlyZWN0b3J5MWIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJk
aXJlY3RvcnkxYSBpcyBub3Qgc3ViZGlyZWN0b3J5MikKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9z
dWJkaXJlY3RvcnlfcGF0aChzZWxmKToKKyAgICAgICAgbmFtZTEgPSAndGVzdDEnCisgICAgICAg
IG5hbWUyID0gJ3Rlc3QyJworICAgICAgICBzdWJzdWJuYW1lID0gJ3Rlc3QnCisgICAgICAgIHBh
dGgxID0gbmFtZTEgKyAnLycgKyBzdWJzdWJuYW1lCisgICAgICAgIHBhdGgyID0gbmFtZTIgKyAn
LycgKyBzdWJzdWJuYW1lCisgICAgICAgIGRpcmVjdG9yeSA9IHNlbGYuY29tbW9uLnNjbV9kaXJl
Y3RvcnkKKyAgICAgICAgc3ViZGlyZWN0b3J5MSA9IHNlbGYuY29tbW9uLmNyZWF0ZV9zdWJkaXJl
Y3RvcnkoZGlyZWN0b3J5LCBuYW1lMSkKKyAgICAgICAgc3Vic3ViZGlyZWN0b3J5MSA9IHNlbGYu
Y29tbW9uLmVuc3VyZV9zdWJkaXJlY3RvcnlfcGF0aChkaXJlY3RvcnksIHBhdGgxKQorICAgICAg
ICBzdWJzdWJkaXJlY3RvcnkyID0gc2VsZi5jb21tb24uZW5zdXJlX3N1YmRpcmVjdG9yeV9wYXRo
KGRpcmVjdG9yeSwgcGF0aDIpCisgICAgICAgIHN1YmRpcmVjdG9yeTIgPSBkaXJlY3RvcnkuZ2V0
X2VudHJ5KG5hbWUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWJkaXJl
Y3RvcnkyLCBDb21tb25EaXJlY3RvcnkpKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3Rv
cnkoZGlyZWN0b3J5LCBzdWJkaXJlY3RvcnkxLCBuYW1lMSkKKyAgICAgICAgc2VsZi52ZXJpZnlf
c3ViZGlyZWN0b3J5KGRpcmVjdG9yeSwgc3ViZGlyZWN0b3J5MiwgbmFtZTIpCisgICAgICAgIHNl
bGYudmVyaWZ5X3N1YmRpcmVjdG9yeShzdWJkaXJlY3RvcnkxLCBzdWJzdWJkaXJlY3RvcnkxLCBz
dWJzdWJuYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3Rvcnkoc3ViZGlyZWN0b3J5
Miwgc3Vic3ViZGlyZWN0b3J5Miwgc3Vic3VibmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHN1YmRpcmVjdG9yeTEgaXMgbm90IHN1YmRpcmVjdG9yeTIpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShzdWJzdWJkaXJlY3RvcnkxIGlzIG5vdCBzdWJzdWJkaXJlY3RvcnkyKQorCisgICAgZGVm
IHRlc3RfZW5zdXJlX2ZpbGVfcGF0aChzZWxmKToKKyAgICAgICAgZGlyZWN0b3J5X25hbWUgPSAn
dGVzdCcKKyAgICAgICAgZmlsZV9uYW1lID0gJ3Rlc3QuY3BwJworICAgICAgICBwYXRoMSA9IGZp
bGVfbmFtZQorICAgICAgICBwYXRoMiA9IGRpcmVjdG9yeV9uYW1lICsgJy8nICsgZmlsZV9uYW1l
CisgICAgICAgIHBhdGgzID0gZGlyZWN0b3J5X25hbWUgKyAnLycgKyBkaXJlY3RvcnlfbmFtZSAr
ICcvJyArIGZpbGVfbmFtZQorICAgICAgICBkaXJlY3RvcnkxID0gc2VsZi5jb21tb24uc2NtX2Rp
cmVjdG9yeQorICAgICAgICBkaXJlY3RvcnkyID0gc2VsZi5jb21tb24uY3JlYXRlX3N1YmRpcmVj
dG9yeShkaXJlY3RvcnkxLCBkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgZmlsZTEgPSBzZWxmLmNv
bW1vbi5lbnN1cmVfZmlsZV9wYXRoKGRpcmVjdG9yeTEsIHBhdGgxKQorICAgICAgICBmaWxlMyA9
IHNlbGYuY29tbW9uLmVuc3VyZV9maWxlX3BhdGgoZGlyZWN0b3J5MSwgcGF0aDMpCisgICAgICAg
IGZpbGUyID0gc2VsZi5jb21tb24uZW5zdXJlX2ZpbGVfcGF0aChkaXJlY3RvcnkxLCBwYXRoMikK
KyAgICAgICAgZGlyZWN0b3J5MyA9IGRpcmVjdG9yeTIuZ2V0X2VudHJ5KGRpcmVjdG9yeV9uYW1l
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShkaXJlY3RvcnkzLCBDb21tb25E
aXJlY3RvcnkpKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5MSwg
ZGlyZWN0b3J5MiwgZGlyZWN0b3J5X25hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X3N1YmRpcmVj
dG9yeShkaXJlY3RvcnkyLCBkaXJlY3RvcnkzLCBkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgc2Vs
Zi52ZXJpZnlfZmlsZShkaXJlY3RvcnkxLCBmaWxlMSwgZmlsZV9uYW1lKQorICAgICAgICBzZWxm
LnZlcmlmeV9maWxlKGRpcmVjdG9yeTIsIGZpbGUyLCBmaWxlX25hbWUpCisgICAgICAgIHNlbGYu
dmVyaWZ5X2ZpbGUoZGlyZWN0b3J5MywgZmlsZTMsIGZpbGVfbmFtZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGRpcmVjdG9yeTEgaXMgbm90IGRpcmVjdG9yeTIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShkaXJlY3RvcnkyIGlzIG5vdCBkaXJlY3RvcnkzKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoZmlsZTEgaXMgbm90IGZpbGUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZTIg
aXMgbm90IGZpbGUzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9q
ZWN0L2dyb3VwYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3Qv
Z3JvdXBiYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTk0NzYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0
L2dyb3VwYmFzZS5weQpAQCAtMCwwICsxLDE3MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5wcm9qZWN0IGltcG9y
dCAqCisKKworY2xhc3MgUHJvamVjdEdyb3VwQ29udGFpbmVyKG9iamVjdCk6CisgICAgIiIiCisg
ICAgQ2xhc3MgaG9sZGluZyBhIGxpc3Qgb2YgUHJvamVjdEdyb3VwIG9iamVjdHMuCisgICAgIiIi
CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9ncm91cHMgPSBzZXQoKQor
CisgICAgZGVmIF9hZGRfZ3JvdXAoc2VsZiwgZ3JvdXApOgorICAgICAgICBhc3NlcnQgZ3JvdXAK
KyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3JvdXAsIFByb2plY3RHcm91cCkKKyAgICAgICAg
YXNzZXJ0IGdyb3VwIG5vdCBpbiBzZWxmLl9ncm91cHMKKyAgICAgICAgc2VsZi5fZ3JvdXBzLmFk
ZChncm91cCkKKworICAgIGRlZiBfcmVtb3ZlX2dyb3VwKHNlbGYsIGdyb3VwKToKKyAgICAgICAg
YXNzZXJ0IGdyb3VwCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGdyb3VwLCBQcm9qZWN0R3Jv
dXApCisgICAgICAgIGFzc2VydCBncm91cCBpbiBzZWxmLl9ncm91cHMKKyAgICAgICAgc2VsZi5f
Z3JvdXBzLnJlbW92ZShncm91cCkKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIG5v
dCBzZWxmLl9ncm91cHMKKworICAgIGRlZiBncm91cF9jb3VudChzZWxmKToKKyAgICAgICAgcmV0
dXJuIGxlbihzZWxmLl9ncm91cHMpCisKKyAgICBkZWYgY29udGFpbnNfZ3JvdXAoc2VsZiwgZ3Jv
dXApOgorICAgICAgICBhc3NlcnQgZ3JvdXAKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3Jv
dXAsIFByb2plY3RHcm91cCkKKyAgICAgICAgcmV0dXJuIGdyb3VwIGluIHNlbGYuX2dyb3Vwcwor
CisKK2NsYXNzIFByb2plY3RHcm91cChQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlLCBQcm9qZWN0
R3JvdXBDb250YWluZXIsIFByb2plY3RGaWxlUmVmZXJlbmNlQ29udGFpbmVyKToKKyAgICAiIiIK
KyAgICBDbGFzcyBob2xkaW5nIGEgbGlzdCBvZiBmaWxlIHJlZmVyZW5jZXMgYW5kIGEgbGlzdCBv
ZiBzdXAtZ3JvdXBzLgorICAgIEFsc28sIGNvcnJlc3BvbmRzIHRvIGEgc3BlY2lmaWMgZGlyZWN0
b3J5LgorICAgICIiIgorICAgIElEX0NPVU5URVIgPSAwCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgY29udGFpbmVyPU5vbmUsIGRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBj
b250YWluZXIgb3IgaXNpbnN0YW5jZShjb250YWluZXIsIFByb2plY3RHcm91cENvbnRhaW5lcikK
KyAgICAgICAgYXNzZXJ0IG5vdCBkaXJlY3Rvcnkgb3IgaXNpbnN0YW5jZShkaXJlY3RvcnksIENv
bW1vbkRpcmVjdG9yeSkKKyAgICAgICAgUHJvamVjdERpcmVjdG9yeVJlZmVyZW5jZS5fX2luaXRf
XyhzZWxmLCBkaXJlY3RvcnkpCisgICAgICAgIFByb2plY3RHcm91cENvbnRhaW5lci5fX2luaXRf
XyhzZWxmKQorICAgICAgICBQcm9qZWN0RmlsZVJlZmVyZW5jZUNvbnRhaW5lci5fX2luaXRfXyhz
ZWxmKQorICAgICAgICBQcm9qZWN0R3JvdXAuSURfQ09VTlRFUiArPSAxCisgICAgICAgIHNlbGYu
X2lkID0gUHJvamVjdEdyb3VwLklEX0NPVU5URVIKKyAgICAgICAgc2VsZi5jb250YWluZXIgPSBj
b250YWluZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2go
c2VsZi5faWQpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0
IHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5faWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJldHVybiBz
ZWxmIGlzIG90aGVyCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNz
ZXJ0IG5vdCBvdGhlciBvciBpc2luc3RhbmNlKG90aGVyLCBzZWxmLlByb2plY3RHcm91cCkKKyAg
ICAgICAgYXNzZXJ0IHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5faWQgIT0gb3RoZXIuX2lkCisgICAg
ICAgIHJldHVybiBzZWxmIGlzIG5vdCBvdGhlcgorCisgICAgZGVmIF9zZXRfY29udGFpbmVyKHNl
bGYsIGNvbnRhaW5lcik6CisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlzaW5zdGFu
Y2UoY29udGFpbmVyLCBQcm9qZWN0R3JvdXBDb250YWluZXIpCisgICAgICAgIGFzc2VydCBub3Qg
c2VsZi5jb250YWluZXIKKyAgICAgICAgc2VsZi5jb250YWluZXIgPSBjb250YWluZXIKKworICAg
IGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFByb2plY3REaXJlY3RvcnlSZWZl
cmVuY2UuaXNfdmFsaWQoc2VsZikgYW5kIFByb2plY3RHcm91cENvbnRhaW5lci5pc192YWxpZChz
ZWxmKSBhbmQgUHJvamVjdEZpbGVSZWZlcmVuY2VDb250YWluZXIuaXNfdmFsaWQoc2VsZikKKwor
ICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIFByb2plY3RHcm91cENvbnRh
aW5lci5pc19lbXB0eShzZWxmKSBhbmQgUHJvamVjdEZpbGVSZWZlcmVuY2VDb250YWluZXIuaXNf
ZW1wdHkoc2VsZikKKworCitjbGFzcyBHcm91cFByb2plY3RGaWxlUmVmZXJlbmNlKFByb2plY3RG
aWxlUmVmZXJlbmNlKToKKyAgICAiIiIKKyAgICBGaWxlIHJlZmVyZW5jZSBjbGFzcyBpbiBhIGdy
b3VwIHByb2plY3QuIFN0b3JlcyB0aGUgY29udGFpbmVyICh1c3UuIGEgZ3JvdXApLgorICAgICIi
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlPU5vbmUsIGNvbnRhaW5lcj1Ob25lKToKKyAg
ICAgICAgYXNzZXJ0IG5vdCBjb250YWluZXIgb3IgaXNpbnN0YW5jZShjb250YWluZXIsIFByb2pl
Y3RGaWxlUmVmZXJlbmNlQ29udGFpbmVyKQorICAgICAgICBQcm9qZWN0RmlsZVJlZmVyZW5jZS5f
X2luaXRfXyhzZWxmLCBmaWxlKQorICAgICAgICBzZWxmLmNvbnRhaW5lciA9IGNvbnRhaW5lcgor
CisgICAgZGVmIF9zZXRfY29udGFpbmVyKHNlbGYsIGNvbnRhaW5lcik6CisgICAgICAgIGFzc2Vy
dCBub3QgY29udGFpbmVyIG9yIGlzaW5zdGFuY2UoY29udGFpbmVyLCBQcm9qZWN0RmlsZVJlZmVy
ZW5jZUNvbnRhaW5lcikKKyAgICAgICAgYXNzZXJ0IG5vdCBjb250YWluZXIgb3Igbm90IHNlbGYu
Y29udGFpbmVyCisgICAgICAgIHNlbGYuY29udGFpbmVyID0gY29udGFpbmVyCisKKyAgICBkZWYg
aXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbnRhaW5lciBhbmQgUHJvamVj
dEZpbGVSZWZlcmVuY2UuaXNfdmFsaWQoc2VsZikKKworCitjbGFzcyBHcm91cFByb2plY3QoUHJv
amVjdCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgcHJvamVjdHMgdGhhdCBjb25zaXN0
IG9mIG5lc3RlZCBncm91cHMgYW5kIGZpbGVzIChlLmcuLCBYY29kZSwgVmlzdWFsIFN0dWRpbyku
CisKKyAgICBEZXJpdmVkIGNsYXNzZXMgTVVTVCBkZWZpbmU6CisgICAgLSkgYSBjbGFzcyB2YXJp
YWJsZSAnUFJPSkVDVF9HUk9VUF9DTEFTUycgdGhhdCBjb250YWlucyB0aGUgY2xhc3Mgb2YgZ3Jv
dXBzIHdpdGhpbiB0aGUgcHJvamVjdAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBj
b21tb24sIGZpbGUsIHZhcmlhYmxlX3RvX2RpcmVjdG9yeT1Ob25lLCBwcm9qZWN0X25hbWU9Tm9u
ZSk6CisgICAgICAgIFByb2plY3QuX19pbml0X18oc2VsZiwgY29tbW9uLCBmaWxlLCB2YXJpYWJs
ZV90b19kaXJlY3RvcnksIHByb2plY3RfbmFtZSkKKyAgICAgICAgIyBDb3VudGVyIG92ZXIgYWxs
IGdyb3VwcyBpbiB0aGUgcHJvamVjdC4gVGhpcyBhbHNvIHNpbXBsaWZpZXMgdW5pcXVlbmVzcyBh
bmQgc2FtZW5lc3MgdGVzdHMuCisgICAgICAgIHNlbGYuZ3JvdXBfaWRfY291bnRlciA9IDAKKyAg
ICAgICAgIyBtYWluIGdyb3VwIGNvbnRhaW5pbmcgYWxsIG90aGVyIGdyb3VwcworICAgICAgICBz
ZWxmLm1haW5fZ3JvdXAgPSBOb25lCisgICAgICAgICMgYWxsIGdyb3VwcyBmb3IgcXVpY2sgcmVm
ZXJlbmNlCisgICAgICAgIHNlbGYuYWxsX2dyb3VwcyA9IHNldCgpCisKKyAgICBkZWYgX3NldF9t
YWluX2dyb3VwKHNlbGYsIGdyb3VwKToKKyAgICAgICAgYXNzZXJ0IGdyb3VwCisgICAgICAgIGFz
c2VydCBpc2luc3RhbmNlKGdyb3VwLCBQcm9qZWN0R3JvdXApCisgICAgICAgIGFzc2VydCBub3Qg
c2VsZi5tYWluX2dyb3VwCisgICAgICAgIGFzc2VydCBub3QgZ3JvdXAuY29udGFpbmVyCisgICAg
ICAgIGFzc2VydCBncm91cCBpbiBzZWxmLmFsbF9ncm91cHMKKyAgICAgICAgc2VsZi5tYWluX2dy
b3VwID0gZ3JvdXAKKworICAgIGRlZiBfYWRkX2dyb3VwKHNlbGYsIGdyb3VwKToKKyAgICAgICAg
YXNzZXJ0IGdyb3VwCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGdyb3VwLCBQcm9qZWN0R3Jv
dXApCisgICAgICAgIGFzc2VydCBncm91cCBub3QgaW4gc2VsZi5hbGxfZ3JvdXBzCisgICAgICAg
IHNlbGYuYWxsX2dyb3Vwcy5hZGQoZ3JvdXApCisKKyAgICBkZWYgX3JlbW92ZV9ncm91cChzZWxm
LCBncm91cCk6CisgICAgICAgIGFzc2VydCBncm91cAorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShncm91cCwgUHJvamVjdEdyb3VwKQorICAgICAgICBhc3NlcnQgZ3JvdXAgaW4gc2VsZi5hbGxf
Z3JvdXBzCisgICAgICAgIHNlbGYuYWxsX2dyb3Vwcy5yZW1vdmUoZ3JvdXApCisKKyAgICAjIC0t
LSBwcm9qZWN0IG1hbmlwdWxhdGlvbiAtLS0KKworICAgIGRlZiBhZGRfZmlsZShzZWxmLCBmaWxl
LCBvcHRpb25zKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ViY2xhc3Nl
cyBtdXN0IGltcGxlbWVudCIpCisKKyAgICBkZWYgZW5zdXJlX2dyb3VwX2Zvcl9kaXJlY3Rvcnko
c2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3Vi
Y2xhc3NlcyBtdXN0IGltcGxlbWVudCIpCisKKyAgICBkZWYgZW5zdXJlX2ZpbGVfcmVmZXJlbmNl
KHNlbGYsIGZpbGUsIG9wdGlvbnMpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IikKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3Byb2plY3QvZ3JvdXBiYXNlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9ncm91cGJhc2VfdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDliMzc3NAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvZ3JvdXBiYXNlX3VuaXR0ZXN0
LnB5CkBAIC0wLDAgKzEsNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcm9qZWN0LmNvbW1v
biBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5ncm91cGJhc2UgaW1wb3J0
ICoKKworCitjbGFzcyBHcm91cEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
c2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29tbW9uID0gQ29tbW9uSW5mbygiV2ViQ29yZSIp
CisKKyAgICBkZWYgdGVzdF9Qcm9qZWN0R3JvdXAoc2VsZik6CisgICAgICAgIG1haW5fZGlyZWN0
b3J5ID0gc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeQorICAgICAgICBzdWJfZGlyZWN0b3J5ID0g
c2VsZi5jb21tb24uY3JlYXRlX3N1YmRpcmVjdG9yeShtYWluX2RpcmVjdG9yeSwgJ3Rlc3QnKQor
ICAgICAgICBtYWluX2dyb3VwID0gUHJvamVjdEdyb3VwKE5vbmUsIG1haW5fZGlyZWN0b3J5KQor
ICAgICAgICBzdWJfZ3JvdXAgPSBQcm9qZWN0R3JvdXAobWFpbl9ncm91cCwgc3ViX2RpcmVjdG9y
eSkKKyAgICAgICAgbWFpbl9ncm91cC5fYWRkX2dyb3VwKHN1Yl9ncm91cCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShtYWluX2dyb3VwLmlzX2VtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShzdWJfZ3JvdXAuaXNfZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Yl9n
cm91cC5jb250YWluZXIgaXMgbWFpbl9ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1h
aW5fZ3JvdXAuY29udGFpbnNfZ3JvdXAoc3ViX2dyb3VwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChtYWluX2dyb3VwLmdyb3VwX2NvdW50KCksIDEpCisKKyAgICBkZWYgdGVzdF9Hcm91cFBy
b2plY3Qoc2VsZik6CisgICAgICAgIHByb2plY3RfZmlsZV9uYW1lID0gJ3Byb2plY3QucHJvaicK
KyAgICAgICAgcHJvamVjdF9maWxlID0gc2VsZi5jb21tb24uY3JlYXRlX2ZpbGUoc2VsZi5jb21t
b24uc2NtX2RpcmVjdG9yeSwgcHJvamVjdF9maWxlX25hbWUpCisgICAgICAgIHByb2plY3QgPSBH
cm91cFByb2plY3Qoc2VsZi5jb21tb24sIHByb2plY3RfZmlsZSkKKyAgICAgICAgbWFpbl9kaXJl
Y3RvcnkgPSBzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5CisgICAgICAgIHN1Yl9kaXJlY3Rvcnkg
PSBzZWxmLmNvbW1vbi5jcmVhdGVfc3ViZGlyZWN0b3J5KG1haW5fZGlyZWN0b3J5LCAndGVzdCcp
CisgICAgICAgIG1haW5fZ3JvdXAgPSBQcm9qZWN0R3JvdXAoTm9uZSwgbWFpbl9kaXJlY3Rvcnkp
CisgICAgICAgIHN1Yl9ncm91cCA9IFByb2plY3RHcm91cChtYWluX2dyb3VwLCBzdWJfZGlyZWN0
b3J5KQorICAgICAgICBwcm9qZWN0Ll9hZGRfZ3JvdXAobWFpbl9ncm91cCkKKyAgICAgICAgcHJv
amVjdC5fYWRkX2dyb3VwKHN1Yl9ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
cHJvamVjdC5hbGxfZ3JvdXBzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1haW5fZ3Jv
dXAgaW4gcHJvamVjdC5hbGxfZ3JvdXBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3ViX2dy
b3VwIGluIHByb2plY3QuYWxsX2dyb3VwcykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vcHJvamVjdC9tYWtlYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QvbWFrZWJhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTUwN2U0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QvbWFrZWJhc2UucHkKQEAgLTAsMCArMSwyODMgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3QucHJv
amVjdCBpbXBvcnQgKgorCisKK2NsYXNzIElubGluZUNvbW1lbnRzKG9iamVjdCk6CisgICAgIiIi
CisgICAgTWl4aW4gY2xhc3MgZm9yIGlubGluZSBjb21tZW50cyBhc3NpZ25lZCB0byBzdGF0ZW1l
bnRzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmxp
bmVfY29tbWVudHMgPSBbXSAgIyBhcnJheSBvZiBzdHJpbmdzLCByZXByZXNlbnRpbmcgbGluZXMg
b2YgY29tbWVudHMKKworCitjbGFzcyBTdGF0ZW1lbnQob2JqZWN0KToKKyAgICAiIiIKKyAgICBC
YXNlIGNsYXNzIGZvciBzdGF0ZW1lbnRzIGNvbnRhaW5lZCBpbiBhIFN0YXRlbWVudExpc3QuCisg
ICAgRXZlcnkgc3RhdGVtZW50IGFsc28gc3RvcmVzIHdpdGggaXQgYSBzZXJpZXMgb2YgY29tbWVu
dCBsaW5lcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdCBpdC4KKyAgICAiIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdD1Ob25lKToKKyAgICAgICAgYXNz
ZXJ0IG5vdCBjb250YWluaW5nX3N0YXRlbWVudF9saXN0IG9yIGlzaW5zdGFuY2UoY29udGFpbmlu
Z19zdGF0ZW1lbnRfbGlzdCwgU3RhdGVtZW50TGlzdCkKKyAgICAgICAgc2VsZi5jb250YWluaW5n
X3N0YXRlbWVudF9saXN0ID0gY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdAorICAgICAgICBzZWxm
LmNvbW1lbnRzID0gW10KKworICAgIGRlZiBfc2V0X2NvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3Qo
c2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCk6CisgICAgICAgIGFzc2VydCBjb250YWlu
aW5nX3N0YXRlbWVudF9saXN0CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbnRhaW5pbmdf
c3RhdGVtZW50X2xpc3QsIFN0YXRlbWVudExpc3QpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5j
b250YWluaW5nX3N0YXRlbWVudF9saXN0CisgICAgICAgIHNlbGYuY29udGFpbmluZ19zdGF0ZW1l
bnRfbGlzdCA9IGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QKKworICAgIGRlZiBwcmVwZW5kX2Nv
bW1lbnQoc2VsZiwgY29tbWVudCk6CisgICAgICAgIHNlbGYuY29tbWVudHMuaW5zZXJ0KDAsIGNv
bW1lbnQpCisKKyAgICBkZWYgYXBwZW5kX2NvbW1lbnQoc2VsZiwgY29tbWVudCk6CisgICAgICAg
IHNlbGYuY29tbWVudHMuYXBwZW5kKGNvbW1lbnQpCisKKworY2xhc3MgU3RhdGVtZW50TGlzdChv
YmplY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHN0YXRlbWVu
dHMuIEVpdGhlciB0b3AtbGV2ZWwsIG9yIGNvbnRhaW5lZCBpbiBhIENvbmRpdGlvbkJyYW5jaC4K
KyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyPU5vbmUpOgorICAgICAg
ICBzZWxmLmNvbnRhaW5lciA9IGNvbnRhaW5lcgorICAgICAgICBzZWxmLnN0YXRlbWVudHMgPSBb
XQorCisgICAgZGVmIF9hcHBlbmRfc3RhdGVtZW50KHNlbGYsIHN0YXRlbWVudCk6CisgICAgICAg
IHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoc3RhdGVtZW50KQorCisgICAgZGVmIHBhcmVudF9zdGF0
ZW1lbnRfbGlzdChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3Vi
Y2xhc3NlcyBtdXN0IGltcGxlbWVudCBwYXJlbnRfc3RhdGVtZW50X2xpc3QoKSIpCisKKyAgICBk
ZWYgc3RhdGVtZW50X2NvdW50KHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuc3RhdGVt
ZW50cykKKworCitjbGFzcyBDb21tZW50KFN0YXRlbWVudCk6CisgICAgIiIiCisgICAgQ2xhc3Mg
aG9sZGluZyBhIHNpbmdsZSBjb21tZW50IGxpbmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgb3RoZXIg
c3RhdGVtZW50cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmluZ19z
dGF0ZW1lbnRfbGlzdCwgY29tbWVudCk6CisgICAgICAgIFN0YXRlbWVudC5fX2luaXRfXyhzZWxm
LCBjb250YWluaW5nX3N0YXRlbWVudF9saXN0KQorICAgICAgICBzZWxmLmNvbW1lbnQgPSBjb21t
ZW50CisKKworY2xhc3MgQXNzaWdubWVudChTdGF0ZW1lbnQpOgorICAgICIiIgorICAgIEJhc2Ug
Y2xhc3MgZm9yIGFzc2lnbm1lbnQgb2YgYSBsaXN0IG9mIHZhbHVlcyB0byBhIHZhcmlhYmxlCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3Qs
IHZhcmlhYmxlLCBvcGVyYXRvcik6CisgICAgICAgIGFzc2VydCB2YXJpYWJsZQorICAgICAgICBh
c3NlcnQgb3BlcmF0b3IKKyAgICAgICAgU3RhdGVtZW50Ll9faW5pdF9fKHNlbGYsIGNvbnRhaW5p
bmdfc3RhdGVtZW50X2xpc3QpCisgICAgICAgIHNlbGYudmFyaWFibGUgPSB2YXJpYWJsZQorICAg
ICAgICBzZWxmLm9wZXJhdG9yID0gb3BlcmF0b3IKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ViY2xhc3NlcyBtdXN0IGltcGxl
bWVudCBpc19lbXB0eSgpIikKKworICAgIGRlZiB2YWx1ZV9jb3VudChzZWxmKToKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBjb3Vu
dCgpIikKKworCitjbGFzcyBGaWxlUmVmZXJlbmNlc0Fzc2lnbm1lbnQoQXNzaWdubWVudCwgUHJv
amVjdEZpbGVSZWZlcmVuY2VDb250YWluZXIpOgorICAgICIiIgorICAgIEFzc2lnbm1lbnQgb2Yg
YSBsaXN0IG9mIGZpbGUgcmVmZXJlbmNlcyB0byBhIHZhcmlhYmxlLgorICAgICIiIgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRlbWVudF9saXN0LCB2YXJpYWJsZSwgb3Bl
cmF0b3IpOgorICAgICAgICBBc3NpZ25tZW50Ll9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3Rh
dGVtZW50X2xpc3QsIHZhcmlhYmxlLCBvcGVyYXRvcikKKyAgICAgICAgUHJvamVjdEZpbGVSZWZl
cmVuY2VDb250YWluZXIuX19pbml0X18oc2VsZikKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToK
KyAgICAgICAgcmV0dXJuIFByb2plY3RGaWxlUmVmZXJlbmNlQ29udGFpbmVyLmlzX2VtcHR5KHNl
bGYpCisKKyAgICBkZWYgdmFsdWVfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBQcm9qZWN0
RmlsZVJlZmVyZW5jZUNvbnRhaW5lci5maWxlX3JlZmVyZW5jZXNfY291bnQoc2VsZikKKworCitj
bGFzcyBEaXJlY3RvcnlSZWZlcmVuY2VzQXNzaWdubWVudChBc3NpZ25tZW50LCBQcm9qZWN0RGly
ZWN0b3J5UmVmZXJlbmNlQ29udGFpbmVyKToKKyAgICAiIiIKKyAgICBBc3NpZ25tZW50IG9mIGEg
bGlzdCBvZiBmaWxlIHJlZmVyZW5jZXMgdG8gYSB2YXJpYWJsZS4KKyAgICAiIiIKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCwgdmFyaWFibGUsIG9wZXJh
dG9yKToKKyAgICAgICAgQXNzaWdubWVudC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRl
bWVudF9saXN0LCB2YXJpYWJsZSwgb3BlcmF0b3IpCisgICAgICAgIFByb2plY3REaXJlY3RvcnlS
ZWZlcmVuY2VDb250YWluZXIuX19pbml0X18oc2VsZikKKworICAgIGRlZiBpc19lbXB0eShzZWxm
KToKKyAgICAgICAgcmV0dXJuIFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2VDb250YWluZXIuaXNf
ZW1wdHkoc2VsZikKKworICAgIGRlZiB2YWx1ZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJu
IFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2VDb250YWluZXIuZGlyZWN0b3J5X3JlZmVyZW5jZXNf
Y291bnQoc2VsZikKKworCitjbGFzcyBBcmJpdHJhcnlBc3NpZ25tZW50KEFzc2lnbm1lbnQpOgor
ICAgICIiIgorICAgIEFzc2lnbm1lbnQgb2YgYSBsaXN0IG9mIG5vbi1maWxlIHZhbHVlcyB0byBh
IHZhcmlhYmxlLiBEb2VzIG5vdCBjb250YWluIChtYW5hZ2VkKSBmaWxlIHJlZmVyZW5jZXMuCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3Qs
IHZhcmlhYmxlLCBvcGVyYXRvcik6CisgICAgICAgIEFzc2lnbm1lbnQuX19pbml0X18oc2VsZiwg
Y29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCwgdmFyaWFibGUsIG9wZXJhdG9yKQorICAgICAgICBz
ZWxmLnZhbHVlcyA9IFtdICAjIG9yZGVyZWQgbGlzdCBvZiBhcmJpdHJhcnkgdmFsdWVzIChzdHJp
bmdzKQorCisgICAgZGVmIGFwcGVuZF92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYu
dmFsdWVzLmFwcGVuZCh2YWx1ZSkKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAg
cmV0dXJuIG5vdCBzZWxmLnZhbHVlcworCisgICAgZGVmIHZhbHVlX2NvdW50KHNlbGYpOgorICAg
ICAgICByZXR1cm4gbGVuKHNlbGYudmFsdWVzKQorCisKK2NsYXNzIENvbmRpdGlvbihTdGF0ZW1l
bnQpOgorICAgICIiIgorICAgIENvbnRhaW5lciBjbGFzcyBmb3IgYSBsaXN0IG9mIENvbmRpdGlv
bkJyYW5jaCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWlu
aW5nX3N0YXRlbWVudF9saXN0KToKKyAgICAgICAgU3RhdGVtZW50Ll9faW5pdF9fKHNlbGYsIGNv
bnRhaW5pbmdfc3RhdGVtZW50X2xpc3QpCisgICAgICAgIHNlbGYuYnJhbmNoZXMgPSBbXSAgIyBs
aXN0IG9mIENvbmRpdGlvbkJyYW5jaCBvYmplY3RzCisKKyAgICBkZWYgX2FwcGVuZF9icmFuY2go
c2VsZiwgYnJhbmNoKToKKyAgICAgICAgYXNzZXJ0IGJyYW5jaAorICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZShicmFuY2gsIENvbmRpdGlvbkJyYW5jaCkKKyAgICAgICAgYXNzZXJ0IHNlbGYuYnJh
bmNoZXMgb3Igbm90IGlzaW5zdGFuY2UoYnJhbmNoLCBFbHNlQ29uZGl0aW9uQnJhbmNoKQorICAg
ICAgICBhc3NlcnQgbm90IHNlbGYuYnJhbmNoZXMgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5icmFu
Y2hlc1stMV0sIEVsc2VDb25kaXRpb25CcmFuY2gpCisgICAgICAgIHNlbGYuYnJhbmNoZXMuYXBw
ZW5kKGJyYW5jaCkKKworICAgIGRlZiBicmFuY2hfY291bnQoc2VsZik6CisgICAgICAgIHJldHVy
biBsZW4oc2VsZi5icmFuY2hlcykKKworCitjbGFzcyBDb25kaXRpb25CcmFuY2goU3RhdGVtZW50
TGlzdCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY29uZGl0aW9uIGJyYW5jaGVzLgor
ICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluaW5nX2NvbmRpdGlvbik6Cisg
ICAgICAgIGFzc2VydCBjb250YWluaW5nX2NvbmRpdGlvbgorICAgICAgICBTdGF0ZW1lbnRMaXN0
Ll9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfY29uZGl0aW9uKQorICAgICAgICBzZWxmLmNvbnRh
aW5pbmdfY29uZGl0aW9uID0gY29udGFpbmluZ19jb25kaXRpb24KKworICAgIGRlZiBwYXJlbnRf
c3RhdGVtZW50X2xpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbnRhaW5pbmdfY29u
ZGl0aW9uLmNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QKKworCitjbGFzcyBUZXN0Q29uZGl0aW9u
QnJhbmNoKENvbmRpdGlvbkJyYW5jaCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY29u
ZGl0aW9uIGJyYW5jaGVzIHRoYXQgaGF2ZSBhIHRlc3QgKGkuZS4sIGFyZSBub3QgJ2Vsc2UnKS4K
KyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmluZ19jb25kaXRpb24sIHRl
c3QpOgorICAgICAgICBDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZiwgY29udGFpbmluZ19j
b25kaXRpb24pCisgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKworCitjbGFzcyBBcmJpdHJhcnlU
ZXN0Q29uZGl0aW9uQnJhbmNoKFRlc3RDb25kaXRpb25CcmFuY2gpOgorICAgICIiIgorICAgIFN0
b3JlcyBhIHZlcmJhdGltIHRlc3QgZXhwcmVzc2lvbiB0aGF0IGRvZXMgbm90IHJlZmVyIGEgZGVm
aW5lLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluaW5nX2NvbmRpdGlv
biwgdGVzdCk6CisgICAgICAgIFRlc3RDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZiwgY29u
dGFpbmluZ19jb25kaXRpb24sIHRlc3QpCisKKworY2xhc3MgREVGSU5FQ29uZGl0aW9uQnJhbmNo
KFRlc3RDb25kaXRpb25CcmFuY2gpOgorICAgICIiIgorICAgIFN0b3JlcyB0aGUgZGVmaW5lIHZh
cmlhYmxlIChlLmcuLCBFTkFCTEVfVklERU8pIGluIGFkZGl0aW9uIHRvIHRoZSB2ZXJiYXRpbSB0
ZXN0IGV4cHJlc3Npb24uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5p
bmdfY29uZGl0aW9uLCB0ZXN0LCBkZWZpbmUsIG5lZ2F0ZWQ9Tm9uZSk6CisgICAgICAgIGFzc2Vy
dCBkZWZpbmUKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGVmaW5lLCBDb21tb25ERUZJTkUp
CisgICAgICAgIFRlc3RDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZiwgY29udGFpbmluZ19j
b25kaXRpb24sIHRlc3QpCisgICAgICAgIHNlbGYuZGVmaW5lID0gZGVmaW5lCisgICAgICAgIHNl
bGYubmVnYXRlZCA9IG5lZ2F0ZWQgb3IgRmFsc2UKKworICAgIGRlZiBzYXRpc2ZpZXModmFyaWFi
bGUsIG5lZ2F0ZWQ9RmFsc2UpOgorICAgICAgICByZXR1cm4gc2VsZi52YXJpYWJsZSA9PSB2YXJp
YWJsZSBhbmQgc2VsZi5uZWdhdGVkID09IG5lZ2F0ZWQKKworCitjbGFzcyBFbHNlQ29uZGl0aW9u
QnJhbmNoKENvbmRpdGlvbkJyYW5jaCk6CisgICAgIiIiCisgICAgU3RvcmVzIGFuICdlbHNlJyBj
b25kaXRpb24gYnJhbmNoLiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgYnJhbmNoIGluIHRoZSBjb250
YWluaW5nIGNvZGl0aW9uLCBhbmQgY2Fubm90IGJlIHRoZSBvbmx5IG9uZS4KKyAgICAiIiIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmluZ19jb25kaXRpb24pOgorICAgICAgICBDb25k
aXRpb25CcmFuY2guX19pbml0X18oc2VsZiwgY29udGFpbmluZ19jb25kaXRpb24pCisKKworIyBG
SVhNRTogJ01ha2VGaWxlJyBtYWtlcyBpdCBzb3VuZCBsaWtlIGl0IHNob3VsZCBiZSBhIENvbW1v
bkZpbGUgb2JqZWN0IC0gdHJ5IHRvIGZpbmQgYSBiZXR0ZXIgbmFtZQorY2xhc3MgTWFrZUZpbGUo
U3RhdGVtZW50TGlzdCk6CisgICAgIiIiCisgICAgQ2xhc3Mgc3RvcmluZyB0aGUgY29udGVudHMg
b2YgYSBzaW5nbGUgbWFrZS1maWxlLiBBIG1ha2UtYmFzZWQgcHJvamVjdCBtYXkgYmUgc3ByZWFk
IG92ZXIgbXVsdGlwbGUgbWFrZSBmaWxlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZmlsZSwgcGFyZW50X21ha2VfZmlsZT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGZpbGUKKyAg
ICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgU3RhdGVt
ZW50TGlzdC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisgICAgICAg
IHNlbGYucGFyZW50X21ha2VfZmlsZSA9IHBhcmVudF9tYWtlX2ZpbGUKKyAgICAgICAgc2VsZi5z
dWJfbWFrZV9maWxlcyA9IHNldCgpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAg
IHJldHVybiBoYXNoKHNlbGYuZmlsZSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgor
ICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIGlzaW5zdGFuY2Uob3RoZXIsIE1ha2VGaWxlKQor
ICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5maWxlIGlz
IG5vdCBvdGhlci5maWxlCisgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisKKyAgICBkZWYg
X19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBpc2luc3Rh
bmNlKG90aGVyLCBNYWtlRmlsZSkKKyAgICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBzZWxmIGlz
IG90aGVyIG9yIHNlbGYuZmlsZSBpcyBub3Qgb3RoZXIuZmlsZQorICAgICAgICByZXR1cm4gc2Vs
ZiBpcyBub3Qgb3RoZXIKKworICAgIGRlZiBwYXJlbnRfc3RhdGVtZW50X2xpc3Qoc2VsZik6Cisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgYWRkX3N1Yl9tYWtlX2ZpbGUoc2VsZiwgbWFr
ZV9maWxlKToKKyAgICAgICAgYXNzZXJ0IG1ha2VfZmlsZQorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShtYWtlX2ZpbGUsIE1ha2VGaWxlKQorICAgICAgICBhc3NlcnQgbWFrZV9maWxlIG5vdCBp
biBzZWxmLnN1Yl9tYWtlX2ZpbGVzCisgICAgICAgIHNlbGYuc3ViX21ha2VfZmlsZXMuYWRkKG1h
a2VfZmlsZSkKKworCitjbGFzcyBNYWtlUHJvamVjdChQcm9qZWN0KToKKyAgICAiIiIKKyAgICBC
YXNlIGNsYXNzIGZvciBwcm9qZWN0cyB0aGF0IGFyZSBtYWtlLWZpbGUgbGlrZSAoZS5nLiwgUXQs
IEdOVW1ha2VmaWxlKQorICAgIFN1Y2ggcHJvamVjdHMgbWF5IGJlIHNwcmVhZCBvdmVyIHNldmVy
YWwgaW5kaXZpZHVhbCBmaWxlcy4KKyAgICBUaGUgTWFrZUZpbGUgb2JqZWN0IHBhc3NlZCBpbiB0
byB0aGUgUHJvamVjdCBvYmplY3Qgc2hvdWxkIHJlcHJlc2VudCB0aGUgcm9vdCBwcm9qZWN0IGZp
bGUgdGhhdCBpbmNsdWRlcyB0aGUgcmVzdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgY29tbW9uLCByb290X21ha2VfZmlsZSwgc3BlY2lhbF9kaXJlY3Rvcmllcz1Ob25lLCBwcm9q
ZWN0X25hbWU9Tm9uZSk6CisgICAgICAgIGFzc2VydCByb290X21ha2VfZmlsZQorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShyb290X21ha2VfZmlsZSwgTWFrZUZpbGUpCisgICAgICAgIFByb2pl
Y3QuX19pbml0X18oc2VsZiwgY29tbW9uLCByb290X21ha2VfZmlsZS5maWxlLCBzcGVjaWFsX2Rp
cmVjdG9yaWVzLCBwcm9qZWN0X25hbWUpCisgICAgICAgIHNlbGYucm9vdF9tYWtlX2ZpbGUgPSBy
b290X21ha2VfZmlsZQorICAgICAgICBzZWxmLmFsbF9tYWtlX2ZpbGVzID0gc2V0KCkKKyAgICAg
ICAgc2VsZi5hZGRfbWFrZV9maWxlKHJvb3RfbWFrZV9maWxlKQorCisgICAgZGVmIGFkZF9tYWtl
X2ZpbGUoc2VsZiwgbWFrZV9maWxlKToKKyAgICAgICAgYXNzZXJ0IG1ha2VfZmlsZQorICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZShtYWtlX2ZpbGUsIE1ha2VGaWxlKQorICAgICAgICBhc3NlcnQg
bWFrZV9maWxlIG5vdCBpbiBzZWxmLmFsbF9tYWtlX2ZpbGVzCisgICAgICAgIHNlbGYuYWxsX21h
a2VfZmlsZXMuYWRkKG1ha2VfZmlsZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3Byb2plY3QvbWFrZWJhc2VfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9wcm9qZWN0L21ha2ViYXNlX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhMGNkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L21ha2ViYXNlX3VuaXR0ZXN0LnB5CkBAIC0w
LDAgKzEsMTQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5tYWtlYmFzZSBpbXBv
cnQgKgorCisKK2NsYXNzIE1ha2VCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVm
IHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1vbiA9IENvbW1vbkluZm8oIldlYkNvcmUi
KQorCisgICAgZGVmIHRlc3Rfc3RhdGVtZW50X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgc3RhdGVt
ZW50X2xpc3QgPSBTdGF0ZW1lbnRMaXN0KCkKKyAgICAgICAgc3RhdGVtZW50ID0gU3RhdGVtZW50
KHN0YXRlbWVudF9saXN0KQorICAgICAgICBzdGF0ZW1lbnRfbGlzdC5fYXBwZW5kX3N0YXRlbWVu
dChzdGF0ZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0ZW1lbnQuY29udGFpbmlu
Z19zdGF0ZW1lbnRfbGlzdCBpcyBzdGF0ZW1lbnRfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzdGF0ZW1lbnRfbGlzdC5zdGF0ZW1lbnRfY291bnQoKSwgMSkKKyAgICAgICAgc3RhdGVt
ZW50LmFwcGVuZF9jb21tZW50KCJCIikKKyAgICAgICAgc3RhdGVtZW50LnByZXBlbmRfY29tbWVu
dCgiQSIpCisgICAgICAgIHN0YXRlbWVudC5hcHBlbmRfY29tbWVudCgiQyIpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRlbWVudC5jb21tZW50cyksIDMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc3RhdGVtZW50LmNvbW1lbnRzWzBdLCAiQSIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc3RhdGVtZW50LmNvbW1lbnRzWzFdLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3RhdGVtZW50LmNvbW1lbnRzWzJdLCAiQyIpCisgICAgICAgIGNvbW1lbnQgPSBDb21t
ZW50KHN0YXRlbWVudF9saXN0LCAiV2lsZSBFLiBDb3lvdGUgLSBHZW5pdXMhIikKKyAgICAgICAg
c3RhdGVtZW50X2xpc3QuX2FwcGVuZF9zdGF0ZW1lbnQoY29tbWVudCkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGNvbW1lbnQuY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCBpcyBzdGF0ZW1lbnRf
bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZW1lbnRfbGlzdC5zdGF0ZW1lbnRf
Y291bnQoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXRlbWVudF9saXN0LnN0YXRl
bWVudHNbMF0gaXMgc3RhdGVtZW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdGVtZW50
X2xpc3Quc3RhdGVtZW50c1sxXSBpcyBjb21tZW50KQorCisgICAgZGVmIHRlc3RfYXNzaWdubWVu
dF9iYXNpY3Moc2VsZik6CisgICAgICAgIGZpbGVfcmVmZXJlbmNlc192YXJpYWJsZSA9ICdGSUxF
UycKKyAgICAgICAgZGlyZWN0b3J5X3JlZmVyZW5jZXNfdmFyaWFibGUgPSAnRElSRUNUT1JJRVMn
CisgICAgICAgIHZhbHVlX3ZhcmlhYmxlID0gJ1ZBTFVFUycKKyAgICAgICAgb3BlcmF0b3IgPSAn
Kz0nCisgICAgICAgIGZpbGVfbmFtZSA9ICdmaWxlLmNwcCcKKyAgICAgICAgZGlyZWN0b3J5X25h
bWUgPSAnZGlyJworICAgICAgICB2YWx1ZSA9ICdraXdpJworICAgICAgICBzdGF0ZW1lbnRfbGlz
dCA9IFN0YXRlbWVudExpc3QoKQorICAgICAgICBmaWxlX3JlZmVyZW5jZXNfYXNzaWdubWVudCA9
IEZpbGVSZWZlcmVuY2VzQXNzaWdubWVudChzdGF0ZW1lbnRfbGlzdCwgZmlsZV9yZWZlcmVuY2Vz
X3ZhcmlhYmxlLCBvcGVyYXRvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3JlZmVy
ZW5jZXNfYXNzaWdubWVudC52YXJpYWJsZSwgZmlsZV9yZWZlcmVuY2VzX3ZhcmlhYmxlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfcmVmZXJlbmNlc19hc3NpZ25tZW50Lm9wZXJhdG9y
LCBvcGVyYXRvcikKKyAgICAgICAgZGlyZWN0b3J5X3JlZmVyZW5jZXNfYXNzaWdubWVudCA9IERp
cmVjdG9yeVJlZmVyZW5jZXNBc3NpZ25tZW50KHN0YXRlbWVudF9saXN0LCBkaXJlY3RvcnlfcmVm
ZXJlbmNlc192YXJpYWJsZSwgb3BlcmF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGly
ZWN0b3J5X3JlZmVyZW5jZXNfYXNzaWdubWVudC52YXJpYWJsZSwgZGlyZWN0b3J5X3JlZmVyZW5j
ZXNfdmFyaWFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZWN0b3J5X3JlZmVyZW5j
ZXNfYXNzaWdubWVudC5vcGVyYXRvciwgb3BlcmF0b3IpCisgICAgICAgIGFyYml0cmFyeV9hc3Np
Z25tZW50ID0gQXJiaXRyYXJ5QXNzaWdubWVudChzdGF0ZW1lbnRfbGlzdCwgdmFsdWVfdmFyaWFi
bGUsIG9wZXJhdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyYml0cmFyeV9hc3NpZ25t
ZW50LnZhcmlhYmxlLCB2YWx1ZV92YXJpYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChh
cmJpdHJhcnlfYXNzaWdubWVudC5vcGVyYXRvciwgb3BlcmF0b3IpCisgICAgICAgIHN0YXRlbWVu
dF9saXN0Ll9hcHBlbmRfc3RhdGVtZW50KGZpbGVfcmVmZXJlbmNlc19hc3NpZ25tZW50KQorICAg
ICAgICBzdGF0ZW1lbnRfbGlzdC5fYXBwZW5kX3N0YXRlbWVudChkaXJlY3RvcnlfcmVmZXJlbmNl
c19hc3NpZ25tZW50KQorICAgICAgICBzdGF0ZW1lbnRfbGlzdC5fYXBwZW5kX3N0YXRlbWVudChh
cmJpdHJhcnlfYXNzaWdubWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfcmVmZXJl
bmNlc19hc3NpZ25tZW50LmlzX2VtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmls
ZV9yZWZlcmVuY2VzX2Fzc2lnbm1lbnQudmFsdWVfY291bnQoKSwgMCkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGRpcmVjdG9yeV9yZWZlcmVuY2VzX2Fzc2lnbm1lbnQuaXNfZW1wdHkoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlY3RvcnlfcmVmZXJlbmNlc19hc3NpZ25tZW50LnZh
bHVlX2NvdW50KCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcmJpdHJhcnlfYXNzaWdu
bWVudC5pc19lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyYml0cmFyeV9hc3Np
Z25tZW50LnZhbHVlX2NvdW50KCksIDApCisgICAgICAgIGZpbGUgPSBzZWxmLmNvbW1vbi5jcmVh
dGVfZmlsZShzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5LCBmaWxlX25hbWUpCisgICAgICAgIGZp
bGVfcmVmZXJlbmNlID0gUHJvamVjdEZpbGVSZWZlcmVuY2UoZmlsZSkKKyAgICAgICAgZGlyZWN0
b3J5ID0gc2VsZi5jb21tb24uY3JlYXRlX3N1YmRpcmVjdG9yeShzZWxmLmNvbW1vbi5zY21fZGly
ZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgZGlyZWN0b3J5X3JlZmVyZW5jZSA9IFBy
b2plY3REaXJlY3RvcnlSZWZlcmVuY2UoZGlyZWN0b3J5KQorICAgICAgICBmaWxlX3JlZmVyZW5j
ZXNfYXNzaWdubWVudC5fYWRkX2ZpbGVfcmVmZXJlbmNlKGZpbGVfcmVmZXJlbmNlKQorICAgICAg
ICBkaXJlY3RvcnlfcmVmZXJlbmNlc19hc3NpZ25tZW50Ll9hZGRfZGlyZWN0b3J5X3JlZmVyZW5j
ZShkaXJlY3RvcnlfcmVmZXJlbmNlKQorICAgICAgICBhcmJpdHJhcnlfYXNzaWdubWVudC5hcHBl
bmRfdmFsdWUodmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZV9yZWZlcmVuY2Vz
X2Fzc2lnbm1lbnQuaXNfZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3Jl
ZmVyZW5jZXNfYXNzaWdubWVudC52YWx1ZV9jb3VudCgpLCAxKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGRpcmVjdG9yeV9yZWZlcmVuY2VzX2Fzc2lnbm1lbnQuaXNfZW1wdHkoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlY3RvcnlfcmVmZXJlbmNlc19hc3NpZ25tZW50LnZhbHVl
X2NvdW50KCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXJiaXRyYXJ5X2Fzc2lnbm1l
bnQuaXNfZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmJpdHJhcnlfYXNzaWdu
bWVudC52YWx1ZV9jb3VudCgpLCAxKQorCisgICAgZGVmIHRlc3RfY29uZGl0aW9uX2Jhc2ljcyhz
ZWxmKToKKyAgICAgICAgdGVzdF9leHByID0gJ2hhcy1leWVzLW9mKG5ld3QpJworICAgICAgICBk
ZWZpbmVfdmFyID0gJ0VOQUJMRV9FTkFCTEUnCisgICAgICAgIGRlZmluZV9leHByID0gZGVmaW5l
X3ZhciArICc9MScKKyAgICAgICAgZGVmaW5lID0gc2VsZi5jb21tb24uZW5zdXJlX0RFRklORShk
ZWZpbmVfdmFyKQorICAgICAgICBzdGF0ZW1lbnRfbGlzdCA9IFN0YXRlbWVudExpc3QoKQorICAg
ICAgICBjb25kaXRpb24gPSBDb25kaXRpb24oc3RhdGVtZW50X2xpc3QpCisgICAgICAgIHN0YXRl
bWVudF9saXN0Ll9hcHBlbmRfc3RhdGVtZW50KGNvbmRpdGlvbikKKyAgICAgICAgdGVzdF9icmFu
Y2ggPSBBcmJpdHJhcnlUZXN0Q29uZGl0aW9uQnJhbmNoKGNvbmRpdGlvbiwgdGVzdF9leHByKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfYnJhbmNoLnRlc3QsIHRlc3RfZXhwcikKKyAg
ICAgICAgZGVmaW5lX2JyYW5jaCA9IERFRklORUNvbmRpdGlvbkJyYW5jaChjb25kaXRpb24sIGRl
ZmluZV9leHByLCBkZWZpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVmaW5lX2JyYW5j
aC50ZXN0LCBkZWZpbmVfZXhwcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWZpbmVfYnJh
bmNoLmRlZmluZSwgZGVmaW5lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRlZmluZV9icmFu
Y2gubmVnYXRlZCkKKyAgICAgICAgbmVnYXRlZF9icmFuY2ggPSBERUZJTkVDb25kaXRpb25CcmFu
Y2goY29uZGl0aW9uLCBkZWZpbmVfZXhwciwgZGVmaW5lLCBuZWdhdGVkPVRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobmVnYXRlZF9icmFuY2gudGVzdCwgZGVmaW5lX2V4cHIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVnYXRlZF9icmFuY2guZGVmaW5lLCBkZWZpbmUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZWdhdGVkX2JyYW5jaC5uZWdhdGVkKQorICAgICAgICBlbHNl
X2JyYW5jaCA9IEVsc2VDb25kaXRpb25CcmFuY2goY29uZGl0aW9uKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGNvbmRpdGlvbi5icmFuY2hfY291bnQoKSwgMCkKKyAgICAgICAgY29uZGl0aW9u
Ll9hcHBlbmRfYnJhbmNoKHRlc3RfYnJhbmNoKQorICAgICAgICBjb25kaXRpb24uX2FwcGVuZF9i
cmFuY2goZGVmaW5lX2JyYW5jaCkKKyAgICAgICAgY29uZGl0aW9uLl9hcHBlbmRfYnJhbmNoKG5l
Z2F0ZWRfYnJhbmNoKQorICAgICAgICBjb25kaXRpb24uX2FwcGVuZF9icmFuY2goZWxzZV9icmFu
Y2gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZGl0aW9uLmJyYW5jaF9jb3VudCgpLCA0
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9icmFuY2gucGFyZW50X3N0YXRlbWVudF9s
aXN0KCkgaXMgc3RhdGVtZW50X2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZWZpbmVf
YnJhbmNoLnBhcmVudF9zdGF0ZW1lbnRfbGlzdCgpIGlzIHN0YXRlbWVudF9saXN0KQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUobmVnYXRlZF9icmFuY2gucGFyZW50X3N0YXRlbWVudF9saXN0KCkg
aXMgc3RhdGVtZW50X2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbHNlX2JyYW5jaC5w
YXJlbnRfc3RhdGVtZW50X2xpc3QoKSBpcyBzdGF0ZW1lbnRfbGlzdCkKKworICAgIGRlZiB0ZXN0
X01ha2VGaWxlX2FuZF9NYWtlUHJvamVjdChzZWxmKToKKyAgICAgICAgZmlsZV9uYW1lID0gJ3By
b2plY3QubWFrZScKKyAgICAgICAgZmlsZSA9IHNlbGYuY29tbW9uLmNyZWF0ZV9maWxlKHNlbGYu
Y29tbW9uLnNjbV9kaXJlY3RvcnksIGZpbGVfbmFtZSkKKyAgICAgICAgbWFrZV9maWxlID0gTWFr
ZUZpbGUoZmlsZSkKKyAgICAgICAgcHJvamVjdCA9IE1ha2VQcm9qZWN0KHNlbGYuY29tbW9uLCBt
YWtlX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2ZpbGUucGFyZW50X3N0YXRl
bWVudF9saXN0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2plY3Qucm9v
dF9tYWtlX2ZpbGUgaXMgbWFrZV9maWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihw
cm9qZWN0LmFsbF9tYWtlX2ZpbGVzKSwgMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vcHJvamVjdC9vcHRpb25zLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vcHJvamVjdC9vcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhhOThiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9wcm9qZWN0L29wdGlvbnMucHkKQEAgLTAsMCArMSwxOTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xhc3MgQ29tbW9uT3B0aW9ucyhvYmplY3QpOgorICAg
ICIiIgorICAgIE9wdGlvbnMgZm9yIHByb2plY3QgZmlsZSBtYW5pcHVsYXRpb24uCisgICAgIiIi
CisgICAgIyBMZXQgZGVmYXVsdCBkZWNpZGUgb24gb3B0aW9uCisgICAgVVNFX0RFRkFVTFQgPSBO
b25lCisgICAgIyBEaXNhYmxlIHRoZSBvcHRpb24vZmVhdHVyZQorICAgIERJU0FCTEUgPSBGYWxz
ZQorICAgICMgRW5hYmxlIHRoZSBvcHRpb24vZmVhdHVyZQorICAgIEVOQUJMRSA9IFRydWUKKwor
ICAgICMgT3V0cHV0cyBubyBtZXNzYWdlcyBhdCBhbGwsIGV4Y2VwdCBlcnJvcnMKKyAgICBWRVJC
T1NJVFlfU0lMRU5UID0gMAorICAgICMgT3V0cHV0cyB3YXJuaW5ncyBvbmx5CisgICAgVkVSQk9T
SVRZX05PUk1BTCA9IDEKKyAgICAjIE91dHB1dHMgYnJpZWYgbWVzc2FnZXM6IHJlYWQgcHJvamVj
dCwgbWFuaXB1bGF0aW9uLCB3cml0ZSBwcm9qZWN0CisgICAgVkVSQk9TSVRZX1ZFUkJPU0UgPSAy
CisgICAgIyBPdXRwdXRzIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBldmVyeSBvcGVyYXRpb24s
IG1haW5seSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCisgICAgVkVSQk9TSVRZX0RFQlVHID0gMwor
ICAgICMgRGVmYXVsdCB2ZXJib3NpdHkKKyAgICAjVkVSQk9TSVRZX0RFRkFVTFQgPSBWRVJCT1NJ
VFlfTk9STUFMCisgICAgVkVSQk9TSVRZX0RFRkFVTFQgPSBWRVJCT1NJVFlfREVCVUcKKworICAg
ICMgSGVhZGVycyBoYXZlIHB1YmxpYyByb2xlCisgICAgSEVBREVSU19ST0xFX1BVQkxJQyA9IDAK
KyAgICAjIEhlYWRlcnMgaGF2ZSBwcml2YXRlIHJvbGUKKyAgICBIRUFERVJTX1JPTEVfUFJJVkFU
RSA9IDEKKyAgICAjIERlZmF1bHQgaGVhZGVycyByb2xlCisgICAgSEVBREVSU19ST0xFX0RFRkFV
TFQgPSBIRUFERVJTX1JPTEVfUFVCTElDCisKKyAgICAjIHVzZSB0aGUgZGVmYXVsdCBmb3IgdGhl
IG9wdGlvbi9mZWF0dXJlCisgICAgUExBVEZPUk1fREVGQVVMVCA9IEVOQUJMRQorCisgICAgIyBY
Y29kZSAoTWFjKSBwbGF0Zm9ybQorICAgIFBMQVRGT1JNX1hDT0RFID0gJ3gnCisgICAgIyBWaXN1
YWwgU3R1ZGlvIHBsYXRmb3JtCisgICAgUExBVEZPUk1fVlMgPSAndicKKyAgICAjIENocm9taXVt
IHBsYXRmb3JtCisgICAgUExBVEZPUk1fQ0hST01JVU0gPSAnYycKKyAgICAjIFF0IHBsYXRmb3Jt
CisgICAgUExBVEZPUk1fUVQgPSAncScKKyAgICAjIENNYWtlLWJhc2VkIHBsYXRmb3JtCisgICAg
UExBVEZPUk1fQ01BS0UgPSAnbScKKworICAgICMgRGVmYXVsdCBmaWxlIHR5cGUgZ2VuZXJhdGlv
bgorICAgIEZJTEVfVFlQRV9ERUZBVUxUID0gRU5BQkxFCisKKyAgICAjIEhlYWRlciBmaWxlcwor
ICAgIEZJTEVfVFlQRV9IID0gJ2gnCisgICAgIyBDUFAgZmlsZXMKKyAgICBGSUxFX1RZUEVfQ1BQ
ID0gJ2NwcCcKKyAgICAjIE9iamVjdGl2ZS1DIGZpbGVzCisgICAgRklMRV9UWVBFX01NID0gJ21t
JworICAgICMgSURMIGZpbGVzCisgICAgRklMRV9UWVBFX0lETCA9ICdpZGwnCisgICAgIyBTZWNv
bmRhcnkgZmlsZXMKKyAgICBGSUxFX1RZUEVfU0VDT05EQVJZID0gJzInCisKKyAgICAjIERlZmF1
bHQgZmlsZSB0eXBlIGdlbmVyYXRpb24KKyAgICBBVVRPX0FERF9HUk9VUFNfREVGQVVMVCA9IEVO
QUJMRQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9oZWxwID0gRmFs
c2UKKyAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVAor
ICAgICAgICBzZWxmLl9oZWFkZXJfcm9sZSA9IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQKKyAg
ICAgICAgc2VsZi5fcGxhdGZvcm1fZGVmYXVsdCA9IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQK
KyAgICAgICAgc2VsZi5fcGxhdGZvcm1zID0geworICAgICAgICAgICAgQ29tbW9uT3B0aW9ucy5Q
TEFURk9STV9YQ09ERTogICAgICBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxULAorICAgICAgICAg
ICAgQ29tbW9uT3B0aW9ucy5QTEFURk9STV9WUzogICAgICAgICBDb21tb25PcHRpb25zLlVTRV9E
RUZBVUxULAorICAgICAgICAgICAgQ29tbW9uT3B0aW9ucy5QTEFURk9STV9DSFJPTUlVTTogICBD
b21tb25PcHRpb25zLlVTRV9ERUZBVUxULAorICAgICAgICAgICAgQ29tbW9uT3B0aW9ucy5QTEFU
Rk9STV9RVDogICAgICAgICBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxULAorICAgICAgICAgICAg
Q29tbW9uT3B0aW9ucy5QTEFURk9STV9DTUFLRTogICAgICBDb21tb25PcHRpb25zLlVTRV9ERUZB
VUxULAorICAgICAgICB9CisgICAgICAgIHNlbGYuX2ZpbGVfdHlwZV9kZWZhdWx0ID0gQ29tbW9u
T3B0aW9ucy5VU0VfREVGQVVMVAorICAgICAgICBzZWxmLl9maWxlX3R5cGVzID0geworICAgICAg
ICAgICAgQ29tbW9uT3B0aW9ucy5GSUxFX1RZUEVfSDogICAgICAgICAgQ29tbW9uT3B0aW9ucy5V
U0VfREVGQVVMVCwKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuRklMRV9UWVBFX0NQUDogICAg
ICAgIENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQsCisgICAgICAgICAgICBDb21tb25PcHRpb25z
LkZJTEVfVFlQRV9NTTogICAgICAgICBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxULAorICAgICAg
ICAgICAgQ29tbW9uT3B0aW9ucy5GSUxFX1RZUEVfSURMOiAgICAgICAgQ29tbW9uT3B0aW9ucy5V
U0VfREVGQVVMVCwKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuRklMRV9UWVBFX1NFQ09OREFS
WTogIENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5f
YXV0b19hZGRfZ3JvdXBzID0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVAorCisgICAgZGVmIGhl
bHAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWxwCisKKyAgICBkZWYgdmVyYm9zaXR5
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl92ZXJib3NpdHkgPT0gQ29tbW9uT3B0aW9ucy5VU0Vf
REVGQVVMVDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25PcHRpb25zLlZFUkJPU0lUWV9ERUZB
VUxUCisgICAgICAgIHJldHVybiBzZWxmLl92ZXJib3NpdHkKKworICAgIGRlZiBzZXRfdmVyYm9z
aXR5KHNlbGYsIHZlcmJvc2l0eSk6CisgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IHZlcmJvc2l0
eQorCisgICAgZGVmIGhlYWRlcnNfcm9sZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGVhZGVy
c19yb2xlID09IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQ6CisgICAgICAgICAgICByZXR1cm4g
Q29tbW9uT3B0aW9ucy5IRUFERVJTX1JPTEVfREVGQVVMVAorICAgICAgICByZXR1cm4gc2VsZi5f
aGVhZGVyc19yb2xlCisKKyAgICBkZWYgc2V0X2hlYWRlcnNfcm9sZShzZWxmLCByb2xlKToKKyAg
ICAgICAgc2VsZi5faGVhZGVyc19yb2xlID0gcm9sZQorCisgICAgZGVmIHNldF9wbGF0Zm9ybV9k
ZWZhdWx0KHNlbGYsIGRlZmF1bHQpOgorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9kZWZhdWx0ID0g
ZGVmYXVsdAorCisgICAgZGVmIHNldF9wbGF0Zm9ybShzZWxmLCBwbGF0Zm9ybSwgdmFsdWUpOgor
ICAgICAgICBhc3NlcnQgcGxhdGZvcm0gaW4gc2VsZi5fcGxhdGZvcm1zCisgICAgICAgIHNlbGYu
X3BsYXRmb3Jtc1twbGF0Zm9ybV0gPSB2YWx1ZQorCisgICAgZGVmIGlzX3BsYXRmb3JtX2VuYWJs
ZWQoc2VsZiwgcGxhdGZvcm0pOgorICAgICAgICBhc3NlcnQgcGxhdGZvcm0gaW4gc2VsZi5fcGxh
dGZvcm1zCisgICAgICAgIGlmIHNlbGYuX3BsYXRmb3Jtc1twbGF0Zm9ybV0gPT0gQ29tbW9uT3B0
aW9ucy5FTkFCTEU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9w
bGF0Zm9ybXNbcGxhdGZvcm1dID09IENvbW1vbk9wdGlvbnMuRElTQUJMRToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICBhc3NlcnQgc2VsZi5fcGxhdGZvcm1zW3BsYXRmb3JtXSA9
PSBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxUCisgICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtX2Rl
ZmF1bHQgPT0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVDoKKyAgICAgICAgICAgIHJldHVybiBD
b21tb25PcHRpb25zLlBMQVRGT1JNX0RFRkFVTFQKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRm
b3JtX2RlZmF1bHQKKworICAgIGRlZiBzZXRfZmlsZV90eXBlKHNlbGYsIGZpbGVfdHlwZSwgdmFs
dWUpOgorICAgICAgICBhc3NlcnQgZmlsZV90eXBlIGluIHNlbGYuX2ZpbGVfdHlwZXMKKyAgICAg
ICAgc2VsZi5fZmlsZV90eXBlc1tmaWxlX3R5cGVdID0gdmFsdWUKKworICAgIGRlZiBpc19maWxl
X3R5cGVfZW5hYmxlZChzZWxmLCBmaWxlX3R5cGUpOgorICAgICAgICBpZiBzZWxmLl9maWxlX3R5
cGVzW2ZpbGVfdHlwZV0gPT0gQ29tbW9uT3B0aW9ucy5FTkFCTEU6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9maWxlX3R5cGVzW2ZpbGVfdHlwZV0gPT0gQ29tbW9u
T3B0aW9ucy5ESVNBQkxFOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGFzc2Vy
dCBzZWxmLl9maWxlX3R5cGVzW2ZpbGVfdHlwZV0gPT0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVM
VAorICAgICAgICBpZiBzZWxmLl9maWxlX3R5cGVfZGVmYXVsdCA9PSBDb21tb25PcHRpb25zLlVT
RV9ERUZBVUxUOgorICAgICAgICAgICAgcmV0dXJuIENvbW1vbk9wdGlvbnMuRklMRV9UWVBFX0RF
RkFVTFQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVfdHlwZV9kZWZhdWx0CisKKyAgICBkZWYg
YXV0b19hZGRfZ3JvdXBzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9hdXRvX2FkZF9ncm91cHMg
PT0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25P
cHRpb25zLkFVVE9fQUREX0dST1VQU19ERUZBVUxUCisgICAgICAgIHJldHVybiBzZWxmLl9hdXRv
X2FkZF9ncm91cHMKKworICAgIGRlZiBzZXRfYXV0b19hZGRfZ3JvdXBzKHNlbGYsIHZhbHVlKToK
KyAgICAgICAgc2VsZi5fYXV0b19hZGRfZ3JvdXBzID0gdmFsdWUKKworICAgIGRlZiBwYXJzZShz
ZWxmLCBjb21tb24sIGxpc3QpOgorICAgICAgICB3aGlsZSBsaXN0IGFuZCBsaXN0WzBdWzBdID09
ICctJzoKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcgPSBsaXN0LnBvcCgwKQorICAgICAgICAg
ICAgaWYgb3B0aW9uX3N0cmluZyA9PSAnLWgnIG9yIG9wdGlvbl9zdHJpbmcgPT0gJy0taGVscCc6
CisgICAgICAgICAgICAgICAgc2VsZi5faGVscCA9IFRydWUKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZyA9PSAnLS1zaWxlbnQnIG9yIG9wdGlv
bl9zdHJpbmcgPT0gJy0tdmVyYm9zaXR5PXNpbGVudCcgb3Igb3B0aW9uX3N0cmluZyA9PSAnLS12
ZXJib3NpdHk9MCc6CisgICAgICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gQ29tbW9uT3B0
aW9ucy5WRVJCT1NJVFlfU0lMRU5UCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIGlmIG9wdGlvbl9zdHJpbmcgPT0gJy0tbm9ybWFsJyBvciBvcHRpb25fc3RyaW5nID09ICct
LXZlcmJvc2l0eT1ub3JtYWwnIG9yIG9wdGlvbl9zdHJpbmcgPT0gJy0tdmVyYm9zaXR5PTEnOgor
ICAgICAgICAgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IENvbW1vbk9wdGlvbnMuVkVSQk9TSVRZ
X05PUk1BTAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBvcHRpb25f
c3RyaW5nID09ICctdicgb3Igb3B0aW9uX3N0cmluZyA9PSAnLS12ZXJib3NlJyBvciBvcHRpb25f
c3RyaW5nID09ICctLXZlcmJvc2l0eT12ZXJib3NlJyBvciBvcHRpb25fc3RyaW5nID09ICctLXZl
cmJvc2l0eT0yJzoKKyAgICAgICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSBDb21tb25PcHRp
b25zLlZFUkJPU0lUWV9WRVJCT1NFCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIGlmIG9wdGlvbl9zdHJpbmcgPT0gJy0tZGVidWcnIG9yIG9wdGlvbl9zdHJpbmcgPT0gJy0t
dmVyYm9zaXR5PWRlYnVnJyBvciBvcHRpb25fc3RyaW5nID09ICctLXZlcmJvc2l0eT0zJzoKKyAg
ICAgICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSBDb21tb25PcHRpb25zLlZFUkJPU0lUWV9E
RUJVRworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjb21tb24uZXJyb3Io
IlVua25vd24gY29tbWFuZC1saW5lIG9wdGlvbiAlcyEiICUgb3B0aW9uX3N0cmluZykKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvcHJvamVjdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvcHJvamVjdC5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmY4ZGM0Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9wcm9qZWN0LnB5CkBAIC0wLDAg
KzEsMzAxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5wcm9qZWN0LmNvbW1vbiBpbXBvcnQgKgorCisKK2NsYXNzIFByb2plY3RG
aWxlUmVmZXJlbmNlKG9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3MgaG9sZGluZyBhIHByb2pl
Y3Qtc3BlY2lmaWMgcmVmZXJlbmNlIHRvIGEgQ29tbW9uRmlsZS4gVGhpcyBhbGxvd3MgcHJvamVj
dC1zcGVjaWZpYyAiZW1iZWxsaXNobWVudHMiIHN1Y2ggYXMgY29tbWVudHMuCisgICAgRXZlbiB3
aXRoaW4gYSBzaW5nbGUgcHJvamVjdCwgbXVsdGlwbGUgcmVmZXJlbmNlcyBtYXkgZXhpc3QgdG8g
dGhlIHNhbWUgZmlsZSAoZS5nLiwgaW4gbWFrZSBmaWxlcyB1bmRlciBkaWZmZXJlbnQgY29uZGl0
aW9ucykuCisgICAgIiIiCisgICAgSURfQ09VTlRFUiA9IDAKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaWxlPU5vbmUpOgorICAgICAgICBhc3NlcnQgbm90IGZpbGUgb3IgaXNpbnN0YW5jZShm
aWxlLCBDb21tb25GaWxlKQorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisgICAgICAgIFByb2pl
Y3RGaWxlUmVmZXJlbmNlLklEX0NPVU5URVIgKz0gMQorICAgICAgICBzZWxmLl9pZCA9IFByb2pl
Y3REaXJlY3RvcnlSZWZlcmVuY2UuSURfQ09VTlRFUgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYp
OgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKworICAgIGRlZiBpc192YWxpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZSBhbmQgc2VsZi5maWxlLmlzX3ZhbGlkKCkKKwor
ICAgIGRlZiBfc2V0X2ZpbGUoc2VsZiwgZmlsZSk6CisgICAgICAgIGFzc2VydCBmaWxlCisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUsIENvbW1vbkZpbGUpCisgICAgICAgIGFzc2VydCBu
b3Qgc2VsZi5maWxlCisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKworCitjbGFzcyBQcm9qZWN0
RmlsZVJlZmVyZW5jZUNvbnRhaW5lcihvYmplY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRh
aW5pbmcgUHJvamVjdEZpbGVSZWZlcmVuY2Ugb2JqZWN0cy4KKyAgICAiIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZmlsZV9yZWZlcmVuY2VzID0ge30gICMgbWFwIHsg
Q29tbW9uRmlsZSAtPiBQcm9qZWN0RmlsZVJlZmVyZW5jZSB9CisKKyAgICBkZWYgX2FkZF9maWxl
X3JlZmVyZW5jZShzZWxmLCBmaWxlX3JlZmVyZW5jZSk6CisgICAgICAgIGFzc2VydCBmaWxlX3Jl
ZmVyZW5jZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlX3JlZmVyZW5jZSwgUHJvamVj
dEZpbGVSZWZlcmVuY2UpCisgICAgICAgIGFzc2VydCBmaWxlX3JlZmVyZW5jZS5maWxlCisgICAg
ICAgIGFzc2VydCBmaWxlX3JlZmVyZW5jZS5maWxlIG5vdCBpbiBzZWxmLmZpbGVfcmVmZXJlbmNl
cworICAgICAgICBzZWxmLmZpbGVfcmVmZXJlbmNlc1tmaWxlX3JlZmVyZW5jZS5maWxlXSA9IGZp
bGVfcmVmZXJlbmNlCisKKyAgICBkZWYgX3JlbW92ZV9maWxlX3JlZmVyZW5jZShzZWxmLCBmaWxl
X3JlZmVyZW5jZSk6CisgICAgICAgIGFzc2VydCBmaWxlX3JlZmVyZW5jZQorICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShmaWxlX3JlZmVyZW5jZSwgUHJvamVjdEZpbGVSZWZlcmVuY2UpCisgICAg
ICAgIGFzc2VydCBmaWxlX3JlZmVyZW5jZS5maWxlIGluIHNlbGYuZmlsZV9yZWZlcmVuY2VzCisg
ICAgICAgIGRlbCBzZWxmLmZpbGVfcmVmZXJlbmNlc1tmaWxlX3JlZmVyZW5jZS5maWxlXQorCisg
ICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlz
X2VtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuZmlsZV9yZWZlcmVuY2VzCisK
KyAgICBkZWYgZmlsZV9yZWZlcmVuY2VzX2NvdW50KHNlbGYpOgorICAgICAgICByZXR1cm4gbGVu
KHNlbGYuZmlsZV9yZWZlcmVuY2VzKQorCisgICAgZGVmIGNvbnRhaW5zX3JlZmVyZW5jZV90b19m
aWxlKHNlbGYsIGZpbGUpOgorICAgICAgICByZXR1cm4gZmlsZSBpbiBzZWxmLmZpbGVfcmVmZXJl
bmNlcworCisKK2NsYXNzIFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2Uob2JqZWN0KToKKyAgICAi
IiIKKyAgICBDbGFzcyBob2xkaW5nIGEgcHJvamVjdC1zcGVjaWZpYyByZWZlcmVuY2UgdG8gYSBD
b21tb25EaXJlY3RvcnkuIFRoaXMgYWxsb3dzIHByb2plY3Qtc3BlY2lmaWMgImVtYmVsbGlzaG1l
bnRzIiBzdWNoIGFzIGNvbW1lbnRzLgorICAgICIiIgorICAgIElEX0NPVU5URVIgPSAwCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5PU5vbmUpOgorICAgICAgICBhc3NlcnQgbm90
IGRpcmVjdG9yeSBvciBpc2luc3RhbmNlKGRpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAg
ICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorICAgICAgICBQcm9qZWN0RGlyZWN0b3J5
UmVmZXJlbmNlLklEX0NPVU5URVIgKz0gMQorICAgICAgICBzZWxmLl9pZCA9IFByb2plY3REaXJl
Y3RvcnlSZWZlcmVuY2UuSURfQ09VTlRFUgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuZGlyZWN0b3J5IGFuZCBzZWxmLmRpcmVjdG9yeS5pc192YWxpZCgp
CisKKyAgICBkZWYgX3NldF9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgYXNz
ZXJ0IG5vdCBkaXJlY3Rvcnkgb3IgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9y
eSkKKyAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKworCitjbGFzcyBQcm9qZWN0
RGlyZWN0b3J5UmVmZXJlbmNlQ29udGFpbmVyKG9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3Mg
Y29udGFpbmluZyBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlIG9iamVjdHMuCisgICAgIiIiCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRpcmVjdG9yeV9yZWZlcmVuY2Vz
ID0ge30gICMgbWFwIHsgQ29tbW9uRGlyZWN0b3J5IC0+IFByb2plY3REaXJlY3RvcnlSZWZlcmVu
Y2UgfQorCisgICAgZGVmIF9hZGRfZGlyZWN0b3J5X3JlZmVyZW5jZShzZWxmLCBkaXJlY3Rvcnlf
cmVmZXJlbmNlKToKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9yZWZlcmVuY2UKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5X3JlZmVyZW5jZSwgUHJvamVjdERpcmVjdG9yeVJl
ZmVyZW5jZSkKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9yZWZlcmVuY2UuZGlyZWN0b3J5Cisg
ICAgICAgIGFzc2VydCBkaXJlY3RvcnlfcmVmZXJlbmNlLmRpcmVjdG9yeSBub3QgaW4gc2VsZi5k
aXJlY3RvcnlfcmVmZXJlbmNlcworICAgICAgICBzZWxmLmRpcmVjdG9yeV9yZWZlcmVuY2VzW2Rp
cmVjdG9yeV9yZWZlcmVuY2UuZGlyZWN0b3J5XSA9IGRpcmVjdG9yeV9yZWZlcmVuY2UKKworICAg
IGRlZiBfcmVtb3ZlX2RpcmVjdG9yeV9yZWZlcmVuY2Uoc2VsZiwgZGlyZWN0b3J5X3JlZmVyZW5j
ZSk6CisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfcmVmZXJlbmNlCisgICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKGRpcmVjdG9yeV9yZWZlcmVuY2UsIFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2Up
CisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfcmVmZXJlbmNlLmRpcmVjdG9yeQorICAgICAgICBh
c3NlcnQgZGlyZWN0b3J5X3JlZmVyZW5jZS5kaXJlY3RvcnkgaW4gc2VsZi5kaXJlY3RvcnlfcmVm
ZXJlbmNlcworICAgICAgICBkZWwgc2VsZi5kaXJlY3RvcnlfcmVmZXJlbmNlc1tkaXJlY3Rvcnlf
cmVmZXJlbmNlLmRpcmVjdG9yeV0KKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIG5v
dCBzZWxmLmRpcmVjdG9yeV9yZWZlcmVuY2VzCisKKyAgICBkZWYgZGlyZWN0b3J5X3JlZmVyZW5j
ZXNfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5kaXJlY3RvcnlfcmVmZXJl
bmNlcykKKworICAgIGRlZiBjb250YWluc19yZWZlcmVuY2VfdG9fZGlyZWN0b3J5KHNlbGYsIGRp
cmVjdG9yeSk6CisgICAgICAgIHJldHVybiBkaXJlY3RvcnkgaW4gc2VsZi5kaXJlY3RvcnlfcmVm
ZXJlbmNlcworCisKK2NsYXNzIFByb2plY3RSZWFkZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBC
YXNlIGNsYXNzIGZvciBhIHByb2plY3QgZmlsZSBzZXJpYWxpemVyIChyZWFkZXIpLiBEb2VzIGJh
c2ljIHNldHVwIGJlZm9yZSBjYWxsaW5nIHBhcnNlX3Byb2plY3RfZmlsZSgpLgorCisgICAgRGVy
aXZlZCBjbGFzc2VzIE1VU1QgZGVmaW5lOgorICAgIC0pIGEgZnVuY3Rpb24gJ3BhcnNlX3Byb2pl
Y3RfZmlsZShzZWxmKScgdGhhdCByZWFkcyBpbiB0aGUgZmlsZSBhbmQgcG9wdWxhdGVzIHNlbGYu
cHJvamVjdAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBmaWxlc3lz
dGVtPU5vbmUpOgorICAgICAgICBhc3NlcnQgcHJvamVjdAorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShwcm9qZWN0LCBQcm9qZWN0KQorICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0Cisg
ICAgICAgIHNlbGYuY29tbW9uID0gcHJvamVjdC5jb21tb24KKyAgICAgICAgc2VsZi5maWxlc3lz
dGVtID0gZmlsZXN5c3RlbSBvciBwcm9qZWN0LmNvbW1vbi5maWxlc3lzdGVtCisgICAgICAgIHNl
bGYuZmlsZSA9IE5vbmUKKworICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2cpOgorICAgICAgICAjIFRP
RE86IGFkZCBJRCBvZiBwcm9qZWN0IHRvIHNob3cgd2hpY2ggcHJvamVjdCB0aGUgbWVzc2FnZSBp
cyBmb3IKKyAgICAgICAgc2VsZi5jb21tb24uZGVidWcobXNnKQorCisgICAgZGVmIGluZm8oc2Vs
ZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2YgcHJvamVjdCB0byBzaG93IHdoaWNo
IHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAgIHNlbGYuY29tbW9uLmluZm8obXNn
KQorCisgICAgZGVmIHdhcm5pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQg
b2YgcHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAg
ICAgIHNlbGYuY29tbW9uLndhcm5pbmcobXNnKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6
CisgICAgICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0
IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi5lcnJvcihtc2cpCisKKyAg
ICBkZWYgdmVyaWZ5KHNlbGYsIGV4cHIsIG1zZyk6CisgICAgICAgICMgVE9ETzogYWRkIElEIG9m
IHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAg
ICBzZWxmLmNvbW1vbi52ZXJpZnkoZXhwciwgbXNnKQorCisgICAgZGVmIHJlYWRfcHJvamVjdF9m
aWxlKHNlbGYsIHByb2plY3RfZmlsZV9wYXRoKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcigic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIpCisKKyAgICBkZWYgcmVhZChzZWxm
LCBwcm9qZWN0X2ZpbGVfcGF0aD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlYWQgYSBw
cm9qZWN0IGZpbGUgb3IgbWFrZWZpbGUgZnJvbSBkaXNjIGFuZCBwYXJzZSBpdC4KKyAgICAgICAg
cHJvamVjdF9maWxlX3BhdGggbXVzdCBjb250YWluIHRoZSBwcm9qZWN0IGZpbGUgaXRzZWxmLCBu
b3QganVzdCBhIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnBy
b2plY3QuZmlsZQorICAgICAgICBhc3NlcnQgc2VsZi5wcm9qZWN0LmZpbGUubmFtZQorICAgICAg
ICBpZiBwcm9qZWN0X2ZpbGVfcGF0aDoKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5KHNlbGYuZmls
ZXN5c3RlbS5pc2ZpbGUocHJvamVjdF9maWxlX3BhdGgpLCAiU3BlY2lmaWVkIHByb2plY3QgZmls
ZSBwYXRoICclcycgbm90IGZvdW5kIG9yIG5vdCBhIGZpbGUhIiAlIHByb2plY3RfZmlsZV9wYXRo
KQorICAgICAgICAgICAgcHJvamVjdF9maWxlX3BhdGggPSBzZWxmLmNvbW1vbi5maWxlc3lzdGVt
LmFic3BhdGgoc2VsZi5jb21tb24uZmlsZXN5c3RlbS5leHBhbmR1c2VyKHByb2plY3RfZmlsZV9w
YXRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2plY3RfZmlsZV9wYXRoID0gc2Vs
Zi5jb21tb24uZmlsZV9hYnNwYXRoKHNlbGYucHJvamVjdC5maWxlLCBzZWxmLmNvbW1vbi5maWxl
c3lzdGVtLnNlcCwge3NlbGYuY29tbW9uLnNjbV9kaXJlY3Rvcnk6IHNlbGYuY29tbW9uLnNjbV9k
aXJlY3RvcnkuYWJzcGF0aH0pCisgICAgICAgIHNlbGYucmVhZF9wcm9qZWN0X2ZpbGUocHJvamVj
dF9maWxlX3BhdGgpCisKKworY2xhc3MgUHJvamVjdFdyaXRlcihvYmplY3QpOgorICAgICIiIgor
ICAgIEJhc2UgY2xhc3MgZm9yIGEgcHJvamVjdCBmaWxlIHNlcmlhbGl6ZXIgKHdyaXRlcikuIERv
ZXMgYmFzaWMgc2V0dXAgYmVmb3JlIGNhbGxpbmcgd3JpdGVfcHJvamVjdF9maWxlKCkuCisKKyAg
ICBEZXJpdmVkIGNsYXNzZXMgTVVTVCBkZWZpbmU6CisgICAgLSkgYSBmdW5jdGlvbiAnd3JpdGVf
cHJvamVjdF9maWxlKHNlbGYsIHByb2plY3QsIGZpbGVfcGF0aCknIHRoYXQgd3JpdGVzIHRoZSBw
cm9qZWN0IGludG8gdGhlIHBhc3NlZC1pbiBmaWxlCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHByb2plY3QsIGZpbGVzeXN0ZW09Tm9uZSk6CisgICAgICAgIGFzc2VydCBwcm9qZWN0
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHByb2plY3QsIFByb2plY3QpCisgICAgICAgIHNl
bGYuY29tbW9uID0gcHJvamVjdC5jb21tb24KKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gcHJvamVj
dAorICAgICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtIG9yIHByb2plY3QuY29tbW9u
LmZpbGVzeXN0ZW0KKworICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2cpOgorICAgICAgICAjIFRPRE86
IGFkZCBJRCBvZiBwcm9qZWN0IHRvIHNob3cgd2hpY2ggcHJvamVjdCB0aGUgbWVzc2FnZSBpcyBm
b3IKKyAgICAgICAgc2VsZi5jb21tb24uZGVidWcobXNnKQorCisgICAgZGVmIGluZm8oc2VsZiwg
bXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2YgcHJvamVjdCB0byBzaG93IHdoaWNoIHBy
b2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAgIHNlbGYuY29tbW9uLmluZm8obXNnKQor
CisgICAgZGVmIHdhcm5pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2Yg
cHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAg
IHNlbGYuY29tbW9uLndhcm5pbmcobXNnKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6Cisg
ICAgICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRo
ZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi5lcnJvcihtc2cpCisKKyAgICBk
ZWYgdmVyaWZ5KHNlbGYsIGV4cHIsIG1zZyk6CisgICAgICAgICMgVE9ETzogYWRkIElEIG9mIHBy
b2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBz
ZWxmLmNvbW1vbi52ZXJpZnkoZXhwciwgbXNnKQorCisgICAgZGVmIHdyaXRlX3Byb2plY3RfZmls
ZShzZWxmLCBwcm9qZWN0X2ZpbGVfcGF0aCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IoInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiKQorCisgICAgZGVmIHdyaXRlKHNlbGYs
IHByb2plY3RfZmlsZV9wYXRoPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGUgYSBw
cm9qZWN0IGZpbGUgb3IgbWFrZWZpbGUgdG8gZGlzYy4KKyAgICAgICAgIiIiCisgICAgICAgIGFz
c2VydCBzZWxmLnByb2plY3QuZmlsZQorICAgICAgICBhc3NlcnQgc2VsZi5wcm9qZWN0LmZpbGUu
bmFtZQorICAgICAgICBpZiBub3QgcHJvamVjdF9maWxlX3BhdGg6CisgICAgICAgICAgICAjIE5v
IG5ldyBwYXRoIGdpdmVuOiB3cml0ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLgorICAgICAg
ICAgICAgcHJvamVjdF9maWxlX3BhdGggPSBzZWxmLmNvbW1vbi5maWxlX2Fic3BhdGgoc2VsZi5w
cm9qZWN0LmZpbGUsIHNlbGYuY29tbW9uLmZpbGVzeXN0ZW0uc2VwLCB7c2VsZi5jb21tb24uc2Nt
X2RpcmVjdG9yeTogc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeS5hYnNwYXRofSkKKyAgICAgICAg
ZWxpZiBzZWxmLmZpbGVzeXN0ZW0uaXNkaXIocHJvamVjdF9maWxlX3BhdGgpOgorICAgICAgICAg
ICAgIyBHaXZlbiBwYXRoIGlzIGp1c3QgYSBkaXJlY3Rvcnk6IGFwcGVuZCBvcmlnaW5hbCBmaWxl
IG5hbWUuCisgICAgICAgICAgICBwcm9qZWN0X2ZpbGVfcGF0aCA9IHNlbGYuZmlsZXN5c3RlbS5q
b2luKHNlbGYuZmlsZXN5c3RlbS5hYnNwYXRoKHByb2plY3RfZmlsZV9wYXRoKSwgc2VsZi5wcm9q
ZWN0LmZpbGUubmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2plY3RfZmlsZV9w
YXRoID0gc2VsZi5jb21tb24uZmlsZXN5c3RlbS5hYnNwYXRoKHNlbGYuY29tbW9uLmZpbGVzeXN0
ZW0uZXhwYW5kdXNlcihwcm9qZWN0X2ZpbGVfcGF0aCkpCisgICAgICAgIHNlbGYud3JpdGVfcHJv
amVjdF9maWxlKHByb2plY3RfZmlsZV9wYXRoKQorCisKK2NsYXNzIFByb2plY3Qob2JqZWN0KToK
KyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBwcm9qZWN0IGNsYXNzZXMuCisgICAgQXMgYmFz
ZSBmdW5jdGlvbmFsaXR5IGl0IHN0b3JlcyByZWZlcmVuY2VzIHRvIGFsbCBmaWxlcyBhbmQgZGly
ZWN0b3JpZXMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBwcm9qZWN0IGZpbGUKKyAgICAoZGlyZWN0
bHksIG5vdCBhcyBQcm9qZWN0RmlsZVJlZmVyZW5jZS9Qcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNl
KS4KKyAgICAiIiIKKyAgICBJRF9DT1VOVEVSID0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGNvbW1vbiwgZmlsZSwgc3BlY2lhbF9kaXJlY3Rvcmllcz1Ob25lLCBwcm9qZWN0X25hbWU9Tm9u
ZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbW1vbiwgQ29tbW9uSW5mbykKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgc2VsZi5jb21t
b24gPSBjb21tb24KKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLnZhcmlh
YmxlX3RvX2RpcmVjdG9yeSA9IHNwZWNpYWxfZGlyZWN0b3JpZXMgb3Ige30KKyAgICAgICAgc2Vs
Zi5kaXJlY3RvcnlfdG9fdmFyaWFibGUgPSBkaWN0KG1hcChsYW1iZGEgKGssIHYpOiAodiwgayks
IHNlbGYudmFyaWFibGVfdG9fZGlyZWN0b3J5Lml0ZW1zKCkpKQorICAgICAgICBzZWxmLm5hbWUg
PSBwcm9qZWN0X25hbWUgb3IgY29tbW9uLnByb2plY3RfbmFtZQorICAgICAgICBQcm9qZWN0LklE
X0NPVU5URVIgKz0gMQorICAgICAgICBzZWxmLl9pZCA9IFByb2plY3QuSURfQ09VTlRFUgorCisg
ICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKwor
ICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2cpOgorICAgICAgICAjIFRPRE86IGFkZCBJRCBvZiBwcm9q
ZWN0IHRvIHNob3cgd2hpY2ggcHJvamVjdCB0aGUgbWVzc2FnZSBpcyBmb3IKKyAgICAgICAgc2Vs
Zi5jb21tb24uZGVidWcobXNnKQorCisgICAgZGVmIGluZm8oc2VsZiwgbXNnKToKKyAgICAgICAg
IyBUT0RPOiBhZGQgSUQgb2YgcHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3Nh
Z2UgaXMgZm9yCisgICAgICAgIHNlbGYuY29tbW9uLmluZm8obXNnKQorCisgICAgZGVmIHdhcm5p
bmcoc2VsZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2YgcHJvamVjdCB0byBzaG93
IHdoaWNoIHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAgIHNlbGYuY29tbW9uLndh
cm5pbmcobXNnKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6CisgICAgICAgICMgVE9ETzog
YWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZv
cgorICAgICAgICBzZWxmLmNvbW1vbi5lcnJvcihtc2cpCisKKyAgICBkZWYgdmVyaWZ5KHNlbGYs
IGV4cHIsIG1zZyk6CisgICAgICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3
aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi52ZXJp
ZnkoZXhwciwgbXNnKQorCisgICAgIyAtLS0gcHJvamVjdCBtYW5pcHVsYXRpb24gLS0tCisKKyAg
ICBkZWYgYWRkX2ZpbGUoc2VsZiwgZmlsZSwgb3B0aW9ucyk6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IoInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9wcm9qZWN0X3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9wcm9qZWN0X3VuaXR0ZXN0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhNmI0MTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3Byb2plY3Rf
dW5pdHRlc3QucHkKQEAgLTAsMCArMSw4MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2pl
Y3QuY29tbW9uIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcm9qZWN0LnByb2plY3Qg
aW1wb3J0ICoKKworCitjbGFzcyBQcm9qZWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1vbiA9IENvbW1vbkluZm8oIldlYkNv
cmUiKQorCisgICAgZGVmIHRlc3RfZmlsZV9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIG5hbWUg
PSAndGVzdC5jcHAnCisgICAgICAgIGZpbGUgPSBzZWxmLmNvbW1vbi5jcmVhdGVfZmlsZShzZWxm
LmNvbW1vbi5zY21fZGlyZWN0b3J5LCBuYW1lKQorICAgICAgICBmaWxlX3JlZmVyZW5jZSA9IFBy
b2plY3RGaWxlUmVmZXJlbmNlKGZpbGUpCisgICAgICAgIGZpbGVfcmVmZXJlbmNlX2NvbnRhaW5l
ciA9IFByb2plY3RGaWxlUmVmZXJlbmNlQ29udGFpbmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmaWxlX3JlZmVyZW5jZV9jb250YWluZXIuZmlsZV9yZWZlcmVuY2VzX2NvdW50KCksIDAp
CisgICAgICAgIGZpbGVfcmVmZXJlbmNlX2NvbnRhaW5lci5fYWRkX2ZpbGVfcmVmZXJlbmNlKGZp
bGVfcmVmZXJlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfcmVmZXJlbmNlX2Nv
bnRhaW5lci5maWxlX3JlZmVyZW5jZXNfY291bnQoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGZpbGVfcmVmZXJlbmNlX2NvbnRhaW5lci5jb250YWluc19yZWZlcmVuY2VfdG9fZmlsZShm
aWxlKSkKKyAgICAgICAgZmlsZV9yZWZlcmVuY2VfY29udGFpbmVyLl9yZW1vdmVfZmlsZV9yZWZl
cmVuY2UoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9yZWZl
cmVuY2VfY29udGFpbmVyLmZpbGVfcmVmZXJlbmNlc19jb3VudCgpLCAwKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGZpbGVfcmVmZXJlbmNlX2NvbnRhaW5lci5jb250YWluc19yZWZlcmVuY2Vf
dG9fZmlsZShmaWxlKSkKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9yZWZlcmVuY2Uoc2VsZik6
CisgICAgICAgIG5hbWUgPSAndGVzdCcKKyAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5jb21tb24u
Y3JlYXRlX3N1YmRpcmVjdG9yeShzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5LCBuYW1lKQorICAg
ICAgICBkaXJlY3RvcnlfcmVmZXJlbmNlID0gUHJvamVjdERpcmVjdG9yeVJlZmVyZW5jZShkaXJl
Y3RvcnkpCisgICAgICAgIGRpcmVjdG9yeV9yZWZlcmVuY2VfY29udGFpbmVyID0gUHJvamVjdERp
cmVjdG9yeVJlZmVyZW5jZUNvbnRhaW5lcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGly
ZWN0b3J5X3JlZmVyZW5jZV9jb250YWluZXIuZGlyZWN0b3J5X3JlZmVyZW5jZXNfY291bnQoKSwg
MCkKKyAgICAgICAgZGlyZWN0b3J5X3JlZmVyZW5jZV9jb250YWluZXIuX2FkZF9kaXJlY3Rvcnlf
cmVmZXJlbmNlKGRpcmVjdG9yeV9yZWZlcmVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZGlyZWN0b3J5X3JlZmVyZW5jZV9jb250YWluZXIuZGlyZWN0b3J5X3JlZmVyZW5jZXNfY291bnQo
KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVjdG9yeV9yZWZlcmVuY2VfY29udGFp
bmVyLmNvbnRhaW5zX3JlZmVyZW5jZV90b19kaXJlY3RvcnkoZGlyZWN0b3J5KSkKKyAgICAgICAg
ZGlyZWN0b3J5X3JlZmVyZW5jZV9jb250YWluZXIuX3JlbW92ZV9kaXJlY3RvcnlfcmVmZXJlbmNl
KGRpcmVjdG9yeV9yZWZlcmVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZWN0b3J5
X3JlZmVyZW5jZV9jb250YWluZXIuZGlyZWN0b3J5X3JlZmVyZW5jZXNfY291bnQoKSwgMCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShkaXJlY3RvcnlfcmVmZXJlbmNlX2NvbnRhaW5lci5jb250
YWluc19yZWZlcmVuY2VfdG9fZGlyZWN0b3J5KGRpcmVjdG9yeSkpCisKKyAgICBkZWYgdGVzdF9Q
cm9qZWN0KHNlbGYpOgorICAgICAgICBwcm9qZWN0X25hbWUgPSAnUFJPSkVDVCcKKyAgICAgICAg
cHJvamVjdF9maWxlX25hbWUgPSAncHJvamVjdC5wcm9qJworICAgICAgICB2YXJpYWJsZV90b19k
aXJlY3RvcnkgPSB7JyRYJzogc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeX0KKyAgICAgICAgcHJv
amVjdF9maWxlID0gc2VsZi5jb21tb24uY3JlYXRlX2ZpbGUoc2VsZi5jb21tb24uc2NtX2RpcmVj
dG9yeSwgcHJvamVjdF9maWxlX25hbWUpCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0KHNlbGYu
Y29tbW9uLCBwcm9qZWN0X2ZpbGUsIHZhcmlhYmxlX3RvX2RpcmVjdG9yeSwgcHJvamVjdF9uYW1l
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2plY3QubmFtZSwgcHJvamVjdF9uYW1lKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvamVjdC5maWxlIGlzIHByb2plY3RfZmlsZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2plY3QuZmlsZS5kaXJlY3RvcnkgaXMgc2VsZi5jb21t
b24uc2NtX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCckWCcgaW4gcHJvamVj
dC52YXJpYWJsZV90b19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNv
bW1vbi5zY21fZGlyZWN0b3J5IGluIHByb2plY3QuZGlyZWN0b3J5X3RvX3ZhcmlhYmxlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tbW9uLmRpcmVjdG9yeV9hYnNwYXRoKHByb2pl
Y3QuZmlsZS5kaXJlY3RvcnksICcvJywgcHJvamVjdC5kaXJlY3RvcnlfdG9fdmFyaWFibGUpLCAn
JFgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tbW9uLmZpbGVfYWJzcGF0aChw
cm9qZWN0X2ZpbGUsICcvJywgcHJvamVjdC5kaXJlY3RvcnlfdG9fdmFyaWFibGUpLCAnJFgvJyAr
IHByb2plY3RfZmlsZV9uYW1lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
dW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9wcm9qZWN0L3F0cHJvai5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2pl
Y3QvcXRwcm9qLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZDAwZjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0
L3F0cHJvai5weQpAQCAtMCwwICsxLDU5MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHJlCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3Qu
bWFrZWJhc2UgaW1wb3J0ICoKKworRVhURU5TSU9OX1RPX1ZBUklBQkxFID0geworICAgICcuY3Bw
JyAgIDogJ1NPVVJDRVMnLAorICAgICcuaCcgICAgIDogJ0hFQURFUlMnLAorICAgICcubW0nICAg
IDogJ09CSkVDVElWRV9TT1VSQ0VTJywKK30KKworCisjID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFF0RmlsZVJlZmVyZW5jZShQcm9qZWN0Rmls
ZVJlZmVyZW5jZSk6CisgICAgcGFzcworICAgIAorCitjbGFzcyBRdERpcmVjdG9yeVJlZmVyZW5j
ZShQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlKToKKyAgICBwYXNzCisKKworY2xhc3MgUXRDb21t
ZW50KENvbW1lbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRlbWVu
dF9saXN0LCBjb21tZW50KToKKyAgICAgICAgQ29tbWVudC5fX2luaXRfXyhzZWxmLCBjb250YWlu
aW5nX3N0YXRlbWVudF9saXN0LCBjb21tZW50KQorICAgICAgICBzZWxmLmNvbW1lbnQgPSBjb21t
ZW50CisKKworY2xhc3MgUXRJbmNsdWRlKFN0YXRlbWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QsIGluY2x1ZGUpOgorICAgICAgICBTdGF0ZW1l
bnQuX19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCkKKyAgICAgICAgc2Vs
Zi5pbmNsdWRlID0gaW5jbHVkZQorCisKK2NsYXNzIFF0RmlsZVJlZmVyZW5jZXNBc3NpZ25tZW50
KEZpbGVSZWZlcmVuY2VzQXNzaWdubWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRh
aW5pbmdfc3RhdGVtZW50X2xpc3QsIHZhcmlhYmxlLCBvcGVyYXRvcik6CisgICAgICAgIEZpbGVS
ZWZlcmVuY2VzQXNzaWdubWVudC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRlbWVudF9s
aXN0LCB2YXJpYWJsZSwgb3BlcmF0b3IpCisKKyAgICBkZWYgbWVyZ2VfYXNzaWdubWVudChzZWxm
LCBvdGhlcl9hc3NpZ25tZW50KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3RoZXJfYXNz
aWdubWVudCwgUXRGaWxlUmVmZXJlbmNlc0Fzc2lnbm1lbnQpCisgICAgICAgIHNlbGYuZmlsZV9y
ZWZlcmVuY2VzIHw9IG90aGVyX2Fzc2lnbm1lbnQuZmlsZV9yZWZlcmVuY2VzCisKKworY2xhc3Mg
UXREaXJlY3RvcnlSZWZlcmVuY2VzQXNzaWdubWVudChEaXJlY3RvcnlSZWZlcmVuY2VzQXNzaWdu
bWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3Qs
IHZhcmlhYmxlLCBvcGVyYXRvcik6CisgICAgICAgIERpcmVjdG9yeVJlZmVyZW5jZXNBc3NpZ25t
ZW50Ll9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QsIHZhcmlhYmxlLCBv
cGVyYXRvcikKKworICAgIGRlZiBtZXJnZV9hc3NpZ25tZW50KHNlbGYsIG90aGVyX2Fzc2lnbm1l
bnQpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdGhlcl9hc3NpZ25tZW50LCBRdERpcmVj
dG9yeVJlZmVyZW5jZXNBc3NpZ25tZW50KQorICAgICAgICBzZWxmLmRpcmVjdG9yeV9yZWZlcmVu
Y2VzIHw9IG90aGVyX2Fzc2lnbm1lbnQuZGlyZWN0b3J5X3JlZmVyZW5jZXMKKworCitjbGFzcyBR
dEFyYml0cmFyeUFzc2lnbm1lbnQoQXJiaXRyYXJ5QXNzaWdubWVudCk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QsIHZhcmlhYmxlLCBvcGVyYXRvcik6
CisgICAgICAgIEFyYml0cmFyeUFzc2lnbm1lbnQuX19pbml0X18oc2VsZiwgY29udGFpbmluZ19z
dGF0ZW1lbnRfbGlzdCwgdmFyaWFibGUsIG9wZXJhdG9yKQorCisKK2NsYXNzIFF0Q29uZGl0aW9u
KENvbmRpdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50
X2xpc3QpOgorICAgICAgICBDb25kaXRpb24uX19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0
ZW1lbnRfbGlzdCkKKworCitjbGFzcyBRdEFyYml0cmFyeVRlc3RDb25kaXRpb25CcmFuY2goQXJi
aXRyYXJ5VGVzdENvbmRpdGlvbkJyYW5jaCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRh
aW5pbmdfY29uZGl0aW9uLCB0ZXN0KToKKyAgICAgICAgQXJiaXRyYXJ5VGVzdENvbmRpdGlvbkJy
YW5jaC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX2NvbmRpdGlvbiwgdGVzdCkKKworCitjbGFz
cyBRdERFRklORUNvbmRpdGlvbkJyYW5jaChERUZJTkVDb25kaXRpb25CcmFuY2gpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBjb250YWluaW5nX2NvbmRpdGlvbiwgdGVzdCwgZGVmaW5lLCBuZWdh
dGVkPU5vbmUpOgorICAgICAgICBERUZJTkVDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZiwg
Y29udGFpbmluZ19jb25kaXRpb24sIHRlc3QsIGRlZmluZSwgbmVnYXRlZCBvciBGYWxzZSkKKwor
CitjbGFzcyBRdEVsc2VDb25kaXRpb25CcmFuY2goRWxzZUNvbmRpdGlvbkJyYW5jaCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfY29uZGl0aW9uKToKKyAgICAgICAgRWxzZUNv
bmRpdGlvbkJyYW5jaC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX2NvbmRpdGlvbikKKworCitj
bGFzcyBRdE1ha2VGaWxlKE1ha2VGaWxlKToKKyAgICBwYXNzCisKKworIyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBRdFByb2plY3RSZWFkZXIo
UHJvamVjdFJlYWRlcik6CisgICAgIiIiCisgICAgUXQgcHJvamVjdCBmaWxlIHJlYWRlci4KKyAg
ICAiIiIKKyAgICBBU1NJR05NRU5UX01BVENIID0gcmUuY29tcGlsZSgnKFtBLVphLXpfLl0rKVxz
KihbLSsqXT89KVxzKicpCisgICAgSU5DTFVERV9NQVRDSCA9IHJlLmNvbXBpbGUoJ2luY2x1ZGVc
cypcKCcpCisgICAgREVGSU5FU19DT05ESVRJT05fTUFUQ0ggPSByZS5jb21waWxlKCchP2NvbnRh
aW5zXHMqXChERUZJTkVTLCAoW0EtWl9dKyk9MVwpJykKKyAgICBGVU5DVElPTl9DT05ESVRJT05f
TUFUQ0ggPSByZS5jb21waWxlKCchP1tBLVphLXpdW0EtWi1hLXowLTldKlxzKlwoW14pXSpcKScp
CisgICAgTkFNRV9DT05ESVRJT05fTUFUQ0ggPSByZS5jb21waWxlKCchP1sqQS1aYS16XVstXytB
LVphLXowLTldKlsqXT8nKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGZpbGVz
eXN0ZW09Tm9uZSk6CisgICAgICAgIFByb2plY3RSZWFkZXIuX19pbml0X18oc2VsZiwgcHJvamVj
dCwgZmlsZXN5c3RlbSkKKyAgICAgICAgc2VsZi5saW5lX251bWJlciA9IDAKKyAgICAgICAgc2Vs
Zi5hc3NpZ25tZW50X21hcF9zdGFjayA9IFtdICAjIHN0YWNrIChsaXN0KSBvZiBtYXBzIHsgdmFy
aWFibGUgbmFtZSAtPiBhc3NpZ25tZW50IH0sIHVzZWQgZm9yIGNvbWJpbmluZyBhc3NpZ25tZW50
cyBkdXJpbmcgcGFyc2luZworICAgICAgICBzZWxmLnZhcmlhYmxlX25hbWVfdG9fdmFsdWVfcGFy
c2luZ19tZXRob2QgPSB7CisgICAgICAgICAgICAnSEVBREVSUyc6ICAgICAgICAgICAgICAoUXRG
aWxlUmVmZXJlbmNlc0Fzc2lnbm1lbnQsIHNlbGYucGFyc2VfZmlsZV9yZWZlcmVuY2VzX2xpbmUp
LAorICAgICAgICAgICAgJ0lETF9CSU5ESU5HUyc6ICAgICAgICAgKFF0RmlsZVJlZmVyZW5jZXNB
c3NpZ25tZW50LCBzZWxmLnBhcnNlX2ZpbGVfcmVmZXJlbmNlc19saW5lKSwKKyAgICAgICAgICAg
ICdJTkNMVURFUEFUSCc6ICAgICAgICAgIChRdERpcmVjdG9yeVJlZmVyZW5jZXNBc3NpZ25tZW50
LCBzZWxmLnBhcnNlX2RpcmVjdG9yeV9yZWZlcmVuY2VzX2xpbmUpLAorICAgICAgICAgICAgJ09C
SkVDVElWRV9TT1VSQ0VTJzogICAgKFF0RmlsZVJlZmVyZW5jZXNBc3NpZ25tZW50LCBzZWxmLnBh
cnNlX2ZpbGVfcmVmZXJlbmNlc19saW5lKSwKKyAgICAgICAgICAgICdSRVNPVVJDRVMnOiAgICAg
ICAgICAgIChRdEZpbGVSZWZlcmVuY2VzQXNzaWdubWVudCwgc2VsZi5wYXJzZV9maWxlX3JlZmVy
ZW5jZXNfbGluZSksCisgICAgICAgICAgICAnU09VUkNFUyc6ICAgICAgICAgICAgICAoUXRGaWxl
UmVmZXJlbmNlc0Fzc2lnbm1lbnQsIHNlbGYucGFyc2VfZmlsZV9yZWZlcmVuY2VzX2xpbmUpLAor
ICAgICAgICAgICAgJ1NUWUxFU0hFRVRTX0VNQkVEJzogICAgKFF0RmlsZVJlZmVyZW5jZXNBc3Np
Z25tZW50LCBzZWxmLnBhcnNlX2ZpbGVfcmVmZXJlbmNlc19saW5lKSwKKyAgICAgICAgfQorCisg
ICAgZGVmIHB1cmdlX2Fzc2lnbm1lbnRfbWFwX3N0YWNrKHNlbGYpOgorICAgICAgICBmb3IgYXNz
aWdubWVudF9tYXAgaW4gc2VsZi5hc3NpZ25tZW50X21hcF9zdGFjazoKKyAgICAgICAgICAgIGFz
c2lnbm1lbnRfbWFwLmNsZWFyKCkKKworICAgIGRlZiBwdXJnZV9hc3NpZ25tZW50X21hcF9zdGFj
a19vZl92YXJpYWJsZShzZWxmLCB2YXJpYWJsZSk6CisgICAgICAgIGZvciBhc3NpZ25tZW50X21h
cCBpbiBzZWxmLmFzc2lnbm1lbnRfbWFwX3N0YWNrOgorICAgICAgICAgICAgYXNzaWdubWVudF9t
YXAucG9wKHZhcmlhYmxlLCBOb25lKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAg
ICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5s
aW5lID0gc2VsZi5pdGVyLm5leHQoKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0
aW9uOgorICAgICAgICAgICAgc2VsZi5saW5lID0gTm9uZQorCisgICAgZGVmIHBhcnNlX2ZpbGVf
cmVmZXJlbmNlKHNlbGYsIGFzc2lnbm1lbnQsIHBhdGgpOgorICAgICAgICAjYXNzZXJ0IG5vdCBw
YXRoLnN0YXJ0c3dpdGgoJyQnKSBvciBwYXRoLnNwbGl0KHNlbGYucHJvamVjdC5TRVAsIDEpWzBd
IGluIHNlbGYucHJvamVjdC52YXJpYWJsZV90b19kaXJlY3RvcnksICJVbmtub3duIFZhcmlhYmxl
ICVzISIgJSBwYXRoLnNwbGl0KHNlbGYucHJvamVjdC5TRVApWzBdCisgICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKGFzc2lnbm1lbnQsIFF0RmlsZVJlZmVyZW5jZXNBc3NpZ25tZW50KQorICAgICAg
ICBmaWxlID0gc2VsZi5jb21tb24uZW5zdXJlX2ZpbGVfcGF0aChzZWxmLnByb2plY3QucHdkX2Rp
cmVjdG9yeSwgcGF0aCwgc2VsZi5wcm9qZWN0LlNFUCwgc2VsZi5wcm9qZWN0LnZhcmlhYmxlX3Rv
X2RpcmVjdG9yeSkKKyAgICAgICAgaWYgYXNzaWdubWVudC5jb250YWluc19yZWZlcmVuY2VfdG9f
ZmlsZShmaWxlKToKKyAgICAgICAgICAgIHNlbGYud2FybmluZygiQXNzaWdubWVudCB0byB2YXJp
YWJsZSAlcyBhbHJlYWR5IGNvbnRhaW5zIHJlZmVyZW5jZSB0byBmaWxlICVzIC0gZGlzY2FyZGlu
ZyBleHRyYW5lb3VzIHJlZmVyZW5jZSBpbiBsaW5lICVkISIgJSAoYXNzaWdubWVudC52YXJpYWJs
ZSwgcGF0aCwgc2VsZi5saW5lX251bWJlcikpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZmlsZV9yZWZlcmVuY2UgPSBRdEZpbGVSZWZlcmVuY2UoZmlsZSkKKyAgICAgICAgYXNzaWdubWVu
dC5fYWRkX2ZpbGVfcmVmZXJlbmNlKGZpbGVfcmVmZXJlbmNlKQorICAgICAgICBzZWxmLnByb2pl
Y3QuX2FkZF9maWxlX3JlZmVyZW5jZShmaWxlX3JlZmVyZW5jZSkKKworICAgIGRlZiBwYXJzZV9k
aXJlY3RvcnlfcmVmZXJlbmNlKHNlbGYsIGFzc2lnbm1lbnQsIHBhdGgpOgorICAgICAgICAjYXNz
ZXJ0IG5vdCBwYXRoLnN0YXJ0c3dpdGgoJyQnKSBvciBwYXRoLnNwbGl0KHNlbGYucHJvamVjdC5T
RVAsIDEpWzBdIGluIHNlbGYucHJvamVjdC52YXJpYWJsZV90b19kaXJlY3RvcnksICJVbmtub3du
IFZhcmlhYmxlICVzISIgJSBwYXRoLnNwbGl0KHNlbGYucHJvamVjdC5TRVApWzBdCisgICAgICAg
IGFzc2VydCBpc2luc3RhbmNlKGFzc2lnbm1lbnQsIFF0RGlyZWN0b3J5UmVmZXJlbmNlc0Fzc2ln
bm1lbnQpCisgICAgICAgIGRpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3Rv
cnlfcGF0aChzZWxmLnByb2plY3QucHdkX2RpcmVjdG9yeSwgcGF0aCwgc2VsZi5wcm9qZWN0LlNF
UCwgc2VsZi5wcm9qZWN0LnZhcmlhYmxlX3RvX2RpcmVjdG9yeSkKKyAgICAgICAgaWYgYXNzaWdu
bWVudC5jb250YWluc19yZWZlcmVuY2VfdG9fZGlyZWN0b3J5KGRpcmVjdG9yeSk6CisgICAgICAg
ICAgICBzZWxmLndhcm5pbmcoIkFzc2lnbm1lbnQgdG8gdmFyaWFibGUgJXMgYWxyZWFkeSBjb250
YWlucyByZWZlcmVuY2UgdG8gZGlyZWN0b3J5ICVzIC0gZGlzY2FyZGluZyBleHRyYW5lb3VzIHJl
ZmVyZW5jZSBpbiBsaW5lICVkISIgJSAoYXNzaWdubWVudC52YXJpYWJsZSwgcGF0aCwgc2VsZi5s
aW5lX251bWJlcikpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGlyZWN0b3J5X3JlZmVy
ZW5jZSA9IFF0RGlyZWN0b3J5UmVmZXJlbmNlKGRpcmVjdG9yeSkKKyAgICAgICAgYXNzaWdubWVu
dC5fYWRkX2RpcmVjdG9yeV9yZWZlcmVuY2UoZGlyZWN0b3J5X3JlZmVyZW5jZSkKKyAgICAgICAg
c2VsZi5wcm9qZWN0Ll9hZGRfZGlyZWN0b3J5X3JlZmVyZW5jZShkaXJlY3RvcnlfcmVmZXJlbmNl
KQorCisgICAgZGVmIHBhcnNlX2ZpbGVfcmVmZXJlbmNlc19saW5lKHNlbGYsIGFzc2lnbm1lbnQs
IGxpbmUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhc3NpZ25tZW50LCBRdEZpbGVSZWZl
cmVuY2VzQXNzaWdubWVudCkKKyAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAg
Zm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2ZpbGVfcmVmZXJlbmNl
KGFzc2lnbm1lbnQsIHBhdGgpCisKKyAgICBkZWYgcGFyc2VfZGlyZWN0b3J5X3JlZmVyZW5jZXNf
bGluZShzZWxmLCBhc3NpZ25tZW50LCBsaW5lKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
YXNzaWdubWVudCwgUXREaXJlY3RvcnlSZWZlcmVuY2VzQXNzaWdubWVudCkKKyAgICAgICAgcGF0
aHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgICAg
ICBzZWxmLnBhcnNlX2RpcmVjdG9yeV9yZWZlcmVuY2UoYXNzaWdubWVudCwgcGF0aCkKKworICAg
IGRlZiBwYXJzZV9hcmJpdHJhcnlfdmFsdWVfbGluZShzZWxmLCBhc3NpZ25tZW50LCBsaW5lKToK
KyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXNzaWdubWVudCwgUXRBcmJpdHJhcnlBc3NpZ25t
ZW50KQorICAgICAgICBhc3NpZ25tZW50LmFwcGVuZF92YWx1ZShsaW5lKQorCisgICAgZGVmIHBh
cnNlX3ZhbHVlcyhzZWxmLCBhc3NpZ25tZW50LCBsaW5lX3BhcnNlX21ldGhvZCk6CisgICAgICAg
IGNvbnRpbnVlZCA9IFRydWUKKyAgICAgICAgd2hpbGUgY29udGludWVkIGFuZCBzZWxmLmxpbmU6
CisgICAgICAgICAgICAjIEVycm9yLWNvcnJlY3Rpb24gaW4gY2FzZSBhIHZhbHVlIGxpc3QgaW5z
aWRlIGEgYmxvY2sgaXMgdGVybWluYXRlZCBieSAnXCcgYmVmb3JlIHRoZSBjbG9zaW5nICd9Jwor
ICAgICAgICAgICAgaWYgc2VsZi5saW5lWzBdID09ICd9JzoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICAgICAgY29udGludWVkID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYubGlu
ZVstMV0gPT0gJ1xcJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZWQgPSBUcnVlCisgICAgICAg
ICAgICAgICAgc2VsZi5saW5lID0gc2VsZi5saW5lWzotMV0ucnN0cmlwKCkKKyAgICAgICAgICAg
IGlmIHNlbGYubGluZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmxpbmUuc3RhcnRzd2l0aCgn
IycpOgorICAgICAgICAgICAgICAgICAgICAjIENvbW1lbnQgYW1vbmdzdCB2YWx1ZXMuLi4gOlAK
KyAgICAgICAgICAgICAgICAgICAgIyBDb3VsZCBiZWxvbmcgdG8gdGhlIGZvbGxvd2luZyBmaWxl
LCBvciB0aGUgd2hvbGUgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgIyBXZSBhc3N1
bWUgdGhlIGxhdHRlciBmb3Igc2ltcGxpY2l0eSdzIHNha2UgKGFsc28sIHRoYXQncyB0aGUgY2Fz
ZSB0aGF0IGFjdHVhbGx5IG9jY3VycykuCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQu
YXBwZW5kX2NvbW1lbnQoc2VsZi5saW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIGxpbmVfcGFyc2VfbWV0aG9kKGFzc2lnbm1lbnQsIHNlbGYubGluZSkKKyAg
ICAgICAgICAgICAgICBzZWxmLmxpbmUgPSAnJworICAgICAgICAgICAgc2VsZi5yZWFkbGluZSgp
CisgICAgICAgICAgICBzZWxmLnZlcmlmeShzZWxmLmxpbmUgaXMgbm90IE5vbmUsICJVbmV4cGVj
dGVkIGVuZCBvZiBmaWxlIHdoaWxlIHJlYWRpbmcgdmFsdWVzIGZvciAlcyEiICUgYXNzaWdubWVu
dC52YXJpYWJsZSkKKworICAgIGRlZiBwYXJzZV9hc3NpZ25tZW50KHNlbGYsIHN0YXRlbWVudF9s
aXN0KToKKyAgICAgICAgbWF0Y2ggPSBRdFByb2plY3RSZWFkZXIuQVNTSUdOTUVOVF9NQVRDSC5t
YXRjaChzZWxmLmxpbmUpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgdmFyaWFibGUg
PSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgb3BlcmF0b3IgPSBtYXRjaC5ncm91cCgyKQor
ICAgICAgICAgICAgc2VsZi5saW5lID0gc2VsZi5saW5lW21hdGNoLmVuZCgwKTpdLmxzdHJpcCgp
CisgICAgICAgICAgICBpZiB2YXJpYWJsZSBpbiBzZWxmLnZhcmlhYmxlX25hbWVfdG9fdmFsdWVf
cGFyc2luZ19tZXRob2Q6CisgICAgICAgICAgICAgICAgaWYgb3BlcmF0b3IgPT0gJys9JyBhbmQg
dmFyaWFibGUgaW4gc2VsZi5hc3NpZ25tZW50X21hcF9zdGFja1stMV06CisgICAgICAgICAgICAg
ICAgICAgICMgV2UgYWxyZWFkeSBlbmNvdW50ZXJlZCB0aGUgdmFyaWFibGUgYmVmb3JlIGluIHRo
aXMgc3RyZXRjaCBvZiBjb2RlIC0ganVzdCBhZGQgaXQgdG8gdGhhdCBhc3NpZ25tZW50CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfdmFsdWVzKHNlbGYuYXNzaWdubWVudF9tYXBfc3Rh
Y2tbLTFdW3ZhcmlhYmxlXSwgc2VsZi52YXJpYWJsZV9uYW1lX3RvX3ZhbHVlX3BhcnNpbmdfbWV0
aG9kW3ZhcmlhYmxlXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUcnVlLCBOb25l
KQorICAgICAgICAgICAgICAgIGlmIG9wZXJhdG9yICE9ICcrPSc6CisgICAgICAgICAgICAgICAg
ICAgICMgT3BlcmF0b3Igb3RoZXIgdGhhbiAnKz0nIC0+IHB1cmdlIGFzc2lnbm1lbnRzIHVzaW5n
IHRoYXQgdmFyaWFibGUgaW4gdGhlIHN0YWNrIGFuZCBzdGFydCBvdmVyIHdpdGggYSBuZXcgYXNz
aWdubWVudAorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1cmdlX2Fzc2lnbm1lbnRfbWFwX3N0
YWNrX29mX3ZhcmlhYmxlKHZhcmlhYmxlKQorICAgICAgICAgICAgICAgICMgQ3JlYXRlIG5ldyBh
c3NpZ25tZW50IGFuZCBwdXQgaXQgb24gdGhlIHN0YWNrLgorICAgICAgICAgICAgICAgIGFzc2ln
bm1lbnRfY2xhc3MsIHBhcnNpbmdfbWV0aG9kID0gc2VsZi52YXJpYWJsZV9uYW1lX3RvX3ZhbHVl
X3BhcnNpbmdfbWV0aG9kW3ZhcmlhYmxlXQorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBh
c3NpZ25tZW50X2NsYXNzKHN0YXRlbWVudF9saXN0LCB2YXJpYWJsZSwgb3BlcmF0b3IpCisgICAg
ICAgICAgICAgICAgc2VsZi5wYXJzZV92YWx1ZXMoYXNzaWdubWVudCwgcGFyc2luZ19tZXRob2Qp
CisgICAgICAgICAgICAgICAgc2VsZi5hc3NpZ25tZW50X21hcF9zdGFja1stMV1bdmFyaWFibGVd
ID0gYXNzaWdubWVudAorICAgICAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgYXNzaWdubWVudCkK
KyAgICAgICAgICAgICMgQXNzaWdubWVudCB0byB1bmtub3duIHZhcmlhYmxlIC0+IHRoaXMgbWln
aHQgYmUgdXNlZCBpbiBjb21pbmcgYXNzaWdubWVudHMsIHNvIHB1cmdlIGV2ZXJ5dGhpbmchCisg
ICAgICAgICAgICAjIChpLmUuLCBkbyBub3QgY29tYmluZSBhc3NpZ25tZW50cyBhY3Jvc3MgdGhp
cyAiYmFycmllciIhKQorICAgICAgICAgICAgc2VsZi5wdXJnZV9hc3NpZ25tZW50X21hcF9zdGFj
aygpCisgICAgICAgICAgICBhc3NpZ25tZW50ID0gUXRBcmJpdHJhcnlBc3NpZ25tZW50KHN0YXRl
bWVudF9saXN0LCB2YXJpYWJsZSwgb3BlcmF0b3IpCisgICAgICAgICAgICBzZWxmLnBhcnNlX3Zh
bHVlcyhhc3NpZ25tZW50LCBzZWxmLnBhcnNlX2FyYml0cmFyeV92YWx1ZV9saW5lKQorICAgICAg
ICAgICAgcmV0dXJuIChUcnVlLCBhc3NpZ25tZW50KQorICAgICAgICByZXR1cm4gKEZhbHNlLCBO
b25lKQorCisgICAgZGVmIGNyZWF0ZV90ZXN0X2JyYW5jaChzZWxmLCBjb25kaXRpb24sIHRlc3Rf
c3RyaW5nKToKKyAgICAgICAgbWF0Y2ggPSBRdFByb2plY3RSZWFkZXIuREVGSU5FU19DT05ESVRJ
T05fTUFUQ0gubWF0Y2godGVzdF9zdHJpbmcpCisgICAgICAgIGlmIG1hdGNoIGFuZCBtYXRjaC5l
bmQoKSA9PSBsZW4odGVzdF9zdHJpbmcpOgorICAgICAgICAgICAgZGVmaW5lID0gc2VsZi5jb21t
b24uZW5zdXJlX0RFRklORShtYXRjaC5ncm91cCgxKSkKKyAgICAgICAgICAgIHJldHVybiBRdERF
RklORUNvbmRpdGlvbkJyYW5jaChjb25kaXRpb24sIHRlc3Rfc3RyaW5nLCBkZWZpbmUsIHRlc3Rf
c3RyaW5nWzBdID09ICchJykKKyAgICAgICAgcmV0dXJuIFF0QXJiaXRyYXJ5VGVzdENvbmRpdGlv
bkJyYW5jaChjb25kaXRpb24sIHRlc3Rfc3RyaW5nKQorCisgICAgZGVmIHBhcnNlX2NvbmRpdGlv
bl9icmFuY2goc2VsZiwgY29uZGl0aW9uX2JyYW5jaCk6CisgICAgICAgICMgZW1wdHkgc3RyaW5n
CisgICAgICAgIGlmIG5vdCBzZWxmLmxpbmU6CisgICAgICAgICAgICBzZWxmLmVycm9yKCJObyBz
dGF0ZW1lbnQgYWZ0ZXIgY29uZGl0aW9uIHRlc3QgaW4gbGluZSAlZCEiICUgc2VsZi5saW5lX251
bWJlcikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIGNvbW1lbnQKKyAgICAgICAgaWYg
c2VsZi5saW5lWzBdID09ICcjJzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoIkNvbW1lbnQgYWZ0
ZXIgY29uZGl0aW9uIHRlc3QgaW4gbGluZSAlZCAtIHN0YXRlbWVudCBleHBlY3RlZCEiICUgc2Vs
Zi5saW5lX251bWJlcikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIHN0YXRlbWVudCBi
bG9jaworICAgICAgICBpZiBzZWxmLmxpbmVbMF0gPT0gJ3snOgorICAgICAgICAgICAgc2VsZi5s
aW5lID0gc2VsZi5saW5lWzE6XS5sc3RyaXAoKQorICAgICAgICAgICAgc2VsZi5wYXJzZV9zdGF0
ZW1lbnRfbGlzdChjb25kaXRpb25fYnJhbmNoKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
ICMgaW5jbHVkZSBzdGF0ZW1lbnRzCisgICAgICAgIGlmIFF0UHJvamVjdFJlYWRlci5JTkNMVURF
X01BVENILm1hdGNoKHNlbGYubGluZSk6CisgICAgICAgICAgICBjb25kaXRpb25fYnJhbmNoLl9h
cHBlbmRfc3RhdGVtZW50KFF0SW5jbHVkZShjb25kaXRpb25fYnJhbmNoLCBzZWxmLmxpbmUpKQor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgYXNzaWdubWVudHMKKyAgICAgICAgcGFyc2Vk
LCBzdGF0ZW1lbnQgPSBzZWxmLnBhcnNlX2Fzc2lnbm1lbnQoY29uZGl0aW9uX2JyYW5jaCkKKyAg
ICAgICAgaWYgcGFyc2VkOgorICAgICAgICAgICAgaWYgc3RhdGVtZW50OgorICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbl9icmFuY2guX2FwcGVuZF9zdGF0ZW1lbnQoc3RhdGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICMgRHVubm8gd2hhdCBpdCBpcworICAgICAgICBzZWxmLmVy
cm9yKCJVbmtub3duIHN0YXRlbWVudCAnJXMnIGFmdGVyIGNvbmRpdGlvbiBpbiBsaW5lICVkISIg
JSAoc2VsZi5saW5lLCBzZWxmLmxpbmVfbnVtYmVyKSkKKworICAgIGRlZiBwYXJzZV9jb25kaXRp
b25fdGVzdF9leHByZXNzaW9uKHNlbGYpOgorICAgICAgICBtYXRjaCA9IFF0UHJvamVjdFJlYWRl
ci5ERUZJTkVTX0NPTkRJVElPTl9NQVRDSC5tYXRjaChzZWxmLmxpbmUpIG9yIFF0UHJvamVjdFJl
YWRlci5GVU5DVElPTl9DT05ESVRJT05fTUFUQ0gubWF0Y2goc2VsZi5saW5lKSBvciBRdFByb2pl
Y3RSZWFkZXIuTkFNRV9DT05ESVRJT05fTUFUQ0gubWF0Y2goc2VsZi5saW5lKQorICAgICAgICBp
ZiBtYXRjaDoKKyAgICAgICAgICAgIHNlbGYubGluZSA9IHNlbGYubGluZVttYXRjaC5lbmQoMCk6
XS5sc3RyaXAoKQorICAgICAgICAgICAgc2VsZi52ZXJpZnkoc2VsZi5saW5lLCAiVW5leHBlY3Rl
ZCBlbmQgb2YgY29uZGl0aW9uIGluIGxpbmUgJWQgLSBzdGF0ZW1lbnQgZXhwZWN0ZWQhIiAlIHNl
bGYubGluZV9udW1iZXIpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMCkKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwYXJzZV9jb25kaXRpb25fdGVzdChzZWxmKToKKyAg
ICAgICAgdGVzdCA9IHNlbGYucGFyc2VfY29uZGl0aW9uX3Rlc3RfZXhwcmVzc2lvbigpCisgICAg
ICAgIGlmIG5vdCB0ZXN0OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgICAgICMgTG9vcCBPUiBvcGVyYXRvcnMKKyAgICAgICAgICAgIHdoaWxl
IHNlbGYubGluZVswXSA9PSAnfCc6CisgICAgICAgICAgICAgICAgc2VsZi5saW5lID0gc2VsZi5s
aW5lWzE6XS5sc3RyaXAoKQorICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBzZWxmLnBhcnNl
X2NvbmRpdGlvbl90ZXN0X2V4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgIHNlbGYudmVyaWZ5
KGV4cHJlc3Npb24sICJDb3VsZCBub3QgcGFyc2UgY29uZGl0aW9uIGV4cHJlc3Npb24gJyVzJyBp
biBsaW5lICVkISIgJSAoc2VsZi5saW5lLCBzZWxmLmxpbmVfbnVtYmVyKSkKKyAgICAgICAgICAg
ICAgICB0ZXN0ICs9ICd8JyArIGV4cHJlc3Npb24KKyAgICAgICAgICAgICMgVGVzdCBmb3Igc3Rh
dGVtZW50cyB0aGF0IGFyZSBzZXBhcmF0ZWQgd2l0aG91dCBhIGNvbG9uCisgICAgICAgICAgICBz
ZWxmLnZlcmlmeShzZWxmLmxpbmUsICJVbmV4cGVjdGVkIGVuZCBvZiBjb25kaXRpb24gaW4gbGlu
ZSAlZCAtIHN0YXRlbWVudCBleHBlY3RlZCEiICUgc2VsZi5saW5lX251bWJlcikKKyAgICAgICAg
ICAgIGlmIHNlbGYubGluZVswXSA9PSAneycgb3Igc2VsZi5saW5lWzBdID09ICcjJyBvciBRdFBy
b2plY3RSZWFkZXIuSU5DTFVERV9NQVRDSC5tYXRjaChzZWxmLmxpbmUpIG9yIFF0UHJvamVjdFJl
YWRlci5BU1NJR05NRU5UX01BVENILm1hdGNoKHNlbGYubGluZSk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRlc3QKKyAgICAgICAgICAgICMgU2tpcCAnOicsIGJ1dCBET04nVCBhZGQgaXQgdG8g
dGhlIHRlc3QgZXhwcmVzc2lvbiB5ZXQgLSBtaWdodCBiZSBleHByZXNzaW9uIHRlcm1pbmF0b3Ig
cmF0aGVyIHRoYW4gQU5ELW9wZXJhdG9yCisgICAgICAgICAgICBzZWxmLnZlcmlmeShzZWxmLmxp
bmVbMF0gPT0gJzonLCAiVW5rbm93biBjaGFyYWN0ZXIocykgJyVzJyBhZnRlciBwcmVzdW1lZCBj
b25kaXRpb24gdGVzdCBleHByZXNzaW9uICclcycgaW4gbGluZSAlZCAtICc6JyBvciAneycgZXhw
ZWN0ZWQhIiAlIChzZWxmLmxpbmUsIHRlc3QsIHNlbGYubGluZV9udW1iZXIpKQorICAgICAgICAg
ICAgc2VsZi5saW5lID0gc2VsZi5saW5lWzE6XS5sc3RyaXAoKQorICAgICAgICAgICAgIyBUZXN0
IGZvciBzdGF0ZW1lbnRzIGFnYWluIGFmdGVyIHRoZSBjb2xvbgorICAgICAgICAgICAgc2VsZi52
ZXJpZnkoc2VsZi5saW5lLCAiVW5leHBlY3RlZCBlbmQgb2YgY29uZGl0aW9uIGluIGxpbmUgJWQg
LSBzdGF0ZW1lbnQgZXhwZWN0ZWQhIiAlIHNlbGYubGluZV9udW1iZXIpCisgICAgICAgICAgICBp
ZiBzZWxmLmxpbmVbMF0gPT0gJ3snIG9yIHNlbGYubGluZVswXSA9PSAnIycgb3IgUXRQcm9qZWN0
UmVhZGVyLklOQ0xVREVfTUFUQ0gubWF0Y2goc2VsZi5saW5lKSBvciBRdFByb2plY3RSZWFkZXIu
QVNTSUdOTUVOVF9NQVRDSC5tYXRjaChzZWxmLmxpbmUpOgorICAgICAgICAgICAgICAgIHJldHVy
biB0ZXN0CisgICAgICAgICAgICAjIENvbmRpdGlvbiB0ZXN0IG5vdCB5ZXQgZmluaXNoZWQsIHBy
ZXN1bWUgdGhlIGNvbG9uIGlzIEFORC1vcGVyYXRvciBhbmQgYXBwZW5kIGl0CisgICAgICAgICAg
ICBleHByZXNzaW9uID0gc2VsZi5wYXJzZV9jb25kaXRpb25fdGVzdF9leHByZXNzaW9uKCkKKyAg
ICAgICAgICAgIHNlbGYudmVyaWZ5KGV4cHJlc3Npb24sICJDb3VsZCBub3QgcGFyc2UgY29uZGl0
aW9uIGV4cHJlc3Npb24gJyVzJyBpbiBsaW5lICVkISIgJSAoc2VsZi5saW5lLCBzZWxmLmxpbmVf
bnVtYmVyKSkKKyAgICAgICAgICAgIHRlc3QgKz0gJzonICsgZXhwcmVzc2lvbgorCisgICAgZGVm
IHBhcnNlX2NvbmRpdGlvbihzZWxmLCBzdGF0ZW1lbnRfbGlzdCk6CisgICAgICAgIHRlc3QgPSBz
ZWxmLnBhcnNlX2NvbmRpdGlvbl90ZXN0KCkKKyAgICAgICAgaWYgbm90IHRlc3Q6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICBjb25kaXRpb24gPSBRdENvbmRpdGlvbihzdGF0ZW1l
bnRfbGlzdCkKKyAgICAgICAgYnJhbmNoID0gc2VsZi5jcmVhdGVfdGVzdF9icmFuY2goY29uZGl0
aW9uLCB0ZXN0KQorICAgICAgICBjb25kaXRpb24uX2FwcGVuZF9icmFuY2goYnJhbmNoKQorICAg
ICAgICBzZWxmLnBhcnNlX2NvbmRpdGlvbl9icmFuY2goYnJhbmNoKQorICAgICAgICB3aGlsZSBz
ZWxmLmxpbmUuc3RhcnRzd2l0aCgnZWxzZTonKSBvciBzZWxmLmxpbmUuc3RhcnRzd2l0aCgnZWxz
ZSAnKToKKyAgICAgICAgICAgIHNlbGYubGluZSA9IHNlbGYubGluZVs1Ol0ubHN0cmlwKCkKKyAg
ICAgICAgICAgIHRlc3QgPSBzZWxmLnBhcnNlX2NvbmRpdGlvbl90ZXN0KCkKKyAgICAgICAgICAg
IGlmIHRlc3Q6CisgICAgICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5jcmVhdGVfdGVzdF9icmFu
Y2goY29uZGl0aW9uLCB0ZXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBi
cmFuY2ggPSBRdEVsc2VDb25kaXRpb25CcmFuY2goY29uZGl0aW9uKQorICAgICAgICAgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UoYnJhbmNoLCBRdEVsc2VDb25kaXRpb25CcmFuY2gpIG9yIG5vdCBicmFu
Y2gudGVzdC5zdGFydHN3aXRoKCdlbHNlJyksICJFTFNFOiAlcyIgJSBicmFuY2gudGVzdAorICAg
ICAgICAgICAgY29uZGl0aW9uLl9hcHBlbmRfYnJhbmNoKGJyYW5jaCkKKyAgICAgICAgICAgIHNl
bGYucGFyc2VfY29uZGl0aW9uX2JyYW5jaChicmFuY2gpCisgICAgICAgIHJldHVybiBjb25kaXRp
b24KKworICAgIGRlZiBwYXJzZV9zdGF0ZW1lbnQoc2VsZiwgc3RhdGVtZW50X2xpc3QpOgorICAg
ICAgICAjIGVtcHR5IHN0cmluZworICAgICAgICBpZiBub3Qgc2VsZi5saW5lOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBjb21tZW50CisgICAgICAgIGlmIHNlbGYubGluZVsw
XSA9PSAnIyc6CisgICAgICAgICAgICBjb21tZW50ID0gc2VsZi5saW5lCisgICAgICAgICAgICBz
ZWxmLmxpbmUgPSAnJworICAgICAgICAgICAgcmV0dXJuIFF0Q29tbWVudChzdGF0ZW1lbnRfbGlz
dCwgY29tbWVudCkKKyAgICAgICAgIyBpbmNsdWRlIHN0YXRlbWVudHMKKyAgICAgICAgaWYgUXRQ
cm9qZWN0UmVhZGVyLklOQ0xVREVfTUFUQ0gubWF0Y2goc2VsZi5saW5lKToKKyAgICAgICAgICAg
IHN0YXRlbWVudCA9IFF0SW5jbHVkZShzdGF0ZW1lbnRfbGlzdCwgc2VsZi5saW5lKQorICAgICAg
ICAgICAgc2VsZi5saW5lID0gJycKKyAgICAgICAgICAgIHNlbGYucHVyZ2VfYXNzaWdubWVudF9t
YXBfc3RhY2soKSAjIFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaW5jbHVkZSBwdWxscywgc28gcHJl
dmVudCBhc3NpZ25tZW50IGNvbWJpbmF0aW9uIGFjcm9zcyB0aGlzLgorICAgICAgICAgICAgcmV0
dXJuIHN0YXRlbWVudAorICAgICAgICAjIGFzc2lnbm1lbnRzCisgICAgICAgIChwYXJzZWQsIHN0
YXRlbWVudCkgPSBzZWxmLnBhcnNlX2Fzc2lnbm1lbnQoc3RhdGVtZW50X2xpc3QpCisgICAgICAg
IGlmIHBhcnNlZDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQKKyAgICAgICAgIyBjb25k
aXRpb25zIChOb3RlOiBNVVNUIGJlIGxhc3QhKQorICAgICAgICBjb25kaXRpb24gPSBzZWxmLnBh
cnNlX2NvbmRpdGlvbihzdGF0ZW1lbnRfbGlzdCkKKyAgICAgICAgaWYgY29uZGl0aW9uOgorICAg
ICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbgorICAgICAgICAjIER1bm5vIHdoYXQgaXQgaXMKKyAg
ICAgICAgc2VsZi5lcnJvcigiVW5rbm93biBzdGF0ZW1lbnQgJyVzJyBpbiBsaW5lICVkISIgJSAo
c2VsZi5saW5lLCBzZWxmLmxpbmVfbnVtYmVyKSkKKworICAgIGRlZiBwYXJzZV9zdGF0ZW1lbnRf
bGlzdChzZWxmLCBzdGF0ZW1lbnRfbGlzdCk6CisgICAgICAgIHNlbGYuYXNzaWdubWVudF9tYXBf
c3RhY2suYXBwZW5kKHt9KQorICAgICAgICBwYXJlbnRfc3RhdGVtZW50X2xpc3QgPSBzdGF0ZW1l
bnRfbGlzdC5wYXJlbnRfc3RhdGVtZW50X2xpc3QoKQorICAgICAgICB3aGlsZSBzZWxmLmxpbmUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLmxpbmU6CisgICAgICAgICAgICAgICAg
aWYgc2VsZi5saW5lWzBdID09ICd9JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJpZnko
cGFyZW50X3N0YXRlbWVudF9saXN0LCAiVW5iYWxhbmNlZCAnfScgZW5jb3VudGVyZWQgaW4gbGlu
ZSAlZCEiICUgc2VsZi5saW5lX251bWJlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5l
ID0gc2VsZi5saW5lWzE6XS5sc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2ln
bm1lbnRfbWFwX3N0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgICAgIHN0YXRlbWVudCA9IHNlbGYucGFyc2Vfc3RhdGVtZW50KHN0YXRlbWVudF9saXN0
KQorICAgICAgICAgICAgICAgIGlmIHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgIyBB
c3N1bWUgYW55IGNvbW1lbnRzIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBzdGF0ZW1lbnQgYmVs
b25nIHdpdGggaXQuCisgICAgICAgICAgICAgICAgICAgICMgU3RvcmUgdGhlbSBpbnNpZGUgdGhl
IHN0YXRlbWVudCBvYmplY3QsIHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QgaW4gY2FzZSB0aGUgb2Jq
ZWN0IG1vdmVzIGFyb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogSW4gY2FzZSB0
aGUgb2JqZWN0IGlzIGRlbGV0ZWQgb3IgZW1wdGllZCwgY29tbWVudHMgd2lsbCBub3QgZ2V0IG91
dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgaXMgdGhpcyBhIGZlYXR1cmUgb3Ig
YSBidWc/CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHN0YXRlbWVudCwg
UXRDb21tZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHN0YXRlbWVudF9saXN0
LnN0YXRlbWVudHMgYW5kIGlzaW5zdGFuY2Uoc3RhdGVtZW50X2xpc3Quc3RhdGVtZW50c1stMV0s
IFF0Q29tbWVudCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudF9zdGF0ZW1l
bnQgPSBzdGF0ZW1lbnRfbGlzdC5zdGF0ZW1lbnRzLnBvcCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVtZW50LnByZXBlbmRfY29tbWVudChjb21tZW50X3N0YXRlbWVudC5jb21t
ZW50KQorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRfbGlzdC5fYXBwZW5kX3N0YXRlbWVu
dChzdGF0ZW1lbnQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5saW5lOgorICAgICAgICAgICAg
ICAgIHNlbGYucmVhZGxpbmUoKQorICAgICAgICBzZWxmLnZlcmlmeShub3QgcGFyZW50X3N0YXRl
bWVudF9saXN0LCAiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSB3aGlsZSByZWFkaW5nIG5lc3RlZCBz
dGF0ZW1lbnQgbGlzdCEiKQorICAgICAgICBzZWxmLmFzc2lnbm1lbnRfbWFwX3N0YWNrLnBvcCgp
CisKKyAgICBkZWYgcmVhZF9wcm9qZWN0X2ZpbGUoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAg
c2VsZi5pbmZvKCJSZWFkaW5nIFF0IHByb2plY3QgZmlsZSBmcm9tICVzIiAlIGZpbGVfcGF0aCkK
KyAgICAgICAgd2l0aCBzZWxmLmZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmco
ZmlsZV9wYXRoKSBhcyBzZWxmLmZpbGU6CisgICAgICAgICAgICBzZWxmLml0ZXIgPSBpdGVyKHNl
bGYuZmlsZSkKKyAgICAgICAgICAgIHNlbGYubGluZV9udW1iZXIgPSAwCisgICAgICAgICAgICBz
ZWxmLmFzc2lnbm1lbnRfbWFwX3N0YWNrID0gW10KKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmUo
KQorICAgICAgICAgICAgc2VsZi5wYXJzZV9zdGF0ZW1lbnRfbGlzdChzZWxmLnByb2plY3Qucm9v
dF9tYWtlX2ZpbGUpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorCitjbGFzcyBRdFByb2plY3RXcml0ZXIoUHJvamVjdFdyaXRlcik6CisgICAgIiIi
CisgICAgUXQgcHJvamVjdCBmaWxlIHdyaXRlcgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwcm9qZWN0LCBmaWxlc3lzdGVtPU5vbmUpOgorICAgICAgICBQcm9qZWN0V3JpdGVyLl9f
aW5pdF9fKHNlbGYsIHByb2plY3QsIGZpbGVzeXN0ZW0pCisgICAgICAgIHNlbGYuZmlsZSA9IE5v
bmUKKyAgICAgICAgc2VsZi5wcmV2aW91c193cml0dGVuX3N0YXRlbWVudCA9IE5vbmUKKworICAg
IGRlZiB3cml0ZV9icmFuY2hfc3RhdGVtZW50X2xpc3Qoc2VsZiwgc3RhdGVtZW50X2xpc3QsIGlz
X2xhc3QsIGluZGVudCk6CisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgnIHtcbicpCisgICAgICAg
IHNlbGYud3JpdGVfc3RhdGVtZW50X2xpc3Qoc3RhdGVtZW50X2xpc3QsIGluZGVudCArICcgICAg
JykKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKGluZGVudCArICd9JykKKyAgICAgICAgaWYgaXNf
bGFzdDoKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgnXG4nKQorCisgICAgZGVmIHdyaXRl
X2NvbmRpdGlvbl9icmFuY2goc2VsZiwgYnJhbmNoLCBpc19maXJzdCwgaXNfbGFzdCwgaW5kZW50
KToKKyAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGJyYW5jaCwgRWxzZUNvbmRpdGlvbkJy
YW5jaCkgb3Igbm90IGlzX2ZpcnN0CisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShicmFu
Y2gsIEVsc2VDb25kaXRpb25CcmFuY2gpIG9yIGlzX2xhc3QKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShicmFuY2gsIFRlc3RDb25kaXRpb25CcmFuY2gpOgorICAgICAgICAgICAgaWYgbm90IGlzX2Zp
cnN0OgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgnIGVsc2U6ICcpCisgICAgICAg
ICAgICBzZWxmLmZpbGUud3JpdGUoYnJhbmNoLnRlc3QpCisgICAgICAgICAgICBzZWxmLndyaXRl
X2JyYW5jaF9zdGF0ZW1lbnRfbGlzdChicmFuY2gsIGlzX2xhc3QsIGluZGVudCkKKyAgICAgICAg
ZWxpZiBpc2luc3RhbmNlKGJyYW5jaCwgRWxzZUNvbmRpdGlvbkJyYW5jaCk6CisgICAgICAgICAg
ICBzZWxmLmZpbGUud3JpdGUoJyBlbHNlJykKKyAgICAgICAgICAgIHNlbGYud3JpdGVfYnJhbmNo
X3N0YXRlbWVudF9saXN0KGJyYW5jaCwgaXNfbGFzdCwgaW5kZW50KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5lcnJvcigiSW50ZXJuYWwgZXJyb3I6IHVua25vd24gY29uZGl0aW9u
IGJyYW5jaCB0eXBlIGVuY291bnRlcmVkICclcychIiAlIHN0cihicmFuY2gpKQorCisgICAgZGVm
IHdyaXRlX2NvbmRpdGlvbihzZWxmLCBjb25kaXRpb24sIGluZGVudCk6CisgICAgICAgIGlmIG5v
dCBjb25kaXRpb24uYnJhbmNoZXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
aWYgc2VsZi5wcmV2aW91c193cml0dGVuX3N0YXRlbWVudDoKKyAgICAgICAgICAgIHNlbGYuZmls
ZS53cml0ZSgnXG4nKQorICAgICAgICBzZWxmLndyaXRlX3N0YXRlbWVudF9jb21tZW50cyhjb25k
aXRpb24sIGluZGVudCkKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAg
Zm9yIGJyYW5jaCBpbiBjb25kaXRpb24uYnJhbmNoZXM6CisgICAgICAgICAgICBzZWxmLndyaXRl
X2NvbmRpdGlvbl9icmFuY2goYnJhbmNoLCBicmFuY2ggaXMgY29uZGl0aW9uLmJyYW5jaGVzWzBd
LCBicmFuY2ggaXMgY29uZGl0aW9uLmJyYW5jaGVzWy0xXSwgaW5kZW50KQorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmaWxlX3NvcnRpbmdfa2V5KGZp
bGVfcGF0aCwgc2VwKToKKyAgICAgICAgIyBBZGQgJy5sb3dlcigpJyBhZnRlciAnZmlsZV9wYXRo
JyBiZWxvdyBpZiB5b3Ugd2FudCBmaWxlIG5hbWVzIHNvcnRlZCBjYXNlLWluc2Vuc2l0aXZlbHku
CisgICAgICAgIGRpciwgc2VwYXJhdG9yLCBmaWxlX25hbWUgPSBmaWxlX3BhdGgucnBhcnRpdGlv
bihzZXApCisgICAgICAgICMgQ2hhbmdlICcnIHRvICdceDdFJyBiZWxvdyBpZiB5b3Ugd2FudCBz
dWItZGlyZWN0b3JpZXMgc29ydGVkIGJlZm9yZSB0aGVpciBjb250YWluaW5nIGRpcmVjdG9yaWVz
LgorICAgICAgICBkaXIgPSBkaXIucmVwbGFjZShzZXAsICcgJykKKyAgICAgICAgIyBDaGFuZ2Ug
J1x4N0YnIHRvICdceDAxJyBiZWxvdyBpZiB5b3Ugd2FudCBzdWItZGlyZWN0b3JpZXMgdG8gYmUg
Z3JvdXBlZCB0b2dldGhlciBhdCB0aGUgZW5kIHJhdGhlciB0aGFuIHRoZSBiZWdpbm5pbmcuCisg
ICAgICAgICMgQ2hhbmdlICdceDdGJyBiZWxvdyB0byBmcy5zZXAgaWYgeW91IGRvbid0IHdhbnQg
c3ViLWRpcmVjdG9yaWVzIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXIgYXQgYWxsLCBidXQgc29ydGVk
IHdpdGggb3RoZXIgZmlsZSBuYW1lcy4KKyAgICAgICAgcmV0dXJuIGRpciArICdceDdGJyArIGZp
bGVfbmFtZQorCisgICAgZGVmIGdlbmVyYXRlX2ZpbGVfcmVmZXJlbmNlc19hc3NpZ25tZW50X2xp
c3Qoc2VsZiwgYXNzaWdubWVudCk6CisgICAgICAgICMgQ2hhbmdlICdceDAxJyB0byAnXHg3Ricg
aW4gYmVsb3cgaWYgeW91IHdhbnQgbG9uZ2VyIGRpcmVjdG9yeSBuYW1lcyBiZSBzb3J0ZWQgYmVm
b3JlIHNob3J0ZXIgb25lcworICAgICAgICByZXR1cm4gc29ydGVkKAorICAgICAgICAgICAgbWFw
KGxhbWJkYSBmOiBzZWxmLmNvbW1vbi5maWxlX3JlbHBhdGgoc2VsZi5iYXNlX2RpcmVjdG9yeSwg
Ziwgc2VsZi5wcm9qZWN0LlNFUCwgc2VsZi5wcm9qZWN0LmRpcmVjdG9yeV90b192YXJpYWJsZSwg
YWx3YXlzX3ByZWZpeD0oYXNzaWdubWVudC52YXJpYWJsZSA9PSAnSU5DTFVERVBBVEgnKSksIGFz
c2lnbm1lbnQuZmlsZV9yZWZlcmVuY2VzLmtleXMoKSksCisgICAgICAgICAgICBrZXk9bGFtYmRh
IHY6IFF0UHJvamVjdFdyaXRlci5maWxlX3NvcnRpbmdfa2V5KHYsIHNlbGYucHJvamVjdC5TRVAp
CisgICAgICAgICkKKworICAgIGRlZiBnZW5lcmF0ZV9kaXJlY3RvcnlfcmVmZXJlbmNlc19hc3Np
Z25tZW50X2xpc3Qoc2VsZiwgYXNzaWdubWVudCk6CisgICAgICAgICMgQ2hhbmdlICdceDAxJyB0
byAnXHg3RicgaW4gYmVsb3cgaWYgeW91IHdhbnQgbG9uZ2VyIGRpcmVjdG9yeSBuYW1lcyBiZSBz
b3J0ZWQgYmVmb3JlIHNob3J0ZXIgb25lcworICAgICAgICByZXR1cm4gc29ydGVkKAorICAgICAg
ICAgICAgbWFwKGxhbWJkYSBkOiBzZWxmLmNvbW1vbi5kaXJlY3RvcnlfcmVscGF0aChzZWxmLmJh
c2VfZGlyZWN0b3J5LCBkLCBzZWxmLnByb2plY3QuU0VQLCBzZWxmLnByb2plY3QuZGlyZWN0b3J5
X3RvX3ZhcmlhYmxlLCBhbHdheXNfcHJlZml4PShhc3NpZ25tZW50LnZhcmlhYmxlID09ICdJTkNM
VURFUEFUSCcpKSwgYXNzaWdubWVudC5kaXJlY3RvcnlfcmVmZXJlbmNlcy5rZXlzKCkpLAorICAg
ICAgICAgICAga2V5PWxhbWJkYSB2OiB2Lmxvd2VyKCkucmVwbGFjZShzZWxmLnByb2plY3QuU0VQ
LCAnXHgwMScpCisgICAgICAgICkKKworICAgIGRlZiB3cml0ZV9hc3NpZ25tZW50KHNlbGYsIGFz
c2lnbm1lbnQsIGluZGVudCk6CisgICAgICAgIGlmIHNlbGYucHJldmlvdXNfd3JpdHRlbl9zdGF0
ZW1lbnQ6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoJ1xuJykKKyAgICAgICAgc2VsZi53
cml0ZV9zdGF0ZW1lbnRfY29tbWVudHMoYXNzaWdubWVudCwgaW5kZW50KQorICAgICAgICBzZWxm
LmZpbGUud3JpdGUoaW5kZW50ICsgYXNzaWdubWVudC52YXJpYWJsZSArICcgJyArIGFzc2lnbm1l
bnQub3BlcmF0b3IgKyAnICcpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXNzaWdubWVudCwgUXRG
aWxlUmVmZXJlbmNlc0Fzc2lnbm1lbnQpOgorICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5nZW5l
cmF0ZV9maWxlX3JlZmVyZW5jZXNfYXNzaWdubWVudF9saXN0KGFzc2lnbm1lbnQpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShhc3NpZ25tZW50LCBRdERpcmVjdG9yeVJlZmVyZW5jZXNBc3NpZ25t
ZW50KToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZ2VuZXJhdGVfZGlyZWN0b3J5X3JlZmVy
ZW5jZXNfYXNzaWdubWVudF9saXN0KGFzc2lnbm1lbnQpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB2YWx1ZXMgPSBhc3NpZ25tZW50LnZhbHVlcworICAgICAgICBpbmRlbnQgKz0gJyAnICog
NAorICAgICAgICBpZiBsZW4odmFsdWVzKSA+IDE6CisgICAgICAgICAgICBjb250aW51YXRpb25f
c3RyaW5nID0gJ1xcXG4nICsgaW5kZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250
aW51YXRpb25fc3RyaW5nID0gJycKKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAg
ICAgICAgIHNlbGYuZmlsZS53cml0ZShjb250aW51YXRpb25fc3RyaW5nICsgdmFsdWUpCisgICAg
ICAgICAgICBjb250aW51YXRpb25fc3RyaW5nID0gJyBcXFxuJyArIGluZGVudAorICAgICAgICBz
ZWxmLmZpbGUud3JpdGUoJ1xuJykKKworICAgIGRlZiB3cml0ZV9zdGF0ZW1lbnRfY29tbWVudHMo
c2VsZiwgc3RhdGVtZW50LCBpbmRlbnQpOgorICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2Uo
c3RhdGVtZW50LCBDb21tZW50KQorICAgICAgICBmb3IgY29tbWVudCBpbiBzdGF0ZW1lbnQuY29t
bWVudHM6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoaW5kZW50ICsgY29tbWVudCArICdc
bicpCisKKyAgICBkZWYgd3JpdGVfc3RhdGVtZW50KHNlbGYsIHN0YXRlbWVudCwgaW5kZW50KToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShzdGF0ZW1lbnQsIENvbW1lbnQpOgorICAgICAgICAgICAg
c2VsZi5maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzdGF0
ZW1lbnQuY29tbWVudCArICdcbicpCisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3dyaXR0ZW5f
c3RhdGVtZW50ID0gc3RhdGVtZW50CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaXNp
bnN0YW5jZShzdGF0ZW1lbnQsIFF0SW5jbHVkZSk6CisgICAgICAgICAgICBpZiBzZWxmLnByZXZp
b3VzX3dyaXR0ZW5fc3RhdGVtZW50IGFuZCBub3QgaXNpbnN0YW5jZShzZWxmLnByZXZpb3VzX3dy
aXR0ZW5fc3RhdGVtZW50LCBRdEluY2x1ZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZS53
cml0ZSgnXG4nKQorICAgICAgICAgICAgc2VsZi53cml0ZV9zdGF0ZW1lbnRfY29tbWVudHMoc3Rh
dGVtZW50LCBpbmRlbnQpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoaW5kZW50KQorICAg
ICAgICAgICAgc2VsZi5maWxlLndyaXRlKHN0YXRlbWVudC5pbmNsdWRlICsgJ1xuJykKKyAgICAg
ICAgICAgIHNlbGYucHJldmlvdXNfd3JpdHRlbl9zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBpZiBpc2luc3RhbmNlKHN0YXRlbWVudCwgQXNzaWdubWVu
dCk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2Fzc2lnbm1lbnQoc3RhdGVtZW50LCBpbmRlbnQp
CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3dyaXR0ZW5fc3RhdGVtZW50ID0gc3RhdGVtZW50
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdGF0ZW1lbnQsIENv
bmRpdGlvbik6CisgICAgICAgICAgICBpZiBzZWxmLndyaXRlX2NvbmRpdGlvbihzdGF0ZW1lbnQs
IGluZGVudCk6CisgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c193cml0dGVuX3N0YXRlbWVu
dCA9IHN0YXRlbWVudAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZXJyb3IoIklu
dGVybmFsIGVycm9yOiB1bmtub3duIG9iamVjdCAnJXMnIGVuY291bnRlcmVkISIgJSBzdHIoc3Rh
dGVtZW50KSkKKworICAgIGRlZiB3cml0ZV9zdGF0ZW1lbnRfbGlzdChzZWxmLCBzdGF0ZW1lbnRf
bGlzdCwgaW5kZW50KToKKyAgICAgICAgc2VsZi5wcmV2aW91c193cml0dGVuX3N0YXRlbWVudCA9
IE5vbmUKKyAgICAgICAgI2ZvciB2YXJpYWJsZSBpbiBzb3J0ZWQoc3RhdGVtZW50X2xpc3QuYXNz
aWdubWVudHMua2V5cygpLCBrZXk9UXRQcm9qZWN0V3JpdGVyLmFzc2lnbm1lbnRfc29ydGluZ19r
ZXkpOgorICAgICAgICAjICAgIHNlbGYud3JpdGVfc3RhdGVtZW50KHN0YXRlbWVudF9saXN0LmFz
c2lnbm1lbnRzW3ZhcmlhYmxlXSwgaW5kZW50KQorICAgICAgICBmb3Igc3RhdGVtZW50IGluIHN0
YXRlbWVudF9saXN0LnN0YXRlbWVudHM6CisgICAgICAgICAgICBzZWxmLndyaXRlX3N0YXRlbWVu
dChzdGF0ZW1lbnQsIGluZGVudCkKKworICAgIGRlZiB3cml0ZV9wcm9qZWN0X2ZpbGUoc2VsZiwg
ZmlsZV9wYXRoKToKKyAgICAgICAgc2VsZi5pbmZvKCJXcml0aW5nIFF0IHByb2plY3QgZmlsZSB0
byAlcyIgJSBmaWxlX3BhdGgpCisgICAgICAgIHNlbGYuYmFzZV9kaXJlY3RvcnkgPSBzZWxmLnBy
b2plY3QudmFyaWFibGVfdG9fZGlyZWN0b3J5WyckJFBXRCddCisgICAgICAgIHdpdGggc2VsZi5m
aWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKGZpbGVfcGF0aCkgYXMgc2VsZi5m
aWxlOgorICAgICAgICAgICAgc2VsZi53cml0ZV9zdGF0ZW1lbnRfbGlzdChzZWxmLnByb2plY3Qu
cm9vdF9tYWtlX2ZpbGUsICcnKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworY2xhc3MgUXRQcm9qZWN0KE1ha2VQcm9qZWN0KToKKyAgICAiIiIK
KyAgICBDbGFzcyBjb250YWluaW5nIGFsbCBkYXRhIHN0cnVjdHVyZXMgZGVzY3JpYmluZyBhIFF0
IHByb2plY3QuCisgICAgIiIiCisgICAgU0VQID0gJy8nCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgY29tbW9uLCByb290X21ha2VfZmlsZSwgc3BlY2lhbF9kaXJlY3RvcmllcywgcHJvamVjdF9u
YW1lPU5vbmUpOgorICAgICAgICBNYWtlUHJvamVjdC5fX2luaXRfXyhzZWxmLCBjb21tb24sIHJv
b3RfbWFrZV9maWxlLCBzcGVjaWFsX2RpcmVjdG9yaWVzLCBwcm9qZWN0X25hbWUpCisgICAgICAg
IHNlbGYucHdkX2RpcmVjdG9yeSA9IHNwZWNpYWxfZGlyZWN0b3JpZXNbJyQkUFdEJ10KKyAgICAg
ICAgc2VsZi5kZWZpbmVfY29uZGl0aW9uYWxzID0ge30gICMgbWFwICdjb250YWlucyhERUZJTkVT
LCA8eD4pJyAtPiBRdEVOQUJMRUNvbmRpdGlvbmFsIG9iamVjdAorICAgICAgICAjIG1hcCBDb21t
b25GaWxlIC0+IHNldCBvZiBRdEZpbGVSZWZlcmVuY2Ugb2JqZWN0cworICAgICAgICBzZWxmLmZp
bGVfdG9fZmlsZV9yZWZlcmVuY2VzID0ge30KKyAgICAgICAgIyBtYXAgQ29tbW9uRGlyZWN0b3J5
IC0+IHNldCBvZiBRdERpcmVjdG9yeVJlZmVyZW5jZSBvYmplY3RzCisgICAgICAgIHNlbGYuZGly
ZWN0b3J5X3RvX2RpcmVjdG9yeV9yZWZlcmVuY2VzID0ge30KKworICAgIGRlZiBfYWRkX2ZpbGVf
cmVmZXJlbmNlKHNlbGYsIGZpbGVfcmVmZXJlbmNlKToKKyAgICAgICAgYXNzZXJ0IGZpbGVfcmVm
ZXJlbmNlCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGVfcmVmZXJlbmNlLCBRdEZpbGVS
ZWZlcmVuY2UpCisgICAgICAgIGFzc2VydCBmaWxlX3JlZmVyZW5jZS5maWxlCisgICAgICAgIHNl
bGYuZmlsZV90b19maWxlX3JlZmVyZW5jZXMuc2V0ZGVmYXVsdChmaWxlX3JlZmVyZW5jZS5maWxl
LCBzZXQoKSkuYWRkKGZpbGVfcmVmZXJlbmNlKQorCisgICAgZGVmIF9hZGRfZGlyZWN0b3J5X3Jl
ZmVyZW5jZShzZWxmLCBkaXJlY3RvcnlfcmVmZXJlbmNlKToKKyAgICAgICAgYXNzZXJ0IGRpcmVj
dG9yeV9yZWZlcmVuY2UKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5X3JlZmVy
ZW5jZSwgUXREaXJlY3RvcnlSZWZlcmVuY2UpCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfcmVm
ZXJlbmNlLmRpcmVjdG9yeQorICAgICAgICBzZWxmLmRpcmVjdG9yeV90b19kaXJlY3RvcnlfcmVm
ZXJlbmNlcy5zZXRkZWZhdWx0KGRpcmVjdG9yeV9yZWZlcmVuY2UuZGlyZWN0b3J5LCBzZXQoKSku
YWRkKGRpcmVjdG9yeV9yZWZlcmVuY2UpCisKKyAgICAjIC0tLSBvdmVycmlkZXMgLS0tCisKKyAg
ICBkZWYgZW5zdXJlX2Fzc2lnbm1lbnQoc2VsZiwgYXNzaWdubWVudF9jbGFzcywgdmFyaWFibGUs
IG9wZXJhdG9yLCBzdGF0ZW1lbnRfbGlzdD1Ob25lKToKKyAgICAgICAgJycnCisgICAgICAgIEVu
c3VyZXMgdGhhdCB0aGUgcGFzc2VkLWluIHN0YXRlbWVudCBsaXN0IChkZWZhdWx0cyB0byB0aGUg
bWFpbiBRdE1ha2VGaWxlKSBjb250YWlucyBhbiBhc3NpZ25tZW50IHN0YXRlbWVudCBvZiB0aGUg
c3BlY2lmaWVkIHR5cGUgdG8gdGhlIHBhc3NlZC1pbiB2YXJpYWJsZS4KKyAgICAgICAgJ29wZXJh
dG9yJyBjYW4gZWl0aGVyIGJlIGEgc2luZ2xlIHN0cmluZywgb3IgYSB0dXBsZSBvZiBzdHJpbmdz
LgorICAgICAgICBJZiBpdCBpcyBhIHR1cGxlLCBhbnkgb2YgdGhlIHZhbHVlIHdpbGwgZml0IGEg
Z2l2ZW4gYXNzaWdubWVudC4gSW4gY2FzZSBhIG5ldyBhc3NpZ25tZW50IGhhcyB0byBiZSBjcmVh
dGVkLCB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIHR1cGxlIHdpbGwgYmUgdXNlZC4KKyAgICAgICAg
JycnCisgICAgICAgIGFzc2VydCBhc3NpZ25tZW50X2NsYXNzCisgICAgICAgIGFzc2VydCBpc3N1
YmNsYXNzKGFzc2lnbm1lbnRfY2xhc3MsIEFzc2lnbm1lbnQpCisgICAgICAgIGFzc2VydCB2YXJp
YWJsZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YXJpYWJsZSwgYmFzZXN0cmluZykKKyAg
ICAgICAgYXNzZXJ0IG9wZXJhdG9yCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9wZXJhdG9y
LCBiYXNlc3RyaW5nKSBvciBpc2luc3RhbmNlKG9wZXJhdG9yLCB0dXBsZSkKKyAgICAgICAgc3Rh
dGVtZW50X2xpc3QgPSBzdGF0ZW1lbnRfbGlzdCBvciBzZWxmLnJvb3RfbWFrZV9maWxlCisgICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKG9wZXJhdG9yLCB0dXBsZSk6CisgICAgICAgICAgICBvcGVy
YXRvciA9IChvcGVyYXRvciwgKQorICAgICAgICBmb3Igc3RhdGVtZW50IGluIHN0YXRlbWVudF9s
aXN0LnN0YXRlbWVudHM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHN0YXRlbWVudCwgYXNz
aWdubWVudF9jbGFzcykgYW5kIHN0YXRlbWVudC52YXJpYWJsZSA9PSB2YXJpYWJsZSBhbmQgc3Rh
dGVtZW50Lm9wZXJhdG9yIGluIG9wZXJhdG9yOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
ZW1lbnQKKyAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvclswXQorICAgICAgICBhc3NpZ25tZW50
ID0gYXNzaWdubWVudF9jbGFzcyh2YXJpYWJsZSwgb3BlcmF0b3IpCisgICAgICAgIHNlbGYuZGVi
dWcoIkNyZWF0ZWQgbmV3IGFzc2lnbm1lbnQgJyVzICVzJyIgJSAodmFyaWFibGUsIG9wZXJhdG9y
KSkKKyAgICAgICAgc3RhdGVtZW50X2xpc3QuX2FwcGVuZF9zdGF0ZW1lbnQoYXNzaWdubWVudCkK
KyAgICAgICAgcmV0dXJuIGFzc2lnbm1lbnQKKworICAgIGRlZiBhZGRfZmlsZShzZWxmLCBmaWxl
KToKKyAgICAgICAgYXNzZXJ0IGZpbGUKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwg
Q29tbW9uRmlsZSkKKyAgICAgICAgZmlsZV9yZWZlcmVuY2VzID0gc2VsZi5maWxlX3RvX2ZpbGVf
cmVmZXJlbmNlcy5zZXRkZWZhdWx0KGZpbGUsIHNldCgpKQorICAgICAgICBpZiBmaWxlX3JlZmVy
ZW5jZXM6CisgICAgICAgICAgICBzZWxmLndhcm5pbmcoIkZpbGUgJXMgYWxyZWFkeSBjb250YWlu
ZWQgaW4gUXQgcHJvamVjdCAlcyAtIG5vdCBhZGRpbmcgaXQgYWdhaW4hIiAlIChzZWxmLmNvbW1v
bi5maWxlX2Fic3BhdGgoZmlsZSwgUXRQcm9qZWN0LlNFUCwgc2VsZi5kaXJlY3RvcnlfdG9fdmFy
aWFibGUpLCBzZWxmLm5hbWUpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuaW5m
bygiQWRkaW5nIGZpbGUgJXMgdG8gUXQiICUgc2VsZi5jb21tb24uZmlsZV9hYnNwYXRoKGZpbGUs
IFF0UHJvamVjdC5TRVAsIHNlbGYuZGlyZWN0b3J5X3RvX3ZhcmlhYmxlKSkKKyAgICAgICAgKGZp
bGVfbmFtZSwgZmlsZV9leHRlbnNpb24pID0gc2VsZi5jb21tb24uZmlsZXN5c3RlbS5zcGxpdGV4
dChmaWxlLm5hbWUpCisgICAgICAgIHZhcmlhYmxlID0gRVhURU5TSU9OX1RPX1ZBUklBQkxFLmdl
dChmaWxlX2V4dGVuc2lvbikKKyAgICAgICAgc2VsZi52ZXJpZnkodmFyaWFibGUsICJDYW5ub3Qg
ZGV0ZXJtaW5lIHdoaWNoIHZhcmlhYmxlIHRvIGFzc2lnbiAlcyB0byEiICUgZmlsZS5uYW1lKQor
ICAgICAgICBhc3NpZ25tZW50ID0gc2VsZi5lbnN1cmVfYXNzaWdubWVudChRdEZpbGVSZWZlcmVu
Y2VzQXNzaWdubWVudCwgdmFyaWFibGUsICgnKz0nLCAnPScpKQorICAgICAgICBmaWxlX3JlZmVy
ZW5jZSA9IFF0RmlsZVJlZmVyZW5jZShmaWxlKQorICAgICAgICBhc3NpZ25tZW50Ll9hZGRfZmls
ZV9yZWZlcmVuY2UoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgIGZpbGVfcmVmZXJlbmNlcy5hZGQo
ZmlsZV9yZWZlcmVuY2UpCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvQ01ha2UtdW5zb3J0ZWQudHh0IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9maWxlcy9DTWFrZS11bnNvcnRl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5NTRjNAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRl
c3RfZmlsZXMvQ01ha2UtdW5zb3J0ZWQudHh0CkBAIC0wLDAgKzEsMTA3IEBACitTRVQoV2ViQ29y
ZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9IgorICAgICIke1dFQkNP
UkVfRElSfS9hYWEiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2JiYiIKKyAgICAiJHtXRUJDT1JFX0RJ
Un0vYmJiL3l5eSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vYmJiL3p6eiIKKyAgICAiJHtXRUJDT1JF
X0RJUn0vY2NjIgorICAgICIke1dFQkNPUkVfRElSfS9kZGQiCispCisKK1NFVChXZWJDb3JlX0lE
TF9GSUxFUworICAgIGNjYy9DaGFvdGljLmlkbAorICAgIGNjYy9DbGltYWN0aWMuaWRsCisgICAg
Y2NjL0NvcnJvc2l2ZS5pZGwKKyAgICBkZGQvRGFzdGFyZGx5LmlkbAorICAgIGRkZC9EaW1lbnNp
b25hbC5pZGwKKykKKworU0VUKFdlYkNvcmVfU09VUkNFUworICAgIGFhYS9BbGxha2hhemFtLmNw
cAorICAgIGFhYS9BYnJhY2FkYWJyYS5jcHAKKyAgICBhYWEvQW1waGl0aGVhdHJlLmNwcAorICAg
IGFhYS9BbXBoaWJpb3VzLmNwcAorICAgIGFhYS9BbWJpZGV4dHJvdXMuY3BwCisKKyAgICBiYmIv
QmVsbGlnZXJlbnQuY3BwCisgICAgYmJiL0JydXRlLmNwcAorICAgIGJiYi96enovWmFyYXRodXN0
cmEuY3BwKQorICAgICAgICAgICAgCitJRiAoVVNFX3JhbWpldCkKKyAgICBMSVNUKEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgYmJiL0JvcmRlcmluZy5jcHAKKyAgICAgICAgYmJiL0Jl
ZnVkZGxlZC5jcHAKKyAgICAgICAgYmJiL3p6ei9aZXBoeXIuY3BwCisgICAgICAgIGNjYy9DYWVz
YXIuY3BwCisgICAgICAgIGNjYy9DaHJvbWF0aWMuY3BwCisgICAgICAgIGNjYy9DbGFuZGVzdGlu
ZS5jcHAKK0VMU0UgKCkKKyAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAg
YmJiL3p6ei9aZWJyYS5jcHAKKyAgICAgICAgYmJiL3p6ei9ab25lLmNwcAorRU5ESUYgKCkKKwor
TElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgY2NjL0NoYW90aWMuY3BwCisgICAgY2Nj
L0NpcmN1bXZlbnRpb24uY3BwCisgICAgY2NjL0NodXR6cGFoLmNwcAorICAgIGNjYy9DZWxsb3Bo
YW5lLmNwcAorCitTRVQoV2ViQ29yZV9IRUFERVJTCisgICAgYWFhL0FsbGFrYXpoYW0uaAorICAg
IGFhYS9BYnJhY2FkYWJyYS5oCisgICAgYWFhL0FtcGhpdGhlYXRyZS5oCisgICAgYWFhL0FtcGhp
YmlvdXMuaAorICAgIGFhYS9BbWJpZGV4dHJvdXMuaAorICAgIGFhYS9BcmNoaW5nLmgKKworSUYg
KFVTRV9yYW1qZXQpCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9IRUFERVJTCisgICAgICAgIGJi
Yi9Cb3JkZXJpbmcuaAorICAgICAgICBiYmIvQmVmdWRkbGVkLmgKKyAgICAgICAgYmJiL3p6ei9a
ZXBoeXIuaAorICAgICAgICBiYmIvQmVzcG9rZS5oCisgICAgICAgIGJiYi9CbGlnaHRlZC5oCitF
TFNFICgpCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9IRUFERVJTCisgICAgICAgIGJiYi96enov
WmVicmEuaAorICAgICAgICBiYmIvenp6L1pvbmUuaAorICAgICAgICBiYmIveXl5L1lhbmtpbmcu
aAorICAgICAgICBiYmIveXl5L1lvZGVsaW5nLmgKK0VORElGICgpCisKK0xJU1QoQVBQRU5EIFdl
YkNvcmVfSEVBREVSUworICAgIGNjYy9DYXRoYXJ0aWMuaAorICAgIGNjYy9DaGFvdGljLmgKKyAg
ICBjY2MvQ2lyY3VtdmVudGlvbi5oCisgICAgY2NjL0NpY2FkZS5oCisgICAgY2NjL0NodXR6cGFo
LmgKKyAgICBjY2MvQ2VsbG9waGFuZS5oCisKK0lGIChFTkFCTEVfRU5BQkxJTkc9MSkKKyAgICBM
SVNUKEFQUEVORCBXZWJDb3JlX0hFQURFUlMKKyAgICAgICAgZGRkL0RlbHVzaW9uYWwuaAorCisg
ICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIGRkZC9EYWZmeS5jcHAKKyAg
ICAgICAgZGRkL0RlbHVzaW9uYWwuY3BwCisgICAgICAgIGRkZC9EZWxpcmlvdXMuY3BwCisgICAg
ICAgIGRkZC9EYXN0YXJkbHkuY3BwCitFTkRJRiAoKQorCisjIEdlbmVyaWMgY29tbWFuZHMgbGlz
dCwgc29tZSBleHRlbmQgV2ViQ29yZV9TT1VSQ0VTIHdpdGggYSBwYXRoIHRoYXQgY29udGFpbnMg
YSB2YXJpYWJsZS4KK0dFTkVSQVRFX0RPTV9OQU1FUyhYTUwgJHtXRUJDT1JFX0RJUn0veG1sL3ht
bGF0dHJzLmluKQorTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9YTUxOYW1lcy5jcHApCisKK0FERF9DVVNUT01fQ09NTUFORCgKKyAgICBP
VVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYktpdFZlcnNpb24uaAorICAg
IE1BSU5fREVQRU5ERU5DWSAke1dFQktJVF9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGUtd2Via2l0dmVy
c2lvbi5wbAorICAgIERFUEVORFMgJHtXRUJLSVRfRElSfS9tYWMvQ29uZmlndXJhdGlvbnMvVmVy
c2lvbi54Y2NvbmZpZworICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCS0lUX0RJ
Un0vc2NyaXB0cy9nZW5lcmF0ZS13ZWJraXR2ZXJzaW9uLnBsIC0tY29uZmlnICR7V0VCS0lUX0RJ
Un0vbWFjL0NvbmZpZ3VyYXRpb25zL1ZlcnNpb24ueGNjb25maWcgLS1vdXRwdXREaXIgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9CisgICAgVkVSQkFUSU0pCitMSVNUKEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYktpdFZlcnNpb24u
aCkKKworIyBEdWJpb3VzIEZPUiB0byBjaGVjayB0aGF0IHBhcnQgb2YgdGhlIHBhcnNlcgorRk9S
IChldGVybml0eSkKKyAgICBGSUxFKFRPX05BVElWRV9QQVRIICR7UEVSTF9FWEVDVVRBQkxFfSBQ
RVJMX0VYRUNVVEFCTEVfTkFUSVZFX1BBVEgpCitFTkRGT1IgKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvUXQtYWRkLWZp
bGUucHJvIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9m
aWxlcy9RdC1hZGQtZmlsZS5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Nzc4MDY1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvUXQtYWRkLWZpbGUucHJvCkBAIC0wLDAgKzEsNzIgQEAK
KyMgV2ViQ29yZSAtIHFtYWtlIGJ1aWxkIGluZm8KK1NPVVJDRVMgKz0gXAorICAgIGFhYS9BYnJh
Y2FkYWJyYS5jcHAgXAorICAgIGFhYS9BbGxha2hhemFtLmNwcCBcCisgICAgYWFhL0FtYmlkZXh0
cm91cy5jcHAgXAorICAgIGFhYS9BbXBoaWJpb3VzLmNwcCBcCisgICAgYWFhL0FtcGhpdGhlYXRy
ZS5jcHAgXAorICAgIGJiYi96enovWmFyYXRodXN0cmEuY3BwIFwKKyAgICBiYmIvQmVsbGlnZXJl
bnQuY3BwIFwKKyAgICBiYmIvQnJ1dGUuY3BwIFwKKyAgICBjY2MvQ2VsbG9waGFuZS5jcHAgXAor
ICAgIGNjYy9DaGFvdGljLmNwcCBcCisgICAgY2NjL0NodXR6cGFoLmNwcCBcCisgICAgY2NjL0Np
cmN1bXZlbnRpb24uY3BwCisKK3JhbWpldCB7CisgICAgU09VUkNFUyArPSBcCisgICAgICAgIGJi
Yi96enovWmVwaHlyLmNwcCBcCisgICAgICAgIGJiYi9CZWZ1ZGRsZWQuY3BwIFwKKyAgICAgICAg
YmJiL0JvcmRlcmluZy5jcHAgXAorICAgICAgICBjY2MvQ2Flc2FyLmNwcCBcCisgICAgICAgIGNj
Yy9DaHJvbWF0aWMuY3BwIFwKKyAgICAgICAgY2NjL0NsYW5kZXN0aW5lLmNwcAorfSBlbHNlIHsK
KyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgYmJiL3p6ei9aZWJyYS5jcHAgXAorICAgICAgICBi
YmIvenp6L1pvbmUuY3BwCit9CisKK0hFQURFUlMgKz0gXAorICAgIGFhYS9BYnJhY2FkYWJyYS5o
IFwKKyAgICBhYWEvQWxsYWtoYXphbS5oIFwKKyAgICBhYWEvQW1iaWRleHRyb3VzLmggXAorICAg
IGFhYS9BbXBoaWJpb3VzLmggXAorICAgIGFhYS9BbXBoaXRoZWF0cmUuaCBcCisgICAgYWFhL0Fy
Y2hpbmcuaCBcCisgICAgdGVzdC1wcm9qZWN0L3N1YmZvbGRlci9kZWVwbHkvbmVzdGVkL2ZpbGUu
aAorCityYW1qZXQgeworICAgIEhFQURFUlMgKz0gXAorICAgICAgICBiYmIvenp6L1plcGh5ci5o
IFwKKyAgICAgICAgYmJiL0JlZnVkZGxlZC5oIFwKKyAgICAgICAgYmJiL0Jlc3Bva2UuaCBcCisg
ICAgICAgIGJiYi9CbGlnaHRlZC5oIFwKKyAgICAgICAgYmJiL0JvcmRlcmluZy5oCit9IGVsc2Ug
eworICAgIEhFQURFUlMgKz0gXAorICAgICAgICBiYmIveXl5L1lhbmtpbmcuaCBcCisgICAgICAg
IGJiYi95eXkvWW9kZWxpbmcuaCBcCisgICAgICAgIGJiYi96enovWmVicmEuaCBcCisgICAgICAg
IGJiYi96enovWm9uZS5oCit9CisKK2luY2x1ZGUoUXQtdW5zb3J0ZWQucHJpKQorCitIRUFERVJT
ICs9IFwKKyAgICBjY2MvQ2F0aGFydGljLmggXAorICAgIGNjYy9DZWxsb3BoYW5lLmggXAorICAg
IGNjYy9DaGFvdGljLmggXAorICAgIGNjYy9DaHV0enBhaC5oIFwKKyAgICBjY2MvQ2ljYWRlLmgg
XAorICAgIGNjYy9DaXJjdW12ZW50aW9uLmgKKworY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0VO
QUJMSU5HPTEpIHsKKyAgICBIRUFERVJTICs9IGRkZC9EZWx1c2lvbmFsLmgKKworICAgIFNPVVJD
RVMgKz0gXAorICAgICAgICBkZGQvRGFmZnkuY3BwIFwKKyAgICAgICAgZGRkL0Rhc3RhcmRseS5j
cHAgXAorICAgICAgICBkZGQvRGVsaXJpb3VzLmNwcCBcCisgICAgICAgIGRkZC9EZWx1c2lvbmFs
LmNwcAorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVj
dC91bml0dGVzdF9maWxlcy9RdC1zb3J0LnBybyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvUXQtc29ydC5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMGQyNGU2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvUXQtc29ydC5wcm8KQEAg
LTAsMCArMSw3MSBAQAorIyBXZWJDb3JlIC0gcW1ha2UgYnVpbGQgaW5mbworU09VUkNFUyArPSBc
CisgICAgYWFhL0FicmFjYWRhYnJhLmNwcCBcCisgICAgYWFhL0FsbGFraGF6YW0uY3BwIFwKKyAg
ICBhYWEvQW1iaWRleHRyb3VzLmNwcCBcCisgICAgYWFhL0FtcGhpYmlvdXMuY3BwIFwKKyAgICBh
YWEvQW1waGl0aGVhdHJlLmNwcCBcCisgICAgYmJiL3p6ei9aYXJhdGh1c3RyYS5jcHAgXAorICAg
IGJiYi9CZWxsaWdlcmVudC5jcHAgXAorICAgIGJiYi9CcnV0ZS5jcHAgXAorICAgIGNjYy9DZWxs
b3BoYW5lLmNwcCBcCisgICAgY2NjL0NoYW90aWMuY3BwIFwKKyAgICBjY2MvQ2h1dHpwYWguY3Bw
IFwKKyAgICBjY2MvQ2lyY3VtdmVudGlvbi5jcHAKKworcmFtamV0IHsKKyAgICBTT1VSQ0VTICs9
IFwKKyAgICAgICAgYmJiL3p6ei9aZXBoeXIuY3BwIFwKKyAgICAgICAgYmJiL0JlZnVkZGxlZC5j
cHAgXAorICAgICAgICBiYmIvQm9yZGVyaW5nLmNwcCBcCisgICAgICAgIGNjYy9DYWVzYXIuY3Bw
IFwKKyAgICAgICAgY2NjL0Nocm9tYXRpYy5jcHAgXAorICAgICAgICBjY2MvQ2xhbmRlc3RpbmUu
Y3BwCit9IGVsc2UgeworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBiYmIvenp6L1plYnJhLmNw
cCBcCisgICAgICAgIGJiYi96enovWm9uZS5jcHAKK30KKworSEVBREVSUyArPSBcCisgICAgYWFh
L0FicmFjYWRhYnJhLmggXAorICAgIGFhYS9BbGxha2hhemFtLmggXAorICAgIGFhYS9BbWJpZGV4
dHJvdXMuaCBcCisgICAgYWFhL0FtcGhpYmlvdXMuaCBcCisgICAgYWFhL0FtcGhpdGhlYXRyZS5o
IFwKKyAgICBhYWEvQXJjaGluZy5oCisKK3JhbWpldCB7CisgICAgSEVBREVSUyArPSBcCisgICAg
ICAgIGJiYi96enovWmVwaHlyLmggXAorICAgICAgICBiYmIvQmVmdWRkbGVkLmggXAorICAgICAg
ICBiYmIvQmVzcG9rZS5oIFwKKyAgICAgICAgYmJiL0JsaWdodGVkLmggXAorICAgICAgICBiYmIv
Qm9yZGVyaW5nLmgKK30gZWxzZSB7CisgICAgSEVBREVSUyArPSBcCisgICAgICAgIGJiYi95eXkv
WWFua2luZy5oIFwKKyAgICAgICAgYmJiL3l5eS9Zb2RlbGluZy5oIFwKKyAgICAgICAgYmJiL3p6
ei9aZWJyYS5oIFwKKyAgICAgICAgYmJiL3p6ei9ab25lLmgKK30KKworaW5jbHVkZShRdC11bnNv
cnRlZC5wcmkpCisKK0hFQURFUlMgKz0gXAorICAgIGNjYy9DYXRoYXJ0aWMuaCBcCisgICAgY2Nj
L0NlbGxvcGhhbmUuaCBcCisgICAgY2NjL0NoYW90aWMuaCBcCisgICAgY2NjL0NodXR6cGFoLmgg
XAorICAgIGNjYy9DaWNhZGUuaCBcCisgICAgY2NjL0NpcmN1bXZlbnRpb24uaAorCitjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfRU5BQkxJTkc9MSkgeworICAgIEhFQURFUlMgKz0gZGRkL0RlbHVz
aW9uYWwuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICAgIGRkZC9EYWZmeS5jcHAgXAorICAg
ICAgICBkZGQvRGFzdGFyZGx5LmNwcCBcCisgICAgICAgIGRkZC9EZWxpcmlvdXMuY3BwIFwKKyAg
ICAgICAgZGRkL0RlbHVzaW9uYWwuY3BwCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL1F0LXVuc29ydGVkLnByaSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvUXQtdW5z
b3J0ZWQucHJpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTZiMjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3Vu
aXR0ZXN0X2ZpbGVzL1F0LXVuc29ydGVkLnByaQpAQCAtMCwwICsxLDIxIEBACisjIFdlYkNvcmUg
LSBxbWFrZSBidWlsZCBpbmZvCisKK1NPVVJDRVMgKz0gXAorICAgIHRlc3QtcHJvamVjdC9leGlz
dGluZy5jcHAKKworSEVBREVSUyArPSBcCisgICAgdGVzdC1wcm9qZWN0L2V4aXN0aW5nLmgKKwor
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0VOQUJMSU5HPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgdGVzdC1wcm9qZWN0L2V4aXN0aW5nLWluLWZvbGRlci5jcHAKK30gZWxzZSB7Cisg
ICAgU09VUkNFUyArPSBcCisgICAgICAgIHRlc3QtcHJvamVjdC9zdWJmb2xkZXIvZXhpc3Rpbmct
aW4tZGlyLmNwcAorCisgICAgSEVBREVSUyArPSBcCisgICAgICAgIHRlc3QtcHJvamVjdC9zdWJm
b2xkZXIvZXhpc3RpbmctaW4tZGlyLmgKK30KKworSEVBREVSUyArPSBcCisgICAgdGVzdC1wcm9q
ZWN0L2V4aXN0aW5nLWluLWZvbGRlci5oCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL1F0LXVuc29ydGVkLnBybyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvUXQtdW5zb3J0
ZWQucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOGVmZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0
ZXN0X2ZpbGVzL1F0LXVuc29ydGVkLnBybwpAQCAtMCwwICsxLDc2IEBACisjIFdlYkNvcmUgLSBx
bWFrZSBidWlsZCBpbmZvCitTT1VSQ0VTICs9IFwKKyAgICBhYWEvQWxsYWtoYXphbS5jcHAgXAor
ICAgIGFhYS9BYnJhY2FkYWJyYS5jcHAgXAorICAgIGFhYS9BbXBoaXRoZWF0cmUuY3BwIFwKKyAg
ICBhYWEvQW1waGliaW91cy5jcHAgXAorICAgIFwKKyAgICBhYWEvQW1iaWRleHRyb3VzLmNwcCBc
CisgICAgYmJiL0JlbGxpZ2VyZW50LmNwcCBcCisgICAgYmJiL0JydXRlLmNwcCBcCisgICAgYmJi
L3p6ei9aYXJhdGh1c3RyYS5jcHAgXAorICAgICAgICAgICAgCityYW1qZXQgeworICAgIFNPVVJD
RVMgKz0gXAorICAgICAgICBiYmIvQm9yZGVyaW5nLmNwcCBcCisgICAgICAgIGJiYi9CZWZ1ZGRs
ZWQuY3BwIFwKKyAgICAgICAgYmJiL3p6ei9aZXBoeXIuY3BwIFwKKyAgICAgICAgY2NjL0NhZXNh
ci5jcHAgXAorICAgICAgICBjY2MvQ2hyb21hdGljLmNwcCBcCisgICAgICAgIGNjYy9DbGFuZGVz
dGluZS5jcHAKK30gZWxzZSB7CisgICAgU09VUkNFUyArPSBcCisgICAgICAgIGJiYi96enovWmVi
cmEuY3BwIFwKKyAgICAgICAgYmJiL3p6ei9ab25lLmNwcAorfQorCitTT1VSQ0VTICs9IFwKKyAg
ICBjY2MvQ2hhb3RpYy5jcHAgXAorICAgIGNjYy9DaXJjdW12ZW50aW9uLmNwcCBcCisgICAgY2Nj
L0NodXR6cGFoLmNwcCBcCisgICAgY2NjL0NlbGxvcGhhbmUuY3BwCisKK0hFQURFUlMgKz0gXAor
ICAgIGFhYS9BbGxha2hhemFtLmggXAorICAgIGFhYS9BYnJhY2FkYWJyYS5oIFwKKyAgICBhYWEv
QW1waGl0aGVhdHJlLmggXAorICAgIGFhYS9BbXBoaWJpb3VzLmggXAorICAgIGFhYS9BbWJpZGV4
dHJvdXMuaCBcCisgICAgYWFhL0FyY2hpbmcuaAorCityYW1qZXQgeworICAgIEhFQURFUlMgKz0g
XAorICAgICAgICBiYmIvQm9yZGVyaW5nLmggXAorICAgICAgICBiYmIvQmVmdWRkbGVkLmggXAor
ICAgICAgICBiYmIvenp6L1plcGh5ci5oIFwKKyAgICAgICAgYmJiL0Jlc3Bva2UuaCBcCisgICAg
ICAgIGJiYi9CbGlnaHRlZC5oCit9IGVsc2UgeworICAgIEhFQURFUlMgKz0gXAorICAgICAgICBi
YmIvenp6L1plYnJhLmggXAorICAgICAgICBiYmIvenp6L1pvbmUuaCBcCisgICAgICAgIGJiYi95
eXkvWWFua2luZy5oIFwKKyAgICAgICAgYmJiL3l5eS9Zb2RlbGluZy5oCit9CisKK2luY2x1ZGUo
UXQtdW5zb3J0ZWQucHJpKQorCitIRUFERVJTICs9IFwKKyAgICBjY2MvQ2F0aGFydGljLmggXAor
ICAgIGNjYy9DaGFvdGljLmggXAorICAgIGNjYy9DaXJjdW12ZW50aW9uLmggXAorICAgIGNjYy9D
aWNhZGUuaCBcCisgICAgY2NjL0NodXR6cGFoLmggXAorICAgIGNjYy9DZWxsb3BoYW5lLmgKKwor
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0VOQUJMSU5HPTEpIHsKKyAgICBIRUFERVJTICs9IFwK
KyAgICAgICAgZGRkL0RlbHVzaW9uYWwuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICAgIGRk
ZC9EYWZmeS5jcHAgXAorICAgICAgICBkZGQvRGVsdXNpb25hbC5jcHAgXAorICAgICAgICBkZGQv
RGVsaXJpb3VzLmNwcCBcCisgICAgICAgIGRkZC9EYXN0YXJkbHkuY3BwCit9CisKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMv
WGNvZGUtYWRkLWZpbGUucGJ4cHJvaiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3By
b2plY3QvdW5pdHRlc3RfZmlsZXMvWGNvZGUtYWRkLWZpbGUucGJ4cHJvagpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk1ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9maWxlcy9YY29kZS1hZGQt
ZmlsZS5wYnhwcm9qCkBAIC0wLDAgKzEsMjgyIEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2
ZVZlcnNpb24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDI7CisJ
b2JqZWN0cyA9IHsKKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDA0IC8qIGZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAvKiBmaWxlLmggKi87
IH07CisJCTE0MTQ1MUUxMTUyNTgyRjkwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1kaXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDRGRjUxNTI1
NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgKi87IH07CisJCTE0MTQ1MUUyMTUy
NTgzMDEwMDI1MDc3MSAvKiBleGlzdGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NEZFQzE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3Rpbmcu
Y3BwICovOyB9OworCQkxNDE0NTFFNzE1MjU4MzI0MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9s
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MTQ0RkYyMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuY3BwICovOyB9Owor
CQkxNDE0NTFFODE1MjU4MzJBMDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NEZGNDE1MjU3OUQ2MDAy
NTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi87IH07CisJCTE0MTQ1MUU5MTUyNTgzMkUwMDI1
MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkYxMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGluZy1p
bi1mb2xkZXIuaCAqLzsgfTsKKwkJMTQxNDUxRUExNTI1ODMzMzAwMjUwNzcxIC8qIGV4aXN0aW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NEZF
QjE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuaCAqLzsgfTsKKy8qIEVuZCBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJ
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzIC8qIGZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NEZF
QjE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gZXhpc3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRG
RUMxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4aXN0aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGV4aXN0aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTQxNDRGRjExNTI1Nzk5NjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZXhpc3RpbmctaW4tZm9sZGVyLmgiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NEZGMjE1MjU3OTk2MDAyNTA3NzEgLyogZXhp
c3RpbmctaW4tZm9sZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
ICJleGlzdGluZy1pbi1mb2xkZXIuY3BwIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTQxNDRGRjQxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSAiZXhpc3RpbmctaW4tZGlyLmgiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxNDE0NEZGNTE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4t
ZGlyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJleGlzdGluZy1p
bi1kaXIuY3BwIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDUwNEMxNTI1N0Qy
NDAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0LUluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9ICJ0ZXN0
LXRhcmdldC1JbmZvLnBsaXN0Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDUx
Q0ExNTI1N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9ICJ0ZXN0LXRhcmdldC5mcmFtZXdvcmsiOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLworCisvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CTE0MTQ1MUM4MTUyNTdFMUYwMDI1MDc3MSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LworCisvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMSAvKiBkZWVwbHkgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAvKiBuZXN0ZWQgKi8sCisJCQkpOworCQkJ
cGF0aCA9IGRlZXBseTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMiAvKiBuZXN0ZWQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAvKiBmaWxlLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IG5lc3RlZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCTE0MTQ0RkNEMTUyNTVBRDgwMDI1MDc3MSAvKiB1bml0dGVzdCAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMTQxNDUwMkMxNTI1N0FDRDAw
MjUwNzcxIC8qIHRlc3QtcHJvamVjdCAqLywKKwkJCQkxNDE0NTA0QTE1MjU3RDI0MDAyNTA3NzEg
LyogUHJvZHVjdHMgKi8sCisJCQkJMTQxNDUwNEMxNTI1N0QyNDAwMjUwNzcxIC8qIHRlc3QtdGFy
Z2V0LUluZm8ucGxpc3QgKi8sCisJCQkpOworCQkJbmFtZSA9ICJ1bml0dGVzdCI7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxNDE0NEZFRDE1MjU3OTcwMDAyNTA3NzEgLyog
dGVzdC1wcm9qZWN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQkxNDE0NEZGMjE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmNwcCAq
LywKKwkJCQkxNDE0NEZGMTE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmgg
Ki8sCisJCQkpOworCQkJbmFtZSA9ICJ0ZXN0LXByb2plY3QiOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKwkJMTQxNDRGRjMxNTI1Nzk5RDAwMjUwNzcxIC8qIHN1YmZvbGRlciAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAxIC8qIGRlZXBseSAqLywKKwkJCQkxNDE0NEZGNTE1MjU3OUQ2MDAyNTA3
NzEgLyogZXhpc3RpbmctaW4tZGlyLmNwcCAqLywKKwkJCQkxNDE0NEZGNDE1MjU3OUQ2MDAyNTA3
NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHN1YmZvbGRlcjsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTE0MTQ1MDJDMTUyNTdBQ0QwMDI1
MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTE0MTQ0RkYzMTUyNTc5OUQwMDI1MDc3MSAvKiBzdWJmb2xkZXIgKi8sCisJ
CQkJMTQxNDRGRUQxNTI1Nzk3MDAwMjUwNzcxIC8qIHRlc3QtcHJvamVjdCAqLywKKwkJCQkxNDE0
NEZFQzE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuY3BwICovLAorCQkJCTE0MTQ0RkVCMTUy
NTc5NTEwMDI1MDc3MSAvKiBleGlzdGluZy5oICovLAorCQkJKTsKKwkJCXBhdGggPSAidGVzdC1w
cm9qZWN0IjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTE0MTQ1MDRBMTUy
NTdEMjQwMDI1MDc3MSAvKiBQcm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMTQxNDUxQ0ExNTI1N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0
LmZyYW1ld29yayAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVn
aW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkxNDE0NTFDNTE1MjU3RTFGMDAy
NTA3NzEgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTE0MTQ1
MUU4MTUyNTgzMkEwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1kaXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTE0MTQ1MUU5MTUyNTgzMkUwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTE0MTQ1MUVBMTUyNTgzMzMwMDI1MDc3MSAvKiBleGlzdGluZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0IC8qIGZpbGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OworLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyog
QmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJMTQxNDUxQzkxNTI1N0UxRjAwMjUw
NzcxIC8qIHRlc3QtdGFyZ2V0ICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0MTQ1MUQzMTUyNTdFMkUwMDI1MDc3MSAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdC10YXJnZXQiICov
OworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMTQxNDUxQzUxNTI1N0UxRjAwMjUwNzcxIC8qIEhl
YWRlcnMgKi8sCisJCQkJMTQxNDUxQzYxNTI1N0UxRjAwMjUwNzcxIC8qIFJlc291cmNlcyAqLywK
KwkJCQkxNDE0NTFDNzE1MjU3RTFGMDAyNTA3NzEgLyogU291cmNlcyAqLywKKwkJCQkxNDE0NTFD
ODE1MjU3RTFGMDAyNTA3NzEgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVz
ID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gInRlc3Qt
dGFyZ2V0IjsKKwkJCXByb2R1Y3ROYW1lID0gInRlc3QtdGFyZ2V0IjsKKwkJCXByb2R1Y3RSZWZl
cmVuY2UgPSAxNDE0NTFDQTE1MjU3RTFGMDAyNTA3NzEgLyogdGVzdC10YXJnZXQuZnJhbWV3b3Jr
ICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5mcmFtZXdvcmsi
OworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WFByb2plY3Qgc2VjdGlvbiAqLworCQkxNDE0NEZDRjE1MjU1QUQ4MDAyNTA3NzEgLyogUHJvamVj
dCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IDE0MTQ0RkQyMTUyNTVBRDgwMDI1MDc3MSAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNp
b24gPSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKKwkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCUVuZ2xp
c2gsCisJCQkJSmFwYW5lc2UsCisJCQkJRnJlbmNoLAorCQkJCUdlcm1hbiwKKwkJCSk7CisJCQlt
YWluR3JvdXAgPSAxNDE0NEZDRDE1MjU1QUQ4MDAyNTA3NzEgLyogdW5pdHRlc3QgKi87CisJCQlw
cm9kdWN0UmVmR3JvdXAgPSAxNDE0NTA0QTE1MjU3RDI0MDAyNTA3NzEgLyogUHJvZHVjdHMgKi87
CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdl
dHMgPSAoCisJCQkJMTQxNDUxQzkxNTI1N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0ICovLAor
CQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJY
UmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTE0MTQ1MUM2MTUyNTdFMUYwMDI1MDc3
MSAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBC
WFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCisJCTE0MTQ1MUM3MTUyNTdFMUYwMDI1MDc3MSAvKiBTb3VyY2Vz
ICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMTQxNDUxRTExNTI1ODJGOTAwMjUw
NzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNDE0NTFFNzE1
MjU4MzI0MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTE0MTQ1MUUyMTUyNTgzMDEwMDI1MDc3MSAvKiBleGlzdGluZy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJ
fTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhD
QnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMTQxNDRGRDAxNTI1NUFEODAwMjUwNzcx
IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCX07CisJCQluYW1l
ID0gRGVidWc7CisJCX07CisJCTE0MTQ0RkQxMTUyNTVBRDgwMDI1MDc3MSAvKiBSZWxlYXNlICov
ID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0g
eworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7
CisJCX07CisJCTE0MTQ1MUNCMTUyNTdFMUYwMDI1MDc3MSAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdB
WVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJ
CQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZF
UlNJT04gPSAxOworCQkJCUZSQU1FV09SS19WRVJTSU9OID0gQTsKKwkJCQlHQ0NfRFlOQU1JQ19O
T19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBZRVM7CisJCQkJ
R0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwor
CQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9I
RUFERVIgPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvQXBwS2l0LmZyYW1ld29y
ay9IZWFkZXJzL0FwcEtpdC5oIjsKKwkJCQlJTkZPUExJU1RfRklMRSA9ICJ0ZXN0LXRhcmdldC1J
bmZvLnBsaXN0IjsKKwkJCQlJTlNUQUxMX1BBVEggPSAiJChIT01FKS9MaWJyYXJ5L0ZyYW1ld29y
a3MiOworCQkJCU9USEVSX0xERkxBR1MgPSAoCisJCQkJCSItZnJhbWV3b3JrIiwKKwkJCQkJRm91
bmRhdGlvbiwKKwkJCQkJIi1mcmFtZXdvcmsiLAorCQkJCQlBcHBLaXQsCisJCQkJKTsKKwkJCQlQ
UkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gInRlc3QtdGFyZ2V0IjsKKwkJCX07
CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTE0MTQ1MUNDMTUyNTdFMUYwMDI1MDc3MSAvKiBS
ZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNl
dHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNPUFlf
UEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJm
LXdpdGgtZHN5bSI7CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsKKwkJCQlE
WUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZSQU1FV09SS19WRVJTSU9OID0gQTsKKwkJ
CQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBOTzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5H
ID0gRzU7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKKwkJCQlHQ0Nf
UFJFRklYX0hFQURFUiA9ICIkKFNZU1RFTV9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrcy9BcHBLaXQu
ZnJhbWV3b3JrL0hlYWRlcnMvQXBwS2l0LmgiOworCQkJCUlORk9QTElTVF9GSUxFID0gInRlc3Qt
dGFyZ2V0LUluZm8ucGxpc3QiOworCQkJCUlOU1RBTExfUEFUSCA9ICIkKEhPTUUpL0xpYnJhcnkv
RnJhbWV3b3JrcyI7CisJCQkJT1RIRVJfTERGTEFHUyA9ICgKKwkJCQkJIi1mcmFtZXdvcmsiLAor
CQkJCQlGb3VuZGF0aW9uLAorCQkJCQkiLWZyYW1ld29yayIsCisJCQkJCUFwcEtpdCwKKwkJCQkp
OworCQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9EVUNUX05BTUUgPSAidGVzdC10YXJnZXQi
OworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9Owor
LyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENDb25m
aWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJCTE0MTQ0RkQyMTUyNTVBRDgwMDI1MDc3MSAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovID0gewor
CQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAo
CisJCQkJMTQxNDRGRDAxNTI1NUFEODAwMjUwNzcxIC8qIERlYnVnICovLAorCQkJCTE0MTQ0RkQx
MTUyNTVBRDgwMDI1MDc3MSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1
cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVh
c2U7CisJCX07CisJCTE0MTQ1MUQzMTUyNTdFMkUwMDI1MDc3MSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdC10YXJnZXQiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
MTQxNDUxQ0IxNTI1N0UxRjAwMjUwNzcxIC8qIERlYnVnICovLAorCQkJCTE0MTQ1MUNDMTUyNTdF
MUYwMDI1MDc3MSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJ
CX07CisvKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290T2Jq
ZWN0ID0gMTQxNDRGQ0YxNTI1NUFEODAwMjUwNzcxIC8qIFByb2plY3Qgb2JqZWN0ICovOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVz
dF9maWxlcy9YY29kZS1zb3J0LnBieHByb2ogYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL1hjb2RlLXNvcnQucGJ4cHJvagpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcyMjljCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9maWxlcy9YY29kZS1zb3J0
LnBieHByb2oKQEAgLTAsMCArMSwyNjIgQEAKKy8vICEkKlVURjgqJCEKK3sKKwlhcmNoaXZlVmVy
c2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9OworCW9iamVjdFZlcnNpb24gPSA0MjsKKwlvYmpl
Y3RzID0geworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkxNDE0NTFFMTE1
MjU4MkY5MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkY1MTUyNTc5RDYwMDI1MDc3MSAvKiBl
eGlzdGluZy1pbi1kaXIuY3BwICovOyB9OworCQkxNDE0NTFFMjE1MjU4MzAxMDAyNTA3NzEgLyog
ZXhpc3RpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQxNDRGRUMxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4aXN0aW5nLmNwcCAqLzsgfTsKKwkJMTQx
NDUxRTcxNTI1ODMyNDAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NEZGMjE1MjU3OTk2MDAy
NTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmNwcCAqLzsgfTsKKwkJMTQxNDUxRTgxNTI1ODMy
QTAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDRGRjQxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5n
LWluLWRpci5oICovOyB9OworCQkxNDE0NTFFOTE1MjU4MzJFMDAyNTA3NzEgLyogZXhpc3Rpbmct
aW4tZm9sZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDE0NEZGMTE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmggKi87IH07
CisJCTE0MTQ1MUVBMTUyNTgzMzMwMDI1MDc3MSAvKiBleGlzdGluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDRGRUIxNTI1Nzk1MTAwMjUwNzcx
IC8qIGV4aXN0aW5nLmggKi87IH07CisvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwor
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTE0MTQ0RkVCMTUyNTc5NTEw
MDI1MDc3MSAvKiBleGlzdGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBl
eGlzdGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NEZFQzE1MjU3OTUx
MDAyNTA3NzEgLyogZXhpc3RpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gZXhpc3RpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NEZG
MTE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9ICJleGlzdGluZy1pbi1mb2xkZXIuaCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0MTQ0RkYyMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1m
b2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImV4aXN0aW5n
LWluLWZvbGRlci5jcHAiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NEZGNDE1
MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9ICJleGlzdGluZy1pbi1kaXIuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTE0MTQ0RkY1MTUyNTc5RDYwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1kaXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImV4aXN0aW5nLWluLWRpci5jcHAi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NTA0QzE1MjU3RDI0MDAyNTA3NzEg
LyogdGVzdC10YXJnZXQtSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gInRlc3QtdGFyZ2V0LUlu
Zm8ucGxpc3QiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NTFDQTE1MjU3RTFG
MDAyNTA3NzEgLyogdGVzdC10YXJnZXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gInRlc3QtdGFyZ2V0LmZyYW1ld29yayI7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisK
Ky8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMTQxNDUxQzgx
NTI1N0UxRjAwMjUwNzcxIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
KwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJl
Z2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMTQxNDRGQ0QxNTI1NUFEODAwMjUwNzcxIC8qIHVu
aXR0ZXN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkx
NDE0NTAyQzE1MjU3QUNEMDAyNTA3NzEgLyogdGVzdC1wcm9qZWN0ICovLAorCQkJCTE0MTQ1MDRB
MTUyNTdEMjQwMDI1MDc3MSAvKiBQcm9kdWN0cyAqLywKKwkJCQkxNDE0NTA0QzE1MjU3RDI0MDAy
NTA3NzEgLyogdGVzdC10YXJnZXQtSW5mby5wbGlzdCAqLywKKwkJCSk7CisJCQluYW1lID0gInVu
aXR0ZXN0IjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTE0MTQ0RkVEMTUy
NTc5NzAwMDI1MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ0RkYyMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGlu
Zy1pbi1mb2xkZXIuY3BwICovLAorCQkJCTE0MTQ0RkYxMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlz
dGluZy1pbi1mb2xkZXIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gInRlc3QtcHJvamVjdCI7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxNDE0NEZGMzE1MjU3OTlEMDAyNTA3
NzEgLyogc3ViZm9sZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkxNDE0NEZGNTE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmNwcCAq
LywKKwkJCQkxNDE0NEZGNDE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IHN1YmZvbGRlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCTE0MTQ1MDJDMTUyNTdBQ0QwMDI1MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ0RkYzMTUyNTc5
OUQwMDI1MDc3MSAvKiBzdWJmb2xkZXIgKi8sCisJCQkJMTQxNDRGRUQxNTI1Nzk3MDAwMjUwNzcx
IC8qIHRlc3QtcHJvamVjdCAqLywKKwkJCQkxNDE0NEZFQzE1MjU3OTUxMDAyNTA3NzEgLyogZXhp
c3RpbmcuY3BwICovLAorCQkJCTE0MTQ0RkVCMTUyNTc5NTEwMDI1MDc3MSAvKiBleGlzdGluZy5o
ICovLAorCQkJKTsKKwkJCXBhdGggPSAidGVzdC1wcm9qZWN0IjsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CisJCTE0MTQ1MDRBMTUyNTdEMjQwMDI1MDc3MSAvKiBQcm9kdWN0cyAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMTQxNDUxQ0Ex
NTI1N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0LmZyYW1ld29yayAqLywKKwkJCSk7CisJCQlu
YW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5k
IFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLworCQkxNDE0NTFDNTE1MjU3RTFGMDAyNTA3NzEgLyogSGVhZGVycyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTE0MTQ1MUU4MTUyNTgzMkEwMDI1MDc3MSAvKiBleGlz
dGluZy1pbi1kaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQ1MUU5MTUyNTgzMkUwMDI1MDc3
MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQ1MUVBMTUy
NTgzMzMwMDI1MDc3MSAvKiBleGlzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkpOworCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYSGVh
ZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2Vj
dGlvbiAqLworCQkxNDE0NTFDOTE1MjU3RTFGMDAyNTA3NzEgLyogdGVzdC10YXJnZXQgKi8gPSB7
CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MTQxNDUxRDMxNTI1N0UyRTAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0LXRhcmdldCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJ
CQkxNDE0NTFDNTE1MjU3RTFGMDAyNTA3NzEgLyogSGVhZGVycyAqLywKKwkJCQkxNDE0NTFDNjE1
MjU3RTFGMDAyNTA3NzEgLyogUmVzb3VyY2VzICovLAorCQkJCTE0MTQ1MUM3MTUyNTdFMUYwMDI1
MDc3MSAvKiBTb3VyY2VzICovLAorCQkJCTE0MTQ1MUM4MTUyNTdFMUYwMDI1MDc3MSAvKiBGcmFt
ZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5j
aWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAidGVzdC10YXJnZXQiOworCQkJcHJvZHVjdE5hbWUg
PSAidGVzdC10YXJnZXQiOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDE0MTQ1MUNBMTUyNTdFMUYw
MDI1MDc3MSAvKiB0ZXN0LXRhcmdldC5mcmFtZXdvcmsgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yayI7CisJCX07CisvKiBFbmQgUEJYTmF0aXZl
VGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJCTE0
MTQ0RkNGMTUyNTVBRDgwMDI1MDc3MSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlzYSA9
IFBCWFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQxNDRGRDIxNTI1NUFE
ODAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2Vi
Q29yZSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOworCQkJZGV2
ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7
CisJCQlrbm93blJlZ2lvbnMgPSAoCisJCQkJRW5nbGlzaCwKKwkJCQlKYXBhbmVzZSwKKwkJCQlG
cmVuY2gsCisJCQkJR2VybWFuLAorCQkJKTsKKwkJCW1haW5Hcm91cCA9IDE0MTQ0RkNEMTUyNTVB
RDgwMDI1MDc3MSAvKiB1bml0dGVzdCAqLzsKKwkJCXByb2R1Y3RSZWZHcm91cCA9IDE0MTQ1MDRB
MTUyNTdEMjQwMDI1MDc3MSAvKiBQcm9kdWN0cyAqLzsKKwkJCXByb2plY3REaXJQYXRoID0gIiI7
CisJCQlwcm9qZWN0Um9vdCA9ICIiOworCQkJdGFyZ2V0cyA9ICgKKwkJCQkxNDE0NTFDOTE1MjU3
RTFGMDAyNTA3NzEgLyogdGVzdC10YXJnZXQgKi8sCisJCQkpOworCQl9OworLyogRW5kIFBCWFBy
b2plY3Qgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJMTQxNDUxQzYxNTI1N0UxRjAwMjUwNzcxIC8qIFJlc291cmNlcyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWFJlc291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0
aW9uICovCisKKy8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMTQx
NDUxQzcxNTI1N0UxRjAwMjUwNzcxIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQkxNDE0NTFFMTE1MjU4MkY5MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTE0MTQ1MUU3MTUyNTgzMjQwMDI1MDc3MSAvKiBleGlzdGlu
Zy1pbi1mb2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTQxNDUxRTIxNTI1ODMwMTAwMjUw
NzcxIC8qIGV4aXN0aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlv
biAqLworCQkxNDE0NEZEMDE1MjU1QUQ4MDAyNTA3NzEgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9Q
SEFTRV9TVFJJUCA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMTQxNDRG
RDExNTI1NUFEODAwMjUwNzcxIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9
IFlFUzsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMTQxNDUxQ0IxNTI1N0Ux
RjAwMjUwNzcxIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5P
OworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZF
UlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJRlJBTUVXT1JL
X1ZFUlNJT04gPSBBOworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFC
TEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJ
CQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklY
X0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICIkKFNZU1RFTV9MSUJSQVJZ
X0RJUikvRnJhbWV3b3Jrcy9BcHBLaXQuZnJhbWV3b3JrL0hlYWRlcnMvQXBwS2l0LmgiOworCQkJ
CUlORk9QTElTVF9GSUxFID0gInRlc3QtdGFyZ2V0LUluZm8ucGxpc3QiOworCQkJCUlOU1RBTExf
UEFUSCA9ICIkKEhPTUUpL0xpYnJhcnkvRnJhbWV3b3JrcyI7CisJCQkJT1RIRVJfTERGTEFHUyA9
ICgKKwkJCQkJIi1mcmFtZXdvcmsiLAorCQkJCQlGb3VuZGF0aW9uLAorCQkJCQkiLWZyYW1ld29y
ayIsCisJCQkJCUFwcEtpdCwKKwkJCQkpOworCQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9E
VUNUX05BTUUgPSAidGVzdC10YXJnZXQiOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsK
KwkJMTQxNDUxQ0MxNTI1N0UxRjAwMjUwNzcxIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NF
QVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlE
RUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlEWUxJQl9D
T01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7
CisJCQkJRlJBTUVXT1JLX1ZFUlNJT04gPSBBOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05U
SU5VRSA9IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfUFJFQ09NUElM
RV9QUkVGSVhfSEVBREVSID0gWUVTOworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gIiQoU1lTVEVN
X0xJQlJBUllfRElSKS9GcmFtZXdvcmtzL0FwcEtpdC5mcmFtZXdvcmsvSGVhZGVycy9BcHBLaXQu
aCI7CisJCQkJSU5GT1BMSVNUX0ZJTEUgPSAidGVzdC10YXJnZXQtSW5mby5wbGlzdCI7CisJCQkJ
SU5TVEFMTF9QQVRIID0gIiQoSE9NRSkvTGlicmFyeS9GcmFtZXdvcmtzIjsKKwkJCQlPVEhFUl9M
REZMQUdTID0gKAorCQkJCQkiLWZyYW1ld29yayIsCisJCQkJCUZvdW5kYXRpb24sCisJCQkJCSIt
ZnJhbWV3b3JrIiwKKwkJCQkJQXBwS2l0LAorCQkJCSk7CisJCQkJUFJFQklORElORyA9IE5POwor
CQkJCVBST0RVQ1RfTkFNRSA9ICJ0ZXN0LXRhcmdldCI7CisJCQkJWkVST19MSU5LID0gTk87CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRp
b24gc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8K
KwkJMTQxNDRGRDIxNTI1NUFEODAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25M
aXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxNDE0NEZEMDE1MjU1QUQ4MDAy
NTA3NzEgLyogRGVidWcgKi8sCisJCQkJMTQxNDRGRDExNTI1NUFEODAwMjUwNzcxIC8qIFJlbGVh
c2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMTQxNDUxRDMxNTI1
N0UyRTAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0ZXN0LXRhcmdldCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxNDE0NTFDQjE1MjU3RTFGMDAyNTA3NzEg
LyogRGVidWcgKi8sCisJCQkJMTQxNDUxQ0MxNTI1N0UxRjAwMjUwNzcxIC8qIFJlbGVhc2UgKi8s
CisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRp
b25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSAxNDE0NEZDRjE1MjU1QUQ4MDAy
NTA3NzEgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL1hjb2RlLXNvcnRlZC5wYnhw
cm9qIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9maWxl
cy9YY29kZS1zb3J0ZWQucGJ4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45ODQ2M2UzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vcHJvamVjdC91bml0dGVzdF9maWxlcy9YY29kZS1zb3J0ZWQucGJ4cHJvagpAQCAtMCwwICsx
LDI2MSBAQAorLy8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2Vz
ID0geworCX07CisJb2JqZWN0VmVyc2lvbiA9IDQyOworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2lu
IFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTE0MTQ1MUUxMTUyNTgyRjkwMDI1MDc3MSAvKiBl
eGlzdGluZy1pbi1kaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQxNDRGRjUxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAg
Ki87IH07CisJCTE0MTQ1MUUyMTUyNTgzMDEwMDI1MDc3MSAvKiBleGlzdGluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NEZFQzE1MjU3OTUx
MDAyNTA3NzEgLyogZXhpc3RpbmcuY3BwICovOyB9OworCQkxNDE0NTFFNzE1MjU4MzI0MDAyNTA3
NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkYyMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGluZy1p
bi1mb2xkZXIuY3BwICovOyB9OworCQkxNDE0NTFFODE1MjU4MzJBMDAyNTA3NzEgLyogZXhpc3Rp
bmctaW4tZGlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDE0NEZGNDE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi87IH07CisJ
CTE0MTQ1MUU5MTUyNTgzMkUwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkYxMTUyNTc5OTYw
MDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCAqLzsgfTsKKwkJMTQxNDUxRUExNTI1ODMz
MzAwMjUwNzcxIC8qIGV4aXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDE0NEZFQjE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuaCAqLzsg
fTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KKwkJMTQxNDRGRUIxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4aXN0aW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGV4aXN0aW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQ0RkVDMTUyNTc5NTEwMDI1MDc3MSAvKiBleGlzdGlu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBleGlzdGluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQ0RkYxMTUyNTc5OTYwMDI1MDc3MSAv
KiBleGlzdGluZy1pbi1mb2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
ImV4aXN0aW5nLWluLWZvbGRlci5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQx
NDRGRjIxNTI1Nzk5NjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZXhpc3RpbmctaW4tZm9sZGVyLmNwcCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQ0RkY0MTUyNTc5RDYwMDI1MDc3MSAvKiBl
eGlzdGluZy1pbi1kaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImV4aXN0
aW5nLWluLWRpci5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRGRjUxNTI1
NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSAiZXhpc3RpbmctaW4tZGlyLmNwcCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE0MTQ1MDRDMTUyNTdEMjQwMDI1MDc3MSAvKiB0ZXN0LXRhcmdldC1JbmZv
LnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5wbGlzdC54bWw7IHBhdGggPSAidGVzdC10YXJnZXQtSW5mby5wbGlzdCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQ1MUNBMTUyNTdFMUYwMDI1MDc3MSAvKiB0ZXN0LXRh
cmdldC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSAidGVz
dC10YXJnZXQuZnJhbWV3b3JrIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
Ky8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3
b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkxNDE0NTFDODE1MjU3RTFGMDAyNTA3NzEgLyog
RnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlv
biAqLworCQkxNDE0NEZDRDE1MjU1QUQ4MDAyNTA3NzEgPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ1MDJDMTUyNTdBQ0QwMDI1MDc3MSAvKiB0ZXN0LXBy
b2plY3QgKi8sCisJCQkJMTQxNDUwNEExNTI1N0QyNDAwMjUwNzcxIC8qIFByb2R1Y3RzICovLAor
CQkJCTE0MTQ1MDRDMTUyNTdEMjQwMDI1MDc3MSAvKiB0ZXN0LXRhcmdldC1JbmZvLnBsaXN0ICov
LAorCQkJKTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTE0MTQ0RkVEMTUy
NTc5NzAwMDI1MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ0RkYxMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGlu
Zy1pbi1mb2xkZXIuaCAqLywKKwkJCQkxNDE0NEZGMjE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3Rp
bmctaW4tZm9sZGVyLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gInRlc3QtcHJvamVjdCI7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxNDE0NEZGMzE1MjU3OTlEMDAyNTA3
NzEgLyogc3ViZm9sZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkxNDE0NEZGNDE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi8s
CisJCQkJMTQxNDRGRjUxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgKi8s
CisJCQkpOworCQkJcGF0aCA9IHN1YmZvbGRlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCTE0MTQ1MDJDMTUyNTdBQ0QwMDI1MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ0RkYzMTUyNTc5
OUQwMDI1MDc3MSAvKiBzdWJmb2xkZXIgKi8sCisJCQkJMTQxNDRGRUQxNTI1Nzk3MDAwMjUwNzcx
IC8qIHRlc3QtcHJvamVjdCAqLywKKwkJCQkxNDE0NEZFQjE1MjU3OTUxMDAyNTA3NzEgLyogZXhp
c3RpbmcuaCAqLywKKwkJCQkxNDE0NEZFQzE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuY3Bw
ICovLAorCQkJKTsKKwkJCXBhdGggPSAidGVzdC1wcm9qZWN0IjsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CisJCTE0MTQ1MDRBMTUyNTdEMjQwMDI1MDc3MSAvKiBQcm9kdWN0cyAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMTQxNDUxQ0Ex
NTI1N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0LmZyYW1ld29yayAqLywKKwkJCSk7CisJCQlu
YW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5k
IFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLworCQkxNDE0NTFDNTE1MjU3RTFGMDAyNTA3NzEgLyogSGVhZGVycyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTE0MTQ1MUU4MTUyNTgzMkEwMDI1MDc3MSAvKiBleGlz
dGluZy1pbi1kaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQ1MUU5MTUyNTgzMkUwMDI1MDc3
MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQ1MUVBMTUy
NTgzMzMwMDI1MDc3MSAvKiBleGlzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkpOworCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYSGVh
ZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2Vj
dGlvbiAqLworCQkxNDE0NTFDOTE1MjU3RTFGMDAyNTA3NzEgLyogdGVzdC10YXJnZXQgKi8gPSB7
CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MTQxNDUxRDMxNTI1N0UyRTAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0LXRhcmdldCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJ
CQkxNDE0NTFDNTE1MjU3RTFGMDAyNTA3NzEgLyogSGVhZGVycyAqLywKKwkJCQkxNDE0NTFDNjE1
MjU3RTFGMDAyNTA3NzEgLyogUmVzb3VyY2VzICovLAorCQkJCTE0MTQ1MUM3MTUyNTdFMUYwMDI1
MDc3MSAvKiBTb3VyY2VzICovLAorCQkJCTE0MTQ1MUM4MTUyNTdFMUYwMDI1MDc3MSAvKiBGcmFt
ZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5j
aWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAidGVzdC10YXJnZXQiOworCQkJcHJvZHVjdE5hbWUg
PSAidGVzdC10YXJnZXQiOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDE0MTQ1MUNBMTUyNTdFMUYw
MDI1MDc3MSAvKiB0ZXN0LXRhcmdldC5mcmFtZXdvcmsgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yayI7CisJCX07CisvKiBFbmQgUEJYTmF0aXZl
VGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJCTE0
MTQ0RkNGMTUyNTVBRDgwMDI1MDc3MSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlzYSA9
IFBCWFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQxNDRGRDIxNTI1NUFE
ODAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiWGNv
ZGUtdW5zb3J0ZWQiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsK
KwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGlu
Z3MgPSAwOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCUVuZ2xpc2gsCisJCQkJSmFwYW5lc2Us
CisJCQkJRnJlbmNoLAorCQkJCUdlcm1hbiwKKwkJCSk7CisJCQltYWluR3JvdXAgPSAxNDE0NEZD
RDE1MjU1QUQ4MDAyNTA3NzE7CisJCQlwcm9kdWN0UmVmR3JvdXAgPSAxNDE0NTA0QTE1MjU3RDI0
MDAyNTA3NzEgLyogUHJvZHVjdHMgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJv
amVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJMTQxNDUxQzkxNTI1N0UxRjAwMjUw
NzcxIC8qIHRlc3QtdGFyZ2V0ICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNl
Y3Rpb24gKi8KKworLyogQmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CTE0MTQ1MUM2MTUyNTdFMUYwMDI1MDc3MSAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhSZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
KwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOworCQl9OworLyogRW5kIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwor
CisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTE0MTQ1MUM3MTUy
NTdFMUYwMDI1MDc3MSAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJMTQxNDUxRTExNTI1ODJGOTAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxNDE0NTFFMjE1MjU4MzAxMDAyNTA3NzEgLyogZXhpc3RpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMTQxNDUxRTcxNTI1ODMyNDAwMjUwNzcxIC8qIGV4aXN0aW5nLWlu
LWZvbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJ
MTQxNDRGRDAxNTI1NUFEODAwMjUwNzcxIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RS
SVAgPSBOTzsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTE0MTQ0RkQxMTUyNTVB
RDgwMDI1MDc3MSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRp
b247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJ
CQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTE0MTQ1MUNCMTUyNTdFMUYwMDI1MDc3
MSAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlD
T1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0g
MTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZSQU1FV09SS19WRVJTSU9O
ID0gQTsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9B
TkRfQ09OVElOVUUgPSBZRVM7CisJCQkJR0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19P
UFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIg
PSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0Zy
YW1ld29ya3MvQXBwS2l0LmZyYW1ld29yay9IZWFkZXJzL0FwcEtpdC5oIjsKKwkJCQlJTkZPUExJ
U1RfRklMRSA9ICJ0ZXN0LXRhcmdldC1JbmZvLnBsaXN0IjsKKwkJCQlJTlNUQUxMX1BBVEggPSAi
JChIT01FKS9MaWJyYXJ5L0ZyYW1ld29ya3MiOworCQkJCU9USEVSX0xERkxBR1MgPSAoCisJCQkJ
CSItZnJhbWV3b3JrIiwKKwkJCQkJRm91bmRhdGlvbiwKKwkJCQkJIi1mcmFtZXdvcmsiLAorCQkJ
CQlBcHBLaXQsCisJCQkJKTsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1F
ID0gInRlc3QtdGFyZ2V0IjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTE0MTQ1
MUNDMTUyNTdFMUYwMDI1MDc3MSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNF
Ul9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5G
T1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJRFlMSUJfQ09NUEFUSUJJ
TElUWV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZS
QU1FV09SS19WRVJTSU9OID0gQTsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBO
TzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklY
X0hFQURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICIkKFNZU1RFTV9MSUJSQVJZ
X0RJUikvRnJhbWV3b3Jrcy9BcHBLaXQuZnJhbWV3b3JrL0hlYWRlcnMvQXBwS2l0LmgiOworCQkJ
CUlORk9QTElTVF9GSUxFID0gInRlc3QtdGFyZ2V0LUluZm8ucGxpc3QiOworCQkJCUlOU1RBTExf
UEFUSCA9ICIkKEhPTUUpL0xpYnJhcnkvRnJhbWV3b3JrcyI7CisJCQkJT1RIRVJfTERGTEFHUyA9
ICgKKwkJCQkJIi1mcmFtZXdvcmsiLAorCQkJCQlGb3VuZGF0aW9uLAorCQkJCQkiLWZyYW1ld29y
ayIsCisJCQkJCUFwcEtpdCwKKwkJCQkpOworCQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9E
VUNUX05BTUUgPSAidGVzdC10YXJnZXQiOworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJ
CW5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rp
b24gKi8KKworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJCTE0MTQ0
RkQyMTUyNTVBRDgwMDI1MDc3MSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFBy
b2plY3QgIlhjb2RlLXVuc29ydGVkIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxp
c3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTE0MTQ0RkQwMTUyNTVBRDgwMDI1
MDc3MSAvKiBEZWJ1ZyAqLywKKwkJCQkxNDE0NEZEMTE1MjU1QUQ4MDAyNTA3NzEgLyogUmVsZWFz
ZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQkxNDE0NTFEMzE1MjU3
RTJFMDAyNTA3NzEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3QtdGFyZ2V0IiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJ
CQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTE0MTQ1MUNCMTUyNTdFMUYwMDI1MDc3MSAv
KiBEZWJ1ZyAqLywKKwkJCQkxNDE0NTFDQzE1MjU3RTFGMDAyNTA3NzEgLyogUmVsZWFzZSAqLywK
KwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJhdGlv
bkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9IDE0MTQ0RkNGMTUyNTVBRDgwMDI1
MDc3MSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvWGNvZGUtdW5zb3J0ZWQucGJ4
cHJvaiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmls
ZXMvWGNvZGUtdW5zb3J0ZWQucGJ4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yMGZiN2ExCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vcHJvamVjdC91bml0dGVzdF9maWxlcy9YY29kZS11bnNvcnRlZC5wYnhwcm9qCkBAIC0w
LDAgKzEsMjYyIEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNs
YXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDI7CisJb2JqZWN0cyA9IHsKKworLyog
QmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMTQxNDUxRTExNTI1ODJGOTAwMjUwNzcx
IC8qIGV4aXN0aW5nLWluLWRpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDE0NEZGNTE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGly
LmNwcCAqLzsgfTsKKwkJMTQxNDUxRTIxNTI1ODMwMTAwMjUwNzcxIC8qIGV4aXN0aW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkVDMTUy
NTc5NTEwMDI1MDc3MSAvKiBleGlzdGluZy5jcHAgKi87IH07CisJCTE0MTQ1MUU3MTUyNTgzMjQw
MDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDRGRjIxNTI1Nzk5NjAwMjUwNzcxIC8qIGV4aXN0
aW5nLWluLWZvbGRlci5jcHAgKi87IH07CisJCTE0MTQ1MUU4MTUyNTgzMkEwMDI1MDc3MSAvKiBl
eGlzdGluZy1pbi1kaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0MTQ0RkY0MTUyNTc5RDYwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1kaXIuaCAqLzsg
fTsKKwkJMTQxNDUxRTkxNTI1ODMyRTAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDRGRjExNTI1
Nzk5NjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5oICovOyB9OworCQkxNDE0NTFFQTE1
MjU4MzMzMDAyNTA3NzEgLyogZXhpc3RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkVCMTUyNTc5NTEwMDI1MDc3MSAvKiBleGlzdGluZy5o
ICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZp
bGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkxNDE0NEZFQjE1MjU3OTUxMDAyNTA3NzEgLyogZXhp
c3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZXhpc3RpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRGRUMxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4
aXN0aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGV4aXN0aW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRGRjExNTI1Nzk5NjAwMjUw
NzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSAiZXhpc3RpbmctaW4tZm9sZGVyLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxNDE0NEZGMjE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZm9sZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJleGlzdGluZy1pbi1mb2xkZXIuY3Bw
Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRGRjQxNTI1NzlENjAwMjUwNzcx
IC8qIGV4aXN0aW5nLWluLWRpci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAi
ZXhpc3RpbmctaW4tZGlyLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDE0NEZG
NTE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJleGlzdGluZy1pbi1kaXIuY3BwIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDUwNEMxNTI1N0QyNDAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0
LUluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9ICJ0ZXN0LXRhcmdldC1JbmZvLnBsaXN0Ijsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDUxQ0ExNTI1N0UxRjAwMjUwNzcxIC8qIHRl
c3QtdGFyZ2V0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
ICJ0ZXN0LXRhcmdldC5mcmFtZXdvcmsiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OworLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhG
cmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTE0MTQ1MUM4MTUyNTdFMUYwMDI1MDc3
MSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7
CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOwor
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQg
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhHcm91cCBz
ZWN0aW9uICovCisJCTE0MTQ0RkNEMTUyNTVBRDgwMDI1MDc3MSA9IC8qIHVuaXR0ZXN0ICovIHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMTQxNDUwMkMxNTI1N0FD
RDAwMjUwNzcxIC8qIHRlc3QtcHJvamVjdCAqLywKKwkJCQkxNDE0NTA0QTE1MjU3RDI0MDAyNTA3
NzEgLyogUHJvZHVjdHMgKi8sCisJCQkJMTQxNDUwNEMxNTI1N0QyNDAwMjUwNzcxIC8qIHRlc3Qt
dGFyZ2V0LUluZm8ucGxpc3QgKi8sCisJCQkpOworICAgICAgICAgICAgbmFtZSA9ICJ1bml0dGVz
dCI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxNDE0NEZFRDE1MjU3OTcw
MDAyNTA3NzEgLyogdGVzdC1wcm9qZWN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkxNDE0NEZGMTE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4t
Zm9sZGVyLmggKi8sCisJCQkJMTQxNDRGRjIxNTI1Nzk5NjAwMjUwNzcxIC8qIGV4aXN0aW5nLWlu
LWZvbGRlci5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9ICJ0ZXN0LXByb2plY3QiOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMTQxNDRGRjMxNTI1Nzk5RDAwMjUwNzcxIC8q
IHN1YmZvbGRlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMTQxNDRGRjQxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5oICovLAorCQkJ
CTE0MTQ0RkY1MTUyNTc5RDYwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1kaXIuY3BwICovLAorCQkJ
KTsKKwkJCXBhdGggPSBzdWJmb2xkZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OworCQkxNDE0NTAyQzE1MjU3QUNEMDAyNTA3NzEgLyogdGVzdC1wcm9qZWN0ICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxNDE0NEZGMzE1MjU3OTlEMDAy
NTA3NzEgLyogc3ViZm9sZGVyICovLAorCQkJCTE0MTQ0RkVEMTUyNTc5NzAwMDI1MDc3MSAvKiB0
ZXN0LXByb2plY3QgKi8sCisJCQkJMTQxNDRGRUIxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4aXN0aW5n
LmggKi8sCisJCQkJMTQxNDRGRUMxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4aXN0aW5nLmNwcCAqLywK
KwkJCSk7CisJCQlwYXRoID0gInRlc3QtcHJvamVjdCI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQkxNDE0NTA0QTE1MjU3RDI0MDAyNTA3NzEgLyogUHJvZHVjdHMgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ1MUNBMTUyNTdF
MUYwMDI1MDc3MSAvKiB0ZXN0LXRhcmdldC5mcmFtZXdvcmsgKi8sCisJCQkpOworCQkJbmFtZSA9
IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhH
cm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24g
Ki8KKwkJMTQxNDUxQzUxNTI1N0UxRjAwMjUwNzcxIC8qIEhlYWRlcnMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CisJCQlmaWxlcyA9ICgKKwkJCQkxNDE0NTFFODE1MjU4MzJBMDAyNTA3NzEgLyogZXhpc3Rpbmct
aW4tZGlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDE0NTFFOTE1MjU4MzJFMDAyNTA3NzEgLyog
ZXhpc3RpbmctaW4tZm9sZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDE0NTFFQTE1MjU4MzMz
MDAyNTA3NzEgLyogZXhpc3RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEhlYWRlcnNC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24g
Ki8KKwkJMTQxNDUxQzkxNTI1N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0ICovID0geworCQkJ
aXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0MTQ1
MUQzMTUyNTdFMkUwMDI1MDc3MSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5h
dGl2ZVRhcmdldCAidGVzdC10YXJnZXQiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMTQx
NDUxQzUxNTI1N0UxRjAwMjUwNzcxIC8qIEhlYWRlcnMgKi8sCisJCQkJMTQxNDUxQzYxNTI1N0Ux
RjAwMjUwNzcxIC8qIFJlc291cmNlcyAqLywKKwkJCQkxNDE0NTFDNzE1MjU3RTFGMDAyNTA3NzEg
LyogU291cmNlcyAqLywKKwkJCQkxNDE0NTFDODE1MjU3RTFGMDAyNTA3NzEgLyogRnJhbWV3b3Jr
cyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9
ICgKKwkJCSk7CisJCQluYW1lID0gInRlc3QtdGFyZ2V0IjsKKwkJCXByb2R1Y3ROYW1lID0gInRl
c3QtdGFyZ2V0IjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAxNDE0NTFDQTE1MjU3RTFGMDAyNTA3
NzEgLyogdGVzdC10YXJnZXQuZnJhbWV3b3JrICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFw
cGxlLnByb2R1Y3QtdHlwZS5mcmFtZXdvcmsiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdl
dCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQkxNDE0NEZD
RjE1MjU1QUQ4MDAyNTA3NzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQ
cm9qZWN0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0MTQ0RkQyMTUyNTVBRDgwMDI1
MDc3MSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIlhjb2RlLXVu
c29ydGVkIiAqLzsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CisJCQlk
ZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CisJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0g
MDsKKwkJCWtub3duUmVnaW9ucyA9ICgKKwkJCQlFbmdsaXNoLAorCQkJCUphcGFuZXNlLAorCQkJ
CUZyZW5jaCwKKwkJCQlHZXJtYW4sCisJCQkpOworCQkJbWFpbkdyb3VwID0gMTQxNDRGQ0QxNTI1
NUFEODAwMjUwNzcxOworCQkJcHJvZHVjdFJlZkdyb3VwID0gMTQxNDUwNEExNTI1N0QyNDAwMjUw
NzcxIC8qIFByb2R1Y3RzICovOworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJCXByb2plY3RS
b290ID0gIiI7CisJCQl0YXJnZXRzID0gKAorCQkJCTE0MTQ1MUM5MTUyNTdFMUYwMDI1MDc3MSAv
KiB0ZXN0LXRhcmdldCAqLywKKwkJCSk7CisJCX07CisvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkxNDE0
NTFDNjE1MjU3RTFGMDAyNTA3NzEgLyogUmVzb3VyY2VzICovID0geworCQkJaXNhID0gUEJYUmVz
b3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlm
aWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKKwkJfTsKKy8qIEVuZCBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyog
QmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkxNDE0NTFDNzE1MjU3RTFG
MDAyNTA3NzEgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNl
OworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTE0
MTQ1MUUxMTUyNTgyRjkwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1kaXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMTQxNDUxRTIxNTI1ODMwMTAwMjUwNzcxIC8qIGV4aXN0aW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTE0MTQ1MUU3MTUyNTgzMjQwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJCTE0MTQ0
RkQwMTUyNTVBRDgwMDI1MDc3MSAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0g
Tk87CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkxNDE0NEZEMTE1MjU1QUQ4MDAy
NTA3NzEgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwor
CQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJfTsK
KwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkxNDE0NTFDQjE1MjU3RTFGMDAyNTA3NzEgLyog
RGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ09QWV9Q
SEFTRV9TVFJJUCA9IE5POworCQkJCURZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTiA9IDE7CisJ
CQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlGUkFNRVdPUktfVkVSU0lPTiA9IEE7
CisJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NP
TlRJTlVFID0gWUVTOworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfT1BUSU1J
WkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVT
OworCQkJCUdDQ19QUkVGSVhfSEVBREVSID0gIiQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFtZXdv
cmtzL0FwcEtpdC5mcmFtZXdvcmsvSGVhZGVycy9BcHBLaXQuaCI7CisJCQkJSU5GT1BMSVNUX0ZJ
TEUgPSAidGVzdC10YXJnZXQtSW5mby5wbGlzdCI7CisJCQkJSU5TVEFMTF9QQVRIID0gIiQoSE9N
RSkvTGlicmFyeS9GcmFtZXdvcmtzIjsKKwkJCQlPVEhFUl9MREZMQUdTID0gKAorCQkJCQkiLWZy
YW1ld29yayIsCisJCQkJCUZvdW5kYXRpb24sCisJCQkJCSItZnJhbWV3b3JrIiwKKwkJCQkJQXBw
S2l0LAorCQkJCSk7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0
ZXN0LXRhcmdldCI7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkxNDE0NTFDQzE1
MjU3RTFGMDAyNTA3NzEgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFU
SFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCURFQlVHX0lORk9STUFU
SU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJCURZTElCX0NPTVBBVElCSUxJVFlf
VkVSU0lPTiA9IDE7CisJCQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlGUkFNRVdP
UktfVkVSU0lPTiA9IEE7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJ
CQkJR0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFE
RVIgPSBZRVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiJChTWVNURU1fTElCUkFSWV9ESVIp
L0ZyYW1ld29ya3MvQXBwS2l0LmZyYW1ld29yay9IZWFkZXJzL0FwcEtpdC5oIjsKKwkJCQlJTkZP
UExJU1RfRklMRSA9ICJ0ZXN0LXRhcmdldC1JbmZvLnBsaXN0IjsKKwkJCQlJTlNUQUxMX1BBVEgg
PSAiJChIT01FKS9MaWJyYXJ5L0ZyYW1ld29ya3MiOworCQkJCU9USEVSX0xERkxBR1MgPSAoCisJ
CQkJCSItZnJhbWV3b3JrIiwKKwkJCQkJRm91bmRhdGlvbiwKKwkJCQkJIi1mcmFtZXdvcmsiLAor
CQkJCQlBcHBLaXQsCisJCQkJKTsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9O
QU1FID0gInRlc3QtdGFyZ2V0IjsKKwkJCQlaRVJPX0xJTksgPSBOTzsKKwkJCX07CisJCQluYW1l
ID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICov
CisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQkxNDE0NEZEMjE1
MjU1QUQ4MDAyNTA3NzEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJYY29kZS11bnNvcnRlZCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxNDE0NEZEMDE1MjU1QUQ4MDAyNTA3NzEg
LyogRGVidWcgKi8sCisJCQkJMTQxNDRGRDExNTI1NUFEODAwMjUwNzcxIC8qIFJlbGVhc2UgKi8s
CisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMTQxNDUxRDMxNTI1N0UyRTAw
MjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0
ZXN0LXRhcmdldCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxNDE0NTFDQjE1MjU3RTFGMDAyNTA3NzEgLyogRGVi
dWcgKi8sCisJCQkJMTQxNDUxQ0MxNTI1N0UxRjAwMjUwNzcxIC8qIFJlbGVhc2UgKi8sCisJCQkp
OworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0
IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSAxNDE0NEZDRjE1MjU1QUQ4MDAyNTA3NzEg
LyogUHJvamVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL1hjb2RlLXVuc29ydGVkLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0
L3VuaXR0ZXN0X2ZpbGVzL1hjb2RlLXVuc29ydGVkLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0NjNlMwotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmls
ZXMvWGNvZGUtdW5zb3J0ZWQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMCwwICsxLDI2
MSBAQAorLy8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2VzID0g
eworCX07CisJb2JqZWN0VmVyc2lvbiA9IDQyOworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2luIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTE0MTQ1MUUxMTUyNTgyRjkwMDI1MDc3MSAvKiBleGlz
dGluZy1pbi1kaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQxNDRGRjUxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgKi87
IH07CisJCTE0MTQ1MUUyMTUyNTgzMDEwMDI1MDc3MSAvKiBleGlzdGluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NEZFQzE1MjU3OTUxMDAy
NTA3NzEgLyogZXhpc3RpbmcuY3BwICovOyB9OworCQkxNDE0NTFFNzE1MjU4MzI0MDAyNTA3NzEg
LyogZXhpc3RpbmctaW4tZm9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkYyMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1m
b2xkZXIuY3BwICovOyB9OworCQkxNDE0NTFFODE1MjU4MzJBMDAyNTA3NzEgLyogZXhpc3Rpbmct
aW4tZGlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDE0NEZGNDE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi87IH07CisJCTE0
MTQ1MUU5MTUyNTgzMkUwMDI1MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0RkYxMTUyNTc5OTYwMDI1
MDc3MSAvKiBleGlzdGluZy1pbi1mb2xkZXIuaCAqLzsgfTsKKwkJMTQxNDUxRUExNTI1ODMzMzAw
MjUwNzcxIC8qIGV4aXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDE0NEZFQjE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuaCAqLzsgfTsK
Ky8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KKwkJMTQxNDRGRUIxNTI1Nzk1MTAwMjUwNzcxIC8qIGV4aXN0aW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGV4aXN0aW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0MTQ0RkVDMTUyNTc5NTEwMDI1MDc3MSAvKiBleGlzdGluZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBleGlzdGluZy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQ0RkYxMTUyNTc5OTYwMDI1MDc3MSAvKiBl
eGlzdGluZy1pbi1mb2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImV4
aXN0aW5nLWluLWZvbGRlci5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRG
RjIxNTI1Nzk5NjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZvbGRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZXhpc3RpbmctaW4tZm9sZGVyLmNwcCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTQ0RkY0MTUyNTc5RDYwMDI1MDc3MSAvKiBleGlz
dGluZy1pbi1kaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImV4aXN0aW5n
LWluLWRpci5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxNDRGRjUxNTI1NzlE
NjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSAiZXhpc3RpbmctaW4tZGlyLmNwcCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0MTQ1MDRDMTUyNTdEMjQwMDI1MDc3MSAvKiB0ZXN0LXRhcmdldC1JbmZvLnBs
aXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5wbGlzdC54bWw7IHBhdGggPSAidGVzdC10YXJnZXQtSW5mby5wbGlzdCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE0MTQ1MUNBMTUyNTdFMUYwMDI1MDc3MSAvKiB0ZXN0LXRhcmdl
dC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSAidGVzdC10
YXJnZXQuZnJhbWV3b3JrIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKy8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkxNDE0NTFDODE1MjU3RTFGMDAyNTA3NzEgLyogRnJh
bWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAq
LworCQkxNDE0NEZDRDE1MjU1QUQ4MDAyNTA3NzEgPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTE0MTQ1MDJDMTUyNTdBQ0QwMDI1MDc3MSAvKiB0ZXN0LXByb2pl
Y3QgKi8sCisJCQkJMTQxNDUwNEExNTI1N0QyNDAwMjUwNzcxIC8qIFByb2R1Y3RzICovLAorCQkJ
CTE0MTQ1MDRDMTUyNTdEMjQwMDI1MDc3MSAvKiB0ZXN0LXRhcmdldC1JbmZvLnBsaXN0ICovLAor
CQkJKTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTE0MTQ0RkVEMTUyNTc5
NzAwMDI1MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTE0MTQ0RkYxMTUyNTc5OTYwMDI1MDc3MSAvKiBleGlzdGluZy1p
bi1mb2xkZXIuaCAqLywKKwkJCQkxNDE0NEZGMjE1MjU3OTk2MDAyNTA3NzEgLyogZXhpc3Rpbmct
aW4tZm9sZGVyLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gInRlc3QtcHJvamVjdCI7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxNDE0NEZGMzE1MjU3OTlEMDAyNTA3NzEg
Lyogc3ViZm9sZGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQkxNDE0NEZGNDE1MjU3OUQ2MDAyNTA3NzEgLyogZXhpc3RpbmctaW4tZGlyLmggKi8sCisJ
CQkJMTQxNDRGRjUxNTI1NzlENjAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgKi8sCisJ
CQkpOworCQkJcGF0aCA9IHN1YmZvbGRlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCTE0MTQ1MDJDMTUyNTdBQ0QwMDI1MDc3MSAvKiB0ZXN0LXByb2plY3QgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE0MTQ0RkYzMTUyNTc5OUQw
MDI1MDc3MSAvKiBzdWJmb2xkZXIgKi8sCisJCQkJMTQxNDRGRUQxNTI1Nzk3MDAwMjUwNzcxIC8q
IHRlc3QtcHJvamVjdCAqLywKKwkJCQkxNDE0NEZFQjE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3Rp
bmcuaCAqLywKKwkJCQkxNDE0NEZFQzE1MjU3OTUxMDAyNTA3NzEgLyogZXhpc3RpbmcuY3BwICov
LAorCQkJKTsKKwkJCXBhdGggPSAidGVzdC1wcm9qZWN0IjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCTE0MTQ1MDRBMTUyNTdEMjQwMDI1MDc3MSAvKiBQcm9kdWN0cyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMTQxNDUxQ0ExNTI1
N0UxRjAwMjUwNzcxIC8qIHRlc3QtdGFyZ2V0LmZyYW1ld29yayAqLywKKwkJCSk7CisJCQluYW1l
ID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBC
WEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLworCQkxNDE0NTFDNTE1MjU3RTFGMDAyNTA3NzEgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlz
YSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKKwkJCWZpbGVzID0gKAorCQkJCTE0MTQ1MUU4MTUyNTgzMkEwMDI1MDc3MSAvKiBleGlzdGlu
Zy1pbi1kaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQ1MUU5MTUyNTgzMkUwMDI1MDc3MSAv
KiBleGlzdGluZy1pbi1mb2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MTQ1MUVBMTUyNTgz
MzMwMDI1MDc3MSAvKiBleGlzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYSGVhZGVy
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlv
biAqLworCQkxNDE0NTFDOTE1MjU3RTFGMDAyNTA3NzEgLyogdGVzdC10YXJnZXQgKi8gPSB7CisJ
CQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQx
NDUxRDMxNTI1N0UyRTAwMjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJY
TmF0aXZlVGFyZ2V0ICJ0ZXN0LXRhcmdldCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkx
NDE0NTFDNTE1MjU3RTFGMDAyNTA3NzEgLyogSGVhZGVycyAqLywKKwkJCQkxNDE0NTFDNjE1MjU3
RTFGMDAyNTA3NzEgLyogUmVzb3VyY2VzICovLAorCQkJCTE0MTQ1MUM3MTUyNTdFMUYwMDI1MDc3
MSAvKiBTb3VyY2VzICovLAorCQkJCTE0MTQ1MUM4MTUyNTdFMUYwMDI1MDc3MSAvKiBGcmFtZXdv
cmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVz
ID0gKAorCQkJKTsKKwkJCW5hbWUgPSAidGVzdC10YXJnZXQiOworCQkJcHJvZHVjdE5hbWUgPSAi
dGVzdC10YXJnZXQiOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDE0MTQ1MUNBMTUyNTdFMUYwMDI1
MDc3MSAvKiB0ZXN0LXRhcmdldC5mcmFtZXdvcmsgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20u
YXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yayI7CisJCX07CisvKiBFbmQgUEJYTmF0aXZlVGFy
Z2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJCTE0MTQ0
RkNGMTUyNTVBRDgwMDI1MDc3MSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlzYSA9IFBC
WFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQxNDRGRDIxNTI1NUFEODAw
MjUwNzcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiWGNvZGUt
dW5zb3J0ZWQiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJ
CWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3Mg
PSAwOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCUVuZ2xpc2gsCisJCQkJSmFwYW5lc2UsCisJ
CQkJRnJlbmNoLAorCQkJCUdlcm1hbiwKKwkJCSk7CisJCQltYWluR3JvdXAgPSAxNDE0NEZDRDE1
MjU1QUQ4MDAyNTA3NzE7CisJCQlwcm9kdWN0UmVmR3JvdXAgPSAxNDE0NTA0QTE1MjU3RDI0MDAy
NTA3NzEgLyogUHJvZHVjdHMgKi87CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJvamVj
dFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJMTQxNDUxQzkxNTI1N0UxRjAwMjUwNzcx
IC8qIHRlc3QtdGFyZ2V0ICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rp
b24gKi8KKworLyogQmVnaW4gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTE0
MTQ1MUM2MTUyNTdFMUYwMDI1MDc3MSAvKiBSZXNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhS
ZXNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OworLyogRW5kIFBCWFJlc291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisv
KiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTE0MTQ1MUM3MTUyNTdF
MUYwMDI1MDc3MSAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MTQxNDUxRTExNTI1ODJGOTAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWRpci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkxNDE0NTFFMjE1MjU4MzAxMDAyNTA3NzEgLyogZXhpc3RpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMTQxNDUxRTcxNTI1ODMyNDAwMjUwNzcxIC8qIGV4aXN0aW5nLWluLWZv
bGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0
aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMTQx
NDRGRDAxNTI1NUFEODAwMjUwNzcxIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAg
PSBOTzsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTE0MTQ0RkQxMTUyNTVBRDgw
MDI1MDc3MSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQl9
OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTE0MTQ1MUNCMTUyNTdFMUYwMDI1MDc3MSAv
KiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZ
X1BIQVNFX1NUUklQID0gTk87CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsK
KwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZSQU1FV09SS19WRVJTSU9OID0g
QTsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRf
Q09OVElOVUUgPSBZRVM7CisJCQkJR0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19PUFRJ
TUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZ
RVM7CisJCQkJR0NDX1BSRUZJWF9IRUFERVIgPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0ZyYW1l
d29ya3MvQXBwS2l0LmZyYW1ld29yay9IZWFkZXJzL0FwcEtpdC5oIjsKKwkJCQlJTkZPUExJU1Rf
RklMRSA9ICJ0ZXN0LXRhcmdldC1JbmZvLnBsaXN0IjsKKwkJCQlJTlNUQUxMX1BBVEggPSAiJChI
T01FKS9MaWJyYXJ5L0ZyYW1ld29ya3MiOworCQkJCU9USEVSX0xERkxBR1MgPSAoCisJCQkJCSIt
ZnJhbWV3b3JrIiwKKwkJCQkJRm91bmRhdGlvbiwKKwkJCQkJIi1mcmFtZXdvcmsiLAorCQkJCQlB
cHBLaXQsCisJCQkJKTsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0g
InRlc3QtdGFyZ2V0IjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTE0MTQ1MUND
MTUyNTdFMUYwMDI1MDc3MSAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9Q
QVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JN
QVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJRFlMSUJfQ09NUEFUSUJJTElU
WV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUZSQU1F
V09SS19WRVJTSU9OID0gQTsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBOTzsK
KwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hF
QURFUiA9IFlFUzsKKwkJCQlHQ0NfUFJFRklYX0hFQURFUiA9ICIkKFNZU1RFTV9MSUJSQVJZX0RJ
UikvRnJhbWV3b3Jrcy9BcHBLaXQuZnJhbWV3b3JrL0hlYWRlcnMvQXBwS2l0LmgiOworCQkJCUlO
Rk9QTElTVF9GSUxFID0gInRlc3QtdGFyZ2V0LUluZm8ucGxpc3QiOworCQkJCUlOU1RBTExfUEFU
SCA9ICIkKEhPTUUpL0xpYnJhcnkvRnJhbWV3b3JrcyI7CisJCQkJT1RIRVJfTERGTEFHUyA9ICgK
KwkJCQkJIi1mcmFtZXdvcmsiLAorCQkJCQlGb3VuZGF0aW9uLAorCQkJCQkiLWZyYW1ld29yayIs
CisJCQkJCUFwcEtpdCwKKwkJCQkpOworCQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlQUk9EVUNU
X05BTUUgPSAidGVzdC10YXJnZXQiOworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5h
bWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24g
Ki8KKworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJCTE0MTQ0RkQy
MTUyNTVBRDgwMDI1MDc3MSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2pl
Y3QgIlhjb2RlLXVuc29ydGVkIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTE0MTQ0RkQwMTUyNTVBRDgwMDI1MDc3
MSAvKiBEZWJ1ZyAqLywKKwkJCQkxNDE0NEZEMTE1MjU1QUQ4MDAyNTA3NzEgLyogUmVsZWFzZSAq
LywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQkxNDE0NTFEMzE1MjU3RTJF
MDAyNTA3NzEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQg
InRlc3QtdGFyZ2V0IiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTE0MTQ1MUNCMTUyNTdFMUYwMDI1MDc3MSAvKiBE
ZWJ1ZyAqLywKKwkJCQkxNDE0NTFDQzE1MjU3RTFGMDAyNTA3NzEgLyogUmVsZWFzZSAqLywKKwkJ
CSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJhdGlvbkxp
c3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9IDE0MTQ0RkNGMTUyNTVBRDgwMDI1MDc3
MSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvdGVzdC1wcm9qZWN0L2V4aXN0aW5n
LWluLWZvbGRlci5jcHAgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3Vu
aXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9leGlzdGluZy1pbi1mb2xkZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDI4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rlc3Qt
cHJvamVjdC9leGlzdGluZy1pbi1mb2xkZXIuY3BwCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
ZXhpc3RpbmctaW4tZm9sZGVyLmgiCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9leGlzdGluZy1pbi1m
b2xkZXIuaCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3Rf
ZmlsZXMvdGVzdC1wcm9qZWN0L2V4aXN0aW5nLWluLWZvbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNiMDVjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9l
eGlzdGluZy1pbi1mb2xkZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBleGlzdGluZ19pbl9m
b2xkZXJfaAorI2RlZmluZSBleGlzdGluZ19pbl9mb2xkZXJfaAorCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvdGVzdC1wcm9qZWN0L2V4aXN0aW5nLmNwcCBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvdGVzdC1w
cm9qZWN0L2V4aXN0aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
NzFlYzZmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
cHJvamVjdC91bml0dGVzdF9maWxlcy90ZXN0LXByb2plY3QvZXhpc3RpbmcuY3BwCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAidGVzdC5oIgorCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9leGlzdGlu
Zy5oIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9maWxl
cy90ZXN0LXByb2plY3QvZXhpc3RpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yZGQ0OWQxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vcHJvamVjdC91bml0dGVzdF9maWxlcy90ZXN0LXByb2plY3QvZXhpc3RpbmcuaApAQCAt
MCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBleGlzdGluZ19oCisjZGVmaW5lIGV4aXN0aW5nX2gKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9zdWJm
b2xkZXIvZXhpc3RpbmctaW4tZGlyLmNwcCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvdGVzdC1wcm9qZWN0L3N1YmZvbGRlci9leGlzdGluZy1p
bi1kaXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTliY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3Vu
aXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9zdWJmb2xkZXIvZXhpc3RpbmctaW4tZGlyLmNwcApA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImV4aXN0aW5nLWluLWRpci5oIgorCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rl
c3QtcHJvamVjdC9zdWJmb2xkZXIvZXhpc3RpbmctaW4tZGlyLmggYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9wcm9qZWN0L3VuaXR0ZXN0X2ZpbGVzL3Rlc3QtcHJvamVjdC9zdWJmb2xk
ZXIvZXhpc3RpbmctaW4tZGlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTllNmI4NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvdGVzdC1wcm9qZWN0L3N1YmZvbGRlci9leGlzdGluZy1p
bi1kaXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBleGlzdGluZ19pbl9kaXJfaAorI2RlZmlu
ZSBleGlzdGluZ19pbl9kaXJfaAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvdW5pdHRl
c3RfZmlsZXMvdGVzdC10YXJnZXQtSW5mby5wbGlzdCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMvdGVzdC10YXJnZXQtSW5mby5wbGlzdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmE5M2I1Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC91bml0dGVzdF9maWxlcy90
ZXN0LXRhcmdldC1JbmZvLnBsaXN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8v
RFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlz
dC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRs
ZURldmVsb3BtZW50UmVnaW9uPC9rZXk+CisJPHN0cmluZz5FbmdsaXNoPC9zdHJpbmc+CisJPGtl
eT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KKwk8c3RyaW5nPiR7RVhFQ1VUQUJMRV9OQU1FfTwv
c3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20ueW91
cmNvbXBhbnkuJHtQUk9EVUNUX05BTUU6cmZjMTAzNGlkZW50aWZpZXJ9PC9zdHJpbmc+CisJPGtl
eT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJp
bmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5BUFBMPC9zdHJp
bmc+CisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+MS4w
PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorCTxzdHJpbmc+Pz8/Pzwv
c3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xPC9zdHJpbmc+
CisJPGtleT5MU01pbmltdW1TeXN0ZW1WZXJzaW9uPC9rZXk+CisJPHN0cmluZz4ke01BQ09TWF9E
RVBMT1lNRU5UX1RBUkdFVH08L3N0cmluZz4KKwk8a2V5Pk5TTWFpbk5pYkZpbGU8L2tleT4KKwk8
c3RyaW5nPk1haW5NZW51PC9zdHJpbmc+CisJPGtleT5OU1ByaW5jaXBhbENsYXNzPC9rZXk+CisJ
PHN0cmluZz5OU0FwcGxpY2F0aW9uPC9zdHJpbmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC92Y3Byb2oucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3ZjcHJvai5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Mjc1MzBhCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC92Y3Byb2oucHkKQEAgLTAsMCArMSwy
MTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5n
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3QuZ3JvdXBiYXNlIGltcG9ydCAqCisKKyMg
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVkNF
bGVtZW50KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVudF9lbGVt
ZW50PU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYucGFyZW50
X2VsZW1lbnQgPSBwYXJlbnRfZWxlbWVudAorICAgICAgICBzZWxmLmF0dHJpYnV0ZXMgPSBbXSAg
ICAgICAgICAgICAgICAjIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSBwYWlycworICAgICAgICBzZWxm
LmNoaWxkcmVuID0gW10gICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgVkNFbGVtZW50IGNoaWxk
IG9iamVjdHMKKyAgICAgICAgc2VsZi5hdHRyX05hbWVfdmFsdWUgPSAnJyAgICAgICAgICAgIyBz
dG9yZSAnTmFtZScgYXR0cmlidXRlIHZhbHVlIHNlcGFyYXRlbHkKKyAgICAgICAgc2VsZi5hdHRy
X1JlbGF0aXZlUGF0aF92YWx1ZSA9ICcnICAgIyBzdG9yZSBmaWxlIG5hbWUgZnJvbSAnUmVsYXRp
dmVQYXRoJyBhdHRyaWJ1dGUgc2VwYXJhdGVseQorCisgICAgZGVmIGFkZF9hdHRyaWJ1dGUoc2Vs
ZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwKCciJykKKyAgICAg
ICAgaWYgbmFtZSA9PSAnTmFtZSc6CisgICAgICAgICAgICBzZWxmLmF0dHJfTmFtZV92YWx1ZSA9
IHZhbHVlCisgICAgICAgIGlmIG5hbWUgPT0gJ1JlbGF0aXZlUGF0aCc6CisgICAgICAgICAgICBz
ZWxmLmF0dHJfUmVsYXRpdmVQYXRoX3ZhbHVlID0gdmFsdWUucnNwbGl0KCdcXCcsIDEpWy0xXSAg
IyBzdG9yZSBmaWxlIG5hbWUgb25seSwgd2l0aG91dCBwcmVjZWRpbmcgcGF0aAorICAgICAgICBz
ZWxmLmF0dHJpYnV0ZXMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisKKworY2xhc3MgVkNHcm91cChQ
cm9qZWN0R3JvdXApOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluZXI9Tm9uZSwgZGly
ZWN0b3J5PU5vbmUpOgorICAgICAgICBQcm9qZWN0R3JvdXAuX19pbml0X18oc2VsZiwgY29udGFp
bmVyLCBkaXJlY3RvcnkpCisKKworY2xhc3MgVkNGaWxlUmVmZXJlbmNlKFByb2plY3RGaWxlUmVm
ZXJlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZT1Ob25lKToKKyAgICAgICAgUHJv
amVjdEZpbGVSZWZlcmVuY2UuX19pbml0X18oc2VsZiwgZmlsZSkKKworCisjID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFZDUHJvamVjdFJlYWRl
cihQcm9qZWN0UmVhZGVyKToKKyAgICAiIiIKKyAgICBSZWFkZXIgY2xhc3MgZm9yIFZpc3VhbCBT
dHVkaW8gLnZjcHJvaiBmaWxlcworICAgICIiIgorICAgIFhNTF9TVEFSVCA9IHJlLmNvbXBpbGUo
JzxcP3htbCAnKQorICAgIEVMRU1fU1RBUlQgPSByZS5jb21waWxlKCc8KFtBLVphLXpdKyknKQor
ICAgIEVMRU1fRU5EID0gcmUuY29tcGlsZSgnPC8oW0EtWmEtel0rKScpCisgICAgQVRUUiA9IHJl
LmNvbXBpbGUoJyhbQS1aYS16XSspPSgiW14iXSoiKScpCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcHJvamVjdCwgZmlsZXN5c3RlbT1Ob25lKToKKyAgICAgICAgUHJvamVjdFJlYWRlci5fX2lu
aXRfXyhzZWxmLCBwcm9qZWN0LCBmaWxlc3lzdGVtKQorICAgICAgICBzZWxmLnByb2plY3QueG1s
X2xpbmUgPSAnJworICAgICAgICBzZWxmLnByb2plY3Qucm9vdF9lbGVtZW50ID0gTm9uZQorICAg
ICAgICBzZWxmLmVsZW1lbnRfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLm9wZW5lZF9lbGVtZW50
ID0gTm9uZQorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyID0gMAorCisgICAgZGVmIGxhc3RfZWxl
bWVudChzZWxmKToKKyAgICAgICAgaWYgZWxlbWVudF9zdGFjazoKKyAgICAgICAgICAgIHJldHVy
biBlbGVtZW50X3N0YWNrWy0xXQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHB1c2hf
ZWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgaWYgc2VsZi5lbGVtZW50X3N0YWNrOgor
ICAgICAgICAgICAgYXNzZXJ0IGVsZW1lbnQucGFyZW50X2VsZW1lbnQKKyAgICAgICAgICAgIGVs
ZW1lbnQucGFyZW50X2VsZW1lbnQuY2hpbGRyZW4uYXBwZW5kKGVsZW1lbnQpCisgICAgICAgICAg
ICBzZWxmLnZlcmlmeShlbGVtZW50Lm5hbWUgIT0gJ0ZpbHRlcicgb3IgZWxlbWVudC5hdHRyX05h
bWVfdmFsdWUsICJGaWx0ZXIgd2l0aG91dCBhICdOYW1lJyBhdHRyaWJ1dGUgZW5jb3VudGVyZWQh
IChsaW5lICVkKSIgJSBzZWxmLmxpbmVfbnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi52ZXJpZnkobm90IHNlbGYucHJvamVjdC5yb290X2VsZW1lbnQsICJNdWx0aXBsZSBy
b290IGVsZW1lbnRzIGVuY291bnRlcmVkOiAnPCVzPicgYW5kICc8JXM+JyEgKGxpbmUgJWQpIiAl
IChzZWxmLnJvb3RfZWxlbWVudC5uYW1lLCBlbGVtZW50Lm5hbWUsIHNlbGYubGluZV9udW1iZXIp
KQorICAgICAgICAgICAgc2VsZi52ZXJpZnkoZWxlbWVudC5uYW1lID09ICdWaXN1YWxTdHVkaW9Q
cm9qZWN0JywgIlVuZXhwZWN0ZWQgcm9vdCBlbGVtZW50ICclcycgZW5jb3VudGVyZWQgLSAnVmlz
dWFsU3R1ZGlvUHJvamVjdCcgZXhwZWN0ZWQhIChsaW5lICVkKSIgJSAoZWxlbWVudC5uYW1lLCBz
ZWxmLmxpbmVfbnVtYmVyKSkKKyAgICAgICAgICAgIHNlbGYucHJvamVjdC5yb290X2VsZW1lbnQg
PSBlbGVtZW50CisgICAgICAgIHNlbGYuZWxlbWVudF9zdGFjay5hcHBlbmQoZWxlbWVudCkKKwor
ICAgIGRlZiBtYXRjaF9jbG9zaW5nX2JyYWNrZXQoc2VsZiwgc3RyKToKKyAgICAgICAgaWYgc3Ry
ID09ICc+JzoKKyAgICAgICAgICAgICIiIiBzdGFydCB0YWcgZmluaXNoZWQsIHJlYWQgY2hpbGRy
ZW4gIiIiCisgICAgICAgICAgICBzZWxmLnB1c2hfZWxlbWVudChzZWxmLm9wZW5lZF9lbGVtZW50
KQorICAgICAgICAgICAgc2VsZi5vcGVuZWRfZWxlbWVudCA9IE5vbmUKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisgICAgICAgIGlmIHN0ciA9PSAnLz4nOgorICAgICAgICAgICAgIiIiIHN0YXJ0
IHRhZyBmaW5pc2hlZCwgbm8gY2hpbGRyZW4gIiIiCisgICAgICAgICAgICBzZWxmLnB1c2hfZWxl
bWVudChzZWxmLm9wZW5lZF9lbGVtZW50KQorICAgICAgICAgICAgc2VsZi5vcGVuZWRfZWxlbWVu
dCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZWxlbWVudF9zdGFjay5wb3AoKQorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcGFyc2VfbGlu
ZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5vcGVuZWRfZWxlbWVudDoKKyAgICAgICAg
ICAgIGlmIHNlbGYubWF0Y2hfY2xvc2luZ19icmFja2V0KGxpbmUpOgorICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgbWF0Y2ggPSBBVFRSLm1hdGNoKGxpbmUpCisgICAgICAgICAg
ICBzZWxmLnZlcmlmeShtYXRjaCwgIlVuZXhwZWN0ZWQgc3RyaW5nICclcycgaW5zaWRlIGVsZW1l
bnQgJyVzJzogLSBBdHRyaWJ1dGUgb3IgY2xvc2luZyAnPicgb3IgJy8+JyBleHBlY3RlZCEgKGxp
bmUgJWQpIiAlIChsaW5lLCBzZWxmLm9wZW5lZF9lbGVtZW50Lm5hbWUsIHNlbGYubGluZV9udW1i
ZXIpKQorICAgICAgICAgICAgc2VsZi5vcGVuZWRfZWxlbWVudC5hZGRfYXR0cmlidXRlKG1hdGNo
Lmdyb3VwKDEpLCBtYXRjaC5ncm91cCgyKSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBt
YXRjaCA9IEVMRU1fU1RBUlQubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAg
ICAgICBzZWxmLm9wZW5lZF9lbGVtZW50ID0gVkNFbGVtZW50KG1hdGNoLmdyb3VwKDEpLCBzZWxm
Lmxhc3RfZWxlbWVudCgpKQorICAgICAgICAgICAgc2VsZi5tYXRjaF9jbG9zaW5nX2JyYWNrZXQo
bGluZVttYXRjaC5lbmQoKTpdLmxzdHJpcCgpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IG1hdGNoID0gRUxFTV9FTkQubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAg
ICAgICBzZWxmLnZlcmlmeShzZWxmLmVsZW1lbnRfc3RhY2ssICJDbG9zaW5nIHRhZyAnJXMnIGZv
dW5kIG9uIG91dGVybW9zdCBsZXZlbCEgKGxpbmUgJWQpIiAlIChsaW5lLCBzZWxmLmxpbmVfbnVt
YmVyKSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5KG1hdGNoLmdyb3VwKDEpID09IHNlbGYuZWxl
bWVudF9zdGFja1stMV0ubmFtZSwgIk1pc21hdGNoZWQgY2xvc2luZyB0YWcgJzwvJXM+JyBlbmNv
dW50ZXJlZCAtICc8LyVzPicgZXhwZWN0ZWQhIChsaW5lICVkKSIgJSAobWF0Y2guZ3JvdXAoMSks
IHNlbGYuZWxlbWVudF9zdGFja1stMV0ubmFtZSwgc2VsZi5saW5lX251bWJlcikpCisgICAgICAg
ICAgICBzZWxmLmVsZW1lbnRfc3RhY2sucG9wKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBtYXRjaCA9IFhNTF9TVEFSVC5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAg
ICAgICAgIHNlbGYudmVyaWZ5KG5vdCBzZWxmLnByb2plY3QueG1sX2xpbmUsICJVbmV4cGVjdGVk
IDJuZCA8P3htbD8+IGxpbmUgZW5jb3VudGVyZWQ6ICclcychIChsaW5lICVkKSIgJSAobGluZSwg
c2VsZi5saW5lX251bWJlcikpCisgICAgICAgICAgICBzZWxmLnByb2plY3QueG1sX2xpbmUgPSBs
aW5lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5lcnJvcigiVW5leHBlY3RlZCBs
aW5lICclcycgLSBlbGVtZW50IG9yIDw/eG1sPz4gZXhwZWN0ZWQhIChsaW5lICVkKSIgJSAobGlu
ZSwgc2VsZi5saW5lX251bWJlcikpCisKKyAgICBkZWYgcmVhZF9wcm9qZWN0X2ZpbGUoc2VsZiwg
cHJvamVjdF9maWxlX3BhdGgpOgorICAgICAgICBzZWxmLnByb2plY3Qucm9vdF9lbGVtZW50ID0g
Tm9uZQorICAgICAgICBzZWxmLnByb2plY3QueG1sX2xpbmUgPSAnJworICAgICAgICBzZWxmLmVs
ZW1lbnRfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLm9wZW5lZF9lbGVtZW50ID0gTm9uZQorICAg
ICAgICB3aXRoIHNlbGYuZmlsZXN5c3RlbS5vcGVuX2JpbmFyeV9maWxlX2Zvcl9yZWFkaW5nKGZp
bGVfcGF0aCkgYXMgc2VsZi5maWxlOgorICAgICAgICAgICAgc2VsZi5saW5lX251bWJlciA9IDAK
KyAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZmlsZToKKyAgICAgICAgICAgICAgICBzZWxm
LmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2xpbmUobGluZS5k
ZWNvZGUoJ1dpbmRvd3MtMTI1MicpLnN0cmlwKCkpCisgICAgICAgIGlmIG5vdCBzZWxmLnByb2pl
Y3QueG1sX2xpbmU6CisgICAgICAgICAgICBzZWxmLndhcm5pbmcoIk5vIDw/eG1sPz4gbGluZSBm
b3VuZCAtIGNyZWF0aW5nISIpCisgICAgICAgICAgICBzZWxmLnByb2plY3QueG1sX2xpbmUgPSAi
IiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4iIiIKKworCisj
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFZD
UHJvamVjdFdyaXRlcihQcm9qZWN0V3JpdGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJv
amVjdCwgZmlsZXN5c3RlbT1Ob25lKToKKyAgICAgICAgUHJvamVjdFdyaXRlci5fX2luaXRfXyhz
ZWxmLCBwcm9qZWN0LCBmaWxlc3lzdGVtKQorCisgICAgZGVmIHdyaXRlX3RvX2ZpbGUoc2VsZiwg
dGV4dCk6CisgICAgICAgIHNlbGYuZmlsZS53cml0ZSh0ZXh0LmVuY29kZSgnV2luZG93cy0xMjUy
JykpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGVsZW1lbnRfc29ydGluZ19rZXkoZWxl
bWVudCk6CisgICAgICAgIGlmIGVsZW1lbnQuYXR0cl9SZWxhdGl2ZVBhdGhfdmFsdWU6CisgICAg
ICAgICAgICByZXR1cm4gZWxlbWVudC5uYW1lLmxvd2VyKCkgKyAnficgKyBlbGVtZW50LmF0dHJf
UmVsYXRpdmVQYXRoX3ZhbHVlLmxvd2VyKCkKKyAgICAgICAgaWYgZWxlbWVudC5hdHRyX25hbWU6
CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5uYW1lLmxvd2VyKCkgKyAnficgKyBlbGVtZW50
LmF0dHJfTmFtZV92YWx1ZS5sb3dlcigpCisgICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWUubG93
ZXIoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfc29ydF9jaGlsZHJlbihl
bGVtZW50X25hbWUpOgorICAgICAgICBpZiBlbGVtZW50X25hbWUgPT0gJ0ZpbHRlcic6CisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB3cml0
ZUVsZW1lbnQoc2VsZiwgZWxlbWVudCwgaW5kZW50KToKKyAgICAgICAgc3ViX2luZGVudCA9IGlu
ZGVudCArICdcdCcKKyAgICAgICAgc2VsZi53cml0ZV90b19maWxlKGluZGVudCArICc8JyArIGVs
ZW1lbnQubmFtZSkKKyAgICAgICAgaWYgZWxlbWVudC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAg
c2VsZi53cml0ZV90b19maWxlKCdcclxuJykKKyAgICAgICAgICAgIGZvciBhdHRyaWJ1dGVfbmFt
ZSwgYXR0cmlidXRlX3ZhbHVlIGluIGVsZW1lbnQuYXR0cmlidXRlczoKKyAgICAgICAgICAgICAg
ICBzZWxmLndyaXRlX3RvX2ZpbGUoc3ViX2luZGVudCArIGF0dHJpYnV0ZV9uYW1lICsgJz0iJyAr
IGF0dHJpYnV0ZV92YWx1ZSArICciXHJcbicpCisgICAgICAgICAgICBpZiBub3QgZWxlbWVudC5j
aGlsZHJlbiBhbmQgKGVsZW1lbnQubmFtZSA9PSAnVG9vbCcgb3IgZWxlbWVudC5uYW1lID09ICdQ
bGF0Zm9ybScpOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfdG9fZmlsZShpbmRlbnQgKyAn
Lz5cclxuJykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYud3JpdGVf
dG9fZmlsZShzdWJfaW5kZW50KQorICAgICAgICBzZWxmLndyaXRlX3RvX2ZpbGUoJz5cclxuJykK
KyAgICAgICAgaWYgZWxlbWVudC5jaGlsZHJlbjoKKyAgICAgICAgICAgIGlmIFZDUHJvamVjdFdy
aXRlci5zaG91bGRfc29ydF9jaGlsZHJlbihlbGVtZW50Lm5hbWUpOgorICAgICAgICAgICAgICAg
IGVsZW1lbnQuY2hpbGRyZW4uc29ydChrZXk9VkNQcm9qZWN0V3JpdGVyLmVsZW1lbnRfc29ydGlu
Z19rZXkpCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gZWxlbWVudC5jaGlsZHJlbjoKKyAgICAg
ICAgICAgICAgICBzZWxmLndyaXRlRWxlbWVudChjaGlsZCwgc3ViX2luZGVudCkKKyAgICAgICAg
c2VsZi53cml0ZV90b19maWxlKGluZGVudCArICc8LycgKyBlbGVtZW50Lm5hbWUgKyAnPlxyXG4n
KQorCisgICAgZGVmIHdyaXRlX3Byb2plY3RfZmlsZShzZWxmLCBwcm9qZWN0X2ZpbGVfcGF0aCk6
CisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuZmlsZXN5c3RlbS5vcGVuX2JpbmFyeV9maWxlX2Zv
cl93cml0aW5nKHByb2plY3RfZmlsZV9wYXRoKQorICAgICAgICBzZWxmLndyaXRlX3RvX2ZpbGUo
c2VsZi5wcm9qZWN0LnhtbF9saW5lICsgJ1xyXG4nKQorICAgICAgICBzZWxmLndyaXRlRWxlbWVu
dChzZWxmLnByb2plY3Qucm9vdF9lbGVtZW50LCAnJykKKyAgICAgICAgc2VsZi5maWxlLmNsb3Nl
KCkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
K2NsYXNzIFZDUHJvamVjdChHcm91cFByb2plY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRh
aW5pbmcgYWxsIGRhdGEgc3RydWN0dXJlcyBkZXNjcmliaW5nIGFuIFZpc3VhbCBTdHVkaW8gcHJv
amVjdCBmaWxlLgorICAgICIiIgorICAgIFNFUCA9ICdcXCcKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjb21tb24sIGZpbGUsIHByb2plY3RfbmFtZT1Ob25lKToKKyAgICAgICAgR3JvdXBQcm9q
ZWN0Ll9pbml0KHNlbGYsIGNvbW1vbiwgZmlsZSwgcHJvamVjdF9uYW1lKQorCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3dlYmtpdGZpbGUucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3dlYmtpdGZpbGUucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY0MjZiZQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3Qvd2Via2l0ZmlsZS5weQpAQCAt
MCwwICsxLDM2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMK
KyMgVGhpcyBpcyBhIHZlcnkgc2ltcGxlIHNjcmlwdCBkZXNpZ25lZCB0byBjcmF3bCB0aGUgYnVp
bGQgZGlyZWN0b3J5CisjIGZvciB2aXN1YWwgc3R1ZGlvIGV4cHJlc3MgYnVpbGQgbG9ncyBhbmQg
cHJpbnQgdGhlbSB0byBzdGRvdXQuCisKK2ltcG9ydCBmaWxlY21wCisKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnByb2plY3QuY29tbWFuZCBpbXBvcnQgKgorZnJvbSB3ZWJraXRweS5jb21tb24ucHJv
amVjdC5jb21tb24gaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3Qub3B0aW9u
cyBpbXBvcnQgKgorCisjZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5hbGxpbm9uZXByb2og
aW1wb3J0ICoKKyNmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcm9qZWN0LmNtYWtlcHJvaiBpbXBvcnQg
KgorI2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3QuZ251cHJvaiBpbXBvcnQgKgorI2Zyb20g
d2Via2l0cHkuY29tbW9uLnByb2plY3QuZ3lwaXByb2ogaW1wb3J0ICoKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnByb2plY3QucXRwcm9qIGltcG9ydCAqCisjZnJvbSB3ZWJraXRweS5jb21tb24ucHJv
amVjdC52Y3Byb2ogaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3QueGNvZGVw
cm9qIGltcG9ydCAqCisKKyMgTk9URToKKyMKKyMgRmlsZXMgd2l0aGluIHRoZSBXZWJDb3JlIERl
cml2ZWRTb3VyY2VzIGRpcmVjdG9yeSBzaG91bGQgcmVzaWRlIHdpdGhpbiBhIHNpbmdsZSBDb21t
b25EaXJlY3RvcnksIGFjcm9zcyBhbGwgcGxhdGZvcm1zIQorIyBIb3dldmVyLCB0aGlzIGRpcmVj
dG9yeSBoYXMgZGlmZmVyZW50IHBhdGhzIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXM6CisjCisjIFhj
b2RlOiAgICAgICAgICAgICAgICBCVUlMVF9QUk9EVUNUU19ESVIvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZQorIyBWaXN1YWwgU3R1ZGlvOiAgICAgICAgJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
alwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlcworIyBRdDogICAgICAgICAgICAgICAgICAg
JCR7V0VCQ09SRV9HRU5FUkFURURfU09VUkNFU19ESVJ9CisjIEdudW1ha2VmaWxlLmxpc3QuYW06
ICBEZXJpdmVkU291cmNlcy9XZWJDb3JlICAgKHdpdGhvdXQgYmFzZSBkaXJlY3RvcnkgaW5kaWNh
dG9yKQorIyBHWVA6ICAgICAgICAgICAgICAgICAgPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZQorIworIyBJbnRyb2R1Y2VkICJjcm9zc292ZXIgc3ViZGlyZWN0b3JpZXMiIHRv
IGhhbmRsZSB0aGlzIHNjZW5hcmlvLiBUaGV5IGFyZSBhbHNvIHVzZWQgdG8gY3Jvc3Mgb3ZlciBm
cm9tICR7U0NNfS9Tb3VyY2VzIGludG8gV2ViQ29yZS4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgcHJl
dmVudHMgZXZlbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYW5kbGUgJHtTQ019L1NvdXJjZXMvV2Vi
Q29yZSBzcGVjaWZpY2FsbHkgKGkuZS4sIGp1c3QgdXNlICR7U0NNfSkgZnJvbSBjcmVhdGluZyAK
KyMgcmVsYXRpdmUgcGF0aHMgdGhhdCB0cnkgZ28gZnJvbSAnV2ViQ29yZScgYmFjayB1cCB0byAn
U291cmNlcycuCisKKworY2xhc3MgV2ViS2l0RmlsZVNldHVwKG9iamVjdCk6CisgICAgIiIiCisg
ICAgQmFzZSBjbGFzcyBmb3Igc2V0dXAgY2xhc3NlcyB0aGF0IHN0b3JlIHRoZSBkaXJlY3Rvcnkg
YW5kIHByb2plY3QgZmlsZSBsYXlvdXQgZm9yIGEgZ2l2ZW4gcHJvamVjdC4KKyAgICAiIiIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lLCBzY209Tm9uZSk6CisgICAgICAgIHNl
bGYuY29tbW9uID0gQ29tbW9uSW5mbyhwcm9qZWN0X25hbWUpCisgICAgICAgIHNlbGYucGxhdGZv
cm1fdG9fcHJvamVjdCA9IHt9CisgICAgICAgIHNlbGYucGxhdGZvcm1fdG9fcHJvamVjdF9yZWFk
ZXIgPSB7fQorICAgICAgICBzZWxmLnBsYXRmb3JtX3RvX3Byb2plY3Rfd3JpdGVyID0ge30KKwor
ICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IikKKworICAgIGRlZiByZWFkX3Byb2plY3Rf
ZmlsZXMoc2VsZik6CisgICAgICAgIGZvciByZWFkZXIgaW4gc2VsZi5wbGF0Zm9ybV90b19wcm9q
ZWN0X3JlYWRlci52YWx1ZXMoKToKKyAgICAgICAgICAgIHJlYWRlci5yZWFkKCkKKworICAgIGRl
ZiB3cml0ZV9wcm9qZWN0X2ZpbGVzKHNlbGYpOgorICAgICAgICBmb3Igd3JpdGVyIGluIHNlbGYu
cGxhdGZvcm1fdG9fcHJvamVjdF93cml0ZXIudmFsdWVzKCk6CisgICAgICAgICAgICB3cml0ZXIu
d3JpdGUoKQorCisKK2NsYXNzIFdlYkNvcmVTZXR1cChXZWJLaXRGaWxlU2V0dXApOgorICAgICIi
IgorICAgIFdlYkNvcmUtc3BlY2lmaWMgc2V0dXAgb2YgZGlyZWN0b3JpZXMgYW5kIHZhcmlhYmxl
cyBmb3Igd2Via2l0LWZpbGUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg
ICAgIFdlYktpdEZpbGVTZXR1cC5fX2luaXRfXyhzZWxmLCAiV2ViQ29yZSIpCisKKyAgICBkZWYg
aW5pdGlhbGl6ZShzZWxmKToKKyAgICAgICAgc2VsZi5yb290X2RpcmVjdG9yeSA9IHNlbGYuY29t
bW9uLnJvb3RfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuc2NtX2RpcmVjdG9yeSA9IHNlbGYuY29t
bW9uLnNjbV9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5zb3VyY2VfZGlyZWN0b3J5ID0gc2VsZi5j
b21tb24uZW5zdXJlX3N1YmRpcmVjdG9yeShzZWxmLnNjbV9kaXJlY3RvcnksICJTb3VyY2UiKQor
ICAgICAgICBzZWxmLndlYmNvcmVfZGlyZWN0b3J5ID0gc2VsZi5jb21tb24uZW5zdXJlX3N1YmRp
cmVjdG9yeShzZWxmLnNvdXJjZV9kaXJlY3RvcnksICJXZWJDb3JlIikKKyAgICAgICAgc2VsZi5q
YXZhc2NyaXB0Y29yZV9kaXJlY3RvcnkgPSBzZWxmLmNvbW1vbi5lbnN1cmVfc3ViZGlyZWN0b3J5
KHNlbGYuc291cmNlX2RpcmVjdG9yeSwgIkphdmFTY3JpcHRDb3JlIikKKyAgICAgICAgc2VsZi5i
dWlsZF9kaXJlY3RvcnkgPSBzZWxmLmNvbW1vbi5jcmVhdGVfYmFzZV9kaXJlY3RvcnkoIiR7QlVJ
TER9IikKKyAgICAgICAgc2VsZi53ZWJjb3JlX2Rlcml2ZWRfc291cmNlc19kaXJlY3RvcnkgPSBz
ZWxmLmNvbW1vbi5jcmVhdGVfYmFzZV9kaXJlY3RvcnkoIiR7V0VCQ09SRV9ERVJJVkVEfSIpCisg
ICAgICAgIHNlbGYuZGVyaXZlZF9zb3VyY2VzX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmNyZWF0
ZV9jcm9zc292ZXJfc3ViZGlyZWN0b3J5KHNlbGYuYnVpbGRfZGlyZWN0b3J5LCAiRGVyaXZlZFNv
dXJjZXMiLCB7IldlYkNvcmUiIDogc2VsZi53ZWJjb3JlX2Rlcml2ZWRfc291cmNlc19kaXJlY3Rv
cnl9KQorICAgICAgICBzZWxmLmFuZ2xlX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmVuc3VyZV9z
dWJkaXJlY3RvcnlfcGF0aChzZWxmLnNjbV9kaXJlY3RvcnksICJUaGlyZFBhcnR5L0FOR0xFIikK
KyAgICAgICAgIyBYY29kZQorICAgICAgICBzZWxmLnhjX3Byb2plY3RfZmlsZSA9IHNlbGYuY29t
bW9uLmVuc3VyZV9maWxlX3BhdGgoc2VsZi53ZWJjb3JlX2RpcmVjdG9yeSwgc2VsZi5jb21tb24u
ZmlsZXN5c3RlbS5qb2luKCJXZWJDb3JlLnhjb2RlcHJvaiIsICJwcm9qZWN0LnBieHByb2oiKSkK
KyAgICAgICAgc2VsZi54Y192YXJpYWJsZV90b19kaXJlY3RvcnkgPSB7CisgICAgICAgICAgICAn
U09VUkNFX1JPT1QnICAgICAgICAgICAgICAgOiBzZWxmLndlYmNvcmVfZGlyZWN0b3J5LAorICAg
ICAgICAgICAgJyI8YWJzb2x1dGU+IicgICAgICAgICAgICAgIDogc2VsZi5yb290X2RpcmVjdG9y
eSwKKyAgICAgICAgICAgICdCVUlMVF9QUk9EVUNUU19ESVInICAgICAgICA6IHNlbGYuYnVpbGRf
ZGlyZWN0b3J5LAorICAgICAgICAgICAgJ0RFVkVMT1BFUl9ESVInICAgICAgICAgICAgIDogc2Vs
Zi5jb21tb24uY3JlYXRlX2Jhc2VfZGlyZWN0b3J5KCIke0RFVn0iKSwKKyAgICAgICAgICAgICdT
REtST09UJyAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29tbW9uLmNyZWF0ZV9iYXNlX2RpcmVj
dG9yeSgiJHtTREtST09UfSIpLAorICAgICAgICAgICAgJ0NPTkZJR1VSQVRJT05fVEVNUF9ESVIn
ICAgIDogc2VsZi5jb21tb24uY3JlYXRlX2Jhc2VfZGlyZWN0b3J5KCIke0NPTkZJR19URU1QfSIp
LAorICAgICAgICB9CisgICAgICAgIHNlbGYueGNfcHJvamVjdCA9IFhjb2RlUHJvamVjdChzZWxm
LmNvbW1vbiwgc2VsZi54Y19wcm9qZWN0X2ZpbGUsIHNlbGYueGNfdmFyaWFibGVfdG9fZGlyZWN0
b3J5LCAiV2ViQ29yZSIpCisgICAgICAgIHNlbGYueGNfcmVhZGVyID0gWGNvZGVQcm9qZWN0UmVh
ZGVyKHNlbGYueGNfcHJvamVjdCkKKyAgICAgICAgc2VsZi54Y193cml0ZXIgPSBYY29kZVByb2pl
Y3RXcml0ZXIoc2VsZi54Y19wcm9qZWN0KQorICAgICAgICAjIFF0CisgICAgICAgIHNlbGYucXRf
cHJvamVjdF9maWxlID0gc2VsZi5jb21tb24uZW5zdXJlX2ZpbGUoc2VsZi53ZWJjb3JlX2RpcmVj
dG9yeSwgIlRhcmdldC5wcmkiKQorICAgICAgICBzZWxmLnF0X3ZhcmlhYmxlX3RvX2RpcmVjdG9y
eSA9IHsKKyAgICAgICAgICAgICckJEFOR0xFX0RJUicgICAgICAgICAgICAgICAgICAgICAgIDog
c2VsZi5hbmdsZV9kaXJlY3RvcnksCisgICAgICAgICAgICAnJCRQV0QnICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IHNlbGYucXRfcHJvamVjdF9maWxlLmRpcmVjdG9yeSwKKyAgICAgICAg
ICAgICckJFNPVVJDRV9ESVInICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5zb3VyY2VfZGly
ZWN0b3J5LAorICAgICAgICAgICAgJyQke1dFQkNPUkVfR0VORVJBVEVEX1NPVVJDRVNfRElSfScg
OiBzZWxmLndlYmNvcmVfZGVyaXZlZF9zb3VyY2VzX2RpcmVjdG9yeSwKKyAgICAgICAgfQorICAg
ICAgICBzZWxmLnF0X3Byb2plY3QgPSBRdFByb2plY3Qoc2VsZi5jb21tb24sIFF0TWFrZUZpbGUo
c2VsZi5xdF9wcm9qZWN0X2ZpbGUpLCBzZWxmLnF0X3ZhcmlhYmxlX3RvX2RpcmVjdG9yeSkKKyAg
ICAgICAgc2VsZi5xdF9yZWFkZXIgPSBRdFByb2plY3RSZWFkZXIoc2VsZi5xdF9wcm9qZWN0KQor
ICAgICAgICBzZWxmLnF0X3dyaXRlciA9IFF0UHJvamVjdFdyaXRlcihzZWxmLnF0X3Byb2plY3Qp
CisgICAgICAgICMgcGxhdGZvcm0gbWFwCisgICAgICAgICMKKyAgICAgICAgIyBUT0RPOiBtYWtl
IHRoaXMgZGVwZW5kZW50IG9uIGFjdHVhbGx5IHVzZWQgcGxhdGZvcm1zCisgICAgICAgIHNlbGYu
cGxhdGZvcm1fdG9fcHJvamVjdCA9IHsKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuUExBVEZP
Uk1fWENPREU6ICAgc2VsZi54Y19wcm9qZWN0LAorICAgICAgICAgICAgQ29tbW9uT3B0aW9ucy5Q
TEFURk9STV9RVDogICAgICBzZWxmLnF0X3Byb2plY3QsCisgICAgICAgIH0KKyAgICAgICAgc2Vs
Zi5wbGF0Zm9ybV90b19wcm9qZWN0X3JlYWRlciA9IHsKKyAgICAgICAgICAgIENvbW1vbk9wdGlv
bnMuUExBVEZPUk1fWENPREU6ICAgc2VsZi54Y19yZWFkZXIsCisgICAgICAgICAgICBDb21tb25P
cHRpb25zLlBMQVRGT1JNX1FUOiAgICAgIHNlbGYucXRfcmVhZGVyLAorICAgICAgICB9CisgICAg
ICAgIHNlbGYucGxhdGZvcm1fdG9fcHJvamVjdF93cml0ZXIgPSB7CisgICAgICAgICAgICBDb21t
b25PcHRpb25zLlBMQVRGT1JNX1hDT0RFOiAgIHNlbGYueGNfd3JpdGVyLAorICAgICAgICAgICAg
Q29tbW9uT3B0aW9ucy5QTEFURk9STV9RVDogICAgICBzZWxmLnF0X3dyaXRlciwKKyAgICAgICAg
fQorCisKK2NsYXNzIFdlYkNvcmVEZWJ1Z1NldHVwKFdlYkNvcmVTZXR1cCk6CisgICAgZGVmIHdy
aXRlX3Byb2plY3RfZmlsZXMoc2VsZik6CisgICAgICAgICMgVE9ETzogbWFrZSB0aGlzIGRlcGVu
ZGVudCBvbiBhY3R1YWxseSB1c2VkIHBsYXRmb3JtcworICAgICAgICAjIC0tLS0tCisgICAgICAg
IHNlbGYueGNfd3JpdGVyLndyaXRlKCJ+L3dyaXR0ZW5QQlgudHh0IikKKyAgICAgICAgc2VsZi5x
dF93cml0ZXIud3JpdGUoIn4vd3JpdHRlblF0LnR4dCIpCisKKyAgICBkZWYgZGVidWdfcnVuKHNl
bGYpOgorICAgICAgICAnJycKKyAgICAgICAgRGVidWdnaW5nIGZ1bmN0aW9uIHRoYXQgb3V0cHV0
cyB2YXJpb3VzIHBhdGhzIGFuZCBjb25maXJtcyBkaXJlY3RvcnkgbGF5b3V0IGFzc3VtcHRpb25z
LgorICAgICAgICBOb3QgdXNlZCBpbiByZWd1bGFyIG9wZXJhdGlvbi4KKyAgICAgICAgJycnCisg
ICAgICAgIHNlbGYuX1dlYkNvcmVfYWJzcGF0aCA9IHNlbGYuY29tbW9uLmZpbGVzeXN0ZW0uam9p
bihzZWxmLmNvbW1vbi5zY21fYWJzcGF0aCwgIlNvdXJjZSIsICJXZWJDb3JlIikKKyAgICAgICAg
c2VsZi5fcGJ4cHJval9hYnNwYXRoID0gc2VsZi5jb21tb24uZmlsZXN5c3RlbS5qb2luKHNlbGYu
X1dlYkNvcmVfYWJzcGF0aCwgIldlYkNvcmUueGNvZGVwcm9qIiwgInByb2plY3QucGJ4cHJvaiIp
CisgICAgICAgIHNlbGYuX3ZjcHJval9hYnNwYXRoID0gc2VsZi5jb21tb24uZmlsZXN5c3RlbS5q
b2luKHNlbGYuX1dlYkNvcmVfYWJzcGF0aCwgIldlYkNvcmUudmNwcm9qIiwgIldlYkNvcmUudmNw
cm9qIikKKyAgICAgICAgc2VsZi5fZ3lwaV9hYnNwYXRoID0gc2VsZi5jb21tb24uZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX1dlYkNvcmVfYWJzcGF0aCwgIldlYkNvcmUuZ3lwaSIpCisgICAgICAgIHNl
bGYuX3F0X2Fic3BhdGggPSBzZWxmLmNvbW1vbi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fV2ViQ29y
ZV9hYnNwYXRoLCAiVGFyZ2V0LnByaSIpCisgICAgICAgIHNlbGYuX2NtYWtlbGlzdHNfYWJzcGF0
aCA9IHNlbGYuY29tbW9uLmZpbGVzeXN0ZW0uam9pbihzZWxmLl9XZWJDb3JlX2Fic3BhdGgsICJD
TWFrZUxpc3RzLnR4dCIpCisgICAgICAgIHNlbGYuX2dudW1ha2VmaWxlX2Fic3BhdGggPSBzZWxm
LmNvbW1vbi5maWxlc3lzdGVtLmpvaW4oc2VsZi5fV2ViQ29yZV9hYnNwYXRoLCAiR05VbWFrZWZp
bGUubGlzdC5hbSIpCisgICAgICAgICMKKyAgICAgICAgc2VsZi5fV2ViQ29yZV9yZWxwYXRoID0g
c2VsZi5jb21tb24uZmlsZXN5c3RlbS5yZWxwYXRoKHNlbGYuX1dlYkNvcmVfYWJzcGF0aCwgc2Vs
Zi5jb21tb24uc2NtX2Fic3BhdGgpCisgICAgICAgIHNlbGYuX3BieHByb2pfcmVscGF0aCA9IHNl
bGYuY29tbW9uLmZpbGVzeXN0ZW0ucmVscGF0aChzZWxmLl9wYnhwcm9qX2Fic3BhdGgsIHNlbGYu
Y29tbW9uLnNjbV9hYnNwYXRoKQorICAgICAgICBzZWxmLl92Y3Byb2pfcmVscGF0aCA9IHNlbGYu
Y29tbW9uLmZpbGVzeXN0ZW0ucmVscGF0aChzZWxmLl92Y3Byb2pfYWJzcGF0aCwgc2VsZi5jb21t
b24uc2NtX2Fic3BhdGgpCisgICAgICAgIHNlbGYuX2d5cGlfcmVscGF0aCA9IHNlbGYuY29tbW9u
LmZpbGVzeXN0ZW0ucmVscGF0aChzZWxmLl9neXBpX2Fic3BhdGgsIHNlbGYuY29tbW9uLnNjbV9h
YnNwYXRoKQorICAgICAgICBzZWxmLl9xdF9yZWxwYXRoID0gc2VsZi5jb21tb24uZmlsZXN5c3Rl
bS5yZWxwYXRoKHNlbGYuX3F0X2Fic3BhdGgsIHNlbGYuY29tbW9uLnNjbV9hYnNwYXRoKQorICAg
ICAgICBzZWxmLl9jbWFrZWxpc3RzX3JlbHBhdGggPSBzZWxmLmNvbW1vbi5maWxlc3lzdGVtLnJl
bHBhdGgoc2VsZi5fY21ha2VsaXN0c19hYnNwYXRoLCBzZWxmLmNvbW1vbi5zY21fYWJzcGF0aCkK
KyAgICAgICAgc2VsZi5fZ251bWFrZWZpbGVfcmVscGF0aCA9IHNlbGYuY29tbW9uLmZpbGVzeXN0
ZW0ucmVscGF0aChzZWxmLl9nbnVtYWtlZmlsZV9hYnNwYXRoLCBzZWxmLmNvbW1vbi5zY21fYWJz
cGF0aCkKKyAgICAgICAgIworICAgICAgICBzZWxmLl9hYnNwYXRoID0gc2VsZi5jb21tb24uZmls
ZXN5c3RlbS5hYnNwYXRoKHNlbGYuY29tbWFuZHNbMF0uYXJnc1swXSkKKyAgICAgICAgc2VsZi5f
cmVscGF0aCA9IHNlbGYuY29tbW9uLmZpbGVzeXN0ZW0ucmVscGF0aChzZWxmLl9hYnNwYXRoLCBz
ZWxmLmNvbW1vbi5zY21fYWJzcGF0aCkKKyAgICAgICAgc2VsZi5faXNkaXIgPSBzZWxmLmNvbW1v
bi5maWxlc3lzdGVtLmlzZGlyKHNlbGYuX2Fic3BhdGgpCisgICAgICAgIGlmIHNlbGYuX2lzZGly
OgorICAgICAgICAgICAgc2VsZi5fZmlsZV9uYW1lID0gJycKKyAgICAgICAgICAgIHNlbGYuX25h
bWUgPSAnJworICAgICAgICAgICAgc2VsZi5fZXh0ID0gJycKKyAgICAgICAgICAgIHNlbGYuX3Jl
bGRpciA9IHNlbGYuX3JlbHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChzZWxmLl9y
ZWxkaXIsIHNlbGYuX2ZpbGVfbmFtZSkgPSBzZWxmLmNvbW1vbi5maWxlc3lzdGVtLnNwbGl0KHNl
bGYuX3JlbHBhdGgpCisgICAgICAgICAgICAoc2VsZi5fbmFtZSwgc2VsZi5fZXh0KSA9IHNlbGYu
Y29tbW9uLmZpbGVzeXN0ZW0uc3BsaXRleHQoc2VsZi5fZmlsZV9uYW1lKQorICAgICAgICBzZWxm
Ll9leGlzdHMgPSBzZWxmLmNvbW1vbi5maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9hYnNwYXRoKQor
ICAgICAgICAjCisgICAgICAgIHByaW50ICJhYnM6Iiwgc2VsZi5fYWJzcGF0aAorICAgICAgICBw
cmludCAicmVsOiIsIHNlbGYuX3JlbHBhdGgKKyAgICAgICAgcHJpbnQgIlNDTToiLCBzZWxmLmNv
bW1vbi5zY21fYWJzcGF0aAorICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgICBwcmludCAiV0NQOiIsIHNlbGYuX1dl
YkNvcmVfYWJzcGF0aAorICAgICAgICBwcmludCAiUEJYOiIsIHNlbGYuX3BieHByb2pfYWJzcGF0
aAorICAgICAgICBwcmludCAiVkNQOiIsIHNlbGYuX3ZjcHJval9hYnNwYXRoCisgICAgICAgIHBy
aW50ICJHTUs6Iiwgc2VsZi5fZ251bWFrZWZpbGVfYWJzcGF0aAorICAgICAgICBwcmludCAiR1lQ
OiIsIHNlbGYuX2d5cGlfYWJzcGF0aAorICAgICAgICBwcmludCAiUFJPOiIsIHNlbGYuX3F0X2Fi
c3BhdGgKKyAgICAgICAgcHJpbnQgIkNNSzoiLCBzZWxmLl9jbWFrZWxpc3RzX2Fic3BhdGgKKyAg
ICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSIKKyAgICAgICAgcHJpbnQgIndjcDoiLCBzZWxmLl9XZWJDb3JlX3JlbHBhdGgKKyAgICAg
ICAgcHJpbnQgInBieDoiLCBzZWxmLl9wYnhwcm9qX3JlbHBhdGgKKyAgICAgICAgcHJpbnQgInZj
cDoiLCBzZWxmLl92Y3Byb2pfcmVscGF0aAorICAgICAgICBwcmludCAiZ21rOiIsIHNlbGYuX2du
dW1ha2VmaWxlX3JlbHBhdGgKKyAgICAgICAgcHJpbnQgImd5cDoiLCBzZWxmLl9neXBpX3JlbHBh
dGgKKyAgICAgICAgcHJpbnQgInBybzoiLCBzZWxmLl9xdF9yZWxwYXRoCisgICAgICAgIHByaW50
ICJjbWs6Iiwgc2VsZi5fY21ha2VsaXN0c19yZWxwYXRoCisgICAgICAgIHByaW50ICItLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgICAgIHByaW50
ICJhYnM6Iiwgc2VsZi5fYWJzcGF0aAorICAgICAgICBwcmludCAicmVsOiIsIHNlbGYuX3JlbHBh
dGgKKyAgICAgICAgcHJpbnQgImlzZDoiLCBzZWxmLl9pc2RpcgorICAgICAgICBwcmludCAici1k
OiIsIHNlbGYuX3JlbGRpcgorICAgICAgICBwcmludCAiW3JdOiIsIHJlLnNwbGl0KCdbXFwvXScs
IHNlbGYuX3JlbGRpcikKKyAgICAgICAgcHJpbnQgImZubToiLCBzZWxmLl9maWxlX25hbWUKKyAg
ICAgICAgcHJpbnQgIm5hbToiLCBzZWxmLl9uYW1lCisgICAgICAgIHByaW50ICJleHQ6Iiwgc2Vs
Zi5fZXh0CisgICAgICAgIHByaW50ICJleD86Iiwgc2VsZi5fZXhpc3RzCisgICAgICAgICMKKyAg
ICAgICAgc291cmNlX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3Rvcnko
c2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgIlNvdXJjZSIpCisgICAgICAgIHdlYmNvcmVfZGly
ZWN0b3J5ID0gc2VsZi5jb21tb24uZW5zdXJlX3N1YmRpcmVjdG9yeShzb3VyY2VfZGlyZWN0b3J5
LCAiV2ViQ29yZSIpCisgICAgICAgIGphdmFzY3JpcHRjb3JlX2RpcmVjdG9yeSA9IHNlbGYuY29t
bW9uLmVuc3VyZV9zdWJkaXJlY3Rvcnkoc291cmNlX2RpcmVjdG9yeSwgIkphdmFTY3JpcHRDb3Jl
IikKKyAgICAgICAgYnVpbGRfZGlyZWN0b3J5ID0gc2VsZi5jb21tb24uY3JlYXRlX2Jhc2VfZGly
ZWN0b3J5KCIke0JVSUxEfSIpCisgICAgICAgIHdlYmNvcmVfZGVyaXZlZF9zb3VyY2VzX2RpcmVj
dG9yeSA9IHNlbGYuY29tbW9uLmNyZWF0ZV9iYXNlX2RpcmVjdG9yeSgiJHtXRUJDT1JFX0RFUklW
RUR9IikKKyAgICAgICAgZGVyaXZlZF9zb3VyY2VzX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmNy
ZWF0ZV9jcm9zc292ZXJfc3ViZGlyZWN0b3J5KGJ1aWxkX2RpcmVjdG9yeSwgIkRlcml2ZWRTb3Vy
Y2VzIiwgeyJXZWJDb3JlIiA6IHdlYmNvcmVfZGVyaXZlZF9zb3VyY2VzX2RpcmVjdG9yeX0pCisg
ICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0iCisgICAgICAgIHByaW50ICItIFhjb2RlOiIKKyAgICAgICAgIyBYY29kZSBncm91cHMg
dHJhdmVyc2UgQlVJTFRfUFJPRFVDVFNfRElSL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUgdG8gYXJy
aXZlIGF0IGRlcml2ZWRfd2ViY29yZV9kaXJlY3RvcnksCisgICAgICAgICMgYnV0IGZvciBvdGhl
ciBwbGF0Zm9ybXMsIGRlcml2ZWRfd2ViY29yZV9kaXJlY3RvcnkgaXMgbG9jYXRlZCBkaWZmZXJl
bnRseQorICAgICAgICB4Y2ZpbGUgPSBzZWxmLmNvbW1vbi5lbnN1cmVfZmlsZV9wYXRoKHNlbGYu
Y29tbW9uLnNjbV9kaXJlY3RvcnksIHNlbGYuX3BieHByb2pfcmVscGF0aCkKKyAgICAgICAgeGNk
aXJlY3RvcmllcyA9IHsKKyAgICAgICAgICAgICdTT1VSQ0VfUk9PVCcgICAgICAgICAgICAgICA6
IHdlYmNvcmVfZGlyZWN0b3J5LAorICAgICAgICAgICAgJyI8YWJzb2x1dGU+IicgICAgICAgICAg
ICAgIDogc2VsZi5jb21tb24ucm9vdF9kaXJlY3RvcnksCisgICAgICAgICAgICAnQlVJTFRfUFJP
RFVDVFNfRElSJyAgICAgICAgOiBidWlsZF9kaXJlY3RvcnksCisgICAgICAgICAgICAnREVWRUxP
UEVSX0RJUicgICAgICAgICAgICAgOiBzZWxmLmNvbW1vbi5jcmVhdGVfYmFzZV9kaXJlY3Rvcnko
IiR7REVWfSIpLAorICAgICAgICAgICAgJ1NES1JPT1QnICAgICAgICAgICAgICAgICAgIDogc2Vs
Zi5jb21tb24uY3JlYXRlX2Jhc2VfZGlyZWN0b3J5KCIke1NES1JPT1R9IiksCisgICAgICAgICAg
ICAnQ09ORklHVVJBVElPTl9URU1QX0RJUicgICAgOiBzZWxmLmNvbW1vbi5jcmVhdGVfYmFzZV9k
aXJlY3RvcnkoIiR7Q09ORklHX1RFTVB9IiksCisgICAgICAgIH0KKyAgICAgICAgeGNwcm9qZWN0
ID0gWGNvZGVQcm9qZWN0KHNlbGYuY29tbW9uLCB4Y2ZpbGUsIHhjZGlyZWN0b3JpZXMsICJXZWJD
b3JlIikKKyAgICAgICAgeGNyZWFkZXIgPSBYY29kZVByb2plY3RSZWFkZXIoeGNwcm9qZWN0KQor
ICAgICAgICB4Y3JlYWRlci5yZWFkKCkKKyAgICAgICAgc2VsZi5leGVjdXRlX2NvbW1hbmRzKHtD
b21tb25PcHRpb25zLlBMQVRGT1JNX1hDT0RFOiB4Y3Byb2plY3R9KQorICAgICAgICB4Y3dyaXRl
ciA9IFhjb2RlUHJvamVjdFdyaXRlcih4Y3Byb2plY3QpCisgICAgICAgIHhjd3JpdGVyLndyaXRl
KCJ+L3NyYy93cml0dGVuUEJYLnR4dCIpCisgICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgICAgIHByaW50ICItIFF0IChv
cmlnaW5hbCk6IgorICAgICAgICBxdGZpbGUgPSBzZWxmLmNvbW1vbi5lbnN1cmVfZmlsZV9wYXRo
KHNlbGYuY29tbW9uLnNjbV9kaXJlY3RvcnksIHNlbGYuX3F0X3JlbHBhdGgpCisgICAgICAgIGFu
Z2xlX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3RvcnlfcGF0aChzZWxm
LmNvbW1vbi5zY21fZGlyZWN0b3J5LCAiVGhpcmRQYXJ0eS9BTkdMRSIpCisgICAgICAgIHF0ZGly
ZWN0b3JpZXMgPSB7CisgICAgICAgICAgICAnJCRBTkdMRV9ESVInICAgICAgICAgICAgICAgICAg
ICAgICA6IGFuZ2xlX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICckJFBXRCcgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogcXRmaWxlLmRpcmVjdG9yeSwKKyAgICAgICAgICAgICckJFNPVVJD
RV9ESVInICAgICAgICAgICAgICAgICAgICAgIDogc291cmNlX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgICckJHtXRUJDT1JFX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0nIDogd2ViY29yZV9kZXJpdmVk
X3NvdXJjZXNfZGlyZWN0b3J5LAorICAgICAgICB9CisgICAgICAgIHF0cHJvamVjdCA9IFF0UHJv
amVjdChzZWxmLmNvbW1vbiwgUXRNYWtlRmlsZShxdGZpbGUpLCBxdGRpcmVjdG9yaWVzKQorICAg
ICAgICBxdHJlYWRlciA9IFF0UHJvamVjdFJlYWRlcihxdHByb2plY3QpCisgICAgICAgIHF0cmVh
ZGVyLnJlYWQoKQorICAgICAgICBzZWxmLmV4ZWN1dGVfY29tbWFuZHMoe0NvbW1vbk9wdGlvbnMu
UExBVEZPUk1fUVQ6IHF0cHJvamVjdH0pCisgICAgICAgIHF0d3JpdGVyID0gUXRQcm9qZWN0V3Jp
dGVyKHF0cHJvamVjdCkKKyAgICAgICAgcXR3cml0ZXIud3JpdGUoIn4vc3JjL3dyaXR0ZW5RdC50
eHQiKQorICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIgorICAgICAgICBwcmludCAiLSBRdCAoZnJvbSBzb3J0ZWQpOiIKKyAgICAg
ICAgcXRzZmlsZSA9IHNlbGYuY29tbW9uLmVuc3VyZV9maWxlX3BhdGgoc2VsZi5jb21tb24ucm9v
dF9kaXJlY3RvcnksICIvVXNlcnMvcm9sYW5kc3RlaW5lci9zcmMvc29ydGVkUXQudHh0IikKKyAg
ICAgICAgcXRzcHJvamVjdCA9IFF0UHJvamVjdChzZWxmLmNvbW1vbiwgUXRNYWtlRmlsZShxdHNm
aWxlKSwgcXRkaXJlY3RvcmllcykKKyAgICAgICAgcXRzcmVhZGVyID0gUXRQcm9qZWN0UmVhZGVy
KHF0c3Byb2plY3QpCisgICAgICAgIHF0c3JlYWRlci5yZWFkKCkKKyAgICAgICAgc2VsZi5leGVj
dXRlX2NvbW1hbmRzKHtDb21tb25PcHRpb25zLlBMQVRGT1JNX1FUOiBxdHNwcm9qZWN0fSkKKyAg
ICAgICAgcXRzd3JpdGVyID0gUXRQcm9qZWN0V3JpdGVyKHF0c3Byb2plY3QpCisgICAgICAgIHF0
c3dyaXRlci53cml0ZSgifi9zcmMvd3JpdHRlblF0U29ydGVkLnR4dCIpCisgICAgICAgIHByaW50
ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAg
ICAgIHByaW50ICItIFZpc3VhbCBTdHVkaW86IgorICAgICAgICB2Y2ZpbGUgPSBzZWxmLmNvbW1v
bi5lbnN1cmVfZmlsZV9wYXRoKHNlbGYuY29tbW9uLnNjbV9kaXJlY3RvcnksIHNlbGYuX3ZjcHJv
al9yZWxwYXRoKQorICAgICAgICB2Y2RpcmVjdG9yaWVzID0geworICAgICAgICAgICAgJyQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXMnOiB3
ZWJjb3JlX2Rlcml2ZWRfc291cmNlc19kaXJlY3RvcnksCisgICAgICAgIH0KKyAgICAgICAgcHJp
bnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAg
ICAgICAgcHJpbnQgIi0gR251OiIKKyAgICAgICAgZ251ZmlsZSA9IHNlbGYuY29tbW9uLmVuc3Vy
ZV9maWxlX3BhdGgoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgc2VsZi5fZ251bWFrZWZpbGVf
cmVscGF0aCkKKyAgICAgICAgZ251ZGlyZWN0b3JpZXMgPSB7CisgICAgICAgICAgICAnJChXZWJD
b3JlKScgICAgOiB3ZWJjb3JlX2RpcmVjdG9yeSwKKyAgICAgICAgfQorICAgICAgICBwcmludCAi
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAg
ICBwcmludCAiLSBDTWFrZToiCisgICAgICAgIGNtZmlsZSA9IHNlbGYuY29tbW9uLmVuc3VyZV9m
aWxlX3BhdGgoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgc2VsZi5fY21ha2VsaXN0c19yZWxw
YXRoKQorICAgICAgICBjbWRpcmVjdG9yaWVzID0geworICAgICAgICAgICAgJyR7V0VCQ09SRV9E
SVJ9JyAgICAgICAgICAgICAgICAgICAgOiB3ZWJjb3JlX2RpcmVjdG9yeSwKKyAgICAgICAgICAg
ICcke0pBVkFTQ1JJUFRDT1JFX0RJUn0nICAgICAgICAgICAgIDogamF2YXNjcmlwdGNvcmVfZGly
ZWN0b3J5LAorICAgICAgICAgICAgJyR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfScgICAg
OiB3ZWJjb3JlX2Rlcml2ZWRfc291cmNlc19kaXJlY3RvcnksCisgICAgICAgICAgICAnJHtDTUFL
RV9TT1VSQ0VfRElSfScgICAgICAgICAgICAgICA6IHNlbGYuY29tbW9uLmNyZWF0ZV9iYXNlX2Rp
cmVjdG9yeSgiJHtDTUFLRS1TT1VSQ0V9IiksCisgICAgICAgICAgICAnJHtDTUFLRV9CSU5BUllf
RElSfScgICAgICAgICAgICAgICA6IHNlbGYuY29tbW9uLmNyZWF0ZV9iYXNlX2RpcmVjdG9yeSgi
JHtDTUFLRS1CSU5BUll9IiksCisgICAgICAgICAgICAnJHtUSElSRFBBUlRZX0RJUn0nICAgICAg
ICAgICAgICAgICA6IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3Rvcnkoc291cmNlX2RpcmVj
dG9yeSwgIlRoaXJkUGFydHkiKSwKKyAgICAgICAgfQorICAgICAgICBwcmludCAiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgICBwcmludCAi
LSBHWVA6IgorICAgICAgICBneXBmaWxlID0gc2VsZi5jb21tb24uZW5zdXJlX2ZpbGVfcGF0aChz
ZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5LCBzZWxmLl9neXBpX3JlbHBhdGgpCisgICAgICAgIGd5
cGRpcmVjdG9yaWVzID0geworICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpJyAgICA6IGJ1aWxk
X2RpcmVjdG9yeSwKKyAgICAgICAgfQorCisKK2NsYXNzIFdlYktpdEZpbGUob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgc2V0dXAsIGFyZ3MpOgorICAgICAgICBhc3NlcnQgc2V0dXAK
KyAgICAgICAgYXNzZXJ0IGFyZ3MKKyAgICAgICAgc2VsZi5zZXR1cCA9IHNldHVwCisgICAgICAg
IHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5jb21tb24gPSBzZXR1cC5jb21tb24KKyAg
ICAgICAgc2VsZi5jb21tYW5kcyA9IFtdCisgICAgICAgIHNlbGYuZ2xvYmFsX29wdGlvbnMgPSBz
ZXR1cC5jb21tb24ub3B0aW9ucworICAgICAgICAjIC0tLS0tCisgICAgICAgIHNlbGYud2Fybmlu
ZygiLS0tLS0iKQorICAgICAgICBzZWxmLndhcm5pbmcoIid3ZWJraXQtZmlsZScgaXMgc3RpbGwg
aW4gcHJlLWFscGhhIHZlcnNpb24sIGN1cnJlbnRseSBmb3IgU291cmNlL1dlYkNvcmUgb25seSEg
VXNlIGF0IHlvdXIgb3duIHJpc2sgYW5kIHZlcmlmeSB0aGUgZ2VuZXJhdGVkIG91dHB1dCEiKQor
ICAgICAgICBzZWxmLndhcm5pbmcoIi0tLS0tIikKKworICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2cp
OgorICAgICAgICAjIFRPRE86IGFkZCBJRCBvZiBwcm9qZWN0IHRvIHNob3cgd2hpY2ggcHJvamVj
dCB0aGUgbWVzc2FnZSBpcyBmb3IKKyAgICAgICAgc2VsZi5jb21tb24uZGVidWcobXNnKQorCisg
ICAgZGVmIGluZm8oc2VsZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2YgcHJvamVj
dCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAgIHNlbGYu
Y29tbW9uLmluZm8obXNnKQorCisgICAgZGVmIHdhcm5pbmcoc2VsZiwgbXNnKToKKyAgICAgICAg
IyBUT0RPOiBhZGQgSUQgb2YgcHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3Nh
Z2UgaXMgZm9yCisgICAgICAgIHNlbGYuY29tbW9uLndhcm5pbmcobXNnKQorCisgICAgZGVmIGVy
cm9yKHNlbGYsIG1zZyk6CisgICAgICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hv
dyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi5l
cnJvcihtc2cpCisKKyAgICBkZWYgdmVyaWZ5KHNlbGYsIGV4cHIsIG1zZyk6CisgICAgICAgICMg
VE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdl
IGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi52ZXJpZnkoZXhwciwgbXNnKQorCisgICAgZGVm
IHBhcnNlX2NvbW1hbmRfbGluZShzZWxmKToKKyAgICAgICAgYXJncyA9IHNlbGYuYXJnc1s6XQor
ICAgICAgICBzZWxmLmdsb2JhbF9vcHRpb25zLnBhcnNlKHNlbGYuY29tbW9uLCBhcmdzKQorICAg
ICAgICBzZWxmLmNvbW1vbi5zZXRfb3B0aW9ucyhzZWxmLmdsb2JhbF9vcHRpb25zKQorICAgICAg
ICB3aGlsZSBhcmdzOgorICAgICAgICAgICAgaWYgYXJnc1swXSA9PSAnLCc6CisgICAgICAgICAg
ICAgICAgYXJncy5wb3AoMCkKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHMuYXBwZW5kKENvbW1v
bkNvbW1hbmQucGFyc2VfY29tbWFuZChzZWxmLmNvbW1vbiwgc2VsZi5nbG9iYWxfb3B0aW9ucywg
YXJncykpCisgICAgICAgIGlmIHNlbGYuZ2xvYmFsX29wdGlvbnMuaGVscCgpOgorICAgICAgICAg
ICAgc2VsZi5jb21tYW5kcyA9IFtDb21tb25IZWxwQ29tbWFuZCgiaGVscCIsIHNlbGYuY29tbW9u
KV0gICMgZG9uJ3QgcnVuIGFueXRoaW5nIGVsc2UgaWYgJy0taGVscCcgaXMgc3BlY2lmaWVkIGFz
IGdsb2JhbCBvcHRpb24KKyAgICAgICAgZWxpZiBub3Qgc2VsZi5jb21tYW5kczoKKyAgICAgICAg
ICAgIHNlbGYuZXJyb3IoIkF0IGxlYXN0IDEgY29tbWFuZCBleHBlY3RlZCwgb3IgJy0taGVscCch
IikKKworICAgIGRlZiBpbml0aWFsaXplX3NldHVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldHVw
LmluaXRpYWxpemUoKQorCisgICAgZGVmIHJlYWRfcHJvamVjdF9maWxlcyhzZWxmKToKKyAgICAg
ICAgc2VsZi5zZXR1cC5yZWFkX3Byb2plY3RfZmlsZXMoKQorCisgICAgZGVmIHdyaXRlX3Byb2pl
Y3RfZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXAud3JpdGVfcHJvamVjdF9maWxlcygp
CisKKyAgICBkZWYgZXhlY3V0ZV9jb21tYW5kcyhzZWxmKToKKyAgICAgICAgZm9yIGNvbW1hbmQg
aW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgICAgIHNlbGYuY29tbW9uLnNldF9vcHRpb25zKGNv
bW1hbmQub3B0aW9ucykKKyAgICAgICAgICAgIGNvbW1hbmQuZXhlY3V0ZShzZWxmLnNldHVwLnBs
YXRmb3JtX3RvX3Byb2plY3QpCisgICAgICAgIHNlbGYuY29tbW9uLnNldF9vcHRpb25zKHNlbGYu
Z2xvYmFsX29wdGlvbnMpCisKKyAgICBkZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUoc2VsZik6Cisg
ICAgICAgIHNlbGYucGFyc2VfY29tbWFuZF9saW5lKCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXpl
X3NldHVwKCkKKyAgICAgICAgc2VsZi5yZWFkX3Byb2plY3RfZmlsZXMoKQorICAgICAgICBzZWxm
LmV4ZWN1dGVfY29tbWFuZHMoKQorICAgICAgICBzZWxmLndyaXRlX3Byb2plY3RfZmlsZXMoKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC93ZWJraXRm
aWxlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC93
ZWJraXRmaWxlX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjA3YjkxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9wcm9qZWN0L3dlYmtpdGZpbGVfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQg
dW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC53ZWJraXRmaWxlIGltcG9y
dCAqCisKK1VOSVRURVNUX0RJUkVDVE9SWV9SRUxQQVRIID0gIlRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3Byb2plY3QvdW5pdHRlc3RfZmlsZXMiCitVTklUVEVTVF9PVVRQVVRfVEVNUExB
VEUgPSBVTklUVEVTVF9ESVJFQ1RPUllfUkVMUEFUSCArICIvdGVzdHJ1bl8lc18lcy50eHQiCisK
K2NsYXNzIFdlYktpdEZpbGVVbml0VGVzdFNldHVwKFdlYktpdEZpbGVTZXR1cCk6CisgICAgTk9O
UkFORE9NX1VJRCA9IDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgV2ViS2l0
RmlsZVNldHVwLl9faW5pdF9fKHNlbGYsICJVbml0VGVzdCIpCisgICAgICAgIHNlbGYuY29tbW9u
Lm9wdGlvbnMuc2V0X3ZlcmJvc2l0eShDb21tb25PcHRpb25zLlZFUkJPU0lUWV9TSUxFTlQpCisg
ICAgICAgIHNlbGYuZmlsZV9wcmVmaXggPSAiIgorICAgICAgICBXZWJLaXRGaWxlVW5pdFRlc3RT
ZXR1cC5OT05SQU5ET01fVUlEID0gMAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVh
dGVfVUlEKCk6CisgICAgICAgIFdlYktpdEZpbGVVbml0VGVzdFNldHVwLk5PTlJBTkRPTV9VSUQg
Kz0gMQorICAgICAgICByZXR1cm4gIiUwMjR4IiAlIFdlYktpdEZpbGVVbml0VGVzdFNldHVwLk5P
TlJBTkRPTV9VSUQKKworICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgorICAgICAgICBzZWxmLnJv
b3RfZGlyZWN0b3J5ID0gc2VsZi5jb21tb24ucm9vdF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5z
Y21fZGlyZWN0b3J5ID0gc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeQorICAgICAgICBzZWxmLmJ1
aWxkX2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmNyZWF0ZV9iYXNlX2RpcmVjdG9yeSgiJHtCVUlM
RH0iKQorICAgICAgICBzZWxmLnVuaXR0ZXN0X2RpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmVuc3Vy
ZV9zdWJkaXJlY3RvcnlfcGF0aChzZWxmLnNjbV9kaXJlY3RvcnksIFVOSVRURVNUX0RJUkVDVE9S
WV9SRUxQQVRIKQorICAgICAgICAjIFhjb2RlCisgICAgICAgIHNlbGYueGNfcHJvamVjdF9maWxl
ID0gc2VsZi5jb21tb24uZW5zdXJlX2ZpbGUoc2VsZi51bml0dGVzdF9kaXJlY3RvcnksICJYY29k
ZS11bnNvcnRlZC5wYnhwcm9qIikKKyAgICAgICAgc2VsZi54Y192YXJpYWJsZV90b19kaXJlY3Rv
cnkgPSB7CisgICAgICAgICAgICAnU09VUkNFX1JPT1QnOiAgICAgICAgICBzZWxmLnVuaXR0ZXN0
X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICciPGFic29sdXRlPiInOiAgICAgICAgIHNlbGYucm9v
dF9kaXJlY3RvcnksCisgICAgICAgICAgICAnQlVJTFRfUFJPRFVDVFNfRElSJzogICBzZWxmLmJ1
aWxkX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICMgRmFsbGJhY2sgaW4gZXJyb3IgY2FzZXMKKyAg
ICAgICAgICAgICc9PUVSUk9SPSR7U0NNfT09JzogICAgIHNlbGYuc2NtX2RpcmVjdG9yeSwKKyAg
ICAgICAgfQorICAgICAgICBzZWxmLnhjX3Byb2plY3QgPSBYY29kZVByb2plY3Qoc2VsZi5jb21t
b24sIHNlbGYueGNfcHJvamVjdF9maWxlLCBzZWxmLnhjX3ZhcmlhYmxlX3RvX2RpcmVjdG9yeSwg
IldlYkNvcmUiLCAidGVzdC10YXJnZXQiKQorICAgICAgICBzZWxmLnhjX3Byb2plY3QudWlkX2Ny
ZWF0aW9uX2Z1bmN0aW9uID0gV2ViS2l0RmlsZVVuaXRUZXN0U2V0dXAuY3JlYXRlX1VJRAorICAg
ICAgICBzZWxmLnhjX3JlYWRlciA9IFhjb2RlUHJvamVjdFJlYWRlcihzZWxmLnhjX3Byb2plY3Qp
CisgICAgICAgIHNlbGYueGNfd3JpdGVyID0gWGNvZGVQcm9qZWN0V3JpdGVyKHNlbGYueGNfcHJv
amVjdCkKKyAgICAgICAgIyBRdAorICAgICAgICBzZWxmLnF0X3Byb2plY3RfZmlsZSA9IHNlbGYu
Y29tbW9uLmVuc3VyZV9maWxlKHNlbGYudW5pdHRlc3RfZGlyZWN0b3J5LCAiUXQtdW5zb3J0ZWQu
cHJvIikKKyAgICAgICAgc2VsZi5xdF92YXJpYWJsZV90b19kaXJlY3RvcnkgPSB7CisgICAgICAg
ICAgICAnJCRQV0QnOiAgICAgICAgICAgICAgICBzZWxmLnF0X3Byb2plY3RfZmlsZS5kaXJlY3Rv
cnksCisgICAgICAgICAgICAjIEZhbGxiYWNrIGluIGVycm9yIGNhc2VzCisgICAgICAgICAgICAn
PT1FUlJPUj0ke1NDTX09PSc6ICAgICBzZWxmLnNjbV9kaXJlY3RvcnksCisgICAgICAgIH0KKyAg
ICAgICAgc2VsZi5xdF9wcm9qZWN0ID0gUXRQcm9qZWN0KHNlbGYuY29tbW9uLCBRdE1ha2VGaWxl
KHNlbGYucXRfcHJvamVjdF9maWxlKSwgc2VsZi5xdF92YXJpYWJsZV90b19kaXJlY3RvcnkpCisg
ICAgICAgIHNlbGYucXRfcmVhZGVyID0gUXRQcm9qZWN0UmVhZGVyKHNlbGYucXRfcHJvamVjdCkK
KyAgICAgICAgc2VsZi5xdF93cml0ZXIgPSBRdFByb2plY3RXcml0ZXIoc2VsZi5xdF9wcm9qZWN0
KQorICAgICAgICAjIHBsYXRmb3JtIG1hcAorICAgICAgICBzZWxmLnBsYXRmb3JtX3RvX3Byb2pl
Y3QgPSB7CisgICAgICAgICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX1hDT0RFOiAgIHNlbGYu
eGNfcHJvamVjdCwKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuUExBVEZPUk1fUVQ6ICAgICAg
c2VsZi5xdF9wcm9qZWN0LAorICAgICAgICB9CisgICAgICAgIHNlbGYucGxhdGZvcm1fdG9fcHJv
amVjdF9yZWFkZXIgPSB7CisgICAgICAgICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX1hDT0RF
OiAgIHNlbGYueGNfcmVhZGVyLAorICAgICAgICAgICAgQ29tbW9uT3B0aW9ucy5QTEFURk9STV9R
VDogICAgICBzZWxmLnF0X3JlYWRlciwKKyAgICAgICAgfQorICAgICAgICBzZWxmLnBsYXRmb3Jt
X3RvX3Byb2plY3Rfd3JpdGVyID0geworICAgICAgICAgICAgQ29tbW9uT3B0aW9ucy5QTEFURk9S
TV9YQ09ERTogICBzZWxmLnhjX3dyaXRlciwKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuUExB
VEZPUk1fUVQ6ICAgICAgc2VsZi5xdF93cml0ZXIsCisgICAgICAgIH0KKworICAgIGRlZiB3cml0
ZV9wcm9qZWN0X2ZpbGVzKHNlbGYpOgorICAgICAgICBmb3IgKHBsYXRmb3JtX2lkLCB3cml0ZXIp
IGluIHNlbGYucGxhdGZvcm1fdG9fcHJvamVjdF93cml0ZXIuaXRlbXMoKToKKyAgICAgICAgICAg
IHdyaXRlci53cml0ZShVTklUVEVTVF9PVVRQVVRfVEVNUExBVEUgJSAoc2VsZi5maWxlX3ByZWZp
eCwgcGxhdGZvcm1faWQpKQorCisKK2NsYXNzIFdlYktpdEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXAgPSBXZWJLaXRG
aWxlVW5pdFRlc3RTZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZv
ciBwbGF0Zm9ybV9pZCBpbiBzZWxmLnNldHVwLnBsYXRmb3JtX3RvX3Byb2plY3Qua2V5cygpOgor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2V0dXAuY29tbW9uLmZpbGVz
eXN0ZW0ucmVtb3ZlKFVOSVRURVNUX09VVFBVVF9URU1QTEFURSAlIChzZWxmLnNldHVwLmZpbGVf
cHJlZml4LCBwbGF0Zm9ybV9pZCkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAg
ICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9zb3J0KHNlbGYpOgorICAgICAgICBzZWxm
LnNldHVwLmZpbGVfcHJlZml4ID0gInNvcnQiCisgICAgICAgIHdlYmtpdF9maWxlID0gV2ViS2l0
RmlsZShzZWxmLnNldHVwLCBbInNvcnQiXSkKKyAgICAgICAgd2Via2l0X2ZpbGUuZXhlY3V0ZV9j
b21tYW5kX2xpbmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoVU5JVFRF
U1RfT1VUUFVUX1RFTVBMQVRFICUgKHNlbGYuc2V0dXAuZmlsZV9wcmVmaXgsIENvbW1vbk9wdGlv
bnMuUExBVEZPUk1fWENPREUpLCBVTklUVEVTVF9ESVJFQ1RPUllfUkVMUEFUSCArICIvWGNvZGUt
c29ydC5wYnhwcm9qIiwgc2hhbGxvdz1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShm
aWxlY21wLmNtcChVTklUVEVTVF9PVVRQVVRfVEVNUExBVEUgJSAoc2VsZi5zZXR1cC5maWxlX3By
ZWZpeCwgQ29tbW9uT3B0aW9ucy5QTEFURk9STV9RVCksIFVOSVRURVNUX0RJUkVDVE9SWV9SRUxQ
QVRIICsgIi9RdC1zb3J0LnBybyIsIHNoYWxsb3c9RmFsc2UpKQorCisgICAgZGVmIHRlc3RfYWRk
X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0dXAuZmlsZV9wcmVmaXggPSAiYWRkIgorICAg
ICAgICB3ZWJraXRfZmlsZSA9IFdlYktpdEZpbGUoc2VsZi5zZXR1cCwgWyJhZGQiLCBVTklUVEVT
VF9ESVJFQ1RPUllfUkVMUEFUSCArICIvdGVzdC1wcm9qZWN0L3N1YmZvbGRlci9kZWVwbHkvbmVz
dGVkL2ZpbGUuaCJdKQorICAgICAgICB3ZWJraXRfZmlsZS5leGVjdXRlX2NvbW1hbmRfbGluZSgp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChVTklUVEVTVF9PVVRQVVRfVEVN
UExBVEUgJSAoc2VsZi5zZXR1cC5maWxlX3ByZWZpeCwgQ29tbW9uT3B0aW9ucy5QTEFURk9STV9Y
Q09ERSksIFVOSVRURVNUX0RJUkVDVE9SWV9SRUxQQVRIICsgIi9YY29kZS1hZGQtZmlsZS5wYnhw
cm9qIiwgc2hhbGxvdz1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNt
cChVTklUVEVTVF9PVVRQVVRfVEVNUExBVEUgJSAoc2VsZi5zZXR1cC5maWxlX3ByZWZpeCwgQ29t
bW9uT3B0aW9ucy5QTEFURk9STV9RVCksIFVOSVRURVNUX0RJUkVDVE9SWV9SRUxQQVRIICsgIi9R
dC1hZGQtZmlsZS5wcm8iLCBzaGFsbG93PUZhbHNlKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vcHJvamVjdC94Y29kZXByb2oucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9wcm9qZWN0L3hjb2RlcHJvai5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZTgxNTcyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vcHJvamVjdC94Y29kZXByb2oucHkKQEAgLTAsMCArMSwxNDM0IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5wcm9qZWN0Lmdyb3VwYmFzZSBpbXBvcnQgKgorCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBy
YW5kb20KK2ltcG9ydCByZQorCisKK3JhbmRvbS5zZWVkKCkgICMgU2VlZCB0aGUgZ2VuZXJhdG9y
CisKKyMgQWxsIGtub3duIGJ1aWxkIHBoYXNlIHR5cGVzCitQQlhfQlVJTERfUEhBU0VfVFlQRVMg
PSAoJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnUEJY
U291cmNlc0J1aWxkUGhhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdQQlhSZXNvdXJj
ZXNCdWlsZFBoYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdQQlhDb3B5RmlsZXNCdWlsZFBo
YXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNl
JykKKworIyBTdXBwb3J0ZWQgWGNvZGUgZmlsZSB0eXBlcworRVhURU5TSU9OX1RPX0ZJTEVFTkNP
RElOR19MQVNUS05PV05GSUxFVFlQRV9BTkRfQlVJTERfUEhBU0UgPSB7CisgICAgJy5jJyAgICAg
ICAgICAgIDogKCc0JywgICAgICdzb3VyY2Vjb2RlLmMuYycsICAgICAgICAnUEJYU291cmNlc0J1
aWxkUGhhc2UnKSwKKyAgICAnLmNwcCcgICAgICAgICAgOiAoJzQnLCAgICAgJ3NvdXJjZWNvZGUu
Y3BwLmNwcCcsICAgICdQQlhTb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICcubScgICAgICAgICAg
ICA6ICgnNCcsICAgICAnc291cmNlY29kZS5jLm9iamMnLCAgICAgJ1BCWFNvdXJjZXNCdWlsZFBo
YXNlJyksCisgICAgJy5tbScgICAgICAgICAgIDogKCc0JywgICAgICdzb3VyY2Vjb2RlLmNwcC5v
YmpjcHAnLCAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLnBsJyAgICAgICAgICAgOiAo
JzQnLCAgICAgJ3RleHQuc2NyaXB0LnBlcmwnLCAgICAgICdQQlhIZWFkZXJzQnVpbGRQaGFzZScp
LAorICAgICcucG5nJyAgICAgICAgICA6IChOb25lLCAgICAnaW1hZ2UucG5nJywgICAgICAgICAg
ICAgJ1BCWFJlc291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLnRpZmYnICAgICAgICAgOiAoTm9u
ZSwgICAgJ2ltYWdlLnRpZmYnLCAgICAgICAgICAgICdQQlhSZXNvdXJjZXNCdWlsZFBoYXNlJyks
CisgICAgJy50eHQnICAgICAgICAgIDogKCc0JywgICAgICd0ZXh0JywgICAgICAgICAgICAgICAg
ICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLm5pYicgICAgICAgICAgOiAoTm9uZSwg
ICAgJ3dyYXBwZXIubmliJywgICAgICAgICAgICdQQlhSZXNvdXJjZXNCdWlsZFBoYXNlJyksCisg
ICAgJy53YXYnICAgICAgICAgIDogKE5vbmUsICAgICdhdWRpby53YXYnLCAgICAgICAgICAgICAn
UEJYQ29weUZpbGVzQnVpbGRQaGFzZScpLAorICAgICcuaWRsJyAgICAgICAgICA6ICgnNCcsICAg
ICAndGV4dCcsICAgICAgICAgICAgICAgICAgTm9uZSksCisgICAgIyBGSVhNRTogd2hlbiB0byB1
c2UgJ3NvdXJjZWNvZGUuY3BwLmgnPworICAgICcuaCcgICAgICAgICAgICA6ICgnNCcsICAgICAn
c291cmNlY29kZS5jLmgnLCAgICAgICAgJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJyksCisgICAgIyBO
T1RFOiAuc3RyaW5ncyBhcmUgdXNlZCBpbiBQQlhWYXJpYW50R3JvdXAgaW4gYW4gYWRkaXRpb25h
bCBsZXZlbCBvZiBpbmRpcmVjdGlvbjogUEJYQnVpbGRGaWxlIC0+IFBCWFZhcmlhbnRHcm91cCAt
PiBQQlhGaWxlUmVmZXJlbmNlCisgICAgJy5zdHJpbmdzJyAgICAgIDogKCcxMCcsICAgICd0ZXh0
LnBsaXN0LnN0cmluZ3MnLCAgICAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICMgTk9U
RTogSSBIYXZlbid0IHNlZW4gdGhlc2UgZXh0ZW5zaW9ucyBpbiBhY3R1YWwgZmlsZXMsIHRoaXMg
aXMgYW4gZXh0cmFwb2xhdGlvbiBmb3IgY29tcGxldGVuZXNzLgorICAgICcuY2MnICAgICAgICAg
ICA6ICgnNCcsICAgICAnc291cmNlY29kZS5jcHAuY3BwJywgICAgJ1BCWFNvdXJjZXNCdWlsZFBo
YXNlJyksCisgICAgJy5jeHgnICAgICAgICAgIDogKCc0JywgICAgICdzb3VyY2Vjb2RlLmNwcC5j
cHAnLCAgICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLmhwcCcgICAgICAgICAgOiAo
JzQnLCAgICAgJ3NvdXJjZWNvZGUuY3BwLmgnLCAgICAgICdQQlhIZWFkZXJzQnVpbGRQaGFzZScp
LAorICAgICcuaHh4JyAgICAgICAgICA6ICgnNCcsICAgICAnc291cmNlY29kZS5jcHAuaCcsICAg
ICAgJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJyksCisgICAgIyBOT1RFOiBUaGlzIGlzIGEgZ3Vlc3Mg
LSBJIGhhdmVuJ3Qgc2VlbiAndGV4dC5zY3JpcHQucHl0aG9uJyBpbiBhY3R1YWwgcHJvamVjdCBm
aWxlcy4KKyAgICAnLnB5JyAgICAgICAgICAgOiAoJzQnLCAgICAgJ3RleHQuc2NyaXB0LnB5dGhv
bicsICAgICdQQlhTb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICMgRklYTUU6ICcuZnJhbWV3b3Jr
JyB1c2VzIGRpZmZlcmVudCBwcm9wZXJ0aWVzIG9uIFBCWEZpbGVSZWZlcmVuY2UgLSBmaW5kIG91
dCBob3cgdG8gZ2VuZXJhdGUgdGhlbQorICAgICMnLmZyYW1ld29yaycgICAgOiAoTm9uZSwgICAg
J3dyYXBwZXIuZnJhbWV3b3JrJywgICAgICdQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZScpLAorfQor
CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworY2xh
c3MgWGNvZGVVSUQob2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5nIGEgc2lu
Z2xlIFhjb2RlIFVJRC4KKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBV
SURzIGZyb20gb3RoZXIgc3RyaW5nIHZhbHVlcy4KKyAgICBVSURzIGFyZSB1c2VkIGFzIGtleXMg
aW4gdmFyaW91cyBpbnRlcm5hbCBtYXBzLiBXaGVuIHdyaXR0ZW4sIHRoZXkgcmVxdWlyZSBhbiBh
ZGRpdGlvbmFsIGNvbW1lbnQgdG8gYmUgZ2VuZXJhdGVkLgorICAgICIiIgorICAgIE1BVENIID0g
cmUuY29tcGlsZSgnXlswLTlBLUZdezI0fScpCisgICAgQk9UVE9NID0gJzAnICogMjQKKyAgICBU
T1AgPSAnRicgKiAyNAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVpZHN0cj1Ob25lKToKKyAg
ICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodWlkc3RyLCBiYXNlc3RyaW5nKQorICAgICAgICBhc3Nl
cnQgbm90IHVpZHN0ciBvciBYY29kZVVJRC5pc192YWxpZF9VSUQodWlkc3RyKQorICAgICAgICBp
ZiBub3QgdWlkc3RyOgorICAgICAgICAgICAgdWlkc3RyID0gJzAnICogMjQKKyAgICAgICAgc2Vs
Zi5zdHJpbmcgPSB1aWRzdHIKKyAgICAgICAgc2VsZi5yZWZlcnJlZF9vYmplY3QgPSBOb25lCisg
ICAgICAgIHNlbGYuY2FjaGVkX2NvbW1lbnQgPSBOb25lCisKKyAgICBkZWYgX19jbXBfXyhzZWxm
LCBvdGhlcik6CisgICAgICAgIGFzc2VydCBzZWxmIGlzIG90aGVyIG9yIHNlbGYuc3RyaW5nICE9
IG90aGVyLnN0cmluZworICAgICAgICByZXR1cm4gY21wKHNlbGYuc3RyaW5nLCBvdGhlci5zdHJp
bmcpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYg
aXMgb3RoZXIgb3Igc2VsZi5zdHJpbmcgIT0gb3RoZXIuc3RyaW5nCisgICAgICAgIHJldHVybiBz
ZWxmLnN0cmluZyA9PSBvdGhlci5zdHJpbmcKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBvdGhlciBvciBzZWxmLnN0cmluZyAhPSBvdGhlci5z
dHJpbmcKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyaW5nICE9IG90aGVyLnN0cmluZworCisgICAg
ZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLnN0cmluZykKKwor
ICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyaW5nICE9
ICcwJyAqIDI0CisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBYY29k
ZVVJRC5pc192YWxpZF9VSUQoc2VsZi5zdHJpbmcpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGlzX3ZhbGlkX1VJRCh1aWRzdHIpOgorICAgICAgICByZXR1cm4gbGVuKHVpZHN0cikgPT0g
MjQgYW5kIFhjb2RlVUlELk1BVENILm1hdGNoKHVpZHN0cikgYW5kIHVpZHN0ciAhPSBYY29kZVVJ
RC5CT1RUT00gYW5kIHVpZHN0ciAhPSBYY29kZVVJRC5UT1AKKworCitjbGFzcyBYY29kZVF1b3Rl
ZFN0cmluZyhzdHIpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYSBzaW5nbGUgWGNv
ZGUgU3RyaW5nIChzdHJpbmcgaW4gcXVvdGVzIHdpdGhpbiB0aGUgcHJvamVjdCBmaWxlKS4KKyAg
ICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgb3JpZ2luYWwgZmllbGQg
dmFsdWUgd2FzIGVuY2xvc2VkIGluIHF1b3Rlcy4KKyAgICBTdHJpbmdzIGFyZSBwdXQgaW5zaWRl
IGRvdWJsZSBxdW90ZXMgaWYgd3JpdHRlbiBhcyB2YWx1ZXMsIGJ1dCB3cml0dGVuIHdpdGhvdXQg
cXVvdGVzIHdpdGhpbiBjb21tZW50cy4KKyAgICAiIiIKKyAgICBkZWYgX19oYXNoX18oc2VsZik6
CisgICAgICAgIHJldHVybiBoYXNoKCciJyArIHNlbGYgKyAnIicpCisKKyAgICBkZWYgX19yZXBy
X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18oKQorCisgICAgZGVmIF9fc3Ry
X18oc2VsZik6CisgICAgICAgIHJldHVybiAnIicgKyBzZWxmLnJlcGxhY2UoJyInLCAnXCInKSAr
ICciJworCisKK2NsYXNzIFhjb2RlUXVvdGVkU3RyaW5nTGlzdChsaXN0KToKKyAgICAiIiIKKyAg
ICBDbGFzcyBjb250YWluaW5nIGEgbGlzdCBvZiBYY29kZVF1b3RlZFN0cmluZyBvYmplY3RzLgor
ICAgICIiIgorICAgIGRlZiBhcHBlbmQoc2VsZiwgcXVvdGVkX3N0cmluZyk6CisgICAgICAgIGFz
c2VydCBpc2luc3RhbmNlKHF1b3RlZF9zdHJpbmcsIFhjb2RlUXVvdGVkU3RyaW5nKSwgcXVvdGVk
X3N0cmluZworICAgICAgICBsaXN0LmFwcGVuZChzZWxmLCBxdW90ZWRfc3RyaW5nKQorCisKK2Ns
YXNzIFhjb2RlVUlETGlzdChsaXN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5nIGEg
bGlzdCBvZiBYY29kZVVJRCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBhcHBlbmQoc2VsZiwg
dWlkKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodWlkLCBYY29kZVVJRCksIHVpZAorICAg
ICAgICBsaXN0LmFwcGVuZChzZWxmLCB1aWQpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorCisjICQkJCBUT0RPOiBUaGUgdmFyaW91cyBQQlguLi4g
b2JqZWN0J3MgcHJvcGVydGllcyBkdXBsaWNhdGUgdGhlIFVJRCBvYmplY3RzIG9mIHRoZSBtYXAg
a2V5IHdpdGggdGhlIHNhbWUgaW5mb3JtYXRpb24hCisjICAgICAgICAgICBGdXJ0aGVybW9yZSwg
dGhpcyBtYXkgZWFzaWx5IGdldCBvdXQgb2Ygc3luYy4KKyMKKyMgICAgICAgIC0+IEZpbmQgYSB3
YXkgdG8gc2hhcmUgdGhpcywgc2ltaWxhciBhcyBpcyBiZWluZyBkb25lIGZvciAnbmFtZScgYW5k
ICdwYXRoJworIyAgICAgICAgICAgKFByb2JsZW06IHByb3BlcnRpZXMgdXNlIHNldHMgb2Ygb2Jq
ZWN0cyB2cy4gdGhlIGRpY3QncyBYY29kZVVJRExpc3QpCisKKworY2xhc3MgUEJYT2JqZWN0KG9i
amVjdCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcywgaG9sZGluZyBhIGRlZmluaXRpb24gZGlj
dCBmb3IgYW4gWGNvZGUgb2JqZWN0LgorICAgIEl0IGFsc28gc3RvcmVzIHRoZSBVSUQgb2YgdGhl
IG9iamVjdCwgYW5kIGZvcndhcmRzIGFjY2VzcyB0byB0aGUgJ25hbWUncHJvcGVydHkgdG8gdGhl
IHVuZGVybHlpbmcgZGljdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkLCBp
c2EsIG5hbWU9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQp
CisgICAgICAgIGFzc2VydCB1aWQuaXNfdmFsaWQoKQorICAgICAgICBhc3NlcnQgbm90IHVpZC5y
ZWZlcnJlZF9vYmplY3Qgb3IgdWlkLnJlZmVycmVkX29iamVjdCBpcyBzZWxmCisgICAgICAgIGFz
c2VydCBpc2EKKyAgICAgICAgc2VsZi51aWQgPSB1aWQKKyAgICAgICAgc2VsZi51aWQucmVmZXJy
ZWRfb2JqZWN0ID0gc2VsZgorICAgICAgICBzZWxmLmlzYSA9IGlzYQorICAgICAgICBzZWxmLnBy
b3BlcnRpZXMgPSB7ICdpc2EnOiBpc2EgfQorCisgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtl
eSk6CisgICAgICAgIHJhaXNlICJDb3VsZCBub3QgZmluZCBrZXkgJyVzJyB3aXRoIFVJRCAlcyBp
biAlcyEiICUgKGtleSwgdWlkLCBzZWxmKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gaGFzaChzZWxmLnVpZCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICBzID0gc2VsZi5pc2EgKyAiICIgKyBzZWxmLnVpZC5zdHJpbmcKKyAgICAgICAgbiA9IHNl
bGYucHJvcGVydGllcy5nZXQoJ25hbWUnKQorICAgICAgICBwID0gc2VsZi5wcm9wZXJ0aWVzLmdl
dCgncGF0aCcpCisgICAgICAgIGlmIG46CisgICAgICAgICAgICBzICs9ICIgbmFtZTogJyVzJyIg
JSBuCisgICAgICAgIGlmIHA6CisgICAgICAgICAgICBzICs9ICIgcGF0aDogJyVzJyIgJSBwCisg
ICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLnVpZC5pc192YWxpZCgpCisKKyAgICBkZWYgZ2V0X25hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnByb3BlcnRpZXMuZ2V0KCduYW1lJykKKworICAgIGRlZiBzZXRfbmFtZShz
ZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgIHNlbGYucHJvcGVydGll
c1snbmFtZSddID0gbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kZWxfbmFt
ZSgpCisKKyAgICBkZWYgZGVsX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYucHJvcGVydGllcy5w
b3AoJ25hbWUnLCBOb25lKQorCisgICAgbmFtZSA9IHByb3BlcnR5KGdldF9uYW1lLCBzZXRfbmFt
ZSwgZGVsX25hbWUsICInbmFtZScgcHJvcGVydHkgb24gUEJYIG9iamVjdHMiKQorCisgICAgZGVm
IGdldF9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcm9wZXJ0aWVzLmdldCgncGF0
aCcpCisKKyAgICBkZWYgc2V0X3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGg6Cisg
ICAgICAgICAgICBzZWxmLnByb3BlcnRpZXNbJ3BhdGgnXSA9IHBhdGgKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuZGVsX3BhdGgoKQorCisgICAgZGVmIGRlbF9wYXRoKHNlbGYpOgor
ICAgICAgICBzZWxmLnByb3BlcnRpZXMucG9wKCdwYXRoJywgTm9uZSkKKworICAgIHBhdGggPSBw
cm9wZXJ0eShnZXRfcGF0aCwgc2V0X3BhdGgsIGRlbF9wYXRoLCAiJ3BhdGgnIHByb3BlcnR5IG9u
IFBCWCBvYmplY3RzIikKKworCitjbGFzcyBQQlhGaWxlUmVmZXJlbmNlKFBCWE9iamVjdCwgR3Jv
dXBQcm9qZWN0RmlsZVJlZmVyZW5jZSk6CisgICAgIiIiCisgICAgQ2xhc3Mgc3RvcmluZyBhIFBC
WEZpbGVSZWZlcmVuY2Ugb2JqZWN0LCByZWZlcnJpbmcgdG8gYSBDb21tb25GaWxlLgorICAgIEEg
UEJYRmlsZVJlZmVyZW5jZSBpcyBjb250YWluZWQgaW4gUEJYR3JvdXAgYW5kIFBCWFZhcmlhbnRH
cm91cCBvYmplY3RzLgorICAgIEl0IG1heSBiZSByZWZlcmVuY2VkIGl0c2VsZiBieSBhIFBCWEJ1
aWxkRmlsZSBvYmplY3QuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVpZCwgaXNh
LCBuYW1lPU5vbmUsIGZpbGU9Tm9uZSwgZ3JvdXA9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2Eg
PT0gJ1BCWEZpbGVSZWZlcmVuY2UnCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRfXyhzZWxmLCB1
aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgR3JvdXBQcm9qZWN0RmlsZVJlZmVyZW5jZS5fX2luaXRf
XyhzZWxmLCBmaWxlLCBncm91cCkKKyAgICAgICAgIyBkZWZhdWx0IHByb3BlcnRpZXMKKyAgICAg
ICAgc2VsZi5wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10gPSAnIjxncm91cD4iJworCisgICAgZGVm
IGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYp
IGFuZCBHcm91cFByb2plY3RGaWxlUmVmZXJlbmNlLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYg
Y29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvcGVydGllcy5nZXQoJ25hbWUn
KSBvciBzZWxmLmZpbGUubmFtZQorCisKK2NsYXNzIFBCWFZhcmlhbnRHcm91cENvbnRhaW5lcihv
YmplY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgUEJYVmFyaWFudEdyb3VwIG9i
amVjdHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnZh
cmlhbnRfZ3JvdXBzID0gc2V0KCkKKworICAgIGRlZiBfYWRkX3ZhcmlhbnRfZ3JvdXAoc2VsZiwg
dmFyaWFudF9ncm91cCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhcmlhbnRfZ3JvdXAs
IFBCWFZhcmlhbnRHcm91cCkKKyAgICAgICAgYXNzZXJ0IHZhcmlhbnRfZ3JvdXAgbm90IGluIHNl
bGYudmFyaWFudF9ncm91cHMKKyAgICAgICAgc2VsZi52YXJpYW50X2dyb3Vwcy5hZGQodmFyaWFu
dF9ncm91cCkKKworICAgIGRlZiBfcmVtb3ZlX3ZhcmlhbnRfZ3JvdXAoc2VsZiwgdmFyaWFudF9n
cm91cCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhcmlhbnRfZ3JvdXAsIFBCWFZhcmlh
bnRHcm91cCkKKyAgICAgICAgYXNzZXJ0IHZhcmlhbnRfZ3JvdXAgaW4gc2VsZi52YXJpYW50X2dy
b3VwcworICAgICAgICBzZWxmLnZhcmlhbnRfZ3JvdXBzLnJlbW92ZSh2YXJpYW50X2dyb3VwKQor
CisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVm
IGlzX2VtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYudmFyaWFudF9ncm91cHMK
KworCitjbGFzcyBQQlhWYXJpYW50R3JvdXAoUEJYT2JqZWN0LCBQcm9qZWN0RGlyZWN0b3J5UmVm
ZXJlbmNlLCBQcm9qZWN0RmlsZVJlZmVyZW5jZUNvbnRhaW5lcik6CisgICAgIiIiCisgICAgQSBQ
QlhWYXJpYW50R3JvdXAgaXMgYSBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgUEJYRmlsZVJlZmVy
ZW5jZXMsIGVzc2VudGlhbGx5IGEgbWV0YSBmaWxlIHJlZmVyZW5jZS4KKyAgICBMaWtlIGEgZ3Jv
dXAgaXQgbWF5IGFsc28gcmVmZXIgYSBkaXJlY3RvcnkgYW5kL29yIGhhdmUgYSBuYW1lLgorICAg
ICIiIgorICAgIElEX0NPVU5URVIgPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkLCBp
c2EsIG5hbWU9Tm9uZSwgY29udGFpbmVyPU5vbmUsIGRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAg
YXNzZXJ0IGlzYSA9PSAnUEJYVmFyaWFudEdyb3VwJworICAgICAgICBhc3NlcnQgbm90IGNvbnRh
aW5lciBvciBpc2luc3RhbmNlKGNvbnRhaW5lciwgUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyKQor
ICAgICAgICBQQlhPYmplY3QuX19pbml0X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAg
IFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2UuX19pbml0X18oc2VsZiwgZGlyZWN0b3J5KQorICAg
ICAgICBQcm9qZWN0RmlsZVJlZmVyZW5jZUNvbnRhaW5lci5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBQQlhWYXJpYW50R3JvdXAuSURfQ09VTlRFUiArPSAxCisgICAgICAgIHNlbGYuX2lkID0gUEJY
VmFyaWFudEdyb3VwLklEX0NPVU5URVIKKyAgICAgICAgc2VsZi5jb250YWluZXIgPSBjb250YWlu
ZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5f
aWQpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYg
aXMgb3RoZXIgb3Igc2VsZi5faWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJldHVybiBzZWxmIGlz
IG90aGVyCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IG5v
dCBvdGhlciBvciBpc2luc3RhbmNlKG90aGVyLCBzZWxmLlByb2plY3RHcm91cCkKKyAgICAgICAg
YXNzZXJ0IHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5faWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJl
dHVybiBzZWxmIGlzIG5vdCBvdGhlcgorCisgICAgZGVmIF9zZXRfY29udGFpbmVyKHNlbGYsIGNv
bnRhaW5lcik6CisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlzaW5zdGFuY2UoY29u
dGFpbmVyLCBQQlhWYXJpYW50R3JvdXBDb250YWluZXIpCisgICAgICAgIGFzc2VydCBub3Qgc2Vs
Zi5jb250YWluZXIKKyAgICAgICAgc2VsZi5jb250YWluZXIgPSBjb250YWluZXIKKworICAgIGRl
ZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBhbmQgUEJYT2JqZWN0
LmlzX3ZhbGlkKHNlbGYpIGFuZCBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlLmlzX3ZhbGlkKHNl
bGYpIGFuZCBQcm9qZWN0RmlsZVJlZmVyZW5jZUNvbnRhaW5lci5pc192YWxpZChzZWxmKQorCisg
ICAgZGVmIGNvbW1lbnQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLm5hbWUKKyAgICAgICAg
cmV0dXJuIHNlbGYubmFtZSBvciBzZWxmLnVpZC5zdHJpbmcKKworCitjbGFzcyBQQlhHcm91cChQ
QlhPYmplY3QsIFByb2plY3RHcm91cCwgUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyKToKKyAgICAi
IiIKKyAgICBYY29kZS1zcGVjaWZpYyBncm91cCBkZWZpbml0aW9uIGNsYXNzLgorICAgICIiIgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25lLCBwYXJlbnRfZ3JvdXA9
Tm9uZSwgZGlyZWN0b3J5PU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNhID09ICdQQlhHcm91cCcK
KyAgICAgICAgUEJYT2JqZWN0Ll9faW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1lKQorICAgICAg
ICBQcm9qZWN0R3JvdXAuX19pbml0X18oc2VsZiwgcGFyZW50X2dyb3VwLCBkaXJlY3RvcnkpCisg
ICAgICAgIFBCWFZhcmlhbnRHcm91cENvbnRhaW5lci5fX2luaXRfXyhzZWxmKQorICAgICAgICAj
IGRlZmF1bHQgcHJvcGVydGllcworICAgICAgICBzZWxmLnByb3BlcnRpZXNbJ3NvdXJjZVRyZWUn
XSA9ICciPGdyb3VwPiInCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5kaXJlY3Rvcnk6CisgICAgICAgICAgICBkaXJfc3RyaW5nID0gc2VsZi5kaXJlY3RvcnkuX2Rl
c2NwYXRoX3dpdGhfc2VwKCcvJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcl9zdHJp
bmcgPSAiKE5vbmUpIgorICAgICAgICByZXR1cm4gUEJYT2JqZWN0Ll9fc3RyX18oc2VsZikgKyAi
IERpcjogJyVzJyIgJSBkaXJfc3RyaW5nCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAg
ICAgIHJldHVybiBQQlhPYmplY3QuaXNfdmFsaWQoc2VsZikgYW5kIFByb2plY3RHcm91cC5pc192
YWxpZChzZWxmKSBhbmQgUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyLmlzX3ZhbGlkKHNlbGYpCisK
KyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiBQcm9qZWN0R3JvdXAuaXNf
ZW1wdHkoc2VsZikgYW5kIFBCWFZhcmlhbnRHcm91cENvbnRhaW5lci5pc19lbXB0eSgpCisKKyAg
ICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuZGlyZWN0b3J5CisgICAg
ICAgIHJldHVybiBzZWxmLm5hbWUgb3Igc2VsZi5wcm9wZXJ0aWVzLmdldCgncGF0aCcpIG9yIHNl
bGYudWlkLnN0cmluZworCisKK2NsYXNzIFBCWEJ1aWxkRmlsZShQQlhPYmplY3QpOgorICAgICIi
IgorICAgIENsYXNzIHN0b3JpbmcgYSBQQlhCdWlsZEZpbGUgb2JqZWN0LgorICAgIEEgUEJYQnVp
bGRGaWxlIGlzIGNvbnRhaW5lZCBpbiBhIGJ1aWxkIHBoYXNlIGFuZCByZWZlcmVuY2VzIGEgUEJY
RmlsZVJlZmVyZW5jZS4KKyAgICBJbiBhZGRpdGlvbiwgaXQgbWF5IHNldCBmbGFncyBvbiB0aGUg
ZmlsZSB1c2VkIGluIGJ1aWxkaW5nIChtb3N0IGNvbW1vbmx5IHRoZSBoZWFkZXIgcm9sZSkuCisK
KyAgICBOb3RlOiAnZmlsZVJlZicgY2FuIGJlIGEgUEJYRmlsZVJlZmVyZW5jZSBvciBhIFBCWFZh
cmlhbnRHcm91cAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFt
ZT1Ob25lLCBmaWxlUmVmPU5vbmUsIGJ1aWxkX3BoYXNlPU5vbmUpOgorICAgICAgICBhc3NlcnQg
aXNhID09ICdQQlhCdWlsZEZpbGUnCisgICAgICAgIGFzc2VydCBub3QgZmlsZVJlZiBvciBpc2lu
c3RhbmNlKGZpbGVSZWYsIFBCWEZpbGVSZWZlcmVuY2UpIG9yIGlzaW5zdGFuY2UoZmlsZVJlZiwg
UEJYVmFyaWFudEdyb3VwKQorICAgICAgICBhc3NlcnQgbm90IGJ1aWxkX3BoYXNlIG9yIGlzaW5z
dGFuY2UoYnVpbGRfcGhhc2UsIFBCWEJ1aWxkUGhhc2UpCisgICAgICAgIFBCWE9iamVjdC5fX2lu
aXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgc2VsZi5maWxlUmVmID0gZmlsZVJl
ZgorICAgICAgICBzZWxmLmJ1aWxkX3BoYXNlID0gYnVpbGRfcGhhc2UKKworICAgIGRlZiBfX3N0
cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gUEJYT2JqZWN0Ll9fc3RyX18oc2VsZikgKyAiICgt
PiAlcykiICUgc2VsZi5maWxlUmVmCisKKyAgICBkZWYgX3NldF9maWxlUmVmKHNlbGYsIGZpbGVS
ZWYpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlUmVmLCBQQlhGaWxlUmVmZXJlbmNl
KSBvciBpc2luc3RhbmNlKGZpbGVSZWYsIFBCWFZhcmlhbnRHcm91cCkKKyAgICAgICAgYXNzZXJ0
IG5vdCBzZWxmLmZpbGVSZWYKKyAgICAgICAgc2VsZi5maWxlUmVmID0gZmlsZVJlZgorCisgICAg
ZGVmIF9zZXRfYnVpbGRfcGhhc2Uoc2VsZiwgYnVpbGRfcGhhc2UpOgorICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZShidWlsZF9waGFzZSwgUEJYQnVpbGRQaGFzZSkKKyAgICAgICAgYXNzZXJ0IG5v
dCBidWlsZF9waGFzZSBvciBub3Qgc2VsZi5idWlsZF9waGFzZQorICAgICAgICBzZWxmLmJ1aWxk
X3BoYXNlID0gYnVpbGRfcGhhc2UKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIFBCWE9iamVjdC5pc192YWxpZChzZWxmKSBhbmQgc2VsZi5maWxlUmVmIGFuZCBzZWxm
LmJ1aWxkX3BoYXNlCisKKyAgICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICIl
cyBpbiAlcyIgJSAoc2VsZi5maWxlUmVmLmNvbW1lbnQoKS5zdHJpcCgnIicpLCBzZWxmLmJ1aWxk
X3BoYXNlLmNvbW1lbnQoKS5zdHJpcCgnIicpKQorCisKK2NsYXNzIFBCWEJ1aWxkUGhhc2UoUEJY
T2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5nIGFuIFhjb2RlIGJ1aWxkIHBo
YXNlIChlLmcuIFBCWFNvdXJjZXNCdWlsZFBoYXNlKS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICBhc3Nl
cnQgaXNhIGluIFBCWF9CVUlMRF9QSEFTRV9UWVBFUworICAgICAgICBQQlhPYmplY3QuX19pbml0
X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0Cisg
ICAgICAgIHNlbGYuYnVpbGRfZmlsZXMgPSBzZXQoKQorCisgICAgZGVmIF9zZXRfdGFyZ2V0KHNl
bGYsIHRhcmdldCk6CisgICAgICAgIGFzc2VydCB0YXJnZXQKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UodGFyZ2V0LCBQQlhUYXJnZXQpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi50YXJnZXQK
KyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKworICAgIGRlZiBfYWRkX2J1aWxkX2ZpbGUo
c2VsZiwgYnVpbGRfZmlsZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX2ZpbGUs
IFBCWEJ1aWxkRmlsZSkKKyAgICAgICAgYXNzZXJ0IGJ1aWxkX2ZpbGUgbm90IGluIHNlbGYuYnVp
bGRfZmlsZXMKKyAgICAgICAgc2VsZi5idWlsZF9maWxlcy5hZGQoYnVpbGRfZmlsZSkKKworICAg
IGRlZiBfcmVtb3ZlX2J1aWxkX2ZpbGUoc2VsZiwgYnVpbGRfZmlsZSk6CisgICAgICAgIGFzc2Vy
dCBpc2luc3RhbmNlKGJ1aWxkX2ZpbGUsIFBCWEJ1aWxkRmlsZSkKKyAgICAgICAgYXNzZXJ0IGJ1
aWxkX2ZpbGUgaW4gc2VsZi5idWlsZF9maWxlcworICAgICAgICBzZWxmLmJ1aWxkX2ZpbGVzLnJl
bW92ZShidWlsZF9maWxlKQorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi50YXJnZXQgYW5kIFBCWE9iamVjdC5pc192YWxpZChzZWxmKQorCisgICAgZGVmIGNv
bW1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgb3Igc2VsZi5pc2FbMzotMTBd
ICAjIFN0cmlwICdQQlgnIGFuZCAnQnVpbGRQaGFzZScuCisKKworY2xhc3MgWENDb25maWd1cmF0
aW9uTGlzdChQQlhPYmplY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgZGF0YSBm
b3IgYSBYQ0NvbmZpZ3VyYXRpb25MaXN0IG9iamVjdC4KKyAgICBUaGlzIGlzIHJlZmVycmVkIHRv
IGJ5IFBCWFRhcmdldCBhbmQgUEJYUHJvamVjdCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25lLCByZWZlcnJpbmdfb2JqZWN0PU5vbmUp
OgorICAgICAgICBhc3NlcnQgaXNhID09ICdYQ0NvbmZpZ3VyYXRpb25MaXN0JworICAgICAgICBh
c3NlcnQgbm90IHJlZmVycmluZ19vYmplY3Qgb3IgaXNpbnN0YW5jZShyZWZlcnJpbmdfb2JqZWN0
LCBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIpCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRf
XyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgc2VsZi5yZWZlcnJpbmdfb2JqZWN0ID0g
cmVmZXJyaW5nX29iamVjdAorICAgICAgICBzZWxmLmJ1aWxkX2NvbmZpZ3VyYXRpb25zID0gW10g
IyBsaXN0IG9mIFhDQnVpbGRDb25maWd1cmF0aW9uIG9iamVjdHMKKworICAgIGRlZiBfc2V0X3Jl
ZmVycmVyKHNlbGYsIHJlZmVycmVyKToKKyAgICAgICAgYXNzZXJ0IHJlZmVycmVyCisgICAgICAg
IGFzc2VydCBpc2luc3RhbmNlKHJlZmVycmVyLCBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIp
CisgICAgICAgIHNlbGYucmVmZXJyaW5nX29iamVjdCA9IHJlZmVycmVyCisKKyAgICBkZWYgX2Fw
cGVuZF9idWlsZF9jb25maWd1cmF0aW9uKHNlbGYsIGJ1aWxkX2NvbmZpZ3VyYXRpb24pOgorICAg
ICAgICBhc3NlcnQgYnVpbGRfY29uZmlndXJhdGlvbgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShidWlsZF9jb25maWd1cmF0aW9uLCBYQ0J1aWxkQ29uZmlndXJhdGlvbikKKyAgICAgICAgc2Vs
Zi5idWlsZF9jb25maWd1cmF0aW9ucy5hcHBlbmQoYnVpbGRfY29uZmlndXJhdGlvbikKKworICAg
IGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVmZXJyaW5nX29iamVj
dCBhbmQgUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29tbWVudChzZWxmKToK
KyAgICAgICAgYXNzZXJ0IHNlbGYucmVmZXJyaW5nX29iamVjdAorICAgICAgICBpZiBpc2luc3Rh
bmNlKHNlbGYucmVmZXJyaW5nX29iamVjdCwgUEJYUHJvamVjdCk6CisgICAgICAgICAgICB0YXJn
ZXRfY29tbWVudCA9IHNlbGYucmVmZXJyaW5nX29iamVjdC5wcm9qZWN0Lm5hbWUKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHRhcmdldF9jb21tZW50ID0gc2VsZi5yZWZlcnJpbmdfb2JqZWN0
LmNvbW1lbnQoKQorICAgICAgICByZXR1cm4gJ0J1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
JXMgIiVzIicgJSAoc2VsZi5yZWZlcnJpbmdfb2JqZWN0LmlzYSwgdGFyZ2V0X2NvbW1lbnQuc3Ry
aXAoJyInKSkKKworCitjbGFzcyBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIob2JqZWN0KToK
KyAgICAiIiIKKyAgICBNaXhpbiBiYXNlIGNsYXNzIGZvciBjbGFzc2VzIHJlZmVycmluZyBhIFhD
Q29uZmlndXJhdGlvbkxpc3QsIGkuZS4gUEJYVGFyZ2V0LCBQQlhQcm9qZWN0IGFuZCBYQ0J1aWxk
Q29uZmlndXJhdGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWd1cmF0
aW9uX2xpc3Q9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3QgY29uZmlndXJhdGlvbl9saXN0IG9y
IGlzaW5zdGFuY2UoY29uZmlndXJhdGlvbl9saXN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0KQorICAg
ICAgICBzZWxmLmNvbmZpZ3VyYXRpb25fbGlzdCA9IGNvbmZpZ3VyYXRpb25fbGlzdAorCisgICAg
ZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25maWd1cmF0aW9uX2xp
c3QKKworICAgIGRlZiBfc2V0X2NvbmZpZ3VyYXRpb25fbGlzdChzZWxmLCBjb25maWd1cmF0aW9u
X2xpc3QpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb25maWd1cmF0aW9uX2xpc3QsIFhD
Q29uZmlndXJhdGlvbkxpc3QpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5jb25maWd1cmF0aW9u
X2xpc3QKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uX2xpc3QgPSBjb25maWd1cmF0aW9uX2xp
c3QKKworCitjbGFzcyBYQ0J1aWxkQ29uZmlndXJhdGlvbihQQlhPYmplY3QsIFhDQ29uZmlndXJh
dGlvbkxpc3RSZWZlcnJlcik6CisgICAgIiIiCisgICAgQ2xhc3MgY29udGFpbmluZyBkYXRhIGZv
ciBhIFhDQnVpbGRDb25maWd1cmF0aW9uIG9iamVjdC4KKyAgICBUaGlzIGlzIHJlZmVycmVkIHRv
IGJ5IFhDQ29uZmlndXJhdGlvbkxpc3Qgb2JqZWN0cworICAgICIiIgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25lLCBjb25maWd1cmF0aW9uX2xpc3Q9Tm9uZSk6Cisg
ICAgICAgIGFzc2VydCBpc2EgPT0gJ1hDQnVpbGRDb25maWd1cmF0aW9uJworICAgICAgICBQQlhP
YmplY3QuX19pbml0X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAgIFhDQ29uZmlndXJh
dGlvbkxpc3RSZWZlcnJlci5fX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2xpc3QpCisKKyAg
ICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgYW5kIFBCWE9i
amVjdC5pc192YWxpZChzZWxmKSBhbmQgWENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyLmlzX3Zh
bGlkKHNlbGYpCisKKyAgICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYu
bmFtZQorICAgICAgICByZXR1cm4gc2VsZi5uYW1lIG9yIHNlbGYudWlkLnN0cmluZworCisKK2Ns
YXNzIFBCWFRhcmdldChQQlhPYmplY3QsIFhDQ29uZmlndXJhdGlvbkxpc3RSZWZlcnJlcik6Cisg
ICAgIiIiCisgICAgQ2xhc3MgY29udGFpbmluZyBhIFBCWE5hdGl2ZVRhcmdldCBvciBQQlhBZ2dy
ZWdhdGVUYXJnZXQsIGluY2wuIGl0cyBidWlsZCBwaGFzZXMKKyAgICAiIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwgcHJvamVjdD1Ob25lLCBjb25maWd1cmF0
aW9uX2xpc3Q9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2EgPT0gJ1BCWE5hdGl2ZVRhcmdldCcg
b3IgaXNhID09ICdQQlhBZ2dyZWdhdGVUYXJnZXQnCisgICAgICAgIGFzc2VydCBub3QgcHJvamVj
dCBvciBpc2luc3RhbmNlKHByb2plY3QsIFBCWFByb2plY3QpCisgICAgICAgIFBCWE9iamVjdC5f
X2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgWENDb25maWd1cmF0aW9uTGlz
dFJlZmVycmVyLl9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb25fbGlzdCkKKyAgICAgICAgc2Vs
Zi5wcm9qZWN0ID0gcHJvamVjdAorICAgICAgICBzZWxmLmJ1aWxkX3BoYXNlcyA9IFtdICAjIGxp
c3Qgb2YgUEJYQnVpbGRQaGFzZSBlbnRyaWVzIAorCisgICAgZGVmIF9zZXRfcHJvamVjdChzZWxm
LCBwcm9qZWN0KToKKyAgICAgICAgYXNzZXJ0IG5vdCBwcm9qZWN0IG9yIGlzaW5zdGFuY2UocHJv
amVjdCwgUEJYUHJvamVjdCkKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAorCisgICAg
ZGVmIF9hcHBlbmRfYnVpbGRfcGhhc2Uoc2VsZiwgYnVpbGRfcGhhc2UpOgorICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShidWlsZF9waGFzZSwgUEJYQnVpbGRQaGFzZSkKKyAgICAgICAgYXNzZXJ0
IGJ1aWxkX3BoYXNlIG5vdCBpbiBzZWxmLmJ1aWxkX3BoYXNlcworICAgICAgICBzZWxmLmJ1aWxk
X3BoYXNlcy5hcHBlbmQoYnVpbGRfcGhhc2UpCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLm5hbWUgYW5kIFBCWE9iamVjdC5pc192YWxpZChzZWxmKSBhbmQg
WENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29t
bWVudChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYubmFtZQorICAgICAgICByZXR1cm4gc2Vs
Zi5uYW1lIG9yIHNlbGYudWlkLnN0cmluZworCisKK2NsYXNzIFBCWFByb2plY3QoUEJYT2JqZWN0
LCBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRh
aW5pbmcgZGF0YSBmb3IgYSBQQlhQcm9qZWN0IG9iamVjdC4KKyAgICAiIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgdWlkLCBpc2EsIHByb2plY3QsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9s
aXN0PU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNhID09ICdQQlhQcm9qZWN0JworICAgICAgICBQ
QlhPYmplY3QuX19pbml0X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAgIFhDQ29uZmln
dXJhdGlvbkxpc3RSZWZlcnJlci5fX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2xpc3QpCisg
ICAgICAgIHNlbGYucHJvamVjdCA9IHByb2plY3QKKyAgICAgICAgc2VsZi50YXJnZXRzID0gW10g
ICMgbGlzdCBvZiBQQlhUYXJnZXQgZW50cmllcworICAgICAgICBzZWxmLm1haW5fZ3JvdXAgPSBO
b25lCisKKyAgICBkZWYgX2FwcGVuZF90YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UodGFyZ2V0LCBQQlhUYXJnZXQpCisgICAgICAgIGFzc2VydCB0YXJnZXQg
bm90IGluIHNlbGYudGFyZ2V0cworICAgICAgICBzZWxmLnRhcmdldHMuYXBwZW5kKHRhcmdldCkK
KworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFBCWE9iamVjdC5pc192
YWxpZChzZWxmKSBhbmQgWENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyLmlzX3ZhbGlkKHNlbGYp
CisKKyAgICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICJQcm9qZWN0IG9iamVj
dCIKKworCitjbGFzcyBQQlhBcmJpdHJhcnlPYmplY3QoUEJYT2JqZWN0KToKKyAgICAiIiIKKyAg
ICBDbGFzcyBob2xkaW5nIGEgdG9wLWxldmVsIFhjb2RlIG9iamVjdCB0aGF0IGlzIG5vbmUgb2Yg
dGhlIGFib3ZlLiBUaG9zZSBhcmUgQUZBSUNUOgorICAgICAgICBQQlhDb250YWluZXJJdGVtUHJv
eHkKKyAgICAgICAgUEJYVGFyZ2V0RGVwZW5kZW5jeQorICAgIHdoZXJlOgorICAgICAgICBQQlhO
YXRpdmVUYXJnZXQuZGVwZW5kZW5jaWVzIC0+IFBCWFRhcmdldERlcGVuZGVuY3kKKyAgICAgICAg
UEJYVGFyZ2V0RGVwZW5kZW5jeS50YXJnZXRQcm94eSAtPiBQQlhDb250YWluZXJJdGVtUHJveHkK
KyAgICAiIiIKKyAgICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFt
ZSBvciBzZWxmLmlzYQorCisKKycnJworY2xhc3MgVGVtcG9yYXJ5UEJYT2JqZWN0KFBCWE9iamVj
dCk6CisgICAgIiIiCisgICAgQ2xhc3MgaG9sZGluZyBhbiBpbmNvbXBsZXRlIG9iamVjdCB0aGF0
IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhbiBhY3R1YWwgUEJYIG9iamVjdCBkdXJpbmcgcG9zdC1w
cm9jZXNzaW5nLgorICAgIEN1cnJlbnRseSB1c2VkIGZvciBQQlhGaWxlUmVmZXJlbmNlLgorICAg
ICIiIgorICAgIElEX0NPVU5URVIgPSAxMDAwMDAwMDAwCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdWlkLCBpc2EpOgorICAgICAgICBQQlhPYmplY3QuX19pbml0X18oc2VsZiwgdWlkLCBpc2Ep
CisgICAgICAgIFRlbXBvcmFyeVBCWE9iamVjdC5JRF9DT1VOVEVSICs9IDEKKyAgICAgICAgc2Vs
Zi5faWQgPSBUZW1wb3JhcnlQQlhPYmplY3QuSURfQ09VTlRFUgorCisgICAgZGVmIF9faGFzaF9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKycnJworCisjID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgWGNvZGVQcm9q
ZWN0UmVhZGVyKFByb2plY3RSZWFkZXIpOgorICAgICIiIgorICAgIFBhcnNpbmcgY2xhc3MgZm9y
IGFuIFhjb2RlIHByb2plY3QgZmlsZS4KKyAgICAiIiIKKyAgICBDT01NRU5UX01BVENIID0gcmUu
Y29tcGlsZSgnL1wqLio/XCovJykKKyAgICBJRF9NQVRDSCA9IHJlLmNvbXBpbGUoJ1tBLVphLXow
LTlfXSsnKQorICAgIFZBTFVFX01BVENIID0gcmUuY29tcGlsZSgnWy1fLy5BLVphLXowLTldKycp
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCwgZmlsZXN5c3RlbT1Ob25lKToKKyAg
ICAgICAgYXNzZXJ0IHByb2plY3QKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvamVjdCwg
WGNvZGVQcm9qZWN0KQorICAgICAgICBQcm9qZWN0UmVhZGVyLl9faW5pdF9fKHNlbGYsIHByb2pl
Y3QsIGZpbGVzeXN0ZW0pCisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5s
aW5lID0gJycKKyAgICAgICAgc2VsZi5saW5lX251bWJlciA9IDAKKyAgICAgICAgIyBSZWxldmFu
dCBvYmplY3QgdHlwZXMgYW5kIHRoZWlyIGNyZWF0aW9uIGZ1bmN0aW9ucworICAgICAgICBzZWxm
LmlzYV90b19jcmVhdGVfbWV0aG9kID0geworICAgICAgICAgICAgJ1BCWEJ1aWxkRmlsZScgICAg
ICAgICAgICAgIDogcHJvamVjdC5jcmVhdGVfUEJYQnVpbGRGaWxlLAorICAgICAgICAgICAgJ1BC
WEhlYWRlcnNCdWlsZFBoYXNlJyAgICAgIDogcHJvamVjdC5jcmVhdGVfUEJYQnVpbGRQaGFzZSwK
KyAgICAgICAgICAgICdQQlhTb3VyY2VzQnVpbGRQaGFzZScgICAgICA6IHByb2plY3QuY3JlYXRl
X1BCWEJ1aWxkUGhhc2UsCisgICAgICAgICAgICAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZScgICAg
OiBwcm9qZWN0LmNyZWF0ZV9QQlhCdWlsZFBoYXNlLAorICAgICAgICAgICAgJ1BCWEZyYW1ld29y
a3NCdWlsZFBoYXNlJyAgIDogcHJvamVjdC5jcmVhdGVfUEJYQnVpbGRQaGFzZSwKKyAgICAgICAg
ICAgICdQQlhDb3B5RmlsZXNCdWlsZFBoYXNlJyAgICA6IHByb2plY3QuY3JlYXRlX1BCWEJ1aWxk
UGhhc2UsCisgICAgICAgICAgICAnUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlJyAgOiBwcm9qZWN0
LmNyZWF0ZV9QQlhCdWlsZFBoYXNlLAorICAgICAgICAgICAgJ1BCWEZpbGVSZWZlcmVuY2UnICAg
ICAgICAgIDogcHJvamVjdC5jcmVhdGVfUEJYRmlsZVJlZmVyZW5jZSwgICMgc2VsZi5jcmVhdGVf
dGVtcG9yYXJ5X29iamVjdCwKKyAgICAgICAgICAgICdQQlhHcm91cCcgICAgICAgICAgICAgICAg
ICA6IHByb2plY3QuY3JlYXRlX1BCWEdyb3VwLAorICAgICAgICAgICAgJ1BCWFZhcmlhbnRHcm91
cCcgICAgICAgICAgIDogcHJvamVjdC5jcmVhdGVfUEJYVmFyaWFudEdyb3VwLAorICAgICAgICAg
ICAgJ1BCWEFnZ3JlZ2F0ZVRhcmdldCcgICAgICAgIDogcHJvamVjdC5jcmVhdGVfUEJYVGFyZ2V0
LAorICAgICAgICAgICAgJ1BCWE5hdGl2ZVRhcmdldCcgICAgICAgICAgIDogcHJvamVjdC5jcmVh
dGVfUEJYVGFyZ2V0LAorICAgICAgICAgICAgJ1BCWFByb2plY3QnICAgICAgICAgICAgICAgIDog
cHJvamVjdC5jcmVhdGVfUEJYUHJvamVjdCwKKyAgICAgICAgICAgICdYQ0J1aWxkQ29uZmlndXJh
dGlvbicgICAgICA6IHByb2plY3QuY3JlYXRlX1hDQnVpbGRDb25maWd1cmF0aW9uLAorICAgICAg
ICAgICAgJ1hDQ29uZmlndXJhdGlvbkxpc3QnICAgICAgIDogcHJvamVjdC5jcmVhdGVfWENDb25m
aWd1cmF0aW9uTGlzdCwKKyAgICAgICAgfQorICAgICAgICAjIGNvbnRhaW5lcnMgZm9yIHRlbXBv
cmFyeSBvYmplY3RzLCB1c2VkIGZvciBib29ra2VlcGluZworICAgICAgICBzZWxmLmFsbF90ZW1w
b3Jhcnlfb2JqZWN0cyA9IHNldCgpCisKKyAgICAjIC0tLSB0ZW1wb3Jhcnkgb2JqZWN0IGNyZWF0
aW9uIC0tLQorCisgICAgJycnCisgICAgZGVmIGNyZWF0ZV90ZW1wb3Jhcnlfb2JqZWN0KHNlbGYs
IHVpZCwgaXNhKToKKyAgICAgICAgb2JqID0gVGVtcG9yYXJ5UEJYT2JqZWN0KHVpZCwgaXNhKQor
ICAgICAgICBzZWxmLmFsbF90ZW1wb3Jhcnlfb2JqZWN0cy5hZGQob2JqKQorICAgICAgICByZXR1
cm4gb2JqCisKKyAgICBkZWYgcmVwbGFjZV90ZW1wb3JhcnlfZmlsZV9yZWZlcmVuY2Uoc2VsZiwg
dGVtcG9yYXJ5X29iamVjdCwgZmlsZSk6CisgICAgICAgIGFzc2VydCBmaWxlCisgICAgICAgIGFz
c2VydCBpc2luc3RhbmNlKGZpbGUsIENvbW1vbkZpbGUpCisgICAgICAgIHVpZCA9IHRlbXBvcmFy
eV9vYmplY3QudWlkCisgICAgICAgIHVpZC5yZWZlcnJlZF9vYmplY3QgPSBOb25lCisgICAgICAg
IGZpbGVfcmVmZXJlbmNlID0gUEJYRmlsZVJlZmVyZW5jZSh1aWQsIHRlbXBvcmFyeV9vYmplY3Qu
aXNhLCBmaWxlKQorICAgICAgICBhc3NlcnQgdWlkLnJlZmVycmVkX29iamVjdCBpcyBmaWxlX3Jl
ZmVyZW5jZQorICAgICAgICBmaWxlX3JlZmVyZW5jZS5wcm9wZXJ0aWVzID0gdGVtcG9yYXJ5X29i
amVjdC5wcm9wZXJ0aWVzCisgICAgICAgIHNlbGYuYWxsX3RlbXBvcmFyeV9vYmplY3RzLnJlbW92
ZSh0ZW1wb3Jhcnlfb2JqZWN0KQorICAgICAgICBzZWxmLnByb2plY3QuYWRkX1BCWEZpbGVSZWZl
cmVuY2UoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgIHJldHVybiBmaWxlX3JlZmVyZW5jZQorICAg
ICcnJworCisgICAgIyAtLS0gcmVhZGluZyAtLS0KKworICAgIGRlZiByZWFkbGluZShzZWxmKToK
KyAgICAgICAgd2hpbGUgbm90IHNlbGYubGluZToKKyAgICAgICAgICAgIHNlbGYubGluZSA9IHNl
bGYuX2l0ZXIubmV4dCgpCisgICAgICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAg
ICAgICAgICMgU3RyaXAgY29tbWVudHMgYW5kIHdoaXRlc3BhY2UuCisgICAgICAgICAgICBzZWxm
LmxpbmUgPSBzZWxmLkNPTU1FTlRfTUFUQ0guc3ViKCcnLCBzZWxmLmxpbmUpLnN0cmlwKCkKKyAg
ICAgICAgICAgIGlmIHNlbGYubGluZS5zdGFydHN3aXRoKCcvLycpOgorICAgICAgICAgICAgICAg
IHNlbGYubGluZSA9ICcnCisKKyAgICBkZWYgc2tpcF9uX2NoYXJzKHNlbGYsIG4pOgorICAgICAg
ICBzZWxmLmxpbmUgPSBzZWxmLmxpbmVbbjpdLmxzdHJpcCgpCisgICAgICAgIHNlbGYucmVhZGxp
bmUoKQorCisgICAgZGVmIHNraXBfY2hhcihzZWxmLCBjKToKKyAgICAgICAgc2VsZi52ZXJpZnko
c2VsZi5saW5lLnN0YXJ0c3dpdGgoYyksICJVbmV4cGVjdGVkIGNoYXJhY3RlciAnJWMnIGVuY291
bnRlcmVkICgnJWMnIGV4cGVjdGVkKSBpbiBsaW5lICVkISIgJSAoc2VsZi5saW5lWzBdLCBjLCBz
ZWxmLmxpbmVfbnVtYmVyKSkKKyAgICAgICAgc2VsZi5saW5lID0gc2VsZi5saW5lWzE6XS5sc3Ry
aXAoKQorICAgICAgICBzZWxmLnJlYWRsaW5lKCkKKworICAgIGRlZiByZWFkX21hdGNoKHNlbGYs
IHJlZ2V4cCwgZXhwbGFuYXRpb24pOgorICAgICAgICBtYXRjaCA9IHJlZ2V4cC5tYXRjaChzZWxm
LmxpbmUpCisgICAgICAgIHNlbGYudmVyaWZ5KG1hdGNoLCAiQ291bGQgbm90IHBhcnNlICVzIC0g
dW5leHBlY3RlZCBjaGFyYWN0ZXJzICclcycgZW5jb3VudGVyZWQgaW4gbGluZSAlZCEiJSAoZXhw
bGFuYXRpb24sIHNlbGYubGluZSwgc2VsZi5saW5lX251bWJlcikpCisgICAgICAgIHNlbGYuc2tp
cF9uX2NoYXJzKG1hdGNoLmVuZCgwKSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDApCisK
KyAgICBkZWYgcmVhZF9xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5s
aW5lWzBdID09ICciJworICAgICAgICBuID0gMQorICAgICAgICB3aGlsZSBzZWxmLmxpbmVbbl0g
IT0gJyInOgorICAgICAgICAgICAgIyBFc2NhcGUgJ1wnIC0ganVzdCBza2lwIHRoZSBuZXh0IGNo
YXJhY3Rlciwgd2hhdGV2ZXIgaXQgaXMuCisgICAgICAgICAgICBpZiBzZWxmLmxpbmVbbl0gPT0g
J1xcJzoKKyAgICAgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgICAgIG4gKz0gMQorICAgICAg
ICB2YWx1ZSA9IHNlbGYubGluZVsxOm5dCisgICAgICAgIHNlbGYuc2tpcF9uX2NoYXJzKG4gKyAx
KQorICAgICAgICByZXR1cm4gWGNvZGVRdW90ZWRTdHJpbmcodmFsdWUpCisKKyAgICBkZWYgcmVh
ZF9zb3VyY2VUcmVlKHNlbGYpOgorICAgICAgICAnJydBdm9pZCB1c2luZyBYY29kZVF1b3RlZFN0
cmluZyBmb3Igc291cmNlVHJlZSB2YWx1ZXMnJycKKyAgICAgICAgbiA9IDAKKyAgICAgICAgd2hp
bGUgc2VsZi5saW5lW25dICE9ICc7JzoKKyAgICAgICAgICAgIG4gKz0gMQorICAgICAgICB2YWx1
ZSA9IHNlbGYubGluZVs6bl0ucnN0cmlwKCkKKyAgICAgICAgc2VsZi5za2lwX25fY2hhcnMobikK
KyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcmVhZF9VSUQoc2VsZik6CisgICAgICAg
IG1hdGNoID0gWGNvZGVVSUQuTUFUQ0gubWF0Y2goc2VsZi5saW5lKQorICAgICAgICBzZWxmLnZl
cmlmeShtYXRjaCwgIkNvdWxkIG5vdCBwYXJzZSBVSUQgLSB1bmV4cGVjdGVkIGNoYXJhY3RlcnMg
JyVzJyBlbmNvdW50ZXJlZCBpbiBsaW5lICVkISIlIChzZWxmLmxpbmUsIHNlbGYubGluZV9udW1i
ZXIpKQorICAgICAgICBzZWxmLnNraXBfbl9jaGFycyhtYXRjaC5lbmQoMCkpCisgICAgICAgIHJl
dHVybiBzZWxmLnByb2plY3QuZW5zdXJlX1VJRChtYXRjaC5ncm91cCgwKSkKKworICAgIGRlZiBy
ZWFkX2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCcoJykKKyAgICAgICAgbGlz
dCA9IFtdCisgICAgICAgIHdoaWxlIHNlbGYubGluZVswXSAhPSAnKSc6CisgICAgICAgICAgICB2
YWx1ZSA9IHNlbGYucmVhZF92YWx1ZSgpCisgICAgICAgICAgICBzZWxmLnNraXBfY2hhcignLCcp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgc2VsZi5za2lwX2NoYXIo
JyknKQorICAgICAgICByZXR1cm4gbGlzdAorCisgICAgZGVmIHJlYWRfVUlEX2xpc3Qoc2VsZik6
CisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCcoJykKKyAgICAgICAgbGlzdCA9IFhjb2RlVUlETGlz
dCgpCisgICAgICAgIHdoaWxlIHNlbGYubGluZVswXSAhPSAnKSc6CisgICAgICAgICAgICB1aWQg
PSBzZWxmLnJlYWRfVUlEKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCcsJykKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKHVpZCkKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJyknKQorICAg
ICAgICByZXR1cm4gbGlzdAorCisgICAgZGVmIHJlYWRfb2JqZWN0KHNlbGYpOgorICAgICAgICBz
ZWxmLnNraXBfY2hhcigneycpCisgICAgICAgIG9iamVjdCA9IHt9CisgICAgICAgIHdoaWxlIHNl
bGYubGluZVswXSAhPSAnfSc6CisgICAgICAgICAgICBpZCA9IHNlbGYucmVhZF9tYXRjaChzZWxm
LklEX01BVENILCAicHJvcGVydHkgbmFtZSIpCisgICAgICAgICAgICBzZWxmLnNraXBfY2hhcign
PScpCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYucmVhZF92YWx1ZSgpCisgICAgICAgICAgICBz
ZWxmLnNraXBfY2hhcignOycpCisgICAgICAgICAgICBvYmplY3RbaWRdID0gdmFsdWUKKyAgICAg
ICAgc2VsZi5za2lwX2NoYXIoJ30nKQorICAgICAgICByZXR1cm4gb2JqZWN0CisKKyAgICBkZWYg
cmVhZF92YWx1ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5saW5lWzBdID09ICd7JzoKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLnJlYWRfb2JqZWN0KCkKKyAgICAgICAgaWYgc2VsZi5saW5lWzBd
ID09ICcoJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRfbGlzdCgpCisgICAgICAgIGlm
IHNlbGYubGluZVswXSA9PSAnIic6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3F1b3Rl
ZF9zdHJpbmcoKQorICAgICAgICBtYXRjaCA9IFhjb2RlVUlELk1BVENILm1hdGNoKHNlbGYubGlu
ZVs6MjRdKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIHVpZCA9IHNlbGYucHJvamVj
dC5lbnN1cmVfVUlEKG1hdGNoLmdyb3VwKDApKQorICAgICAgICAgICAgc2VsZi5za2lwX25fY2hh
cnMobWF0Y2guZW5kKDApKQorICAgICAgICAgICAgcmV0dXJuIHVpZAorICAgICAgICBtYXRjaCA9
IHNlbGYuVkFMVUVfTUFUQ0gubWF0Y2goc2VsZi5saW5lKQorICAgICAgICBpZiBtYXRjaDoKKyAg
ICAgICAgICAgIHZhbHVlID0gbWF0Y2guZ3JvdXAoMCkKKyAgICAgICAgICAgIHNlbGYuc2tpcF9u
X2NoYXJzKG1hdGNoLmVuZCgwKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICBy
ZXR1cm4gc2VsZi5lcnJvcigiQ291bGQgbm90IHBhcnNlIHZhbHVlICclcycgaW4gbGluZSAlZCEi
ICUgKHNlbGYubGluZSwgc2VsZi5saW5lX251bWJlcikpCisKKyAgICAjIFBhcnNpbmcgbWV0aG9k
cyBmb3IgaW1wb3J0YW50IHByb3BlcnR5IG5hbWVzCisgICAgUFJPUEVSVFlfTkFNRV9UT19SRUFE
X01FVEhPRCA9IHsKKyAgICAgICAgJ2Jhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlJzogcmVhZF9V
SUQsCisgICAgICAgICdidWlsZENvbmZpZ3VyYXRpb25MaXN0JyAgICA6IHJlYWRfVUlELAorICAg
ICAgICAnYnVpbGRDb25maWd1cmF0aW9ucycgICAgICAgOiByZWFkX1VJRF9saXN0LAorICAgICAg
ICAnYnVpbGRQaGFzZXMnICAgICAgICAgICAgICAgOiByZWFkX1VJRF9saXN0LAorICAgICAgICAn
Y2hpbGRyZW4nICAgICAgICAgICAgICAgICAgOiByZWFkX1VJRF9saXN0LAorICAgICAgICAnZGVw
ZW5kZW5jaWVzJyAgICAgICAgICAgICAgOiByZWFkX1VJRF9saXN0LAorICAgICAgICAnZmlsZVJl
ZicgICAgICAgICAgICAgICAgICAgOiByZWFkX1VJRCwKKyAgICAgICAgJ2ZpbGVzJyAgICAgICAg
ICAgICAgICAgICAgIDogcmVhZF9VSURfbGlzdCwKKyAgICAgICAgJ21haW5Hcm91cCcgICAgICAg
ICAgICAgICAgIDogcmVhZF9VSUQsCisgICAgICAgICdwcm9kdWN0UmVmR3JvdXAnICAgICAgICAg
ICA6IHJlYWRfVUlELAorICAgICAgICAncmVtb3RlR2xvYmFsSURTdHJpbmcnICAgICAgOiByZWFk
X1VJRCwKKyAgICAgICAgJ3NvdXJjZVRyZWUnICAgICAgICAgICAgICAgIDogcmVhZF9zb3VyY2VU
cmVlLAorICAgICAgICAndGFyZ2V0cycgICAgICAgICAgICAgICAgICAgOiByZWFkX1VJRF9saXN0
LAorICAgIH0KKworICAgIGRlZiByZWFkX3BieF9vYmplY3Qoc2VsZiwgdWlkKToKKyAgICAgICAg
c2VsZi52ZXJpZnkodWlkIG5vdCBpbiBzZWxmLnByb2plY3QuYWxsX29iamVjdHMsICJPYmplY3Qg
JXMgYWxyZWFkeSBoYXMgYSBkZWZpbml0aW9uIC0gbGluZSAlZCIgJSAodWlkLCBzZWxmLmxpbmVf
bnVtYmVyKSkKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJ3snKQorICAgICAgICAjIFJlYWQgJ2lz
YScgYXR0cmlidXRlIGFuZCBpbnN0YW50aWF0ZSBhcHByb3ByaWF0ZSBjbGFzcyBvYmplY3QuCisg
ICAgICAgICMgTk9URTogYmVsb3cgY29kZSBhc3N1bWVzIHRoZSAnaXNhJyBhdHRyaWJ1dGUgaXMg
YWx3YXlzIGxpc3RlZCBmaXJzdC4KKyAgICAgICAgc2VsZi52ZXJpZnkoc2VsZi5saW5lLnN0YXJ0
c3dpdGgoJ2lzYScpLCAiRXhwZWN0ZWQgJ2lzYScgYXR0cmlidXRlLCBmb3VuZCAnJXMnIGluc3Rl
YWQgLSBpbiBsaW5lICVkISIgJSAoc2VsZi5saW5lLCBzZWxmLmxpbmVfbnVtYmVyKSkKKyAgICAg
ICAgc2VsZi5za2lwX25fY2hhcnMoMykKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJz0nKQorICAg
ICAgICBpc2EgPSBzZWxmLnJlYWRfbWF0Y2goc2VsZi5JRF9NQVRDSCwgIidpc2EnIHZhbHVlIikK
KyAgICAgICAgcGJ4X29iamVjdCA9IHNlbGYuaXNhX3RvX2NyZWF0ZV9tZXRob2QuZ2V0KGlzYSwg
c2VsZi5wcm9qZWN0LmNyZWF0ZV9QQlhBcmJpdHJhcnlPYmplY3QpKHVpZCwgaXNhKQorICAgICAg
ICBzZWxmLnNraXBfY2hhcignOycpCisgICAgICAgICMgcmVhZCByZW1haW5pbmcgYXR0cmlidXRl
cworICAgICAgICB3aGlsZSBzZWxmLmxpbmVbMF0gIT0gJ30nOgorICAgICAgICAgICAgaWQgPSBz
ZWxmLnJlYWRfbWF0Y2goc2VsZi5JRF9NQVRDSCwgImRpY3Rpb25hcnkga2V5IikKKyAgICAgICAg
ICAgIHNlbGYuc2tpcF9jaGFyKCc9JykKKyAgICAgICAgICAgIHBieF9vYmplY3QucHJvcGVydGll
c1tpZF0gPSBYY29kZVByb2plY3RSZWFkZXIuUFJPUEVSVFlfTkFNRV9UT19SRUFEX01FVEhPRC5n
ZXQoaWQsIFhjb2RlUHJvamVjdFJlYWRlci5yZWFkX3ZhbHVlKShzZWxmKQorICAgICAgICAgICAg
c2VsZi5za2lwX2NoYXIoJzsnKQorICAgICAgICBzZWxmLnNraXBfY2hhcignfScpCisKKyAgICBk
ZWYgcmVhZF9vYmplY3RzKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBfY2hhcigneycpCisgICAg
ICAgIHdoaWxlIHNlbGYubGluZVswXSAhPSAnfSc6CisgICAgICAgICAgICB1aWQgPSBzZWxmLnJl
YWRfVUlEKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc9JykKKyAgICAgICAgICAgIHNl
bGYucmVhZF9wYnhfb2JqZWN0KHVpZCkKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc7JykK
KyAgICAgICAgc2VsZi5za2lwX2NoYXIoJ30nKQorCisgICAgZGVmIHJlYWRfbWFpbl9vYmplY3Qo
c2VsZik6CisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCd7JykKKyAgICAgICAgc2VsZi5wcm9qZWN0
Lm1haW5fb2JqZWN0ID0ge30KKyAgICAgICAgd2hpbGUgc2VsZi5saW5lWzBdICE9ICd9JzoKKyAg
ICAgICAgICAgIGlkID0gc2VsZi5yZWFkX21hdGNoKHNlbGYuSURfTUFUQ0gsICJtYWluIG9iamVj
dCBhdHRyaWJ1dGUiKQorICAgICAgICAgICAgc2VsZi5za2lwX2NoYXIoJz0nKQorICAgICAgICAg
ICAgaWYgaWQgPT0gJ29iamVjdHMnOgorICAgICAgICAgICAgICAgIHNlbGYucmVhZF9vYmplY3Rz
KCkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2plY3QubWFpbl9vYmplY3RbJ29iamVjdHMnXSA9
IHNlbGYucHJvamVjdC5hbGxfb2JqZWN0cworICAgICAgICAgICAgZWxpZiBpZCA9PSAncm9vdE9i
amVjdCc6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0Wydyb290T2Jq
ZWN0J10gPSBzZWxmLnJlYWRfVUlEKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0W2lkXSA9IHNlbGYucmVhZF92YWx1ZSgpCisgICAg
ICAgICAgICBzZWxmLnNraXBfY2hhcignOycpCisgICAgICAgICMgRG9uJ3QgdXNlIHNlbGYuc2tp
cF9jaGFyKCd9JykgYmVsb3csIHRvIGF2b2lkIGhhdmluZyB0byBoYW5kbGUgdGhlIFN0b3BJdGVy
YXRpb24gZXhjZXB0aW9uCisgICAgICAgIGFzc2VydCBzZWxmLmxpbmUuc3RhcnRzd2l0aCgnfScp
CisgICAgICAgIHJldHVybiBzZWxmLnByb2plY3QubWFpbl9vYmplY3QKKworICAgIGRlZiByZWFk
X3Byb2plY3RfZmlsZShzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5pbmZvKCJSZWFkaW5nIFhj
b2RlIHByb2plY3QgZmlsZSBmcm9tICVzIiAlIHBhdGgpCisgICAgICAgIHNlbGYuZmlsZSA9IE5v
bmUKKyAgICAgICAgc2VsZi5saW5lID0gJycKKyAgICAgICAgd2l0aCBzZWxmLmZpbGVzeXN0ZW0u
b3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcocGF0aCkgYXMgc2VsZi5maWxlOgorICAgICAgICAg
ICAgc2VsZi5faXRlciA9IGl0ZXIoc2VsZi5maWxlKQorICAgICAgICAgICAgc2VsZi5yZWFkbGlu
ZSgpCisgICAgICAgICAgICBzZWxmLnJlYWRfbWFpbl9vYmplY3QoKQorICAgICAgICBzZWxmLmRl
YnVnKCJQb3N0cHJvY2Vzc2luZy4uLiIpCisgICAgICAgIHNlbGYudmVyaWZ5X3Jvb3Rfb2JqZWN0
KCkKKyAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc19tYWluX2dyb3VwKCkKKyAgICAgICAgc2VsZi5w
b3N0cHJvY2Vzc19idWlsZF9maWxlcygpCisgICAgICAgIHNlbGYucG9zdHByb2Nlc3NfYnVpbGRf
cGhhc2VzKCkKKyAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc19jb25maWd1cmF0aW9uX2xpc3RzKCkK
KyAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc190YXJnZXRzKCkKKyAgICAgICAgc2VsZi5wb3N0cHJv
Y2Vzc19wcm9qZWN0KCkKKyAgICAgICAgc2VsZi52ZXJpZnlfYWxsX29iamVjdHMoKQorICAgICAg
ICBzZWxmLmRlYnVnKCJEb25lIC0gYSB0b3RhbCBvZiAlZCBvYmplY3RzIHN0b3JlZCIgJSBsZW4o
c2VsZi5wcm9qZWN0LmFsbF9vYmplY3RzKSkKKyAgICAgICAgc2VsZi5maWxlID0gTm9uZQorICAg
ICAgICBzZWxmLmxpbmUgPSAnJworCisgICAgIyAtLS0gcG9zdHByb2Nlc3NpbmcgLS0tCisKKyAg
ICBkZWYgZW5zdXJlX3Byb3BlcnR5KHNlbGYsIG9iamVjdCwgcHJvcGVydHlfbmFtZSwgY2xzKToK
KyAgICAgICAgaWYgcHJvcGVydHlfbmFtZSBub3QgaW4gb2JqZWN0LnByb3BlcnRpZXM6CisgICAg
ICAgICAgICBzZWxmLndhcm5pbmcoIiVzIGhhcyBubyBwcm9wZXJ0eSAnJXMnIC0gYWRkaW5nIGl0
ISIgJSAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lKSkKKyAgICAgICAgICAgIG9iamVjdC5wcm9wZXJ0
aWVzW3Byb3BlcnR5X25hbWVdID0gY2xzKCkKKyAgICAgICAgcmV0dXJuIG9iamVjdC5wcm9wZXJ0
aWVzW3Byb3BlcnR5X25hbWVdCisKKyAgICBkZWYgZGlyZWN0b3J5X2Zyb21fc291cmNlVHJlZShz
ZWxmLCBvYmplY3QsIGNvbnRhaW5lcl9kaXJlY3RvcnkpOgorICAgICAgICBhc3NlcnQgY29udGFp
bmVyX2RpcmVjdG9yeQorICAgICAgICBpZiBub3QgJ3NvdXJjZVRyZWUnIGluIG9iamVjdC5wcm9w
ZXJ0aWVzOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nKCIlcyBkb2VzIG5vdCBjb250YWluICdz
b3VyY2VUcmVlJyBwcm9wZXJ0eSAtIGFzc3VtaW5nIFwiPGdyb3VwPlwiIiAlIG9iamVjdCkKKyAg
ICAgICAgICAgIG9iamVjdC5wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10gPSAnIjxncm91cD4iJwor
ICAgICAgICBzb3VyY2VUcmVlID0gb2JqZWN0LnByb3BlcnRpZXNbJ3NvdXJjZVRyZWUnXQorICAg
ICAgICBpZiBzb3VyY2VUcmVlID09ICciPGdyb3VwPiInOgorICAgICAgICAgICAgcmV0dXJuIGNv
bnRhaW5lcl9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi52ZXJpZnkoc291cmNlVHJlZSBpbiBzZWxm
LnByb2plY3QudmFyaWFibGVfdG9fZGlyZWN0b3J5LCAiRW5jb3VudGVyZWQgdW5rbm93biAnc291
cmNlVHJlZScgcHJvcGVydHkgaW4gJXMhIiAlIG9iamVjdCkKKyAgICAgICAgcmV0dXJuIHNlbGYu
cHJvamVjdC52YXJpYWJsZV90b19kaXJlY3Rvcnlbc291cmNlVHJlZV0KKworICAgIGRlZiBkaXJl
Y3RvcnlfZnJvbV9zb3VyY2VUcmVlX2FuZF9wYXRoKHNlbGYsIG9iamVjdCwgY29udGFpbmVyX2Rp
cmVjdG9yeSk6CisgICAgICAgIHBhcmVudF9kaXJlY3RvcnkgPSBzZWxmLmRpcmVjdG9yeV9mcm9t
X3NvdXJjZVRyZWUob2JqZWN0LCBjb250YWluZXJfZGlyZWN0b3J5KQorICAgICAgICBwYXRoID0g
b2JqZWN0LnByb3BlcnRpZXMuZ2V0KCdwYXRoJywgJycpCisgICAgICAgIHJldHVybiBzZWxmLmNv
bW1vbi5lbnN1cmVfc3ViZGlyZWN0b3J5X3BhdGgocGFyZW50X2RpcmVjdG9yeSwgcGF0aCkKKwor
ICAgIGRlZiBmaWxlX2Zyb21fc291cmNlVHJlZV9hbmRfcGF0aChzZWxmLCBvYmplY3QsIGNvbnRh
aW5lcl9kaXJlY3RvcnkpOgorICAgICAgICBwYXJlbnRfZGlyZWN0b3J5ID0gc2VsZi5kaXJlY3Rv
cnlfZnJvbV9zb3VyY2VUcmVlKG9iamVjdCwgY29udGFpbmVyX2RpcmVjdG9yeSkKKyAgICAgICAg
cGF0aCA9IG9iamVjdC5wcm9wZXJ0aWVzLmdldCgncGF0aCcsICcnKQorICAgICAgICByZXR1cm4g
c2VsZi5jb21tb24uZW5zdXJlX2ZpbGVfcGF0aChwYXJlbnRfZGlyZWN0b3J5LCBwYXRoKQorCisg
ICAgZGVmIHZlcmlmeV9yb290X29iamVjdChzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnkoJ29i
amVjdHMnIGluIHNlbGYucHJvamVjdC5tYWluX29iamVjdCwgIkRpZCBub3QgZmluZCBhbiAnb2Jq
ZWN0cycgZW50cnkgd2l0aGluIHRoZSBtYWluIHByb2plY3Qgb2JqZWN0ISIpCisgICAgICAgIHNl
bGYudmVyaWZ5KCdyb290T2JqZWN0JyBpbiBzZWxmLnByb2plY3QubWFpbl9vYmplY3QsICJEaWQg
bm90IGZpbmQgYSAncm9vdE9iamVjdCcgZW50cnkgd2l0aGluIHRoZSBtYWluIHByb2plY3Qgb2Jq
ZWN0ISIpCisgICAgICAgIHNlbGYudmVyaWZ5KHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdCwg
IkRpZCBub3QgZmluZCBhIFBCWFByb2plY3Qgb2JqZWN0IHdpdGhpbiB0aGUgcHJvamVjdCBmaWxl
ISIpCisgICAgICAgIHJvb3Rfb2JqZWN0X3VpZCA9IHNlbGYucHJvamVjdC5tYWluX29iamVjdFsn
cm9vdE9iamVjdCddCisgICAgICAgIHNlbGYudmVyaWZ5KHJvb3Rfb2JqZWN0X3VpZC5yZWZlcnJl
ZF9vYmplY3QsICIncm9vdE9iamVjdCcgb2YgdGhlIHByb2plY3QgcmVmZXJzIHRvIGFuIHVua25v
d24gZW50aXR5ICclcychIiAlIHJvb3Rfb2JqZWN0X3VpZCkKKyAgICAgICAgc2VsZi52ZXJpZnko
cm9vdF9vYmplY3RfdWlkID09IHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdC51aWQsICJUaGUg
J3Jvb3RPYmplY3QnIFVJRCAlcyBpbiB0aGUgcHJvamVjdCBmaWxlIGRpZmZlcnMgZnJvbSB0aGUg
UEJYUHJvamVjdCdzIFVJRCAlcyEiICUgKHJvb3Rfb2JqZWN0X3VpZCwgc2VsZi5wcm9qZWN0LnBy
b2plY3Rfb2JqZWN0LnVpZCkpCisgICAgICAgIGFzc2VydCByb290X29iamVjdF91aWQucmVmZXJy
ZWRfb2JqZWN0IGlzIHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdAorCisgICAgZGVmIHBvc3Rw
cm9jZXNzX21haW5fZ3JvdXAoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5KCdtYWluR3JvdXAn
IGluIHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdC5wcm9wZXJ0aWVzLCAiRGlkIG5vdCBmaW5k
IGEgJ21haW5Hcm91cCcgZW50cnkgaW4gdGhlIFBCWFByb2plY3Qgb2JqZWN0ISIpCisgICAgICAg
IG1haW5fZ3JvdXBfdWlkID0gc2VsZi5wcm9qZWN0LnByb2plY3Rfb2JqZWN0LnByb3BlcnRpZXNb
J21haW5Hcm91cCddCisgICAgICAgIHNlbGYudmVyaWZ5KG1haW5fZ3JvdXBfdWlkLnJlZmVycmVk
X29iamVjdCwgIkRpZCBub3QgZmluZCBtYWluIGdyb3VwICVzIGVudHJ5IHdpdGhpbiB0aGUgcHJv
amVjdCBmaWxlISIgJSBtYWluX2dyb3VwX3VpZCkKKyAgICAgICAgbWFpbl9ncm91cCA9IG1haW5f
Z3JvdXBfdWlkLnJlZmVycmVkX29iamVjdAorICAgICAgICBzZWxmLnZlcmlmeShpc2luc3RhbmNl
KG1haW5fZ3JvdXAsIFBCWEdyb3VwKSwgIiVzIHJlZmVycmVkIGFzICdtYWluR3JvdXAnIGluICVz
IGlzIG5vdCBhIFBCWEdyb3VwIG9iamVjdCEiICUgKG1haW5fZ3JvdXAsIHNlbGYucHJvamVjdC5w
cm9qZWN0X29iamVjdCkpCisgICAgICAgIHNlbGYucHJvamVjdC5fc2V0X21haW5fZ3JvdXAobWFp
bl9ncm91cCkKKyAgICAgICAgbWFpbl9ncm91cC5fc2V0X2RpcmVjdG9yeShzZWxmLmRpcmVjdG9y
eV9mcm9tX3NvdXJjZVRyZWVfYW5kX3BhdGgobWFpbl9ncm91cCwgc2VsZi5wcm9qZWN0LnZhcmlh
YmxlX3RvX2RpcmVjdG9yeVsnU09VUkNFX1JPT1QnXSkpCisgICAgICAgIHNlbGYucHJvamVjdC5k
aXJlY3RvcnlfdG9fZ3JvdXBzLnNldGRlZmF1bHQobWFpbl9ncm91cC5kaXJlY3RvcnksIFtdKS5h
cHBlbmQobWFpbl9ncm91cCkKKyAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc19ncm91cF9jaGlsZHJl
bihtYWluX2dyb3VwKQorCisgICAgZGVmIHBvc3Rwcm9jZXNzX2dyb3VwX2NoaWxkcmVuKHNlbGYs
IGdyb3VwKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmVuc3VyZV9wcm9wZXJ0eShncm91cCwg
J2NoaWxkcmVuJywgWGNvZGVVSURMaXN0KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjaGls
ZHJlbiwgWGNvZGVVSURMaXN0KQorICAgICAgICBmb3IgdWlkIGluIGNoaWxkcmVuOgorICAgICAg
ICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodWlkLCBYY29kZVVJRCkKKyAgICAgICAgICAgIHNlbGYu
dmVyaWZ5KHVpZC5yZWZlcnJlZF9vYmplY3QsICIlcyByZWZlcnMgdG8gYSBjaGlsZCB3aXRoICVz
JyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2plY3QhIiAlIChncm91cCwg
dWlkKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwgUEJY
R3JvdXApOgorICAgICAgICAgICAgICAgIHNlbGYucG9zdHByb2Nlc3Nfc3ViZ3JvdXAodWlkLnJl
ZmVycmVkX29iamVjdCwgZ3JvdXApCisgICAgICAgICAgICAgICAgZ3JvdXAuX2FkZF9ncm91cCh1
aWQucmVmZXJyZWRfb2JqZWN0KQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHVpZC5yZWZl
cnJlZF9vYmplY3QsIFBCWEZpbGVSZWZlcmVuY2UpOgorICAgICAgICAgICAgICAgIHNlbGYucG9z
dHByb2Nlc3NfZmlsZV9yZWZlcmVuY2UodWlkLnJlZmVycmVkX29iamVjdCwgZ3JvdXApCisgICAg
ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwgUEJYVmFyaWFudEdy
b3VwKToKKyAgICAgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX3ZhcmlhbnRfZ3JvdXAodWlk
LnJlZmVycmVkX29iamVjdCwgZ3JvdXApCisgICAgICAgICAgICAgICAgZ3JvdXAuX2FkZF92YXJp
YW50X2dyb3VwKHVpZC5yZWZlcnJlZF9vYmplY3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYuZXJyb3IoIk1haW4gZ3JvdXAgJXMgY29udGFpbnMgJ2NoaWxkcmVuJyBl
bnRyeSAlcyAtIFBCWEZpbGVSZWZlcmVuY2UsIFBCWEdyb3VwIG9yIFBCWFZhcmlhbnRHcm91cCBl
eHBlY3RlZCEiICUgKG1haW5fZ3JvdXAsIHVpZC5yZWZlcnJlZF9vYmplY3QpKQorCisgICAgZGVm
IHBvc3Rwcm9jZXNzX3N1Ymdyb3VwKHNlbGYsIGdyb3VwLCBjb250YWluaW5nX2dyb3VwKToKKyAg
ICAgICAgYXNzZXJ0IG5vdCBncm91cC5kaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0IGNvbnRhaW5p
bmdfZ3JvdXAKKyAgICAgICAgYXNzZXJ0IGNvbnRhaW5pbmdfZ3JvdXAuZGlyZWN0b3J5CisgICAg
ICAgIHNlbGYudmVyaWZ5KG5vdCBncm91cC5jb250YWluZXIsICJQb3N0cHJvY2Vzc2luZyAlczog
d2FzIGFscmVhZHkgcHJldmlvdXNseSByZWZlcmVuY2VkIGJ5ICVzISIgJSAoZ3JvdXAsIGdyb3Vw
LmNvbnRhaW5lcikpCisgICAgICAgIGdyb3VwLl9zZXRfY29udGFpbmVyKGNvbnRhaW5pbmdfZ3Jv
dXApCisgICAgICAgIGdyb3VwLl9zZXRfZGlyZWN0b3J5KHNlbGYuZGlyZWN0b3J5X2Zyb21fc291
cmNlVHJlZV9hbmRfcGF0aChncm91cCwgY29udGFpbmluZ19ncm91cC5kaXJlY3RvcnkpKQorICAg
ICAgICBzZWxmLnByb2plY3QuZGlyZWN0b3J5X3RvX2dyb3Vwcy5zZXRkZWZhdWx0KGdyb3VwLmRp
cmVjdG9yeSwgW10pLmFwcGVuZChncm91cCkKKyAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc19ncm91
cF9jaGlsZHJlbihncm91cCkKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgcG9zdHByb2Nlc3Nf
ZmlsZV9yZWZlcmVuY2Uoc2VsZiwgZmlsZV9yZWZlcmVuY2UsIGNvbnRhaW5lcik6CisgICAgICAg
IGFzc2VydCBjb250YWluZXIKKyAgICAgICAgYXNzZXJ0IGNvbnRhaW5lci5kaXJlY3RvcnkKKyAg
ICAgICAgaWYgZmlsZV9yZWZlcmVuY2UuY29udGFpbmVyOgorICAgICAgICAgICAgc2VsZi53YXJu
aW5nKCIlcyBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiAlcyAtIG5vdCBhZGRpbmcgdG8gJXMhIiAl
IChmaWxlX3JlZmVyZW5jZSwgZmlsZV9yZWZlcmVuY2UuY29udGFpbmVyLCBjb250YWluZXIpKQor
ICAgICAgICAgICAgYXNzZXJ0IGZpbGVfcmVmZXJlbmNlLmZpbGUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFzc2VydCBub3QgZmlsZV9yZWZlcmVuY2UuZmlsZQorICAgICAgICAgICAgZmls
ZSA9IHNlbGYuZmlsZV9mcm9tX3NvdXJjZVRyZWVfYW5kX3BhdGgoZmlsZV9yZWZlcmVuY2UsIGNv
bnRhaW5lci5kaXJlY3RvcnkpCisgICAgICAgICAgICBmaWxlX3JlZmVyZW5jZS5fc2V0X2ZpbGUo
ZmlsZSkKKyAgICAgICAgICAgIHNlbGYucHJvamVjdC5maWxlX3RvX2ZpbGVfcmVmZXJlbmNlcy5z
ZXRkZWZhdWx0KGZpbGUsIHNldCgpKS5hZGQoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgICAgICBm
aWxlX3JlZmVyZW5jZS5fc2V0X2NvbnRhaW5lcihjb250YWluZXIpCisgICAgICAgICAgICBjb250
YWluZXIuX2FkZF9maWxlX3JlZmVyZW5jZShmaWxlX3JlZmVyZW5jZSkKKworICAgIGRlZiBwb3N0
cHJvY2Vzc192YXJpYW50X2dyb3VwKHNlbGYsIHZhcmlhbnRfZ3JvdXAsIGNvbnRhaW5lcik6Cisg
ICAgICAgIGFzc2VydCBjb250YWluZXIKKyAgICAgICAgYXNzZXJ0IGNvbnRhaW5lci5kaXJlY3Rv
cnkKKyAgICAgICAgIyBsaW5rIGNvbnRhaW5lcgorICAgICAgICBzZWxmLnZlcmlmeShub3QgdmFy
aWFudF9ncm91cC5jb250YWluZXIsICJQb3N0cHJvY2Vzc2luZyAlczogd2FzIGFscmVhZHkgcHJl
dmlvdXNseSByZWZlcmVuY2VkIGJ5ICVzISIgJSAodmFyaWFudF9ncm91cCwgdmFyaWFudF9ncm91
cC5jb250YWluZXIpKQorICAgICAgICB2YXJpYW50X2dyb3VwLl9zZXRfY29udGFpbmVyKGNvbnRh
aW5lcikKKyAgICAgICAgIyBsaW5rIGRpcmVjdG9yeQorICAgICAgICB2YXJpYW50X2dyb3VwLl9z
ZXRfZGlyZWN0b3J5KHNlbGYuZGlyZWN0b3J5X2Zyb21fc291cmNlVHJlZV9hbmRfcGF0aCh2YXJp
YW50X2dyb3VwLCBjb250YWluZXIuZGlyZWN0b3J5KSkKKyAgICAgICAgIyBsaW5rICdjaGlsZHJl
bicgZmlsZSByZWZlcmVuY2VzCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5lbnN1cmVfcHJvcGVy
dHkodmFyaWFudF9ncm91cCwgJ2NoaWxkcmVuJywgWGNvZGVVSURMaXN0KQorICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShjaGlsZHJlbiwgWGNvZGVVSURMaXN0KQorICAgICAgICBmb3IgdWlkIGlu
IGNoaWxkcmVuOgorICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodWlkLCBYY29kZVVJRCkK
KyAgICAgICAgICAgIHNlbGYudmVyaWZ5KHVpZC5yZWZlcnJlZF9vYmplY3QsICIlcyByZWZlcnMg
dG8gYSBjaGlsZCB3aXRoICVzJyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHBy
b2plY3QhIiAlICh2YXJpYW50X2dyb3VwLCB1aWQpKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZSh1aWQucmVmZXJyZWRfb2JqZWN0LCBQQlhGaWxlUmVmZXJlbmNlKToKKyAgICAgICAgICAgICAg
ICBzZWxmLnBvc3Rwcm9jZXNzX2ZpbGVfcmVmZXJlbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIHZh
cmlhbnRfZ3JvdXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZXJy
b3IoIiVzIGNvbnRhaW5zICdjaGlsZHJlbicgZW50cnkgJXMgLSBQQlhGaWxlUmVmZXJlbmNlIGV4
cGVjdGVkISIgJSAodmFyaWFudF9ncm91cCwgdWlkLnJlZmVycmVkX29iamVjdCkpCisKKyAgICBk
ZWYgcG9zdHByb2Nlc3NfYnVpbGRfZmlsZXMoc2VsZik6CisgICAgICAgIGZvciBidWlsZF9maWxl
IGluIHNlbGYucHJvamVjdC5hbGxfYnVpbGRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLnBvc3Rw
cm9jZXNzX2J1aWxkX2ZpbGUoYnVpbGRfZmlsZSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc19idWls
ZF9maWxlKHNlbGYsIGJ1aWxkX2ZpbGUpOgorICAgICAgICAjIGxpbmsgZmlsZSByZWZlcmVuY2Vz
CisgICAgICAgIHNlbGYudmVyaWZ5KCdmaWxlUmVmJyBpbiBidWlsZF9maWxlLnByb3BlcnRpZXMs
ICIlcyBkb2VzIG5vdCBjb250YWluIGEgJ2ZpbGVSZWYnIHByb3BlcnR5ISIgJSBidWlsZF9maWxl
KQorICAgICAgICB1aWQgPSBidWlsZF9maWxlLnByb3BlcnRpZXNbJ2ZpbGVSZWYnXQorICAgICAg
ICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0LCAiJXM6ICdmaWxlUmVmJyBwcm9wZXJ0
eSAlcyBpcyB1bmtub3duISIgJSAoYnVpbGRfZmlsZSwgdWlkKSkKKyAgICAgICAgZmlsZVJlZiA9
IHVpZC5yZWZlcnJlZF9vYmplY3QKKyAgICAgICAgc2VsZi52ZXJpZnkoaXNpbnN0YW5jZShmaWxl
UmVmLCBQQlhGaWxlUmVmZXJlbmNlKSBvciBpc2luc3RhbmNlKGZpbGVSZWYsIFBCWFZhcmlhbnRH
cm91cCksICIlczogJ2ZpbGVSZWYnIHByb3BlcnR5IHBvaW50cyB0byAlcyAtIFBCWEZpbGVSZWZl
cmVuY2Ugb3IgUEJYVmFyaWFudEdyb3VwIGV4cGVjdGVkISIgJSAoYnVpbGRfZmlsZSwgZmlsZVJl
ZikpCisgICAgICAgIGJ1aWxkX2ZpbGUuX3NldF9maWxlUmVmKGZpbGVSZWYpCisKKyAgICBkZWYg
cG9zdHByb2Nlc3NfYnVpbGRfcGhhc2VzKHNlbGYpOgorICAgICAgICBmb3IgYnVpbGRfcGhhc2Ug
aW4gc2VsZi5wcm9qZWN0LmFsbF9idWlsZF9waGFzZXM6CisgICAgICAgICAgICBzZWxmLnBvc3Rw
cm9jZXNzX2J1aWxkX3BoYXNlKGJ1aWxkX3BoYXNlKQorCisgICAgZGVmIHBvc3Rwcm9jZXNzX2J1
aWxkX3BoYXNlKHNlbGYsIGJ1aWxkX3BoYXNlKToKKyAgICAgICAgIyBsaW5rIGJ1aWxkIGZpbGVz
CisgICAgICAgIGZpbGVzID0gc2VsZi5lbnN1cmVfcHJvcGVydHkoYnVpbGRfcGhhc2UsICdmaWxl
cycsIFhjb2RlVUlETGlzdCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZXMsIFhjb2Rl
VUlETGlzdCkKKyAgICAgICAgZm9yIHVpZCBpbiBmaWxlczoKKyAgICAgICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVm
ZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ2ZpbGVzJyBlbnRyeSAlcyB0aGF0IGNvdWxk
IG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2plY3QhIiAlIChidWlsZF9waGFzZSwgdWlkKSkK
KyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwgUEJYQnVpbGRG
aWxlKToKKyAgICAgICAgICAgICAgICBidWlsZF9maWxlID0gdWlkLnJlZmVycmVkX29iamVjdAor
ICAgICAgICAgICAgICAgIGlmIGJ1aWxkX2ZpbGUuYnVpbGRfcGhhc2U6CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYudmVyaWZ5KGJ1aWxkX2ZpbGUuYnVpbGRfcGhhc2UgaXMgYnVpbGRfcGhhc2Us
ICIlcyByZWZlcnMgdG8gYSAlcywgYnV0IHRoYXQgd2FzIGFscmVhZHkgcHJldmlvdXNseSByZWZl
cmVuY2VkIGJ5ICVzISIgJSAoYnVpbGRfcGhhc2UsIGJ1aWxkX2ZpbGUsIGJ1aWxkX2ZpbGUuYnVp
bGRfcGhhc2UpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcoIiVzIGNvbnRhaW5z
IGR1cGxpY2F0ZWQgZW50cnkgZm9yICVzIC0gZGlzY2FyZGluZyBkdXBsaWNhdGVzISIgJSAoYnVp
bGRfcGhhc2UsIGJ1aWxkX2ZpbGUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkX2ZpbGUuX3NldF9idWlsZF9waGFzZShidWlsZF9waGFzZSkKKyAgICAg
ICAgICAgICAgICAgICAgYnVpbGRfcGhhc2UuX2FkZF9idWlsZF9maWxlKGJ1aWxkX2ZpbGUpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIiVzIGNvbnRhaW5z
ICdmaWxlcycgZW50cnkgJXMgLSBQQlhCdWlsZEZpbGUgZXhwZWN0ZWQhIiAlIChidWlsZF9waGFz
ZSwgdWlkLnJlZmVycmVkX29iamVjdCkpCisgICAgICAgICMgUmVtb3ZlIGFueSBkdXBsaWNhdGVz
CisgICAgICAgIGJ1aWxkX3BoYXNlLnByb3BlcnRpZXNbJ2ZpbGVzJ10gPSBYY29kZVVJRExpc3Qo
c2V0KGZpbGVzKSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc19jb25maWd1cmF0aW9uX2xpc3RzKHNl
bGYpOgorICAgICAgICBmb3IgY29uZmlndXJhdGlvbl9saXN0IGluIHNlbGYucHJvamVjdC5hbGxf
Y29uZmlndXJhdGlvbl9saXN0czoKKyAgICAgICAgICAgIHNlbGYucG9zdHByb2Nlc3NfY29uZmln
dXJhdGlvbl9saXN0KGNvbmZpZ3VyYXRpb25fbGlzdCkKKworICAgIGRlZiBwb3N0cHJvY2Vzc19j
b25maWd1cmF0aW9uX2xpc3Qoc2VsZiwgY29uZmlndXJhdGlvbl9saXN0KToKKyAgICAgICAgc2Vs
Zi52ZXJpZnkoJ2J1aWxkQ29uZmlndXJhdGlvbnMnIGluIGNvbmZpZ3VyYXRpb25fbGlzdC5wcm9w
ZXJ0aWVzLCAiJXMgZG9lcyBub3QgY29udGFpbiBhICdidWlsZENvbmZpZ3VyYXRpb25zJyBwcm9w
ZXJ0eSEiICUgY29uZmlndXJhdGlvbl9saXN0KQorICAgICAgICBidWlsZF9jb25maWd1cmF0aW9u
cyA9IGNvbmZpZ3VyYXRpb25fbGlzdC5wcm9wZXJ0aWVzWydidWlsZENvbmZpZ3VyYXRpb25zJ10K
KyAgICAgICAgZm9yIHVpZCBpbiBidWlsZF9jb25maWd1cmF0aW9uczoKKyAgICAgICAgICAgIGFz
c2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1
aWQucmVmZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ2J1aWxkQ29uZmlndXJhdGlvbnMn
IGVudHJ5ICVzIHRoYXQgY291bGQgbm90IGJlIGZvdW5kIHdpdGhpbiB0aGUgcHJvamVjdCEiICUg
KGNvbmZpZ3VyYXRpb25fbGlzdCwgdWlkKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodWlk
LnJlZmVycmVkX29iamVjdCwgWENCdWlsZENvbmZpZ3VyYXRpb24pOgorICAgICAgICAgICAgICAg
IGJ1aWxkX2NvbmZpZ3VyYXRpb24gPSB1aWQucmVmZXJyZWRfb2JqZWN0CisgICAgICAgICAgICAg
ICAgc2VsZi52ZXJpZnkobm90IGJ1aWxkX2NvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvbl9saXN0
LCAiJXMgcmVmZXJzIHRvIGEgJXMsIGJ1dCB0aGF0IHdhcyBhbHJlYWR5IHByZXZpb3VzbHkgcmVm
ZXJlbmNlZCBieSAlcyEiICUgKGNvbmZpZ3VyYXRpb25fbGlzdCwgYnVpbGRfY29uZmlndXJhdGlv
biwgYnVpbGRfY29uZmlndXJhdGlvbi5jb25maWd1cmF0aW9uX2xpc3QpKQorICAgICAgICAgICAg
ICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb24uX3NldF9jb25maWd1cmF0aW9uX2xpc3QoY29uZmlndXJh
dGlvbl9saXN0KQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fbGlzdC5fYXBwZW5kX2J1
aWxkX2NvbmZpZ3VyYXRpb24oYnVpbGRfY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiJXMgY29udGFpbnMgJ2J1aWxkQ29uZmlndXJh
dGlvbnMnIGVudHJ5ICVzIC0gWENCdWlsZENvbmZpZ3VyYXRpb24gZXhwZWN0ZWQhIiAlIChidWls
ZF9waGFzZSwgdWlkLnJlZmVycmVkX29iamVjdCkpCisKKyAgICBkZWYgcG9zdHByb2Nlc3NfdGFy
Z2V0cyhzZWxmKToKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnByb2plY3QuYWxsX3Rhcmdl
dHM6CisgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX3RhcmdldCh0YXJnZXQpCisgICAgICAg
IHNlbGYudmVyaWZ5KHNlbGYucHJvamVjdC5tYWluX3RhcmdldCwgIkNvdWxkIG5vdCBsb2NhdGUg
bWFpbiB0YXJnZXQgJyVzJyBpbiBwcm9qZWN0ISIgJSBzZWxmLnByb2plY3QubWFpbl90YXJnZXRf
bmFtZSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc190YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAg
ICAgIyBsaW5rIGNvbmZpZ3VyYXRpb24gbGlzdAorICAgICAgICBzZWxmLnZlcmlmeSgnYnVpbGRD
b25maWd1cmF0aW9uTGlzdCcgaW4gdGFyZ2V0LnByb3BlcnRpZXMsICIlcyBkb2VzIG5vdCBjb250
YWluIGEgJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnIHByb3BlcnR5ISIgJSB0YXJnZXQpCisgICAg
ICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQgPSB0YXJnZXQucHJvcGVydGllc1snYnVp
bGRDb25maWd1cmF0aW9uTGlzdCddCisgICAgICAgIHNlbGYudmVyaWZ5KGJ1aWxkX2NvbmZpZ3Vy
YXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0LCAiJyVzOiAnYnVpbGRDb25maWd1cmF0aW9u
TGlzdCcgcHJvcGVydHkgJXMgaXMgdW5rbm93biEiICUgKHRhcmdldCwgYnVpbGRfY29uZmlndXJh
dGlvbl9saXN0X3VpZCkpCisgICAgICAgIHNlbGYudmVyaWZ5KGlzaW5zdGFuY2UoYnVpbGRfY29u
ZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9vYmplY3QsIFhDQ29uZmlndXJhdGlvbkxpc3Qp
LCAiJXM6ICdmaWxlUmVmJyBwcm9wZXJ0eSBpcyBub3QgYSBYQ0NvbmZpZ3VyYXRpb25MaXN0LCBi
dXQgYSAlcyEiICUgKHRhcmdldCwgYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJl
ZF9vYmplY3QpKQorICAgICAgICB0YXJnZXQuX3NldF9jb25maWd1cmF0aW9uX2xpc3QoYnVpbGRf
Y29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9vYmplY3QpCisgICAgICAgIGJ1aWxkX2Nv
bmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0Ll9zZXRfcmVmZXJyZXIodGFyZ2V0
KQorICAgICAgICAjIGNoZWNrIGZvciBtYWluIHRhcmdldAorICAgICAgICBpZiB0YXJnZXQubmFt
ZSA9PSBzZWxmLnByb2plY3QubWFpbl90YXJnZXRfbmFtZToKKyAgICAgICAgICAgIHNlbGYudmVy
aWZ5KG5vdCBzZWxmLnByb2plY3QubWFpbl90YXJnZXQsICJQcm9qZWN0IGNvbnRhaW5zIG1vcmUg
dGhhbiBvbmUgdGFyZ2V0IGNhbGxlZCAnJXMnIChhdDogJXMsIGFuZCBwcmV2aW91c2x5OiAlcykh
IiAlIChzZWxmLnByb2plY3QubWFpbl90YXJnZXRfbmFtZSwgdGFyZ2V0LCBzZWxmLnByb2plY3Qu
bWFpbl90YXJnZXQpKQorICAgICAgICAgICAgc2VsZi5wcm9qZWN0Lm1haW5fdGFyZ2V0ID0gdGFy
Z2V0CisgICAgICAgICMgbGluayBidWlsZCBwaGFzZXMKKyAgICAgICAgYnVpbGRfcGhhc2VzID0g
c2VsZi5lbnN1cmVfcHJvcGVydHkodGFyZ2V0LCAnYnVpbGRQaGFzZXMnLCBYY29kZVVJRExpc3Qp
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX3BoYXNlcywgWGNvZGVVSURMaXN0KQor
ICAgICAgICBmb3IgdWlkIGluIGJ1aWxkX3BoYXNlczoKKyAgICAgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJy
ZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ2J1aWxkUGhhc2VzJyBlbnRyeSAlcyB0aGF0IGNv
dWxkIG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2plY3QhIiAlICh0YXJnZXQsIHVpZCkpCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIFBCWEJ1aWxkUGhh
c2UpOgorICAgICAgICAgICAgICAgIGJ1aWxkX3BoYXNlID0gdWlkLnJlZmVycmVkX29iamVjdAor
ICAgICAgICAgICAgICAgIHNlbGYudmVyaWZ5KG5vdCBidWlsZF9waGFzZS50YXJnZXQsICIlcyBy
ZWZlcnMgdG8gYSAlcywgYnV0IHRoYXQgd2FzIGFscmVhZHkgcHJldmlvdXNseSByZWZlcmVuY2Vk
IGJ5ICVzISIgJSAodGFyZ2V0LCBidWlsZF9waGFzZSwgYnVpbGRfcGhhc2UudGFyZ2V0KSkKKyAg
ICAgICAgICAgICAgICBidWlsZF9waGFzZS5fc2V0X3RhcmdldCh0YXJnZXQpCisgICAgICAgICAg
ICAgICAgdGFyZ2V0Ll9hcHBlbmRfYnVpbGRfcGhhc2UoYnVpbGRfcGhhc2UpCisgICAgICAgICAg
ICAgICAgaWYgdGFyZ2V0IGlzIHNlbGYucHJvamVjdC5tYWluX3RhcmdldDoKKyAgICAgICAgICAg
ICAgICAgICAgYnVpbGRfcGhhc2UgPSBzZWxmLnByb2plY3QuYnVpbGRfcGhhc2VfbmFtZV90b19i
dWlsZF9waGFzZXMuc2V0ZGVmYXVsdChidWlsZF9waGFzZS5pc2EsIHNldCgpKS5hZGQoYnVpbGRf
cGhhc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIiVz
IGNvbnRhaW5zICdidWlsZFBoYXNlcycgZW50cnkgJXMgLSBQQlhCdWlsZFBoYXNlIGV4cGVjdGVk
ISIgJSAodGFyZ2V0LCB1aWQucmVmZXJyZWRfb2JqZWN0KSkKKworICAgIGRlZiBwb3N0cHJvY2Vz
c19wcm9qZWN0KHNlbGYpOgorICAgICAgICBwcm9qZWN0ID0gc2VsZi5wcm9qZWN0LnByb2plY3Rf
b2JqZWN0CisgICAgICAgICMgbGluayBjb25maWd1cmF0b24gbGlzdAorICAgICAgICBzZWxmLnZl
cmlmeSgnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcgaW4gcHJvamVjdC5wcm9wZXJ0aWVzLCAiJXMg
ZG9lcyBub3QgY29udGFpbiBhICdidWlsZENvbmZpZ3VyYXRpb25MaXN0JyBwcm9wZXJ0eSEiICUg
cHJvamVjdCkKKyAgICAgICAgYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZCA9IHByb2plY3Qu
cHJvcGVydGllc1snYnVpbGRDb25maWd1cmF0aW9uTGlzdCddCisgICAgICAgIHNlbGYudmVyaWZ5
KGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0LCAiJyVzOiAnYnVp
bGRDb25maWd1cmF0aW9uTGlzdCcgcHJvcGVydHkgJXMgaXMgdW5rbm93biEiICUgKHByb2plY3Qs
IGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQpKQorICAgICAgICBzZWxmLnZlcmlmeShpc2lu
c3RhbmNlKGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0LCBYQ0Nv
bmZpZ3VyYXRpb25MaXN0KSwgIiVzOiAnZmlsZVJlZicgcHJvcGVydHkgaXMgbm90IGEgWENDb25m
aWd1cmF0aW9uTGlzdCwgYnV0IGEgJXMhIiAlIChwcm9qZWN0LCBidWlsZF9jb25maWd1cmF0aW9u
X2xpc3RfdWlkLnJlZmVycmVkX29iamVjdCkpCisgICAgICAgIHByb2plY3QuX3NldF9jb25maWd1
cmF0aW9uX2xpc3QoYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9vYmplY3Qp
CisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0Ll9z
ZXRfcmVmZXJyZXIocHJvamVjdCkKKyAgICAgICAgIyBsaW5rIHRhcmdldHMKKyAgICAgICAgdGFy
Z2V0cyA9IHNlbGYuZW5zdXJlX3Byb3BlcnR5KHByb2plY3QsICd0YXJnZXRzJywgWGNvZGVVSURM
aXN0KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXJnZXRzLCBYY29kZVVJRExpc3QpCisg
ICAgICAgIGZvciB1aWQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNl
KHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2Jq
ZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ3RhcmdldCcgZW50cnkgJXMgdGhhdCBjb3VsZCBub3QgYmUg
Zm91bmQgd2l0aGluIHRoZSBwcm9qZWN0ISIgJSAocHJvamVjdCwgdWlkKSkKKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwgUEJYVGFyZ2V0KToKKyAgICAgICAg
ICAgICAgICB0YXJnZXQgPSB1aWQucmVmZXJyZWRfb2JqZWN0CisgICAgICAgICAgICAgICAgc2Vs
Zi52ZXJpZnkobm90IHRhcmdldC5wcm9qZWN0LCAiJXMgcmVmZXJzIHRvIGEgJXMsIGJ1dCB0aGF0
IHdhcyBhbHJlYWR5IHByZXZpb3VzbHkgcmVmZXJlbmNlZCBieSAlcyEiICUgKHByb2plY3QsIHRh
cmdldCwgdGFyZ2V0LnByb2plY3QpKQorICAgICAgICAgICAgICAgIHRhcmdldC5fc2V0X3Byb2pl
Y3QocHJvamVjdCkKKyAgICAgICAgICAgICAgICBwcm9qZWN0Ll9hcHBlbmRfdGFyZ2V0KHRhcmdl
dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiJXMgY29u
dGFpbnMgJ3RhcmdldHMnIGVudHJ5ICVzIC0gUEJYVGFyZ2V0IGV4cGVjdGVkISIgJSAocHJvamVj
dCwgdWlkLnJlZmVycmVkX29iamVjdCkpCisKKyAgICBkZWYgdmVyaWZ5X2FsbF9vYmplY3RzKHNl
bGYpOgorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYuYWxsX3RlbXBvcmFyeV9vYmplY3RzOgor
ICAgICAgICAgICAgc2VsZi53YXJuaW5nKCIlcyBpcyBub3QgcmVmZXJyZWQgYnkgYW55dGhpbmcg
LSBkZWxldGluZyEiICUgb2JqZWN0KQorICAgICAgICBzZWxmLmFsbF90ZW1wb3Jhcnlfb2JqZWN0
cy5jbGVhcigpCisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5wcm9qZWN0LmFsbF9vYmplY3Rz
OgorICAgICAgICAgICAgIyBUT0RPOiAiaXMgbm90IHZhbGlkISIgaXMgbm90IHZlcnkgaGVscGZ1
bCAtIGltcHJvdmUgb3V0cHV0CisgICAgICAgICAgICBzZWxmLnZlcmlmeShvYmplY3QuaXNfdmFs
aWQoKSwgIiVzIGlzIG5vdCB2YWxpZCEiICUgb2JqZWN0KQorCisKKyMgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitjbGFzcyBYY29kZVByb2plY3RXcml0
ZXIoUHJvamVjdFdyaXRlcik6CisgICAgIiIiU2VyaWFsaXplciAod3JpdGVyKSBmb3IgWGNvZGUg
cHJvamVjdCBmaWxlcy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCwgZmlsZXN5
c3RlbT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvamVjdCwgWGNvZGVQcm9q
ZWN0KQorICAgICAgICBQcm9qZWN0V3JpdGVyLl9faW5pdF9fKHNlbGYsIHByb2plY3QsIGZpbGVz
eXN0ZW0pCisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKKworICAgICMgLS0tIHdyaXRpbmcgLS0t
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb3BlcnRpZXNfc29ydF9rZXkocHJvcGVy
dHlfbmFtZSk6CisgICAgICAgICcnJyBTb3J0ICdpc2EnIGFzIGZpcnN0IHByb3BlcnR5IHRvIGJl
IG91dHB1dC4gJycnCisgICAgICAgIGlmIHByb3BlcnR5X25hbWUgPT0gJ2lzYSc6CisgICAgICAg
ICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5X25hbWUKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgYWxwaGFiZXRpY2FsX1VJRF9zb3J0X2tleSh1aWQpOgorICAgICAg
ICBhc3NlcnQgdWlkLnJlZmVycmVkX29iamVjdAorICAgICAgICBvYmplY3QgPSB1aWQucmVmZXJy
ZWRfb2JqZWN0CisgICAgICAgIGNvbW1lbnQgPSBvYmplY3QuY29tbWVudCgpLmxvd2VyKCkKKyAg
ICAgICAgYXNzZXJ0IGNvbW1lbnQsICJPYmplY3QgJXMgZ2VuZXJhdGVzIG5vIGNvbW1lbnQhIiAl
IHVpZC5zdHJpbmcKKyAgICAgICAgJycnU29ydCBncm91cHMgYmVmb3JlIGZpbGVzLCBzb3J0IGFj
Y29yZGluZyB0byBuYW1lIChjb21tZW50KSB3aXRoaW4gZ3JvdXBzL2ZpbGVzLicnJworICAgICAg
ICBpZiBpc2luc3RhbmNlKG9iamVjdCwgUEJYR3JvdXApOgorICAgICAgICAgICAgcmV0dXJuICdB
JyArIGNvbW1lbnQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmplY3QsIFBCWFZhcmlhbnRHcm91
cCk6CisgICAgICAgICAgICByZXR1cm4gJ0YnICsgY29tbWVudAorICAgICAgICBpZiBpc2luc3Rh
bmNlKG9iamVjdCwgUEJYQnVpbGRGaWxlKToKKyAgICAgICAgICAgIHJldHVybiAnRicgKyBjb21t
ZW50CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqZWN0LCBQQlhGaWxlUmVmZXJlbmNlKToKKyAg
ICAgICAgICAgIHJldHVybiAnRicgKyBjb21tZW50CisgICAgICAgIGFzc2VydCBGYWxzZQorICAg
ICAgICByZXR1cm4gJ1onICsgY29tbWVudCArIHVpZAorCisgICAgZGVmIHdyaXRlX3VpZF9hbmRf
Y29tbWVudChzZWxmLCB1aWQpOgorICAgICAgICBzZWxmLmZpbGUud3JpdGUodWlkLnN0cmluZykK
KyAgICAgICAgY29tbWVudCA9IHVpZC5yZWZlcnJlZF9vYmplY3QuY29tbWVudCgpCisgICAgICAg
IGlmIGNvbW1lbnQ6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiAvKiAiICsgY29tbWVu
dCArICIgKi8iKQorCisgICAgZGVmIHdyaXRlX3ZhbHVlKHNlbGYsIHZhbHVlLCBpbmRlbnQsIHNp
bmdsZV9saW5lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgWGNvZGVVSUQpOgorICAg
ICAgICAgICAgc2VsZi53cml0ZV91aWRfYW5kX2NvbW1lbnQodmFsdWUpCisgICAgICAgIGVsaWYg
aXNpbnN0YW5jZSh2YWx1ZSwgWGNvZGVRdW90ZWRTdHJpbmcpOgorICAgICAgICAgICAgc2VsZi5m
aWxlLndyaXRlKCciJyArIHZhbHVlICsgJyInKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFs
dWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKHZhbHVlKQorICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgaWYgc2luZ2xl
X2xpbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9saXN0X3NpbmdsZV9saW5lKHZhbHVl
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpc3RfbXVs
dGlfbGluZSh2YWx1ZSwgaW5kZW50KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRp
Y3QpOgorICAgICAgICAgICAgaWYgc2luZ2xlX2xpbmU6CisgICAgICAgICAgICAgICAgc2VsZi53
cml0ZV9vYmplY3Rfc2luZ2xlX2xpbmUodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYud3JpdGVfb2JqZWN0X211bHRpX2xpbmUodmFsdWUsIGluZGVudCwgVHJ1
ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoIkludGVybmFsIEVycm9y
IC0gdW5rbm93biB0eXBlICVzIGZvciB2YWx1ZSAnJXMnIGVuY291bnRlcmVkISIgJSAoc3RyKHR5
cGUodmFsdWUpKSwgdmFsdWUpKQorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlCisKKyAgICBkZWYg
d3JpdGVfbGlzdF9zaW5nbGVfbGluZShzZWxmLCBsaXN0KToKKyAgICAgICAgc2VsZi5maWxlLndy
aXRlKCIoIikKKyAgICAgICAgZm9yIHZhbHVlIGluIGxpc3Q6CisgICAgICAgICAgICBzZWxmLndy
aXRlX3ZhbHVlKHZhbHVlLCAnJywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgi
LCAiKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoIikiKQorCisgICAgZGVmIHdyaXRlX2xpc3Rf
bXVsdGlfbGluZShzZWxmLCBsaXN0LCBpbmRlbnQpOgorICAgICAgICBzZWxmLmZpbGUud3JpdGUo
IihcbiIpCisgICAgICAgIHN1Yl9pbmRlbnQgPSBpbmRlbnQgKyAnXHQnCisgICAgICAgIGZvciB2
YWx1ZSBpbiBsaXN0OgorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKHN1Yl9pbmRlbnQpCisg
ICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlLCBzdWJfaW5kZW50LCBGYWxzZSkKKyAg
ICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiLFxuIikKKyAgICAgICAgc2VsZi5maWxlLndyaXRl
KGluZGVudCkKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKCIpIikKKworICAgIGRlZiB3cml0ZV9v
YmplY3RfbXVsdGlfbGluZShzZWxmLCBvYmosIGluZGVudCwgc29ydF9jaGlsZHJlbik6CisgICAg
ICAgIHNlbGYuZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgc3ViX2luZGVudCA9IGluZGVudCAr
ICJcdCIKKyAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBzb3J0ZWQob2JqLml0ZW1zKCksIGtl
eT1sYW1iZGEgKGssIHYpOiBYY29kZVByb2plY3RXcml0ZXIucHJvcGVydGllc19zb3J0X2tleShr
KSk6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc3ViX2luZGVudCkKKyAgICAgICAgICAg
IHNlbGYuZmlsZS53cml0ZShrZXkpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiA9ICIp
CisgICAgICAgICAgICBpZiBrZXkgPT0gJ2NoaWxkcmVuJyBvciBrZXkgPT0gJ2ZpbGVzJzoKKyAg
ICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZSwgWGNvZGVVSURMaXN0KQorICAg
ICAgICAgICAgICAgIGlmIHNvcnRfY2hpbGRyZW46CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
LnNvcnQoa2V5PVhjb2RlUHJvamVjdFdyaXRlci5hbHBoYWJldGljYWxfVUlEX3NvcnRfa2V5KQor
ICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfbGlzdF9tdWx0aV9saW5lKHZhbHVlLCBzdWJfaW5k
ZW50KQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ3JlbW90ZUdsb2JhbElEU3RyaW5nJzoKKyAg
ICAgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiAncmVtb3RlR2xvYmFsSURTdHJpbmcnIHdy
aXRlcyB0aGUgVUlEIHdpdGhvdXQgY29tbWVudC4KKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZSh2YWx1ZSwgWGNvZGVVSUQpCisgICAgICAgICAgICAgICAgc2VsZi5maWxlLndyaXRl
KHZhbHVlLnN0cmluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0
IHZhbHVlIGlzIG5vdCBOb25lLCAiJ05vbmUnIHZhbHVlIGZvciBwcm9wZXJ0eSAnJXMnIGluIG9i
amVjdCAlcyEiICUgKGtleSwgb2JqLnVpZC5zdHJpbmcpCisgICAgICAgICAgICAgICAgc2VsZi53
cml0ZV92YWx1ZSh2YWx1ZSwgc3ViX2luZGVudCwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmZp
bGUud3JpdGUoIjtcbiIpCisgICAgICAgIHNlbGYuZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAg
IHNlbGYuZmlsZS53cml0ZSgifSIpCisKKyAgICBkZWYgd3JpdGVfb2JqZWN0X3NpbmdsZV9saW5l
KHNlbGYsIG9iaik6CisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgieyIpCisgICAgICAgIGZvciAo
a2V5LCB2YWx1ZSkgaW4gc29ydGVkKG9iai5pdGVtcygpLCBrZXk9bGFtYmRhIChrLCB2KTogWGNv
ZGVQcm9qZWN0V3JpdGVyLnByb3BlcnRpZXNfc29ydF9rZXkoaykpOgorICAgICAgICAgICAgc2Vs
Zi5maWxlLndyaXRlKGtleSkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiID0gIikKKyAg
ICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUsICcnLCBUcnVlKQorICAgICAgICAgICAg
c2VsZi5maWxlLndyaXRlKCI7ICIpCisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgifSIpCisKKyAg
ICBkZWYgd3JpdGVfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKCJ7XG4i
KQorICAgICAgICBmb3IgKGlzYSwgb2JqZWN0X3NldCkgaW4gc29ydGVkKHNlbGYucHJvamVjdC5p
c2FfdG9fb2JqZWN0cy5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigwKSk6CisgICAg
ICAgICAgICBzZWxmLmZpbGUud3JpdGUoIlxuLyogQmVnaW4gIikKKyAgICAgICAgICAgIHNlbGYu
ZmlsZS53cml0ZShpc2EpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiBzZWN0aW9uICov
XG4iKQorICAgICAgICAgICAgc2luZ2xlX2xpbmUgPSBpc2EgPT0gJ1BCWEJ1aWxkRmlsZScgb3Ig
aXNhID09ICdQQlhGaWxlUmVmZXJlbmNlJworICAgICAgICAgICAgZm9yIG9iaiBpbiBzb3J0ZWQo
b2JqZWN0X3NldCwga2V5PW9wZXJhdG9yLmF0dHJnZXR0ZXIoJ3VpZCcpKToKKyAgICAgICAgICAg
ICAgICBzZWxmLmZpbGUud3JpdGUoIlx0XHQiKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVf
dWlkX2FuZF9jb21tZW50KG9iai51aWQpCisgICAgICAgICAgICAgICAgc2VsZi5maWxlLndyaXRl
KCIgPSAiKQorICAgICAgICAgICAgICAgIGlmIHNpbmdsZV9saW5lOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLndyaXRlX29iamVjdF9zaW5nbGVfbGluZShvYmoucHJvcGVydGllcykKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzb3J0X2NoaWxkcmVuID0gb2Jq
IGlzIG5vdCBzZWxmLnByb2plY3QubWFpbl9ncm91cAorICAgICAgICAgICAgICAgICAgICBzZWxm
LndyaXRlX29iamVjdF9tdWx0aV9saW5lKG9iai5wcm9wZXJ0aWVzLCAiXHRcdCIsIHNvcnRfY2hp
bGRyZW4pCisgICAgICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCI7XG4iKQorICAgICAgICAg
ICAgc2VsZi5maWxlLndyaXRlKCIvKiBFbmQgIikKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0
ZShpc2EpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiBzZWN0aW9uICovXG4iKQorICAg
ICAgICBzZWxmLmZpbGUud3JpdGUoIlx0fSIpCisKKyAgICBkZWYgd3JpdGVfbWFpbl9vYmplY3Qo
c2VsZik6CisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgZm9yIGtleSBp
biBzb3J0ZWQoc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0LmtleXMoKSk6CisgICAgICAgICAgICBz
ZWxmLmZpbGUud3JpdGUoIlx0IikKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShrZXkpCisg
ICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAgICBpZiBrZXkgPT0g
J29iamVjdHMnOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfb2JqZWN0cygpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUoc2VsZi5wcm9qZWN0
Lm1haW5fb2JqZWN0W2tleV0sICJcdCIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5maWxlLndy
aXRlKCI7XG4iKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoIn1cbiIpCisKKyAgICBkZWYgd3Jp
dGVfcHJvamVjdF9maWxlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLmluZm8oIldyaXRpbmcg
WGNvZGUgcHJvamVjdCBmaWxlIHRvICVzIiAlIHBhdGgpCisgICAgICAgIHdpdGggc2VsZi5maWxl
c3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHBhdGgpIGFzIHNlbGYuZmlsZToKKyAg
ICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiLy8gISQqVVRGOCokIVxuIikKKyAgICAgICAgICAg
IHNlbGYud3JpdGVfbWFpbl9vYmplY3QoKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKworCitjbGFzcyBYY29kZVByb2plY3QoR3JvdXBQcm9qZWN0
KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5nIGFsbCBkYXRhIHN0cnVjdHVyZXMgZGVz
Y3JpYmluZyBhbiBYY29kZSBwcm9qZWN0IGZpbGUuCisgICAgIiIiCisgICAgU0VQID0gJy8nCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbW9uLCBmaWxlLCB2YXJpYWJsZV90b19kaXJlY3Rv
cnksIHByb2plY3RfbmFtZT1Ob25lLCBtYWluX3RhcmdldF9uYW1lPU5vbmUpOgorICAgICAgICBh
c3NlcnQgY29tbW9uCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbW1vbiwgQ29tbW9uSW5m
bykKKyAgICAgICAgYXNzZXJ0IGZpbGUKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwg
Q29tbW9uRmlsZSkKKyAgICAgICAgYXNzZXJ0ICdTT1VSQ0VfUk9PVCcgaW4gdmFyaWFibGVfdG9f
ZGlyZWN0b3J5CisgICAgICAgIEdyb3VwUHJvamVjdC5fX2luaXRfXyhzZWxmLCBjb21tb24sIGZp
bGUsIHZhcmlhYmxlX3RvX2RpcmVjdG9yeSwgcHJvamVjdF9uYW1lKQorICAgICAgICAjIFhjb2Rl
IHByb2plY3RzIGNhbiBjb250YWluIG11bHRpcGxlIHRhcmdldHMuIERlZmluZSB0aGUgdGFyZ2V0
IG5hbWUgYW5kIHRhcmdldCBvYmplY3Qgd2UnbGwgYmUgbWFuaXB1bGF0aW5nLgorICAgICAgICBz
ZWxmLm1haW5fdGFyZ2V0X25hbWUgPSBtYWluX3RhcmdldF9uYW1lIG9yIHByb2plY3RfbmFtZQor
ICAgICAgICBzZWxmLm1haW5fdGFyZ2V0ID0gTm9uZQorICAgICAgICAjIG1haW4gKG91dGVyKSBv
YmplY3QKKyAgICAgICAgc2VsZi5tYWluX29iamVjdCA9IHt9CisgICAgICAgICMgcHJvamVjdCdz
IFBCWFByb2plY3Qgb2JqZWN0CisgICAgICAgIHNlbGYucHJvamVjdF9vYmplY3QgPSBOb25lCisg
ICAgICAgICMgbWFwIHVpZCBzdHJpbmcgLT4gWGNvZGVVSUQgb2JqZWN0CisgICAgICAgIHNlbGYu
dWlkX3N0cmluZ190b19VSUQgPSB7fQorICAgICAgICAjIG1hcCAnaXNhJyAoZS5nLiwgJ1BCWEdy
b3VwJykgdG8gYSBzZXQgb2YgUEJYT2JqZWN0LXMgdGhhdCBhcmUgb2YgdGhhdCB0eXBlCisgICAg
ICAgIHNlbGYuaXNhX3RvX29iamVjdHMgPSB7fQorICAgICAgICAjIHNldCBvZiBhbGwgb2JqZWN0
cworICAgICAgICBzZWxmLmFsbF9vYmplY3RzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgUEJYRmls
ZVJlZmVyZW5jZSBvYmplY3RzCisgICAgICAgIHNlbGYuYWxsX2ZpbGVfcmVmZXJlbmNlcyA9IHNl
dCgpCisgICAgICAgICMgYWxsIFBCWFZhcmlhbnRHcm91cCBvYmplY3RzCisgICAgICAgIHNlbGYu
YWxsX3ZhcmlhbnRfZ3JvdXBzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgUEJYQnVpbGRQaGFzZSBv
YmplY3RzCisgICAgICAgIHNlbGYuYWxsX2J1aWxkX3BoYXNlcyA9IHNldCgpCisgICAgICAgICMg
YWxsIFBCWEJ1aWxkRmlsZSBvYmplY3RzCisgICAgICAgIHNlbGYuYWxsX2J1aWxkX2ZpbGVzID0g
c2V0KCkKKyAgICAgICAgIyBhbGwgWENCdWlsZENvbmZpZ3VyYXRpb24gb2JqZWN0cworICAgICAg
ICBzZWxmLmFsbF9idWlsZF9jb25maWd1cmF0aW9ucyA9IHNldCgpCisgICAgICAgICMgYWxsIFhD
Q29uZmlndXJhdGlvbkxpc3Qgb2JqZWN0cworICAgICAgICBzZWxmLmFsbF9jb25maWd1cmF0aW9u
X2xpc3RzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgUEJYVGFyZ2V0IG9iamVjdHMKKyAgICAgICAg
c2VsZi5hbGxfdGFyZ2V0cyA9IHNldCgpCisgICAgICAgICMgbWFwIENvbW1vbkZpbGUgLT4gc2V0
IG9mIFBCWEZpbGVSZWZlcmVuY2Ugb2JqZWN0cworICAgICAgICBzZWxmLmZpbGVfdG9fZmlsZV9y
ZWZlcmVuY2VzID0ge30KKyAgICAgICAgIyBtYXAgYnVpbGQgcGhhc2UgbmFtZSAoJ1BCWFNvdXJj
ZXNCdWlsZFBoYXNlJywgZXRjLikgLT4gc2V0IG9mIFBCWEJ1aWxkUGhhc2Ugb2JqZWN0cworICAg
ICAgICBzZWxmLmJ1aWxkX3BoYXNlX25hbWVfdG9fYnVpbGRfcGhhc2VzID0ge30KKyAgICAgICAg
IyBtYXAgQ29tbW9uRGlyZWN0b3J5IC0+IGxpc3Qgb2YgUEJYR3JvdXAgKG5vdCBQQlhWYXJpYW50
R3JvdXAhKSBvYmplY3RzLCBvcmRlcmVkIGRlcHRoLWZpcnN0CisgICAgICAgIHNlbGYuZGlyZWN0
b3J5X3RvX2dyb3VwcyA9IHt9CisgICAgICAgICMgVUlEIGNyZWF0aW9uIGZ1bmN0aW9uIC0gb3Zl
cnJpZGUgZm9yIG1vY2tpbmcKKyAgICAgICAgc2VsZi51aWRfY3JlYXRpb25fZnVuY3Rpb24gPSBY
Y29kZVByb2plY3QuY3JlYXRlX1VJRF9zdHJpbmcKKworICAgICMgLS0tIG1hbmlwdWxhdGlvbiAt
LS0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX1VJRF9zdHJpbmcoKToKKyAg
ICAgICAgcmV0dXJuICcnLmpvaW4oW3JhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlBQkNERUYnKSBm
b3IgaSBpbiByYW5nZSgyNCldKQorCisgICAgZGVmIGNyZWF0ZV9VSUQoc2VsZik6CisgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICB1aWRzdHIgPSBzZWxmLnVpZF9jcmVhdGlvbl9mdW5j
dGlvbigpCisgICAgICAgICAgICBpZiBub3QgWGNvZGVVSUQuaXNfdmFsaWRfVUlEKHVpZHN0cik6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHVpZHN0ciBpbiBzZWxm
LnVpZF9zdHJpbmdfdG9fVUlEOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICB1aWQgPSBYY29kZVVJRCh1aWRzdHIpCisgICAgICAgICAgICBzZWxmLnVpZF9zdHJpbmdfdG9f
VUlEW3VpZHN0cl0gPSB1aWQKKyAgICAgICAgICAgIHJldHVybiB1aWQKKworICAgIGRlZiBlbnN1
cmVfVUlEKHNlbGYsIHVpZF9zdHJpbmcpOgorICAgICAgICBhc3NlcnQgWGNvZGVVSUQuaXNfdmFs
aWRfVUlEKHVpZF9zdHJpbmcpCisgICAgICAgIHJldHVybiBzZWxmLnVpZF9zdHJpbmdfdG9fVUlE
LnNldGRlZmF1bHQodWlkX3N0cmluZywgWGNvZGVVSUQodWlkX3N0cmluZykpCisKKyAgICBkZWYg
X2FkZF9vYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2Jq
ZWN0LCBQQlhPYmplY3QpCisgICAgICAgIGFzc2VydCBvYmplY3QudWlkIAorICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShvYmplY3QudWlkLCBYY29kZVVJRCkKKyAgICAgICAgYXNzZXJ0IG9iamVj
dC51aWQuc3RyaW5nIGluIHNlbGYudWlkX3N0cmluZ190b19VSUQKKyAgICAgICAgYXNzZXJ0IG9i
amVjdC51aWQucmVmZXJyZWRfb2JqZWN0IGlzIG9iamVjdAorICAgICAgICBhc3NlcnQgb2JqZWN0
LmlzYQorICAgICAgICBhc3NlcnQgb2JqZWN0IG5vdCBpbiBzZWxmLmFsbF9vYmplY3RzCisgICAg
ICAgIHNlbGYuYWxsX29iamVjdHMuYWRkKG9iamVjdCkKKyAgICAgICAgc2VsZi5pc2FfdG9fb2Jq
ZWN0cy5zZXRkZWZhdWx0KG9iamVjdC5pc2EsIHNldCgpKS5hZGQob2JqZWN0KQorCisgICAgZGVm
IHNldF9QQlhQcm9qZWN0KHNlbGYsIHByb2plY3Rfb2JqZWN0KToKKyAgICAgICAgYXNzZXJ0IGlz
aW5zdGFuY2UocHJvamVjdF9vYmplY3QsIFBCWFByb2plY3QpCisgICAgICAgIGFzc2VydCBub3Qg
c2VsZi5wcm9qZWN0X29iamVjdAorICAgICAgICBzZWxmLnByb2plY3Rfb2JqZWN0ID0gcHJvamVj
dF9vYmplY3QKKyAgICAgICAgc2VsZi5fYWRkX29iamVjdChwcm9qZWN0X29iamVjdCkKKworICAg
IGRlZiBhZGRfUEJYVGFyZ2V0KHNlbGYsIHRhcmdldCk6CisgICAgICAgIGFzc2VydCBpc2luc3Rh
bmNlKHRhcmdldCwgUEJYVGFyZ2V0KQorICAgICAgICBhc3NlcnQgdGFyZ2V0IG5vdCBpbiBzZWxm
LmFsbF90YXJnZXRzCisgICAgICAgIHNlbGYuYWxsX3RhcmdldHMuYWRkKHRhcmdldCkKKyAgICAg
ICAgc2VsZi5fYWRkX29iamVjdCh0YXJnZXQpCisKKyAgICBkZWYgYWRkX1BCWEJ1aWxkUGhhc2Uo
c2VsZiwgYnVpbGRfcGhhc2UpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9waGFz
ZSwgUEJYQnVpbGRQaGFzZSkKKyAgICAgICAgYXNzZXJ0IGJ1aWxkX3BoYXNlIG5vdCBpbiBzZWxm
LmFsbF9idWlsZF9waGFzZXMKKyAgICAgICAgc2VsZi5hbGxfYnVpbGRfcGhhc2VzLmFkZChidWls
ZF9waGFzZSkKKyAgICAgICAgc2VsZi5fYWRkX29iamVjdChidWlsZF9waGFzZSkKKworICAgIGRl
ZiBhZGRfUEJYR3JvdXAoc2VsZiwgZ3JvdXApOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShn
cm91cCwgUEJYR3JvdXApCisgICAgICAgIHNlbGYuX2FkZF9ncm91cChncm91cCkKKyAgICAgICAg
c2VsZi5fYWRkX29iamVjdChncm91cCkKKworICAgIGRlZiBhZGRfUEJYVmFyaWFudEdyb3VwKHNl
bGYsIHZhcmlhbnRfZ3JvdXApOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YXJpYW50X2dy
b3VwLCBQQlhWYXJpYW50R3JvdXApCisgICAgICAgIHNlbGYuYWxsX3ZhcmlhbnRfZ3JvdXBzLmFk
ZCh2YXJpYW50X2dyb3VwKQorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0KHZhcmlhbnRfZ3JvdXAp
CisKKyAgICBkZWYgYWRkX1BCWEJ1aWxkRmlsZShzZWxmLCBidWlsZF9maWxlKToKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfZmlsZSwgUEJYQnVpbGRGaWxlKQorICAgICAgICBhc3Nl
cnQgYnVpbGRfZmlsZSBub3QgaW4gc2VsZi5hbGxfYnVpbGRfZmlsZXMKKyAgICAgICAgc2VsZi5h
bGxfYnVpbGRfZmlsZXMuYWRkKGJ1aWxkX2ZpbGUpCisgICAgICAgIHNlbGYuX2FkZF9vYmplY3Qo
YnVpbGRfZmlsZSkKKworICAgIGRlZiBhZGRfUEJYRmlsZVJlZmVyZW5jZShzZWxmLCBmaWxlX3Jl
ZmVyZW5jZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGVfcmVmZXJlbmNlLCBQQlhG
aWxlUmVmZXJlbmNlKQorICAgICAgICBhc3NlcnQgZmlsZV9yZWZlcmVuY2Ugbm90IGluIHNlbGYu
YWxsX2ZpbGVfcmVmZXJlbmNlcworICAgICAgICBzZWxmLmFsbF9maWxlX3JlZmVyZW5jZXMuYWRk
KGZpbGVfcmVmZXJlbmNlKQorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0KGZpbGVfcmVmZXJlbmNl
KQorCisgICAgZGVmIGFkZF9YQ0J1aWxkQ29uZmlndXJhdGlvbihzZWxmLCBidWlsZF9jb25maWd1
cmF0aW9uKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfY29uZmlndXJhdGlvbiwg
WENCdWlsZENvbmZpZ3VyYXRpb24pCisgICAgICAgIHNlbGYuYWxsX2J1aWxkX2NvbmZpZ3VyYXRp
b25zLmFkZChidWlsZF9jb25maWd1cmF0aW9uKQorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0KGJ1
aWxkX2NvbmZpZ3VyYXRpb24pCisKKyAgICBkZWYgYWRkX1hDQ29uZmlndXJhdGlvbkxpc3Qoc2Vs
ZiwgY29uZmlndXJhdGlvbl9saXN0KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29uZmln
dXJhdGlvbl9saXN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0KQorICAgICAgICBzZWxmLmFsbF9jb25m
aWd1cmF0aW9uX2xpc3RzLmFkZChjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHNlbGYuX2Fk
ZF9vYmplY3QoY29uZmlndXJhdGlvbl9saXN0KQorCisgICAgZGVmIGFkZF9QQlhBcmJpdHJhcnlP
YmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgc2VsZi5fYWRkX29iamVjdChvYmplY3QpCisK
KyAgICBkZWYgY3JlYXRlX1BCWFByb2plY3Qoc2VsZiwgdWlkLCBpc2E9Tm9uZSwgbmFtZT1Ob25l
LCBjb25maWd1cmF0aW9uX2xpc3Q9Tm9uZSk6CisgICAgICAgIHByb2plY3QgPSBQQlhQcm9qZWN0
KHVpZCwgaXNhIG9yICdQQlhQcm9qZWN0Jywgc2VsZiwgbmFtZSwgY29uZmlndXJhdGlvbl9saXN0
KQorICAgICAgICBzZWxmLnNldF9QQlhQcm9qZWN0KHByb2plY3QpCisgICAgICAgIHJldHVybiBw
cm9qZWN0CisKKyAgICBkZWYgY3JlYXRlX1BCWFRhcmdldChzZWxmLCB1aWQsIGlzYSwgbmFtZT1O
b25lLCBwcm9qZWN0PU5vbmUsIGNvbmZpZ3VyYXRpb25fbGlzdD1Ob25lKToKKyAgICAgICAgdGFy
Z2V0ID0gUEJYVGFyZ2V0KHVpZCwgaXNhLCBuYW1lLCBwcm9qZWN0LCBjb25maWd1cmF0aW9uX2xp
c3QpCisgICAgICAgIHNlbGYuYWRkX1BCWFRhcmdldCh0YXJnZXQpCisgICAgICAgIHJldHVybiB0
YXJnZXQKKworICAgIGRlZiBjcmVhdGVfUEJYQnVpbGRQaGFzZShzZWxmLCB1aWQsIGlzYSwgbmFt
ZT1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGJ1aWxkX3BoYXNlID0gUEJYQnVpbGRQaGFz
ZSh1aWQsIGlzYSwgbmFtZSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFkZF9QQlhCdWlsZFBoYXNl
KGJ1aWxkX3BoYXNlKQorICAgICAgICByZXR1cm4gYnVpbGRfcGhhc2UKKworICAgIGRlZiBjcmVh
dGVfUEJYR3JvdXAoc2VsZiwgdWlkLCBpc2E9Tm9uZSwgbmFtZT1Ob25lLCBwYXJlbnRfZ3JvdXA9
Tm9uZSwgZGlyZWN0b3J5PU5vbmUpOgorICAgICAgICBncm91cCA9IFBCWEdyb3VwKHVpZCwgaXNh
IG9yICdQQlhHcm91cCcsIG5hbWUsIHBhcmVudF9ncm91cCwgZGlyZWN0b3J5KQorICAgICAgICBz
ZWxmLmFkZF9QQlhHcm91cChncm91cCkKKyAgICAgICAgcmV0dXJuIGdyb3VwCisKKyAgICBkZWYg
Y3JlYXRlX1BCWFZhcmlhbnRHcm91cChzZWxmLCB1aWQsIGlzYT1Ob25lLCBuYW1lPU5vbmUsIHBh
cmVudF9ncm91cD1Ob25lLCBkaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgIHZhcmlhbnRfZ3JvdXAg
PSBQQlhWYXJpYW50R3JvdXAodWlkLCBpc2Egb3IgJ1BCWFZhcmlhbnRHcm91cCcsIG5hbWUsIHBh
cmVudF9ncm91cCwgZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFkZF9QQlhWYXJpYW50R3JvdXAo
dmFyaWFudF9ncm91cCkKKyAgICAgICAgcmV0dXJuIHZhcmlhbnRfZ3JvdXAKKworICAgIGRlZiBj
cmVhdGVfUEJYQnVpbGRGaWxlKHNlbGYsIHVpZD1Ob25lLCBpc2E9Tm9uZSwgbmFtZT1Ob25lLCBm
aWxlUmVmPU5vbmUsIGJ1aWxkX3BoYXNlPU5vbmUpOgorICAgICAgICBidWlsZF9maWxlID0gUEJY
QnVpbGRGaWxlKHVpZCwgaXNhIG9yICdQQlhCdWlsZEZpbGUnLCBuYW1lLCBmaWxlUmVmLCBidWls
ZF9waGFzZSkKKyAgICAgICAgc2VsZi5hZGRfUEJYQnVpbGRGaWxlKGJ1aWxkX2ZpbGUpCisgICAg
ICAgIHJldHVybiBidWlsZF9maWxlCisKKyAgICBkZWYgY3JlYXRlX1BCWEZpbGVSZWZlcmVuY2Uo
c2VsZiwgdWlkLCBpc2E9Tm9uZSwgbmFtZT1Ob25lLCBmaWxlPU5vbmUsIGdyb3VwPU5vbmUpOgor
ICAgICAgICBmaWxlX3JlZmVyZW5jZSA9IFBCWEZpbGVSZWZlcmVuY2UodWlkLCBpc2Egb3IgJ1BC
WEZpbGVSZWZlcmVuY2UnLCBuYW1lLCBmaWxlLCBncm91cCkKKyAgICAgICAgc2VsZi5hZGRfUEJY
RmlsZVJlZmVyZW5jZShmaWxlX3JlZmVyZW5jZSkKKyAgICAgICAgcmV0dXJuIGZpbGVfcmVmZXJl
bmNlCisKKyAgICBkZWYgY3JlYXRlX1hDQnVpbGRDb25maWd1cmF0aW9uKHNlbGYsIHVpZCwgaXNh
PU5vbmUsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUpOgorICAgICAgICBidWls
ZF9jb25maWd1cmF0aW9uID0gWENCdWlsZENvbmZpZ3VyYXRpb24odWlkLCBpc2Egb3IgJ1hDQnVp
bGRDb25maWd1cmF0aW9uJywgbmFtZSwgY29uZmlndXJhdGlvbl9saXN0KQorICAgICAgICBzZWxm
LmFkZF9YQ0J1aWxkQ29uZmlndXJhdGlvbihidWlsZF9jb25maWd1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4gYnVpbGRfY29uZmlndXJhdGlvbgorCisgICAgZGVmIGNyZWF0ZV9YQ0NvbmZpZ3VyYXRp
b25MaXN0KHNlbGYsIHVpZCwgaXNhPU5vbmUsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0
PU5vbmUpOgorICAgICAgICBjb25maWd1cmF0aW9uX2xpc3QgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0
KHVpZCwgaXNhIG9yICdYQ0NvbmZpZ3VyYXRpb25MaXN0JywgbmFtZSwgY29uZmlndXJhdGlvbl9s
aXN0KQorICAgICAgICBzZWxmLmFkZF9YQ0NvbmZpZ3VyYXRpb25MaXN0KGNvbmZpZ3VyYXRpb25f
bGlzdCkKKyAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fbGlzdAorCisgICAgZGVmIGNyZWF0
ZV9QQlhBcmJpdHJhcnlPYmplY3Qoc2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSk6CisgICAgICAg
IG9iamVjdCA9IFBCWEFyYml0cmFyeU9iamVjdCh1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgc2Vs
Zi5hZGRfUEJYQXJiaXRyYXJ5T2JqZWN0KG9iamVjdCkKKyAgICAgICAgcmV0dXJuIG9iamVjdAor
CisgICAgZGVmIGVuc3VyZV9ncm91cF9mb3JfZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeSk6Cisg
ICAgICAgIGdyb3VwcyA9IHNlbGYuZGlyZWN0b3J5X3RvX2dyb3Vwcy5zZXRkZWZhdWx0KGRpcmVj
dG9yeSwgW10pCisgICAgICAgIGlmIGdyb3VwczoKKyAgICAgICAgICAgIHJldHVybiBncm91cHNb
MF0gICMgVGhlcmUncyBubyB3YXkgdG8gZGVjaWRlIGJldHdlZW4gbXVsdGlwbGUgZ3JvdXBzIHJl
ZmVycmluZyB0aGUgc2FtZSBkaXJlY3RvcnkgLSBjaG9vc2UgYW4gYXJiaXRyYXJ5IG9uZQorICAg
ICAgICAjCisgICAgICAgICMgRklYTUU6IEJlbG93IGxpbmUgdHJpZ2dlcnMgZmlyICcke1NDTX0n
IGlmIHNvbWVvbmUgd2FudHMgdG8gYWRkIGEgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIGNoZWNr
b3V0IHJvb3QuCisgICAgICAgICMgICAgICAgIFRoaXMgaXMgT0sgZm9yIFdlYkNvcmUsIGJ1dCBw
ZXJoYXBzIG5vdCBvdGhlciBwcm9qZWN0cy4KKyAgICAgICAgIworICAgICAgICBzZWxmLnZlcmlm
eShkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSwgImJhc2UgZGlyZWN0b3J5ICVzIG5vdCByZXBy
ZXNlbnRlZCBpbiBYY29kZSBwcm9qZWN0ISIgJSBkaXJlY3RvcnkubmFtZSkKKyAgICAgICAgYmFz
ZV9ncm91cCA9IHNlbGYuZW5zdXJlX2dyb3VwX2Zvcl9kaXJlY3RvcnkoZGlyZWN0b3J5LnBhcmVu
dF9kaXJlY3RvcnkpCisgICAgICAgIGdyb3VwID0gc2VsZi5jcmVhdGVfUEJYR3JvdXAoc2VsZi5j
cmVhdGVfVUlEKCksIHBhcmVudF9ncm91cD1iYXNlX2dyb3VwLCBkaXJlY3Rvcnk9ZGlyZWN0b3J5
KQorICAgICAgICBncm91cC5wYXRoID0gZGlyZWN0b3J5Lm5hbWUKKyAgICAgICAgZ3JvdXAucHJv
cGVydGllc1snc291cmNlVHJlZSddID0gJyI8Z3JvdXA+IicKKyAgICAgICAgZ3JvdXBzLmFwcGVu
ZChncm91cCkKKyAgICAgICAgYmFzZV9ncm91cC5wcm9wZXJ0aWVzLnNldGRlZmF1bHQoJ2NoaWxk
cmVuJywgWGNvZGVVSURMaXN0KCkpLmFwcGVuZChncm91cC51aWQpCisgICAgICAgIHNlbGYuZGVi
dWcoIkNyZWF0ZWQgJXMiICUgZ3JvdXApCisgICAgICAgIHJldHVybiBncm91cAorCisgICAgZGVm
IGFkZF9maWxlKHNlbGYsIGZpbGUpOgorICAgICAgICBhc3NlcnQgZmlsZQorICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShmaWxlLCBDb21tb25GaWxlKQorICAgICAgICBzZWxmLmluZm8oIkFkZGlu
ZyBmaWxlICVzIHRvIFhjb2RlIHByb2plY3QiICUgc2VsZi5jb21tb24uZmlsZV9hYnNwYXRoKGZp
bGUsIFhjb2RlUHJvamVjdC5TRVAsIHNlbGYuZGlyZWN0b3J5X3RvX3ZhcmlhYmxlKSkKKyAgICAg
ICAgZmlsZV9yZWZlcmVuY2VzID0gc2VsZi5maWxlX3RvX2ZpbGVfcmVmZXJlbmNlcy5zZXRkZWZh
dWx0KGZpbGUsIHNldCgpKQorICAgICAgICBpZiBmaWxlX3JlZmVyZW5jZXM6CisgICAgICAgICAg
ICBzZWxmLndhcm5pbmcoIkZpbGUgJXMgYWxyZWFkeSBjb250YWluZWQgaW4gWGNvZGUgcHJvamVj
dCAlcyAtIG5vdCBhZGRpbmcgaXQgYWdhaW4hIiAlIChzZWxmLmNvbW1vbi5maWxlX2Fic3BhdGgo
ZmlsZSwgWGNvZGVQcm9qZWN0LlNFUCwgc2VsZi5kaXJlY3RvcnlfdG9fdmFyaWFibGUpLCBzZWxm
Lm5hbWUpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdyb3VwID0gc2VsZi5lbnN1cmVf
Z3JvdXBfZm9yX2RpcmVjdG9yeShmaWxlLmRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IG5vdCBn
cm91cC5jb250YWluc19yZWZlcmVuY2VfdG9fZmlsZShmaWxlKQorICAgICAgICBmaWxlX3JlZmVy
ZW5jZSA9IHNlbGYuY3JlYXRlX1BCWEZpbGVSZWZlcmVuY2Uoc2VsZi5jcmVhdGVfVUlEKCksIGZp
bGU9ZmlsZSwgZ3JvdXA9Z3JvdXApCisgICAgICAgIGZpbGVfcmVmZXJlbmNlLnBhdGggPSBmaWxl
Lm5hbWUKKyAgICAgICAgc2VsZi5kZWJ1ZygiQ3JlYXRlZCAlcyIgJSBmaWxlX3JlZmVyZW5jZSkK
KyAgICAgICAgZ3JvdXAuX2FkZF9maWxlX3JlZmVyZW5jZShmaWxlX3JlZmVyZW5jZSkKKyAgICAg
ICAgZ3JvdXAucHJvcGVydGllcy5zZXRkZWZhdWx0KCdjaGlsZHJlbicsIFhjb2RlVUlETGlzdCgp
KS5hcHBlbmQoZmlsZV9yZWZlcmVuY2UudWlkKQorICAgICAgICBmaWxlX3JlZmVyZW5jZXMuYWRk
KGZpbGVfcmVmZXJlbmNlKQorICAgICAgICAoZmlsZV9uYW1lLCBmaWxlX2V4dGVuc2lvbikgPSBz
ZWxmLmNvbW1vbi5maWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGUubmFtZSkKKyAgICAgICAgc2VsZi52
ZXJpZnkoZmlsZV9leHRlbnNpb24gaW4gRVhURU5TSU9OX1RPX0ZJTEVFTkNPRElOR19MQVNUS05P
V05GSUxFVFlQRV9BTkRfQlVJTERfUEhBU0UsICJVbmtub3duIGZpbGUgZXh0ZW5zaW9uIGZvciBm
aWxlICclcychIiAlIGZpbGUubmFtZSkKKyAgICAgICAgKGVuY29kaW5nLCBmaWxlX3R5cGUsIGJ1
aWxkX3BoYXNlX25hbWUpID0gRVhURU5TSU9OX1RPX0ZJTEVFTkNPRElOR19MQVNUS05PV05GSUxF
VFlQRV9BTkRfQlVJTERfUEhBU0VbZmlsZV9leHRlbnNpb25dCisgICAgICAgIGZpbGVfcmVmZXJl
bmNlLnByb3BlcnRpZXNbJ2xhc3RLbm93bkZpbGVUeXBlJ10gPSBmaWxlX3R5cGUKKyAgICAgICAg
aWYgZW5jb2Rpbmc6CisgICAgICAgICAgICBmaWxlX3JlZmVyZW5jZS5wcm9wZXJ0aWVzWydmaWxl
RW5jb2RpbmcnXSA9IGVuY29kaW5nCisgICAgICAgIGlmIGJ1aWxkX3BoYXNlX25hbWU6CisgICAg
ICAgICAgICBidWlsZF9waGFzZXMgPSBzZWxmLmJ1aWxkX3BoYXNlX25hbWVfdG9fYnVpbGRfcGhh
c2VzLnNldGRlZmF1bHQoYnVpbGRfcGhhc2VfbmFtZSwgc2V0KCkpCisgICAgICAgICAgICAjIEZJ
WE1FOiBhZGQgYSBuZXcgYnVpbGQgcGhhc2UgaWYgbm90IHlldCBwcmVzZW50CisgICAgICAgICAg
ICBzZWxmLnZlcmlmeShidWlsZF9waGFzZXMsICJGaWxlICVzIHNob3VsZCBiZSBhZGRlZCB0byBi
dWlsZCBwaGFzZSAnJXMnIHRoYXQgaXMgbm90IGNvbnRhaW5lZCB3aXRoaW4gdGFyZ2V0ICVzISIg
JSAoZmlsZS5uYW1lLCBidWlsZF9waGFzZV9uYW1lLCBzZWxmLm1haW5fdGFyZ2V0KSkKKyAgICAg
ICAgICAgIGJ1aWxkX3BoYXNlID0gaXRlcihidWlsZF9waGFzZXMpLm5leHQoKSAgIyBjaG9vc2Ug
YW4gYXJiaXRyYXJ5IG9uZQorICAgICAgICAgICAgYnVpbGRfZmlsZSA9IHNlbGYuY3JlYXRlX1BC
WEJ1aWxkRmlsZShzZWxmLmNyZWF0ZV9VSUQoKSwgZmlsZVJlZj1maWxlX3JlZmVyZW5jZSwgYnVp
bGRfcGhhc2U9YnVpbGRfcGhhc2UpCisgICAgICAgICAgICBidWlsZF9maWxlLnByb3BlcnRpZXNb
J2ZpbGVSZWYnXSA9IGZpbGVfcmVmZXJlbmNlLnVpZAorICAgICAgICAgICAgYnVpbGRfcGhhc2Uu
X2FkZF9idWlsZF9maWxlKGJ1aWxkX2ZpbGUpCisgICAgICAgICAgICBzZWxmLmRlYnVnKCJDcmVh
dGVkICVzIiAlIGJ1aWxkX2ZpbGUpCisgICAgICAgICAgICBidWlsZF9waGFzZS5wcm9wZXJ0aWVz
LnNldGRlZmF1bHQoJ2ZpbGVzJywgWGNvZGVVSURMaXN0KCkpLmFwcGVuZChidWlsZF9maWxlLnVp
ZCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>