<?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>42532</bug_id>
          
          <creation_ts>2010-07-18 18:16:16 -0700</creation_ts>
          <short_desc>Auto-generate the JS bindings for WebKitTestRunner&apos;s script objects</short_desc>
          <delta_ts>2010-07-22 23:36:10 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>42575</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>253036</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-18 18:16:16 -0700</bug_when>
    <thetext>Auto-generate the JS bindings for WebKitTestRunner&apos;s script objects. It will make it easier to add more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253037</commentid>
    <comment_count>1</comment_count>
      <attachid>61922</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-18 18:16:51 -0700</bug_when>
    <thetext>Created attachment 61922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253040</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-18 18:21:19 -0700</bug_when>
    <thetext>Attachment 61922 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253120</commentid>
    <comment_count>3</comment_count>
      <attachid>61922</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-19 02:06:47 -0700</bug_when>
    <thetext>Comment on attachment 61922
Patch

I really like the idea behind this patch.  I wanted to review it, but it was made of Perl.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253259</commentid>
    <comment_count>4</comment_count>
      <attachid>61922</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-19 09:35:54 -0700</bug_when>
    <thetext>Comment on attachment 61922
Patch

It looks like _nullStringPolicy isn&apos;t needed. It&apos;s only called in one place, and its result is never used.

It looks like _monthDayYearString isn&apos;t needed.

What about Windows?

Maybe JSWrapper should be a namespace rather than a class?

r=me other than those concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253262</commentid>
    <comment_count>5</comment_count>
      <attachid>61922</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-19 09:40:06 -0700</bug_when>
    <thetext>Comment on attachment 61922
Patch

Also, have you thought about hooking this into the test system in WebCore/bindings/scripts/test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253393</commentid>
    <comment_count>6</comment_count>
      <attachid>61992</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-19 14:31:57 -0700</bug_when>
    <thetext>Created attachment 61992
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253394</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-19 14:33:41 -0700</bug_when>
    <thetext>Attachment 61992 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/InjectedBundle/Bindings/JSWrapper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253401</commentid>
    <comment_count>8</comment_count>
      <attachid>61992</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-19 14:39:31 -0700</bug_when>
    <thetext>Comment on attachment 61992
Patch 2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255144</commentid>
    <comment_count>9</comment_count>
      <attachid>61922</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-22 18:43:33 -0700</bug_when>
    <thetext>Comment on attachment 61922
Patch

Cleared Adam Roben&apos;s review+ from obsolete attachment 61922 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61922</attachid>
            <date>2010-07-18 18:16:51 -0700</date>
            <delta_ts>2010-07-22 18:43:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>58224</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYzNjQwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTAtMDctMTggIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQy
NTMyCisgICAgICAgIEF1dG8tZ2VuZXJhdGUgdGhlIEpTIGJpbmRpbmdzIGZvciBXZWJLaXRUZXN0
UnVubmVyJ3Mgc2NyaXB0IG9iamVjdHMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9D
b25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWc6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9EZXJpdmVkU291cmNlcy5tYWtlOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9HZXRQdHIuaDogQWRkZWQuCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5nczogQWRkZWQuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9y
VGVzdFJ1bm5lci5wbTogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6SlNX
cmFwcGFibGU6On5KU1dyYXBwYWJsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6
SlNXcmFwcGVyOjp3cmFwKToKKyAgICAgICAgKFdUUjo6SlNXcmFwcGVyOjp1bndyYXApOgorICAg
ICAgICAoV1RSOjp1bndyYXBPYmplY3QpOgorICAgICAgICAoV1RSOjpKU1dyYXBwZXI6OmluaXRp
YWxpemUpOgorICAgICAgICAoV1RSOjpKU1dyYXBwZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdUUjo6dG9KUyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRUZXN0Q29udHJvbGxlci5pZGw6IEFkZGVkLgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
LmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKToKKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzZXRTdGF0dXNiYXJUZXh0KToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OndyYXBwZXJDbGFzcyk6CisgICAg
ICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VW50aWxEb25lKToKKyAgICAgICAg
KFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3VsZER1bXBBc1RleHQpOgor
ICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFzVGV4dCk6CisgICAgICAg
IChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjpzaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBTdGF0dXNDYWxsYmFja3Mp
OgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFRvRHVtcCk6CisgICAg
ICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjp0ZXN0UmVwYWludCk6CisgICAgICAgIChX
VFI6OkxheW91dFRlc3RDb250cm9sbGVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkpOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCiAyMDEwLTA3LTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlz
aW9uIDApCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK1ZQQVRIID0gXAorICAgICQoV2ViS2l0VGVzdFJ1bm5lcikvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MgXAorIworCitJTlRFUkZBQ0VTID0gXAorICAgIExheW91dFRlc3RD
b250cm9sbGVyIFwKKyMKKworU0NSSVBUUyA9IFwKKyAgICAkKFdlYkNvcmVTY3JpcHRzKS9Db2Rl
R2VuZXJhdG9yLnBtIFwKKyAgICAkKFdlYktpdFRlc3RSdW5uZXIpL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtIFwKKyAgICAkKFdlYkNvcmVTY3JpcHRz
KS9JRExQYXJzZXIucG0gXAorICAgICQoV2ViQ29yZVNjcmlwdHMpL0lETFN0cnVjdHVyZS5wbSBc
CisgICAgJChXZWJDb3JlU2NyaXB0cykvZ2VuZXJhdGUtYmluZGluZ3MucGwgXAorIworCisuUEhP
TlkgOiBhbGwKKworSlMlLmggSlMlLmNwcCA6ICUuaWRsICQoU0NSSVBUUykKKwlAZWNobyBHZW5l
cmF0aW5nIGJpbmRpbmdzIGZvciAkKi4uLgorCUBwZXJsIC1JICQoV2ViQ29yZVNjcmlwdHMpIC1J
ICQoV2ViS2l0VGVzdFJ1bm5lcikvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MgJChXZWJDb3JlU2Ny
aXB0cykvZ2VuZXJhdGUtYmluZGluZ3MucGwgLS1kZWZpbmVzICIiIC0taW5jbHVkZSBJbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncyAtLW91dHB1dERpciAuIC0tZ2VuZXJhdG9yIFRlc3RSdW5uZXIgJDwK
KworYWxsIDogXAorICAgICQoSU5URVJGQUNFUzolPUpTJS5oKSBcCisgICAgJChJTlRFUkZBQ0VT
OiU9SlMlLmNwcCkgXAorIwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25m
aWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gNjM2MzAp
CisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNj
b25maWcJKHdvcmtpbmcgY29weSkKQEAgLTY2LDMgKzY2LDYgQEAgU0RLUk9PVF8xMDYwXzEwNTAg
PSBtYWNvc3gxMC41OwogU0RLUk9PVF8xMDcwXzEwNDAgPSBtYWNvc3gxMC40OwogU0RLUk9PVF8x
MDcwXzEwNTAgPSBtYWNvc3gxMC41OwogU0RLUk9PVF8xMDcwXzEwNjAgPSBtYWNvc3gxMC42Owor
CitXRUJLSVRfVU1CUkVMTEFfRlJBTUVXT1JLU19ESVIgPSAkKE5FWFRfUk9PVCkkKFNZU1RFTV9M
SUJSQVJZX0RJUikvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3
b3JrczsKK1dFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUiA9ICQoV0VCS0lUX1VNQlJFTExBX0ZS
QU1FV09SS1NfRElSKS9XZWJDb3JlLmZyYW1ld29yay9Qcml2YXRlSGVhZGVyczsKSW5kZXg6IFdl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhj
Y29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmln
dXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCShyZXZpc2lvbiA2MzYzMCkKKysrIFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29u
ZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwzICszOCw1IEBAIE1BQ09TWF9ERVBMT1lNRU5UX1RB
UkdFVF8xMDQwID0gMTAuNDsKIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDUwID0gMTAuNTsK
IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDYwID0gMTAuNjsKIE1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVF8xMDcwID0gMTAuNzsKKworV0VCS0lUX1VNQlJFTExBX0ZSQU1FV09SS1NfRElSID0g
JChCVUlMVF9QUk9EVUNUU19ESVIpOwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9Gb3J3YXJkaW5nSGVhZGVycy93dGYvR2V0UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9Gb3J3YXJkaW5nSGVhZGVycy93dGYvR2V0UHRyLmgJKHJldmlz
aW9uIDApCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9HZXRQdHIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0dldFB0ci5oPgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
LmNwcAkocmV2aXNpb24gNjM2MzApCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Niw3ICsxNDYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiB7CiAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPmludmFsaWRhdGVX
YWl0VG9EdW1wV2F0Y2hkb2coKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVtcEFzVGV4dCgpKSB7CisgICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wQXNUZXh0
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgZHVtcGluZyBzdWJmcmFtZXMgd2hlbiBs
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSBpcyB0cnVlLgog
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5uZXJUZXh0KEFkb3B0V0ssIFdLQnVu
ZGxlRnJhbWVDb3B5SW5uZXJUZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpKSk7
CiAgICAgICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiB1dGY4SW5uZXJUZXh0ID0gV0tTdHJpbmdU
b1VURjgoaW5uZXJUZXh0LmdldCgpKTsKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6YWRkTWVzc2FnZVRvQ29uCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
ZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiB7Ci0gICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVtcFN0YXR1
c0NhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRl
c3RDb250cm9sbGVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IHV0ZjhTdGF0dXNiYXJUZXh0ID0gV0tT
dHJpbmdUb1VURjgoc3RhdHVzYmFyVGV4dCk7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNjM2MzApCisrKyBXZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsOSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKKwogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5q
ZWN0ZWRCdW5kbGVQYWdlLmgiCi0KKyNpbmNsdWRlICJKU0xheW91dFRlc3RDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJL
aXQyL1dLQnVuZGxlRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CkBA
IC01NCw2ICs1NSwxMSBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9s
CiB7CiB9CiAKK0pTQ2xhc3NSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndyYXBwZXJDbGFzcygp
Cit7CisgICAgcmV0dXJuIEpTTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheW91dFRlc3RDb250cm9s
bGVyQ2xhc3MoKTsKK30KKwogLy8gVGhpcyBpcyBsb3dlciB0aGFuIER1bXBSZW5kZXJUcmVlJ3Mg
dGltZW91dCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gd29yayB0aHJvdWdoIHRoZSBmYWlsdXJlcwog
Ly8gRXZlbnR1YWxseSBpdCBzaG91bGQgYmUgY2hhbmdlZCB0byBtYXRjaC4KIHN0YXRpYyBjb25z
dCBDRlRpbWVJbnRlcnZhbCB3YWl0VG9EdW1wV2F0Y2hkb2dJbnRlcnZhbCA9IDYuMDsKQEAgLTc2
LDcgKzgyLDcgQEAgc3RhdGljIHZvaWQgd2FpdFVudGlsRG9uZVdhdGNoZG9nRmlyZWQoQwogICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT53YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdhaXRUb0R1bXAoKQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFVudGlsRG9u
ZSgpCiB7CiAgICAgbV93YWl0VG9EdW1wID0gdHJ1ZTsKICAgICBpZiAoIW1fd2FpdFRvRHVtcFdh
dGNoZG9nKSB7CkBAIC0xMTgsMTMxICsxMjQsMTIgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpbwogICAgIHJldHVybiBXS0J1bmRsZUZyYW1lUGF1c2VBbmltYXRpb25P
bkVsZW1lbnRXaXRoSWQobWFpbkZyYW1lLCBuYW1lV0suZ2V0KCksIGlkV0suZ2V0KCksIHRpbWUp
OwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBkaXNwbGF5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIC8vIEhhcyBtYWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9u
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
Y29udHJvbGxlci0+ZGlzcGxheSgpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQXNUZXh0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldER1bXBBc1RleHQodHJ1
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBkdW1wU3RhdHVzQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldER1bXBTdGF0dXNDYWxsYmFja3ModHJ1ZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMg
SlNWYWx1ZVJlZiB3YWl0VW50aWxEb25lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwotICAgIGNvbnRyb2xsZXItPnNldFdhaXRUb0R1bXAoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG5vdGlmeURvbmVD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+bm90aWZ5
RG9uZSgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQot
c3RhdGljIEpTVmFsdWVSZWYgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50KQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdW1iZXIoY29udGV4dCwgY29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCAhPSAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYW5pbWF0aW9uTmFtZShBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikp
OwotICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0gICAgZG91YmxlIHRpbWUgPSBKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGVsZW1lbnRJZChBZG9wdCwg
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwot
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Ci0KLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsIGNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKGFuaW1h
dGlvbk5hbWUuZ2V0KCksIHRpbWUsIGVsZW1lbnRJZC5nZXQoKSkpOwotfQotCi1zdGF0aWMgSlNW
YWx1ZVJlZiByZXBhaW50U3dlZXBIb3Jpem9udGFsbHlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+c2V0VGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxs
eSgpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgdGVzdFJlcGFpbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7Ci0gICAgY29udHJvbGxlci0+c2V0VGVzdFJlcGFpbnQoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLS8vIE9iamVjdCBGaW5hbGl6YXRpb24KLQot
c3RhdGljIHZvaWQgbGF5b3V0VGVzdENvbnRyb2xsZXJPYmplY3RGaW5hbGl6ZShKU09iamVjdFJl
ZiBvYmplY3QpCi17Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0
aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3Qp
KTsKLSAgICBjb250cm9sbGVyLT5kZXJlZigpOwotfQotCiAvLyBPYmplY3QgQ3JlYXRpb24KIAog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxheW91dFRlc3RDb250b2xsZXJTdHIo
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsYXlvdXRUZXN0Q29udHJvbGxl
ciIpKTsKLSAgICByZWYoKTsKLQotICAgIEpTQ2xhc3NSZWYgY2xhc3NSZWYgPSBnZXRKU0NsYXNz
KCk7Ci0gICAgSlNWYWx1ZVJlZiBsYXlvdXRUZXN0Q29udG9sbGVyT2JqZWN0ID0gSlNPYmplY3RN
YWtlKGNvbnRleHQsIGNsYXNzUmVmLCB0aGlzKTsKLSAgICBKU0NsYXNzUmVsZWFzZShjbGFzc1Jl
Zik7Ci0KLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgbGF5
b3V0VGVzdENvbnRvbGxlclN0ci5nZXQoKSwgbGF5b3V0VGVzdENvbnRvbGxlck9iamVjdCwga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSwgZXhjZXB0aW9uKTsKLX0KLQotSlNDbGFzc1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z2V0
SlNDbGFzcygpCi17Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9u
cyA9IExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKTsKLSAgICBzdGF0aWMg
SlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJMYXlvdXRUZXN0Q29udHJvbGxlciIsIDAsIDAsIHN0YXRpY0Z1bmN0
aW9ucywKLSAgICAgICAgMCwgbGF5b3V0VGVzdENvbnRyb2xsZXJPYmplY3RGaW5hbGl6ZSwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotICAgIH07Ci0KLSAgICByZXR1cm4gSlNDbGFzc0NyZWF0
ZSgmY2xhc3NEZWZpbml0aW9uKTsKLX0KLQotSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCi17Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rp
b24gc3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgImRpc3BsYXkiLCBkaXNwbGF5Q2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVtcEFzVGV4dCIsIGR1bXBBc1RleHRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAotICAgICAgICB7ICJkdW1wU3RhdHVzQ2FsbGJhY2tzIiwgZHVtcFN0YXR1c0Nh
bGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgIm5vdGlmeURvbmUiLCBub3RpZnlE
b25lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAibnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
IiwgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAi
cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQiLCBwYXVzZUFuaW1hdGlvbkF0VGlt
ZU9uRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInJlcGFpbnRTd2Vl
cEhvcml6b250YWxseSIsIHJlcGFpbnRTd2VlcEhvcml6b250YWxseUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgInRlc3RSZXBhaW50IiwgdGVzdFJlcGFpbnRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJ3YWl0VW50aWxEb25lIiwgd2FpdFVudGlsRG9uZUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgICAgIHsgMCwgMCwgMCB9Ci0gICAgfTsKLQotICAgIHJldHVybiBzdGF0aWNGdW5jdGlv
bnM7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIGxheW91
dFRlc3RDb250b2xsZXJTdHIuZ2V0KCksIEpTV3JhcHBlcjo6d3JhcChjb250ZXh0LCB0aGlzKSwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSwgZXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA2MzYzMCkKKysrIFdlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNDAgKzI2LDQzIEBACiAjaWZuZGVmIExheW91dFRlc3RD
b250cm9sbGVyX2gKICNkZWZpbmUgTGF5b3V0VGVzdENvbnRyb2xsZXJfaAogCisjaW5jbHVkZSAi
SlNXcmFwcGFibGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiBuYW1l
c3BhY2UgV1RSIHsKIAotY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXlvdXRUZXN0Q29udHJvbGxlcj4geworY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXIg
OiBwdWJsaWMgSlNXcmFwcGFibGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eW91dFRlc3RDb250cm9sbGVyPiBjcmVhdGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JV
UkwpOwogICAgIH5MYXlvdXRUZXN0Q29udHJvbGxlcigpOwogCisgICAgLy8gSlNXcmFwcGFibGUK
KyAgICBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpOworCiAgICAgdm9pZCBtYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CiAKLSAgICBib29sIGR1bXBBc1RleHQoKSBjb25zdCB7IHJldHVy
biBtX2R1bXBBc1RleHQ7IH0KLSAgICB2b2lkIHNldER1bXBBc1RleHQoYm9vbCBkdW1wQXNUZXh0
KSB7IG1fZHVtcEFzVGV4dCA9IGR1bXBBc1RleHQ7IH0KKyAgICBib29sIHNob3VsZER1bXBBc1Rl
eHQoKSBjb25zdCB7IHJldHVybiBtX2R1bXBBc1RleHQ7IH0KKyAgICB2b2lkIGR1bXBBc1RleHQo
KSB7IG1fZHVtcEFzVGV4dCA9IHRydWU7IH0KIAotICAgIGJvb2wgZHVtcFN0YXR1c0NhbGxiYWNr
cygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0
RHVtcFN0YXR1c0NhbGxiYWNrcyhib29sIGR1bXBTdGF0dXNDYWxsYmFja3MpIHsgbV9kdW1wU3Rh
dHVzQ2FsbGJhY2tzID0gZHVtcFN0YXR1c0NhbGxiYWNrczsgfQorICAgIGJvb2wgc2hvdWxkRHVt
cFN0YXR1c0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsg
fQorICAgIHZvaWQgZHVtcFN0YXR1c0NhbGxiYWNrcygpIHsgbV9kdW1wU3RhdHVzQ2FsbGJhY2tz
ID0gdHJ1ZTsgfQogCiAgICAgYm9vbCB3YWl0VG9EdW1wKCkgY29uc3QgeyByZXR1cm4gbV93YWl0
VG9EdW1wOyB9Ci0gICAgdm9pZCBzZXRXYWl0VG9EdW1wKCk7CiAgICAgdm9pZCB3YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNo
ZG9nKCk7CisgICAgdm9pZCB3YWl0VW50aWxEb25lKCk7CiAgICAgdm9pZCBub3RpZnlEb25lKCk7
CisKKyAgICB2b2lkIHRlc3RSZXBhaW50KCkgeyBtX3Rlc3RSZXBhaW50ID0gdHJ1ZTsgfQorICAg
IHZvaWQgcmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KCkgeyBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jp
em9udGFsbHkgPSB0cnVlOyB9CiAgICAgdm9pZCBkaXNwbGF5KCk7CiAKICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdDsKICAgICBib29sIHBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpOwogCi0gICAgdm9pZCBzZXRUZXN0UmVwYWludCgp
IHsgbV90ZXN0UmVwYWludCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFRlc3RSZXBhaW50U3dlZXBI
b3Jpem9udGFsbHkoKSB7IG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseSA9IHRydWU7IH0K
LQogcHJpdmF0ZToKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBzdGQ6OnN0cmluZyYg
dGVzdFBhdGhPclVSTCk7CiAKQEAgLTY5LDE0ICs3Miw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3Rlc3RSZXBhaW50OwogICAgIGJvb2wgbV90ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5Owog
Ci0KICAgICBzdGQ6OnN0cmluZyBtX3Rlc3RQYXRoT3JVUkw7CiAgICAgCiAgICAgUmV0YWluUHRy
PENGUnVuTG9vcFRpbWVyUmVmPiBtX3dhaXRUb0R1bXBXYXRjaGRvZzsKLQotICAgIHN0YXRpYyBK
U0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKLSAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSogc3RhdGlj
VmFsdWVzKCk7Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9ucygp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvQ29kZUdlbmVyYXRvclRlc3RSdW5uZXIucG0JKHJldmlzaW9uIDApCisrKyBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVH
ZW5lcmF0b3JUZXN0UnVubmVyLnBtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0MyBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu
aW5nczsKK3VzZSBGaWxlOjpTcGVjOworCitwYWNrYWdlIENvZGVHZW5lcmF0b3JUZXN0UnVubmVy
OworCitzdWIgbmV3Cit7CisgICAgbXkgKCRjbGFzcywgJGNvZGVHZW5lcmF0b3IsICRvdXRwdXRE
aXIpID0gQF87CisKKyAgICBteSAkcmVmZXJlbmNlID0geworICAgICAgICBjb2RlR2VuZXJhdG9y
ID0+ICRjb2RlR2VuZXJhdG9yLAorICAgICAgICBvdXRwdXREaXIgPT4gJG91dHB1dERpciwKKyAg
ICB9OworCisgICAgYmxlc3MoJHJlZmVyZW5jZSwgJGNsYXNzKTsKKyAgICByZXR1cm4gJHJlZmVy
ZW5jZTsKK30KKworc3ViIEdlbmVyYXRlTW9kdWxlCit7Cit9CisKK3N1YiBHZW5lcmF0ZUludGVy
ZmFjZQoreworICAgIG15ICgkc2VsZiwgJGludGVyZmFjZSwgJGRlZmluZXMpID0gQF87CisKKyAg
ICBmb3JlYWNoIG15ICRmaWxlICgkc2VsZi0+X2dlbmVyYXRlSGVhZGVyRmlsZSgkaW50ZXJmYWNl
KSwgJHNlbGYtPl9nZW5lcmF0ZUltcGxlbWVudGF0aW9uRmlsZSgkaW50ZXJmYWNlKSkgeworICAg
ICAgICBvcGVuKEZJTEUsICI+IiwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkJHNlbGZ7b3V0cHV0RGly
fSwgJCRmaWxle25hbWV9KSkgb3IgZGllICJGYWlsZWQgdG8gb3BlbiAkJGZpbGV7bmFtZX0gZm9y
IHdyaXRpbmc6ICQhIjsKKyAgICAgICAgcHJpbnQgRklMRSBAeyQkZmlsZXtjb250ZW50c319Owor
ICAgICAgICBjbG9zZShGSUxFKSBvciBkaWUgIkZhaWxlZCB0byBjbG9zZSAkJGZpbGV7bmFtZX0g
YWZ0ZXIgd3JpdGluZzogJCEiOworICAgIH0KK30KKworc3ViIGZpbmlzaAoreworfQorCitzdWIg
X2NsYXNzTmFtZQoreworICAgIG15ICgkaWRsVHlwZSkgPSBAXzsKKworICAgIHJldHVybiAiSlMi
IC4gX2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lKCRpZGxUeXBlKTsKK30KKworc3ViIF9jbGFzc1Jl
ZkdldHRlcgoreworICAgIG15ICgkc2VsZiwgJGlkbFR5cGUpID0gQF87CisgICAgcmV0dXJuICQk
c2VsZntjb2RlR2VuZXJhdG9yfS0+V0tfbGNmaXJzdChfaW1wbGVtZW50YXRpb25DbGFzc05hbWUo
JGlkbFR5cGUpKSAuICJDbGFzcyI7Cit9CisKK3N1YiBfZmlsZUhlYWRlclN0cmluZworeworICAg
IG15ICgkZmlsZW5hbWUpID0gQF87CisKKyAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHVsbCBoZWFk
ZXIgb3V0IG9mIHRoZSBJREwgZmlsZSB0byBnZXQgdGhlIGNvcHlyaWdodAorICAgICMgeWVhcihz
KSByaWdodC4KKyAgICByZXR1cm4gPDxFT0Y7CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK0VPRgorfQorCitzdWIgX2dl
bmVyYXRlSGVhZGVyRmlsZQoreworICAgIG15ICgkc2VsZiwgJGludGVyZmFjZSkgPSBAXzsKKwor
ICAgIG15IEBjb250ZW50cyA9ICgpOworCisgICAgbXkgJGlkbFR5cGUgPSAkaW50ZXJmYWNlLT5u
YW1lOworICAgIG15ICRjbGFzc05hbWUgPSBfY2xhc3NOYW1lKCRpZGxUeXBlKTsKKyAgICBteSAk
aW1wbGVtZW50YXRpb25DbGFzc05hbWUgPSBfaW1wbGVtZW50YXRpb25DbGFzc05hbWUoJGlkbFR5
cGUpOworICAgIG15ICRmaWxlbmFtZSA9ICRjbGFzc05hbWUgLiAiLmgiOworCisgICAgcHVzaChA
Y29udGVudHMsIF9maWxlSGVhZGVyU3RyaW5nKCRmaWxlbmFtZSkpOworCisgICAgbXkgJHBhcmVu
dENsYXNzTmFtZSA9IF9wYXJlbnRDbGFzc05hbWUoJGludGVyZmFjZSk7CisKKyAgICBwdXNoKEBj
b250ZW50cywgPDxFT0YpOworCisjaWZuZGVmICR7Y2xhc3NOYW1lfV9oCisjZGVmaW5lICR7Y2xh
c3NOYW1lfV9oCisKKyNpbmNsdWRlICIke3BhcmVudENsYXNzTmFtZX0uaCIKK0VPRgorICAgIHB1
c2goQGNvbnRlbnRzLCA8PEVPRik7CisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyAke2ltcGxl
bWVudGF0aW9uQ2xhc3NOYW1lfTsKKworY2xhc3MgJHtjbGFzc05hbWV9IDogcHVibGljICR7cGFy
ZW50Q2xhc3NOYW1lfSB7CitwdWJsaWM6CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgQHtbJHNlbGYt
Pl9jbGFzc1JlZkdldHRlcigkaWRsVHlwZSldfSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBj
b25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKKyAgICBzdGF0aWMgY29u
c3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWVzKCk7CitFT0YKKworICAgIGlmIChteSBAZnVu
Y3Rpb25zID0gQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgIHB1c2goQGNvbnRl
bnRzLCAiXG4gICAgLy8gRnVuY3Rpb25zXG5cbiIpOworICAgICAgICBmb3JlYWNoIG15ICRmdW5j
dGlvbiAoQGZ1bmN0aW9ucykgeworICAgICAgICAgICAgcHVzaChAY29udGVudHMsICIgICAgc3Rh
dGljIEpTVmFsdWVSZWYgQHtbJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWVdfShKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10s
IEpTVmFsdWVSZWYqKTtcbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG15IEBhdHRy
aWJ1dGVzID0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBwdXNoKEBjb250
ZW50cywgIlxuICAgIC8vIEF0dHJpYnV0ZXNcblxuIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGF0
dHJpYnV0ZSAoQGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHB1c2goQGNvbnRlbnRzLCAiICAg
IHN0YXRpYyBKU1ZhbHVlUmVmIEB7WyRzZWxmLT5fZ2V0dGVyTmFtZSgkYXR0cmlidXRlKV19KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKik7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGNvbnRlbnRzLCAiICAgIHN0YXRpYyBib29sIEB7WyRzZWxmLT5f
c2V0dGVyTmFtZSgkYXR0cmlidXRlKV19KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTU3Ry
aW5nUmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKik7XG4iKSB1bmxlc3MgJGF0dHJpYnV0ZS0+
dHlwZSA9fiAvXnJlYWRvbmx5LzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1c2goQGNvbnRl
bnRzLCA8PEVPRik7Cit9OworICAgIAorJHtpbXBsZW1lbnRhdGlvbkNsYXNzTmFtZX0qIHRvJHtp
bXBsZW1lbnRhdGlvbkNsYXNzTmFtZX0oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RSCisKKyNlbmRpZiAvLyAke2NsYXNzTmFtZX1faAorRU9GCisKKyAgICBy
ZXR1cm4geyBuYW1lID0+ICRmaWxlbmFtZSwgY29udGVudHMgPT4gXEBjb250ZW50cyB9OworfQor
CitzdWIgX2dlbmVyYXRlSW1wbGVtZW50YXRpb25GaWxlCit7CisgICAgbXkgKCRzZWxmLCAkaW50
ZXJmYWNlKSA9IEBfOworCisgICAgbXkgQGNvbnRlbnRzUHJlZml4ID0gKCk7CisgICAgbXkgJWNv
bnRlbnRzSW5jbHVkZXMgPSAoKTsKKyAgICBteSBAY29udGVudHMgPSAoKTsKKworICAgIG15ICRp
ZGxUeXBlID0gJGludGVyZmFjZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0gX2NsYXNzTmFt
ZSgkaWRsVHlwZSk7CisgICAgbXkgJGltcGxlbWVudGF0aW9uQ2xhc3NOYW1lID0gX2ltcGxlbWVu
dGF0aW9uQ2xhc3NOYW1lKCRpZGxUeXBlKTsKKyAgICBteSAkZmlsZW5hbWUgPSAkY2xhc3NOYW1l
IC4gIi5jcHAiOworCisgICAgcHVzaChAY29udGVudHNQcmVmaXgsIF9maWxlSGVhZGVyU3RyaW5n
KCRmaWxlbmFtZSkpOworCisgICAgbXkgJGNsYXNzUmVmR2V0dGVyID0gJHNlbGYtPl9jbGFzc1Jl
ZkdldHRlcigkaWRsVHlwZSk7CisgICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IF9wYXJlbnRDbGFz
c05hbWUoJGludGVyZmFjZSk7CisKKyAgICAkY29udGVudHNJbmNsdWRlc3siJHtjbGFzc05hbWV9
LmgifSA9IDE7CisgICAgJGNvbnRlbnRzSW5jbHVkZXN7IiR7aW1wbGVtZW50YXRpb25DbGFzc05h
bWV9LmgifSA9IDE7CisKKyAgICBwdXNoKEBjb250ZW50c1ByZWZpeCwgPDxFT0YpOworCitFT0YK
KworICAgIHB1c2goQGNvbnRlbnRzLCA8PEVPRik7CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK25hbWVzcGFjZSBXVFIg
eworCiske2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfSogdG8ke2ltcGxlbWVudGF0aW9uQ2xhc3NO
YW1lfShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAo
IWNvbnRleHQgfHwgIXZhbHVlIHx8ICEke2NsYXNzTmFtZX06OiR7Y2xhc3NSZWZHZXR0ZXJ9KCkg
fHwgIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY29udGV4dCwgdmFsdWUsICR7Y2xhc3NOYW1lfTo6
JHtjbGFzc1JlZkdldHRlcn0oKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDwke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfSo+KEpTV3JhcHBlcjo6dW53cmFwKGNv
bnRleHQsIHZhbHVlKSk7Cit9CisKK0pTQ2xhc3NSZWYgJHtjbGFzc05hbWV9Ojoke2NsYXNzUmVm
R2V0dGVyfSgpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNDbGFzczsKKyAgICBpZiAoIWpz
Q2xhc3MpIHsKKyAgICAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNz
RGVmaW5pdGlvbkVtcHR5OworICAgICAgICBkZWZpbml0aW9uLmNsYXNzTmFtZSA9ICIke2lkbFR5
cGV9IjsKKyAgICAgICAgZGVmaW5pdGlvbi5wYXJlbnRDbGFzcyA9IEB7WyRzZWxmLT5fcGFyZW50
Q2xhc3NSZWZHZXR0ZXJFeHByZXNzaW9uKCRpbnRlcmZhY2UpXX07CisgICAgICAgIGRlZmluaXRp
b24uc3RhdGljVmFsdWVzID0gc3RhdGljVmFsdWVzKCk7CisgICAgICAgIGRlZmluaXRpb24uc3Rh
dGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zKCk7CitFT0YKKworICAgIHB1c2goQGNvbnRl
bnRzLCAiICAgICAgICBkZWZpbml0aW9uLmluaXRpYWxpemUgPSBpbml0aWFsaXplO1xuIikgdW5s
ZXNzIF9wYXJlbnRJbnRlcmZhY2UoJGludGVyZmFjZSk7CisgICAgcHVzaChAY29udGVudHMsICIg
ICAgICAgIGRlZmluaXRpb24uZmluYWxpemUgPSBmaW5hbGl6ZTtcbiIpIHVubGVzcyBfcGFyZW50
SW50ZXJmYWNlKCRpbnRlcmZhY2UpOworCisgICAgcHVzaChAY29udGVudHMsIDw8RU9GKTsKKyAg
ICAgICAganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOworICAgIH0KKyAgICBy
ZXR1cm4ganNDbGFzczsKK30KKworRU9GCisKKyAgICBwdXNoKEBjb250ZW50cywgJHNlbGYtPl9z
dGF0aWNGdW5jdGlvbnNHZXR0ZXJJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlKSwgIlxuIik7Cisg
ICAgcHVzaChAY29udGVudHMsICRzZWxmLT5fc3RhdGljVmFsdWVzR2V0dGVySW1wbGVtZW50YXRp
b24oJGludGVyZmFjZSkpOworCisgICAgaWYgKG15IEBmdW5jdGlvbnMgPSBAeyRpbnRlcmZhY2Ut
PmZ1bmN0aW9uc30pIHsKKyAgICAgICAgcHVzaChAY29udGVudHMsICJcbi8vIEZ1bmN0aW9uc1xu
Iik7CisKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKKyAgICAg
ICAgICAgIHB1c2goQGNvbnRlbnRzLCA8PEVPRik7CisKK0pTVmFsdWVSZWYgJHtjbGFzc05hbWV9
OjpAe1skZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZV19KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICAke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfSogaW1wbCA9IHRvJHtpbXBsZW1lbnRhdGlv
bkNsYXNzTmFtZX0oY29udGV4dCwgdGhpc09iamVjdCk7CisgICAgaWYgKCFpbXBsKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CitFT0YKKyAgICAgICAgICAg
IG15IEBwYXJhbWV0ZXJzID0gKCk7CisgICAgICAgICAgICBteSBAc3BlY2lmaWVkUGFyYW1ldGVy
cyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKworICAgICAgICAgICAgcHVzaChAY29udGVu
dHMsICJcbiIpIGlmIHNjYWxhciBAc3BlY2lmaWVkUGFyYW1ldGVyczsKKworICAgICAgICAgICAg
JHNlbGYtPl9pbmNsdWRlSGVhZGVycyhcJWNvbnRlbnRzSW5jbHVkZXMsICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlLCAkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CisKKyAgICAgICAgICAgIGZvcmVh
Y2ggbXkgJGkgKDAuLiQjc3BlY2lmaWVkUGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgIG15
ICRwYXJhbWV0ZXIgPSAkc3BlY2lmaWVkUGFyYW1ldGVyc1skaV07CisKKyAgICAgICAgICAgICAg
ICAkc2VsZi0+X2luY2x1ZGVIZWFkZXJzKFwlY29udGVudHNJbmNsdWRlcywgJGlkbFR5cGUsICRw
YXJhbWV0ZXIpOworCisgICAgICAgICAgICAgICAgcHVzaChAY29udGVudHMsICIgICAgIiAuICRz
ZWxmLT5fcGxhdGZvcm1UeXBlVmFyaWFibGVEZWNsYXJhdGlvbigkcGFyYW1ldGVyLCAkcGFyYW1l
dGVyLT5uYW1lLCAiYXJndW1lbnRzWyRpXSIsICJhcmd1bWVudENvdW50ID4gJGkiKSAuICJcbiIp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHB1c2goQHBhcmFtZXRlcnMsICRz
ZWxmLT5fcGFyYW10ZXJFeHByZXNzaW9uKCRwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbXkgJGlzVm9pZFJldHVybiA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBl
IGVxICJ2b2lkIjsKKyAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAiaW1wbC0+IiAuICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uQ2FsbCA9
ICRmdW5jdGlvbk5hbWUgLiAiKCIgLiBqb2luKCIsICIsIEBwYXJhbWV0ZXJzKSAuICIpIjsKKwor
ICAgICAgICAgICAgcHVzaChAY29udGVudHMsICJcbiIpIHVubGVzcyBzY2FsYXIgQHNwZWNpZmll
ZFBhcmFtZXRlcnMgPT0gMTsKKyAgICAgICAgICAgIHB1c2goQGNvbnRlbnRzLCAiICAgICR7ZnVu
Y3Rpb25DYWxsfTtcblxuIikgaWYgJGlzVm9pZFJldHVybjsKKyAgICAgICAgICAgIHB1c2goQGNv
bnRlbnRzLCAiICAgIHJldHVybiAiIC4gJHNlbGYtPl9yZXR1cm5FeHByZXNzaW9uKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLCAkZnVuY3Rpb25DYWxsKSAuICI7XG59XG4iKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChteSBAYXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30p
IHsKKyAgICAgICAgcHVzaChAY29udGVudHMsICJcbi8vIEF0dHJpYnV0ZXNcbiIpOworICAgICAg
ICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICAkc2Vs
Zi0+X2luY2x1ZGVIZWFkZXJzKFwlY29udGVudHNJbmNsdWRlcywgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlLCAkYXR0cmlidXRlLT5zaWduYXR1cmUpOworCisgICAgICAgICAgICBteSAkZ2V0
dGVyTmFtZSA9ICRzZWxmLT5fZ2V0dGVyTmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIG15
ICRnZXR0ZXJFeHByZXNzaW9uID0gImltcGwtPiR7Z2V0dGVyTmFtZX0oKSI7CisKKyAgICAgICAg
ICAgIHB1c2goQGNvbnRlbnRzLCA8PEVPRik7CisKK0pTVmFsdWVSZWYgJHtjbGFzc05hbWV9Ojok
e2dldHRlck5hbWV9KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpT
U3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgJHtpbXBsZW1lbnRhdGlv
bkNsYXNzTmFtZX0qIGltcGwgPSB0byR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KGNvbnRleHQs
IG9iamVjdCk7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisKKyAgICByZXR1cm4gQHtbJHNlbGYtPl9yZXR1cm5FeHByZXNzaW9u
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJGdldHRlckV4cHJlc3Npb24pXX07Cit9CitFT0YKKwor
ICAgICAgICAgICAgdW5sZXNzICgkYXR0cmlidXRlLT50eXBlID1+IC9ecmVhZG9ubHkvKSB7Cisg
ICAgICAgICAgICAgICAgcHVzaChAY29udGVudHMsIDw8RU9GKTsKKworYm9vbCAke2NsYXNzTmFt
ZX06OkB7WyRzZWxmLT5fc2V0dGVyTmFtZSgkYXR0cmlidXRlKV19KEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmIHZhbHVlLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgJHtpbXBsZW1lbnRhdGlvbkNsYXNzTmFtZX0q
IGltcGwgPSB0byR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KGNvbnRleHQsIG9iamVjdCk7Cisg
ICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKK0VPRgorCisgICAgICAgICAg
ICAgICAgbXkgJHBsYXRmb3JtVmFsdWUgPSAkc2VsZi0+X3BsYXRmb3JtVHlwZUNvbnN0cnVjdG9y
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIik7CisKKyAgICAgICAgICAgICAgICBwdXNo
KEBjb250ZW50cywgPDxFT0YpOworICAgIGltcGwtPkB7WyRzZWxmLT5fc2V0dGVyTmFtZSgkYXR0
cmlidXRlKV19KCR7cGxhdGZvcm1WYWx1ZX0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CitFT0YK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1c2goQGNvbnRlbnRzLCA8
PEVPRik7CisKK30gLy8gbmFtZXNwYWNlIFdUUgorCitFT0YKKworICAgIHVuc2hpZnQoQGNvbnRl
bnRzLCBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0gc29ydCBrZXlzKCVjb250ZW50c0luY2x1
ZGVzKSk7CisgICAgdW5zaGlmdChAY29udGVudHMsIEBjb250ZW50c1ByZWZpeCk7CisKKyAgICBy
ZXR1cm4geyBuYW1lID0+ICRmaWxlbmFtZSwgY29udGVudHMgPT4gXEBjb250ZW50cyB9OworfQor
CitzdWIgX2dldHRlck5hbWUKK3sKKyAgICBteSAoJHNlbGYsICRhdHRyaWJ1dGUpID0gQF87CisK
KyAgICBteSAkc2lnbmF0dXJlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlOworICAgIG15ICRuYW1l
ID0gJHNpZ25hdHVyZS0+bmFtZTsKKworICAgIHJldHVybiAkbmFtZTsKK30KKworc3ViIF9pbmNs
dWRlSGVhZGVycworeworICAgIG15ICgkc2VsZiwgJGhlYWRlcnMsICRpZGxUeXBlLCAkc2lnbmF0
dXJlKSA9IEBfOworCisgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRpZGxUeXBlOworICAgIHJl
dHVybiBpZiAkaWRsVHlwZSBlcSAiYm9vbGVhbiIgb3IgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5J
c05vblBvaW50ZXJUeXBlKCRpZGxUeXBlKTsKKworICAgICQkaGVhZGVyc3tfY2xhc3NOYW1lKCRp
ZGxUeXBlKSAuICIuaCJ9ID0gMTsKKyAgICAkJGhlYWRlcnN7X2ltcGxlbWVudGF0aW9uQ2xhc3NO
YW1lKCRpZGxUeXBlKSAuICIuaCJ9ID0gMTsKK30KKworc3ViIF9pbXBsZW1lbnRhdGlvbkNsYXNz
TmFtZQoreworICAgIG15ICgkaWRsVHlwZSkgPSBAXzsKKworICAgIHJldHVybiAkaWRsVHlwZTsK
K30KKworc3ViIF9tb250aERheVllYXJTdHJpbmcKK3sKKyAgICBteSAodW5kZWYsIHVuZGVmLCB1
bmRlZiwgJGRheSwgJG1vbnRoLCAkeWVhcikgPSBsb2NhbHRpbWUodGltZSk7CisKKyAgICByZXR1
cm4gc3ByaW50ZigiJWQvJWQvJTAyZCIsICRtb250aCArIDEsICRkYXksICR5ZWFyICUgMTAwKTsK
K30KKworc3ViIF9udWxsU3RyaW5nUG9saWN5Cit7CisgICAgbXkgKCRzaWduYXR1cmUpID0gQF87
CisKKyAgICBkaWUgIkJvdGggTnVsbEFzTnVsbFN0cmluZyBhbmQgQ29udmVydE51bGxBbmRVbmRl
ZmluZWRUb1N0cmluZyB3ZXJlIHNwZWNpZmllZCIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnZlcnROdWxsVG9OdWxsU3RyaW5nIn0gJiYgJHNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsQW5kVW5kZWZpbmVkVG9TdHJpbmcifTsKKyAgICBy
ZXR1cm4gIk51bGxBc051bGxTdHJpbmciIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OworICAgIHJldHVybiAiTm9OdWxsU3RyaW5n
IiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxBbmRVbmRl
ZmluZWRUb1N0cmluZyJ9OworICAgIHJldHVybiAiTnVsbEFuZFVuZGVmaW5lZEFzTnVsbFN0cmlu
ZyI7Cit9CisKK3N1YiBfcGFyZW50Q2xhc3NOYW1lCit7CisgICAgbXkgKCRpbnRlcmZhY2UpID0g
QF87CisKKyAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gX3BhcmVudEludGVyZmFjZSgkaW50ZXJm
YWNlKTsKKyAgICByZXR1cm4gJHBhcmVudEludGVyZmFjZSA/IF9jbGFzc05hbWUoJHBhcmVudElu
dGVyZmFjZSkgOiAiSlNXcmFwcGVyIjsKK30KKworc3ViIF9wYXJlbnRDbGFzc1JlZkdldHRlckV4
cHJlc3Npb24KK3sKKyAgICBteSAoJHNlbGYsICRpbnRlcmZhY2UpID0gQF87CisKKyAgICBteSAk
cGFyZW50SW50ZXJmYWNlID0gX3BhcmVudEludGVyZmFjZSgkaW50ZXJmYWNlKTsKKyAgICByZXR1
cm4gJHBhcmVudEludGVyZmFjZSA/ICRzZWxmLT5fY2xhc3NSZWZHZXR0ZXIoJHBhcmVudEludGVy
ZmFjZSkgLiAiKCkiIDogIjAiOworfQorCitzdWIgX3BhcmVudEludGVyZmFjZQoreworICAgIG15
ICgkaW50ZXJmYWNlKSA9IEBfOworICAgIHJldHVybiAkaW50ZXJmYWNlLT5wYXJlbnRzLT5bMF07
Cit9CisKK3N1YiBfcGxhdGZvcm1UeXBlCit7CisgICAgbXkgKCRzZWxmLCAkaWRsVHlwZSwgJHNp
Z25hdHVyZSkgPSBAXzsKKworICAgIHJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkaWRsVHlw
ZTsKKworICAgIHJldHVybiAiYm9vbCIgaWYgJGlkbFR5cGUgZXEgImJvb2xlYW4iOworICAgIHJl
dHVybiAiSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0t
PklzU3RyaW5nVHlwZSgkaWRsVHlwZSk7CisgICAgcmV0dXJuICJkb3VibGUiIGlmICQkc2VsZntj
b2RlR2VuZXJhdG9yfS0+SXNOb25Qb2ludGVyVHlwZSgkaWRsVHlwZSk7CisgICAgcmV0dXJuIF9p
bXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgkaWRsVHlwZSk7Cit9CisKK3N1YiBfcGxhdGZvcm1UeXBl
Q29uc3RydWN0b3IKK3sKKyAgICBteSAoJHNlbGYsICRzaWduYXR1cmUsICRhcmd1bWVudE5hbWUp
ID0gQF87CisKKyAgICBteSAkaWRsVHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7CisgICAgbXkgJG51
bGxTdHJpbmdQb2xpY3kgPSBfbnVsbFN0cmluZ1BvbGljeSgkc2lnbmF0dXJlKTsKKworICAgIHJl
dHVybiAiSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsICRhcmd1bWVudE5hbWUsIDApKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5J
c1N0cmluZ1R5cGUoJGlkbFR5cGUpOworICAgIHJldHVybiAiSlNWYWx1ZVRvQm9vbGVhbihjb250
ZXh0LCAkYXJndW1lbnROYW1lKSIgaWYgJGlkbFR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVy
biAiSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsICRhcmd1bWVudE5hbWUsIDApIiBpZiAkJHNlbGZ7
Y29kZUdlbmVyYXRvcn0tPklzTm9uUG9pbnRlclR5cGUoJGlkbFR5cGUpOworICAgIHJldHVybiAi
dG8iIC4gX2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lKCRpZGxUeXBlKSAuICIoY29udGV4dCwgJGFy
Z3VtZW50TmFtZSkiOworfQorCitzdWIgX3BsYXRmb3JtVHlwZVZhcmlhYmxlRGVjbGFyYXRpb24K
K3sKKyAgICBteSAoJHNlbGYsICRzaWduYXR1cmUsICR2YXJpYWJsZU5hbWUsICRhcmd1bWVudE5h
bWUsICRjb25kaXRpb24pID0gQF87CisKKyAgICBteSAkcGxhdGZvcm1UeXBlID0gJHNlbGYtPl9w
bGF0Zm9ybVR5cGUoJHNpZ25hdHVyZS0+dHlwZSwgJHNpZ25hdHVyZSk7CisgICAgbXkgJGNvbnN0
cnVjdG9yID0gJHNlbGYtPl9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3Rvcigkc2lnbmF0dXJlLCAkYXJn
dW1lbnROYW1lKTsKKworICAgIG15ICVub25Qb2ludGVyVHlwZXMgPSAoCisgICAgICAgICJib29s
IiA9PiAxLAorICAgICAgICAiZG91YmxlIiA9PiAxLAorICAgICAgICAiSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IiA9PiAxLAorICAgICk7CisKKyAgICBteSAkbnVsbFZhbHVlID0gIjAiOworICAg
ICRudWxsVmFsdWUgPSAiJHBsYXRmb3JtVHlwZSgpIiBpZiBkZWZpbmVkICRub25Qb2ludGVyVHlw
ZXN7JHBsYXRmb3JtVHlwZX0gJiYgJHBsYXRmb3JtVHlwZSBuZSAiZG91YmxlIjsKKworICAgICRw
bGF0Zm9ybVR5cGUgLj0gIioiIHVubGVzcyBkZWZpbmVkICRub25Qb2ludGVyVHlwZXN7JHBsYXRm
b3JtVHlwZX07CisKKyAgICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRj
b25kaXRpb24gJiYgJGNvbnN0cnVjdG9yOyIgaWYgJGNvbmRpdGlvbiAmJiAkcGxhdGZvcm1UeXBl
IGVxICJib29sIjsKKyAgICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRj
b25kaXRpb24gPyAkY29uc3RydWN0b3IgOiAkbnVsbFZhbHVlOyIgaWYgJGNvbmRpdGlvbjsKKyAg
ICByZXR1cm4gIiRwbGF0Zm9ybVR5cGUgJHZhcmlhYmxlTmFtZSA9ICRjb25zdHJ1Y3RvcjsiOwor
fQorCitzdWIgX3JldHVybkV4cHJlc3Npb24KK3sKKyAgICBteSAoJHNlbGYsICRzaWduYXR1cmUs
ICRleHByZXNzaW9uKSA9IEBfOworCisgICAgbXkgJGNvbnZlcnROdWxsU3RyaW5nQXR0cmlidXRl
ID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsU3RyaW5nVG8i
fTsKKyAgICBteSAkbnVsbE9yRW1wdHlTdHJpbmcgPSAiTnVsbFN0cmluZ0FzRW1wdHlTdHJpbmci
OworICAgICRudWxsT3JFbXB0eVN0cmluZyA9ICJOdWxsU3RyaW5nQXNOdWxsIiBpZiBkZWZpbmVk
ICRjb252ZXJ0TnVsbFN0cmluZ0F0dHJpYnV0ZSAmJiAkY29udmVydE51bGxTdHJpbmdBdHRyaWJ1
dGUgZXEgIk51bGwiOworCisgICAgbXkgJHJldHVybklETFR5cGUgPSAkc2lnbmF0dXJlLT50eXBl
OworCisgICAgcmV0dXJuICJKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSIgaWYgJHJldHVy
bklETFR5cGUgZXEgInZvaWQiOworICAgIHJldHVybiAiSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRl
eHQsICR7ZXhwcmVzc2lvbn0pIiBpZiAkcmV0dXJuSURMVHlwZSBlcSAiYm9vbGVhbiI7CisgICAg
cmV0dXJuICJKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJCRz
ZWxme2NvZGVHZW5lcmF0b3J9LT5Jc05vblBvaW50ZXJUeXBlKCRyZXR1cm5JRExUeXBlKTsKKyAg
ICByZXR1cm4gInRvSlMoY29udGV4dCwgV1RGOjpnZXRQdHIoJHtleHByZXNzaW9ufSkpIjsKK30K
Kworc3ViIF9wYXJhbXRlckV4cHJlc3Npb24KK3sKKyAgICBteSAoJHNlbGYsICRwYXJhbWV0ZXIp
ID0gQF87CisKKyAgICBteSAkaWRsVHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7CisgICAgbXkgJG5h
bWUgPSAkcGFyYW1ldGVyLT5uYW1lOworCisgICAgcmV0dXJuICIke25hbWV9LmdldCgpIiBpZiAk
JHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkaWRsVHlwZSk7CisgICAgcmV0dXJu
ICRuYW1lOworfQorCitzdWIgX3NldHRlck5hbWUKK3sKKyAgICBteSAoJHNlbGYsICRhdHRyaWJ1
dGUpID0gQF87CisKKyAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsK
KworICAgIHJldHVybiAic2V0IiAuICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+V0tfdWNmaXJzdCgk
bmFtZSk7Cit9CisKK3N1YiBfc3RhdGljRnVuY3Rpb25zR2V0dGVySW1wbGVtZW50YXRpb24KK3sK
KyAgICBteSAoJHNlbGYsICRpbnRlcmZhY2UpID0gQF87CisKKyAgICBteSAkbWFwRnVuY3Rpb24g
PSBzdWIgeworICAgICAgICBteSAkbmFtZSA9ICRfLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAg
IG15IEBhdHRyaWJ1dGVzID0gcXcoa0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkpOworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAia0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSIpIGlmICRfLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJEb250RW51bSJ9OworCisgICAgICAgIHJldHVybiAgInsgXCIkbmFtZVwiLCAk
bmFtZSwgIiAuIGpvaW4oIiB8ICIsIEBhdHRyaWJ1dGVzKSAuICIgfSI7CisgICAgfTsKKworICAg
IHJldHVybiAkc2VsZi0+X3N0YXRpY0Z1bmN0aW9uc09yVmFsdWVzR2V0dGVySW1wbGVtZW50YXRp
b24oJGludGVyZmFjZSwgImZ1bmN0aW9uIiwgInsgMCwgMCwgMCB9IiwgJG1hcEZ1bmN0aW9uLCAk
aW50ZXJmYWNlLT5mdW5jdGlvbnMpOworfQorCitzdWIgX3N0YXRpY0Z1bmN0aW9uc09yVmFsdWVz
R2V0dGVySW1wbGVtZW50YXRpb24KK3sKKyAgICBteSAoJHNlbGYsICRpbnRlcmZhY2UsICRmdW5j
dGlvbk9yVmFsdWUsICRhcnJheVRlcm1pbmF0b3IsICRtYXBGdW5jdGlvbiwgJGZ1bmN0aW9uc09y
QXR0cmlidXRlcykgPSBAXzsKKworICAgIG15ICRjbGFzc05hbWUgPSBfY2xhc3NOYW1lKCRpbnRl
cmZhY2UtPm5hbWUpOworICAgIG15ICR1cHBlcmNhc2VGdW5jdGlvbk9yVmFsdWUgPSAkJHNlbGZ7
Y29kZUdlbmVyYXRvcn0tPldLX3VjZmlyc3QoJGZ1bmN0aW9uT3JWYWx1ZSk7CisKKyAgICBteSAk
cmVzdWx0ID0gPDxFT0Y7Citjb25zdCBKU1N0YXRpYyR7dXBwZXJjYXNlRnVuY3Rpb25PclZhbHVl
fSogJHtjbGFzc05hbWV9OjpzdGF0aWMke3VwcGVyY2FzZUZ1bmN0aW9uT3JWYWx1ZX1zKCkKK3sK
K0VPRgorCisgICAgbXkgQGluaXRpYWxpemVycyA9IG1hcCgmJG1hcEZ1bmN0aW9uLCBAeyRmdW5j
dGlvbnNPckF0dHJpYnV0ZXN9KTsKKyAgICByZXR1cm4gJHJlc3VsdCAuICIgICAgcmV0dXJuIDA7
XG59XG4iIHVubGVzcyBAaW5pdGlhbGl6ZXJzOworCisgICAgJHJlc3VsdCAuPSA8PEVPRgorICAg
IHN0YXRpYyBjb25zdCBKU1N0YXRpYyR7dXBwZXJjYXNlRnVuY3Rpb25PclZhbHVlfSAke2Z1bmN0
aW9uT3JWYWx1ZX1zW10gPSB7CisgICAgICAgIEB7W2pvaW4oIixcbiAgICAgICAgIiwgQGluaXRp
YWxpemVycyldfSwKKyAgICAgICAgJHthcnJheVRlcm1pbmF0b3J9CisgICAgfTsKKyAgICByZXR1
cm4gJHtmdW5jdGlvbk9yVmFsdWV9czsKK30KK0VPRgorfQorCitzdWIgX3N0YXRpY1ZhbHVlc0dl
dHRlckltcGxlbWVudGF0aW9uCit7CisgICAgbXkgKCRzZWxmLCAkaW50ZXJmYWNlKSA9IEBfOwor
CisgICAgbXkgJG1hcEZ1bmN0aW9uID0gc3ViIHsKKyAgICAgICAgcmV0dXJuIGlmICRfLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ltcGxlbWVudGF0aW9uIn07CisKKyAgICAg
ICAgbXkgJGF0dHJpYnV0ZU5hbWUgPSAkXy0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBteSAk
YXR0cmlidXRlSXNSZWFkb25seSA9ICRfLT50eXBlID1+IC9ecmVhZG9ubHkvOworICAgICAgICBt
eSAkZ2V0dGVyTmFtZSA9ICRzZWxmLT5fZ2V0dGVyTmFtZSgkXyk7CisgICAgICAgIG15ICRzZXR0
ZXJOYW1lID0gJGF0dHJpYnV0ZUlzUmVhZG9ubHkgPyAiMCIgOiAkc2VsZi0+X3NldHRlck5hbWUo
JF8pOworICAgICAgICBteSBAYXR0cmlidXRlcyA9IHF3KGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSk7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICJrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IikgaWYgJGF0dHJpYnV0ZUlzUmVhZG9ubHk7CisgICAgICAgIHB1c2goQGF0dHJp
YnV0ZXMsICJrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtIikgaWYgJF8tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvbnRFbnVtIn07CisKKyAgICAgICAgcmV0dXJuICJ7IFwi
JGF0dHJpYnV0ZU5hbWVcIiwgJGdldHRlck5hbWUsICRzZXR0ZXJOYW1lLCAiIC4gam9pbigiIHwg
IiwgQGF0dHJpYnV0ZXMpIC4gIiB9IjsKKyAgICB9OworCisgICAgcmV0dXJuICRzZWxmLT5fc3Rh
dGljRnVuY3Rpb25zT3JWYWx1ZXNHZXR0ZXJJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAidmFs
dWUiLCAieyAwLCAwLCAwLCAwIH0iLCAkbWFwRnVuY3Rpb24sICRpbnRlcmZhY2UtPmF0dHJpYnV0
ZXMpOworfQorCisxOwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSlNXcmFwcGFibGVfaAorI2RlZmluZSBKU1dyYXBwYWJsZV9o
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyBKU1dyYXBwYWJs
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTV3JhcHBhYmxlPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+SlNXcmFwcGFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIEpTQ2xhc3NSZWYgd3JhcHBlckNsYXNz
KCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RSCisKKyNlbmRpZiAvLyBKU1dyYXBwYWJs
ZV9oCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0pTV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9KU1dyYXBwZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIkpTV3JhcHBlci5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
b250ZXh0UmVmUHJpdmF0ZS5oPgorCituYW1lc3BhY2UgV1RSIHsKKworSlNWYWx1ZVJlZiBKU1dy
YXBwZXI6OndyYXAoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTV3JhcHBhYmxlKiBvYmplY3QpCit7
CisgICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKworICAgIGlmICghb2JqZWN0KQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdWxsKGNvbnRleHQpOworCisgICAgSlNDbGFzc1Jl
ZiBvYmplY3RDbGFzcyA9IG9iamVjdC0+d3JhcHBlckNsYXNzKCk7CisgICAgQVNTRVJUKG9iamVj
dENsYXNzKTsKKyAgICBKU09iamVjdFJlZiB3cmFwcGVyT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNv
bnRleHQsIG9iamVjdENsYXNzLCBvYmplY3QpOworICAgIEFTU0VSVCh3cmFwcGVyT2JqZWN0KTsK
KworICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OworfQorCitKU1dyYXBwYWJsZSogSlNXcmFwcGVy
Ojp1bndyYXAoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAg
QVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7CisgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEpTV3JhcHBhYmxlKj4oSlNPYmplY3RHZXRQcml2YXRlKEpTVmFs
dWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCkpKTsKK30KKworc3RhdGljIEpTV3JhcHBhYmxl
KiB1bndyYXBPYmplY3QoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEpTV3JhcHBhYmxlKiB3
cmFwcGFibGUgPSBzdGF0aWNfY2FzdDxKU1dyYXBwYWJsZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShv
YmplY3QpKTsKKyAgICBBU1NFUlQod3JhcHBhYmxlKTsKKyAgICByZXR1cm4gd3JhcHBhYmxlOwor
fQorCit2b2lkIEpTV3JhcHBlcjo6aW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiBvYmplY3QpCit7CisgICAgSlNXcmFwcGFibGUqIHdyYXBwYWJsZSA9IHVud3JhcE9iamVj
dChvYmplY3QpOworICAgIGlmICghd3JhcHBhYmxlKQorICAgICAgICByZXR1cm47CisgICAgd3Jh
cHBhYmxlLT5yZWYoKTsKK30KKwordm9pZCBKU1dyYXBwZXI6OmZpbmFsaXplKEpTT2JqZWN0UmVm
IG9iamVjdCkKK3sKKyAgICBKU1dyYXBwYWJsZSogd3JhcHBhYmxlID0gdW53cmFwT2JqZWN0KG9i
amVjdCk7CisgICAgaWYgKCF3cmFwcGFibGUpCisgICAgICAgIHJldHVybjsKKyAgICB3cmFwcGFi
bGUtPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0pTV3JhcHBlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNXcmFwcGVyX2gKKyNkZWZp
bmUgSlNXcmFwcGVyX2gKKworI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgiCisKK25hbWVzcGFjZSBX
VFIgeworCisvLyBGSVhNRTogSWYgbmVjZXNzYXJ5LCB3ZSBjYW4gZG8gd3JhcHBlciBjYWNoaW5n
IGhlcmUuCitjbGFzcyBKU1dyYXBwZXIgeworcHVibGljOgorICAgIHN0YXRpYyBKU1ZhbHVlUmVm
IHdyYXAoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTV3JhcHBhYmxlKiBvYmplY3QpOworICAgIHN0
YXRpYyBKU1dyYXBwYWJsZSogdW53cmFwKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHZhbHVlKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZik7CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYpOworfTsKKwor
aW5saW5lIEpTVmFsdWVSZWYgdG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNXcmFwcGFibGUq
IGltcGwpCit7CisgICAgcmV0dXJuIEpTV3JhcHBlcjo6d3JhcChjb250ZXh0LCBpbXBsKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RSCisKKyNlbmRpZiAvLyBKU1dyYXBwZXJfaApJbmRleDogV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRU
ZXN0Q29udHJvbGxlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRUZXN0Q29udHJvbGxlci5pZGwJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBXVFIgeworCisgICAgaW50ZXJmYWNlIExheW91
dFRlc3RDb250cm9sbGVyIHsKKyAgICAgICAgdm9pZCBkdW1wQXNUZXh0KCk7CisgICAgICAgIHZv
aWQgZHVtcFN0YXR1c0NhbGxiYWNrcygpOworCisgICAgICAgIHZvaWQgd2FpdFVudGlsRG9uZSgp
OworICAgICAgICB2b2lkIG5vdGlmeURvbmUoKTsKKworICAgICAgICAvLyBSZXBhaW50IHRlc3Rp
bmcKKyAgICAgICAgdm9pZCB0ZXN0UmVwYWludCgpOworICAgICAgICB2b2lkIHJlcGFpbnRTd2Vl
cEhvcml6b250YWxseSgpOworICAgICAgICB2b2lkIGRpc3BsYXkoKTsKKworICAgICAgICAvLyBB
bmltYXRpb24gdGVzdGluZworICAgICAgICBpbnQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7
CisgICAgICAgIGJvb2xlYW4gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoaW4g
RE9NU3RyaW5nIGFuaW1hdGlvbk5hbWUsIGluIGRvdWJsZSB0aW1lLCBpbiBET01TdHJpbmcgZWxl
bWVudElkKTsKKyAgICB9OworCit9CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVy
L1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjM2MzApCisrKyBXZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNiw2ICs2LDIwIEBACiAJb2JqZWN0VmVyc2lvbiA9IDQ1OwogCW9iamVj
dHMgPSB7CiAKKy8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCisJCUJDOTUy
RDc3MTFGM0JGNUQwMDMzOThCNCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQkM5NTJEN0Qx
MUYzQkY2QTAwMzM5OEI0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYQWdncmVn
YXRlVGFyZ2V0ICJEZXJpdmVkIFNvdXJjZXMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJ
QkM5NTJEODIxMUYzQkY3ODAwMzM5OEI0IC8qIEdlbmVyYXRlIERlcml2ZWQgU291cmNlcyAqLywK
KwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJEZXJpdmVkIFNv
dXJjZXMiOworCQkJcHJvZHVjdE5hbWUgPSAiRGVyaXZlZCBTb3VyY2VzIjsKKwkJfTsKKy8qIEVu
ZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLworCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCQk2NTEwQTc4MjExRUM2NDM4MDA0MTA4NjcgLyogQUhFTV9fX18uVFRGIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc3NzEx
RUM2NDM4MDA0MTA4NjcgLyogQUhFTV9fX18uVFRGICovOyB9OwogCQk2NTEwQTc4MzExRUM2NDM4
MDA0MTA4NjcgLyogQ29sb3JCaXRzLnR0ZiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3NzgxMUVDNjQzODAwNDEwODY3IC8qIENvbG9yQml0cy50
dGYgKi87IH07CkBAIC0yOSw2ICs0Myw4IEBACiAJCUJDNzkzNEFDMTE5MDY1OEMwMDVFQThFMiAv
KiBXZWJLaXQyLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzkzNEFCMTE5MDY1OEMwMDVFQThFMiAvKiBXZWJLaXQyLmZyYW1ld29y
ayAqLzsgfTsKIAkJQkM3OTM0RTgxMTkwNjg0NjAwNUVBOEUyIC8qIFBsYXRmb3JtV2ViVmlld01h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzkz
NEU3MTE5MDY4NDYwMDVFQThFMiAvKiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gKi87IH07CiAJCUJD
OEM3OTVDMTFEMjc4NUQwMDQ1MzVBMSAvKiBUZXN0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEM3OTVCMTFEMjc4NUQwMDQ1
MzVBMSAvKiBUZXN0Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKKwkJQkM5NTJDMEQxMUYzQjk2NTAw
MzM5OEI0IC8qIEpTV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzk1MkMwQzExRjNCOTY1MDAzMzk4QjQgLyogSlNXcmFwcGVyLmNwcCAq
LzsgfTsKKwkJQkM5NTJGMUYxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5
NTJGMUQxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwICovOyB9
OwogCQlCQ0M5OTdBNDExRDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0ZWRCdW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk3QTAxMUQzQzhG
NjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlLmNwcCAqLzsgfTsKIAkJQkNDOTk3QTUxMUQzQzhG
NjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTdBMjExRDNDOEY2MDAxN0JDQTIgLyogSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcCAqLzsgfTsKIAkJQkNDOTk4MTgxMUQzRjUxRTAwMTdCQ0EyIC8q
IExheW91dFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAgKi87IH07CkBAIC00NSw2ICs2MSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURT
dHJpbmcgPSBCQzI1MTg2MTExRDE1RDU0MDAyRUJDMDE7CiAJCQlyZW1vdGVJbmZvID0gSW5qZWN0
ZWRCdW5kbGU7CiAJCX07CisJCUJDOTUyRUQ2MTFGM0MzOEIwMDMzOThCNCAvKiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQlj
b250YWluZXJQb3J0YWwgPSAwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmpl
Y3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBCQzk1
MkQ3NzExRjNCRjVEMDAzMzk4QjQgLyogRGVyaXZlZCBTb3VyY2VzICovOworCQkJcmVtb3RlSW5m
byA9ICJEZXJpdmVkIFNvdXJjZXMiOworCQl9OwogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwpAQCAt
NzgsNiArMTAxLDE0IEBACiAJCUJDNzkzNEREMTE5MDY2RUMwMDVFQThFMiAvKiBQbGF0Zm9ybVdl
YlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1XZWJWaWV3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzkzNEU3MTE5MDY4NDYwMDVFQThF
MiAvKiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQbGF0Zm9ybVdlYlZpZXdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDOEM3OTVCMTFEMjc4NUQwMDQ1MzVBMSAvKiBUZXN0Q29udHJvbGxlck1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RDb250cm9sbGVyTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzk1MkMwQjExRjNCOTY1MDAzMzk4
QjQgLyogSlNXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV3Jh
cHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzk1MkMwQzExRjNCOTY1MDAz
Mzk4QjQgLyogSlNXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOTUyQzBF
MTFGM0I5N0IwMDMzOThCNCAvKiBKU1dyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Qzk1MkVDNTExRjNDMTBGMDAzMzk4QjQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBEZXJpdmVkU291cmNlcy5tYWtlOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzk1MkVEMjExRjNDMjlGMDAzMzk4QjQgLyogTGF5b3V0VGVzdENvbnRyb2xsZXIu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExheW91dFRlc3RDb250cm9sbGVyLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5NTJFRDMxMUYzQzMxODAwMzM5OEI0IC8qIENv
ZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgcGF0
aCA9IENvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQzk1MkYxRDExRjNDNjUyMDAzMzk4QjQgLyogSlNMYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0xheW91dFRlc3RDb250
cm9sbGVyLmNwcDsgcGF0aCA9IC4uLy4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdFRlc3RSdW5uZXIvSlNMYXlvdXRUZXN0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKKwkJQkM5NTJGMUUxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0
VGVzdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNMYXlv
dXRUZXN0Q29udHJvbGxlci5oOyBwYXRoID0gLi4vLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0VGVzdFJ1bm5lci9KU0xheW91dFRlc3RDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJQkNDOTk3QTAxMUQzQzhGNjAwMTdCQ0EyIC8qIElu
amVjdGVkQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
amVjdGVkQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDOTk3QTEx
MUQzQzhGNjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQzk5N0EyMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNyw2ICsxNDgsNyBAQAogCQkwOEZC
Nzc5NEZFODQxNTVEQzAyQUFDMDcgLyogV2ViS2l0VGVzdFJ1bm5lciAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkM5NTJFQzUxMUYzQzEwRjAwMzM5OEI0
IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJMDhGQjc3OTVGRTg0MTU1REMwMkFBQzA3
IC8qIFNvdXJjZSAqLywKIAkJCQlCQzI1MTgzNTExRDE1NzFEMDAyRUJDMDEgLyogSW5qZWN0ZWRC
dW5kbGUgKi8sCiAJCQkJQkM3OTM0MDExMThGN0M4QTAwNUVBOEUyIC8qIENvbmZpZ3VyYXRpb25z
ICovLApAQCAtMTcxLDYgKzIwMyw4IEBACiAJCUJDMjUxODM1MTFEMTU3MUQwMDJFQkMwMSAvKiBJ
bmplY3RlZEJ1bmRsZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJQkM5NTJEM0ExMUYzQkYxRjAwMzM5OEI0IC8qIERlcml2ZWQgU291cmNlcyAqLywKKwkJ
CQlCQzk1MkMwQTExRjNCOTM5MDAzMzk4QjQgLyogQmluZGluZ3MgKi8sCiAJCQkJNjVFQjg1OUUx
MUVDNjdDQzAwMzREMzAwIC8qIG1hYyAqLywKIAkJCQk2NUVCODU5RDExRUM2N0NDMDAzNEQzMDAg
LyogQWN0aXZhdGVGb250cy5oICovLAogCQkJCUJDQzk5N0EwMTFEM0M4RjYwMDE3QkNBMiAvKiBJ
bmplY3RlZEJ1bmRsZS5jcHAgKi8sCkBAIC0yMjUsNiArMjU5LDI3IEBACiAJCQlwYXRoID0gQ29u
ZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlCQzk1MkMw
QTExRjNCOTM5MDAzMzk4QjQgLyogQmluZGluZ3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUJDOTUyRUQzMTFGM0MzMTgwMDMzOThCNCAvKiBDb2RlR2Vu
ZXJhdG9yVGVzdFJ1bm5lci5wbSAqLywKKwkJCQlCQzk1MkMwRTExRjNCOTdCMDAzMzk4QjQgLyog
SlNXcmFwcGFibGUuaCAqLywKKwkJCQlCQzk1MkMwQzExRjNCOTY1MDAzMzk4QjQgLyogSlNXcmFw
cGVyLmNwcCAqLywKKwkJCQlCQzk1MkMwQjExRjNCOTY1MDAzMzk4QjQgLyogSlNXcmFwcGVyLmgg
Ki8sCisJCQkJQkM5NTJFRDIxMUYzQzI5RjAwMzM5OEI0IC8qIExheW91dFRlc3RDb250cm9sbGVy
LmlkbCAqLywKKwkJCSk7CisJCQlwYXRoID0gQmluZGluZ3M7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OworCQlCQzk1MkQzQTExRjNCRjFGMDAzMzk4QjQgLyogRGVyaXZlZCBTb3Vy
Y2VzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlCQzk1
MkYxRDExRjNDNjUyMDAzMzk4QjQgLyogSlNMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJQkM5NTJGMUUxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xsZXIuaCAq
LywKKwkJCSk7CisJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVnaW4g
UEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KQEAgLTI1Nyw2ICszMTIsNyBAQAogCQkJYnVpbGRS
dWxlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJQkM5NTJFRDcxMUYzQzM4
QjAwMzM5OEI0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwogCQkJbmFtZSA9IElu
amVjdGVkQnVuZGxlOwogCQkJcHJvZHVjdE5hbWUgPSBJbmplY3RlZEJ1bmRsZTsKQEAgLTI3Nyw2
ICszMzMsNyBAQAogCQkJdGFyZ2V0cyA9ICgKIAkJCQk4REQ3NkY5NjA0ODZBQTc2MDBEOTZCNUUg
LyogV2ViS2l0VGVzdFJ1bm5lciAqLywKIAkJCQlCQzI1MTg2MTExRDE1RDU0MDAyRUJDMDEgLyog
SW5qZWN0ZWRCdW5kbGUgKi8sCisJCQkJQkM5NTJENzcxMUYzQkY1RDAwMzM5OEI0IC8qIERlcml2
ZWQgU291cmNlcyAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICov
CkBAIC0zMDIsNiArMzU5LDIzIEBACiAJCX07CiAvKiBFbmQgUEJYUmVzb3VyY2VzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCiAKKy8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9u
ICovCisJCUJDOTUyRDgyMTFGM0JGNzgwMDMzOThCNCAvKiBHZW5lcmF0ZSBEZXJpdmVkIFNvdXJj
ZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRo
cyA9ICgKKwkJCSk7CisJCQluYW1lID0gIkdlbmVyYXRlIERlcml2ZWQgU291cmNlcyI7CisJCQlv
dXRwdXRQYXRocyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICJta2Rp
ciAtcCBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9XZWJLaXRUZXN0UnVu
bmVyXCJcbmNkIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0Rlcml2ZWRTb3VyY2VzL1dlYktpdFRl
c3RSdW5uZXJcIlxuXG5leHBvcnQgV2ViS2l0VGVzdFJ1bm5lcj1cIiR7U1JDUk9PVH1cIlxuZXhw
b3J0IFdlYkNvcmVTY3JpcHRzPVwiJHtXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVJ9XCJcblxu
aWYgWyBcIiR7QUNUSU9OfVwiID0gXCJidWlsZFwiIC1vIFwiJHtBQ1RJT059XCIgPSBcImluc3Rh
bGxcIiAtbyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0YWxsaGRyc1wiIF07IHRoZW5cbiAgICBtYWtl
IC1mIFwiJHtXZWJLaXRUZXN0UnVubmVyfS9EZXJpdmVkU291cmNlcy5tYWtlXCIgLWogYC91c3Iv
c2Jpbi9zeXNjdGwgLW4gaHcuYXZhaWxjcHVgXG5maVxuIjsKKwkJfTsKKy8qIEVuZCBQQlhTaGVs
bFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAJCThERDc2Rjk5MDQ4NkFBNzYwMEQ5NkI1RSAvKiBTb3VyY2VzICov
ID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CkBAIC0zMjUsNiArMzk5LDggQEAK
IAkJCQlCQ0M5OTdBNTExRDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDQzk5ODE4MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUVCODVBMDExRUM2N0NDMDAzNEQz
MDAgLyogQWN0aXZhdGVGb250cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUJDOTUyQzBEMTFGM0I5
NjUwMDMzOThCNCAvKiBKU1dyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM5NTJGMUYx
MUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0zMzYsNiArNDEyLDExIEBACiAJCQl0YXJnZXQgPSBCQzI1MTg2MTExRDE1RDU0MDAy
RUJDMDEgLyogSW5qZWN0ZWRCdW5kbGUgKi87CiAJCQl0YXJnZXRQcm94eSA9IEJDMjUxOTQxMTFE
MTVEOTQwMDJFQkMwMSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCUJDOTUy
RUQ3MTFGM0MzOEIwMDMzOThCNCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNh
ID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IEJDOTUyRDc3MTFGM0JGNUQwMDMz
OThCNCAvKiBEZXJpdmVkIFNvdXJjZXMgKi87CisJCQl0YXJnZXRQcm94eSA9IEJDOTUyRUQ2MTFG
M0MzOEIwMDMzOThCNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAvKiBFbmQg
UEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhDQnVpbGRDb25maWd1
cmF0aW9uIHNlY3Rpb24gKi8KQEAgLTM4Miw2ICs0NjMsMjcgQEAKIAkJCX07CiAJCQluYW1lID0g
UmVsZWFzZTsKIAkJfTsKKwkJQkM5NTJENzgxMUYzQkY1RTAwMzM5OEI0IC8qIERlYnVnICovID0g
eworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0gewor
CQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsK
KwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlQUk9EVUNUX05BTUUgPSAiRGVy
aXZlZCBTb3VyY2VzIjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCUJDOTUyRDc5
MTFGM0JGNUUwMDMzOThCNCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZ
RVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJ
CQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0g
IkRlcml2ZWQgU291cmNlcyI7CisJCQkJWkVST19MSU5LID0gTk87CisJCQl9OworCQkJbmFtZSA9
IFJlbGVhc2U7CisJCX07CiAvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KQEAgLTQxMiw2ICs1MTQs
MTUgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CiAJCX07CisJCUJDOTUyRDdEMTFGM0JGNkEwMDMz
OThCNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAi
RGVyaXZlZCBTb3VyY2VzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJ
CQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUJDOTUyRDc4MTFGM0JGNUUwMDMzOThCNCAv
KiBEZWJ1ZyAqLywKKwkJCQlCQzk1MkQ3OTExRjNCRjVFMDAzMzk4QjQgLyogUmVsZWFzZSAqLywK
KwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OwogLyogRW5kIFhDQ29uZmlndXJhdGlv
bkxpc3Qgc2VjdGlvbiAqLwogCX07CiAJcm9vdE9iamVjdCA9IDA4RkI3NzkzRkU4NDE1NURDMDJB
QUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61992</attachid>
            <date>2010-07-19 14:31:57 -0700</date>
            <delta_ts>2010-07-19 14:39:31 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>patch2.diff</filename>
            <type>text/plain</type>
            <size>66658</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYzNjg4KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDctMTkgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDI1MzIKKyAgICAgICAgQXV0by1nZW5lcmF0ZSB0aGUgSlMgYmluZGluZ3MgZm9yIFdlYktpdFRl
c3RSdW5uZXIncyBzY3JpcHQgb2JqZWN0cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
Q29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZzoKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0Rlcml2ZWRTb3VyY2VzLm1ha2U6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0dldFB0ci5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0
b3JUZXN0UnVubmVyLnBtOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RSOjpK
U1dyYXBwYWJsZTo6fkpTV3JhcHBhYmxlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBlci5jcHA6IEFkZGVkLgorICAgICAgICAoV1RS
OjpKU1dyYXBwZXI6OndyYXApOgorICAgICAgICAoV1RSOjpKU1dyYXBwZXI6OnVud3JhcCk6Cisg
ICAgICAgIChXVFI6OnVud3JhcE9iamVjdCk6CisgICAgICAgIChXVFI6OkpTV3JhcHBlcjo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXVFI6OkpTV3JhcHBlcjo6ZmluYWxpemUpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV1RSOjp0b0pTKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL0xheW91dFRlc3RDb250cm9sbGVyLmlkbDogQWRkZWQuCisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2UuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXApOgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNldFN0YXR1c2JhclRleHQpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6d3JhcHBlckNsYXNzKToKKyAg
ICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRVbnRpbERvbmUpOgorICAgICAg
ICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdCk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5o
OgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvdWxkRHVtcEFzVGV4dCk6
CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNUZXh0KToKKyAgICAg
ICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3Mp
OgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcFN0YXR1c0NhbGxiYWNr
cyk6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wKToKKyAg
ICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OnRlc3RSZXBhaW50KToKKyAgICAgICAg
KFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlcGFpbnRTd2VlcEhvcml6b250YWxseSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5k
bGUudmNwcm9qOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2lu
L0luamVjdGVkQnVuZGxlR2VuZXJhdGVkLnZjcHJvajogQWRkZWQuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci93aW4vYnVpbGQtZ2VuZXJhdGVkLWZpbGVzLnNoOiBBZGRlZC4KKwogMjAxMC0w
Ny0xOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ5IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitWUEFUSCA9IFwK
KyAgICAkKFdlYktpdFRlc3RSdW5uZXIpL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzIFwKKyMKKwor
SU5URVJGQUNFUyA9IFwKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciBcCisjCisKK1NDUklQVFMg
PSBcCisgICAgJChXZWJDb3JlU2NyaXB0cykvQ29kZUdlbmVyYXRvci5wbSBcCisgICAgJChXZWJL
aXRUZXN0UnVubmVyKS9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1
bm5lci5wbSBcCisgICAgJChXZWJDb3JlU2NyaXB0cykvSURMUGFyc2VyLnBtIFwKKyAgICAkKFdl
YkNvcmVTY3JpcHRzKS9JRExTdHJ1Y3R1cmUucG0gXAorICAgICQoV2ViQ29yZVNjcmlwdHMpL2dl
bmVyYXRlLWJpbmRpbmdzLnBsIFwKKyMKKworLlBIT05ZIDogYWxsCisKK0pTJS5oIEpTJS5jcHAg
OiAlLmlkbCAkKFNDUklQVFMpCisJQGVjaG8gR2VuZXJhdGluZyBiaW5kaW5ncyBmb3IgJCouLi4K
KwlAcGVybCAtSSAkKFdlYkNvcmVTY3JpcHRzKSAtSSAkKFdlYktpdFRlc3RSdW5uZXIpL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzICQoV2ViQ29yZVNjcmlwdHMpL2dlbmVyYXRlLWJpbmRpbmdzLnBs
IC0tZGVmaW5lcyAiIiAtLWluY2x1ZGUgSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MgLS1vdXRwdXRE
aXIgLiAtLWdlbmVyYXRvciBUZXN0UnVubmVyICQ8CisKK2FsbCA6IFwKKyAgICAkKElOVEVSRkFD
RVM6JT1KUyUuaCkgXAorICAgICQoSU5URVJGQUNFUzolPUpTJS5jcHApIFwKKyMKSW5kZXg6IFdl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDYzNjc5KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC02
NiwzICs2Niw2IEBAIFNES1JPT1RfMTA2MF8xMDUwID0gbWFjb3N4MTAuNTsKIFNES1JPT1RfMTA3
MF8xMDQwID0gbWFjb3N4MTAuNDsKIFNES1JPT1RfMTA3MF8xMDUwID0gbWFjb3N4MTAuNTsKIFNE
S1JPT1RfMTA3MF8xMDYwID0gbWFjb3N4MTAuNjsKKworV0VCS0lUX1VNQlJFTExBX0ZSQU1FV09S
S1NfRElSID0gJChORVhUX1JPT1QpJChTWVNURU1fTElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvV2Vi
S2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3M7CitXRUJDT1JFX1BSSVZBVEVfSEVB
REVSU19ESVIgPSAkKFdFQktJVF9VTUJSRUxMQV9GUkFNRVdPUktTX0RJUikvV2ViQ29yZS5mcmFt
ZXdvcmsvUHJpdmF0ZUhlYWRlcnM7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVy
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkocmV2aXNpb24gNjM2NzkpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0Nv
bmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMzgs
MyArMzgsNSBAQCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTA0MCA9IDEwLjQ7CiBNQUNPU1hf
REVQTE9ZTUVOVF9UQVJHRVRfMTA1MCA9IDEwLjU7CiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRf
MTA2MCA9IDEwLjY7CiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTA3MCA9IDEwLjc7CisKK1dF
QktJVF9VTUJSRUxMQV9GUkFNRVdPUktTX0RJUiA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKTsKSW5k
ZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0dl
dFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL0dldFB0ci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9Gb3J3YXJkaW5nSGVhZGVycy93dGYvR2V0UHRyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HZXRQdHIuaD4KSW5kZXg6
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDYzNjc5KQorKysg
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmR1bXAoKQogewogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlv
dXRUZXN0Q29udHJvbGxlcigpLT5pbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nKCk7CiAKLSAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPmR1
bXBBc1RleHQoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEFzVGV4dCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBT
dXBwb3J0IGR1bXBpbmcgc3ViZnJhbWVzIHdoZW4gbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVt
cENoaWxkRnJhbWVzQXNUZXh0KCkgaXMgdHJ1ZS4KICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGlubmVyVGV4dChBZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weUlubmVyVGV4dChXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSkpOwogICAgICAgICBPd25QdHI8VmVjdG9yPGNo
YXI+ID4gdXRmOElubmVyVGV4dCA9IFdLU3RyaW5nVG9VVEY4KGlubmVyVGV4dC5nZXQoKSk7CkBA
IC0yMTMsNyArMjEzLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmFkZE1lc3NhZ2VUb0Nv
bgogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6c2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1Jl
ZiBzdGF0dXNiYXJUZXh0KQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxh
eW91dFRlc3RDb250cm9sbGVyKCktPmR1bXBTdGF0dXNDYWxsYmFja3MoKSkKKyAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1w
U3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE93blB0cjxWZWN0b3I8
Y2hhcj4gPiB1dGY4U3RhdHVzYmFyVGV4dCA9IFdLU3RyaW5nVG9VVEY4KHN0YXR1c2JhclRleHQp
OwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDYzNjc5KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDEwIEBA
CiAgKi8KIAogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZS5oIgotCisjaW5j
bHVkZSAiSlNMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZUZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgpAQCAtNTQsNiArNTUsMTEgQEAgTGF5b3V0VGVz
dENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbAogewogfQogCitKU0NsYXNzUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQoreworICAgIHJldHVybiBKU0xheW91dFRl
c3RDb250cm9sbGVyOjpsYXlvdXRUZXN0Q29udHJvbGxlckNsYXNzKCk7Cit9CisKIC8vIFRoaXMg
aXMgbG93ZXIgdGhhbiBEdW1wUmVuZGVyVHJlZSdzIHRpbWVvdXQsIHRvIG1ha2UgaXQgZWFzaWVy
IHRvIHdvcmsgdGhyb3VnaCB0aGUgZmFpbHVyZXMKIC8vIEV2ZW50dWFsbHkgaXQgc2hvdWxkIGJl
IGNoYW5nZWQgdG8gbWF0Y2guCiBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgd2FpdFRvRHVt
cFdhdGNoZG9nSW50ZXJ2YWwgPSA2LjA7CkBAIC03Niw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHdh
aXRVbnRpbERvbmVXYXRjaGRvZ0ZpcmVkKEMKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwog
fQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXYWl0VG9EdW1wKCkKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndhaXRVbnRpbERvbmUoKQogewogICAgIG1fd2FpdFRvRHVtcCA9
IHRydWU7CiAgICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZykgewpAQCAtMTE4LDEzMSArMTI0
LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW8KICAgICByZXR1
cm4gV0tCdW5kbGVGcmFtZVBhdXNlQW5pbWF0aW9uT25FbGVtZW50V2l0aElkKG1haW5GcmFtZSwg
bmFtZVdLLmdldCgpLCBpZFdLLmdldCgpLCB0aW1lKTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYg
ZGlzcGxheUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICAvLyBI
YXMgbWFjICYgd2luZG93cyBpbXBsZW1lbnRhdGlvbgotICAgIExheW91dFRlc3RDb250cm9sbGVy
KiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPmRpc3BsYXkoKTsKLQot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgZHVtcEFzVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAg
ICBjb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZHVtcFN0YXR1c0Nh
bGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlv
dXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250
cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVy
LT5zZXREdW1wU3RhdHVzQ2FsbGJhY2tzKHRydWUpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgd2FpdFVudGlsRG9uZUNh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICBjb250cm9sbGVyLT5zZXRXYWl0
VG9EdW1wKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiBub3RpZnlEb25lQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09i
amVjdCkpOwotICAgIGNvbnRyb2xsZXItPm5vdGlmeURvbmUoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIG51bWJlck9m
QWN0aXZlQW5pbWF0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBpZiAoYXJndW1lbnRDb3VudCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGNvbnRyb2xs
ZXItPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMykKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGFuaW1hdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24p
OwotICAgIGRvdWJsZSB0aW1lID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sx
XSwgZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwotICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBlbGVtZW50SWQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKLSAgICBBU1NFUlQoISpleGNlcHRpb24pOwot
Ci0gICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBjb250cm9sbGVyLT5wYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChhbmltYXRpb25OYW1lLmdldCgpLCB0aW1lLCBlbGVt
ZW50SWQuZ2V0KCkpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgcmVwYWludFN3ZWVwSG9yaXpv
bnRhbGx5Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91
dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRy
b2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXIt
PnNldFRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHRlc3RSZXBhaW50
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGNvbnRyb2xsZXItPnNldFRl
c3RSZXBhaW50KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
fQotCi0vLyBPYmplY3QgRmluYWxpemF0aW9uCi0KLXN0YXRpYyB2b2lkIGxheW91dFRlc3RDb250
cm9sbGVyT2JqZWN0RmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Ci0gICAgY29udHJvbGxlci0+ZGVyZWYo
KTsKLX0KLQogLy8gT2JqZWN0IENyZWF0aW9uCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBsYXlvdXRUZXN0Q29udG9sbGVyU3RyKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygibGF5b3V0VGVzdENvbnRyb2xsZXIiKSk7Ci0gICAgcmVmKCk7Ci0KLSAgICBK
U0NsYXNzUmVmIGNsYXNzUmVmID0gZ2V0SlNDbGFzcygpOwotICAgIEpTVmFsdWVSZWYgbGF5b3V0
VGVzdENvbnRvbGxlck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZiwgdGhp
cyk7Ci0gICAgSlNDbGFzc1JlbGVhc2UoY2xhc3NSZWYpOwotCi0gICAgSlNPYmplY3RTZXRQcm9w
ZXJ0eShjb250ZXh0LCB3aW5kb3dPYmplY3QsIGxheW91dFRlc3RDb250b2xsZXJTdHIuZ2V0KCks
IGxheW91dFRlc3RDb250b2xsZXJPYmplY3QsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7Ci19Ci0KLUpTQ2xh
c3NSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdldEpTQ2xhc3MoKQotewotICAgIHN0YXRpYyBK
U1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3RhdGljRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
aW5pdGlvbiA9IHsKLSAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiTGF5b3V0VGVz
dENvbnRyb2xsZXIiLCAwLCAwLCBzdGF0aWNGdW5jdGlvbnMsCi0gICAgICAgIDAsIGxheW91dFRl
c3RDb250cm9sbGVyT2JqZWN0RmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLSAg
ICB9OwotCi0gICAgcmV0dXJuIEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7Ci19Ci0K
LUpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMo
KQotewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewot
ICAgICAgICB7ICJkaXNwbGF5IiwgZGlzcGxheUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
ImR1bXBBc1RleHQiLCBkdW1wQXNUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAiZHVt
cFN0YXR1c0NhbGxiYWNrcyIsIGR1bXBTdGF0dXNDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgICAgICB7ICJub3RpZnlEb25lIiwgbm90aWZ5RG9uZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
ICAgIHsgIm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyIsIG51bWJlck9mQWN0aXZlQW5pbWF0aW9u
c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50V2l0aElkIiwgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWRDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAotICAgICAgICB7ICJyZXBhaW50U3dlZXBIb3Jpem9udGFsbHkiLCByZXBhaW50U3dl
ZXBIb3Jpem9udGFsbHlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJ0ZXN0UmVwYWludCIs
IHRlc3RSZXBhaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAid2FpdFVudGlsRG9uZSIs
IHdhaXRVbnRpbERvbmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAgfQotICAg
IH07Ci0KLSAgICByZXR1cm4gc3RhdGljRnVuY3Rpb25zOworICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBsYXlvdXRUZXN0Q29udG9sbGVyU3RyLmdldCgpLCBK
U1dyYXBwZXI6OndyYXAoY29udGV4dCwgdGhpcyksIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIGV4Y2VwdGlvbik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gNjM2NzkpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQw
ICsyNiw0MyBAQAogI2lmbmRlZiBMYXlvdXRUZXN0Q29udHJvbGxlcl9oCiAjZGVmaW5lIExheW91
dFRlc3RDb250cm9sbGVyX2gKIAorI2luY2x1ZGUgIkpTV3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHN0cmluZz4KIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIExheW91
dFRlc3RDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5b3V0VGVzdENvbnRyb2xsZXI+
IHsKK2NsYXNzIExheW91dFRlc3RDb250cm9sbGVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gY3JlYXRl
KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMKTsKICAgICB+TGF5b3V0VGVzdENvbnRy
b2xsZXIoKTsKIAorICAgIC8vIEpTV3JhcHBhYmxlCisgICAgSlNDbGFzc1JlZiB3cmFwcGVyQ2xh
c3MoKTsKKwogICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCi0gICAg
Ym9vbCBkdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQXNUZXh0OyB9Ci0gICAgdm9p
ZCBzZXREdW1wQXNUZXh0KGJvb2wgZHVtcEFzVGV4dCkgeyBtX2R1bXBBc1RleHQgPSBkdW1wQXNU
ZXh0OyB9CisgICAgYm9vbCBzaG91bGREdW1wQXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1w
QXNUZXh0OyB9CisgICAgdm9pZCBkdW1wQXNUZXh0KCkgeyBtX2R1bXBBc1RleHQgPSB0cnVlOyB9
CiAKLSAgICBib29sIGR1bXBTdGF0dXNDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBT
dGF0dXNDYWxsYmFja3M7IH0KLSAgICB2b2lkIHNldER1bXBTdGF0dXNDYWxsYmFja3MoYm9vbCBk
dW1wU3RhdHVzQ2FsbGJhY2tzKSB7IG1fZHVtcFN0YXR1c0NhbGxiYWNrcyA9IGR1bXBTdGF0dXND
YWxsYmFja3M7IH0KKyAgICBib29sIHNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2R1bXBTdGF0dXNDYWxsYmFja3M7IH0KKyAgICB2b2lkIGR1bXBTdGF0dXNDYWxs
YmFja3MoKSB7IG1fZHVtcFN0YXR1c0NhbGxiYWNrcyA9IHRydWU7IH0KIAogICAgIGJvb2wgd2Fp
dFRvRHVtcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdFRvRHVtcDsgfQotICAgIHZvaWQgc2V0V2Fp
dFRvRHVtcCgpOwogICAgIHZvaWQgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwogICAg
IHZvaWQgaW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZygpOworICAgIHZvaWQgd2FpdFVudGls
RG9uZSgpOwogICAgIHZvaWQgbm90aWZ5RG9uZSgpOworCisgICAgdm9pZCB0ZXN0UmVwYWludCgp
IHsgbV90ZXN0UmVwYWludCA9IHRydWU7IH0KKyAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250
YWxseSgpIHsgbV90ZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5ID0gdHJ1ZTsgfQogICAgIHZv
aWQgZGlzcGxheSgpOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkg
Y29uc3Q7CiAgICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0
cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElk
KTsKIAotICAgIHZvaWQgc2V0VGVzdFJlcGFpbnQoKSB7IG1fdGVzdFJlcGFpbnQgPSB0cnVlOyB9
Ci0gICAgdm9pZCBzZXRUZXN0UmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KCkgeyBtX3Rlc3RSZXBh
aW50U3dlZXBIb3Jpem9udGFsbHkgPSB0cnVlOyB9Ci0KIHByaXZhdGU6CiAgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwpOwogCkBAIC02OSwx
NCArNzIsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV90ZXN0UmVwYWludDsKICAgICBib29sIG1f
dGVzdFJlcGFpbnRTd2VlcEhvcml6b250YWxseTsKIAotCiAgICAgc3RkOjpzdHJpbmcgbV90ZXN0
UGF0aE9yVVJMOwogICAgIAogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV93YWl0
VG9EdW1wV2F0Y2hkb2c7Ci0KLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7Ci0g
ICAgc3RhdGljIEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOwotICAgIHN0YXRpYyBKU1N0
YXRpY0Z1bmN0aW9uKiBzdGF0aWNGdW5jdGlvbnMoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdU
UgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0NvZGVHZW5lcmF0b3JU
ZXN0UnVubmVyLnBtCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9Db2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRmlsZTo6U3BlYzsKKwor
cGFja2FnZSBDb2RlR2VuZXJhdG9yVGVzdFJ1bm5lcjsKKworc3ViIG5ldworeworICAgIG15ICgk
Y2xhc3MsICRjb2RlR2VuZXJhdG9yLCAkb3V0cHV0RGlyKSA9IEBfOworCisgICAgbXkgJHJlZmVy
ZW5jZSA9IHsKKyAgICAgICAgY29kZUdlbmVyYXRvciA9PiAkY29kZUdlbmVyYXRvciwKKyAgICAg
ICAgb3V0cHV0RGlyID0+ICRvdXRwdXREaXIsCisgICAgfTsKKworICAgIGJsZXNzKCRyZWZlcmVu
Y2UsICRjbGFzcyk7CisgICAgcmV0dXJuICRyZWZlcmVuY2U7Cit9CisKK3N1YiBHZW5lcmF0ZU1v
ZHVsZQoreworfQorCitzdWIgR2VuZXJhdGVJbnRlcmZhY2UKK3sKKyAgICBteSAoJHNlbGYsICRp
bnRlcmZhY2UsICRkZWZpbmVzKSA9IEBfOworCisgICAgZm9yZWFjaCBteSAkZmlsZSAoJHNlbGYt
Pl9nZW5lcmF0ZUhlYWRlckZpbGUoJGludGVyZmFjZSksICRzZWxmLT5fZ2VuZXJhdGVJbXBsZW1l
bnRhdGlvbkZpbGUoJGludGVyZmFjZSkpIHsKKyAgICAgICAgb3BlbihGSUxFLCAiPiIsIEZpbGU6
OlNwZWMtPmNhdGZpbGUoJCRzZWxme291dHB1dERpcn0sICQkZmlsZXtuYW1lfSkpIG9yIGRpZSAi
RmFpbGVkIHRvIG9wZW4gJCRmaWxle25hbWV9IGZvciB3cml0aW5nOiAkISI7CisgICAgICAgIHBy
aW50IEZJTEUgQHskJGZpbGV7Y29udGVudHN9fTsKKyAgICAgICAgY2xvc2UoRklMRSkgb3IgZGll
ICJGYWlsZWQgdG8gY2xvc2UgJCRmaWxle25hbWV9IGFmdGVyIHdyaXRpbmc6ICQhIjsKKyAgICB9
Cit9CisKK3N1YiBmaW5pc2gKK3sKK30KKworc3ViIF9jbGFzc05hbWUKK3sKKyAgICBteSAoJGlk
bFR5cGUpID0gQF87CisKKyAgICByZXR1cm4gIkpTIiAuIF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFt
ZSgkaWRsVHlwZSk7Cit9CisKK3N1YiBfY2xhc3NSZWZHZXR0ZXIKK3sKKyAgICBteSAoJHNlbGYs
ICRpZGxUeXBlKSA9IEBfOworICAgIHJldHVybiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPldLX2xj
Zmlyc3QoX2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lKCRpZGxUeXBlKSkgLiAiQ2xhc3MiOworfQor
CitzdWIgX2ZpbGVIZWFkZXJTdHJpbmcKK3sKKyAgICBteSAoJGZpbGVuYW1lKSA9IEBfOworCisg
ICAgIyBGSVhNRTogV2Ugc2hvdWxkIHB1bGwgaGVhZGVyIG91dCBvZiB0aGUgSURMIGZpbGUgdG8g
Z2V0IHRoZSBjb3B5cmlnaHQKKyAgICAjIHllYXIocykgcmlnaHQuCisgICAgcmV0dXJuIDw8RU9G
OworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCitFT0YKK30KKworc3ViIF9nZW5lcmF0ZUhlYWRlckZpbGUKK3sKKyAgICBt
eSAoJHNlbGYsICRpbnRlcmZhY2UpID0gQF87CisKKyAgICBteSBAY29udGVudHMgPSAoKTsKKwor
ICAgIG15ICRpZGxUeXBlID0gJGludGVyZmFjZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0g
X2NsYXNzTmFtZSgkaWRsVHlwZSk7CisgICAgbXkgJGltcGxlbWVudGF0aW9uQ2xhc3NOYW1lID0g
X2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lKCRpZGxUeXBlKTsKKyAgICBteSAkZmlsZW5hbWUgPSAk
Y2xhc3NOYW1lIC4gIi5oIjsKKworICAgIHB1c2goQGNvbnRlbnRzLCBfZmlsZUhlYWRlclN0cmlu
ZygkZmlsZW5hbWUpKTsKKworICAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBfcGFyZW50Q2xhc3NO
YW1lKCRpbnRlcmZhY2UpOworCisgICAgcHVzaChAY29udGVudHMsIDw8RU9GKTsKKworI2lmbmRl
ZiAke2NsYXNzTmFtZX1faAorI2RlZmluZSAke2NsYXNzTmFtZX1faAorCisjaW5jbHVkZSAiJHtw
YXJlbnRDbGFzc05hbWV9LmgiCitFT0YKKyAgICBwdXNoKEBjb250ZW50cywgPDxFT0YpOworCitu
YW1lc3BhY2UgV1RSIHsKKworY2xhc3MgJHtpbXBsZW1lbnRhdGlvbkNsYXNzTmFtZX07CisKK2Ns
YXNzICR7Y2xhc3NOYW1lfSA6IHB1YmxpYyAke3BhcmVudENsYXNzTmFtZX0geworcHVibGljOgor
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIEB7WyRzZWxmLT5fY2xhc3NSZWZHZXR0ZXIoJGlkbFR5cGUp
XX0oKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogc3Rh
dGljRnVuY3Rpb25zKCk7CisgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1Zh
bHVlcygpOworRU9GCisKKyAgICBpZiAobXkgQGZ1bmN0aW9ucyA9IEB7JGludGVyZmFjZS0+ZnVu
Y3Rpb25zfSkgeworICAgICAgICBwdXNoKEBjb250ZW50cywgIlxuICAgIC8vIEZ1bmN0aW9uc1xu
XG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKKyAgICAg
ICAgICAgIHB1c2goQGNvbnRlbnRzLCAiICAgIHN0YXRpYyBKU1ZhbHVlUmVmIEB7WyRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5uYW1lXX0oSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RS
ZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKik7XG4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChteSBAYXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+YXR0
cmlidXRlc30pIHsKKyAgICAgICAgcHVzaChAY29udGVudHMsICJcbiAgICAvLyBBdHRyaWJ1dGVz
XG5cbiIpOworICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7Cisg
ICAgICAgICAgICBwdXNoKEBjb250ZW50cywgIiAgICBzdGF0aWMgSlNWYWx1ZVJlZiBAe1skc2Vs
Zi0+X2dldHRlck5hbWUoJGF0dHJpYnV0ZSldfShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBK
U1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBjb250ZW50
cywgIiAgICBzdGF0aWMgYm9vbCBAe1skc2VsZi0+X3NldHRlck5hbWUoJGF0dHJpYnV0ZSldfShK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1
ZVJlZiopO1xuIikgdW5sZXNzICRhdHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS87CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBwdXNoKEBjb250ZW50cywgPDxFT0YpOworfTsKKyAgICAKKyR7
aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KiB0byR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KEpT
Q29udGV4dFJlZiwgSlNWYWx1ZVJlZik7CisKK30gLy8gbmFtZXNwYWNlIFdUUgorCisjZW5kaWYg
Ly8gJHtjbGFzc05hbWV9X2gKK0VPRgorCisgICAgcmV0dXJuIHsgbmFtZSA9PiAkZmlsZW5hbWUs
IGNvbnRlbnRzID0+IFxAY29udGVudHMgfTsKK30KKworc3ViIF9nZW5lcmF0ZUltcGxlbWVudGF0
aW9uRmlsZQoreworICAgIG15ICgkc2VsZiwgJGludGVyZmFjZSkgPSBAXzsKKworICAgIG15IEBj
b250ZW50c1ByZWZpeCA9ICgpOworICAgIG15ICVjb250ZW50c0luY2x1ZGVzID0gKCk7CisgICAg
bXkgQGNvbnRlbnRzID0gKCk7CisKKyAgICBteSAkaWRsVHlwZSA9ICRpbnRlcmZhY2UtPm5hbWU7
CisgICAgbXkgJGNsYXNzTmFtZSA9IF9jbGFzc05hbWUoJGlkbFR5cGUpOworICAgIG15ICRpbXBs
ZW1lbnRhdGlvbkNsYXNzTmFtZSA9IF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgkaWRsVHlwZSk7
CisgICAgbXkgJGZpbGVuYW1lID0gJGNsYXNzTmFtZSAuICIuY3BwIjsKKworICAgIHB1c2goQGNv
bnRlbnRzUHJlZml4LCBfZmlsZUhlYWRlclN0cmluZygkZmlsZW5hbWUpKTsKKworICAgIG15ICRj
bGFzc1JlZkdldHRlciA9ICRzZWxmLT5fY2xhc3NSZWZHZXR0ZXIoJGlkbFR5cGUpOworICAgIG15
ICRwYXJlbnRDbGFzc05hbWUgPSBfcGFyZW50Q2xhc3NOYW1lKCRpbnRlcmZhY2UpOworCisgICAg
JGNvbnRlbnRzSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfS5oIn0gPSAxOworICAgICRjb250ZW50c0lu
Y2x1ZGVzeyIke2ltcGxlbWVudGF0aW9uQ2xhc3NOYW1lfS5oIn0gPSAxOworCisgICAgcHVzaChA
Y29udGVudHNQcmVmaXgsIDw8RU9GKTsKKworRU9GCisKKyAgICBwdXNoKEBjb250ZW50cywgPDxF
T0YpOworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorCituYW1lc3BhY2UgV1RSIHsKKworJHtpbXBsZW1lbnRhdGlvbkNsYXNz
TmFtZX0qIHRvJHtpbXBsZW1lbnRhdGlvbkNsYXNzTmFtZX0oSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgaWYgKCFjb250ZXh0IHx8ICF2YWx1ZSB8fCAhJHtj
bGFzc05hbWV9Ojoke2NsYXNzUmVmR2V0dGVyfSgpIHx8ICFKU1ZhbHVlSXNPYmplY3RPZkNsYXNz
KGNvbnRleHQsIHZhbHVlLCAke2NsYXNzTmFtZX06OiR7Y2xhc3NSZWZHZXR0ZXJ9KCkpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtpbXBsZW1lbnRhdGlvbkNs
YXNzTmFtZX0qPihKU1dyYXBwZXI6OnVud3JhcChjb250ZXh0LCB2YWx1ZSkpOworfQorCitKU0Ns
YXNzUmVmICR7Y2xhc3NOYW1lfTo6JHtjbGFzc1JlZkdldHRlcn0oKQoreworICAgIHN0YXRpYyBK
U0NsYXNzUmVmIGpzQ2xhc3M7CisgICAgaWYgKCFqc0NsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NE
ZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICAgICAg
ZGVmaW5pdGlvbi5jbGFzc05hbWUgPSAiJHtpZGxUeXBlfSI7CisgICAgICAgIGRlZmluaXRpb24u
cGFyZW50Q2xhc3MgPSBAe1skc2VsZi0+X3BhcmVudENsYXNzUmVmR2V0dGVyRXhwcmVzc2lvbigk
aW50ZXJmYWNlKV19OworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY1ZhbHVlcyA9IHN0YXRpY1Zh
bHVlcygpOworICAgICAgICBkZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0
aW9ucygpOworRU9GCisKKyAgICBwdXNoKEBjb250ZW50cywgIiAgICAgICAgZGVmaW5pdGlvbi5p
bml0aWFsaXplID0gaW5pdGlhbGl6ZTtcbiIpIHVubGVzcyBfcGFyZW50SW50ZXJmYWNlKCRpbnRl
cmZhY2UpOworICAgIHB1c2goQGNvbnRlbnRzLCAiICAgICAgICBkZWZpbml0aW9uLmZpbmFsaXpl
ID0gZmluYWxpemU7XG4iKSB1bmxlc3MgX3BhcmVudEludGVyZmFjZSgkaW50ZXJmYWNlKTsKKwor
ICAgIHB1c2goQGNvbnRlbnRzLCA8PEVPRik7CisgICAgICAgIGpzQ2xhc3MgPSBKU0NsYXNzQ3Jl
YXRlKCZkZWZpbml0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGpzQ2xhc3M7Cit9CisKK0VPRgor
CisgICAgcHVzaChAY29udGVudHMsICRzZWxmLT5fc3RhdGljRnVuY3Rpb25zR2V0dGVySW1wbGVt
ZW50YXRpb24oJGludGVyZmFjZSksICJcbiIpOworICAgIHB1c2goQGNvbnRlbnRzLCAkc2VsZi0+
X3N0YXRpY1ZhbHVlc0dldHRlckltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UpKTsKKworICAgIGlm
IChteSBAZnVuY3Rpb25zID0gQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgIHB1
c2goQGNvbnRlbnRzLCAiXG4vLyBGdW5jdGlvbnNcbiIpOworCisgICAgICAgIGZvcmVhY2ggbXkg
JGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7CisgICAgICAgICAgICBwdXNoKEBjb250ZW50cywgPDxF
T0YpOworCitKU1ZhbHVlUmVmICR7Y2xhc3NOYW1lfTo6QHtbJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWVdfShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgJHtpbXBsZW1lbnRhdGlvbkNsYXNz
TmFtZX0qIGltcGwgPSB0byR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KGNvbnRleHQsIHRoaXNP
YmplY3QpOworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworRU9GCisgICAgICAgICAgICBteSBAcGFyYW1ldGVycyA9ICgpOworICAg
ICAgICAgICAgbXkgQHNwZWNpZmllZFBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c307CisKKyAgICAgICAgICAgIHB1c2goQGNvbnRlbnRzLCAiXG4iKSBpZiBzY2FsYXIgQHNwZWNp
ZmllZFBhcmFtZXRlcnM7CisKKyAgICAgICAgICAgICRzZWxmLT5faW5jbHVkZUhlYWRlcnMoXCVj
b250ZW50c0luY2x1ZGVzLCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSwgJGZ1bmN0aW9uLT5z
aWduYXR1cmUpOworCisgICAgICAgICAgICBmb3JlYWNoIG15ICRpICgwLi4kI3NwZWNpZmllZFBh
cmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAgICBteSAkcGFyYW1ldGVyID0gJHNwZWNpZmllZFBh
cmFtZXRlcnNbJGldOworCisgICAgICAgICAgICAgICAgJHNlbGYtPl9pbmNsdWRlSGVhZGVycyhc
JWNvbnRlbnRzSW5jbHVkZXMsICRpZGxUeXBlLCAkcGFyYW1ldGVyKTsKKworICAgICAgICAgICAg
ICAgIHB1c2goQGNvbnRlbnRzLCAiICAgICIgLiAkc2VsZi0+X3BsYXRmb3JtVHlwZVZhcmlhYmxl
RGVjbGFyYXRpb24oJHBhcmFtZXRlciwgJHBhcmFtZXRlci0+bmFtZSwgImFyZ3VtZW50c1skaV0i
LCAiYXJndW1lbnRDb3VudCA+ICRpIikgLiAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBwdXNoKEBwYXJhbWV0ZXJzLCAkc2VsZi0+X3BhcmFtdGVyRXhwcmVzc2lvbigk
cGFyYW1ldGVyKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG15ICRpc1ZvaWRSZXR1
cm4gPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSBlcSAidm9pZCI7CisgICAgICAgICAgICBt
eSAkZnVuY3Rpb25OYW1lID0gImltcGwtPiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsK
KyAgICAgICAgICAgIG15ICRmdW5jdGlvbkNhbGwgPSAkZnVuY3Rpb25OYW1lIC4gIigiIC4gam9p
bigiLCAiLCBAcGFyYW1ldGVycykgLiAiKSI7CisKKyAgICAgICAgICAgIHB1c2goQGNvbnRlbnRz
LCAiXG4iKSB1bmxlc3Mgc2NhbGFyIEBzcGVjaWZpZWRQYXJhbWV0ZXJzID09IDE7CisgICAgICAg
ICAgICBwdXNoKEBjb250ZW50cywgIiAgICAke2Z1bmN0aW9uQ2FsbH07XG5cbiIpIGlmICRpc1Zv
aWRSZXR1cm47CisgICAgICAgICAgICBwdXNoKEBjb250ZW50cywgIiAgICByZXR1cm4gIiAuICRz
ZWxmLT5fcmV0dXJuRXhwcmVzc2lvbigkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJGZ1bmN0aW9uQ2Fs
bCkgLiAiO1xufVxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobXkgQGF0dHJpYnV0
ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIHB1c2goQGNvbnRlbnRz
LCAiXG4vLyBBdHRyaWJ1dGVzXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChA
YXR0cmlidXRlcykgeworICAgICAgICAgICAgJHNlbGYtPl9pbmNsdWRlSGVhZGVycyhcJWNvbnRl
bnRzSW5jbHVkZXMsICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSwgJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlKTsKKworICAgICAgICAgICAgbXkgJGdldHRlck5hbWUgPSAkc2VsZi0+X2dldHRlck5h
bWUoJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICBteSAkZ2V0dGVyRXhwcmVzc2lvbiA9ICJpbXBs
LT4ke2dldHRlck5hbWV9KCkiOworCisgICAgICAgICAgICBwdXNoKEBjb250ZW50cywgPDxFT0Yp
OworCitKU1ZhbHVlUmVmICR7Y2xhc3NOYW1lfTo6JHtnZXR0ZXJOYW1lfShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgICR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KiBpbXBsID0gdG8ke2lt
cGxlbWVudGF0aW9uQ2xhc3NOYW1lfShjb250ZXh0LCBvYmplY3QpOworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgcmV0
dXJuIEB7WyRzZWxmLT5fcmV0dXJuRXhwcmVzc2lvbigkYXR0cmlidXRlLT5zaWduYXR1cmUsICRn
ZXR0ZXJFeHByZXNzaW9uKV19OworfQorRU9GCisKKyAgICAgICAgICAgIHVubGVzcyAoJGF0dHJp
YnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5LykgeworICAgICAgICAgICAgICAgIHB1c2goQGNvbnRl
bnRzLCA8PEVPRik7CisKK2Jvb2wgJHtjbGFzc05hbWV9OjpAe1skc2VsZi0+X3NldHRlck5hbWUo
JGF0dHJpYnV0ZSldfShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBK
U1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgICR7aW1wbGVtZW50YXRpb25DbGFzc05hbWV9KiBpbXBsID0gdG8ke2ltcGxlbWVudGF0aW9u
Q2xhc3NOYW1lfShjb250ZXh0LCBvYmplY3QpOworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCitFT0YKKworICAgICAgICAgICAgICAgIG15ICRwbGF0Zm9ybVZhbHVlID0g
JHNlbGYtPl9wbGF0Zm9ybVR5cGVDb25zdHJ1Y3RvcigkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2
YWx1ZSIpOworCisgICAgICAgICAgICAgICAgcHVzaChAY29udGVudHMsIDw8RU9GKTsKKyAgICBp
bXBsLT5Ae1skc2VsZi0+X3NldHRlck5hbWUoJGF0dHJpYnV0ZSldfSgke3BsYXRmb3JtVmFsdWV9
KTsKKworICAgIHJldHVybiB0cnVlOworfQorRU9GCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBwdXNoKEBjb250ZW50cywgPDxFT0YpOworCit9IC8vIG5hbWVzcGFjZSBX
VFIKKworRU9GCisKKyAgICB1bnNoaWZ0KEBjb250ZW50cywgbWFwIHsgIiNpbmNsdWRlIFwiJF9c
IlxuIiB9IHNvcnQga2V5cyglY29udGVudHNJbmNsdWRlcykpOworICAgIHVuc2hpZnQoQGNvbnRl
bnRzLCBAY29udGVudHNQcmVmaXgpOworCisgICAgcmV0dXJuIHsgbmFtZSA9PiAkZmlsZW5hbWUs
IGNvbnRlbnRzID0+IFxAY29udGVudHMgfTsKK30KKworc3ViIF9nZXR0ZXJOYW1lCit7CisgICAg
bXkgKCRzZWxmLCAkYXR0cmlidXRlKSA9IEBfOworCisgICAgbXkgJHNpZ25hdHVyZSA9ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZTsKKyAgICBteSAkbmFtZSA9ICRzaWduYXR1cmUtPm5hbWU7CisKKyAg
ICByZXR1cm4gJG5hbWU7Cit9CisKK3N1YiBfaW5jbHVkZUhlYWRlcnMKK3sKKyAgICBteSAoJHNl
bGYsICRoZWFkZXJzLCAkaWRsVHlwZSwgJHNpZ25hdHVyZSkgPSBAXzsKKworICAgIHJldHVybiB1
bmxlc3MgZGVmaW5lZCAkaWRsVHlwZTsKKyAgICByZXR1cm4gaWYgJGlkbFR5cGUgZXEgImJvb2xl
YW4iIG9yICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNOb25Qb2ludGVyVHlwZSgkaWRsVHlwZSk7
CisKKyAgICAkJGhlYWRlcnN7X2NsYXNzTmFtZSgkaWRsVHlwZSkgLiAiLmgifSA9IDE7CisgICAg
JCRoZWFkZXJze19pbXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgkaWRsVHlwZSkgLiAiLmgifSA9IDE7
Cit9CisKK3N1YiBfaW1wbGVtZW50YXRpb25DbGFzc05hbWUKK3sKKyAgICBteSAoJGlkbFR5cGUp
ID0gQF87CisKKyAgICByZXR1cm4gJGlkbFR5cGU7Cit9CisKK3N1YiBfcGFyZW50Q2xhc3NOYW1l
Cit7CisgICAgbXkgKCRpbnRlcmZhY2UpID0gQF87CisKKyAgICBteSAkcGFyZW50SW50ZXJmYWNl
ID0gX3BhcmVudEludGVyZmFjZSgkaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gJHBhcmVudEludGVy
ZmFjZSA/IF9jbGFzc05hbWUoJHBhcmVudEludGVyZmFjZSkgOiAiSlNXcmFwcGVyIjsKK30KKwor
c3ViIF9wYXJlbnRDbGFzc1JlZkdldHRlckV4cHJlc3Npb24KK3sKKyAgICBteSAoJHNlbGYsICRp
bnRlcmZhY2UpID0gQF87CisKKyAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gX3BhcmVudEludGVy
ZmFjZSgkaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gJHBhcmVudEludGVyZmFjZSA/ICRzZWxmLT5f
Y2xhc3NSZWZHZXR0ZXIoJHBhcmVudEludGVyZmFjZSkgLiAiKCkiIDogIjAiOworfQorCitzdWIg
X3BhcmVudEludGVyZmFjZQoreworICAgIG15ICgkaW50ZXJmYWNlKSA9IEBfOworICAgIHJldHVy
biAkaW50ZXJmYWNlLT5wYXJlbnRzLT5bMF07Cit9CisKK3N1YiBfcGxhdGZvcm1UeXBlCit7Cisg
ICAgbXkgKCRzZWxmLCAkaWRsVHlwZSwgJHNpZ25hdHVyZSkgPSBAXzsKKworICAgIHJldHVybiB1
bmRlZiB1bmxlc3MgZGVmaW5lZCAkaWRsVHlwZTsKKworICAgIHJldHVybiAiYm9vbCIgaWYgJGlk
bFR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAiSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IiBpZiAkJHNlbGZ7Y29kZUdlbmVyYXRvcn0tPklzU3RyaW5nVHlwZSgkaWRsVHlwZSk7CisgICAg
cmV0dXJuICJkb3VibGUiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNOb25Qb2ludGVyVHlw
ZSgkaWRsVHlwZSk7CisgICAgcmV0dXJuIF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgkaWRsVHlw
ZSk7Cit9CisKK3N1YiBfcGxhdGZvcm1UeXBlQ29uc3RydWN0b3IKK3sKKyAgICBteSAoJHNlbGYs
ICRzaWduYXR1cmUsICRhcmd1bWVudE5hbWUpID0gQF87CisKKyAgICBteSAkaWRsVHlwZSA9ICRz
aWduYXR1cmUtPnR5cGU7CisKKyAgICByZXR1cm4gIkpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCAkYXJndW1lbnROYW1lLCAwKSkiIGlm
ICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNTdHJpbmdUeXBlKCRpZGxUeXBlKTsKKyAgICByZXR1
cm4gIkpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgJGFyZ3VtZW50TmFtZSkiIGlmICRpZGxUeXBl
IGVxICJib29sZWFuIjsKKyAgICByZXR1cm4gIkpTVmFsdWVUb051bWJlcihjb250ZXh0LCAkYXJn
dW1lbnROYW1lLCAwKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc05vblBvaW50ZXJUeXBl
KCRpZGxUeXBlKTsKKyAgICByZXR1cm4gInRvIiAuIF9pbXBsZW1lbnRhdGlvbkNsYXNzTmFtZSgk
aWRsVHlwZSkgLiAiKGNvbnRleHQsICRhcmd1bWVudE5hbWUpIjsKK30KKworc3ViIF9wbGF0Zm9y
bVR5cGVWYXJpYWJsZURlY2xhcmF0aW9uCit7CisgICAgbXkgKCRzZWxmLCAkc2lnbmF0dXJlLCAk
dmFyaWFibGVOYW1lLCAkYXJndW1lbnROYW1lLCAkY29uZGl0aW9uKSA9IEBfOworCisgICAgbXkg
JHBsYXRmb3JtVHlwZSA9ICRzZWxmLT5fcGxhdGZvcm1UeXBlKCRzaWduYXR1cmUtPnR5cGUsICRz
aWduYXR1cmUpOworICAgIG15ICRjb25zdHJ1Y3RvciA9ICRzZWxmLT5fcGxhdGZvcm1UeXBlQ29u
c3RydWN0b3IoJHNpZ25hdHVyZSwgJGFyZ3VtZW50TmFtZSk7CisKKyAgICBteSAlbm9uUG9pbnRl
clR5cGVzID0gKAorICAgICAgICAiYm9vbCIgPT4gMSwKKyAgICAgICAgImRvdWJsZSIgPT4gMSwK
KyAgICAgICAgIkpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiIgPT4gMSwKKyAgICApOworCisgICAg
bXkgJG51bGxWYWx1ZSA9ICIwIjsKKyAgICAkbnVsbFZhbHVlID0gIiRwbGF0Zm9ybVR5cGUoKSIg
aWYgZGVmaW5lZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9ICYmICRwbGF0Zm9ybVR5
cGUgbmUgImRvdWJsZSI7CisKKyAgICAkcGxhdGZvcm1UeXBlIC49ICIqIiB1bmxlc3MgZGVmaW5l
ZCAkbm9uUG9pbnRlclR5cGVzeyRwbGF0Zm9ybVR5cGV9OworCisgICAgcmV0dXJuICIkcGxhdGZv
cm1UeXBlICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uICYmICRjb25zdHJ1Y3RvcjsiIGlmICRj
b25kaXRpb24gJiYgJHBsYXRmb3JtVHlwZSBlcSAiYm9vbCI7CisgICAgcmV0dXJuICIkcGxhdGZv
cm1UeXBlICR2YXJpYWJsZU5hbWUgPSAkY29uZGl0aW9uID8gJGNvbnN0cnVjdG9yIDogJG51bGxW
YWx1ZTsiIGlmICRjb25kaXRpb247CisgICAgcmV0dXJuICIkcGxhdGZvcm1UeXBlICR2YXJpYWJs
ZU5hbWUgPSAkY29uc3RydWN0b3I7IjsKK30KKworc3ViIF9yZXR1cm5FeHByZXNzaW9uCit7Cisg
ICAgbXkgKCRzZWxmLCAkc2lnbmF0dXJlLCAkZXhwcmVzc2lvbikgPSBAXzsKKworICAgIG15ICRj
b252ZXJ0TnVsbFN0cmluZ0F0dHJpYnV0ZSA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb252ZXJ0TnVsbFN0cmluZ1RvIn07CisgICAgbXkgJG51bGxPckVtcHR5U3RyaW5nID0g
Ik51bGxTdHJpbmdBc0VtcHR5U3RyaW5nIjsKKyAgICAkbnVsbE9yRW1wdHlTdHJpbmcgPSAiTnVs
bFN0cmluZ0FzTnVsbCIgaWYgZGVmaW5lZCAkY29udmVydE51bGxTdHJpbmdBdHRyaWJ1dGUgJiYg
JGNvbnZlcnROdWxsU3RyaW5nQXR0cmlidXRlIGVxICJOdWxsIjsKKworICAgIG15ICRyZXR1cm5J
RExUeXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKKworICAgIHJldHVybiAiSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCkiIGlmICRyZXR1cm5JRExUeXBlIGVxICJ2b2lkIjsKKyAgICByZXR1cm4g
IkpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCAke2V4cHJlc3Npb259KSIgaWYgJHJldHVybklE
TFR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAiSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4
dCwgJHtleHByZXNzaW9ufSkiIGlmICQkc2VsZntjb2RlR2VuZXJhdG9yfS0+SXNOb25Qb2ludGVy
VHlwZSgkcmV0dXJuSURMVHlwZSk7CisgICAgcmV0dXJuICJ0b0pTKGNvbnRleHQsIFdURjo6Z2V0
UHRyKCR7ZXhwcmVzc2lvbn0pKSI7Cit9CisKK3N1YiBfcGFyYW10ZXJFeHByZXNzaW9uCit7Cisg
ICAgbXkgKCRzZWxmLCAkcGFyYW1ldGVyKSA9IEBfOworCisgICAgbXkgJGlkbFR5cGUgPSAkcGFy
YW1ldGVyLT50eXBlOworICAgIG15ICRuYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKKworICAgIHJl
dHVybiAiJHtuYW1lfS5nZXQoKSIgaWYgJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5Jc1N0cmluZ1R5
cGUoJGlkbFR5cGUpOworICAgIHJldHVybiAkbmFtZTsKK30KKworc3ViIF9zZXR0ZXJOYW1lCit7
CisgICAgbXkgKCRzZWxmLCAkYXR0cmlidXRlKSA9IEBfOworCisgICAgbXkgJG5hbWUgPSAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisKKyAgICByZXR1cm4gInNldCIgLiAkJHNlbGZ7Y29k
ZUdlbmVyYXRvcn0tPldLX3VjZmlyc3QoJG5hbWUpOworfQorCitzdWIgX3N0YXRpY0Z1bmN0aW9u
c0dldHRlckltcGxlbWVudGF0aW9uCit7CisgICAgbXkgKCRzZWxmLCAkaW50ZXJmYWNlKSA9IEBf
OworCisgICAgbXkgJG1hcEZ1bmN0aW9uID0gc3ViIHsKKyAgICAgICAgbXkgJG5hbWUgPSAkXy0+
c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBteSBAYXR0cmlidXRlcyA9IHF3KGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5KTsKKyAgICAg
ICAgcHVzaChAYXR0cmlidXRlcywgImtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0iKSBpZiAk
Xy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9udEVudW0ifTsKKworICAgICAg
ICByZXR1cm4gICJ7IFwiJG5hbWVcIiwgJG5hbWUsICIgLiBqb2luKCIgfCAiLCBAYXR0cmlidXRl
cykgLiAiIH0iOworICAgIH07CisKKyAgICByZXR1cm4gJHNlbGYtPl9zdGF0aWNGdW5jdGlvbnNP
clZhbHVlc0dldHRlckltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UsICJmdW5jdGlvbiIsICJ7IDAs
IDAsIDAgfSIsICRtYXBGdW5jdGlvbiwgJGludGVyZmFjZS0+ZnVuY3Rpb25zKTsKK30KKworc3Vi
IF9zdGF0aWNGdW5jdGlvbnNPclZhbHVlc0dldHRlckltcGxlbWVudGF0aW9uCit7CisgICAgbXkg
KCRzZWxmLCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25PclZhbHVlLCAkYXJyYXlUZXJtaW5hdG9yLCAk
bWFwRnVuY3Rpb24sICRmdW5jdGlvbnNPckF0dHJpYnV0ZXMpID0gQF87CisKKyAgICBteSAkY2xh
c3NOYW1lID0gX2NsYXNzTmFtZSgkaW50ZXJmYWNlLT5uYW1lKTsKKyAgICBteSAkdXBwZXJjYXNl
RnVuY3Rpb25PclZhbHVlID0gJCRzZWxme2NvZGVHZW5lcmF0b3J9LT5XS191Y2ZpcnN0KCRmdW5j
dGlvbk9yVmFsdWUpOworCisgICAgbXkgJHJlc3VsdCA9IDw8RU9GOworY29uc3QgSlNTdGF0aWMk
e3VwcGVyY2FzZUZ1bmN0aW9uT3JWYWx1ZX0qICR7Y2xhc3NOYW1lfTo6c3RhdGljJHt1cHBlcmNh
c2VGdW5jdGlvbk9yVmFsdWV9cygpCit7CitFT0YKKworICAgIG15IEBpbml0aWFsaXplcnMgPSBt
YXAoJiRtYXBGdW5jdGlvbiwgQHskZnVuY3Rpb25zT3JBdHRyaWJ1dGVzfSk7CisgICAgcmV0dXJu
ICRyZXN1bHQgLiAiICAgIHJldHVybiAwO1xufVxuIiB1bmxlc3MgQGluaXRpYWxpemVyczsKKwor
ICAgICRyZXN1bHQgLj0gPDxFT0YKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWMke3VwcGVyY2Fz
ZUZ1bmN0aW9uT3JWYWx1ZX0gJHtmdW5jdGlvbk9yVmFsdWV9c1tdID0geworICAgICAgICBAe1tq
b2luKCIsXG4gICAgICAgICIsIEBpbml0aWFsaXplcnMpXX0sCisgICAgICAgICR7YXJyYXlUZXJt
aW5hdG9yfQorICAgIH07CisgICAgcmV0dXJuICR7ZnVuY3Rpb25PclZhbHVlfXM7Cit9CitFT0YK
K30KKworc3ViIF9zdGF0aWNWYWx1ZXNHZXR0ZXJJbXBsZW1lbnRhdGlvbgoreworICAgIG15ICgk
c2VsZiwgJGludGVyZmFjZSkgPSBAXzsKKworICAgIG15ICRtYXBGdW5jdGlvbiA9IHN1YiB7Cisg
ICAgICAgIHJldHVybiBpZiAkXy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9J
bXBsZW1lbnRhdGlvbiJ9OworCisgICAgICAgIG15ICRhdHRyaWJ1dGVOYW1lID0gJF8tPnNpZ25h
dHVyZS0+bmFtZTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZUlzUmVhZG9ubHkgPSAkXy0+dHlwZSA9
fiAvXnJlYWRvbmx5LzsKKyAgICAgICAgbXkgJGdldHRlck5hbWUgPSAkc2VsZi0+X2dldHRlck5h
bWUoJF8pOworICAgICAgICBteSAkc2V0dGVyTmFtZSA9ICRhdHRyaWJ1dGVJc1JlYWRvbmx5ID8g
IjAiIDogJHNlbGYtPl9zZXR0ZXJOYW1lKCRfKTsKKyAgICAgICAgbXkgQGF0dHJpYnV0ZXMgPSBx
dyhrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUpOworICAgICAgICBwdXNoKEBhdHRyaWJ1
dGVzLCAia0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSIpIGlmICRhdHRyaWJ1dGVJc1JlYWRv
bmx5OworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAia0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RW51bSIpIGlmICRfLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb250RW51bSJ9
OworCisgICAgICAgIHJldHVybiAieyBcIiRhdHRyaWJ1dGVOYW1lXCIsICRnZXR0ZXJOYW1lLCAk
c2V0dGVyTmFtZSwgIiAuIGpvaW4oIiB8ICIsIEBhdHRyaWJ1dGVzKSAuICIgfSI7CisgICAgfTsK
KworICAgIHJldHVybiAkc2VsZi0+X3N0YXRpY0Z1bmN0aW9uc09yVmFsdWVzR2V0dGVySW1wbGVt
ZW50YXRpb24oJGludGVyZmFjZSwgInZhbHVlIiwgInsgMCwgMCwgMCwgMCB9IiwgJG1hcEZ1bmN0
aW9uLCAkaW50ZXJmYWNlLT5hdHRyaWJ1dGVzKTsKK30KKworMTsKSW5kZXg6IFdlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0JpbmRpbmdzL0pTV3JhcHBhYmxlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0pTV3JhcHBhYmxlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTV3JhcHBhYmxl
X2gKKyNkZWZpbmUgSlNXcmFwcGFibGVfaAorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2Ug
V1RSIHsKKworY2xhc3MgSlNXcmFwcGFibGUgOiBwdWJsaWMgUmVmQ291bnRlZDxKU1dyYXBwYWJs
ZT4geworcHVibGljOgorICAgIHZpcnR1YWwgfkpTV3JhcHBhYmxlKCkgeyB9CisgICAgdmlydHVh
bCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
UgorCisjZW5kaWYgLy8gSlNXcmFwcGFibGVfaApJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
SlNXcmFwcGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvSlNXcmFwcGVyLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJKU1dyYXBwZXIuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZlByaXZhdGUuaD4KKworbmFtZXNwYWNl
IFdUUiB7CisKK0pTVmFsdWVSZWYgSlNXcmFwcGVyOjp3cmFwKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1dyYXBwYWJsZSogb2JqZWN0KQoreworICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4
dCk7CisKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVsbChj
b250ZXh0KTsKKworICAgIEpTQ2xhc3NSZWYgb2JqZWN0Q2xhc3MgPSBvYmplY3QtPndyYXBwZXJD
bGFzcygpOworICAgIEFTU0VSVChvYmplY3RDbGFzcyk7CisgICAgSlNPYmplY3RSZWYgd3JhcHBl
ck9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBvYmplY3RDbGFzcywgb2JqZWN0KTsKKyAg
ICBBU1NFUlQod3JhcHBlck9iamVjdCk7CisKKyAgICByZXR1cm4gd3JhcHBlck9iamVjdDsKK30K
KworSlNXcmFwcGFibGUqIEpTV3JhcHBlcjo6dW53cmFwKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7Cisg
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIGlmICghY29udGV4dCB8fCAhdmFsdWUp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1dyYXBwYWJsZSo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIDApKSk7
Cit9CisKK3N0YXRpYyBKU1dyYXBwYWJsZSogdW53cmFwT2JqZWN0KEpTT2JqZWN0UmVmIG9iamVj
dCkKK3sKKyAgICBKU1dyYXBwYWJsZSogd3JhcHBhYmxlID0gc3RhdGljX2Nhc3Q8SlNXcmFwcGFi
bGUqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgQVNTRVJUKHdyYXBwYWJsZSk7
CisgICAgcmV0dXJuIHdyYXBwYWJsZTsKK30KKwordm9pZCBKU1dyYXBwZXI6OmluaXRpYWxpemUo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEpTV3JhcHBhYmxl
KiB3cmFwcGFibGUgPSB1bndyYXBPYmplY3Qob2JqZWN0KTsKKyAgICBpZiAoIXdyYXBwYWJsZSkK
KyAgICAgICAgcmV0dXJuOworICAgIHdyYXBwYWJsZS0+cmVmKCk7Cit9CisKK3ZvaWQgSlNXcmFw
cGVyOjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgSlNXcmFwcGFibGUqIHdy
YXBwYWJsZSA9IHVud3JhcE9iamVjdChvYmplY3QpOworICAgIGlmICghd3JhcHBhYmxlKQorICAg
ICAgICByZXR1cm47CisgICAgd3JhcHBhYmxlLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVFIKSW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvSlNXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9KU1dyYXBwZXIuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
SlNXcmFwcGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEpTV3JhcHBlcl9oCisjZGVmaW5lIEpTV3JhcHBlcl9oCisKKyNpbmNsdWRlICJKU1dy
YXBwYWJsZS5oIgorCituYW1lc3BhY2UgV1RSIHsKKworLy8gRklYTUU6IElmIG5lY2Vzc2FyeSwg
d2UgY2FuIGRvIHdyYXBwZXIgY2FjaGluZyBoZXJlLgorY2xhc3MgSlNXcmFwcGVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiB3cmFwKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1dy
YXBwYWJsZSogb2JqZWN0KTsKKyAgICBzdGF0aWMgSlNXcmFwcGFibGUqIHVud3JhcChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSk7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOworICAgIHN0YXRpYyB2b2lkIGZpbmFs
aXplKEpTT2JqZWN0UmVmKTsKK307CisKK2lubGluZSBKU1ZhbHVlUmVmIHRvSlMoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTV3JhcHBhYmxlKiBpbXBsKQoreworICAgIHJldHVybiBKU1dyYXBwZXI6
OndyYXAoY29udGV4dCwgaW1wbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgorCisjZW5kaWYg
Ly8gSlNXcmFwcGVyX2gKSW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvTGF5b3V0VGVzdENvbnRyb2xsZXIuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRUZXN0Q29udHJvbGxlci5p
ZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgV1RS
IHsKKworICAgIGludGVyZmFjZSBMYXlvdXRUZXN0Q29udHJvbGxlciB7CisgICAgICAgIHZvaWQg
ZHVtcEFzVGV4dCgpOworICAgICAgICB2b2lkIGR1bXBTdGF0dXNDYWxsYmFja3MoKTsKKworICAg
ICAgICB2b2lkIHdhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdm9pZCBub3RpZnlEb25lKCk7CisK
KyAgICAgICAgLy8gUmVwYWludCB0ZXN0aW5nCisgICAgICAgIHZvaWQgdGVzdFJlcGFpbnQoKTsK
KyAgICAgICAgdm9pZCByZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKTsKKyAgICAgICAgdm9pZCBk
aXNwbGF5KCk7CisKKyAgICAgICAgLy8gQW5pbWF0aW9uIHRlc3RpbmcKKyAgICAgICAgaW50IG51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOworICAgICAgICBib29sZWFuIHBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKGluIERPTVN0cmluZyBhbmltYXRpb25OYW1lLCBpbiBkb3Vi
bGUgdGltZSwgaW4gRE9NU3RyaW5nIGVsZW1lbnRJZCk7CisgICAgfTsKKworfQpJbmRleDogV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5k
bGUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlLnZjcHJvagkocmV2aXNpb24gNjM2NzkpCisr
KyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3Rl
ZEJ1bmRsZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIAkJCS8+DQog
CQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0RGlyKVwuLiZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpXC4uXC4uJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90
OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OyINCisJCQkJQWRkaXRp
b25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0RGlyKVwuLiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpXC4uXC4uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cQmluZGlu
Z3MmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1
dERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2Vi
S2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxv
YmpcSW5qZWN0ZWRCdW5kbGVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Ig0KIAkJCQlGb3JjZWRJbmNs
dWRlRmlsZXM9IldlYktpdFRlc3RSdW5uZXJQcmVmaXguaCINCiAJCQkvPg0KIAkJCTxUb29sDQpA
QCAtMTA3LDcgKzEwNyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJv
amVjdERpcilcLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwuLiZxdW90OzsmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilc
SW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXFdl
YkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XGluY2x1ZGUmcXVvdDsiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90
OyQoUHJvamVjdERpcilcLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwuLiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpXC4uXEJpbmRpbmdzJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxJbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxJbmNsdWRlXHByaXZh
dGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJk
aW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90
OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcb2JqXEluamVjdGVkQnVuZGxlXERlcml2ZWRTb3Vy
Y2VzXCZxdW90OyINCiAJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJXZWJLaXRUZXN0UnVubmVyUHJl
Zml4LmgiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE3NCw3ICsxNzQsNyBAQAogCQkJLz4NCiAJ
CQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5j
bHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3REaXIpXC4uJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcilcLi5cLi4mcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGUmcXVv
dDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXEluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7
OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7Ig0KKwkJCQlBZGRpdGlv
bmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFByb2plY3REaXIpXC4uJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcilcLi5cLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxCaW5kaW5n
cyZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKFdl
YktpdE91dHB1dERpcilcSW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXG9i
alxJbmplY3RlZEJ1bmRsZVxEZXJpdmVkU291cmNlc1wmcXVvdDsiDQogCQkJCVJ1bnRpbWVMaWJy
YXJ5PSIzIg0KIAkJCQlGb3JjZWRJbmNsdWRlRmlsZXM9IldlYktpdFRlc3RSdW5uZXJQcmVmaXgu
aCINCiAJCQkvPg0KQEAgLTIyMiw2ICsyMjIsMzggQEAKIAk8UmVmZXJlbmNlcz4NCiAJPC9SZWZl
cmVuY2VzPg0KIAk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iQmluZGluZ3MiDQorCQkJ
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cQmluZGluZ3NcQ29kZUdlbmVyYXRv
clRlc3RSdW5uZXIucG0iDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxCaW5kaW5nc1xKU1dyYXBwYWJsZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cQmluZGluZ3NcSlNXcmFwcGVyLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XEJpbmRpbmdzXEpTV3JhcHBlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+
DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iRGVyaXZlZCBTb3VyY2VzIg0KKwkJCT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSlNMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERp
cilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KIAkJPEZpbGUNCiAJCQlS
ZWxhdGl2ZVBhdGg9IkFjdGl2YXRlRm9udHMuY3BwIg0KIAkJCT4NCkluZGV4OiBXZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRl
c3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjM2NzkpCisrKyBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDIwIEBACiAJb2JqZWN0VmVy
c2lvbiA9IDQ1OwogCW9iamVjdHMgPSB7CiAKKy8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBz
ZWN0aW9uICovCisJCUJDOTUyRDc3MTFGM0JGNUQwMDMzOThCNCAvKiBEZXJpdmVkIFNvdXJjZXMg
Ki8gPSB7CisJCQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gQkM5NTJEN0QxMUYzQkY2QTAwMzM5OEI0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJEZXJpdmVkIFNvdXJjZXMiICovOworCQkJYnVp
bGRQaGFzZXMgPSAoCisJCQkJQkM5NTJEODIxMUYzQkY3ODAwMzM5OEI0IC8qIEdlbmVyYXRlIERl
cml2ZWQgU291cmNlcyAqLywKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJ
bmFtZSA9ICJEZXJpdmVkIFNvdXJjZXMiOworCQkJcHJvZHVjdE5hbWUgPSAiRGVyaXZlZCBTb3Vy
Y2VzIjsKKwkJfTsKKy8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLworCiAvKiBC
ZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQk2NTEwQTc4MjExRUM2NDM4MDA0MTA4Njcg
LyogQUhFTV9fX18uVFRGIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTEwQTc3NzExRUM2NDM4MDA0MTA4NjcgLyogQUhFTV9fX18uVFRGICovOyB9Owog
CQk2NTEwQTc4MzExRUM2NDM4MDA0MTA4NjcgLyogQ29sb3JCaXRzLnR0ZiBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3NzgxMUVDNjQzODAwNDEw
ODY3IC8qIENvbG9yQml0cy50dGYgKi87IH07CkBAIC0yOSw2ICs0Myw4IEBACiAJCUJDNzkzNEFD
MTE5MDY1OEMwMDVFQThFMiAvKiBXZWJLaXQyLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzkzNEFCMTE5MDY1OEMwMDVFQThFMiAv
KiBXZWJLaXQyLmZyYW1ld29yayAqLzsgfTsKIAkJQkM3OTM0RTgxMTkwNjg0NjAwNUVBOEUyIC8q
IFBsYXRmb3JtV2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzkzNEU3MTE5MDY4NDYwMDVFQThFMiAvKiBQbGF0Zm9ybVdlYlZpZXdN
YWMubW0gKi87IH07CiAJCUJDOEM3OTVDMTFEMjc4NUQwMDQ1MzVBMSAvKiBUZXN0Q29udHJvbGxl
ck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
OEM3OTVCMTFEMjc4NUQwMDQ1MzVBMSAvKiBUZXN0Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKKwkJ
QkM5NTJDMEQxMUYzQjk2NTAwMzM5OEI0IC8qIEpTV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk1MkMwQzExRjNCOTY1MDAzMzk4QjQg
LyogSlNXcmFwcGVyLmNwcCAqLzsgfTsKKwkJQkM5NTJGMUYxMUYzQzY1MjAwMzM5OEI0IC8qIEpT
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM5NTJGMUQxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwICovOyB9OwogCQlCQ0M5OTdBNDExRDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0
ZWRCdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNDOTk3QTAxMUQzQzhGNjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlLmNwcCAqLzsgfTsK
IAkJQkNDOTk3QTUxMUQzQzhGNjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlUGFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTdBMjExRDND
OEY2MDAxN0JDQTIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCAqLzsgfTsKIAkJQkNDOTk4MTgx
MUQzRjUxRTAwMTdCQ0EyIC8qIExheW91dFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNB
MiAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgKi87IH07CkBAIC00NSw2ICs2MSwxMyBAQAog
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBCQzI1MTg2MTExRDE1RDU0MDAyRUJDMDE7CiAJCQly
ZW1vdGVJbmZvID0gSW5qZWN0ZWRCdW5kbGU7CiAJCX07CisJCUJDOTUyRUQ2MTFGM0MzOEIwMDMz
OThCNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwOEZCNzc5M0ZFODQxNTVEQzAyQUFD
MDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSBCQzk1MkQ3NzExRjNCRjVEMDAzMzk4QjQgLyogRGVyaXZlZCBTb3VyY2Vz
ICovOworCQkJcmVtb3RlSW5mbyA9ICJEZXJpdmVkIFNvdXJjZXMiOworCQl9OwogLyogRW5kIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVu
Y2Ugc2VjdGlvbiAqLwpAQCAtNzgsNiArMTAxLDE0IEBACiAJCUJDNzkzNEREMTE5MDY2RUMwMDVF
QThFMiAvKiBQbGF0Zm9ybVdlYlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxhdGZvcm1XZWJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzkz
NEU3MTE5MDY4NDYwMDVFQThFMiAvKiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVdlYlZpZXdNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEM3OTVCMTFEMjc4NUQwMDQ1MzVBMSAvKiBUZXN0
Q29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFRlc3RDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzk1
MkMwQjExRjNCOTY1MDAzMzk4QjQgLyogSlNXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Qzk1MkMwQzExRjNCOTY1MDAzMzk4QjQgLyogSlNXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDOTUyQzBFMTFGM0I5N0IwMDMzOThCNCAvKiBKU1dyYXBwYWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQzk1MkVDNTExRjNDMTBGMDAzMzk4QjQgLyogRGVyaXZlZFNvdXJj
ZXMubWFrZSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEZXJpdmVkU291cmNlcy5tYWtlOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzk1MkVEMjExRjNDMjlGMDAzMzk4QjQgLyogTGF5
b3V0VGVzdENvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExheW91dFRlc3RD
b250cm9sbGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5NTJFRDMxMUYz
QzMxODAwMzM5OEI0IC8qIENvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucGVybDsgcGF0aCA9IENvZGVHZW5lcmF0b3JUZXN0UnVubmVyLnBtOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQzk1MkYxRDExRjNDNjUyMDAzMzk4QjQgLyogSlNMYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBKU0xheW91dFRlc3RDb250cm9sbGVyLmNwcDsgcGF0aCA9IC4uLy4uL1dlYktpdEJ1aWxkL0Rl
YnVnL0Rlcml2ZWRTb3VyY2VzL1dlYktpdFRlc3RSdW5uZXIvSlNMYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQkM5NTJGMUUxMUYzQzY1MjAw
MzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNMYXlvdXRUZXN0Q29udHJvbGxlci5oOyBwYXRoID0gLi4vLi4vV2ViS2l0
QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViS2l0VGVzdFJ1bm5lci9KU0xheW91dFRlc3RD
b250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJQkNDOTk3QTAxMUQz
QzhGNjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkNDOTk3QTExMUQzQzhGNjAwMTdCQ0EyIC8qIEluamVjdGVkQnVuZGxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzk5N0EyMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNyw2
ICsxNDgsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogV2ViS2l0VGVzdFJ1bm5l
ciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkM5NTJF
QzUxMUYzQzEwRjAwMzM5OEI0IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJMDhGQjc3
OTVGRTg0MTU1REMwMkFBQzA3IC8qIFNvdXJjZSAqLywKIAkJCQlCQzI1MTgzNTExRDE1NzFEMDAy
RUJDMDEgLyogSW5qZWN0ZWRCdW5kbGUgKi8sCiAJCQkJQkM3OTM0MDExMThGN0M4QTAwNUVBOEUy
IC8qIENvbmZpZ3VyYXRpb25zICovLApAQCAtMTcxLDYgKzIwMyw4IEBACiAJCUJDMjUxODM1MTFE
MTU3MUQwMDJFQkMwMSAvKiBJbmplY3RlZEJ1bmRsZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkM5NTJEM0ExMUYzQkYxRjAwMzM5OEI0IC8qIERlcml2
ZWQgU291cmNlcyAqLywKKwkJCQlCQzk1MkMwQTExRjNCOTM5MDAzMzk4QjQgLyogQmluZGluZ3Mg
Ki8sCiAJCQkJNjVFQjg1OUUxMUVDNjdDQzAwMzREMzAwIC8qIG1hYyAqLywKIAkJCQk2NUVCODU5
RDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5oICovLAogCQkJCUJDQzk5N0EwMTFE
M0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZS5jcHAgKi8sCkBAIC0yMjUsNiArMjU5LDI3
IEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQlCQzk1MkMwQTExRjNCOTM5MDAzMzk4QjQgLyogQmluZGluZ3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUJDOTUyRUQzMTFGM0MzMTgw
MDMzOThCNCAvKiBDb2RlR2VuZXJhdG9yVGVzdFJ1bm5lci5wbSAqLywKKwkJCQlCQzk1MkMwRTEx
RjNCOTdCMDAzMzk4QjQgLyogSlNXcmFwcGFibGUuaCAqLywKKwkJCQlCQzk1MkMwQzExRjNCOTY1
MDAzMzk4QjQgLyogSlNXcmFwcGVyLmNwcCAqLywKKwkJCQlCQzk1MkMwQjExRjNCOTY1MDAzMzk4
QjQgLyogSlNXcmFwcGVyLmggKi8sCisJCQkJQkM5NTJFRDIxMUYzQzI5RjAwMzM5OEI0IC8qIExh
eW91dFRlc3RDb250cm9sbGVyLmlkbCAqLywKKwkJCSk7CisJCQlwYXRoID0gQmluZGluZ3M7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlCQzk1MkQzQTExRjNCRjFGMDAzMzk4
QjQgLyogRGVyaXZlZCBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQlCQzk1MkYxRDExRjNDNjUyMDAzMzk4QjQgLyogSlNMYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAgKi8sCisJCQkJQkM5NTJGMUUxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0
VGVzdENvbnRyb2xsZXIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rp
b24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KQEAgLTI1Nyw2ICsz
MTIsNyBAQAogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJ
CQkJQkM5NTJFRDcxMUYzQzM4QjAwMzM5OEI0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IEluamVjdGVkQnVuZGxlOwogCQkJcHJvZHVjdE5hbWUgPSBJbmplY3Rl
ZEJ1bmRsZTsKQEAgLTI3Nyw2ICszMzMsNyBAQAogCQkJdGFyZ2V0cyA9ICgKIAkJCQk4REQ3NkY5
NjA0ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVzdFJ1bm5lciAqLywKIAkJCQlCQzI1MTg2MTEx
RDE1RDU0MDAyRUJDMDEgLyogSW5qZWN0ZWRCdW5kbGUgKi8sCisJCQkJQkM5NTJENzcxMUYzQkY1
RDAwMzM5OEI0IC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJY
UHJvamVjdCBzZWN0aW9uICovCkBAIC0zMDIsNiArMzU5LDIzIEBACiAJCX07CiAvKiBFbmQgUEJY
UmVzb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKKy8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0
QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUJDOTUyRDgyMTFGM0JGNzgwMDMzOThCNCAvKiBHZW5l
cmF0ZSBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCSk7CisJCQluYW1lID0gIkdlbmVyYXRlIERlcml2
ZWQgU291cmNlcyI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlz
aGVsbFNjcmlwdCA9ICJta2RpciAtcCBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291
cmNlcy9XZWJLaXRUZXN0UnVubmVyXCJcbmNkIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0Rlcml2
ZWRTb3VyY2VzL1dlYktpdFRlc3RSdW5uZXJcIlxuXG5leHBvcnQgV2ViS2l0VGVzdFJ1bm5lcj1c
IiR7U1JDUk9PVH1cIlxuZXhwb3J0IFdlYkNvcmVTY3JpcHRzPVwiJHtXRUJDT1JFX1BSSVZBVEVf
SEVBREVSU19ESVJ9XCJcblxuaWYgWyBcIiR7QUNUSU9OfVwiID0gXCJidWlsZFwiIC1vIFwiJHtB
Q1RJT059XCIgPSBcImluc3RhbGxcIiAtbyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0YWxsaGRyc1wi
IF07IHRoZW5cbiAgICBtYWtlIC1mIFwiJHtXZWJLaXRUZXN0UnVubmVyfS9EZXJpdmVkU291cmNl
cy5tYWtlXCIgLWogYC91c3Ivc2Jpbi9zeXNjdGwgLW4gaHcuYXZhaWxjcHVgXG5maVxuIjsKKwkJ
fTsKKy8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCiAvKiBCZWdp
biBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAJCThERDc2Rjk5MDQ4NkFBNzYwMEQ5
NkI1RSAvKiBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CkBA
IC0zMjUsNiArMzk5LDggQEAKIAkJCQlCQ0M5OTdBNTExRDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzk5ODE4MTFEM0Y1MUUwMDE3
QkNBMiAvKiBMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUVC
ODVBMDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUJDOTUyQzBEMTFGM0I5NjUwMDMzOThCNCAvKiBKU1dyYXBwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQkM5NTJGMUYxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMzYsNiArNDEyLDExIEBACiAJCQl0YXJnZXQgPSBC
QzI1MTg2MTExRDE1RDU0MDAyRUJDMDEgLyogSW5qZWN0ZWRCdW5kbGUgKi87CiAJCQl0YXJnZXRQ
cm94eSA9IEJDMjUxOTQxMTFEMTVEOTQwMDJFQkMwMSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkg
Ki87CiAJCX07CisJCUJDOTUyRUQ3MTFGM0MzOEIwMDMzOThCNCAvKiBQQlhUYXJnZXREZXBlbmRl
bmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IEJD
OTUyRDc3MTFGM0JGNUQwMDMzOThCNCAvKiBEZXJpdmVkIFNvdXJjZXMgKi87CisJCQl0YXJnZXRQ
cm94eSA9IEJDOTUyRUQ2MTFGM0MzOEIwMDMzOThCNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkg
Ki87CisJCX07CiAvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KQEAgLTM4Miw2ICs0NjMsMjcgQEAK
IAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKKwkJQkM5NTJENzgxMUYzQkY1RTAwMzM5
OEI0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlHQ0NfRFlO
QU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlQ
Uk9EVUNUX05BTUUgPSAiRGVyaXZlZCBTb3VyY2VzIjsKKwkJCX07CisJCQluYW1lID0gRGVidWc7
CisJCX07CisJCUJDOTUyRDc5MTFGM0JGNUUwMDMzOThCNCAvKiBSZWxlYXNlICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNP
UFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3
YXJmLXdpdGgtZHN5bSI7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJ
CQkJUFJPRFVDVF9OQU1FID0gIkRlcml2ZWQgU291cmNlcyI7CisJCQkJWkVST19MSU5LID0gTk87
CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CiAvKiBFbmQgWENCdWlsZENvbmZpZ3Vy
YXRpb24gc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24g
Ki8KQEAgLTQxMiw2ICs1MTQsMTUgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxl
ID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CiAJCX07CisJCUJD
OTUyRDdEMTFGM0JGNkEwMDMzOThCNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WEFnZ3JlZ2F0ZVRhcmdldCAiRGVyaXZlZCBTb3VyY2VzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUJDOTUyRDc4
MTFGM0JGNUUwMDMzOThCNCAvKiBEZWJ1ZyAqLywKKwkJCQlCQzk1MkQ3OTExRjNCRjVFMDAzMzk4
QjQgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJs
ZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OwogLyog
RW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwogCX07CiAJcm9vdE9iamVjdCA9IDA4
RkI3NzkzRkU4NDE1NURDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKSW5kZXg6IFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL0luamVjdGVkQnVuZGxlR2VuZXJhdGVkLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9JbmplY3Rl
ZEJ1bmRsZUdlbmVyYXRlZC52Y3Byb2oJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL3dpbi9JbmplY3RlZEJ1bmRsZUdlbmVyYXRlZC52Y3Byb2oJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRv
d3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwg
QysrIg0KKwlWZXJzaW9uPSI4LjAwIg0KKwlOYW1lPSJJbmplY3RlZEJ1bmRsZUdlbmVyYXRlZCIN
CisJUHJvamVjdEdVSUQ9Ins0MzQzQkMwQi1BMkUwLTRCNDgtODI3Ny1GMzNDRkJGQTgzQ0R9Ig0K
KwlSb290TmFtZXNwYWNlPSJJbmplY3RlZEJ1bmRsZUdlbmVyYXRlZCINCisJS2V5d29yZD0iTWFr
ZUZpbGVQcm9qIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJX
aW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxl
cz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJhbGx8
V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFdlYktpdE91dHB1dERpcilcbGliIg0KKwkJ
CUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3RO
YW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJ
CQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFu
ZExpbmU9ImlmIGV4aXN0ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90
OyBncmVwIFhYJChQcm9qZWN0TmFtZSlYWCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRm
YWlsZWQmcXVvdDsmI3gwRDsmI3gwQTtpZiBlcnJvcmxldmVsIDEgZXhpdCAxJiN4MEQ7JiN4MEE7
ZWNobyBYWCQoUHJvamVjdE5hbWUpWFggJmd0OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVp
bGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtzZXQgUEFUSD0lU3lzdGVtRHJp
dmUlXGN5Z3dpblxiaW47JVBBVEglJiN4MEQ7JiN4MEE7YmFzaCBidWlsZC1nZW5lcmF0ZWQtZmls
ZXMuc2ggJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpJnF1b3Q7ICZxdW90OyQoV2ViS2l0TGlicmFy
aWVzRGlyKSZxdW90OyYjeDBEOyYjeDBBO2lmIGVycm9ybGV2ZWwgMSBleGl0IDEmI3gwRDsmI3gw
QTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWls
ZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYj
eDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJlY2hvIFhYJChQcm9qZWN0TmFt
ZSlYWCAmZ3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBE
OyYjeDBBOyYjeDBEOyYjeDBBO2RlbCAvcyAvcSAmcXVvdDskKFdlYktpdE91dHB1dERpcilcb2Jq
XEluamVjdGVkQnVuZGxlXERlcml2ZWRTb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4MEE7c2V0IFBBVEg9
JVN5c3RlbURyaXZlJVxjeWd3aW5cYmluOyVQQVRIJSYjeDBEOyYjeDBBO2Jhc2ggYnVpbGQtZ2Vu
ZXJhdGVkLWZpbGVzLnNoICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKSZxdW90OyAmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcikmcXVvdDsmI3gwRDsmI3gwQTtpZiBlcnJvcmxldmVsIDEgZXhpdCAx
JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWls
ZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9ImRlbCAvcyAvcSAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcb2JqXEluamVjdGVkQnVuZGxlXERlcml2ZWRTb3VyY2Vz
JnF1b3Q7JiN4MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxk
ZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVv
dDsmI3gwRDsmI3gwQTsiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0i
Ig0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVz
PSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9u
Pg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0K
Kwk8RmlsZXM+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxidWlsZC1nZW5lcmF0ZWQt
ZmlsZXMuc2giDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9
Ii4uXERlcml2ZWRTb3VyY2VzLm1ha2UiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwk8L0ZpbGVzPg0K
Kwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9JbmplY3Rl
ZEJ1bmRsZUdlbmVyYXRlZC52Y3Byb2oKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vYnVpbGQtZ2Vu
ZXJhdGVkLWZpbGVzLnNoCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvd2luL2J1aWxkLWdlbmVyYXRlZC1maWxlcy5zaAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL2J1aWxkLWdlbmVyYXRlZC1maWxlcy5zaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIyBDYWxscyB0byBgY3lncGF0aCAtbXNgIGJlbG93IGFyZSBuZWVkZWQgdG8gcmVtb3Zl
IHNwYWNlcyBmcm9tIHBhdGhzLCB3aGljaAorIyBjb25mdXNlIEdOVSBtYWtlLiBTZWUgPGh0dHA6
Ly93ZWJraXQub3JnL2IvODE3Mz4uCisKK1dlYktpdE91dHB1dERpcj0kKGN5Z3BhdGggLXUgIiQo
Y3lncGF0aCAtbXMgIiR7MX0iKSIpCitXZWJLaXRMaWJyYXJpZXNEaXI9JChjeWdwYXRoIC11ICIk
KGN5Z3BhdGggLW1zICIkezJ9IikiKQorRGVyaXZlZFNvdXJjZXM9IiR7V2ViS2l0T3V0cHV0RGly
fS9vYmovSW5qZWN0ZWRCdW5kbGUvRGVyaXZlZFNvdXJjZXMiCisKK2V4cG9ydCBXZWJLaXRUZXN0
UnVubmVyPSQoY3lncGF0aCAtdSAiJChjeWdwYXRoIC1tcyAiJChyZWFscGF0aCAuLikiKSIpCisK
K2lmIFsgLWUgIiR7V2ViS2l0T3V0cHV0RGlyfS9vYmovV2ViQ29yZS9zY3JpcHRzIiBdOyB0aGVu
CisgICAgZXhwb3J0IFdlYkNvcmVTY3JpcHRzPSIke1dlYktpdE91dHB1dERpcn0vb2JqL1dlYkNv
cmUvc2NyaXB0cyIKK2Vsc2UKKyAgICBleHBvcnQgV2ViQ29yZVNjcmlwdHM9IiR7V2ViS2l0TGli
cmFyaWVzRGlyfS90b29scy9zY3JpcHRzIgorZmkKKworbWtkaXIgLXAgIiR7RGVyaXZlZFNvdXJj
ZXN9IgorY2QgIiR7RGVyaXZlZFNvdXJjZXN9IgorCittYWtlIC1mICIke1dlYktpdFRlc3RSdW5u
ZXJ9L0Rlcml2ZWRTb3VyY2VzLm1ha2UiCg==
</data>
<flag name="review"
          id="50099"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>