<?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>138954</bug_id>
          
          <creation_ts>2014-11-21 02:38:32 -0800</creation_ts>
          <short_desc>Move TextIndicator{Window} to WebCore</short_desc>
          <delta_ts>2014-11-21 12:18:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1050401</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-21 02:38:32 -0800</bug_when>
    <thetext>Move TextIndicator{Window} to WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050402</commentid>
    <comment_count>1</comment_count>
      <attachid>242031</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-21 02:39:44 -0800</bug_when>
    <thetext>Created attachment 242031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050403</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 02:41:19 -0800</bug_when>
    <thetext>Attachment 242031 did not pass style-queue:


ERROR: Source/WebCore/page/mac/TextIndicatorWindow.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/mac/TextIndicatorWindow.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/mac/TextIndicatorWindow.mm:269:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/mac/WKViewInternal.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 32 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>1050426</commentid>
    <comment_count>3</comment_count>
      <attachid>242040</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 04:41:32 -0800</bug_when>
    <thetext>Created attachment 242040
Patch

patch for EWS with EFL buildfix: __MAC_OS_X_VERSION_MIN_REQUIRED is undefined on non MAC, PLATFORM(MAC) check is always needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050427</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 04:43:13 -0800</bug_when>
    <thetext>Attachment 242040 did not pass style-queue:


ERROR: Source/WebCore/page/mac/TextIndicatorWindow.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/mac/TextIndicatorWindow.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/mac/TextIndicatorWindow.mm:269:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/mac/WKViewInternal.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 32 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>1050428</commentid>
    <comment_count>5</comment_count>
      <attachid>242041</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 04:59:09 -0800</bug_when>
    <thetext>Created attachment 242041
Patch

patch for EWS with EFL and GTK buildfixes: setTextIndicator in PageClient.h shouldn&apos;t be Mac only, fix parameter list in PageClientImpl cpp files too. (no changelog update included)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050429</commentid>
    <comment_count>6</comment_count>
      <attachid>242031</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 05:00:38 -0800</bug_when>
    <thetext>Comment on attachment 242031
Patch

add back r? and remove the obsolete flag, since it was unintentional
(webkit-patch did it automatically without asking)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050430</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 05:02:39 -0800</bug_when>
    <thetext>Attachment 242041 did not pass style-queue:


ERROR: Source/WebCore/page/mac/TextIndicatorWindow.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/mac/TextIndicatorWindow.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/mac/TextIndicatorWindow.mm:269:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/mac/WKViewInternal.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 34 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>1050433</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 05:33:01 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created attachment 242040 [details]
&gt; Patch
&gt; 
&gt; patch for EWS with EFL buildfix: __MAC_OS_X_VERSION_MIN_REQUIRED is
&gt; undefined on non MAC, PLATFORM(MAC) check is always needed.

(In reply to comment #5)
&gt; Created attachment 242041 [details]
&gt; Patch
&gt; 
&gt; patch for EWS with EFL and GTK buildfixes: setTextIndicator in PageClient.h
&gt; shouldn&apos;t be Mac only, fix parameter list in PageClientImpl cpp files too.
&gt; (no changelog update included)

GTK and EFL build is happy now with the latest patch. If you agree with my 
fixes, feel free to upload it for review as is after updating the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050499</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-21 10:56:05 -0800</bug_when>
    <thetext>Thanks for the changes, Ossy! I&apos;ll mark yours for r? and update the changelog upon landing (because laziness).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050538</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-21 12:18:47 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/176462</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242031</attachid>
            <date>2014-11-21 02:39:44 -0800</date>
            <delta_ts>2014-11-21 10:56:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138954-20141121024000.patch</filename>
            <type>text/plain</type>
            <size>116215</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk3MTkwNWQwYmY3ZmYx
NzFmMWU5ZmExYTIzYmI1NzM2NDU4MmM0NC4uODE0MzBkOWViM2MyODRmYTk4YzEwOGM1NzhlNGM1
OTBkMTY0ZGQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTExLTIxICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgVGV4dElu
ZGljYXRvcntXaW5kb3d9IHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODk1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg5OTIx
ODU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
ZSBUZXh0SW5kaWNhdG9yIGFuZCBUZXh0SW5kaWNhdG9yV2luZG93IHRvIFdlYkNvcmUgc28gdGhh
dCBib3RoCisgICAgICAgIFdlYktpdHMgY2FuIHNoYXJlIHRoZSBpbXBsZW1lbnRhdGlvbi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICBCdWlsZCBUZXh0SW5kaWNhdG9yLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIEV4cG9ydCBUZXh0SW5kaWNhdG9y
e1dpbmRvd30gc3ltYm9scyBmb3IgdGhlIFdlYktpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcC4K
KyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmguCisgICAgICAgIFN0cmFpZ2hmb3J3YXJkIG1vdmUg
b2YgVGV4dEluZGljYXRvciBmcm9tIFdlYktpdDIsIGV4Y2VwdDoKKworICAgICAgICBNb3ZlIFRl
eHRJbmRpY2F0b3I6OkRhdGEgYW5kIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRp
b24gb3V0IGRpcmVjdGx5CisgICAgICAgIGludG8gdGhlIFdlYkNvcmUgbmFtZXNwYWNlIHRvIGFs
bG93IGZvciBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQyIGFyZ3VtZW50IGNvZGVycy4KKworICAg
ICAgICBVc2UgSW1hZ2UgaW5zdGVhZCBvZiBTaGFyZWFibGVCaXRtYXAgaW50ZXJuYWxseS4KKwor
ICAgICAgICBNb3ZlIHRoZSBUZXh0SW5kaWNhdG9yRGF0YSBlbmNvZGUvZGVjb2RlIHRvIFdlYkNv
cmVBcmd1bWVudENvZGVycy4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9U
ZXh0SW5kaWNhdG9yV2luZG93LmguCisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldp
bmRvdy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5tbS4KKyAgICAgICAgU3RyYWlnaGZvcndhcmQgbW92ZSBvZiBUZXh0SW5k
aWNhdG9yV2luZG93IGZyb20gV2ViS2l0Mi4KKwogMjAxNC0xMS0yMCAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU3VwcG9ydCB1bnByZWZpeGVkIGFuaW1hdGlvbiBl
dmVudCB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDYyYTRmMWQwY2IxY2YyZmMyMWMzMTRiYWE1OTBiZjFj
NWQyYTNiYjYuLjVlMDNkYzdkYmVhZWNmOTFkNDVlNDM5MmQ5NDBiYWJjMzQwNzAxOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxNC0xMS0yMSAgVGltIEhvcnRvbiAgPHRpbW90aHlf
aG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFRleHRJbmRpY2F0b3J7V2luZG93fSB0
byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzg5NTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4OTkyMTg1PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgIFJlbW92ZSBUZXh0SW5kaWNhdG9yLmNwcC4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAoc3RydWN0X29yX2NsYXNzKToKKyAgICAgICAgKGhl
YWRlcnNfZm9yX3R5cGUpOgorICAgICAgICBUZWxsIG1lc3NhZ2VzLnB5IHRoYXQgVGV4dEluZGlj
YXRvckRhdGEgaXMgYSBzdHJ1Y3QsIGFuZCBjb21lcyBmcm9tIFRleHRJbmRpY2F0b3IuaC4KKwor
ICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxUZXh0SW5kaWNhdG9yRGF0YT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29k
ZXI8VGV4dEluZGljYXRvckRhdGE+OjpkZWNvZGUpOgorICAgICAgICBBZGQgYXJndW1lbnQgY29k
ZXJzIGZvciBUZXh0SW5kaWNhdG9yRGF0YS4KKworICAgICAgICAqIFNoYXJlZC9EaWN0aW9uYXJ5
UG9wdXBJbmZvLmg6ICAgICAgICAKKyAgICAgICAgKiBTaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRU
ZXN0UmVzdWx0Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3Vs
dC5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xs
ZXIubW06CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkNvbnRleHRNZW51Q2xpZW50
TWFjLm1tOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICBBZGp1c3QgdG8gVGV4dEluZGljYXRv
ciBhbmQgVGV4dEluZGljYXRvcldpbmRvdydzIG5ldyBob21lLgorCiAyMDE0LTExLTIwICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJUQkYgYWZ0ZXIg
cjE3NjQyMCB0byBmaXggbm9uIEFwcGxlIGJ1aWxkcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
Nzk2MDQzZjhhZmJlNzJmODAxNzBlNGZlODEwZjBlZjAyZWMyMWYwMy4uZTA1NjNhNDhkODg3YTg2
NGE5MDhmNTllNTJmNGEwYWRjMzUzNDcyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5MzQs
NiArMTkzNCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdlL1NldHRpbmdzLmNwcAog
ICAgIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVy
LmNwcAorICAgIHBhZ2UvVGV4dEluZGljYXRvci5jcHAKICAgICBwYWdlL1VzZXJDb250ZW50Q29u
dHJvbGxlci5jcHAKICAgICBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKICAgICBwYWdl
L1Zpc2l0ZWRMaW5rU3RvcmUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGIzN2JmZmY4NGE4
NmU0ODk3YjFmZmRjZTdhNzNhMDBkMTU0MjgzMWIuLjMzOTA0MzNkNmY0ZmVmZGQ5MTQ2YWNiMGQ0
YTlkYTc0NTA4M2U3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yMjk5LDYgKzIyOTksMTAg
QEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXI3bW91c2VVcEVQN05TRXZlbnQKIF9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50RVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTJFdmVu
dEhhbmRsZXI5bW91c2VEb3duRVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTNEYXRhRGV0ZWN0aW9u
MjlkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdEVSS05TXzEzSGl0VGVzdFJlc3VsdEVSTlNf
OUZsb2F0UmVjdEVSTjNXVEY2UmVmUHRySU5TXzVSYW5nZUVFRQorX19aTjdXZWJDb3JlMTNUZXh0
SW5kaWNhdG9yMTVjcmVhdGVXaXRoUmFuZ2VFUktOU181UmFuZ2VFTlNfMzVUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbkUKK19fWk43V2ViQ29yZTEzVGV4dEluZGljYXRvcjI2Y3Jl
YXRlV2l0aFNlbGVjdGlvbkluRnJhbWVFUk5TXzVGcmFtZUVOU18zNVRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uRQorX19aTjdXZWJDb3JlMTNUZXh0SW5kaWNhdG9yNmNyZWF0ZUVS
S05TXzE3VGV4dEluZGljYXRvckRhdGFFCitfX1pON1dlYkNvcmUxM1RleHRJbmRpY2F0b3JEMUV2
CiBfX1pON1dlYkNvcmUxM2dldFJhd0Nvb2tpZXNFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lv
bkVSS05TXzNVUkxFUzVfUk4zV1RGNlZlY3RvcklOU182Q29va2llRUxqMEVOUzZfMTVDcmFzaE9u
T3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlGbG9hdFJlY3RF
UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTRjb29raWVzRW5hYmxlZEVSS05TXzIxTmV0d29ya1N0
b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVTNV8KQEAgLTIzMTMsNiArMjMxNyw5IEBAIF9fWk43V2Vi
Q29yZTE3U2Nyb2xsYmFyVGhlbWVNYWMyM3NldFVwT3ZlcmhhbmdBcmVhU2hhZG93RVA3Q0FMYXll
cgogX19aTjdXZWJDb3JlMTdTY3JvbGxiYXJUaGVtZU1hYzI0cmVtb3ZlT3ZlcmhhbmdBcmVhU2hh
ZG93RVA3Q0FMYXllcgogX19aTjdXZWJDb3JlMTdTY3JvbGxiYXJUaGVtZU1hYzI3c2V0VXBPdmVy
aGFuZ0FyZWFCYWNrZ3JvdW5kRVA3Q0FMYXllclJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlMTdT
Y3JvbGxiYXJUaGVtZU1hYzI4cmVtb3ZlT3ZlcmhhbmdBcmVhQmFja2dyb3VuZEVQN0NBTGF5ZXIK
K19fWk43V2ViQ29yZTE5VGV4dEluZGljYXRvcldpbmRvdzE2c2V0VGV4dEluZGljYXRvckVOM1dU
RjEwUGFzc1JlZlB0cklOU18xM1RleHRJbmRpY2F0b3JFRUViTlN0M19fMThmdW5jdGlvbklGdnZF
RUUKK19fWk43V2ViQ29yZTE5VGV4dEluZGljYXRvcldpbmRvd0MxRVA2TlNWaWV3CitfX1pON1dl
YkNvcmUxOVRleHRJbmRpY2F0b3JXaW5kb3dEMUV2CiBfX1pON1dlYkNvcmUxOWFwcGxpY2F0aW9u
SXNTYWZhcmlFdgogX19aTjdXZWJDb3JlMjBQbGF0Zm9ybUV2ZW50RmFjdG9yeTI0Y3JlYXRlUGxh
dGZvcm1Nb3VzZUV2ZW50RVA3TlNFdmVudFA2TlNWaWV3CiBfX1pON1dlYkNvcmUyMFBsYXRmb3Jt
RXZlbnRGYWN0b3J5MjdjcmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnRFUDdOU0V2ZW50CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YjU3ZDAwZmNmNjBkZWJjYTAxNDgzMTNhNWViMjdlYWZlZmNkYmUxNS4uZDM0NDE0ODJiODU4ZDFj
NGU5MWNkZWQ5M2ZiMzYyNGMxOTc5NzUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEwNSw2ICsxMTA1LDEwIEBACiAJCTJE
NDgxRjAyMTQ2QjVDNTUwMEFBNzgzNCAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyRkMwNTUxNDYwQ0Q2
RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi87IH07CiAJCTJENDgxRjAz
MTQ2QjVDNjUwMEFBNzgzNCAvKiBHcmFkaWVudEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMkZDMDU2MTQ2MENENkYwMDI2MzYzMyAvKiBH
cmFkaWVudEltYWdlLmNwcCAqLzsgfTsKIAkJMkQ0ODFGMDQxNDZCNUM2QjAwQUE3ODM0IC8qIEdy
YWRpZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMkZDMDU3MTQ2MENENkYwMDI2MzYzMyAvKiBHcmFkaWVudEltYWdlLmggKi87IH07CisJ
CTJENEY5NkY1MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENEY5NkYxMUExRUNDMjQwMDk4
QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmNwcCAqLzsgfTsKKwkJMkQ0Rjk2RjYxQTFFQ0MyNDAwOThC
Rjg4IC8qIFRleHRJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJENEY5NkYyMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkQ0Rjk2
RjcxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENEY5NkYzMUExRUNDMjQwMDk4QkY4
OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkQ0Rjk2RjgxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRp
Y2F0b3JXaW5kb3cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDRGOTZGNDFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvcldpbmRvdy5tbSAq
LzsgfTsKIAkJMkQ1OEQ4NTUxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENThEODUzMUExNUY2
NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1OEQ4NTYxQTE1RjY1RjAwQTVGNzI2IC8qIERhdGFE
ZXRlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDU4RDg1NDFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5tbSAqLzsgfTsKIAkJ
MkQ1OUYxQkYxQTAwNDRDNjAwMUYzRDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENTlGMUJFMUEwMDQ0QzYwMDFG
M0QyOSAvKiBEYXRhRGV0ZWN0b3JzU1BJLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgxMzUsNiArODEzOSwxMCBAQAogCQkyRDQxM0Y2MDFBMTg3
QTNGMDA0MUE1MjEgLyogTG9va3VwU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvb2t1cFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDQ2RjA0RDE3
Qjk2RkJEMDA1NjQ3RjAgLyogSW50UG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW50UG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMkQ0Rjk2RjExQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEluZGljYXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENEY5NkYyMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0
SW5kaWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbmRpY2F0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ0Rjk2RjMxQTFFQ0MyNDAwOThC
Rjg4IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dEluZGljYXRvcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRDRGOTZGNDFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvcldpbmRvdy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRJbmRpY2F0b3JXaW5kb3cu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENThEODUzMUExNUY2NUYwMEE1Rjcy
NiAvKiBEYXRhRGV0ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERh
dGFEZXRlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1OEQ4NTQxQTE1
RjY1RjAwQTVGNzI2IC8qIERhdGFEZXRlY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRDU5RjFCRTFBMDA0NEM2MDAxRjNEMjkgLyogRGF0YURldGVjdG9yc1NQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JzU1BJLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjcyNyw2ICsxNjczNSw4IEBACiAJCQkJNjI2Q0RF
MEQxMTQwNDI0QzAwMUU1QTY4IC8qIFNwYXRpYWxOYXZpZ2F0aW9uLmggKi8sCiAJCQkJNjJDMTIx
N0ExMUFCOUU3NjAwM0M0NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIuY3BwICovLAogCQkJCTYyQzEy
MTdCMTFBQjlFNzcwMDNDNDYyQyAvKiBTdXNwZW5kYWJsZVRpbWVyLmggKi8sCisJCQkJMkQ0Rjk2
RjExQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuY3BwICovLAorCQkJCTJENEY5NkYy
MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmggKi8sCiAJCQkJMUFFNzlENDAxODhE
QjYxRjAwMjIzOUMyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUFFNzlE
NDExODhEQjYxRjAwMjIzOUMyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5oICovLAogCQkJCTAw
M0YxRkU5MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5cGVzLmggKi8sCkBAIC0xNzYz
NCw2ICsxNzY0NCw4IEBACiAJCQkJMkQ5M0FFRTExOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQkyRDkzQUVFMjE5REY1NjQxMDAyQTg2QzMgLyog
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSAqLywKIAkJCQlFMUMyRjI0ODE1MzNBMjEyMDA4
M0Y5NzQgLyogU2V0dGluZ3NNYWMubW0gKi8sCisJCQkJMkQ0Rjk2RjMxQTFFQ0MyNDAwOThCRjg4
IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCAqLywKKwkJCQkyRDRGOTZGNDFBMUVDQzI0MDA5OEJG
ODggLyogVGV4dEluZGljYXRvcldpbmRvdy5tbSAqLywKIAkJCQkyNjI1NUYwMjE4ODc4RTExMDAw
NkUxRkQgLyogVXNlckFnZW50TWFjLm1tICovLAogCQkJCUY1ODc4NTRDMDJERTM3NTkwMUVBNDEy
MiAvKiBXZWJDb3JlRnJhbWVWaWV3LmggKi8sCiAJCQkpOwpAQCAtMjM1NDMsNiArMjM1NTUsNyBA
QAogCQkJCUJDNUVCNURCMEU4MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNkVEOEMzN0ExODNCRkY4QzAwOUU1M0JEIC8qIEJveFNoYXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0VBNDg1NTA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTJENEY5NkY2MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUREQjA5OUU2NDkyMDA1NkU1ODEgLyogQnJl
YWtCbG9ja3F1b3RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk5RTc1OTAxMTA1NUEx
RjAwRDkwNEZBIC8qIEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlCNTk3NzUxMTA4NjU3
OTAwNzE1OUU4IC8qIEJyaWRnZUpTQy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjEwNCw2ICsyNjEx
Nyw3IEBACiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTI1MDIzMTVEQ0UzN0QwMDJGODRFMiAv
KiBTcGluQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTIwOTlFNjQ5
MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJE
NEY5NkY3MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1h
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxp
dFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NDczMEQ5MzEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI3NjM1LDYgKzI3NjQ5LDcgQEAKIAkJCQk4NURGMkVFRTBBQTM4N0NCMDBBRDY0QzUg
LyogRE9NSFRNTEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUMwNTBCQjBBRDg0RjVF
MDA1NTMyRTcgLyogRE9NSFRNTEVtYmVkRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
QkE0Q0UwMEFBNjg2MUIwMDg4MDUyRCAvKiBET01IVE1MRmllbGRTZXRFbGVtZW50Lm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJMkQ0Rjk2RjgxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3JX
aW5kb3cubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUVDQkVGMDBBQTc2MjY5MDA1NDRGMEIgLyog
RE9NSFRNTEZvbnRFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjJDNUQwQUEzNDFG
NjAwQUQ2NEM1IC8qIERPTUhUTUxGb3JtRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
REY4MTk2MEFBNzdFNEIwMDQ4NkFENyAvKiBET01IVE1MRnJhbWVFbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCkBAIC0yOTU0Miw2ICsyOTU1Nyw3IEBACiAJCQkJRkU4QTY3NDcxNkNERDE5RTAwOTMw
QkY4IC8qIFNRTFN0YXRlbWVudEJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZB
NEQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBNEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTJENEY5NkY1MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRTE4MTEzMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxU
cmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVBRDdEODcxNkMzMzlF
RTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBNTQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmVhNmIyMTA5NTNiY2UyNjg5Yjg0Nzc2ZTU3NzliYzMxZTIwMTJmNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTAsMCAr
MSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4
dEluZGljYXRvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiRnJhbWVTbmFwc2hvdHRp
bmcuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgdmFsdWVzIGluIFRl
eHRJbmRpY2F0b3JXaW5kb3cuCisvLyBGSVhNRTogSWRlYWxseSB0aGVzZSB3b3VsZCBvbmx5IGJl
IGluIG9uZSBwbGFjZS4KKyNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQor
Y29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDM7Citjb25zdCBmbG9hdCB2ZXJ0aWNhbEJv
cmRlciA9IDE7Citjb25zdCBmbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEuNTsKKyNlbHNl
Citjb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVyID0gMjsKK2NvbnN0IGZsb2F0IHZlcnRpY2Fs
Qm9yZGVyID0gMTsKK2NvbnN0IGZsb2F0IGRyb3BTaGFkb3dCbHVyUmFkaXVzID0gMTI7CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgRmxvYXRSZWN0IG91dHNldEluZGlj
YXRvclJlY3RJbmNsdWRpbmdTaGFkb3coY29uc3QgRmxvYXRSZWN0IHJlY3QpCit7CisgICAgRmxv
YXRSZWN0IG91dHNldFJlY3QgPSByZWN0OworICAgIG91dHNldFJlY3QuaW5mbGF0ZVgoZHJvcFNo
YWRvd0JsdXJSYWRpdXMgKyBob3Jpem9udGFsQm9yZGVyKTsKKyAgICBvdXRzZXRSZWN0LmluZmxh
dGVZKGRyb3BTaGFkb3dCbHVyUmFkaXVzICsgdmVydGljYWxCb3JkZXIpOworICAgIHJldHVybiBv
dXRzZXRSZWN0OworfQorCitzdGF0aWMgYm9vbCB0ZXh0SW5kaWNhdG9yc0ZvclRleHRSZWN0c092
ZXJsYXAoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0cykKK3sKKyAgICBzaXplX3Qg
Y291bnQgPSB0ZXh0UmVjdHMuc2l6ZSgpOworICAgIGlmIChjb3VudCA8PSAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBpbmRpY2F0b3JSZWN0czsKKyAg
ICBpbmRpY2F0b3JSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBGbG9hdFJlY3QgaW5k
aWNhdG9yUmVjdCA9IG91dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFkb3codGV4dFJlY3Rz
W2ldKTsKKworICAgICAgICBmb3IgKHNpemVfdCBqID0gaW5kaWNhdG9yUmVjdHMuc2l6ZSgpOyBq
OyApIHsKKyAgICAgICAgICAgIC0tajsKKyAgICAgICAgICAgIGlmIChpbmRpY2F0b3JSZWN0Lmlu
dGVyc2VjdHMoaW5kaWNhdG9yUmVjdHNbal0pKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgaW5kaWNhdG9yUmVjdHMudW5jaGVja2VkQXBwZW5kKGlu
ZGljYXRvclJlY3QpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0
cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRv
ckRhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0SW5kaWNhdG9yKGRh
dGEpKTsKK30KKworUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIEZyYW1lKiBmcmFtZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBv
bGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigmcmFuZ2UpOworCisgICAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZy
YW1lKCpmcmFtZSwgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisKKyAgICBmcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgCisgICAgcmV0dXJuIGluZGlj
YXRvci5yZWxlYXNlKCk7Cit9CisKKy8vIEZJWE1FICgxMzg4ODkpOiBJZGVhbGx5IHRoZSBGcmFt
ZVNuYXBzaG90dGluZyBmdW5jdGlvbnMgd291bGQgYmUgbW9yZSBmbGV4aWJsZQorLy8gYW5kIHdl
IHdvdWxkbid0IGhhdmUgdG8gaW1wbGVtZW50IHRoaXMgaGVyZS4KK3N0YXRpYyBQYXNzUmVmUHRy
PEltYWdlPiBzbmFwc2hvdFNlbGVjdGlvbldpdGhIaWdobGlnaHQoRnJhbWUmIGZyYW1lKQorewor
ICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOworCisgICAgaWYgKCFzZWxl
Y3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZsb2F0UmVj
dCBzZWxlY3Rpb25Cb3VuZHMgPSBzZWxlY3Rpb24uc2VsZWN0aW9uQm91bmRzKCk7CisKKyAgICAv
LyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBib3VuZHMgdG8gYmUgZW1wdHk7IHNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NDUuCisgICAgaWYg
KHNlbGVjdGlvbkJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVS
ZWN0KGZyYW1lLCBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kcyksIDApOworCisgICAg
aWYgKCFzbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc25h
cHNob3QtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7Cit9CisKK1Bhc3NS
ZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbklu
RnJhbWUoRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBw
cmVzZW50YXRpb25UcmFuc2l0aW9uKQoreworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOworICAg
IFJlZlB0cjxJbWFnZT4gaW5kaWNhdG9yQml0bWFwID0gc25hcHNob3RTZWxlY3Rpb24oZnJhbWUs
IFNuYXBzaG90T3B0aW9uc0ZvcmNlQmxhY2tUZXh0KS0+Y29weUltYWdlKENvcHlCYWNraW5nU3Rv
cmUsIFVuc2NhbGVkKTsKKyAgICBpZiAoIWluZGljYXRvckJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGluZGljYXRvckJpdG1hcFdpdGhIaWdobGln
aHQ7CisgICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5kaWNhdG9y
Qml0bWFwV2l0aEhpZ2hsaWdodCA9IHNuYXBzaG90U2VsZWN0aW9uV2l0aEhpZ2hsaWdodChmcmFt
ZSk7CisKKyAgICAvLyBTdG9yZSB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5h
dGVzLCB0byBiZSB1c2VkIHN1YnNlcXVlbnRseQorICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUg
aW5kaWNhdG9yIGFuZCBzZWxlY3Rpb24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCisgICAgSW50
UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IGZyYW1lLnZpZXcoKS0+Y29u
dGVudHNUb1dpbmRvdyhzZWxlY3Rpb25SZWN0KTsKKworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRl
eHRSZWN0czsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5nZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0
YW5nbGVzKHRleHRSZWN0cyk7CisKKyAgICAvLyBUaGUgYm91bmRpbmcgcmVjdCBvZiBhbGwgdGhl
IHRleHQgcmVjdHMgY2FuIGJlIGRpZmZlcmVudCB0aGFuIHRoZSBzZWxlY3Rpb24KKyAgICAvLyBy
ZWN0IHdoZW4gdGhlIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBsaW5lczsgdGhlIGluZGljYXRv
ciBkb2Vzbid0IGFjdHVhbGx5CisgICAgLy8gY2FyZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGhpZ2hs
aWdodCBnb2VzLCBqdXN0IHdoZXJlIHRoZSB0ZXh0IGFjdHVhbGx5IGlzLgorICAgIEZsb2F0UmVj
dCB0ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBWZWN0b3I8RmxvYXRS
ZWN0PiB0ZXh0UmVjdHNJbldpbmRvd0Nvb3JkaW5hdGVzOworICAgIGZvciAoY29uc3QgRmxvYXRS
ZWN0JiB0ZXh0UmVjdCA6IHRleHRSZWN0cykgeworICAgICAgICBGbG9hdFJlY3QgdGV4dFJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xv
c2luZ0ludFJlY3QodGV4dFJlY3QpKTsKKyAgICAgICAgdGV4dFJlY3RzSW5XaW5kb3dDb29yZGlu
YXRlcy5hcHBlbmQodGV4dFJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICAgICAgdGV4dEJv
dW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5k
aW5nUmVjdENvb3JkaW5hdGVzOworICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5XaW5k
b3dDb29yZGluYXRlcykgeworICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7CisgICAgICAgIHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOworICAgIH0KKworICAgIFRleHRJbmRpY2F0
b3JEYXRhIGRhdGE7CisgICAgZGF0YS5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9
IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOworICAgIGRhdGEudGV4dEJvdW5kaW5n
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSB0ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGlu
YXRlczsKKyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOworICAgIGRhdGEuY29udGVudEltYWdlU2Nh
bGVGYWN0b3IgPSBmcmFtZS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZGF0YS5j
b250ZW50SW1hZ2UgPSBpbmRpY2F0b3JCaXRtYXA7CisgICAgZGF0YS5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0ID0gaW5kaWNhdG9yQml0bWFwV2l0aEhpZ2hsaWdodDsKKyAgICBkYXRhLnByZXNl
bnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOworCisgICAgcmV0dXJu
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkYXRhKTsKK30KKworVGV4dEluZGljYXRvcjo6VGV4dElu
ZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKKyAgICA6IG1fZGF0YShkYXRh
KQoreworICAgIEFTU0VSVChtX2RhdGEuY29udGVudEltYWdlU2NhbGVGYWN0b3IgIT0gMSB8fCBt
X2RhdGEuY29udGVudEltYWdlLT5zaXplKCkgPT0gZW5jbG9zaW5nSW50UmVjdChtX2RhdGEuc2Vs
ZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpLnNpemUoKSk7CisKKyAgICBpZiAodGV4dElu
ZGljYXRvcnNGb3JUZXh0UmVjdHNPdmVybGFwKG1fZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVj
dENvb3JkaW5hdGVzKSkgeworICAgICAgICBtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlc1swXSA9IHVuaW9uUmVjdChtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcyk7CisgICAgICAgIG1fZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3Jk
aW5hdGVzLnNocmluaygxKTsKKyAgICB9Cit9CisKK1RleHRJbmRpY2F0b3I6On5UZXh0SW5kaWNh
dG9yKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzBjNjNlNzM4MDQxYmU2OThhM2Y4NWVkYzQ3OTlhYzBl
OTdhNjVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dEluZGljYXRv
cl9oCisjZGVmaW5lIFRleHRJbmRpY2F0b3JfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTAwMAorI2RlZmluZSBFTkFCTEVfTEVHQUNZ
X1RFWFRfSU5ESUNBVE9SX1NUWUxFIDEKKyNlbHNlCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVY
VF9JTkRJQ0FUT1JfU1RZTEUgMAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBSYW5nZTsKKworZW51bSBj
bGFzcyBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiB7CisgICAgTm9uZSwKKyAg
ICBCb3VuY2UsCisgICAgQm91bmNlQW5kQ3Jvc3NmYWRlCit9OworCitzdHJ1Y3QgVGV4dEluZGlj
YXRvckRhdGEgeworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
czsKKyAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Cisg
ICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsK
KyAgICBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICBSZWZQdHI8SW1hZ2U+IGNv
bnRlbnRJbWFnZVdpdGhIaWdobGlnaHQ7CisgICAgUmVmUHRyPEltYWdlPiBjb250ZW50SW1hZ2U7
CisgICAgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJh
bnNpdGlvbjsKK307CisKK2NsYXNzIFRleHRJbmRpY2F0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxU
ZXh0SW5kaWNhdG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGlj
YXRvcj4gY3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmLCBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiwgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pOworCisgICAgflRleHRJbmRpY2F0b3IoKTsKKwor
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIEZs
b2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXM7IH0KKyAgICBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsgfQorICAgIEltYWdlICpjb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVdpdGhI
aWdobGlnaHQuZ2V0KCk7IH0KKyAgICBJbWFnZSAqY29udGVudEltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmNvbnRlbnRJbWFnZS5nZXQoKTsgfQorICAgIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2RhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbjsgfQorCisgICAgdm9pZCBzZXRQcmVzZW50YXRp
b25UcmFuc2l0aW9uKFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHRyYW5zaXRp
b24pIHsgbV9kYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSB0cmFuc2l0aW9uOyB9CisKKyAg
ICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKK3By
aXZhdGU6CisgICAgVGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYpOworCisg
ICAgVGV4dEluZGljYXRvckRhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBUZXh0SW5kaWNhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWQyMTQwZWQ3ZTgyOTQwMTc5NGNj
NDQ1Y2M5NGI2MjdjZWY0ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRleHRJbmRpY2F0b3JXaW5kb3dfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yV2lu
ZG93X2gKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8ZnVuY3Rpb25hbD4KKyNpbXBv
cnQgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKworQGNsYXNzIE5TVmll
dzsKK0BjbGFzcyBXZWJUZXh0SW5kaWNhdG9yVmlldzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBUZXh0SW5kaWNhdG9yOworCitjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0SW5kaWNhdG9yV2luZG93KTsKKworcHVibGljOgor
ICAgIGV4cGxpY2l0IFRleHRJbmRpY2F0b3JXaW5kb3coTlNWaWV3ICopOworICAgIH5UZXh0SW5k
aWNhdG9yV2luZG93KCk7CisKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxU
ZXh0SW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFuaW1h
dGlvbkNvbXBsZXRpb25IYW5kbGVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNsb3NlV2luZG93
KCk7CisKKyAgICB2b2lkIHN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKTsKKworICAgIE5TVmlldyAq
bV90YXJnZXRWaWV3OworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBtX3RleHRJbmRpY2F0b3I7
CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBtX3RleHRJbmRpY2F0b3JXaW5kb3c7CisgICAgUmV0
YWluUHRyPFdlYlRleHRJbmRpY2F0b3JWaWV3PiBtX3RleHRJbmRpY2F0b3JWaWV3OworCisgICAg
UnVuTG9vcDo6VGltZXI8VGV4dEluZGljYXRvcldpbmRvdz4gbV9zdGFydEZhZGVPdXRUaW1lcjsK
KworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV9ib3VuY2VBbmltYXRpb25Db21wbGV0aW9u
SGFuZGxlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVGV4dElu
ZGljYXRvcldpbmRvd19oCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWM0MjZj
NzU3NmFjZGY0YTg5YzY1NWFhNDA3ZTMzZGY0YmFjMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpAQCAtMCwwICsxLDMz
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGV4dEluZGlj
YXRvcldpbmRvdy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbXBvcnQgIlF1YXJ0ekNvcmVTUEkuaCIKKyNpbXBvcnQgIlRleHRJbmRpY2F0
b3IuaCIKKyNpbXBvcnQgIldlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZS5oIgorCitj
b25zdCBDRlRpbWVJbnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Citjb25z
dCBDRlRpbWVJbnRlcnZhbCBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAw
LjM7Citjb25zdCBDRlRpbWVJbnRlcnZhbCB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFu
aW1hdGlvbkR1cmF0aW9uICsgMC4yOworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZmFkZU91dEFuaW1h
dGlvbkR1cmF0aW9uID0gMC4zOworCisjaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9T
VFlMRSkKK2NvbnN0IENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAxLjU7Citjb25zdCBDR0Zsb2F0
IGhvcml6b250YWxCb3JkZXIgPSAzOworY29uc3QgQ0dGbG9hdCB2ZXJ0aWNhbEJvcmRlciA9IDE7
Citjb25zdCBDR0Zsb2F0IGJvcmRlcldpZHRoID0gMS4wOworY29uc3QgQ0dGbG9hdCBjb3JuZXJS
YWRpdXMgPSAzOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Citjb25zdCBD
R0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0gMTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0Js
dXJSYWRpdXMgPSAxLjU7CisjZWxzZQorY29uc3QgQ0dGbG9hdCBtaWRCb3VuY2VTY2FsZSA9IDEu
MjsKK2NvbnN0IENHRmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDI7Citjb25zdCBDR0Zsb2F0IHZl
cnRpY2FsQm9yZGVyID0gMTsKK2NvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGggPSAwOworY29uc3Qg
Q0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAwOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0
WCA9IDA7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0gNTsKK2NvbnN0IENHRmxv
YXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAxMjsKK2NvbnN0IENHRmxvYXQgcmltU2hhZG93Qmx1
clJhZGl1cyA9IDI7CisjZW5kaWYKKworTlNTdHJpbmcgKnRleHRMYXllcktleSA9IEAiVGV4dExh
eWVyIjsKK05TU3RyaW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBAIkRyb3BTaGFkb3dMYXllciI7
CitOU1N0cmluZyAqcmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNoYWRvd0xheWVyIjsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViVGV4dEluZGljYXRvclZpZXcg
OiBOU1ZpZXcgeworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRvcjsKKyAg
ICBSZXRhaW5QdHI8TlNBcnJheT4gX2JvdW5jZUxheWVyczsKKyAgICBOU1NpemUgX21hcmdpbjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5k
aWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgbWFyZ2luOihO
U1NpemUpbWFyZ2luOworCistICh2b2lkKXByZXNlbnRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdlYlRleHRJbmRpY2F0b3JWaWV3CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgdGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxUZXh0SW5k
aWNhdG9yPil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdpbgoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgX3RleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yOworICAgIF9tYXJnaW4gPSBt
YXJnaW47CisKKyAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CisgICAgc2VsZi5sYXllci5hbmNo
b3JQb2ludCA9IENHUG9pbnRaZXJvOworCisgICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9IF90ZXh0
SW5kaWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgPT0gVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZTsKKworICAgIEZsb2F0U2l6ZSBj
b250ZW50c0ltYWdlTG9naWNhbFNpemUgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCkt
PnNpemUoKTsKKyAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5k
aWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY29udGVudHNJbWFnZTsKKyAgICBpZiAod2FudHNDcm9zc2ZhZGUpCisgICAgICAgIGNv
bnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgp
LT5nZXRDR0ltYWdlUmVmKCk7CisgICAgZWxzZQorICAgICAgICBjb250ZW50c0ltYWdlID0gX3Rl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisKKyAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF0pOworCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdo
dENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOjEgZ3JlZW46MSBibHVlOjAgYWxw
aGE6MV0uQ0dDb2xvcjsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gcmltU2hhZG93Q29sb3Ig
PSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMTVdLkNHQ29sb3I7Cisg
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IFtOU0NvbG9yIGNvbG9y
V2l0aERldmljZVdoaXRlOjAgYWxwaGE6MC4yXS5DR0NvbG9yOworCisgICAgUmV0YWluUHRyPENH
Q29sb3JSZWY+IGJvcmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NiBn
cmVlbjouOTAgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JS
ZWY+IGdyYWRpZW50RGFya0NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45Mjkg
Z3JlZW46LjggYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JS
ZWY+IGdyYWRpZW50TGlnaHRDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDouOTQ5
IGdyZWVuOi45MzcgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7CisKKyAgICBmb3IgKGF1dG8mIHRl
eHRSZWN0IDogX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXMoKSkgeworICAgICAgICBGbG9hdFJlY3QgYm91bmNlTGF5ZXJSZWN0ID0gdGV4dFJlY3Q7Cisg
ICAgICAgIGJvdW5jZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVpZ2h0
KTsKKyAgICAgICAgYm91bmNlTGF5ZXJSZWN0LmluZmxhdGVYKGhvcml6b250YWxCb3JkZXIpOwor
ICAgICAgICBib3VuY2VMYXllclJlY3QuaW5mbGF0ZVkodmVydGljYWxCb3JkZXIpOworCisgICAg
ICAgIFJldGFpblB0cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFs
bG9jXSBpbml0XSk7CisgICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbYm91bmNlTGF5ZXIg
c2V0RnJhbWU6Ym91bmNlTGF5ZXJSZWN0XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIHNldE9wYWNp
dHk6MF07CisgICAgICAgIFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5jZUxheWVyLmdldCgp
XTsKKworICAgICAgICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCks
IGJvdW5jZUxheWVyUmVjdC5zaXplKCkpOworICAgICAgICAvLyBGSVhNRSAoMTM4ODg4KTogSWRl
YWxseSB3ZSB3b3VsZG4ndCByZW1vdmUgdGhlIG1hcmdpbiBpbiB0aGlzIGNhc2UsIGJ1dCB3ZSBu
ZWVkIHRvCisgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB5ZWxsb3cgaGlnaGxpZ2h0IGFuZCBj
b250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0IG92ZXJsYXAgcHJlY2lzZWx5LgorICAgICAgICBpZiAo
d2FudHNDcm9zc2ZhZGUpIHsKKyAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdodFJlY3QuaW5mbGF0
ZVgoLWhvcml6b250YWxCb3JkZXIpOworICAgICAgICAgICAgeWVsbG93SGlnaGxpZ2h0UmVjdC5p
bmZsYXRlWSgtdmVydGljYWxCb3JkZXIpOworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRy
PENBTGF5ZXI+IGRyb3BTaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0
XSk7CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2Fi
bGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBz
ZXRTaGFkb3dDb2xvcjpkcm9wU2hhZG93Q29sb3IuZ2V0KCldOworICAgICAgICBbZHJvcFNoYWRv
d0xheWVyIHNldFNoYWRvd1JhZGl1czpkcm9wU2hhZG93Qmx1clJhZGl1c107CisgICAgICAgIFtk
cm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJvcFNoYWRvd09mZnNl
dFgsIGRyb3BTaGFkb3dPZmZzZXRZKV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hh
ZG93UGF0aElzQm91bmRzOllFU107CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93
T3BhY2l0eToxXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdo
bGlnaHRSZWN0XTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3JuZXJSYWRpdXM6Y29y
bmVyUmFkaXVzXTsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOmRyb3BTaGFkb3dM
YXllci5nZXQoKV07CisgICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpkcm9wU2hhZG93TGF5
ZXIuZ2V0KCkgZm9yS2V5OmRyb3BTaGFkb3dMYXllcktleV07CisKKyNpZiAhRU5BQkxFKExFR0FD
WV9URVhUX0lORElDQVRPUl9TVFlMRSkKKyAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJpbVNo
YWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3Jp
bVNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdh
dGUgc2hhcmVkXV07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdo
bGlnaHRSZWN0XTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOnJpbVNo
YWRvd0NvbG9yLmdldCgpXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1
czpyaW1TaGFkb3dCbHVyUmFkaXVzXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRv
d1BhdGhJc0JvdW5kczpZRVNdOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zm
c2V0OkNHU2l6ZVplcm9dOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0
eToxXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJl
Y3RdOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1
c107CisgICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFkb3dMYXllci5nZXQo
KV07CisgICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dMYXllci5nZXQoKSBm
b3JLZXk6cmltU2hhZG93TGF5ZXJLZXldOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZX1RF
WFRfSU5ESUNBVE9SX1NUWUxFKQorICAgICAgICBSZXRhaW5QdHI8Q0FHcmFkaWVudExheWVyPiB0
ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBpbml0XSk7CisgICAg
ICAgIFt0ZXh0TGF5ZXIgc2V0Q29sb3JzOkBbIChpZClncmFkaWVudExpZ2h0Q29sb3IuZ2V0KCks
IChpZClncmFkaWVudERhcmtDb2xvci5nZXQoKSBdXTsKKyNlbHNlCisgICAgICAgIFJldGFpblB0
cjxDQUxheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwor
I2VuZGlmCisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmhpZ2hsaWdodENv
bG9yLmdldCgpXTsKKyAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xv
ci5nZXQoKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ym9yZGVyV2lkdGhd
OworICAgICAgICBbdGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxh
eWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHM6KGlk
KWNvbnRlbnRzSW1hZ2UuZ2V0KCldOworCisgICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSB0
ZXh0UmVjdDsKKyAgICAgICAgaW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0b3ItPnRleHRCb3Vu
ZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkubG9jYXRpb24oKSAtIF90ZXh0SW5kaWNhdG9y
LT5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpLmxvY2F0aW9uKCkpOworICAgICAg
ICBbdGV4dExheWVyIHNldENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdlUmVjdC54KCkgLyBj
b250ZW50c0ltYWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LnkoKSAvIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkgLyBjb250ZW50c0lt
YWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8gY29udGVudHNJbWFn
ZUxvZ2ljYWxTaXplLmhlaWdodCgpKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNH
cmF2aXR5OmtDQUdyYXZpdHlDZW50ZXJdOworICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRz
U2NhbGU6X3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCldOworICAgICAg
ICBbdGV4dExheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICBbdGV4
dExheWVyIHNldENvcm5lclJhZGl1czpjb3JuZXJSYWRpdXNdOworICAgICAgICBbYm91bmNlTGF5
ZXIgc2V0VmFsdWU6dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJLZXldOworICAgICAg
ICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsKKyAgICB9CisKKyAg
ICBzZWxmLmxheWVyLnN1YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKKyAgICBfYm91bmNl
TGF5ZXJzID0gYm91bmNlTGF5ZXJzOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
cHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlcgoreworICAgIGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGljYXRvci0+cHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbigpID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpCb3VuY2VBbmRDcm9zc2ZhZGU7CisgICAgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uID0gd2Fu
dHNDcm9zc2ZhZGUgPyBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gOiBib3Vu
Y2VBbmltYXRpb25EdXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4g
Ym91bmNlQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBh
dGg6QCJ0cmFuc2Zvcm0iXTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldFZhbHVlczpAWworICAg
ICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RJZGVudGl0
eV0sCisgICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0z
RE1ha2VTY2FsZShtaWRCb3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUsIDEpXSwKKyAgICAgICAg
W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHldCisg
ICAgICAgIF1dOworICAgIFtib3VuY2VBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVy
YXRpb25dOworCisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1h
dGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gZmFkZVNoYWRvd0luQW5pbWF0
aW9uOworICAgIGlmICh3YW50c0Nyb3NzZmFkZSkgeworICAgICAgICBjcm9zc2ZhZGVBbmltYXRp
b24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07
CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gX3RleHRJbmRp
Y2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIFtjcm9zc2Zh
ZGVBbmltYXRpb24gc2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFnZS5nZXQoKV07CisgICAgICAg
IFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Cisg
ICAgICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Cisg
ICAgICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25d
OworCisgICAgICAgIGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFu
aW1hdGlvbldpdGhLZXlQYXRoOkAic2hhZG93T3BhY2l0eSJdOworICAgICAgICBbZmFkZVNoYWRv
d0luQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMF07CisgICAgICAgIFtmYWRlU2hhZG93SW5Bbmlt
YXRpb24gc2V0VG9WYWx1ZTpAMV07CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0
RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgICAgIFtmYWRlU2hhZG93SW5Bbmlt
YXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgICAgIFtmYWRlU2hhZG93SW5B
bmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworICAgIH0KKworICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxv
Y2s6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGZvciAoQ0FMYXllciogYm91bmNlTGF5ZXIgaW4g
X2JvdW5jZUxheWVycy5nZXQoKSkgeworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eTox
XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZEFuaW1hdGlvbjpib3VuY2VBbmltYXRpb24uZ2V0
KCkgZm9yS2V5OkAiYm91bmNlIl07CisgICAgICAgIGlmICh3YW50c0Nyb3NzZmFkZSkgeworICAg
ICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTp0ZXh0TGF5ZXJLZXldIGFkZEFuaW1h
dGlvbjpjcm9zc2ZhZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiY29udGVudFRyYW5zaXRpb24i
XTsKKyAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6ZHJvcFNoYWRvd0xheWVy
S2V5XSBhZGRBbmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZh
ZGVTaGFkb3dJbiJdOworICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpyaW1T
aGFkb3dMYXllcktleV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBm
b3JLZXk6QCJmYWRlU2hhZG93SW4iXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBbQ0FUcmFuc2Fj
dGlvbiBjb21taXRdOworfQorCistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0Fu
aW1hdGlvbj4gZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhL
ZXlQYXRoOkAib3BhY2l0eSJdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMV07
CisgICAgW2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTpAMF07CisgICAgW2ZhZGVBbmltYXRpb24g
c2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0
UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246
ZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkhhbmRsZXJd
OworICAgIFtzZWxmLmxheWVyIGFkZEFuaW1hdGlvbjpmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktl
eTpAImZhZGVPdXQiXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistIChCT09M
KWlzRmxpcHBlZAoreworICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitUZXh0SW5kaWNhdG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KE5TVmll
dyAqdGFyZ2V0VmlldykKKyAgICA6IG1fdGFyZ2V0Vmlldyh0YXJnZXRWaWV3KQorICAgICwgbV9z
dGFydEZhZGVPdXRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUZXh0SW5kaWNhdG9yV2lu
ZG93OjpzdGFydEZhZGVPdXRUaW1lckZpcmVkKQoreworfQorCitUZXh0SW5kaWNhdG9yV2luZG93
Ojp+VGV4dEluZGljYXRvcldpbmRvdygpCit7CisgICAgY2xvc2VXaW5kb3coKTsKK30KKwordm9p
ZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gdGV4dEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChtX3RleHRJbmRpY2F0
b3IgPT0gdGV4dEluZGljYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90ZXh0SW5kaWNh
dG9yID0gdGV4dEluZGljYXRvcjsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIG9sZCB3aW5kb3cu
CisgICAgY2xvc2VXaW5kb3coKTsKKworICAgIGlmICghbV90ZXh0SW5kaWNhdG9yKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOU1JlY3QgY29udGVudFJlY3QgPSBtX3RleHRJbmRpY2F0b3ItPnRl
eHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCk7CisKKyAgICBDR0Zsb2F0IGhvcml6
b250YWxNYXJnaW4gPSBzdGQ6Om1heChkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyBob3Jpem9u
dGFsQm9yZGVyLCBjb250ZW50UmVjdC5zaXplLndpZHRoICogMik7CisgICAgQ0dGbG9hdCB2ZXJ0
aWNhbE1hcmdpbiA9IHN0ZDo6bWF4KGRyb3BTaGFkb3dCbHVyUmFkaXVzICogMiArIHZlcnRpY2Fs
Qm9yZGVyLCBjb250ZW50UmVjdC5zaXplLmhlaWdodCAqIDIpOworCisgICAgY29udGVudFJlY3Qg
PSBOU0luc2V0UmVjdChjb250ZW50UmVjdCwgLWhvcml6b250YWxNYXJnaW4sIC12ZXJ0aWNhbE1h
cmdpbik7CisgICAgTlNSZWN0IHdpbmRvd0ZyYW1lUmVjdCA9IE5TSW50ZWdyYWxSZWN0KFttX3Rh
cmdldFZpZXcgY29udmVydFJlY3Q6Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOworICAgIHdpbmRv
d0ZyYW1lUmVjdCA9IFtbbV90YXJnZXRWaWV3IHdpbmRvd10gY29udmVydFJlY3RUb1NjcmVlbjp3
aW5kb3dGcmFtZVJlY3RdOworICAgIE5TUmVjdCB3aW5kb3dDb250ZW50UmVjdCA9IFtOU1dpbmRv
dyBjb250ZW50UmVjdEZvckZyYW1lUmVjdDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVNYXNrOk5TQm9y
ZGVybGVzc1dpbmRvd01hc2tdOworCisgICAgbV90ZXh0SW5kaWNhdG9yV2luZG93ID0gYWRvcHRO
UyhbW05TV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OndpbmRvd0NvbnRlbnRSZWN0
IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVC
dWZmZXJlZCBkZWZlcjpOT10pOworCisgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRCYWNr
Z3JvdW5kQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFttX3RleHRJbmRpY2F0b3JX
aW5kb3cgc2V0T3BhcXVlOk5PXTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldElnbm9y
ZXNNb3VzZUV2ZW50czpZRVNdOworCisgICAgbV90ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMo
W1tXZWJUZXh0SW5kaWNhdG9yVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgZnJhbWVdLnNpemUud2lkdGgsIFttX3RleHRJbmRp
Y2F0b3JXaW5kb3cgZnJhbWVdLnNpemUuaGVpZ2h0KSB0ZXh0SW5kaWNhdG9yOm1fdGV4dEluZGlj
YXRvciBtYXJnaW46TlNNYWtlU2l6ZShob3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbild
KTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldENvbnRlbnRWaWV3Om1fdGV4dEluZGlj
YXRvclZpZXcuZ2V0KCldOworCisgICAgW1ttX3RhcmdldFZpZXcgd2luZG93XSBhZGRDaGlsZFdp
bmRvdzptX3RleHRJbmRpY2F0b3JXaW5kb3cuZ2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsK
KyAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisK
KyAgICBpZiAobV90ZXh0SW5kaWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgIT0gVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUpIHsKKyAgICAgICAgW21fdGV4
dEluZGljYXRvclZpZXcgcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjpbYW5pbWF0aW9uQ29t
cGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVy
KCk7CisgICAgICAgIH1dOworICAgIH0KKworICAgIGlmIChmYWRlT3V0KQorICAgICAgICBtX3N0
YXJ0RmFkZU91dFRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lQmVmb3JlRmFkZVN0YXJ0cyk7Cit9CisK
K3ZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQoreworICAgIGlmICghbV90
ZXh0SW5kaWNhdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXJ0RmFkZU91
dFRpbWVyLnN0b3AoKTsKKworICAgIFtbbV90ZXh0SW5kaWNhdG9yV2luZG93IHBhcmVudFdpbmRv
d10gcmVtb3ZlQ2hpbGRXaW5kb3c6bV90ZXh0SW5kaWNhdG9yV2luZG93LmdldCgpXTsKKyAgICBb
bV90ZXh0SW5kaWNhdG9yV2luZG93IGNsb3NlXTsKKyAgICBtX3RleHRJbmRpY2F0b3JXaW5kb3cg
PSBudWxscHRyOworfQorCit2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRp
bWVyRmlyZWQoKQoreworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0g
bV90ZXh0SW5kaWNhdG9yV2luZG93OworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRo
Q29tcGxldGlvbkhhbmRsZXI6W2luZGljYXRvcldpbmRvd10geworICAgICAgICBbW2luZGljYXRv
cldpbmRvdyBwYXJlbnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5n
ZXQoKV07CisgICAgICAgIFtpbmRpY2F0b3JXaW5kb3cgY2xvc2VdOworICAgIH1dOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CmluZGV4IGRlMGI1ZWZkM2UxN2FkMDdiZDE1MjRkYjQyNGQ1NTM5NjFlZTkwYjku
LmZkZWY0NmU4MmM5MTZhYTE5ZmExMGVmNGU4ZjkxMjVjYTllZmVlNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CkBAIC0yMDcsNyArMjA3LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJl
ZC9TaGFyZWFibGVCaXRtYXAuY3BwCiAgICAgU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAog
ICAgIFNoYXJlZC9TdGF0aXN0aWNzRGF0YS5jcHAKLSAgICBTaGFyZWQvVGV4dEluZGljYXRvci5j
cHAKICAgICBTaGFyZWQvVXBkYXRlSW5mby5jcHAKICAgICBTaGFyZWQvVXNlckRhdGEuY3BwCiAg
ICAgU2hhcmVkL1Zpc2l0ZWRMaW5rVGFibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5CmluZGV4IGI2NWVjZjFmMDM5YTBmYzAzZDU0OTMyZjIxYTgyYzhiMWM4
YmY4YzkuLmVjNDI3Y2IwMDU0YmJhMTU0MTE3ODU2MGJmMDZmNDRjNzAwZjIwODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0xODMsNiArMTgzLDcgQEAg
ZGVmIHN0cnVjdF9vcl9jbGFzcyhuYW1lc3BhY2UsIHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6OlNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24n
LAorICAgICAgICAnV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEnLAogICAgICAgICAnV2ViQ29y
ZTo6VGltaW5nRnVuY3Rpb24nLAogICAgICAgICAnV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgnLAogICAgICAgICAnV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uJywKQEAgLTQzOCw2ICs0
MzksNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OlBh
c3RlYm9hcmRXZWJDb250ZW50JzogWyc8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAg
ICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSc6IFsnPFdlYkNvcmUvVGV4dENoZWNr
aW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQnOiBbJzxXZWJD
b3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+J10sCisgICAgICAgICdXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yRGF0YSc6IFsnPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPiddLAogICAgICAgICAnV2ViQ29y
ZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJzogWyc8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPidd
LAogICAgICAgICAnV2ViS2l0OjpCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUnOiBbJyJTZXNzaW9u
U3RhdGUuaCInXSwKICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVu
Y29kZXInOiBbXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5
UG9wdXBJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5o
CmluZGV4IGE1NGZjMDgzNDQ0ZWRmNGRlM2FkZDRkYzMzNDZhZDdjMjA5NzVmNzAuLmVkM2MwMDZj
YzY2MDg1Y2VmZDcyN2Y1ODBmOGE5ZTBlOGJhNzVmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uaApAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBEaWN0
aW9uYXJ5UG9wdXBJbmZvX2gKICNkZWZpbmUgRGljdGlvbmFyeVBvcHVwSW5mb19oCiAKLSNpbmNs
dWRlICJUZXh0SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkK
ICNpbmNsdWRlICJBdHRyaWJ1dGVkU3RyaW5nLmgiCkBAIC00Niw3ICs0Niw3IEBAIHN0cnVjdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvIHsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVu
dERlY29kZXImLCBEaWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAKICAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IG9yaWdpbjsKLSAgICBUZXh0SW5kaWNhdG9yOjpEYXRhIHRleHRJbmRpY2F0b3I7CisgICAg
V2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEgdGV4dEluZGljYXRvcjsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBvcHRpb25zOwogICAgIEF0dHJp
YnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5k
aWNhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlOTIzMDkxN2JjYzEz
YzMzMmM4ZDZkOTk5MGNlZDA1NWFjNWY4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCi0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSNpbmNsdWRlICJBcmd1bWVudENvZGVyc0NGLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkFy
Z3VtZW50RGVjb2Rlci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgot
I2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTbmFwc2hv
dHRpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZXNlIHNob3Vs
ZCBtYXRjaCB0aGUgdmFsdWVzIGluIFRleHRJbmRpY2F0b3JXaW5kb3cuCi0vLyBGSVhNRTogSWRl
YWxseSB0aGVzZSB3b3VsZCBvbmx5IGJlIGluIG9uZSBwbGFjZS4KLSNpZiBFTkFCTEUoTEVHQUNZ
X1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDM7
Ci1jb25zdCBmbG9hdCB2ZXJ0aWNhbEJvcmRlciA9IDE7Ci1jb25zdCBmbG9hdCBkcm9wU2hhZG93
Qmx1clJhZGl1cyA9IDEuNTsKLSNlbHNlCi1jb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVyID0g
MjsKLWNvbnN0IGZsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IGZsb2F0IGRyb3BTaGFk
b3dCbHVyUmFkaXVzID0gMTI7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRp
YyBGbG9hdFJlY3Qgb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBGbG9h
dFJlY3QgcmVjdCkKLXsKLSAgICBGbG9hdFJlY3Qgb3V0c2V0UmVjdCA9IHJlY3Q7Ci0gICAgb3V0
c2V0UmVjdC5pbmZsYXRlWChkcm9wU2hhZG93Qmx1clJhZGl1cyArIGhvcml6b250YWxCb3JkZXIp
OwotICAgIG91dHNldFJlY3QuaW5mbGF0ZVkoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKyB2ZXJ0aWNh
bEJvcmRlcik7Ci0gICAgcmV0dXJuIG91dHNldFJlY3Q7Ci19Ci0KLXN0YXRpYyBib29sIHRleHRJ
bmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdGV4
dFJlY3RzKQotewotICAgIHNpemVfdCBjb3VudCA9IHRleHRSZWN0cy5zaXplKCk7Ci0gICAgaWYg
KGNvdW50IDw9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IGluZGljYXRvclJlY3RzOwotICAgIGluZGljYXRvclJlY3RzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY291bnQpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBpbmRpY2F0b3JSZWN0ID0gb3V0c2V0SW5kaWNhdG9yUmVjdElu
Y2x1ZGluZ1NoYWRvdyh0ZXh0UmVjdHNbaV0pOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGogPSBp
bmRpY2F0b3JSZWN0cy5zaXplKCk7IGo7ICkgewotICAgICAgICAgICAgLS1qOwotICAgICAgICAg
ICAgaWYgKGluZGljYXRvclJlY3QuaW50ZXJzZWN0cyhpbmRpY2F0b3JSZWN0c1tqXSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmRpY2F0b3JS
ZWN0cy51bmNoZWNrZWRBcHBlbmQoaW5kaWNhdG9yUmVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1QYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yOjpEYXRhJiBkYXRhKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dEluZGljYXRvcihkYXRhKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dEluZGlj
YXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwg
UHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIEZy
YW1lKiBmcmFtZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkuZnJhbWUoKTsK
LQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigmcmFuZ2UpOwotCi0gICAgUmVm
UHRyPFRleHRJbmRpY2F0b3I+IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhT
ZWxlY3Rpb25JbkZyYW1lKCpXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpLCBwcmVzZW50
YXRpb25UcmFuc2l0aW9uKTsKLQotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
b2xkU2VsZWN0aW9uKTsKLSAgICAKLSAgICByZXR1cm4gaW5kaWNhdG9yLnJlbGVhc2UoKTsKLX0K
LQotLy8gRklYTUUgKDEzODg4OSk6IElkZWFsbHkgdGhlIEZyYW1lU25hcHNob3R0aW5nIGZ1bmN0
aW9ucyB3b3VsZCBiZSBtb3JlIGZsZXhpYmxlCi0vLyBhbmQgd2Ugd291bGRuJ3QgaGF2ZSB0byBp
bXBsZW1lbnQgdGhpcyBoZXJlLgotc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBz
bmFwc2hvdFNlbGVjdGlvbldpdGhIaWdobGlnaHQoRnJhbWUmIGZyYW1lKQotewotICAgIGF1dG8m
IHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwotCi0gICAgaWYgKCFzZWxlY3Rpb24uaXNS
YW5nZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCBzZWxlY3Rp
b25Cb3VuZHMgPSBzZWxlY3Rpb24uc2VsZWN0aW9uQm91bmRzKCk7Ci0KLSAgICAvLyBJdCBpcyBw
b3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBib3VuZHMgdG8gYmUgZW1wdHk7IHNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NDUuCi0gICAgaWYgKHNlbGVjdGlv
bkJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KGZyYW1l
LCBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kcyksIDApOwotCi0gICAgaWYgKCFzbmFw
c2hvdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNu
YXBzaG90LT5pbnRlcm5hbFNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsK
LSAgICBpZiAoIXNoYXJlZFNuYXBzaG90KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gc2hhcmVkU25hcHNob3QtPmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGRl
dmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGdyYXBoaWNzQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKHNuYXBzaG90LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBG
bG9hdFBvaW50KCkpOwotCi0gICAgcmV0dXJuIHNoYXJlZFNuYXBzaG90LnJlbGVhc2UoKTsKLX0K
LQotUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2Vs
ZWN0aW9uSW5GcmFtZShjb25zdCBXZWJGcmFtZSYgZnJhbWUsIFByZXNlbnRhdGlvblRyYW5zaXRp
b24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKLXsKLSAgICBGcmFtZSYgY29yZUZyYW1lID0gKmZy
YW1lLmNvcmVGcmFtZSgpOwotICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoY29yZUZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygpKTsKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBpbmRpY2F0b3JCaXRtYXAgPSBmcmFtZS5jcmVhdGVTZWxlY3Rp
b25TbmFwc2hvdCgpOwotICAgIGlmICghaW5kaWNhdG9yQml0bWFwKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGluZGljYXRvckJpdG1hcFdp
dGhIaWdobGlnaHQ7Ci0gICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQotICAgICAgICBpbmRpY2F0b3JCaXRt
YXBXaXRoSGlnaGxpZ2h0ID0gc25hcHNob3RTZWxlY3Rpb25XaXRoSGlnaGxpZ2h0KGNvcmVGcmFt
ZSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5h
dGVzLCB0byBiZSB1c2VkIHN1YnNlcXVlbnRseQotICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUg
aW5kaWNhdG9yIGFuZCBzZWxlY3Rpb24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCi0gICAgSW50
UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IGNvcmVGcmFtZS52aWV3KCkt
PmNvbnRlbnRzVG9XaW5kb3coc2VsZWN0aW9uUmVjdCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0
PiB0ZXh0UmVjdHM7Ci0gICAgY29yZUZyYW1lLnNlbGVjdGlvbigpLmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXModGV4dFJlY3RzKTsKLQotICAgIC8vIFRoZSBib3VuZGluZyByZWN0IG9m
IGFsbCB0aGUgdGV4dCByZWN0cyBjYW4gYmUgZGlmZmVyZW50IHRoYW4gdGhlIHNlbGVjdGlvbgot
ICAgIC8vIHJlY3Qgd2hlbiB0aGUgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIGxpbmVzOyB0aGUg
aW5kaWNhdG9yIGRvZXNuJ3QgYWN0dWFsbHkKLSAgICAvLyBjYXJlIHdoZXJlIHRoZSBzZWxlY3Rp
b24gaGlnaGxpZ2h0IGdvZXMsIGp1c3Qgd2hlcmUgdGhlIHRleHQgYWN0dWFsbHkgaXMuCi0gICAg
RmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZm9yIChjb25z
dCBGbG9hdFJlY3QmIHRleHRSZWN0IDogdGV4dFJlY3RzKSB7Ci0gICAgICAgIEZsb2F0UmVjdCB0
ZXh0UmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBjb3JlRnJhbWUudmlldygpLT5jb250ZW50c1Rv
V2luZG93KGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpKTsKLSAgICAgICAgdGV4dFJlY3RzSW5X
aW5kb3dDb29yZGluYXRlcy5hcHBlbmQodGV4dFJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAg
ICAgICAgdGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4
dFJlY3RzSW5XaW5kb3dDb29yZGluYXRlcykgewotICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJv
dW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIHRleHRS
ZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgIH0KLQotICAg
IFRleHRJbmRpY2F0b3I6OkRhdGEgZGF0YTsKLSAgICBkYXRhLnNlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzID0gc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZGF0
YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IHRleHRCb3VuZGluZ1JlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzOwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29y
ZGluYXRlcyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS5j
b250ZW50SW1hZ2VTY2FsZUZhY3RvciA9IGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KTsKLSAgICBkYXRhLmNvbnRlbnRJbWFnZSA9IGluZGljYXRvckJpdG1hcDsKLSAgICBkYXRhLmNv
bnRlbnRJbWFnZVdpdGhIaWdobGlnaHQgPSBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0Owot
ICAgIGRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247
Ci0KLSAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwotfQotCi1UZXh0SW5k
aWNhdG9yOjpUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmIGRhdGEpCi0g
ICAgOiBtX2RhdGEoZGF0YSkKLXsKLSAgICBBU1NFUlQobV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxl
RmFjdG9yICE9IDEgfHwgbV9kYXRhLmNvbnRlbnRJbWFnZS0+c2l6ZSgpID09IGVuY2xvc2luZ0lu
dFJlY3QobV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKS5zaXplKCkpOwot
Ci0gICAgaWYgKHRleHRJbmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcChtX2RhdGEudGV4dFJl
Y3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykpIHsKLSAgICAgICAgbV9kYXRhLnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV9kYXRhLnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOwotICAgICAgICBtX2RhdGEudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcy5zaHJpbmsoMSk7Ci0gICAgfQotfQotCi1UZXh0SW5kaWNh
dG9yOjp+VGV4dEluZGljYXRvcigpCi17Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcjo6RGF0YTo6
ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZW5jb2RlciA8PCB0
ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKLSAgICBlbmNvZGVyIDw8IHRleHRS
ZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBjb250ZW50SW1h
Z2VTY2FsZUZhY3RvcjsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJlc2VudGF0aW9uVHJhbnNp
dGlvbik7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGU7
Ci0gICAgaWYgKGNvbnRlbnRJbWFnZSkKLSAgICAgICAgY29udGVudEltYWdlLT5jcmVhdGVIYW5k
bGUoY29udGVudEltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBlbmNv
ZGVyIDw8IGNvbnRlbnRJbWFnZUhhbmRsZTsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGU7Ci0gICAgaWYgKGNvbnRlbnRJbWFnZVdp
dGhIaWdobGlnaHQpCi0gICAgICAgIGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQtPmNyZWF0ZUhh
bmRsZShjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5KTsKLSAgICBlbmNvZGVyIDw8IGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGU7Ci19
Ci0KLWJvb2wgVGV4dEluZGljYXRvcjo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVy
JiBkZWNvZGVyLCBUZXh0SW5kaWNhdG9yOjpEYXRhJiB0ZXh0SW5kaWNhdG9yRGF0YSkKLXsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHRJbmRpY2F0b3JEYXRhLnNlbGVjdGlvblJlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29y
ZGluYXRlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodGV4dEluZGljYXRvckRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dElu
ZGljYXRvckRhdGEuY29udGVudEltYWdlU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0ZXh0SW5kaWNhdG9yRGF0YS5wcmVz
ZW50YXRpb25UcmFuc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY29udGVudEltYWdlSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFjb250ZW50SW1hZ2VIYW5kbGUuaXNOdWxsKCkpCi0gICAgICAgIHRleHRJbmRpY2F0b3JE
YXRhLmNvbnRlbnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZS5pc051bGwo
KSkKLSAgICAgICAgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJ
bmRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMWEyNGI4OTNhOTZmZjMwOTI5OGQzZTI4ZWYzMzA3
ZGNkMDBhZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXh0SW5kaWNhdG9yX2gKLSNkZWZp
bmUgVGV4dEluZGljYXRvcl9oCi0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNp
ZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEw
MDAKLSNkZWZpbmUgRU5BQkxFX0xFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSAxCi0jZWxzZQot
I2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFIDAKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSYW5nZTsK
LX0KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBBcmd1bWVudERlY29kZXI7Ci1jbGFzcyBBcmd1
bWVudEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZTsK
LQotY2xhc3MgVGV4dEluZGljYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRJbmRpY2F0b3I+
IHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFByZXNlbnRhdGlvblRyYW5zaXRpb24gewotICAg
ICAgICBOb25lLAotICAgICAgICBCb3VuY2UsCi0gICAgICAgIEJvdW5jZUFuZENyb3NzZmFkZQot
ICAgIH07Ci0KLSAgICBzdHJ1Y3QgRGF0YSB7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBz
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgICAgICBWZWN0b3I8
V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwot
ICAgICAgICBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKLSAgICAgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlV2l0aEhpZ2hsaWdodDsKLSAgICAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlOwotICAgICAgICBQcmVzZW50YXRpb25UcmFu
c2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb247Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUoSVBD
OjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQ
Qzo6QXJndW1lbnREZWNvZGVyJiwgRGF0YSYpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZVdpdGhTZWxlY3Rpb25J
bkZyYW1lKGNvbnN0IFdlYkZyYW1lJiwgUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFdlYkNv
cmU6OlJhbmdlJiwgUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0KLSAgICB+VGV4dEluZGljYXRv
cigpOwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzOyB9Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnRleHRCb3VuZGluZ1JlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4m
IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsgfQotICAgIGZsb2F0IGNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVNj
YWxlRmFjdG9yOyB9Ci0gICAgU2hhcmVhYmxlQml0bWFwICpjb250ZW50SW1hZ2VXaXRoSGlnaGxp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQuZ2V0
KCk7IH0KLSAgICBTaGFyZWFibGVCaXRtYXAgKmNvbnRlbnRJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5jb250ZW50SW1hZ2UuZ2V0KCk7IH0KLSAgICBQcmVzZW50YXRpb25UcmFuc2l0aW9u
IHByZXNlbnRhdGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHJlc2VudGF0
aW9uVHJhbnNpdGlvbjsgfQotCi0gICAgdm9pZCBzZXRQcmVzZW50YXRpb25UcmFuc2l0aW9uKFBy
ZXNlbnRhdGlvblRyYW5zaXRpb24gdHJhbnNpdGlvbikgeyBtX2RhdGEucHJlc2VudGF0aW9uVHJh
bnNpdGlvbiA9IHRyYW5zaXRpb247IH0KLQotICAgIERhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQotCi1wcml2YXRlOgotICAgIFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGlj
YXRvcjo6RGF0YSYpOwotCi0gICAgRGF0YSBtX2RhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIFRleHRJbmRpY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCAxMjE5MmZjNjc1ODFiMGUyNzgy
MjEwM2Q5N2Q2YzQ1MjVlOWQwYjMwLi5mNjJkZjZkYTE5M2Y4YjUzYjhlNTJkMDQxZjBjYTYzYTMy
ZjEzZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRpY2F0
b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWluZ0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CkBA
IC0xOTYwLDQgKzE5NjEsNDEgQEAgYm9vbCBBcmd1bWVudENvZGVyPEJsb2JQYXJ0Pjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQmxvYlBhcnQmIGJsb2JQYXIKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPFRleHRJbmRpY2F0b3JEYXRhPjo6ZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGV4dEluZGljYXRvckRhdGEmIHRleHRJ
bmRpY2F0b3JEYXRhKQoreworICAgIGVuY29kZXIgPDwgdGV4dEluZGljYXRvckRhdGEuc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgZW5jb2RlciA8PCB0ZXh0SW5kaWNhdG9y
RGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBlbmNvZGVyIDw8
IHRleHRJbmRpY2F0b3JEYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Cisg
ICAgZW5jb2RlciA8PCB0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsK
KyAgICBlbmNvZGVyLmVuY29kZUVudW0odGV4dEluZGljYXRvckRhdGEucHJlc2VudGF0aW9uVHJh
bnNpdGlvbik7CisgICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgdGV4dEluZGljYXRvckRhdGEuY29u
dGVudEltYWdlLmdldCgpKTsKKyAgICBlbmNvZGVJbWFnZShlbmNvZGVyLCB0ZXh0SW5kaWNhdG9y
RGF0YS5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0LmdldCgpKTsKK30KKworYm9vbCBBcmd1bWVu
dENvZGVyPFRleHRJbmRpY2F0b3JEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgVGV4dEluZGljYXRvckRhdGEmIHRleHRJbmRpY2F0b3JEYXRhKQoreworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodGV4dEluZGljYXRvckRhdGEuc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHRleHRJbmRpY2F0b3JEYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5k
aWNhdG9yRGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0
YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHRleHRJbmRpY2F0b3JEYXRhLnByZXNlbnRhdGlvblRy
YW5zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUltYWdl
KGRlY29kZXIsIHRleHRJbmRpY2F0b3JEYXRhLmNvbnRlbnRJbWFnZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2RlSW1hZ2UoZGVjb2RlciwgdGV4dEluZGljYXRvckRh
dGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA1OTk1ZTVhYjEwYjQ2MGQ2
YjhmNTk2ZjNiODU0ZTIxNmIyMmZkYjEwLi5jNjhlMDlkMzFjYzlmYjBiYjBmYzRhOTY4NWJmYWY1
Nzk1MTQ5MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCkBAIC04NSw2ICs4NSw3IEBAIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudDsKIHN0
cnVjdCBQbHVnaW5JbmZvOwogc3RydWN0IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVyczsKIHN0cnVj
dCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CitzdHJ1Y3QgVGV4dEluZGljYXRvckRhdGE7CiBzdHJ1Y3Qg
Vmlld3BvcnRBdHRyaWJ1dGVzOwogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtNDM1LDYg
KzQzNiwxMSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRl
bnRGaWx0ZXI+IHsKIH07CiAjZW5kaWYKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYpOworICAg
IHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yRGF0YSYpOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSVBDCiAKICNlbmRpZiAvLyBXZWJDb3Jl
QXJndW1lbnRDb2RlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9B
Y3Rpb25NZW51SGl0VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rp
b25NZW51SGl0VGVzdFJlc3VsdC5oCmluZGV4IGU3YmUxNzA0NDJmODM5ZWUyMmNhMTI3N2Y5MWIz
YTIzODU0M2VmNDkuLjcwMmM1NmU5ZjE0OWJkY2IzYjlkNjE5ZGM1NTNiNWIzNWI1NjEzNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1
bHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVz
dWx0LmgKQEAgLTI5LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNp
bmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zl
cmxheS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBPQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4dDsKQEAgLTU3
LDcgKzU3LDcgQEAgc3RydWN0IEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0IHsKIAogICAgIFJldGFp
blB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQ7CiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBk
ZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yPiBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwogICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5
OjpQYWdlT3ZlcmxheUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJl
c3VsdC5tbQppbmRleCAzNjdjN2FlZmM1ZDc3ZGRiN2E0M2EwNDU1MjM4YTVjZTQzN2NhNWY2Li42
OTBiYzlmODJhNzRhZTk0MGI4YWQ1ZWI1Y2NhMjNkNDgwYTExY2NkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQubW0KQEAgLTMx
LDkgKzMxLDkgQEAKICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKICNpbXBvcnQgIkFyZ3Vt
ZW50RGVjb2Rlci5oIgogI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW1wb3J0ICJUZXh0
SW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQg
PFdlYkNvcmUvRGF0YURldGVjdG9yc1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNh
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0xMTgsMTEgKzExOCwxMSBAQCBib29s
IEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIEFjdGlvbk1lbnVIaQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IGlmIChoYXNUZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgICAgICBUZXh0SW5kaWNhdG9yOjpEYXRh
IGluZGljYXRvckRhdGE7CisgICAgICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBp
bmRpY2F0b3JEYXRhOwogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmRpY2F0b3JE
YXRhKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGFjdGlv
bk1lbnVIaXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGUoaW5kaWNhdG9yRGF0YSk7CisgICAgICAgICAgICBhY3Rpb25NZW51SGl0VGVz
dFJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRv
cjo6Y3JlYXRlKGluZGljYXRvckRhdGEpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCBhYzQw
YWVmOGE3ODBjMGQxZjM1ZWI2OTE3Y2VhYTYzMmNlYjRjYzYyLi41NmUwNjU3YmVjNGY1ZTY0MTNl
ODFjNTFkYzA3ODQ3OWU4MWU1ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29s
b3JQaWNrZXI+IGNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiBpbnRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwog
I2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0
SW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBib29sIGZh
ZGVPdXQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0Zvcktl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBWZWN0b3I8V1RGOjpTdHJpbmc+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRleHRJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCAzNDgzNWZlZGQ5
NzcyNmI4N2EwOWZhZjZlMmRjOTBlMmRkNjBmMDJjLi4wNzUyYzlkZjc3Y2Y4YWE2NDU0MGNlZjdi
ZGJlOGJmOWUxZDEyM2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCkBAIC01MSw4ICs1MSw2IEBACiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKICNp
bXBvcnQgIlRleHRDaGVja2VyLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW1w
b3J0ICJUZXh0SW5kaWNhdG9yLmgiCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9yV2luZG93LmgiCiAj
aW1wb3J0ICJUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJW
aWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCkBA
IC05Niw2ICs5NCw4IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0QWx0ZXJuYXRp
dmVXaXRoUmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRV
bmRvSW5zZXJ0aW9uTWFya3VwTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkFjdGlvbkRpc2Fi
bGluZ0NBTGF5ZXJEZWxlZ2F0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlQ0FMYXllckV4
dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0lu
dGVybmFsLmgKaW5kZXggMDZiYTIwMTRlNDFhZThkMWMyMjViOWM4ZWQ0ZDRmNmQxMmFjNWRlZC4u
NjU0Y2Y5ODVjMDJmMjc0Mzc0MzkwYzU4ZmFkZWM2MmQ2NDY4NTczYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCkBAIC00MSwxMyAr
NDEsMTMgQEAgY2xhc3MgRGF0YVJlZmVyZW5jZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEltYWdlOwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgVGV4dEluZGljYXRvcjsKIHN0cnVj
dCBLZXlwcmVzc0NvbW1hbmQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRHJhd2lu
Z0FyZWFQcm94eTsKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7Ci1jbGFzcyBUZXh0SW5kaWNhdG9y
OwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2ViQ29udGV4dDsKIHN0cnVjdCBBY3Rpb25N
ZW51SGl0VGVzdFJlc3VsdDsKQEAgLTgwLDggKzgwLDggQEAgc3RydWN0IFdlYlBhZ2VDb25maWd1
cmF0aW9uOwogLSAodm9pZClfc2V0SW50cmluc2ljQ29udGVudFNpemU6KE5TU2l6ZSlpbnRyaW5z
aWNDb250ZW50U2l6ZTsKIC0gKE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6KE5TUmVjdCly
ZWN0OwogLSAoTlNSZWN0KV9jb252ZXJ0VG9Vc2VyU3BhY2U6KE5TUmVjdClyZWN0OwotLSAodm9p
ZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRl
eHRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0OwotLSAodm9pZClfc2V0VGV4dEluZGlj
YXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgZmFk
ZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOihzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+KWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfc2V0VGV4dEluZGljYXRv
cjooUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIGZhZGVP
dXQ6KEJPT0wpZmFkZU91dDsKKy0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8
V2ViQ29yZTo6VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVP
dXQgYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXI6KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4pY29t
cGxldGlvbkhhbmRsZXI7CiAKIC0gKHZvaWQpX3NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
Um9vdExheWVyOihDQUxheWVyICopcm9vdExheWVyOwogLSAoQ0FMYXllciAqKV9hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaAppbmRleCA1YzQwYjgyMDllNDE5
YmYyNDA0YWFiMTBiMzhiYWRhMDI4M2VlYTBiLi45ZjZhMzVmMjA0YmVkN2RkMmYwYzM2NWIzOTBh
OTBlY2I5OTZkNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oCkBAIC0xODQsNyArMTg0LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNr
ZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFdlYkNv
cmU6OlRleHRJbmRpY2F0b3I+LCBib29sKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBl
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBhODli
M2UyNTUwYWE1MDgyYjJhNWUxODUzNWQ2Y2Y3YzUxNDMyYTAwLi45YTdlZDBhZjllMTZiOTMwNjNj
ZmYxMWU0Mzk2OGU2YzQwZTliODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50
LmgKQEAgLTQ3LDE0ICs0NywxNCBAQCBPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ3Vyc29yOwotc3RydWN0IFZpZXdwb3J0QXR0cmli
dXRlczsKK2NsYXNzIFRleHRJbmRpY2F0b3I7CiBzdHJ1Y3QgSGlnaGxpZ2h0Oworc3RydWN0IFZp
ZXdwb3J0QXR0cmlidXRlczsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERyYXdp
bmdBcmVhUHJveHk7Ci1jbGFzcyBUZXh0SW5kaWNhdG9yOwogY2xhc3MgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudDsKIGNsYXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwogY2xhc3MgVmlld1Nu
YXBzaG90OwpAQCAtMjE0LDEzICsyMTQsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
ID0gMDsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1Jl
ZlB0cjxUZXh0SW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9IDA7CiAKICNpZiBQTEFURk9STShNQUMpCisgICAg
dmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yPiwgYm9vbCBmYWRlT3V0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBsdWdpbkZvY3Vz
T3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCBiNzgwYTQxMjhkNDIwYWJmZTYwN2FiMGYwYzJmNmY0MDllNTFjM2Q2
Li4xZjM5OWJmZjAyZmY1MzZkNTVhNDMxYjQ5ODBiOTY0ODU0MjY2ZDRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1
ZGUgIlByaW50SW5mby5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGV4
dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0UHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgpAQCAtOTcsNiArOTYsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
Q2hlY2tlckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMzY1OCw3ICszNjU4LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZEdldEltYWdlRm9yRmluZE1hdGNoKGNvbnN0IFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiBjb250ZW4KICAgICBtX2ZpbmRNYXRjaGVzQ2xpZW50LmRpZEdldEltYWdlRm9y
TWF0Y2hSZXN1bHQodGhpcywgV2ViSW1hZ2U6OmNyZWF0ZShTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShjb250ZW50SW1hZ2VIYW5kbGUpKS5nZXQoKSwgbWF0Y2hJbmRleCk7CiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmIGlu
ZGljYXRvckRhdGEsIGJvb2wgZmFkZU91dCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0SW5k
aWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2F0b3JEYXRhLCBib29sIGZhZGVP
dXQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNldFRleHRJbmRpY2F0b3IoVGV4dEluZGljYXRvcjo6
Y3JlYXRlKGluZGljYXRvckRhdGEpLCBmYWRlT3V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAppbmRleCA1ZjhjZmQ4ZWQwZGI5MDU0Yjk0ZGU0OGFmNjQxMTQ4Mzgx
YjAwOTExLi4zNmQ0NmVmOGJjOTI2OWQ0YTE0ZGFmZmZhYzIzNWNjY2IwNGUwYWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xMzAsNiArMTMwLDcgQEAgY2xh
c3MgTWVkaWFDb25zdHJhaW50c0ltcGw7CiBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiBjbGFzcyBS
dW5Mb29wT2JzZXJ2ZXI7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBUZXh0SW5kaWNhdG9y
Owogc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7CiBzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0
aFJhbmdlOwogc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKQEAgLTE1NSw3ICsxNTYsNiBAQCBj
bGFzcyBQYWdlQ2xpZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247CiBjbGFz
cyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OwogY2xhc3MgU3RyaW5nUGFpclZlY3Rv
cjsKLWNsYXNzIFRleHRJbmRpY2F0b3I7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBWaXNp
dGVkTGlua1Byb3ZpZGVyOwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwpAQCAtNjY4LDcgKzY2
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKICAgICB2b2lkIGNvdW50U3Ry
aW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hD
b3VudCk7CiAgICAgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWlu
dDMyX3QgbWF0Y2hDb3VudCk7Ci0gICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJ
bmRpY2F0b3I6OkRhdGEmLCBib29sIGZhZGVPdXQpOworICAgIHZvaWQgc2V0VGV4dEluZGljYXRv
cihjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYsIGJvb2wgZmFkZU91dCk7CiAgICAg
dm9pZCBjbGVhclRleHRJbmRpY2F0b3IoKTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAgICB2
b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3NGI5YWI3Yjhl
NjExZTdlODlkYTcyOWFkMjA5OWQ0ZGEyNGU0YTcyLi42ODRjNzZhNjNlMzY1MmUwMTk2MzMwMzRi
NGJjMWRhNzY5NzUzOGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTIyNyw3ICsyMjcsNyBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogCiAgICAgIyBGaW5kIG1lc3NhZ2VzCiAgICAgRGlkQ291bnRTdHJpbmdNYXRj
aGVzKFN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCi0gICAgU2V0VGV4dEluZGlj
YXRvcihXZWJLaXQ6OlRleHRJbmRpY2F0b3I6OkRhdGEgaW5kaWNhdG9yLCBib29sIGZhZGVPdXQp
CisgICAgU2V0VGV4dEluZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0
b3IsIGJvb2wgZmFkZU91dCkKICAgICBDbGVhclRleHRJbmRpY2F0b3IoKQogICAgIERpZEZpbmRT
dHJpbmcoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaElu
ZGV4KQogICAgIERpZEZhaWxUb0ZpbmRTdHJpbmcoU3RyaW5nIHN0cmluZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA3OWNiZDJm
MTk5NzY0OWUxNGM5YjU3MzJlMTRjZmE5MTgxODc3OTY4Li5kODlhMjM2MTliOTk4OWJkMzkzZTVh
NWU0M2UxNDFkYjJkMDFiYjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVu
dVByb3h5KFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSop
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8
VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiwgYm9v
bCBmYWRlT3V0KSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oCmluZGV4IGU1MWVm
YTJlMTIzZDc5MDdjZWFlZTMyODE5Y2U4MTA2YzE5OWU4NjcuLjYzYjRhMjA5MmI3ZTNmODExYmZm
MjdmYWNhNDVjOTE3ZmQxYzg1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlldy5oCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgRHJhd2luZ0FyZWFQcm94eTsKIGNsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQ
cm94eTsKIGNsYXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwotY2xhc3MgVGV4dEluZGlj
YXRvcjsKIGNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3MgV2Vi
UGFnZVByb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bC5oCmluZGV4IDc5NWY4NGM2YjM1MTFiYzEzNmEzMGNhNDZhMmJjZWRmOGQyZjJkYzcuLmMyZGI4
ZmI4Yzc1ZjhjYjYyN2JkZjhmMmIyMzQwNDA5YzIyYTY4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTQyLDcgKzQyLDYgQEAgY2xhc3Mg
QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNs
YXNzIFRleHRJbmRpY2F0b3JXaW5kb3c7CiAKIGNsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDog
cHVibGljIFBhZ2VDbGllbnQKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC0xMjAsNyAr
MTE5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JQaWNrZXI+
IGNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBp
bml0aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91
dCk7CisgICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dElu
ZGljYXRvcj4sIGJvb2wgZmFkZU91dCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CiAgICAgdmlydHVh
bCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KaW5kZXggODJkM2UyZDI4MGFiZGYz
MWNhMmY5M2M3OGIxNDcyYmRiNzNlODUxNS4uNWVkN2EzZDRmOGU0M2IxMmI0NWFmZTYyNWNjMDAx
NjZiYWNmMjVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCkBAIC0zNyw3ICszNyw2IEBACiAjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50
LmgiCiAjaW1wb3J0ICJOYXZpZ2F0aW9uU3RhdGUuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGll
cy5oIgotI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9ydCAiVmlld1NuYXBzaG90U3Rv
cmUuaCIKICNpbXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlci5oIgpAQCAtNjEsNiArNjAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Mb29rdXBT
UEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFVuZG9JbnNlcnRpb25NYXJrdXBNYWMuaD4KICNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkyN2YzM2RmYjUzYWExMWM4MTE2M2I1YWNl
MTg0YWEyYjNlMGU3MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaAor
KysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRleHRJ
bmRpY2F0b3JXaW5kb3dfaAotI2RlZmluZSBUZXh0SW5kaWNhdG9yV2luZG93X2gKLQotI2lmIFBM
QVRGT1JNKE1BQykKLQotI2ltcG9ydCA8ZnVuY3Rpb25hbD4KLSNpbXBvcnQgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgotI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KLQotQGNsYXNzIFdLVGV4dEluZGljYXRvclZpZXc7
Ci1AY2xhc3MgV0tWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVGV4dEluZGlj
YXRvcjsKLQotY2xhc3MgVGV4dEluZGljYXRvcldpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVGV4dEluZGljYXRvcldpbmRvdyk7Ci0KLXB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0
SW5kaWNhdG9yV2luZG93KFdLVmlldyAqKTsKLSAgICB+VGV4dEluZGljYXRvcldpbmRvdygpOwot
Ci0gICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJv
b2wgZmFkZU91dCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBhbmltYXRpb25Db21wbGV0aW9uSGFu
ZGxlcik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpOwotCi0gICAgdm9pZCBz
dGFydEZhZGVPdXRUaW1lckZpcmVkKCk7Ci0KLSAgICBXS1ZpZXcqIG1fd2tWaWV3OwotICAgIFJl
ZlB0cjxUZXh0SW5kaWNhdG9yPiBtX3RleHRJbmRpY2F0b3I7Ci0gICAgUmV0YWluUHRyPE5TV2lu
ZG93PiBtX3RleHRJbmRpY2F0b3JXaW5kb3c7Ci0gICAgUmV0YWluUHRyPFdLVGV4dEluZGljYXRv
clZpZXc+IG1fdGV4dEluZGljYXRvclZpZXc7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxUZXh0SW5k
aWNhdG9yV2luZG93PiBtX3N0YXJ0RmFkZU91dFRpbWVyOwotCi0gICAgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBtX2JvdW5jZUFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBUZXh0SW5kaWNhdG9yV2luZG93X2gKLQotI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTgzNDZiM2VhYjJkZjljNDZjMzk5NWU5YzgzMDg2YzJiMTJhZWExZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGV4dEluZGljYXRv
cldpbmRvdy5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9y
LmgiCi0jaW1wb3J0ICJXS1ZpZXcuaCIKLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
V2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+Ci0KLWNvbnN0IENGVGltZUludGVy
dmFsIGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4xMjsKLWNvbnN0IENGVGltZUludGVydmFs
IGJvdW5jZVdpdGhDcm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKLWNvbnN0IENGVGlt
ZUludGVydmFsIHRpbWVCZWZvcmVGYWRlU3RhcnRzID0gYm91bmNlQW5pbWF0aW9uRHVyYXRpb24g
KyAwLjI7Ci1jb25zdCBDRlRpbWVJbnRlcnZhbCBmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAw
LjM7Ci0KLSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotY29uc3QgQ0dG
bG9hdCBtaWRCb3VuY2VTY2FsZSA9IDEuNTsKLWNvbnN0IENHRmxvYXQgaG9yaXpvbnRhbEJvcmRl
ciA9IDM7Ci1jb25zdCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IENHRmxvYXQg
Ym9yZGVyV2lkdGggPSAxLjA7Ci1jb25zdCBDR0Zsb2F0IGNvcm5lclJhZGl1cyA9IDM7Ci1jb25z
dCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IENHRmxvYXQgZHJvcFNoYWRv
d09mZnNldFkgPSAxOwotY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEuNTsK
LSNlbHNlCi1jb25zdCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS4yOwotY29uc3QgQ0dGbG9h
dCBob3Jpem9udGFsQm9yZGVyID0gMjsKLWNvbnN0IENHRmxvYXQgdmVydGljYWxCb3JkZXIgPSAx
OwotY29uc3QgQ0dGbG9hdCBib3JkZXJXaWR0aCA9IDA7Ci1jb25zdCBDR0Zsb2F0IGNvcm5lclJh
ZGl1cyA9IDA7Ci1jb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IENH
RmxvYXQgZHJvcFNoYWRvd09mZnNldFkgPSA1OwotY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1
clJhZGl1cyA9IDEyOwotY29uc3QgQ0dGbG9hdCByaW1TaGFkb3dCbHVyUmFkaXVzID0gMjsKLSNl
bmRpZgotCi1OU1N0cmluZyAqdGV4dExheWVyS2V5ID0gQCJUZXh0TGF5ZXIiOwotTlNTdHJpbmcg
KmRyb3BTaGFkb3dMYXllcktleSA9IEAiRHJvcFNoYWRvd0xheWVyIjsKLU5TU3RyaW5nICpyaW1T
aGFkb3dMYXllcktleSA9IEAiUmltU2hhZG93TGF5ZXIiOwotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotQGludGVyZmFjZSBXS1RleHRJbmRpY2F0b3JWaWV3IDogTlNWaWV3IHsKLSAgICBS
ZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRvcjsKLSAgICBSZXRhaW5Q
dHI8TlNBcnJheT4gX2JvdW5jZUxheWVyczsKLSAgICBOU1NpemUgX21hcmdpbjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFdlYktpdDo6VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRvciBtYXJnaW46KE5T
U2l6ZSltYXJnaW47Ci0KLS0gKHZvaWQpcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV0tUZXh0SW5kaWNhdG9yVmlldwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpU
ZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdpbgotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgX3RleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yOwotICAgIF9tYXJn
aW4gPSBtYXJnaW47Ci0KLSAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7Ci0gICAgc2VsZi5sYXll
ci5hbmNob3JQb2ludCA9IENHUG9pbnRaZXJvOwotCi0gICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9
IF90ZXh0SW5kaWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgPT0gV2ViS2l0OjpUZXh0
SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGU7Ci0K
LSAgICBGbG9hdFNpemUgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplID0gX3RleHRJbmRpY2F0b3It
PmNvbnRlbnRJbWFnZSgpLT5zaXplKCk7Ci0gICAgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLnNj
YWxlKDEgLyBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2U7Ci0gICAgaWYgKHdhbnRzQ3Jvc3Nm
YWRlKQotICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZVdpdGhIaWdobGlnaHQoKS0+bWFrZUNHSW1hZ2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRl
bnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm1ha2VDR0ltYWdlKCk7
Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JS
ZWY+IGhpZ2hsaWdodENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOjEgZ3JlZW46
MSBibHVlOjAgYWxwaGE6MV0uQ0dDb2xvcjsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gcmlt
U2hhZG93Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMTVd
LkNHQ29sb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IFtO
U0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAgYWxwaGE6MC4yXS5DR0NvbG9yOwotCi0gICAg
UmV0YWluUHRyPENHQ29sb3JSZWY+IGJvcmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2
aWNlUmVkOi45NiBncmVlbjouOTAgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0gICAgUmV0YWlu
UHRyPENHQ29sb3JSZWY+IGdyYWRpZW50RGFya0NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2
aWNlUmVkOi45MjkgZ3JlZW46LjggYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0gICAgUmV0YWlu
UHRyPENHQ29sb3JSZWY+IGdyYWRpZW50TGlnaHRDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERl
dmljZVJlZDouOTQ5IGdyZWVuOi45MzcgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0KLSAgICBm
b3IgKGF1dG8mIHRleHRSZWN0IDogX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMoKSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmNlTGF5ZXJSZWN0ID0g
dGV4dFJlY3Q7Ci0gICAgICAgIGJvdW5jZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9t
YXJnaW4uaGVpZ2h0KTsKLSAgICAgICAgYm91bmNlTGF5ZXJSZWN0LmluZmxhdGVYKGhvcml6b250
YWxCb3JkZXIpOwotICAgICAgICBib3VuY2VMYXllclJlY3QuaW5mbGF0ZVkodmVydGljYWxCb3Jk
ZXIpOwotCi0gICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMo
W1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0
ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwotICAgICAgICBb
Ym91bmNlTGF5ZXIgc2V0RnJhbWU6Ym91bmNlTGF5ZXJSZWN0XTsKLSAgICAgICAgW2JvdW5jZUxh
eWVyIHNldE9wYWNpdHk6MF07Ci0gICAgICAgIFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5j
ZUxheWVyLmdldCgpXTsKLQotICAgICAgICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChG
bG9hdFBvaW50KCksIGJvdW5jZUxheWVyUmVjdC5zaXplKCkpOwotICAgICAgICAvLyBGSVhNRSAo
MTM4ODg4KTogSWRlYWxseSB3ZSB3b3VsZG4ndCByZW1vdmUgdGhlIG1hcmdpbiBpbiB0aGlzIGNh
c2UsIGJ1dCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB5ZWxsb3cgaGln
aGxpZ2h0IGFuZCBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0IG92ZXJsYXAgcHJlY2lzZWx5Lgot
ICAgICAgICBpZiAod2FudHNDcm9zc2ZhZGUpIHsKLSAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdo
dFJlY3QuaW5mbGF0ZVgoLWhvcml6b250YWxCb3JkZXIpOwotICAgICAgICAgICAgeWVsbG93SGln
aGxpZ2h0UmVjdC5pbmZsYXRlWSgtdmVydGljYWxCb3JkZXIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IGRyb3BTaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dl
YkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICAgICAgW2Ryb3BT
aGFkb3dMYXllciBzZXRTaGFkb3dDb2xvcjpkcm9wU2hhZG93Q29sb3IuZ2V0KCldOwotICAgICAg
ICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1czpkcm9wU2hhZG93Qmx1clJhZGl1c107
Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJv
cFNoYWRvd09mZnNldFgsIGRyb3BTaGFkb3dPZmZzZXRZKV07Ci0gICAgICAgIFtkcm9wU2hhZG93
TGF5ZXIgc2V0U2hhZG93UGF0aElzQm91bmRzOllFU107Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5
ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFt
ZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3Ju
ZXJSYWRpdXM6Y29ybmVyUmFkaXVzXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVy
OmRyb3BTaGFkb3dMYXllci5nZXQoKV07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpk
cm9wU2hhZG93TGF5ZXIuZ2V0KCkgZm9yS2V5OmRyb3BTaGFkb3dMYXllcktleV07Ci0KLSNpZiAh
RU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLSAgICAgICAgUmV0YWluUHRyPENB
TGF5ZXI+IHJpbVNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsK
LSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdD
QUxheWVyRGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFt
ZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRv
d0NvbG9yOnJpbVNoYWRvd0NvbG9yLmdldCgpXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNl
dFNoYWRvd1JhZGl1czpyaW1TaGFkb3dCbHVyUmFkaXVzXTsKLSAgICAgICAgW3JpbVNoYWRvd0xh
eWVyIHNldFNoYWRvd1BhdGhJc0JvdW5kczpZRVNdOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIg
c2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVplcm9dOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0
U2hhZG93T3BhY2l0eToxXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxv
d0hpZ2hsaWdodFJlY3RdOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVz
OmNvcm5lclJhZGl1c107Ci0gICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFk
b3dMYXllci5nZXQoKV07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dM
YXllci5nZXQoKSBmb3JLZXk6cmltU2hhZG93TGF5ZXJLZXldOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotICAgICAgICBSZXRhaW5QdHI8Q0FHcmFk
aWVudExheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBp
bml0XSk7Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29sb3JzOkBbIChpZClncmFkaWVudExpZ2h0
Q29sb3IuZ2V0KCksIChpZClncmFkaWVudERhcmtDb2xvci5nZXQoKSBdXTsKLSNlbHNlCi0gICAg
ICAgIFJldGFpblB0cjxDQUxheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxv
Y10gaW5pdF0pOwotI2VuZGlmCi0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9y
OmhpZ2hsaWdodENvbG9yLmdldCgpXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xv
cjpib3JkZXJDb2xvci5nZXQoKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6
Ym9yZGVyV2lkdGhdOwotICAgICAgICBbdGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25E
aXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0
Q29udGVudHM6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwotCi0gICAgICAgIEZsb2F0UmVjdCBp
bWFnZVJlY3QgPSB0ZXh0UmVjdDsKLSAgICAgICAgaW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0
b3ItPnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkubG9jYXRpb24oKSAtIF90
ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpLmxvY2F0aW9u
KCkpOwotICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdl
UmVjdC54KCkgLyBjb250ZW50c0ltYWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0Lnko
KSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkg
LyBjb250ZW50c0ltYWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8g
Y29udGVudHNJbWFnZUxvZ2ljYWxTaXplLmhlaWdodCgpKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIg
c2V0Q29udGVudHNHcmF2aXR5OmtDQUdyYXZpdHlDZW50ZXJdOwotICAgICAgICBbdGV4dExheWVy
IHNldENvbnRlbnRzU2NhbGU6X3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9y
KCldOwotICAgICAgICBbdGV4dExheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOwot
ICAgICAgICBbdGV4dExheWVyIHNldENvcm5lclJhZGl1czpjb3JuZXJSYWRpdXNdOwotICAgICAg
ICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJL
ZXldOwotICAgICAgICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsK
LSAgICB9Ci0KLSAgICBzZWxmLmxheWVyLnN1YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsK
LSAgICBfYm91bmNlTGF5ZXJzID0gYm91bmNlTGF5ZXJzOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgotewotICAgIGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGlj
YXRvci0+cHJlc2VudGF0aW9uVHJhbnNpdGlvbigpID09IFdlYktpdDo6VGV4dEluZGljYXRvcjo6
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOwotICAgIGRvdWJsZSBh
bmltYXRpb25EdXJhdGlvbiA9IHdhbnRzQ3Jvc3NmYWRlID8gYm91bmNlV2l0aENyb3NzZmFkZUFu
aW1hdGlvbkR1cmF0aW9uIDogYm91bmNlQW5pbWF0aW9uRHVyYXRpb247Ci0gICAgUmV0YWluUHRy
PENBS2V5ZnJhbWVBbmltYXRpb24+IGJvdW5jZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0
aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAidHJhbnNmb3JtIl07Ci0gICAgW2JvdW5jZUFuaW1h
dGlvbiBzZXRWYWx1ZXM6QFsKLSAgICAgICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0z
RDpDQVRyYW5zZm9ybTNESWRlbnRpdHldLAotICAgICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRy
YW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUobWlkQm91bmNlU2NhbGUsIG1pZEJvdW5j
ZVNjYWxlLCAxKV0sCi0gICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FU
cmFuc2Zvcm0zRElkZW50aXR5XQotICAgICAgICBdXTsKLSAgICBbYm91bmNlQW5pbWF0aW9uIHNl
dER1cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9uXTsKLQotICAgIFJldGFpblB0cjxDQUJhc2ljQW5p
bWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb247Ci0gICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRp
b24+IGZhZGVTaGFkb3dJbkFuaW1hdGlvbjsKLSAgICBpZiAod2FudHNDcm9zc2ZhZGUpIHsKLSAg
ICAgICAgY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0
aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+bWFrZUNHSW1hZ2Uo
KTsKLSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0lt
YWdlLmdldCgpXTsKLSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FG
aWxsTW9kZUZvcndhcmRzXTsKLSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVk
T25Db21wbGV0aW9uOk5PXTsKLSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXREdXJhdGlv
bjphbmltYXRpb25EdXJhdGlvbl07Ci0KLSAgICAgICAgZmFkZVNoYWRvd0luQW5pbWF0aW9uID0g
W0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJzaGFkb3dPcGFjaXR5Il07
Ci0gICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RnJvbVZhbHVlOkAwXTsKLSAgICAg
ICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKLSAgICAgICAgW2ZhZGVT
aGFkb3dJbkFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICAg
ICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKLSAg
ICAgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXREdXJhdGlvbjphbmltYXRpb25EdXJhdGlv
bl07Ci0gICAgfQotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0
aW9uIHNldENvbXBsZXRpb25CbG9jazpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgZm9yIChDQUxh
eWVyKiBib3VuY2VMYXllciBpbiBfYm91bmNlTGF5ZXJzLmdldCgpKSB7Ci0gICAgICAgIFtib3Vu
Y2VMYXllciBzZXRPcGFjaXR5OjFdOwotICAgICAgICBbYm91bmNlTGF5ZXIgYWRkQW5pbWF0aW9u
OmJvdW5jZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJib3VuY2UiXTsKLSAgICAgICAgaWYgKHdh
bnRzQ3Jvc3NmYWRlKSB7Ci0gICAgICAgICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5OnRl
eHRMYXllcktleV0gYWRkQW5pbWF0aW9uOmNyb3NzZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6
QCJjb250ZW50VHJhbnNpdGlvbiJdOwotICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZv
cktleTpkcm9wU2hhZG93TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpmYWRlU2hhZG93SW5BbmltYXRp
b24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRvd0luIl07Ci0gICAgICAgICAgICBbW2JvdW5jZUxh
eWVyIHZhbHVlRm9yS2V5OnJpbVNoYWRvd0xheWVyS2V5XSBhZGRBbmltYXRpb246ZmFkZVNoYWRv
d0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVTaGFkb3dJbiJdOwotICAgICAgICB9Ci0g
ICAgfQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLS0gKHZvaWQpaGlkZVdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAg
IFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmlt
YXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07Ci0gICAgW2ZhZGVBbmltYXRp
b24gc2V0RnJvbVZhbHVlOkAxXTsKLSAgICBbZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAwXTsK
LSAgICBbZmFkZUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAg
ICBbZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKLSAgICBbZmFkZUFu
aW1hdGlvbiBzZXREdXJhdGlvbjpmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb25dOwotCi0gICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldENvbXBsZXRpb25CbG9j
azpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgW3NlbGYubGF5ZXIgYWRkQW5pbWF0aW9uOmZhZGVB
bmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZU91dCJdOwotICAgIFtDQVRyYW5zYWN0aW9uIGNv
bW1pdF07Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQot
QGVuZAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVGV4dEluZGljYXRvcldpbmRvdzo6VGV4dElu
ZGljYXRvcldpbmRvdyhXS1ZpZXcgKndrVmlldykKLSAgICA6IG1fd2tWaWV3KHdrVmlldykKLSAg
ICAsIG1fc3RhcnRGYWRlT3V0VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGV4dEluZGlj
YXRvcldpbmRvdzo6c3RhcnRGYWRlT3V0VGltZXJGaXJlZCkKLXsKLX0KLQotVGV4dEluZGljYXRv
cldpbmRvdzo6flRleHRJbmRpY2F0b3JXaW5kb3coKQotewotICAgIGNsb3NlV2luZG93KCk7Ci19
Ci0KLXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRy
PFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBhbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV90ZXh0
SW5kaWNhdG9yID09IHRleHRJbmRpY2F0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGV4
dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3I7Ci0KLSAgICAvLyBHZXQgcmlkIG9mIHRoZSBvbGQg
d2luZG93LgotICAgIGNsb3NlV2luZG93KCk7Ci0KLSAgICBpZiAoIW1fdGV4dEluZGljYXRvcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNSZWN0IGNvbnRlbnRSZWN0ID0gbV90ZXh0SW5kaWNh
dG9yLT50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpOwotCi0gICAgQ0dGbG9h
dCBob3Jpem9udGFsTWFyZ2luID0gc3RkOjptYXgoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKiAyICsg
aG9yaXpvbnRhbEJvcmRlciwgY29udGVudFJlY3Quc2l6ZS53aWR0aCAqIDIpOwotICAgIENHRmxv
YXQgdmVydGljYWxNYXJnaW4gPSBzdGQ6Om1heChkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyB2
ZXJ0aWNhbEJvcmRlciwgY29udGVudFJlY3Quc2l6ZS5oZWlnaHQgKiAyKTsKLQotICAgIGNvbnRl
bnRSZWN0ID0gTlNJbnNldFJlY3QoY29udGVudFJlY3QsIC1ob3Jpem9udGFsTWFyZ2luLCAtdmVy
dGljYWxNYXJnaW4pOwotICAgIE5TUmVjdCB3aW5kb3dGcmFtZVJlY3QgPSBOU0ludGVncmFsUmVj
dChbbV93a1ZpZXcgY29udmVydFJlY3Q6Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOwotICAgIHdp
bmRvd0ZyYW1lUmVjdCA9IFtbbV93a1ZpZXcgd2luZG93XSBjb252ZXJ0UmVjdFRvU2NyZWVuOndp
bmRvd0ZyYW1lUmVjdF07Ci0gICAgTlNSZWN0IHdpbmRvd0NvbnRlbnRSZWN0ID0gW05TV2luZG93
IGNvbnRlbnRSZWN0Rm9yRnJhbWVSZWN0OndpbmRvd0ZyYW1lUmVjdCBzdHlsZU1hc2s6TlNCb3Jk
ZXJsZXNzV2luZG93TWFza107Ci0KLSAgICBtX3RleHRJbmRpY2F0b3JXaW5kb3cgPSBhZG9wdE5T
KFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93Q29udGVudFJlY3Qg
c3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1
ZmZlcmVkIGRlZmVyOk5PXSk7Ci0KLSAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldEJhY2tn
cm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW21fdGV4dEluZGljYXRvcldp
bmRvdyBzZXRPcGFxdWU6Tk9dOwotICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0SWdub3Jl
c01vdXNlRXZlbnRzOllFU107Ci0KLSAgICBtX3RleHRJbmRpY2F0b3JWaWV3ID0gYWRvcHROUyhb
W1dLVGV4dEluZGljYXRvclZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCBbbV90ZXh0SW5kaWNhdG9yV2luZG93IGZyYW1lXS5zaXplLndpZHRoLCBbbV90ZXh0SW5kaWNh
dG9yV2luZG93IGZyYW1lXS5zaXplLmhlaWdodCkgdGV4dEluZGljYXRvcjptX3RleHRJbmRpY2F0
b3IgbWFyZ2luOk5TTWFrZVNpemUoaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pXSk7
Ci0gICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRDb250ZW50VmlldzptX3RleHRJbmRpY2F0
b3JWaWV3LmdldCgpXTsKLQotICAgIFtbbV93a1ZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzpt
X3RleHRJbmRpY2F0b3JXaW5kb3cuZ2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKLSAgICBb
bV90ZXh0SW5kaWNhdG9yV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0KLSAgICBp
ZiAobV90ZXh0SW5kaWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgIT0gVGV4dEluZGlj
YXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSkgewotICAgICAgICBbbV90ZXh0SW5k
aWNhdG9yVmlldyBwcmVzZW50V2l0aENvbXBsZXRpb25IYW5kbGVyOlthbmltYXRpb25Db21wbGV0
aW9uSGFuZGxlcl0gewotICAgICAgICAgICAgYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICAgICAgfV07Ci0gICAgfQotCi0gICAgaWYgKGZhZGVPdXQpCi0gICAgICAgIG1fc3RhcnRG
YWRlT3V0VGltZXIuc3RhcnRPbmVTaG90KHRpbWVCZWZvcmVGYWRlU3RhcnRzKTsKLX0KLQotdm9p
ZCBUZXh0SW5kaWNhdG9yV2luZG93OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgaWYgKCFtX3RleHRJ
bmRpY2F0b3JXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhcnRGYWRlT3V0VGlt
ZXIuc3RvcCgpOwotCi0gICAgW1ttX3RleHRJbmRpY2F0b3JXaW5kb3cgcGFyZW50V2luZG93XSBy
ZW1vdmVDaGlsZFdpbmRvdzptX3RleHRJbmRpY2F0b3JXaW5kb3cuZ2V0KCldOwotICAgIFttX3Rl
eHRJbmRpY2F0b3JXaW5kb3cgY2xvc2VdOwotICAgIG1fdGV4dEluZGljYXRvcldpbmRvdyA9IG51
bGxwdHI7Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c3RhcnRGYWRlT3V0VGltZXJG
aXJlZCgpCi17Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBpbmRpY2F0b3JXaW5kb3cgPSBtX3Rl
eHRJbmRpY2F0b3JXaW5kb3c7Ci0gICAgW21fdGV4dEluZGljYXRvclZpZXcgaGlkZVdpdGhDb21w
bGV0aW9uSGFuZGxlcjpbaW5kaWNhdG9yV2luZG93XSB7Ci0gICAgICAgIFtbaW5kaWNhdG9yV2lu
ZG93IHBhcmVudFdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6aW5kaWNhdG9yV2luZG93LmdldCgp
XTsKLSAgICAgICAgW2luZGljYXRvcldpbmRvdyBjbG9zZV07Ci0gICAgfV07Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tCmlu
ZGV4IDg5M2MwODIzNWU3NzU5MDQyN2Y1YjE0MWRmZmQ3ZjVmYTIzNWJiNjQuLmEwOWUwMDdkMWE0
YjY1ZTBlN2IwZDA2MTIxOTZjNmIwZDEzNmNiZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0KQEAgLTI4LDcgKzI4
LDYgQEAKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDEwMDAKIAotI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9ydCAiV0tO
U1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2Vi
Vmlldy5oIgpAQCAtNTAsNiArNDksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9OU1NoYXJpbmdTZXJ2
aWNlUGlja2VyU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVmlld1NQSS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1VSTC5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLX0lOX1VNQlJF
TExBKFF1YXJ0eiwgSW1hZ2VLaXQpCkBAIC02MDUsNyArNjA1LDcgQEAgc3RhdGljIE5TU3RyaW5n
ICpwYXRoVG9QaG90b09uRGlzayhOU1N0cmluZyAqc3VnZ2VzdGVkRmlsZW5hbWUpCiAKICAgICBO
U0FycmF5ICptZW51SXRlbXMgPSBbW2dldEREQWN0aW9uc01hbmFnZXJDbGFzcygpIHNoYXJlZE1h
bmFnZXJdIG1lbnVJdGVtc0ZvclJlc3VsdDpbX2N1cnJlbnRBY3Rpb25Db250ZXh0IG1haW5SZXN1
bHRdIGFjdGlvbkNvbnRleHQ6X2N1cnJlbnRBY3Rpb25Db250ZXh0LmdldCgpXTsKICAgICBpZiAo
bWVudUl0ZW1zLmNvdW50ID09IDEgJiYgX2hpdFRlc3RSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dElu
ZGljYXRvcikKLSAgICAgICAgX2hpdFRlc3RSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRv
ci0+c2V0UHJlc2VudGF0aW9uVHJhbnNpdGlvbihUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2UpOworICAgICAgICBfaGl0VGVzdFJlc3VsdC5kZXRlY3RlZERhdGFU
ZXh0SW5kaWNhdG9yLT5zZXRQcmVzZW50YXRpb25UcmFuc2l0aW9uKFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwogICAgIHJldHVybiBtZW51SXRlbXM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkNzE5OWQ3ZTY0MWI4ZjM3ZjcwMzA5OTJlODViNzNmOWQ4OGI0OGZjLi42NzEzZTJlMmE2
MjQ2ZmMyZGUwYzRlMDZiMmRiMWJhZjY1YmQ0MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTAsOCArMTEwLDYgQEAKIAkJ
MEZDQjRFNTExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNT
ZWN1cml0eU9yaWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQ0I0RTQxMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJ
T1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gKi87IH07CiAJCTBGQ0I0RTU0MThCQkUwNDQwMDBGQ0ZD
OSAvKiBXS1Njcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQ0I0RTQ0MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcuaCAqLzsg
fTsKIAkJMEZDQjRFNTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQ1MThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gKi87IH07Ci0JCTBGQ0I0RTYwMThCQkUzRDkwMDBG
Q0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1NjE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4dEluZGlj
YXRvcldpbmRvdy5oICovOyB9OwotCQkwRkNCNEU2MTE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4dElu
ZGljYXRvcldpbmRvdy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQ0I0RTU3MThCQkUzRDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1t
ICovOyB9OwogCQkwRkNCNEU2MjE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTU4MThC
QkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oICovOyB9OwogCQkwRkNCNEU2MzE4QkJF
M0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNs
aWVudEltcGwubW0gKi87IH07CiAJCTBGQ0I0RTY2MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50
aW5nVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDQjRFNUMxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggKi87IH07CkBAIC0z
MDgsOCArMzA2LDYgQEAKIAkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkw
QzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLzsgfTsKIAkJMUE5MEMx
RjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyog
RmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMxRjUxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZp
bmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgKi87
IH07Ci0JCTFBOTEwMDcxMTI2Njc1QzQwMDE4NDJGNSAvKiBUZXh0SW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA2RjEyNjY3NUMz
MDAxODQyRjUgLyogVGV4dEluZGljYXRvci5oICovOyB9OwotCQkxQTkxMDA3MjEyNjY3NUM0MDAx
ODQyRjUgLyogVGV4dEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogVGV4dEluZGljYXRv
ci5jcHAgKi87IH07CiAJCTFBOTJEQzExMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTky
REMxMDEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oICovOyB9OwogCQkxQTky
REMxMzEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyREMxMjEyRjhCQUI5MDAxN0FG
NjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgKi87IH07CiAJCTFBOUUzMjg5MTgyMTYzNjkwMEY1
RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RTMyODcxODIxNjM2OTAwRjVEMDRDIC8qIF9XS1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTIwNzEsOCArMjA2Nyw2IEBACiAJCTBGQ0I0RTQxMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0dlb2xvY2F0aW9uUHJvdmlk
ZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW07IHBhdGggPSBpb3MvV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkNCNEU0NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLU2Nyb2xsVmlldy5oOyBwYXRoID0gaW9zL1dLU2Nyb2xs
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU0NTE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tTY3JvbGxWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV0tTY3JvbGxWaWV3Lm1tOyBwYXRoID0gaW9zL1dLU2Nyb2xsVmlldy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDQjRFNTYxOEJCRTNEOTAwMEZDRkM5IC8qIFRl
eHRJbmRpY2F0b3JXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dEluZGljYXRvcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNCNEU1
NzE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4dEluZGljYXRvcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRJbmRpY2F0b3JXaW5kb3cubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdl
Q2xpZW50SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2xpZW50
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU1OTE4QkJFM0Q5MDAw
RkNGQzkgLyogUGFnZUNsaWVudEltcGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDQjRFNUMxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJpbnRpbmdWaWV3Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMjk0LDggKzIyODgsNiBAQAogCQkxQTkwQzFFRDEyNjRGRDUwMDAz
RTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMx
RjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZpbmRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTEwMDZGMTI2Njc1QzMwMDE4NDJGNSAvKiBU
ZXh0SW5kaWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbmRp
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MTAwNzAxMjY2NzVDNDAw
MTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGV4dEluZGljYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyVHJlZUNvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MkRDMTIxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNv
bnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5ZXJUcmVl
Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOUUzMjg3MTgyMTYz
NjkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDQ5Myw4ICs0NDg1LDYgQEAKIAkJCQk1MjcyQjI4ODE0MDY5ODVE
MDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwICovLAogCQkJCTUyNzJCMjg5MTQwNjk4NUQw
MDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oICovLAogCQkJCTFBNUU0REEzMTJEM0JEM0QwMDk5
QTJCQiAvKiBUZXh0Q2hlY2tlclN0YXRlLmggKi8sCi0JCQkJMUE5MTAwNzAxMjY2NzVDNDAwMTg0
MkY1IC8qIFRleHRJbmRpY2F0b3IuY3BwICovLAotCQkJCTFBOTEwMDZGMTI2Njc1QzMwMDE4NDJG
NSAvKiBUZXh0SW5kaWNhdG9yLmggKi8sCiAJCQkJMUE2NDI0NUQxMkRFMjlBMTAwQ0FBRTJDIC8q
IFVwZGF0ZUluZm8uY3BwICovLAogCQkJCTFBNjQyNDVDMTJERTI5QTEwMENBQUUyQyAvKiBVcGRh
dGVJbmZvLmggKi8sCiAJCQkJMUFDMTMzNjUxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmNw
cCAqLywKQEAgLTY2NDEsOCArNjYzMSw2IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCODc4QjYx
MzEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggKi8sCiAJCQkJQjg3OEI2MTQx
MzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLywKLQkJCQkwRkNCNEU1NjE4
QkJFM0Q5MDAwRkNGQzkgLyogVGV4dEluZGljYXRvcldpbmRvdy5oICovLAotCQkJCTBGQ0I0RTU3
MThCQkUzRDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tICovLAogCQkJCTFBRkRF
NjVCMTk1NEU4RDUwMEM0OEZGQSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwICovLAog
CQkJCTBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oICovLAogCQkJ
CTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLywKQEAgLTcy
MzcsNyArNzIyNSw2IEBACiAJCQkJNEEzQ0MxOEYxOUIwN0I4QTAwRDE0QUVGIC8qIFdLVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTU3NUZCMTQ5NkI1
MjYwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTBD
MUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUE5MTAwNzExMjY2NzVDNDAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNUU3NzI4MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRTgxRDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFCQzNERkMxODk5RjUxQzAwNEYwNjI2IC8qIFdLTmF2aWdhdGlv
bkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTcyODUsNyArNzI3Miw2IEBACiAJCQkJNTE2
NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2MDAzNjBGM0YgLyogSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTExNURDNzIxOTFE
ODJEQTAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEZDQjRFNjAxOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMTRERjc3MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IwQjBERTEyMzA1QThDMDBC
MTM0MUUgLyogSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFFNDlBNDkxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCBpbiBIZWFkZXJz
ICovLApAQCAtODkwMCw3ICs4ODg2LDYgQEAKIAkJCQkxQUE1NzYwMjE0OTZCOTc5MDBBNEVFMDYg
LyogRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBMUUwOTMzMTg4NjFEMzgwMEQyREM0OSAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE5MEMxRjUxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBOTEwMDcyMTI2Njc1QzQwMDE4NDJGNSAv
KiBUZXh0SW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTgxRDhDMTMxOUY3RUYw
MDI0MTkxMCAvKiBGb250SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzhFMUE0OTE4MjA4
Q0Q2MDAzMTAwN0EgLyogV0tOU1N0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYwOEI3
MTkyNjlFNkQwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NDA2LDcgKzkzOTEsNiBAQAogCQkJCUJDQkFBQzcy
MTQ0RTYxOTkwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQlCQ0JBQUNGNTE0NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRl
eHRHcm91cC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMjkwOTkyMTgzQUNFQUYwMDU1MjJBNiAv
KiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0I0RTYx
MThCQkUzRDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMyMDRFRUUxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDNkU3MEZCMThCMkRDN0EwMEYyNEUyRSAvKiBXZWJQcm9jZXNzQ29jb2EubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkNv
bnRleHRNZW51Q2xpZW50TWFjLm1tCmluZGV4IDBiMGRjM2E0Y2MwYzU5Nzc0YmI5NmQwMWY4MWRl
ZGZhNjUxODQyNDguLjRlZDVlMjVlNjcyZmRjMzYzNzYwZGM4MzY0MGFiMTE3MTRiMzdmZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkNvbnRleHRNZW51Q2xpZW50TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tCkBAIC0yOSwxMyAr
MjksMTMgQEAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIAogI2ltcG9ydCAiRGljdGlvbmFy
eVBvcHVwSW5mby5oIgotI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9ydCAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6bG9va1VwSW5EaWN0aW9uYXJ5
KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBtX3BhZ2UtPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
U2VsZWN0aW9uKGZyYW1lLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRp
Y2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7CisgICAg
bV9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKIH0KIAogYm9vbCBXZWJDb250ZXh0TWVudUNsaWVu
dDo6aXNTcGVha2luZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTY0MmMyNDk5NWYzN2NkMmFkZDNjYzljZjFk
MmIwZjA4YTBhZDFmLi5hODZiMDk2MTFhOGZhZjkxZjE0ZjczNzZjZjAyZjQwZjRhYTI1YmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNs
dWRlICJUZXh0SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV0tQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNDQsNiArNDMs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6aGlkZUZpbmRVSSgpCiAjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgRmluZENvbnRyb2xs
ZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IoRnJhbWUmIHNlbGVjdGVkRnJhbWUsIGJvb2wgaXNTaG93
aW5nT3ZlcmxheSwgYm9vbCBzaG91bGRBbmltYXRlKQogewotICAgIFJlZlB0cjxUZXh0SW5kaWNh
dG9yPiBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFt
ZSgqV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoc2VsZWN0ZWRGcmFtZSksIHNob3VsZEFuaW1hdGUg
PyBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UgOiBUZXh0SW5k
aWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lKTsKKyAgICBSZWZQdHI8VGV4dElu
ZGljYXRvcj4gaW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbklu
RnJhbWUoc2VsZWN0ZWRGcmFtZSwgc2hvdWxkQW5pbWF0ZSA/IFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UgOiBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Tm9uZSk7CiAgICAgaWYgKCFpbmRpY2F0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZmI5
NGM1OTMxMjE2YjVlZDBmMWY3MjE4MjYwNmI1YmRiOTVkODE1ZC4uNjQ0YWFhZmNmM2FmMDY2MWNm
NTJiY2NiZjdkMDdjNzI3MjhjMGE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAj
aW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgotI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RpY3RhdGlvbkFsdGVybmF0
aXZlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgpAQCAtNTgsNiArNTcsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZVZpc2liaWxpdHlTdGF0ZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2Nyb2xsVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2luZy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFj
dGl2aXR5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaWV3U3RhdGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oPgpAQCAtNjc0LDcgKzY3NCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNwZWFrKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc3RvcFNwZWFraW5nKCk7
CiAKLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIFRleHRJbmRpY2F0b3I6
OlByZXNlbnRhdGlvblRyYW5zaXRpb24pOworICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBGb3JTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uJiwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pOwog
I2VuZGlmCiAKICAgICBib29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7CkBAIC05OTIs
NyArOTkyLDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7
CiAgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpOwot
ICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShXZWJDb3JlOjpGcmFtZSos
IFdlYkNvcmU6OlJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yOjpQ
cmVzZW50YXRpb25UcmFuc2l0aW9uKTsKKyAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpSYW5nZSYsIE5TRGljdGlvbmFyeSAq
b3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pOwog
CiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpp
bmRleCAyNDgzNDJhMzQwNzIwODY3MzdlNzg0YWIzMjM4OTgzM2NmYzY4ZjBjLi4yNWQxNmQ2YTg1
YzM1NWEzZjg1MTViNDcwMDJlOWUwYzlkMTY3YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yOTYsMTIgKzI5Niwx
MiBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25z
dCBGbG9hdFBvaW50JikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb24pCit2b2lk
IFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSosIFJhbmdlJiwgTlNEaWN0aW9uYXJ5ICosIFRl
eHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb24pCit2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUqLCBSYW5nZSYsIE5TRGljdGlvbmFyeSAq
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCmluZGV4IDkyZjliMWU1MGUwMDZkMGYwZDAzMDQ5NzFlZjIzOGE5OWZi
ZjNhMjMuLjdhMTJjMmNjNTdjMDliNTA2MjM4ZTY4YTJhMzJjMWU4MzE1NDg1YTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
QEAgLTQ5NCwxMCArNDk0LDEwIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5n
ZShmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpCb3VuY2UpOworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJh
bWUsICpyYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkJvdW5jZSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JT
ZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
RnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCiB7CiAg
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0
ZWRSYW5nZSA9IHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihzZWxlY3Rpb24s
ICZvcHRpb25zKTsKQEAgLTUwOCwxMCArNTA4LDEwIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2Vs
CiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9u
KCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlv
bihmcmFtZSwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yOjpQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworICAgIHBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGUpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
UmFuZ2UoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywg
VGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0
aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1l
KiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCiB7CiAgICAg
aWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1l
bnVIaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uSW5WCiAgICAg
ICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRz
VG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7CiAKICAgICAgICAgYWN0aW9u
TWVudVJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94OwotICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3Ig
PSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKm1haW5SZXN1bHRSYW5nZSwgVGV4dElu
ZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKKyAg
ICAgICAgYWN0aW9uTWVudVJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVzdWx0UmFuZ2UsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwogICAgICAgICBhY3Rp
b25NZW51UmVzdWx0LmRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXkgPSBvdmVybGF5
LT5wYWdlT3ZlcmxheUlEKCk7CiAgICAgICAgIG1fbGFzdEFjdGlvbk1lbnVSYW5nZUZvclNlbGVj
dGlvbiA9IG1haW5SZXN1bHRSYW5nZTsKIApAQCAtMTA1NCw3ICsxMDU0LDcgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9p
bnQgbG9jYXRpb25JblYKICAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5hY3Rpb25Db250ZXh0ID0g
RGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3Vs
dCwgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKICAgICAgICAg
aWYgKGFjdGlvbk1lbnVSZXN1bHQuYWN0aW9uQ29udGV4dCAmJiBkZXRlY3RlZERhdGFSYW5nZSkg
ewogICAgICAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9
IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5k
ZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KCpkZXRlY3RlZERhdGFSYW5nZSwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKKyAgICAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0
ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgq
ZGV0ZWN0ZWREYXRhUmFuZ2UsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpC
b3VuY2VBbmRDcm9zc2ZhZGUpOwogICAgICAgICAgICAgbV9sYXN0QWN0aW9uTWVudVJhbmdlRm9y
U2VsZWN0aW9uID0gZGV0ZWN0ZWREYXRhUmFuZ2U7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242040</attachid>
            <date>2014-11-21 04:41:32 -0800</date>
            <delta_ts>2014-11-21 04:59:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138954-20141121134240.patch</filename>
            <type>text/plain</type>
            <size>116189</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBhY2MzMTk2YjM1YTZj
MGY3YjU1YmVhODNmMWFlMjU3MmUwOTQ0YS4uMWRmNTZjOTk2ODNiYzA0NzM4YjJkZTIyYzI5MDVm
ZDhiYzAxZGI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTExLTIxICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgVGV4dElu
ZGljYXRvcntXaW5kb3d9IHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODk1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg5OTIx
ODU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
ZSBUZXh0SW5kaWNhdG9yIGFuZCBUZXh0SW5kaWNhdG9yV2luZG93IHRvIFdlYkNvcmUgc28gdGhh
dCBib3RoCisgICAgICAgIFdlYktpdHMgY2FuIHNoYXJlIHRoZSBpbXBsZW1lbnRhdGlvbi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICBCdWlsZCBUZXh0SW5kaWNhdG9yLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIEV4cG9ydCBUZXh0SW5kaWNhdG9y
e1dpbmRvd30gc3ltYm9scyBmb3IgdGhlIFdlYktpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcC4K
KyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmguCisgICAgICAgIFN0cmFpZ2hmb3J3YXJkIG1vdmUg
b2YgVGV4dEluZGljYXRvciBmcm9tIFdlYktpdDIsIGV4Y2VwdDoKKworICAgICAgICBNb3ZlIFRl
eHRJbmRpY2F0b3I6OkRhdGEgYW5kIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRp
b24gb3V0IGRpcmVjdGx5CisgICAgICAgIGludG8gdGhlIFdlYkNvcmUgbmFtZXNwYWNlIHRvIGFs
bG93IGZvciBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQyIGFyZ3VtZW50IGNvZGVycy4KKworICAg
ICAgICBVc2UgSW1hZ2UgaW5zdGVhZCBvZiBTaGFyZWFibGVCaXRtYXAgaW50ZXJuYWxseS4KKwor
ICAgICAgICBNb3ZlIHRoZSBUZXh0SW5kaWNhdG9yRGF0YSBlbmNvZGUvZGVjb2RlIHRvIFdlYkNv
cmVBcmd1bWVudENvZGVycy4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9U
ZXh0SW5kaWNhdG9yV2luZG93LmguCisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldp
bmRvdy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5tbS4KKyAgICAgICAgU3RyYWlnaGZvcndhcmQgbW92ZSBvZiBUZXh0SW5k
aWNhdG9yV2luZG93IGZyb20gV2ViS2l0Mi4KKwogMjAxNC0xMS0yMCAgQmVuamFtaW4gUG91bGFp
biAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIHJlbWFpbmluZyB2
ZXN0aWdlcyBvZiBtaW5pbWFsLXVpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDZiYzgxMDJiNDQwMzFlMjdiNDk0
NTk2OWZjZmQ5YTg0NDE1M2I3YS4uOThmNzc1Nzg0Y2UwNzIwOGRkYjhiMjhhZjY0MzdlOTdhNzcw
ZTU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE0LTExLTIxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgVGV4dEluZGljYXRv
cntXaW5kb3d9IHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzODk1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg5OTIxODU+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgUmVtb3ZlIFRleHRJbmRpY2F0b3IuY3BwLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIChzdHJ1Y3Rfb3JfY2xhc3MpOgor
ICAgICAgICAoaGVhZGVyc19mb3JfdHlwZSk6CisgICAgICAgIFRlbGwgbWVzc2FnZXMucHkgdGhh
dCBUZXh0SW5kaWNhdG9yRGF0YSBpcyBhIHN0cnVjdCwgYW5kIGNvbWVzIGZyb20gVGV4dEluZGlj
YXRvci5oLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPFRleHRJbmRpY2F0b3JEYXRhPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxUZXh0SW5kaWNhdG9yRGF0YT46OmRlY29kZSk6CisgICAgICAgIEFkZCBh
cmd1bWVudCBjb2RlcnMgZm9yIFRleHRJbmRpY2F0b3JEYXRhLgorCisgICAgICAgICogU2hhcmVk
L0RpY3Rpb25hcnlQb3B1cEluZm8uaDogICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMvQWN0
aW9uTWVudUhpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL0FjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0Lm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tBY3Rpb25N
ZW51Q29udHJvbGxlci5tbToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4
dE1lbnVDbGllbnRNYWMubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIEFkanVzdCB0byBU
ZXh0SW5kaWNhdG9yIGFuZCBUZXh0SW5kaWNhdG9yV2luZG93J3MgbmV3IGhvbWUuCisKIDIwMTQt
MTEtMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBm
aXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc5NjA0M2Y4YWZiZTcyZjgwMTcwZTRmZTgxMGYw
ZWYwMmVjMjFmMDMuLmUwNTYzYTQ4ZDg4N2E4NjRhOTA4ZjU5ZTUyZjRhMGFkYzM1MzQ3MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xOTM0LDYgKzE5MzQsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAKICAgICBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cAogICAgIHBhZ2UvU3VzcGVuZGFibGVUaW1lci5jcHAKKyAgICBwYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCiAgICAgcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCiAgICAgcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCBiNzkzY2VlNTJlNTBkODIxZTg2NDdmZjEwMTNiNGQ4MDUyYjliYjM3
Li40ZWY5NjM3NDEyMDE5OGM4MmM4MWViZmVmZjY5ZWY0ZjAyZGRiMTU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgpAQCAtMjI5NSw2ICsyMjk1LDEwIEBAIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
N21vdXNlVXBFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjhrZXlFdmVudEVQ
N05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOW1vdXNlRG93bkVQN05TRXZlbnQK
IF9fWk43V2ViQ29yZTEzRGF0YURldGVjdGlvbjI5ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1
bHRFUktOU18xM0hpdFRlc3RSZXN1bHRFUk5TXzlGbG9hdFJlY3RFUk4zV1RGNlJlZlB0cklOU181
UmFuZ2VFRUUKK19fWk43V2ViQ29yZTEzVGV4dEluZGljYXRvcjE1Y3JlYXRlV2l0aFJhbmdlRVJL
TlNfNVJhbmdlRU5TXzM1VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb25FCitfX1pO
N1dlYkNvcmUxM1RleHRJbmRpY2F0b3IyNmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lRVJOU181
RnJhbWVFTlNfMzVUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbkUKK19fWk43V2Vi
Q29yZTEzVGV4dEluZGljYXRvcjZjcmVhdGVFUktOU18xN1RleHRJbmRpY2F0b3JEYXRhRQorX19a
TjdXZWJDb3JlMTNUZXh0SW5kaWNhdG9yRDFFdgogX19aTjdXZWJDb3JlMTNnZXRSYXdDb29raWVz
RVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVM1X1JOM1dURjZWZWN0b3JJ
TlNfNkNvb2tpZUVMajBFTlM2XzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxM3Rv
RGV2aWNlU3BhY2VFUktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTE0Y29v
a2llc0VuYWJsZWRFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUzVfCkBA
IC0yMzA5LDYgKzIzMTMsOSBAQCBfX1pON1dlYkNvcmUxN1Njcm9sbGJhclRoZW1lTWFjMjNzZXRV
cE92ZXJoYW5nQXJlYVNoYWRvd0VQN0NBTGF5ZXIKIF9fWk43V2ViQ29yZTE3U2Nyb2xsYmFyVGhl
bWVNYWMyNHJlbW92ZU92ZXJoYW5nQXJlYVNoYWRvd0VQN0NBTGF5ZXIKIF9fWk43V2ViQ29yZTE3
U2Nyb2xsYmFyVGhlbWVNYWMyN3NldFVwT3ZlcmhhbmdBcmVhQmFja2dyb3VuZEVQN0NBTGF5ZXJS
S05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE3U2Nyb2xsYmFyVGhlbWVNYWMyOHJlbW92ZU92ZXJo
YW5nQXJlYUJhY2tncm91bmRFUDdDQUxheWVyCitfX1pON1dlYkNvcmUxOVRleHRJbmRpY2F0b3JX
aW5kb3cxNnNldFRleHRJbmRpY2F0b3JFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNUZXh0SW5kaWNh
dG9yRUVFYk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVFCitfX1pON1dlYkNvcmUxOVRleHRJbmRpY2F0
b3JXaW5kb3dDMUVQNk5TVmlldworX19aTjdXZWJDb3JlMTlUZXh0SW5kaWNhdG9yV2luZG93RDFF
dgogX19aTjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzU2FmYXJpRXYKIF9fWk43V2ViQ29yZTIwUGxh
dGZvcm1FdmVudEZhY3RvcnkyNGNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudEVQN05TRXZlbnRQNk5T
VmlldwogX19aTjdXZWJDb3JlMjBQbGF0Zm9ybUV2ZW50RmFjdG9yeTI3Y3JlYXRlUGxhdGZvcm1L
ZXlib2FyZEV2ZW50RVA3TlNFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY5OTU1ODJhM2U0NjE4NTNhMTg5ZGU2ZjRkYmEx
YjgyZDcwODBiNzYuLjYzYWMzZDliMWYxM2YyZjIwZjZiYWM1NTVjMjVlZjk5ODhkYTRkMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTExMDQsNiArMTEwNCwxMCBAQAogCQkyRDQ4MUYwMjE0NkI1QzU1MDBBQTc4MzQgLyogQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0
ZWRJbWFnZS5oICovOyB9OwogCQkyRDQ4MUYwMzE0NkI1QzY1MDBBQTc4MzQgLyogR3JhZGllbnRJ
bWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDJGQzA1NjE0NjBDRDZGMDAyNjM2MzMgLyogR3JhZGllbnRJbWFnZS5jcHAgKi87IH07CiAJCTJE
NDgxRjA0MTQ2QjVDNkIwMEFBNzgzNCAvKiBHcmFkaWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJGQzA1NzE0NjBDRDZGMDAyNjM2MzMg
LyogR3JhZGllbnRJbWFnZS5oICovOyB9OworCQkyRDRGOTZGNTFBMUVDQzI0MDA5OEJGODggLyog
VGV4dEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDRGOTZGMTFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgKi87
IH07CisJCTJENEY5NkY2MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDRGOTZGMjFBMUVDQzI0
MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTJENEY5NkY3MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5k
aWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDRGOTZGMzFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvcldpbmRvdy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJENEY5NkY4
MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0Rjk2RjQxQTFFQ0MyNDAwOThCRjg4
IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cubW0gKi87IH07CiAJCTJENThEODU1MUExNUY2NUYwMEE1
RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENThE
ODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1OEQ4NTQxQTE1RjY1RjAwQTVGNzI2IC8q
IERhdGFEZXRlY3Rpb24ubW0gKi87IH07CiAJCTJENTlGMUJGMUEwMDQ0QzYwMDFGM0QyOSAvKiBE
YXRhRGV0ZWN0b3JzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDU5RjFCRTFBMDA0NEM2MDAxRjNEMjkgLyogRGF0YURldGVjdG9yc1NQSS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMyLDYg
KzgxMzYsMTAgQEAKIAkJMkQ0MTNGNjAxQTE4N0EzRjAwNDFBNTIxIC8qIExvb2t1cFNQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb29rdXBTUEkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0NkYwNEQxN0I5NkZCRDAwNTY0N0YwIC8qIEludFBvaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0NkYwNEYxN0I5NkZEMjAwNTY0N0YwIC8qIElu
dFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50U2l6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENEY5NkYxMUExRUNDMjQwMDk4QkY4
OCAvKiBUZXh0SW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRleHRJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDRG
OTZGMjFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZXh0SW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJENEY5NkYzMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbmRpY2F0b3JXaW5kb3cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ0Rjk2RjQxQTFFQ0MyNDAwOThCRjg4IC8q
IFRleHRJbmRpY2F0b3JXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBUZXh0SW5kaWNhdG9yV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJENThEODU0MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YURldGVjdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1OUYxQkUxQTAwNDRDNjAwMUYz
RDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0YURldGVjdG9yc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY3
MjMsNiArMTY3MzEsOCBAQAogCQkJCTYyNkNERTBEMTE0MDQyNEMwMDFFNUE2OCAvKiBTcGF0aWFs
TmF2aWdhdGlvbi5oICovLAogCQkJCTYyQzEyMTdBMTFBQjlFNzYwMDNDNDYyQyAvKiBTdXNwZW5k
YWJsZVRpbWVyLmNwcCAqLywKIAkJCQk2MkMxMjE3QjExQUI5RTc3MDAzQzQ2MkMgLyogU3VzcGVu
ZGFibGVUaW1lci5oICovLAorCQkJCTJENEY5NkYxMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5k
aWNhdG9yLmNwcCAqLywKKwkJCQkyRDRGOTZGMjFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGlj
YXRvci5oICovLAogCQkJCTFBRTc5RDQwMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwICovLAogCQkJCTFBRTc5RDQxMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29u
dGVudENvbnRyb2xsZXIuaCAqLywKIAkJCQkwMDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNl
ckNvbnRlbnRUeXBlcy5oICovLApAQCAtMTc2MzAsNiArMTc2NDAsOCBAQAogCQkJCTJEOTNBRUUx
MTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJ
MkQ5M0FFRTIxOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Ki8sCiAJCQkJRTFDMkYyNDgxNTMzQTIxMjAwODNGOTc0IC8qIFNldHRpbmdzTWFjLm1tICovLAor
CQkJCTJENEY5NkYzMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggKi8s
CisJCQkJMkQ0Rjk2RjQxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cubW0g
Ki8sCiAJCQkJMjYyNTVGMDIxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudE1hYy5tbSAqLywK
IAkJCQlGNTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmlldy5oICovLAog
CQkJKTsKQEAgLTIzNTM3LDYgKzIzNTQ5LDcgQEAKIAkJCQlCQzVFQjVEQjBFODFCN0VBMDBCMjU5
NjUgLyogQm9yZGVyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFRDhDMzdBMTgzQkZGOEMw
MDlFNTNCRCAvKiBCb3hTaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NTUwOTdEOTMw
MjAwOTRDOUU0IC8qIGJyZWFrX2xpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDRGOTZGNjFB
MUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlEREIwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU5OUU3NTkwMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU5QjU5Nzc1MTEwODY1NzkwMDcxNTlFOCAvKiBCcmlkZ2VKU0MuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjYwOTYsNiArMjYxMDksNyBAQAogCQkJCUI4REJEQjRFMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NTEyNTAyMzE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDRGOTZGNzFBMUVDQzI0MDA5OEJGODggLyogVGV4
dEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAw
NTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OUUxNjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNw
b3RMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYyNyw2ICsyNzY0MSw3IEBACiAJ
CQkJODVERjJFRUUwQUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODVDMDUwQkIwQUQ4NEY1RTAwNTUzMkU3IC8qIERPTUhUTUxFbWJlZEVsZW1l
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUJBNENFMDBBQTY4NjFCMDA4ODA1MkQgLyogRE9N
SFRNTEZpZWxkU2V0RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJENEY5NkY4MUExRUND
MjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODVFQ0JFRjAwQUE3NjI2OTAwNTQ0RjBCIC8qIERPTUhUTUxGb250RWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTg1REYyQzVEMEFBMzQxRjYwMEFENjRDNSAvKiBET01IVE1MRm9ybUVsZW1l
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURGODE5NjBBQTc3RTRCMDA0ODZBRDcgLyogRE9N
SFRNTEZyYW1lRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjk1MzQsNiArMjk1NDksNyBA
QAogCQkJCUZFOEE2NzQ3MTZDREQxOUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTREMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0
ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTRGMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDRGOTZGNTFBMUVD
QzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUUx
ODExMzE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFQUQ3RDg3MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTU0MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlYTZiMjEwOTUzYmNlMjY4OWI4NDc3
NmU1Nzc5YmMzMWUyMDEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5o
IgorI2luY2x1ZGUgIkZyYW1lU25hcHNob3R0aW5nLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGVzZSBz
aG91bGQgbWF0Y2ggdGhlIHZhbHVlcyBpbiBUZXh0SW5kaWNhdG9yV2luZG93LgorLy8gRklYTUU6
IElkZWFsbHkgdGhlc2Ugd291bGQgb25seSBiZSBpbiBvbmUgcGxhY2UuCisjaWYgRU5BQkxFKExF
R0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKK2NvbnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXIg
PSAzOworY29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXIgPSAxOworY29uc3QgZmxvYXQgZHJvcFNo
YWRvd0JsdXJSYWRpdXMgPSAxLjU7CisjZWxzZQorY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRl
ciA9IDI7Citjb25zdCBmbG9hdCB2ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBmbG9hdCBkcm9w
U2hhZG93Qmx1clJhZGl1cyA9IDEyOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIEZsb2F0UmVjdCBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93KGNvbnN0
IEZsb2F0UmVjdCByZWN0KQoreworICAgIEZsb2F0UmVjdCBvdXRzZXRSZWN0ID0gcmVjdDsKKyAg
ICBvdXRzZXRSZWN0LmluZmxhdGVYKGRyb3BTaGFkb3dCbHVyUmFkaXVzICsgaG9yaXpvbnRhbEJv
cmRlcik7CisgICAgb3V0c2V0UmVjdC5pbmZsYXRlWShkcm9wU2hhZG93Qmx1clJhZGl1cyArIHZl
cnRpY2FsQm9yZGVyKTsKKyAgICByZXR1cm4gb3V0c2V0UmVjdDsKK30KKworc3RhdGljIGJvb2wg
dGV4dEluZGljYXRvcnNGb3JUZXh0UmVjdHNPdmVybGFwKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiB0ZXh0UmVjdHMpCit7CisgICAgc2l6ZV90IGNvdW50ID0gdGV4dFJlY3RzLnNpemUoKTsKKyAg
ICBpZiAoY291bnQgPD0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEZs
b2F0UmVjdD4gaW5kaWNhdG9yUmVjdHM7CisgICAgaW5kaWNhdG9yUmVjdHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShjb3VudCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3QgPSBvdXRzZXRJbmRpY2F0b3JS
ZWN0SW5jbHVkaW5nU2hhZG93KHRleHRSZWN0c1tpXSk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aiA9IGluZGljYXRvclJlY3RzLnNpemUoKTsgajsgKSB7CisgICAgICAgICAgICAtLWo7CisgICAg
ICAgICAgICBpZiAoaW5kaWNhdG9yUmVjdC5pbnRlcnNlY3RzKGluZGljYXRvclJlY3RzW2pdKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGlj
YXRvclJlY3RzLnVuY2hlY2tlZEFwcGVuZChpbmRpY2F0b3JSZWN0KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRv
cjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dEluZGljYXRvcihkYXRhKSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5n
ZSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKK3sKKyAgICBGcmFtZSogZnJhbWUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLmZyYW1lKCk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oJnJh
bmdlKTsKKworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBpbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZSgqZnJhbWUsIHByZXNlbnRhdGlvblRyYW5z
aXRpb24pOworCisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24pOworICAgIAorICAgIHJldHVybiBpbmRpY2F0b3IucmVsZWFzZSgpOworfQorCisvLyBGSVhN
RSAoMTM4ODg5KTogSWRlYWxseSB0aGUgRnJhbWVTbmFwc2hvdHRpbmcgZnVuY3Rpb25zIHdvdWxk
IGJlIG1vcmUgZmxleGlibGUKKy8vIGFuZCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGltcGxlbWVudCB0
aGlzIGhlcmUuCitzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gc25hcHNob3RTZWxlY3Rpb25XaXRo
SGlnaGxpZ2h0KEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKKworICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzID0gc2VsZWN0aW9u
LnNlbGVjdGlvbkJvdW5kcygpOworCisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBzZWxl
Y3Rpb24gYm91bmRzIHRvIGJlIGVtcHR5OyBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU2NjQ1LgorICAgIGlmIChzZWxlY3Rpb25Cb3VuZHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgZW5jbG9zaW5nSW50UmVjdChz
ZWxlY3Rpb25Cb3VuZHMpLCAwKTsKKworICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIHNuYXBzaG90LT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdT
dG9yZSwgVW5zY2FsZWQpOworfQorCitQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAg
ICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbkJvdW5kcygpKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGluZGljYXRvckJpdG1h
cCA9IHNuYXBzaG90U2VsZWN0aW9uKGZyYW1lLCBTbmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNrVGV4
dCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7CisgICAgaWYgKCFpbmRp
Y2F0b3JCaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEltYWdl
PiBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0OworICAgIGlmIChwcmVzZW50YXRpb25UcmFu
c2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQgPSBzbmFwc2hv
dFNlbGVjdGlvbldpdGhIaWdobGlnaHQoZnJhbWUpOworCisgICAgLy8gU3RvcmUgdGhlIHNlbGVj
dGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkK
KyAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxs
IHByZWNpc2VseSBvdmVybGFwLgorICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coc2VsZWN0aW9uUmVjdCk7
CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkuZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOworCisgICAgLy8g
VGhlIGJvdW5kaW5nIHJlY3Qgb2YgYWxsIHRoZSB0ZXh0IHJlY3RzIGNhbiBiZSBkaWZmZXJlbnQg
dGhhbiB0aGUgc2VsZWN0aW9uCisgICAgLy8gcmVjdCB3aGVuIHRoZSBzZWxlY3Rpb24gc3BhbnMg
bXVsdGlwbGUgbGluZXM7IHRoZSBpbmRpY2F0b3IgZG9lc24ndCBhY3R1YWxseQorICAgIC8vIGNh
cmUgd2hlcmUgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgZ29lcywganVzdCB3aGVyZSB0aGUgdGV4
dCBhY3R1YWxseSBpcy4KKyAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29v
cmRpbmF0ZXM7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5XaW5kb3dDb29yZGlu
YXRlczsKKyAgICBmb3IgKGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3QgOiB0ZXh0UmVjdHMpIHsK
KyAgICAgICAgRmxvYXRSZWN0IHRleHRSZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IGZyYW1lLnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KSk7CisgICAg
ICAgIHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXMuYXBwZW5kKHRleHRSZWN0SW5XaW5kb3dD
b29yZGluYXRlcyk7CisgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
LnVuaXRlKHRleHRSZWN0SW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgfQorCisgICAgVmVjdG9y
PEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKKyAgICBmb3Ig
KGF1dG8gcmVjdCA6IHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgcmVj
dC5tb3ZlQnkoLXRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkp
OworICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLmFwcGVuZChyZWN0
KTsKKyAgICB9CisKKyAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOworICAgIGRhdGEuc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlczsKKyAgICBkYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gdGV4
dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
czsKKyAgICBkYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgIGRhdGEuY29udGVudEltYWdlID0gaW5kaWNhdG9yQml0bWFw
OworICAgIGRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IGluZGljYXRvckJpdG1hcFdp
dGhIaWdobGlnaHQ7CisgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbjsKKworICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7
Cit9CisKK1RleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvckRh
dGEmIGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKK3sKKyAgICBBU1NFUlQobV9kYXRhLmNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yICE9IDEgfHwgbV9kYXRhLmNvbnRlbnRJbWFnZS0+c2l6ZSgpID09
IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
KS5zaXplKCkpOworCisgICAgaWYgKHRleHRJbmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcCht
X2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykpIHsKKyAgICAgICAgbV9k
YXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV9k
YXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOworICAgICAgICBtX2RhdGEu
dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5zaHJpbmsoMSk7CisgICAgfQorfQor
CitUZXh0SW5kaWNhdG9yOjp+VGV4dEluZGljYXRvcigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmUxMGEz
MzMzZjJmZWUyMzU3MTNlZjcwOGYwYTJkODFmNGM2OGQyNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFRleHRJbmRpY2F0b3JfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yX2gK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA8IDEwMTAwMAorI2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNB
VE9SX1NUWUxFIDEKKyNlbHNlCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1Jf
U1RZTEUgMAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBSYW5nZTsKKworZW51bSBjbGFzcyBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiB7CisgICAgTm9uZSwKKyAgICBCb3VuY2UsCisg
ICAgQm91bmNlQW5kQ3Jvc3NmYWRlCit9OworCitzdHJ1Y3QgVGV4dEluZGljYXRvckRhdGEgewor
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBGbG9h
dFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgVmVjdG9yPEZs
b2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKKyAgICBmbG9hdCBj
b250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICBSZWZQdHI8SW1hZ2U+IGNvbnRlbnRJbWFnZVdp
dGhIaWdobGlnaHQ7CisgICAgUmVmUHRyPEltYWdlPiBjb250ZW50SW1hZ2U7CisgICAgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKK307
CisKK2NsYXNzIFRleHRJbmRpY2F0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0SW5kaWNhdG9y
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRl
KGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gY3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGlj
YXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiwgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24pOworCisgICAgflRleHRJbmRpY2F0b3IoKTsKKworICAgIEZsb2F0UmVj
dCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIEZsb2F0UmVjdCB0ZXh0
Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS50
ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7IH0KKyAgICBm
bG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jb250
ZW50SW1hZ2VTY2FsZUZhY3RvcjsgfQorICAgIEltYWdlICpjb250ZW50SW1hZ2VXaXRoSGlnaGxp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQuZ2V0
KCk7IH0KKyAgICBJbWFnZSAqY29udGVudEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNv
bnRlbnRJbWFnZS5nZXQoKTsgfQorICAgIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjsgfQorCisgICAgdm9pZCBzZXRQcmVzZW50YXRpb25UcmFuc2l0aW9u
KFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHRyYW5zaXRpb24pIHsgbV9kYXRh
LnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSB0cmFuc2l0aW9uOyB9CisKKyAgICBUZXh0SW5kaWNh
dG9yRGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKK3ByaXZhdGU6CisgICAg
VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYpOworCisgICAgVGV4dEluZGlj
YXRvckRhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBUZXh0SW5kaWNhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0
b3JXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWQyMTQwZWQ3ZTgyOTQwMTc5NGNjNDQ1Y2M5NGI2Mjdj
ZWY0ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRl
eHRJbmRpY2F0b3JXaW5kb3dfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yV2luZG93X2gKKworI2lm
IFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8ZnVuY3Rpb25hbD4KKyNpbXBvcnQgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKworQGNsYXNzIE5TVmlldzsKK0BjbGFzcyBX
ZWJUZXh0SW5kaWNhdG9yVmlldzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
SW5kaWNhdG9yOworCitjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUZXh0SW5kaWNhdG9yV2luZG93KTsKKworcHVibGljOgorICAgIGV4cGxpY2l0
IFRleHRJbmRpY2F0b3JXaW5kb3coTlNWaWV3ICopOworICAgIH5UZXh0SW5kaWNhdG9yV2luZG93
KCk7CisKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9y
PiwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFuaW1hdGlvbkNvbXBsZXRp
b25IYW5kbGVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7CisKKyAgICB2
b2lkIHN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKTsKKworICAgIE5TVmlldyAqbV90YXJnZXRWaWV3
OworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBtX3RleHRJbmRpY2F0b3I7CisgICAgUmV0YWlu
UHRyPE5TV2luZG93PiBtX3RleHRJbmRpY2F0b3JXaW5kb3c7CisgICAgUmV0YWluUHRyPFdlYlRl
eHRJbmRpY2F0b3JWaWV3PiBtX3RleHRJbmRpY2F0b3JWaWV3OworCisgICAgUnVuTG9vcDo6VGlt
ZXI8VGV4dEluZGljYXRvcldpbmRvdz4gbV9zdGFydEZhZGVPdXRUaW1lcjsKKworICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gbV9ib3VuY2VBbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVGV4dEluZGljYXRvcldpbmRv
d19oCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWM0MjZjNzU3NmFjZGY0YTg5
YzY1NWFhNDA3ZTMzZGY0YmFjMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGV4dEluZGljYXRvcldpbmRvdy5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bXBvcnQgIlF1YXJ0ekNvcmVTUEkuaCIKKyNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKKyNpbXBv
cnQgIldlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZS5oIgorCitjb25zdCBDRlRpbWVJ
bnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Citjb25zdCBDRlRpbWVJbnRl
cnZhbCBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7Citjb25zdCBD
RlRpbWVJbnRlcnZhbCB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0
aW9uICsgMC4yOworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9u
ID0gMC4zOworCisjaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKK2NvbnN0
IENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAxLjU7Citjb25zdCBDR0Zsb2F0IGhvcml6b250YWxC
b3JkZXIgPSAzOworY29uc3QgQ0dGbG9hdCB2ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBDR0Zs
b2F0IGJvcmRlcldpZHRoID0gMS4wOworY29uc3QgQ0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAzOwor
Y29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Citjb25zdCBDR0Zsb2F0IGRyb3BT
aGFkb3dPZmZzZXRZID0gMTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAx
LjU7CisjZWxzZQorY29uc3QgQ0dGbG9hdCBtaWRCb3VuY2VTY2FsZSA9IDEuMjsKK2NvbnN0IENH
RmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDI7Citjb25zdCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVy
ID0gMTsKK2NvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGggPSAwOworY29uc3QgQ0dGbG9hdCBjb3Ju
ZXJSYWRpdXMgPSAwOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Citjb25z
dCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0gNTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRv
d0JsdXJSYWRpdXMgPSAxMjsKK2NvbnN0IENHRmxvYXQgcmltU2hhZG93Qmx1clJhZGl1cyA9IDI7
CisjZW5kaWYKKworTlNTdHJpbmcgKnRleHRMYXllcktleSA9IEAiVGV4dExheWVyIjsKK05TU3Ry
aW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBAIkRyb3BTaGFkb3dMYXllciI7CitOU1N0cmluZyAq
cmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNoYWRvd0xheWVyIjsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViVGV4dEluZGljYXRvclZpZXcgOiBOU1ZpZXcgewor
ICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRvcjsKKyAgICBSZXRhaW5QdHI8
TlNBcnJheT4gX2JvdW5jZUxheWVyczsKKyAgICBOU1NpemUgX21hcmdpbjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNz
UmVmUHRyPFRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgbWFyZ2luOihOU1NpemUpbWFyZ2lu
OworCistICh2b2lkKXByZXNlbnRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdlYlRleHRJbmRpY2F0b3JWaWV3CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihO
U1JlY3QpZnJhbWUgdGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPil0ZXh0
SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdpbgoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3Rl
eHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yOworICAgIF9tYXJnaW4gPSBtYXJnaW47CisKKyAg
ICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CisgICAgc2VsZi5sYXllci5hbmNob3JQb2ludCA9IENH
UG9pbnRaZXJvOworCisgICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9IF90ZXh0SW5kaWNhdG9yLT5w
cmVzZW50YXRpb25UcmFuc2l0aW9uKCkgPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246OkJvdW5jZUFuZENyb3NzZmFkZTsKKworICAgIEZsb2F0U2l6ZSBjb250ZW50c0ltYWdl
TG9naWNhbFNpemUgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPnNpemUoKTsKKyAg
ICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250
ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVu
dHNJbWFnZTsKKyAgICBpZiAod2FudHNDcm9zc2ZhZGUpCisgICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgZWxzZQorICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3It
PmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOworCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdodENvbG9yID0gW05T
Q29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOjEgZ3JlZW46MSBibHVlOjAgYWxwaGE6MV0uQ0dDb2xv
cjsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gcmltU2hhZG93Q29sb3IgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMTVdLkNHQ29sb3I7CisgICAgUmV0YWluUHRy
PENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdo
aXRlOjAgYWxwaGE6MC4yXS5DR0NvbG9yOworCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGJv
cmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NiBncmVlbjouOTAgYmx1
ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGdyYWRpZW50
RGFya0NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45MjkgZ3JlZW46LjggYmx1
ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGdyYWRpZW50
TGlnaHRDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDouOTQ5IGdyZWVuOi45Mzcg
Ymx1ZTowIGFscGhhOjFdLkNHQ29sb3I7CisKKyAgICBmb3IgKGF1dG8mIHRleHRSZWN0IDogX3Rl
eHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKSkgeworICAg
ICAgICBGbG9hdFJlY3QgYm91bmNlTGF5ZXJSZWN0ID0gdGV4dFJlY3Q7CisgICAgICAgIGJvdW5j
ZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVpZ2h0KTsKKyAgICAgICAg
Ym91bmNlTGF5ZXJSZWN0LmluZmxhdGVYKGhvcml6b250YWxCb3JkZXIpOworICAgICAgICBib3Vu
Y2VMYXllclJlY3QuaW5mbGF0ZVkodmVydGljYWxCb3JkZXIpOworCisgICAgICAgIFJldGFpblB0
cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FM
YXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RnJhbWU6Ym91
bmNlTGF5ZXJSZWN0XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIHNldE9wYWNpdHk6MF07CisgICAg
ICAgIFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5jZUxheWVyLmdldCgpXTsKKworICAgICAg
ICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCksIGJvdW5jZUxheWVy
UmVjdC5zaXplKCkpOworICAgICAgICAvLyBGSVhNRSAoMTM4ODg4KTogSWRlYWxseSB3ZSB3b3Vs
ZG4ndCByZW1vdmUgdGhlIG1hcmdpbiBpbiB0aGlzIGNhc2UsIGJ1dCB3ZSBuZWVkIHRvCisgICAg
ICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB5ZWxsb3cgaGlnaGxpZ2h0IGFuZCBjb250ZW50SW1hZ2VX
aXRoSGlnaGxpZ2h0IG92ZXJsYXAgcHJlY2lzZWx5LgorICAgICAgICBpZiAod2FudHNDcm9zc2Zh
ZGUpIHsKKyAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdodFJlY3QuaW5mbGF0ZVgoLWhvcml6b250
YWxCb3JkZXIpOworICAgICAgICAgICAgeWVsbG93SGlnaGxpZ2h0UmVjdC5pbmZsYXRlWSgtdmVy
dGljYWxCb3JkZXIpOworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IGRy
b3BTaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IFtkcm9wU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJE
ZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dDb2xv
cjpkcm9wU2hhZG93Q29sb3IuZ2V0KCldOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNo
YWRvd1JhZGl1czpkcm9wU2hhZG93Qmx1clJhZGl1c107CisgICAgICAgIFtkcm9wU2hhZG93TGF5
ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJvcFNoYWRvd09mZnNldFgsIGRyb3BTaGFk
b3dPZmZzZXRZKV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aElzQm91
bmRzOllFU107CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsK
KyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsK
KyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3JuZXJSYWRpdXM6Y29ybmVyUmFkaXVzXTsK
KyAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOmRyb3BTaGFkb3dMYXllci5nZXQoKV07
CisgICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpkcm9wU2hhZG93TGF5ZXIuZ2V0KCkgZm9y
S2V5OmRyb3BTaGFkb3dMYXllcktleV07CisKKyNpZiAhRU5BQkxFKExFR0FDWV9URVhUX0lORElD
QVRPUl9TVFlMRSkKKyAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJpbVNoYWRvd0xheWVyID0g
YWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVy
IHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07
CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsK
KyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOnJpbVNoYWRvd0NvbG9yLmdl
dCgpXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1czpyaW1TaGFkb3dC
bHVyUmFkaXVzXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1BhdGhJc0JvdW5k
czpZRVNdOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVpl
cm9dOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKKyAgICAg
ICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAg
ICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1c107CisgICAgICAg
IFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFkb3dMYXllci5nZXQoKV07CisgICAgICAg
IFtib3VuY2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dMYXllci5nZXQoKSBmb3JLZXk6cmltU2hh
ZG93TGF5ZXJLZXldOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9S
X1NUWUxFKQorICAgICAgICBSZXRhaW5QdHI8Q0FHcmFkaWVudExheWVyPiB0ZXh0TGF5ZXIgPSBh
ZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFt0ZXh0TGF5
ZXIgc2V0Q29sb3JzOkBbIChpZClncmFkaWVudExpZ2h0Q29sb3IuZ2V0KCksIChpZClncmFkaWVu
dERhcmtDb2xvci5nZXQoKSBdXTsKKyNlbHNlCisgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiB0
ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworI2VuZGlmCisgICAg
ICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmhpZ2hsaWdodENvbG9yLmdldCgpXTsK
KyAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xvci5nZXQoKV07Cisg
ICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ym9yZGVyV2lkdGhdOworICAgICAgICBb
dGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUg
c2hhcmVkXV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHM6KGlkKWNvbnRlbnRzSW1h
Z2UuZ2V0KCldOworCisgICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSB0ZXh0UmVjdDsKKyAg
ICAgICAgaW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzKCkubG9jYXRpb24oKSAtIF90ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcygpLmxvY2F0aW9uKCkpOworICAgICAgICBbdGV4dExheWVy
IHNldENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdlUmVjdC54KCkgLyBjb250ZW50c0ltYWdl
TG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LnkoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2Fs
U2l6ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkgLyBjb250ZW50c0ltYWdlTG9naWNhbFNp
emUud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxTaXpl
LmhlaWdodCgpKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5OmtDQUdy
YXZpdHlDZW50ZXJdOworICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzU2NhbGU6X3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBbdGV4dExheWVy
IHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICBbdGV4dExheWVyIHNldENv
cm5lclJhZGl1czpjb3JuZXJSYWRpdXNdOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6
dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJLZXldOworICAgICAgICBbYm91bmNlTGF5
ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsKKyAgICB9CisKKyAgICBzZWxmLmxheWVy
LnN1YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKKyAgICBfYm91bmNlTGF5ZXJzID0gYm91
bmNlTGF5ZXJzOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcHJlc2VudFdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAg
IGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGljYXRvci0+cHJlc2VudGF0aW9uVHJhbnNp
dGlvbigpID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGU7CisgICAgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uID0gd2FudHNDcm9zc2ZhZGUg
PyBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gOiBib3VuY2VBbmltYXRpb25E
dXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gYm91bmNlQW5pbWF0
aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJ0cmFuc2Zv
cm0iXTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldFZhbHVlczpAWworICAgICAgICBbTlNWYWx1
ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RJZGVudGl0eV0sCisgICAgICAg
IFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSht
aWRCb3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUsIDEpXSwKKyAgICAgICAgW05TVmFsdWUgdmFs
dWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHldCisgICAgICAgIF1dOwor
ICAgIFtib3VuY2VBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworCisg
ICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbjsKKyAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gZmFkZVNoYWRvd0luQW5pbWF0aW9uOworICAgIGlm
ICh3YW50c0Nyb3NzZmFkZSkgeworICAgICAgICBjcm9zc2ZhZGVBbmltYXRpb24gPSBbQ0FCYXNp
Y0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07CisgICAgICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRl
bnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIFtjcm9zc2ZhZGVBbmltYXRpb24g
c2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFnZS5nZXQoKV07CisgICAgICAgIFtjcm9zc2ZhZGVB
bmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgICAgIFtjcm9z
c2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgICAgIFtjcm9z
c2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworCisgICAgICAg
IGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhL
ZXlQYXRoOkAic2hhZG93T3BhY2l0eSJdOworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9u
IHNldEZyb21WYWx1ZTpAMF07CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0VG9W
YWx1ZTpAMV07CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NB
RmlsbE1vZGVGb3J3YXJkc107CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0UmVt
b3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0
RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworICAgIH0KKworICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlv
bkhhbmRsZXJdOworICAgIGZvciAoQ0FMYXllciogYm91bmNlTGF5ZXIgaW4gX2JvdW5jZUxheWVy
cy5nZXQoKSkgeworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eToxXTsKKyAgICAgICAg
W2JvdW5jZUxheWVyIGFkZEFuaW1hdGlvbjpib3VuY2VBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAi
Ym91bmNlIl07CisgICAgICAgIGlmICh3YW50c0Nyb3NzZmFkZSkgeworICAgICAgICAgICAgW1ti
b3VuY2VMYXllciB2YWx1ZUZvcktleTp0ZXh0TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpjcm9zc2Zh
ZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiY29udGVudFRyYW5zaXRpb24iXTsKKyAgICAgICAg
ICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6ZHJvcFNoYWRvd0xheWVyS2V5XSBhZGRBbmlt
YXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVTaGFkb3dJbiJd
OworICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpyaW1TaGFkb3dMYXllcktl
eV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRl
U2hhZG93SW4iXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworfQorCistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gZmFk
ZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAib3Bh
Y2l0eSJdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMV07CisgICAgW2ZhZGVB
bmltYXRpb24gc2V0VG9WYWx1ZTpAMF07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6
a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29t
cGxldGlvbjpOT107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246ZmFkZU91dEFuaW1h
dGlvbkR1cmF0aW9uXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIFtzZWxm
LmxheWVyIGFkZEFuaW1hdGlvbjpmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVPdXQi
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistIChCT09MKWlzRmxpcHBlZAor
eworICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitU
ZXh0SW5kaWNhdG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KE5TVmlldyAqdGFyZ2V0Vmll
dykKKyAgICA6IG1fdGFyZ2V0Vmlldyh0YXJnZXRWaWV3KQorICAgICwgbV9zdGFydEZhZGVPdXRU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUZXh0SW5kaWNhdG9yV2luZG93OjpzdGFydEZh
ZGVPdXRUaW1lckZpcmVkKQoreworfQorCitUZXh0SW5kaWNhdG9yV2luZG93Ojp+VGV4dEluZGlj
YXRvcldpbmRvdygpCit7CisgICAgY2xvc2VXaW5kb3coKTsKK30KKwordm9pZCBUZXh0SW5kaWNh
dG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4
dEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFuaW1hdGlv
bkNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChtX3RleHRJbmRpY2F0b3IgPT0gdGV4dElu
ZGljYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90ZXh0SW5kaWNhdG9yID0gdGV4dElu
ZGljYXRvcjsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIG9sZCB3aW5kb3cuCisgICAgY2xvc2VX
aW5kb3coKTsKKworICAgIGlmICghbV90ZXh0SW5kaWNhdG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBOU1JlY3QgY29udGVudFJlY3QgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1Jl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKCk7CisKKyAgICBDR0Zsb2F0IGhvcml6b250YWxNYXJnaW4g
PSBzdGQ6Om1heChkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyBob3Jpem9udGFsQm9yZGVyLCBj
b250ZW50UmVjdC5zaXplLndpZHRoICogMik7CisgICAgQ0dGbG9hdCB2ZXJ0aWNhbE1hcmdpbiA9
IHN0ZDo6bWF4KGRyb3BTaGFkb3dCbHVyUmFkaXVzICogMiArIHZlcnRpY2FsQm9yZGVyLCBjb250
ZW50UmVjdC5zaXplLmhlaWdodCAqIDIpOworCisgICAgY29udGVudFJlY3QgPSBOU0luc2V0UmVj
dChjb250ZW50UmVjdCwgLWhvcml6b250YWxNYXJnaW4sIC12ZXJ0aWNhbE1hcmdpbik7CisgICAg
TlNSZWN0IHdpbmRvd0ZyYW1lUmVjdCA9IE5TSW50ZWdyYWxSZWN0KFttX3RhcmdldFZpZXcgY29u
dmVydFJlY3Q6Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOworICAgIHdpbmRvd0ZyYW1lUmVjdCA9
IFtbbV90YXJnZXRWaWV3IHdpbmRvd10gY29udmVydFJlY3RUb1NjcmVlbjp3aW5kb3dGcmFtZVJl
Y3RdOworICAgIE5TUmVjdCB3aW5kb3dDb250ZW50UmVjdCA9IFtOU1dpbmRvdyBjb250ZW50UmVj
dEZvckZyYW1lUmVjdDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRv
d01hc2tdOworCisgICAgbV90ZXh0SW5kaWNhdG9yV2luZG93ID0gYWRvcHROUyhbW05TV2luZG93
IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OndpbmRvd0NvbnRlbnRSZWN0IHN0eWxlTWFzazpO
U0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZl
cjpOT10pOworCisgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6
W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0T3Bh
cXVlOk5PXTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldElnbm9yZXNNb3VzZUV2ZW50
czpZRVNdOworCisgICAgbV90ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMoW1tXZWJUZXh0SW5k
aWNhdG9yVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIFttX3RleHRJ
bmRpY2F0b3JXaW5kb3cgZnJhbWVdLnNpemUud2lkdGgsIFttX3RleHRJbmRpY2F0b3JXaW5kb3cg
ZnJhbWVdLnNpemUuaGVpZ2h0KSB0ZXh0SW5kaWNhdG9yOm1fdGV4dEluZGljYXRvciBtYXJnaW46
TlNNYWtlU2l6ZShob3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbildKTsKKyAgICBbbV90
ZXh0SW5kaWNhdG9yV2luZG93IHNldENvbnRlbnRWaWV3Om1fdGV4dEluZGljYXRvclZpZXcuZ2V0
KCldOworCisgICAgW1ttX3RhcmdldFZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzptX3RleHRJ
bmRpY2F0b3JXaW5kb3cuZ2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKKyAgICBbbV90ZXh0
SW5kaWNhdG9yV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisKKyAgICBpZiAobV90
ZXh0SW5kaWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgIT0gVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUpIHsKKyAgICAgICAgW21fdGV4dEluZGljYXRvclZp
ZXcgcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjpbYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRs
ZXJdIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAg
IH1dOworICAgIH0KKworICAgIGlmIChmYWRlT3V0KQorICAgICAgICBtX3N0YXJ0RmFkZU91dFRp
bWVyLnN0YXJ0T25lU2hvdCh0aW1lQmVmb3JlRmFkZVN0YXJ0cyk7Cit9CisKK3ZvaWQgVGV4dElu
ZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQoreworICAgIGlmICghbV90ZXh0SW5kaWNhdG9y
V2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXJ0RmFkZU91dFRpbWVyLnN0b3Ao
KTsKKworICAgIFtbbV90ZXh0SW5kaWNhdG9yV2luZG93IHBhcmVudFdpbmRvd10gcmVtb3ZlQ2hp
bGRXaW5kb3c6bV90ZXh0SW5kaWNhdG9yV2luZG93LmdldCgpXTsKKyAgICBbbV90ZXh0SW5kaWNh
dG9yV2luZG93IGNsb3NlXTsKKyAgICBtX3RleHRJbmRpY2F0b3JXaW5kb3cgPSBudWxscHRyOwor
fQorCit2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKQor
eworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0gbV90ZXh0SW5kaWNh
dG9yV2luZG93OworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRoQ29tcGxldGlvbkhh
bmRsZXI6W2luZGljYXRvcldpbmRvd10geworICAgICAgICBbW2luZGljYXRvcldpbmRvdyBwYXJl
bnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5nZXQoKV07CisgICAg
ICAgIFtpbmRpY2F0b3JXaW5kb3cgY2xvc2VdOworICAgIH1dOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGRlMGI1ZWZkM2UxN2FkMDdiZDE1MjRkYjQyNGQ1NTM5NjFlZTkwYjkuLmZkZWY0NmU4MmM5
MTZhYTE5ZmExMGVmNGU4ZjkxMjVjYTllZmVlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0y
MDcsNyArMjA3LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9TaGFyZWFibGVC
aXRtYXAuY3BwCiAgICAgU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAogICAgIFNoYXJlZC9T
dGF0aXN0aWNzRGF0YS5jcHAKLSAgICBTaGFyZWQvVGV4dEluZGljYXRvci5jcHAKICAgICBTaGFy
ZWQvVXBkYXRlSW5mby5jcHAKICAgICBTaGFyZWQvVXNlckRhdGEuY3BwCiAgICAgU2hhcmVkL1Zp
c2l0ZWRMaW5rVGFibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CmluZGV4IGI2NWVjZjFmMDM5YTBmYzAzZDU0OTMyZjIxYTgyYzhiMWM4YmY4YzkuLmVjNDI3
Y2IwMDU0YmJhMTU0MTE3ODU2MGJmMDZmNDRjNzAwZjIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0xODMsNiArMTgzLDcgQEAgZGVmIHN0cnVjdF9v
cl9jbGFzcyhuYW1lc3BhY2UsIHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6Um90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
JywKICAgICAgICAgJ1dlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24nLAorICAgICAgICAn
V2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEnLAogICAgICAgICAnV2ViQ29yZTo6VGltaW5nRnVu
Y3Rpb24nLAogICAgICAgICAnV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgnLAogICAgICAg
ICAnV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uJywKQEAgLTQzOCw2ICs0MzksNyBAQCBkZWYg
aGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50JzogWyc8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSc6IFsnPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQnOiBbJzxXZWJDb3JlL1RleHRDaGVj
a2VyQ2xpZW50Lmg+J10sCisgICAgICAgICdXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSc6IFsn
PFdlYkNvcmUvVGV4dEluZGljYXRvci5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzJzogWyc8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPiddLAogICAgICAgICAn
V2ViS2l0OjpCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUnOiBbJyJTZXNzaW9uU3RhdGUuaCInXSwK
ICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5oCmluZGV4IGE1NGZj
MDgzNDQ0ZWRmNGRlM2FkZDRkYzMzNDZhZDdjMjA5NzVmNzAuLmVkM2MwMDZjYzY2MDg1Y2VmZDcy
N2Y1ODBmOGE5ZTBlOGJhNzVmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
aWN0aW9uYXJ5UG9wdXBJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25h
cnlQb3B1cEluZm8uaApAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBEaWN0aW9uYXJ5UG9wdXBJ
bmZvX2gKICNkZWZpbmUgRGljdGlvbmFyeVBvcHVwSW5mb19oCiAKLSNpbmNsdWRlICJUZXh0SW5k
aWNhdG9yLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0SW5kaWNhdG9yLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJB
dHRyaWJ1dGVkU3RyaW5nLmgiCkBAIC00Niw3ICs0Niw3IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9w
dXBJbmZvIHsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbjsK
LSAgICBUZXh0SW5kaWNhdG9yOjpEYXRhIHRleHRJbmRpY2F0b3I7CisgICAgV2ViQ29yZTo6VGV4
dEluZGljYXRvckRhdGEgdGV4dEluZGljYXRvcjsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBvcHRpb25zOwogICAgIEF0dHJpYnV0ZWRTdHJpbmcg
YXR0cmlidXRlZFN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0
SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlOTIzMDkxN2JjYzEzYzMzMmM4ZDZkOTk5
MGNlZDA1NWFjNWY4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRl
ICJBcmd1bWVudENvZGVyc0NGLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rl
ci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldl
YkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVNlbGVjdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTbmFwc2hvdHRpbmcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR2VvbWV0cnlV
dGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUg
dmFsdWVzIGluIFRleHRJbmRpY2F0b3JXaW5kb3cuCi0vLyBGSVhNRTogSWRlYWxseSB0aGVzZSB3
b3VsZCBvbmx5IGJlIGluIG9uZSBwbGFjZS4KLSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNB
VE9SX1NUWUxFKQotY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDM7Ci1jb25zdCBmbG9h
dCB2ZXJ0aWNhbEJvcmRlciA9IDE7Ci1jb25zdCBmbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9
IDEuNTsKLSNlbHNlCi1jb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVyID0gMjsKLWNvbnN0IGZs
b2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IGZsb2F0IGRyb3BTaGFkb3dCbHVyUmFkaXVz
ID0gMTI7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBGbG9hdFJlY3Qg
b3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBGbG9hdFJlY3QgcmVjdCkK
LXsKLSAgICBGbG9hdFJlY3Qgb3V0c2V0UmVjdCA9IHJlY3Q7Ci0gICAgb3V0c2V0UmVjdC5pbmZs
YXRlWChkcm9wU2hhZG93Qmx1clJhZGl1cyArIGhvcml6b250YWxCb3JkZXIpOwotICAgIG91dHNl
dFJlY3QuaW5mbGF0ZVkoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKyB2ZXJ0aWNhbEJvcmRlcik7Ci0g
ICAgcmV0dXJuIG91dHNldFJlY3Q7Ci19Ci0KLXN0YXRpYyBib29sIHRleHRJbmRpY2F0b3JzRm9y
VGV4dFJlY3RzT3ZlcmxhcChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzKQotewot
ICAgIHNpemVfdCBjb3VudCA9IHRleHRSZWN0cy5zaXplKCk7Ci0gICAgaWYgKGNvdW50IDw9IDEp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGluZGljYXRv
clJlY3RzOwotICAgIGluZGljYXRvclJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEZs
b2F0UmVjdCBpbmRpY2F0b3JSZWN0ID0gb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRv
dyh0ZXh0UmVjdHNbaV0pOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGogPSBpbmRpY2F0b3JSZWN0
cy5zaXplKCk7IGo7ICkgewotICAgICAgICAgICAgLS1qOwotICAgICAgICAgICAgaWYgKGluZGlj
YXRvclJlY3QuaW50ZXJzZWN0cyhpbmRpY2F0b3JSZWN0c1tqXSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmRpY2F0b3JSZWN0cy51bmNoZWNr
ZWRBcHBlbmQoaW5kaWNhdG9yUmVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1QYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBU
ZXh0SW5kaWNhdG9yOjpEYXRhJiBkYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4
dEluZGljYXRvcihkYXRhKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIEZyYW1lKiBmcmFtZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLQotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBv
bGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigmcmFuZ2UpOwotCi0gICAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZy
YW1lKCpXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpLCBwcmVzZW50YXRpb25UcmFuc2l0
aW9uKTsKLQotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
KTsKLSAgICAKLSAgICByZXR1cm4gaW5kaWNhdG9yLnJlbGVhc2UoKTsKLX0KLQotLy8gRklYTUUg
KDEzODg4OSk6IElkZWFsbHkgdGhlIEZyYW1lU25hcHNob3R0aW5nIGZ1bmN0aW9ucyB3b3VsZCBi
ZSBtb3JlIGZsZXhpYmxlCi0vLyBhbmQgd2Ugd291bGRuJ3QgaGF2ZSB0byBpbXBsZW1lbnQgdGhp
cyBoZXJlLgotc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdFNlbGVj
dGlvbldpdGhIaWdobGlnaHQoRnJhbWUmIGZyYW1lKQotewotICAgIGF1dG8mIHNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpOwotCi0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHMgPSBz
ZWxlY3Rpb24uc2VsZWN0aW9uQm91bmRzKCk7Ci0KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3Ig
dGhlIHNlbGVjdGlvbiBib3VuZHMgdG8gYmUgZW1wdHk7IHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NDUuCi0gICAgaWYgKHNlbGVjdGlvbkJvdW5kcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCBlbmNsb3NpbmdJ
bnRSZWN0KHNlbGVjdGlvbkJvdW5kcyksIDApOwotCi0gICAgaWYgKCFzbmFwc2hvdCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzaGFyZWRT
bmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRl
cm5hbFNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBpZiAoIXNo
YXJlZFNuYXBzaG90KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZ3JhcGhp
Y3NDb250ZXh0ID0gc2hhcmVkU25hcHNob3QtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3Rv
cigpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGRldmljZVNjYWxlRmFj
dG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKHNuYXBzaG90LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFBvaW50KCkp
OwotCi0gICAgcmV0dXJuIHNoYXJlZFNuYXBzaG90LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFt
ZShjb25zdCBXZWJGcmFtZSYgZnJhbWUsIFByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKLXsKLSAgICBGcmFtZSYgY29yZUZyYW1lID0gKmZyYW1lLmNvcmVGcmFt
ZSgpOwotICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29yZUZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygpKTsKLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBpbmRpY2F0b3JCaXRtYXAgPSBmcmFtZS5jcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgp
OwotICAgIGlmICghaW5kaWNhdG9yQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQ7
Ci0gICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQotICAgICAgICBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxp
Z2h0ID0gc25hcHNob3RTZWxlY3Rpb25XaXRoSGlnaGxpZ2h0KGNvcmVGcmFtZSk7Ci0KLSAgICAv
LyBTdG9yZSB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1
c2VkIHN1YnNlcXVlbnRseQotICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFu
ZCBzZWxlY3Rpb24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCi0gICAgSW50UmVjdCBzZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IGNvcmVGcmFtZS52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3coc2VsZWN0aW9uUmVjdCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7
Ci0gICAgY29yZUZyYW1lLnNlbGVjdGlvbigpLmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3Rhbmds
ZXModGV4dFJlY3RzKTsKLQotICAgIC8vIFRoZSBib3VuZGluZyByZWN0IG9mIGFsbCB0aGUgdGV4
dCByZWN0cyBjYW4gYmUgZGlmZmVyZW50IHRoYW4gdGhlIHNlbGVjdGlvbgotICAgIC8vIHJlY3Qg
d2hlbiB0aGUgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIGxpbmVzOyB0aGUgaW5kaWNhdG9yIGRv
ZXNuJ3QgYWN0dWFsbHkKLSAgICAvLyBjYXJlIHdoZXJlIHRoZSBzZWxlY3Rpb24gaGlnaGxpZ2h0
IGdvZXMsIGp1c3Qgd2hlcmUgdGhlIHRleHQgYWN0dWFsbHkgaXMuCi0gICAgRmxvYXRSZWN0IHRl
eHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZm9yIChjb25zdCBGbG9hdFJlY3Qm
IHRleHRSZWN0IDogdGV4dFJlY3RzKSB7Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0UmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXMgPSBjb3JlRnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xv
c2luZ0ludFJlY3QodGV4dFJlY3QpKTsKLSAgICAgICAgdGV4dFJlY3RzSW5XaW5kb3dDb29yZGlu
YXRlcy5hcHBlbmQodGV4dFJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgdGV4dEJv
dW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5k
aW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5XaW5k
b3dDb29yZGluYXRlcykgewotICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgIH0KLQotICAgIFRleHRJbmRpY2F0
b3I6OkRhdGEgZGF0YTsKLSAgICBkYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
ID0gc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS50ZXh0Qm91bmRp
bmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzOwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS5jb250ZW50SW1hZ2VT
Y2FsZUZhY3RvciA9IGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBkYXRh
LmNvbnRlbnRJbWFnZSA9IGluZGljYXRvckJpdG1hcDsKLSAgICBkYXRhLmNvbnRlbnRJbWFnZVdp
dGhIaWdobGlnaHQgPSBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0OwotICAgIGRhdGEucHJl
c2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247Ci0KLSAgICByZXR1
cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwotfQotCi1UZXh0SW5kaWNhdG9yOjpUZXh0
SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmIGRhdGEpCi0gICAgOiBtX2RhdGEo
ZGF0YSkKLXsKLSAgICBBU1NFUlQobV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yICE9IDEg
fHwgbV9kYXRhLmNvbnRlbnRJbWFnZS0+c2l6ZSgpID09IGVuY2xvc2luZ0ludFJlY3QobV9kYXRh
LnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKS5zaXplKCkpOwotCi0gICAgaWYgKHRl
eHRJbmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcChtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcykpIHsKLSAgICAgICAgbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMpOwotICAgICAgICBtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcy5zaHJpbmsoMSk7Ci0gICAgfQotfQotCi1UZXh0SW5kaWNhdG9yOjp+VGV4dElu
ZGljYXRvcigpCi17Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKElQQzo6
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZW5jb2RlciA8PCB0ZXh0Qm91bmRpbmdS
ZWN0SW5XaW5kb3dDb29yZGluYXRlczsKLSAgICBlbmNvZGVyIDw8IHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBjb250ZW50SW1hZ2VTY2FsZUZhY3Rv
cjsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0KLSAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGU7Ci0gICAgaWYgKGNv
bnRlbnRJbWFnZSkKLSAgICAgICAgY29udGVudEltYWdlLT5jcmVhdGVIYW5kbGUoY29udGVudElt
YWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBlbmNvZGVyIDw8IGNvbnRl
bnRJbWFnZUhhbmRsZTsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFn
ZVdpdGhIaWdobGlnaHRIYW5kbGU7Ci0gICAgaWYgKGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQp
Ci0gICAgICAgIGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShjb250ZW50
SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBl
bmNvZGVyIDw8IGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGU7Ci19Ci0KLWJvb2wgVGV4
dEluZGljYXRvcjo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBU
ZXh0SW5kaWNhdG9yOjpEYXRhJiB0ZXh0SW5kaWNhdG9yRGF0YSkKLXsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRleHRJbmRpY2F0b3JEYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0
ZXh0SW5kaWNhdG9yRGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dEluZGlj
YXRvckRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dEluZGljYXRvckRhdGEu
Y29udGVudEltYWdlU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0ZXh0SW5kaWNhdG9yRGF0YS5wcmVzZW50YXRpb25UcmFu
c2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUgY29udGVudEltYWdlSGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29udGVu
dEltYWdlSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb250ZW50
SW1hZ2VIYW5kbGUuaXNOdWxsKCkpCi0gICAgICAgIHRleHRJbmRpY2F0b3JEYXRhLmNvbnRlbnRJ
bWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpSZWFkT25seSk7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50
SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29udGVu
dEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZS5pc051bGwoKSkKLSAgICAgICAg
dGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRlMWEyNGI4OTNhOTZmZjMwOTI5OGQzZTI4ZWYzMzA3ZGNkMDBhZDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXh0SW5kaWNhdG9yX2gKLSNkZWZpbmUgVGV4dEluZGlj
YXRvcl9oCi0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEwMDAKLSNkZWZpbmUg
RU5BQkxFX0xFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSAxCi0jZWxzZQotI2RlZmluZSBFTkFC
TEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFIDAKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSYW5nZTsKLX0KLQotbmFtZXNw
YWNlIElQQyB7Ci1jbGFzcyBBcmd1bWVudERlY29kZXI7Ci1jbGFzcyBBcmd1bWVudEVuY29kZXI7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZTsKLQotY2xhc3MgVGV4
dEluZGljYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRJbmRpY2F0b3I+IHsKLXB1YmxpYzoK
LSAgICBlbnVtIGNsYXNzIFByZXNlbnRhdGlvblRyYW5zaXRpb24gewotICAgICAgICBOb25lLAot
ICAgICAgICBCb3VuY2UsCi0gICAgICAgIEJvdW5jZUFuZENyb3NzZmFkZQotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgRGF0YSB7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlczsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRleHRCb3Vu
ZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Rmxv
YXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgICAgICBmbG9h
dCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gY29udGVudEltYWdlV2l0aEhpZ2hsaWdodDsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gY29udGVudEltYWdlOwotICAgICAgICBQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNl
bnRhdGlvblRyYW5zaXRpb247Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVu
Y29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiwgRGF0YSYpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5k
aWNhdG9yPiBjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0
IFdlYkZyYW1lJiwgUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFdlYkNvcmU6OlJhbmdlJiwg
UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0KLSAgICB+VGV4dEluZGljYXRvcigpOwotCi0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOyB9Ci0g
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudGV4dFJlY3Rz
SW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsgfQotICAgIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxl
RmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yOyB9
Ci0gICAgU2hhcmVhYmxlQml0bWFwICpjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQuZ2V0KCk7IH0KLSAgICBT
aGFyZWFibGVCaXRtYXAgKmNvbnRlbnRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jb250
ZW50SW1hZ2UuZ2V0KCk7IH0KLSAgICBQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlv
blRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlv
bjsgfQotCi0gICAgdm9pZCBzZXRQcmVzZW50YXRpb25UcmFuc2l0aW9uKFByZXNlbnRhdGlvblRy
YW5zaXRpb24gdHJhbnNpdGlvbikgeyBtX2RhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHRy
YW5zaXRpb247IH0KLQotICAgIERhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQot
Ci1wcml2YXRlOgotICAgIFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYp
OwotCi0gICAgRGF0YSBtX2RhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFRleHRJbmRpY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCAxMjE5MmZjNjc1ODFiMGUyNzgyMjEwM2Q5N2Q2YzQ1
MjVlOWQwYjMwLi5mNjJkZjZkYTE5M2Y4YjUzYjhlNTJkMDQxZjBjYTYzYTMyZjEzZmIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RpbWluZ0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CkBAIC0xOTYwLDQgKzE5
NjEsNDEgQEAgYm9vbCBBcmd1bWVudENvZGVyPEJsb2JQYXJ0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgQmxvYlBhcnQmIGJsb2JQYXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dm9pZCBBcmd1bWVudENvZGVyPFRleHRJbmRpY2F0b3JEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVGV4dEluZGljYXRvckRhdGEmIHRleHRJbmRpY2F0b3JEYXRh
KQoreworICAgIGVuY29kZXIgPDwgdGV4dEluZGljYXRvckRhdGEuc2VsZWN0aW9uUmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXM7CisgICAgZW5jb2RlciA8PCB0ZXh0SW5kaWNhdG9yRGF0YS50ZXh0Qm91
bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBlbmNvZGVyIDw8IHRleHRJbmRpY2F0
b3JEYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZW5jb2RlciA8
PCB0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICBlbmNvZGVy
LmVuY29kZUVudW0odGV4dEluZGljYXRvckRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cisg
ICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlLmdl
dCgpKTsKKyAgICBlbmNvZGVJbWFnZShlbmNvZGVyLCB0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50
SW1hZ2VXaXRoSGlnaGxpZ2h0LmdldCgpKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFRleHRJ
bmRpY2F0b3JEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4dEluZGlj
YXRvckRhdGEmIHRleHRJbmRpY2F0b3JEYXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dGV4dEluZGljYXRvckRhdGEuc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHRJbmRpY2F0
b3JEYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50SW1h
Z2VTY2FsZUZhY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVFbnVtKHRleHRJbmRpY2F0b3JEYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUltYWdlKGRlY29kZXIsIHRl
eHRJbmRpY2F0b3JEYXRhLmNvbnRlbnRJbWFnZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2RlSW1hZ2UoZGVjb2RlciwgdGV4dEluZGljYXRvckRhdGEuY29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA1OTk1ZTVhYjEwYjQ2MGQ2YjhmNTk2ZjNiODU0
ZTIxNmIyMmZkYjEwLi5jNjhlMDlkMzFjYzlmYjBiYjBmYzRhOTY4NWJmYWY1Nzk1MTQ5MzEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC04
NSw2ICs4NSw3IEBAIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudDsKIHN0cnVjdCBQbHVnaW5J
bmZvOwogc3RydWN0IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVyczsKIHN0cnVjdCBUZXh0Q2hlY2tp
bmdSZXN1bHQ7CitzdHJ1Y3QgVGV4dEluZGljYXRvckRhdGE7CiBzdHJ1Y3QgVmlld3BvcnRBdHRy
aWJ1dGVzOwogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtNDM1LDYgKzQzNiwxMSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI+IHsK
IH07CiAjZW5kaWYKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yRGF0YT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYpOworICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYpOwor
fTsKKwogfSAvLyBuYW1lc3BhY2UgSVBDCiAKICNlbmRpZiAvLyBXZWJDb3JlQXJndW1lbnRDb2Rl
cnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0
VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVz
dFJlc3VsdC5oCmluZGV4IGU3YmUxNzA0NDJmODM5ZWUyMmNhMTI3N2Y5MWIzYTIzODU0M2VmNDku
LjcwMmM1NmU5ZjE0OWJkY2IzYjlkNjE5ZGM1NTNiNWIzNWI1NjEzNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmgKQEAgLTI5
LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNpbmNsdWRlICJUZXh0
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBPQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4dDsKQEAgLTU3LDcgKzU3LDcgQEAg
c3RydWN0IEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0IHsKIAogICAgIFJldGFpblB0cjxEREFjdGlv
bkNvbnRleHQ+IGFjdGlvbkNvbnRleHQ7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94OwotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFU
ZXh0SW5kaWNhdG9yOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBkZXRlY3Rl
ZERhdGFUZXh0SW5kaWNhdG9yOwogICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3Zlcmxh
eUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbQppbmRl
eCAzNjdjN2FlZmM1ZDc3ZGRiN2E0M2EwNDU1MjM4YTVjZTQzN2NhNWY2Li42OTBiYzlmODJhNzRh
ZTk0MGI4YWQ1ZWI1Y2NhMjNkNDgwYTExY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQubW0KQEAgLTMxLDkgKzMxLDkgQEAK
ICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKICNpbXBvcnQgIkFyZ3VtZW50RGVjb2Rlci5o
IgogI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgi
CiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRGF0
YURldGVjdG9yc1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC0xMTgsMTEgKzExOCwxMSBAQCBib29sIEFjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEFjdGlv
bk1lbnVIaQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChoYXNUZXh0
SW5kaWNhdG9yKSB7Ci0gICAgICAgICAgICBUZXh0SW5kaWNhdG9yOjpEYXRhIGluZGljYXRvckRh
dGE7CisgICAgICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRh
OwogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmRpY2F0b3JEYXRhKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUo
aW5kaWNhdG9yRGF0YSk7CisgICAgICAgICAgICBhY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5kZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlKGlu
ZGljYXRvckRhdGEpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCBhYzQwYWVmOGE3ODBjMGQx
ZjM1ZWI2OTE3Y2VhYTYzMmNlYjRjYzYyLi41NmUwNjU3YmVjNGY1ZTY0MTNlODFjNTFkYzA3ODQ3
OWU4MWU1ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSU5Q
VVRfVFlQRV9DT0xPUikKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JQaWNrZXI+IGNy
ZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbnRp
YWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCi0gICAg
dmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiwg
Ym9vbCBmYWRlT3V0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEluZGljYXRv
cihQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8V1RG
OjpTdHJpbmc+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0
YXRlKCkgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCAwOWI1NWQ0OGQyN2U4OTI4MTBkNjQ3
OWI0NTEwNTQwZDVjMmU4ZGNiLi4xNjIwZjc0ZTRiNTAyM2VlYmY5YmE1YTcwNTYxYTYyNzc0Mzhm
OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC01
MSw4ICs1MSw2IEBACiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRleHRD
aGVja2VyLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW1wb3J0ICJUZXh0SW5k
aWNhdG9yLmgiCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9yV2luZG93LmgiCiAjaW1wb3J0ICJUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJWaWV3R2VzdHVyZUNv
bnRyb2xsZXIuaCIKICNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCkBAIC05Niw2ICs5NCw4
IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
b2Z0TGlua2luZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9U
ZXh0SW5kaWNhdG9yV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRVbmRvSW5zZXJ0aW9u
TWFya3VwTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJE
ZWxlZ2F0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlQ0FMYXllckV4dHJhcy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKaW5k
ZXggMDZiYTIwMTRlNDFhZThkMWMyMjViOWM4ZWQ0ZDRmNmQxMmFjNWRlZC4uNjU0Y2Y5ODVjMDJm
Mjc0Mzc0MzkwYzU4ZmFkZWM2MmQ2NDY4NTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCkBAIC00MSwxMyArNDEsMTMgQEAgY2xh
c3MgRGF0YVJlZmVyZW5jZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlOwogY2xh
c3MgU2hhcmVkQnVmZmVyOworY2xhc3MgVGV4dEluZGljYXRvcjsKIHN0cnVjdCBLZXlwcmVzc0Nv
bW1hbmQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsK
IGNsYXNzIExheWVyVHJlZUNvbnRleHQ7Ci1jbGFzcyBUZXh0SW5kaWNhdG9yOwogY2xhc3MgVmll
d1NuYXBzaG90OwogY2xhc3MgV2ViQ29udGV4dDsKIHN0cnVjdCBBY3Rpb25NZW51SGl0VGVzdFJl
c3VsdDsKQEAgLTgwLDggKzgwLDggQEAgc3RydWN0IFdlYlBhZ2VDb25maWd1cmF0aW9uOwogLSAo
dm9pZClfc2V0SW50cmluc2ljQ29udGVudFNpemU6KE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6
ZTsKIC0gKE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6KE5TUmVjdClyZWN0OwogLSAoTlNS
ZWN0KV9jb252ZXJ0VG9Vc2VyU3BhY2U6KE5TUmVjdClyZWN0OwotLSAodm9pZClfc2V0VGV4dElu
ZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3Ig
ZmFkZU91dDooQk9PTClmYWRlT3V0OwotLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1Jl
ZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClm
YWRlT3V0IGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOihzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
KWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1JlZlB0
cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFk
ZU91dDsKKy0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4
dEluZGljYXRvcj4pdGV4dEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVPdXQgYW5pbWF0aW9u
Q29tcGxldGlvbkhhbmRsZXI6KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4pY29tcGxldGlvbkhhbmRs
ZXI7CiAKIC0gKHZvaWQpX3NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUm9vdExheWVyOihD
QUxheWVyICopcm9vdExheWVyOwogLSAoQ0FMYXllciAqKV9hY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZVJvb3RMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaAppbmRleCA1YzQwYjgyMDllNDE5YmYyNDA0YWFiMTBi
MzhiYWRhMDI4M2VlYTBiLi45ZjZhMzVmMjA0YmVkN2RkMmYwYzM2NWIzOTBhOTBlY2I5OTZkNzZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViVmlldy5oCkBAIC0xODQsNyArMTg0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVBy
b3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dElu
ZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3I+LCBib29sKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBhODliM2UyNTUwYWE1MDgy
YjJhNWUxODUzNWQ2Y2Y3YzUxNDMyYTAwLi45YTdlZDBhZjllMTZiOTMwNjNjZmYxMWU0Mzk2OGU2
YzQwZTliODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTQ3LDE0
ICs0NywxNCBAQCBPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZlczsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ3Vyc29yOwotc3RydWN0IFZpZXdwb3J0QXR0cmlidXRlczsKK2NsYXNz
IFRleHRJbmRpY2F0b3I7CiBzdHJ1Y3QgSGlnaGxpZ2h0Oworc3RydWN0IFZpZXdwb3J0QXR0cmli
dXRlczsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7
Ci1jbGFzcyBUZXh0SW5kaWNhdG9yOwogY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNs
YXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwogY2xhc3MgVmlld1NuYXBzaG90OwpAQCAt
MjE0LDEzICsyMTQsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xv
clBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKICNlbmRp
ZgogCi0gICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5k
aWNhdG9yPiwgYm9vbCBmYWRlT3V0KSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmKSA9IDA7CiAKICNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lk
IHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiwgYm9v
bCBmYWRlT3V0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1
c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wg
cGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJ
bnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBEaWN0aW9uYXJ5UG9w
dXBJbmZvJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApp
bmRleCBiNzgwYTQxMjhkNDIwYWJmZTYwN2FiMGYwYzJmNmY0MDllNTFjM2Q2Li4xZjM5OWJmZjAy
ZmY1MzZkNTVhNDMxYjQ5ODBiOTY0ODU0MjY2ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIlByaW50SW5m
by5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0
ZS5oIgotI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFByb3h5LmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgpAQCAtOTcsNiArOTYsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvV2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgpAQCAtMzY1OCw3ICszNjU4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZEdldEltYWdlRm9yRmluZE1hdGNoKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBj
b250ZW4KICAgICBtX2ZpbmRNYXRjaGVzQ2xpZW50LmRpZEdldEltYWdlRm9yTWF0Y2hSZXN1bHQo
dGhpcywgV2ViSW1hZ2U6OmNyZWF0ZShTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb250ZW50SW1h
Z2VIYW5kbGUpKS5nZXQoKSwgbWF0Y2hJbmRleCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmIGluZGljYXRvckRhdGEs
IGJvb2wgZmFkZU91dCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0
IFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2F0b3JEYXRhLCBib29sIGZhZGVPdXQpCiB7CiAgICAg
bV9wYWdlQ2xpZW50LnNldFRleHRJbmRpY2F0b3IoVGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGlj
YXRvckRhdGEpLCBmYWRlT3V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAppbmRleCA1ZjhjZmQ4ZWQwZGI5MDU0Yjk0ZGU0OGFmNjQxMTQ4MzgxYjAwOTExLi4zNmQ0
NmVmOGJjOTI2OWQ0YTE0ZGFmZmZhYzIzNWNjY2IwNGUwYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xMzAsNiArMTMwLDcgQEAgY2xhc3MgTWVkaWFDb25z
dHJhaW50c0ltcGw7CiBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiBjbGFzcyBSdW5Mb29wT2JzZXJ2
ZXI7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBUZXh0SW5kaWNhdG9yOwogc3RydWN0IEZp
bGVDaG9vc2VyU2V0dGluZ3M7CiBzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOwogc3Ry
dWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKQEAgLTE1NSw3ICsxNTYsNiBAQCBjbGFzcyBQYWdlQ2xp
ZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247CiBjbGFzcyBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5OwogY2xhc3MgU3RyaW5nUGFpclZlY3RvcjsKLWNsYXNzIFRl
eHRJbmRpY2F0b3I7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBWaXNpdGVkTGlua1Byb3Zp
ZGVyOwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwpAQCAtNjY4LDcgKzY2OCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKICAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhj
b25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAg
dm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hD
b3VudCk7Ci0gICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRh
dGEmLCBib29sIGZhZGVPdXQpOworICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihjb25zdCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYsIGJvb2wgZmFkZU91dCk7CiAgICAgdm9pZCBjbGVhclRl
eHRJbmRpY2F0b3IoKTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgdWlu
dDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAgICB2b2lkIGRpZEZhaWxU
b0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3NGI5YWI3YjhlNjExZTdlODlkYTcy
OWFkMjA5OWQ0ZGEyNGU0YTcyLi42ODRjNzZhNjNlMzY1MmUwMTk2MzMwMzRiNGJjMWRhNzY5NzUz
OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KQEAgLTIyNyw3ICsyMjcsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewog
CiAgICAgIyBGaW5kIG1lc3NhZ2VzCiAgICAgRGlkQ291bnRTdHJpbmdNYXRjaGVzKFN0cmluZyBz
dHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCi0gICAgU2V0VGV4dEluZGljYXRvcihXZWJLaXQ6
OlRleHRJbmRpY2F0b3I6OkRhdGEgaW5kaWNhdG9yLCBib29sIGZhZGVPdXQpCisgICAgU2V0VGV4
dEluZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3IsIGJvb2wgZmFk
ZU91dCkKICAgICBDbGVhclRleHRJbmRpY2F0b3IoKQogICAgIERpZEZpbmRTdHJpbmcoU3RyaW5n
IHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogICAgIERp
ZEZhaWxUb0ZpbmRTdHJpbmcoU3RyaW5nIHN0cmluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA3OWNiZDJmMTk5NzY0OWUxNGM5
YjU3MzJlMTRjZmE5MTgxODc3OTY4Li5kODlhMjM2MTliOTk4OWJkMzkzZTVhNWU0M2UxNDFkYjJk
MDFiYjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBh
Z2VQcm94eSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVu
dVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRv
cj4sIGJvb2wgZmFkZU91dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRp
Y2F0b3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KSBv
dmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oCmluZGV4IGU1MWVmYTJlMTIzZDc5MDdj
ZWFlZTMyODE5Y2U4MTA2YzE5OWU4NjcuLjYzYjRhMjA5MmI3ZTNmODExYmZmMjdmYWNhNDVjOTE3
ZmQxYzg1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
dy5oCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eTsKIGNsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eTsKIGNsYXNz
IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwotY2xhc3MgVGV4dEluZGljYXRvcjsKIGNsYXNz
IFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDc5
NWY4NGM2YjM1MTFiYzEzNmEzMGNhNDZhMmJjZWRmOGQyZjJkYzcuLmMyZGI4ZmI4Yzc1ZjhjYjYy
N2JkZjhmMmIyMzQwNDA5YzIyYTY4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTQyLDcgKzQyLDYgQEAgY2xhc3MgQWx0ZXJuYXRpdmVU
ZXh0VUlDb250cm9sbGVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFRleHRJbmRp
Y2F0b3JXaW5kb3c7CiAKIGNsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVibGljIFBhZ2VD
bGllbnQKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC0xMjAsNyArMTE5LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JQaWNrZXI+IGNyZWF0ZUNvbG9y
UGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3Is
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdm9pZCBzZXRUZXh0SW5k
aWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCk7CisgICAgdm9p
ZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4sIGJv
b2wgZmFkZU91dCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwubW0KaW5kZXggODJkM2UyZDI4MGFiZGYzMWNhMmY5M2M3OGIx
NDcyYmRiNzNlODUxNS4uNWVkN2EzZDRmOGU0M2IxMmI0NWFmZTYyNWNjMDAxNjZiYWNmMjVlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCkBA
IC0zNyw3ICszNyw2IEBACiAjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW1wb3J0
ICJOYXZpZ2F0aW9uU3RhdGUuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgotI2ltcG9y
dCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKICNpbXBv
cnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5o
IgpAQCAtNjEsNiArNjAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Mb29rdXBTUEkuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNpbXBvcnQgPFdlYkNv
cmUvVGV4dFVuZG9JbnNlcnRpb25NYXJrdXBNYWMuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzkyN2YzM2RmYjUzYWExMWM4MTE2M2I1YWNlMTg0YWEyYjNlMGU3
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaAorKysgL2Rldi9udWxs
CkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRleHRJbmRpY2F0b3JXaW5k
b3dfaAotI2RlZmluZSBUZXh0SW5kaWNhdG9yV2luZG93X2gKLQotI2lmIFBMQVRGT1JNKE1BQykK
LQotI2ltcG9ydCA8ZnVuY3Rpb25hbD4KLSNpbXBvcnQgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lt
cG9ydCA8d3RmL1JlZlB0ci5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8
d3RmL1J1bkxvb3AuaD4KLQotQGNsYXNzIFdLVGV4dEluZGljYXRvclZpZXc7Ci1AY2xhc3MgV0tW
aWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVGV4dEluZGljYXRvcjsKLQotY2xh
c3MgVGV4dEluZGljYXRvcldpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dElu
ZGljYXRvcldpbmRvdyk7Ci0KLXB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0SW5kaWNhdG9yV2lu
ZG93KFdLVmlldyAqKTsKLSAgICB+VGV4dEluZGljYXRvcldpbmRvdygpOwotCi0gICAgdm9pZCBz
ZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBhbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcik7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpOwotCi0gICAgdm9pZCBzdGFydEZhZGVPdXRU
aW1lckZpcmVkKCk7Ci0KLSAgICBXS1ZpZXcqIG1fd2tWaWV3OwotICAgIFJlZlB0cjxUZXh0SW5k
aWNhdG9yPiBtX3RleHRJbmRpY2F0b3I7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBtX3RleHRJ
bmRpY2F0b3JXaW5kb3c7Ci0gICAgUmV0YWluUHRyPFdLVGV4dEluZGljYXRvclZpZXc+IG1fdGV4
dEluZGljYXRvclZpZXc7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxUZXh0SW5kaWNhdG9yV2luZG93
PiBtX3N0YXJ0RmFkZU91dFRpbWVyOwotCi0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX2Jv
dW5jZUFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBUZXh0SW5kaWNhdG9yV2luZG93X2gKLQotI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgzNDZiM2VhYjJk
ZjljNDZjMzk5NWU5YzgzMDg2YzJiMTJhZWExZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRp
Y2F0b3JXaW5kb3cubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGV4dEluZGljYXRvcldpbmRvdy5oIgot
Ci0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgiCi0jaW1wb3J0
ICJXS1ZpZXcuaCIKLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlz
YWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+Ci0KLWNvbnN0IENGVGltZUludGVydmFsIGJvdW5jZUFu
aW1hdGlvbkR1cmF0aW9uID0gMC4xMjsKLWNvbnN0IENGVGltZUludGVydmFsIGJvdW5jZVdpdGhD
cm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKLWNvbnN0IENGVGltZUludGVydmFsIHRp
bWVCZWZvcmVGYWRlU3RhcnRzID0gYm91bmNlQW5pbWF0aW9uRHVyYXRpb24gKyAwLjI7Ci1jb25z
dCBDRlRpbWVJbnRlcnZhbCBmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7Ci0KLSNpZiBF
TkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotY29uc3QgQ0dGbG9hdCBtaWRCb3Vu
Y2VTY2FsZSA9IDEuNTsKLWNvbnN0IENHRmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDM7Ci1jb25z
dCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGgg
PSAxLjA7Ci1jb25zdCBDR0Zsb2F0IGNvcm5lclJhZGl1cyA9IDM7Ci1jb25zdCBDR0Zsb2F0IGRy
b3BTaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09mZnNldFkgPSAx
OwotY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEuNTsKLSNlbHNlCi1jb25z
dCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS4yOwotY29uc3QgQ0dGbG9hdCBob3Jpem9udGFs
Qm9yZGVyID0gMjsKLWNvbnN0IENHRmxvYXQgdmVydGljYWxCb3JkZXIgPSAxOwotY29uc3QgQ0dG
bG9hdCBib3JkZXJXaWR0aCA9IDA7Ci1jb25zdCBDR0Zsb2F0IGNvcm5lclJhZGl1cyA9IDA7Ci1j
b25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IENHRmxvYXQgZHJvcFNo
YWRvd09mZnNldFkgPSA1OwotY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEy
OwotY29uc3QgQ0dGbG9hdCByaW1TaGFkb3dCbHVyUmFkaXVzID0gMjsKLSNlbmRpZgotCi1OU1N0
cmluZyAqdGV4dExheWVyS2V5ID0gQCJUZXh0TGF5ZXIiOwotTlNTdHJpbmcgKmRyb3BTaGFkb3dM
YXllcktleSA9IEAiRHJvcFNoYWRvd0xheWVyIjsKLU5TU3RyaW5nICpyaW1TaGFkb3dMYXllcktl
eSA9IEAiUmltU2hhZG93TGF5ZXIiOwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGlu
dGVyZmFjZSBXS1RleHRJbmRpY2F0b3JWaWV3IDogTlNWaWV3IHsKLSAgICBSZWZQdHI8V2ViS2l0
OjpUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRvcjsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4g
X2JvdW5jZUxheWVyczsKLSAgICBOU1NpemUgX21hcmdpbjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdl
YktpdDo6VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRvciBtYXJnaW46KE5TU2l6ZSltYXJnaW47
Ci0KLS0gKHZvaWQpcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tUZXh0SW5kaWNhdG9yVmlldwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9y
Pil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdpbgotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgX3RleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yOwotICAgIF9tYXJnaW4gPSBtYXJnaW47
Ci0KLSAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7Ci0gICAgc2VsZi5sYXllci5hbmNob3JQb2lu
dCA9IENHUG9pbnRaZXJvOwotCi0gICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9IF90ZXh0SW5kaWNh
dG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgPT0gV2ViS2l0OjpUZXh0SW5kaWNhdG9yOjpQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGU7Ci0KLSAgICBGbG9hdFNp
emUgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5zaXplKCk7Ci0gICAgY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLnNjYWxlKDEgLyBfdGV4
dEluZGljYXRvci0+Y29udGVudEltYWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2U7Ci0gICAgaWYgKHdhbnRzQ3Jvc3NmYWRlKQotICAgICAg
ICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVdpdGhIaWdobGln
aHQoKS0+bWFrZUNHSW1hZ2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBf
dGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm1ha2VDR0ltYWdlKCk7Ci0KLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF0pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdo
dENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOjEgZ3JlZW46MSBibHVlOjAgYWxw
aGE6MV0uQ0dDb2xvcjsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gcmltU2hhZG93Q29sb3Ig
PSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMTVdLkNHQ29sb3I7Ci0g
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IFtOU0NvbG9yIGNvbG9y
V2l0aERldmljZVdoaXRlOjAgYWxwaGE6MC4yXS5DR0NvbG9yOwotCi0gICAgUmV0YWluUHRyPENH
Q29sb3JSZWY+IGJvcmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NiBn
cmVlbjouOTAgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JS
ZWY+IGdyYWRpZW50RGFya0NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45Mjkg
Z3JlZW46LjggYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JS
ZWY+IGdyYWRpZW50TGlnaHRDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDouOTQ5
IGdyZWVuOi45MzcgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7Ci0KLSAgICBmb3IgKGF1dG8mIHRl
eHRSZWN0IDogX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXMoKSkgewotICAgICAgICBGbG9hdFJlY3QgYm91bmNlTGF5ZXJSZWN0ID0gdGV4dFJlY3Q7Ci0g
ICAgICAgIGJvdW5jZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVpZ2h0
KTsKLSAgICAgICAgYm91bmNlTGF5ZXJSZWN0LmluZmxhdGVYKGhvcml6b250YWxCb3JkZXIpOwot
ICAgICAgICBib3VuY2VMYXllclJlY3QuaW5mbGF0ZVkodmVydGljYWxCb3JkZXIpOwotCi0gICAg
ICAgIFJldGFpblB0cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwotICAgICAgICBbYm91bmNlTGF5ZXIg
c2V0RnJhbWU6Ym91bmNlTGF5ZXJSZWN0XTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNldE9wYWNp
dHk6MF07Ci0gICAgICAgIFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5jZUxheWVyLmdldCgp
XTsKLQotICAgICAgICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCks
IGJvdW5jZUxheWVyUmVjdC5zaXplKCkpOwotICAgICAgICAvLyBGSVhNRSAoMTM4ODg4KTogSWRl
YWxseSB3ZSB3b3VsZG4ndCByZW1vdmUgdGhlIG1hcmdpbiBpbiB0aGlzIGNhc2UsIGJ1dCB3ZSBu
ZWVkIHRvCi0gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB5ZWxsb3cgaGlnaGxpZ2h0IGFuZCBj
b250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0IG92ZXJsYXAgcHJlY2lzZWx5LgotICAgICAgICBpZiAo
d2FudHNDcm9zc2ZhZGUpIHsKLSAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdodFJlY3QuaW5mbGF0
ZVgoLWhvcml6b250YWxCb3JkZXIpOwotICAgICAgICAgICAgeWVsbG93SGlnaGxpZ2h0UmVjdC5p
bmZsYXRlWSgtdmVydGljYWxCb3JkZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmV0YWluUHRy
PENBTGF5ZXI+IGRyb3BTaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0
XSk7Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2Fi
bGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBz
ZXRTaGFkb3dDb2xvcjpkcm9wU2hhZG93Q29sb3IuZ2V0KCldOwotICAgICAgICBbZHJvcFNoYWRv
d0xheWVyIHNldFNoYWRvd1JhZGl1czpkcm9wU2hhZG93Qmx1clJhZGl1c107Ci0gICAgICAgIFtk
cm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJvcFNoYWRvd09mZnNl
dFgsIGRyb3BTaGFkb3dPZmZzZXRZKV07Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hh
ZG93UGF0aElzQm91bmRzOllFU107Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93
T3BhY2l0eToxXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdo
bGlnaHRSZWN0XTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3JuZXJSYWRpdXM6Y29y
bmVyUmFkaXVzXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOmRyb3BTaGFkb3dM
YXllci5nZXQoKV07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpkcm9wU2hhZG93TGF5
ZXIuZ2V0KCkgZm9yS2V5OmRyb3BTaGFkb3dMYXllcktleV07Ci0KLSNpZiAhRU5BQkxFKExFR0FD
WV9URVhUX0lORElDQVRPUl9TVFlMRSkKLSAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJpbVNo
YWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3Jp
bVNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdh
dGUgc2hhcmVkXV07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdo
bGlnaHRSZWN0XTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOnJpbVNo
YWRvd0NvbG9yLmdldCgpXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1
czpyaW1TaGFkb3dCbHVyUmFkaXVzXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRv
d1BhdGhJc0JvdW5kczpZRVNdOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zm
c2V0OkNHU2l6ZVplcm9dOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0
eToxXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJl
Y3RdOwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1
c107Ci0gICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFkb3dMYXllci5nZXQo
KV07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dMYXllci5nZXQoKSBm
b3JLZXk6cmltU2hhZG93TGF5ZXJLZXldOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTEVHQUNZX1RF
WFRfSU5ESUNBVE9SX1NUWUxFKQotICAgICAgICBSZXRhaW5QdHI8Q0FHcmFkaWVudExheWVyPiB0
ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAg
ICAgIFt0ZXh0TGF5ZXIgc2V0Q29sb3JzOkBbIChpZClncmFkaWVudExpZ2h0Q29sb3IuZ2V0KCks
IChpZClncmFkaWVudERhcmtDb2xvci5nZXQoKSBdXTsKLSNlbHNlCi0gICAgICAgIFJldGFpblB0
cjxDQUxheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwot
I2VuZGlmCi0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmhpZ2hsaWdodENv
bG9yLmdldCgpXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xv
ci5nZXQoKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ym9yZGVyV2lkdGhd
OwotICAgICAgICBbdGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxh
eWVyRGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHM6KGlk
KWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwotCi0gICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSB0
ZXh0UmVjdDsKLSAgICAgICAgaW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0b3ItPnRleHRCb3Vu
ZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkubG9jYXRpb24oKSAtIF90ZXh0SW5kaWNhdG9y
LT5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpLmxvY2F0aW9uKCkpOwotICAgICAg
ICBbdGV4dExheWVyIHNldENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdlUmVjdC54KCkgLyBj
b250ZW50c0ltYWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LnkoKSAvIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkgLyBjb250ZW50c0lt
YWdlTG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8gY29udGVudHNJbWFn
ZUxvZ2ljYWxTaXplLmhlaWdodCgpKV07Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNH
cmF2aXR5OmtDQUdyYXZpdHlDZW50ZXJdOwotICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRz
U2NhbGU6X3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCldOwotICAgICAg
ICBbdGV4dExheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOwotICAgICAgICBbdGV4
dExheWVyIHNldENvcm5lclJhZGl1czpjb3JuZXJSYWRpdXNdOwotICAgICAgICBbYm91bmNlTGF5
ZXIgc2V0VmFsdWU6dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJLZXldOwotICAgICAg
ICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsKLSAgICB9Ci0KLSAg
ICBzZWxmLmxheWVyLnN1YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKLSAgICBfYm91bmNl
TGF5ZXJzID0gYm91bmNlTGF5ZXJzOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
cHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlcgotewotICAgIGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGljYXRvci0+cHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbigpID09IFdlYktpdDo6VGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOwotICAgIGRvdWJsZSBhbmltYXRpb25EdXJh
dGlvbiA9IHdhbnRzQ3Jvc3NmYWRlID8gYm91bmNlV2l0aENyb3NzZmFkZUFuaW1hdGlvbkR1cmF0
aW9uIDogYm91bmNlQW5pbWF0aW9uRHVyYXRpb247Ci0gICAgUmV0YWluUHRyPENBS2V5ZnJhbWVB
bmltYXRpb24+IGJvdW5jZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlv
bldpdGhLZXlQYXRoOkAidHJhbnNmb3JtIl07Ci0gICAgW2JvdW5jZUFuaW1hdGlvbiBzZXRWYWx1
ZXM6QFsKLSAgICAgICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9y
bTNESWRlbnRpdHldLAotICAgICAgICBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNB
VHJhbnNmb3JtM0RNYWtlU2NhbGUobWlkQm91bmNlU2NhbGUsIG1pZEJvdW5jZVNjYWxlLCAxKV0s
Ci0gICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElk
ZW50aXR5XQotICAgICAgICBdXTsKLSAgICBbYm91bmNlQW5pbWF0aW9uIHNldER1cmF0aW9uOmFu
aW1hdGlvbkR1cmF0aW9uXTsKLQotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9z
c2ZhZGVBbmltYXRpb247Ci0gICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVTaGFk
b3dJbkFuaW1hdGlvbjsKLSAgICBpZiAod2FudHNDcm9zc2ZhZGUpIHsKLSAgICAgICAgY3Jvc3Nm
YWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJj
b250ZW50cyJdOwotICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9
IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+bWFrZUNHSW1hZ2UoKTsKLSAgICAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
LSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndh
cmRzXTsKLSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9u
Ok5PXTsKLSAgICAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXREdXJhdGlvbjphbmltYXRpb25E
dXJhdGlvbl07Ci0KLSAgICAgICAgZmFkZVNoYWRvd0luQW5pbWF0aW9uID0gW0NBQmFzaWNBbmlt
YXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJzaGFkb3dPcGFjaXR5Il07Ci0gICAgICAgIFtm
YWRlU2hhZG93SW5BbmltYXRpb24gc2V0RnJvbVZhbHVlOkAwXTsKLSAgICAgICAgW2ZhZGVTaGFk
b3dJbkFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAxXTsKLSAgICAgICAgW2ZhZGVTaGFkb3dJbkFuaW1h
dGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICAgICAgW2ZhZGVTaGFk
b3dJbkFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKLSAgICAgICAgW2ZhZGVT
aGFkb3dJbkFuaW1hdGlvbiBzZXREdXJhdGlvbjphbmltYXRpb25EdXJhdGlvbl07Ci0gICAgfQot
Ci0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldENvbXBs
ZXRpb25CbG9jazpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgZm9yIChDQUxheWVyKiBib3VuY2VM
YXllciBpbiBfYm91bmNlTGF5ZXJzLmdldCgpKSB7Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRP
cGFjaXR5OjFdOwotICAgICAgICBbYm91bmNlTGF5ZXIgYWRkQW5pbWF0aW9uOmJvdW5jZUFuaW1h
dGlvbi5nZXQoKSBmb3JLZXk6QCJib3VuY2UiXTsKLSAgICAgICAgaWYgKHdhbnRzQ3Jvc3NmYWRl
KSB7Ci0gICAgICAgICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5OnRleHRMYXllcktleV0g
YWRkQW5pbWF0aW9uOmNyb3NzZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJjb250ZW50VHJh
bnNpdGlvbiJdOwotICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpkcm9wU2hh
ZG93TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpmYWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9y
S2V5OkAiZmFkZVNoYWRvd0luIl07Ci0gICAgICAgICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9y
S2V5OnJpbVNoYWRvd0xheWVyS2V5XSBhZGRBbmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9u
LmdldCgpIGZvcktleTpAImZhZGVTaGFkb3dJbiJdOwotICAgICAgICB9Ci0gICAgfQotICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLS0gKHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFJldGFpblB0cjxD
QUJhc2ljQW5pbWF0aW9uPiBmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0
aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0RnJvbVZh
bHVlOkAxXTsKLSAgICBbZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOkAwXTsKLSAgICBbZmFkZUFu
aW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICBbZmFkZUFuaW1h
dGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKLSAgICBbZmFkZUFuaW1hdGlvbiBzZXRE
dXJhdGlvbjpmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb25dOwotCi0gICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldENvbXBsZXRpb25CbG9jazpjb21wbGV0aW9u
SGFuZGxlcl07Ci0gICAgW3NlbGYubGF5ZXIgYWRkQW5pbWF0aW9uOmZhZGVBbmltYXRpb24uZ2V0
KCkgZm9yS2V5OkAiZmFkZU91dCJdOwotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0K
LS0gKEJPT0wpaXNGbGlwcGVkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZAotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotVGV4dEluZGljYXRvcldpbmRvdzo6VGV4dEluZGljYXRvcldpbmRv
dyhXS1ZpZXcgKndrVmlldykKLSAgICA6IG1fd2tWaWV3KHdrVmlldykKLSAgICAsIG1fc3RhcnRG
YWRlT3V0VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGV4dEluZGljYXRvcldpbmRvdzo6
c3RhcnRGYWRlT3V0VGltZXJGaXJlZCkKLXsKLX0KLQotVGV4dEluZGljYXRvcldpbmRvdzo6flRl
eHRJbmRpY2F0b3JXaW5kb3coKQotewotICAgIGNsb3NlV2luZG93KCk7Ci19Ci0KLXZvaWQgVGV4
dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0
b3I+IHRleHRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBh
bmltYXRpb25Db21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV90ZXh0SW5kaWNhdG9yID09
IHRleHRJbmRpY2F0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGV4dEluZGljYXRvciA9
IHRleHRJbmRpY2F0b3I7Ci0KLSAgICAvLyBHZXQgcmlkIG9mIHRoZSBvbGQgd2luZG93LgotICAg
IGNsb3NlV2luZG93KCk7Ci0KLSAgICBpZiAoIW1fdGV4dEluZGljYXRvcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTlNSZWN0IGNvbnRlbnRSZWN0ID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0Qm91
bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpOwotCi0gICAgQ0dGbG9hdCBob3Jpem9udGFs
TWFyZ2luID0gc3RkOjptYXgoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKiAyICsgaG9yaXpvbnRhbEJv
cmRlciwgY29udGVudFJlY3Quc2l6ZS53aWR0aCAqIDIpOwotICAgIENHRmxvYXQgdmVydGljYWxN
YXJnaW4gPSBzdGQ6Om1heChkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyB2ZXJ0aWNhbEJvcmRl
ciwgY29udGVudFJlY3Quc2l6ZS5oZWlnaHQgKiAyKTsKLQotICAgIGNvbnRlbnRSZWN0ID0gTlNJ
bnNldFJlY3QoY29udGVudFJlY3QsIC1ob3Jpem9udGFsTWFyZ2luLCAtdmVydGljYWxNYXJnaW4p
OwotICAgIE5TUmVjdCB3aW5kb3dGcmFtZVJlY3QgPSBOU0ludGVncmFsUmVjdChbbV93a1ZpZXcg
Y29udmVydFJlY3Q6Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOwotICAgIHdpbmRvd0ZyYW1lUmVj
dCA9IFtbbV93a1ZpZXcgd2luZG93XSBjb252ZXJ0UmVjdFRvU2NyZWVuOndpbmRvd0ZyYW1lUmVj
dF07Ci0gICAgTlNSZWN0IHdpbmRvd0NvbnRlbnRSZWN0ID0gW05TV2luZG93IGNvbnRlbnRSZWN0
Rm9yRnJhbWVSZWN0OndpbmRvd0ZyYW1lUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93
TWFza107Ci0KLSAgICBtX3RleHRJbmRpY2F0b3JXaW5kb3cgPSBhZG9wdE5TKFtbTlNXaW5kb3cg
YWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93Q29udGVudFJlY3Qgc3R5bGVNYXNrOk5T
Qm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVy
Ok5PXSk7Ci0KLSAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldEJhY2tncm91bmRDb2xvcjpb
TlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRPcGFx
dWU6Tk9dOwotICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0SWdub3Jlc01vdXNlRXZlbnRz
OllFU107Ci0KLSAgICBtX3RleHRJbmRpY2F0b3JWaWV3ID0gYWRvcHROUyhbW1dLVGV4dEluZGlj
YXRvclZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBbbV90ZXh0SW5k
aWNhdG9yV2luZG93IGZyYW1lXS5zaXplLndpZHRoLCBbbV90ZXh0SW5kaWNhdG9yV2luZG93IGZy
YW1lXS5zaXplLmhlaWdodCkgdGV4dEluZGljYXRvcjptX3RleHRJbmRpY2F0b3IgbWFyZ2luOk5T
TWFrZVNpemUoaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pXSk7Ci0gICAgW21fdGV4
dEluZGljYXRvcldpbmRvdyBzZXRDb250ZW50VmlldzptX3RleHRJbmRpY2F0b3JWaWV3LmdldCgp
XTsKLQotICAgIFtbbV93a1ZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzptX3RleHRJbmRpY2F0
b3JXaW5kb3cuZ2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKLSAgICBbbV90ZXh0SW5kaWNh
dG9yV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0KLSAgICBpZiAobV90ZXh0SW5k
aWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgIT0gVGV4dEluZGljYXRvcjo6UHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSkgewotICAgICAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBw
cmVzZW50V2l0aENvbXBsZXRpb25IYW5kbGVyOlthbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcl0g
ewotICAgICAgICAgICAgYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfV07
Ci0gICAgfQotCi0gICAgaWYgKGZhZGVPdXQpCi0gICAgICAgIG1fc3RhcnRGYWRlT3V0VGltZXIu
c3RhcnRPbmVTaG90KHRpbWVCZWZvcmVGYWRlU3RhcnRzKTsKLX0KLQotdm9pZCBUZXh0SW5kaWNh
dG9yV2luZG93OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgaWYgKCFtX3RleHRJbmRpY2F0b3JXaW5k
b3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhcnRGYWRlT3V0VGltZXIuc3RvcCgpOwot
Ci0gICAgW1ttX3RleHRJbmRpY2F0b3JXaW5kb3cgcGFyZW50V2luZG93XSByZW1vdmVDaGlsZFdp
bmRvdzptX3RleHRJbmRpY2F0b3JXaW5kb3cuZ2V0KCldOwotICAgIFttX3RleHRJbmRpY2F0b3JX
aW5kb3cgY2xvc2VdOwotICAgIG1fdGV4dEluZGljYXRvcldpbmRvdyA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c3RhcnRGYWRlT3V0VGltZXJGaXJlZCgpCi17Ci0g
ICAgUmV0YWluUHRyPE5TV2luZG93PiBpbmRpY2F0b3JXaW5kb3cgPSBtX3RleHRJbmRpY2F0b3JX
aW5kb3c7Ci0gICAgW21fdGV4dEluZGljYXRvclZpZXcgaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxl
cjpbaW5kaWNhdG9yV2luZG93XSB7Ci0gICAgICAgIFtbaW5kaWNhdG9yV2luZG93IHBhcmVudFdp
bmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6aW5kaWNhdG9yV2luZG93LmdldCgpXTsKLSAgICAgICAg
W2luZGljYXRvcldpbmRvdyBjbG9zZV07Ci0gICAgfV07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tCmluZGV4IDA2N2FiMGFl
Y2IzZjBmZDNmMzlmMzM3MGE2Y2RiMzRiZDU0OTQ2YzEuLjY0NDBkN2ZiZWVlYTNhMmM0ZWVkMDQ0
YTQ5NmE2MzBjMDliNjc0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0KQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lm
IFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEw
MDAKIAotI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5o
IgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlldy5oIgpAQCAt
NTAsNiArNDksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9OU1NoYXJpbmdTZXJ2aWNlUGlja2VyU1BJ
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVmlld1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0
TGlua2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1VSTC5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLX0lOX1VNQlJFTExBKFF1YXJ0eiwg
SW1hZ2VLaXQpCkBAIC02NTAsNyArNjUwLDcgQEAgLSAoTlNBcnJheSAqKV9kZWZhdWx0TWVudUl0
ZW1zRm9yRGF0YURldGVjdGVkVGV4dAogCiAgICAgTlNBcnJheSAqbWVudUl0ZW1zID0gW1tnZXRE
REFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51SXRlbXNGb3JSZXN1bHQ6
W19jdXJyZW50QWN0aW9uQ29udGV4dCBtYWluUmVzdWx0XSBhY3Rpb25Db250ZXh0Ol9jdXJyZW50
QWN0aW9uQ29udGV4dC5nZXQoKV07CiAgICAgaWYgKG1lbnVJdGVtcy5jb3VudCA9PSAxICYmIF9o
aXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IpCi0gICAgICAgIF9oaXRUZXN0
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3ItPnNldFByZXNlbnRhdGlvblRyYW5zaXRp
b24oVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKKyAgICAg
ICAgX2hpdFRlc3RSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvci0+c2V0UHJlc2VudGF0
aW9uVHJhbnNpdGlvbihUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNl
KTsKICAgICByZXR1cm4gbWVudUl0ZW1zOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDcxOTlkN2U2NDFiOGYzN2Y3MDMw
OTkyZTg1YjczZjlkODhiNDhmYy4uNjcxM2UyZTJhNjI0NmZjMmRlMGM0ZTA2YjJkYjFiYWY2NWJk
NDIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTEwLDggKzExMCw2IEBACiAJCTBGQ0I0RTUxMThCQkUwNDQwMDBGQ0ZDOSAv
KiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0MTE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICov
OyB9OwogCQkwRkNCNEU1NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0NDE4QkJFMDQ0
MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3LmggKi87IH07CiAJCTBGQ0I0RTU1MThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNCNEU0NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3Lm1t
ICovOyB9OwotCQkwRkNCNEU2MDE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4dEluZGljYXRvcldpbmRv
dy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRF
NTYxOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCAqLzsgfTsKLQkJMEZD
QjRFNjExOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1NzE4QkJFM0Q5MDAw
RkNGQzkgLyogVGV4dEluZGljYXRvcldpbmRvdy5tbSAqLzsgfTsKIAkJMEZDQjRFNjIxOEJCRTNE
OTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVu
dEltcGwuaCAqLzsgfTsKIAkJMEZDQjRFNjMxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJ
bXBsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
QjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLm1tICovOyB9OwogCQkwRkNC
NEU2NjE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTVDMThCQkUzRDkwMDBGQ0ZDOSAv
KiBXS1ByaW50aW5nVmlldy5oICovOyB9OwpAQCAtMzA4LDggKzMwNiw2IEBACiAJCTFBOTBDMUVF
MTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdl
YkZpbmRPcHRpb25zLmggKi87IH07CiAJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5k
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi87IH07CiAJ
CTFBOTBDMUY1MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMzEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovOyB9OwotCQkxQTkxMDA3MTEyNjY3NUM0MDAx
ODQyRjUgLyogVGV4dEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3Iu
aCAqLzsgfTsKLQkJMUE5MTAwNzIxMjY2NzVDNDAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNzAx
MjY2NzVDNDAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuY3BwICovOyB9OwogCQkxQTkyREMxMTEy
RjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExh
eWVyVHJlZUNvbnRleHQuaCAqLzsgfTsKIAkJMUE5MkRDMTMxMkY4QkFCOTAwMTdBRjY1IC8qIExh
eWVyVHJlZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE5MkRDMTIxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuY3Bw
ICovOyB9OwogCQkxQTlFMzI4OTE4MjE2MzY5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVn
aXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
OUUzMjg3MTgyMTYzNjkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDcxLDggKzIw
NjcsNiBAQAogCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1t
OyBwYXRoID0gaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNDQxOEJCRTA0NDAwMEZDRkM5
IC8qIFdLU2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Nj
cm9sbFZpZXcuaDsgcGF0aCA9IGlvcy9XS1Njcm9sbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZDQjRFNDUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLU2Nyb2xsVmlldy5tbTsg
cGF0aCA9IGlvcy9XS1Njcm9sbFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGQ0I0RTU2MThCQkUzRDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbmRpY2F0b3JXaW5kb3cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDQjRFNTcxOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJ
bmRpY2F0b3JXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBUZXh0SW5kaWNhdG9yV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkNCNEU1ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNsaWVudEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUNsaWVudEltcGwu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTVDMThCQkUzRDkwMDBGQ0ZD
OSAvKiBXS1ByaW50aW5nVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S1ByaW50aW5nVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5NCw4ICsy
Mjg4LDYgQEAKIAkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5k
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogVGV4dEluZGljYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0SW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBUZXh0SW5kaWNhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRJbmRpY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkyREMxMDEyRjhCQTQ2MDAxN0FGNjUg
LyogTGF5ZXJUcmVlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
YXllclRyZWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTJEQzEy
MTJGOEJBQjkwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheWVyVHJlZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTlFMzI4NzE4MjE2MzY5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2Jq
ZWN0UmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUmVtb3Rl
T2JqZWN0UmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0OTMsOCAr
NDQ4NSw2IEBACiAJCQkJNTI3MkIyODgxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRh
LmNwcCAqLywKIAkJCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEu
aCAqLywKIAkJCQkxQTVFNERBMzEyRDNCRDNEMDA5OUEyQkIgLyogVGV4dENoZWNrZXJTdGF0ZS5o
ICovLAotCQkJCTFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBUZXh0SW5kaWNhdG9yLmNwcCAq
LywKLQkJCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogVGV4dEluZGljYXRvci5oICovLAog
CQkJCTFBNjQyNDVEMTJERTI5QTEwMENBQUUyQyAvKiBVcGRhdGVJbmZvLmNwcCAqLywKIAkJCQkx
QTY0MjQ1QzEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5oICovLAogCQkJCTFBQzEzMzY1
MTg1NjVCNTcwMEYzRUMwNSAvKiBVc2VyRGF0YS5jcHAgKi8sCkBAIC02NjQxLDggKzY2MzEsNiBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjg3OEI2MTMxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJl
Y3Rpb25QYW5lbC5oICovLAogCQkJCUI4NzhCNjE0MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0
aW9uUGFuZWwubW0gKi8sCi0JCQkJMEZDQjRFNTYxOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRp
Y2F0b3JXaW5kb3cuaCAqLywKLQkJCQkwRkNCNEU1NzE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4dElu
ZGljYXRvcldpbmRvdy5tbSAqLywKIAkJCQkxQUZERTY1QjE5NTRFOEQ1MDBDNDhGRkEgLyogTGVn
YWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcCAqLywKIAkJCQkwRkNCNEU1ODE4QkJFM0Q5MDAwRkNG
QzkgLyogUGFnZUNsaWVudEltcGwuaCAqLywKIAkJCQkwRkNCNEU1OTE4QkJFM0Q5MDAwRkNGQzkg
LyogUGFnZUNsaWVudEltcGwubW0gKi8sCkBAIC03MjM3LDcgKzcyMjUsNiBAQAogCQkJCTRBM0ND
MThGMTlCMDdCOEEwMEQxNEFFRiAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUE1NzVGQjE0OTZCNTI2MDBBNEVFMDYgLyogRXZlbnREaXNwYXRj
aGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmlu
ZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTEwMDcxMTI2Njc1QzQwMDE4NDJG
NSAvKiBUZXh0SW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVFNzcyODE4M0RENkY2
MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U4MUQ4RDEz
MTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQkMzREZD
MTg5OUY1MUMwMDRGMDYyNiAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC03Mjg1LDcgKzcyNzIsNiBAQAogCQkJCTUxNjU0RUZFMTg0RUYzM0YwMDdEQzgzNyAvKiBV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMzM0UwRDExMjQwOEU4NjAwMzYwRjNGIC8qIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUExMTVEQzcyMTkxRDgyREEwMERBODA3MiAvKiBfV0tXZWJWaWV3
UHJpbnRGb3JtYXR0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0I0RTYwMThCQkUzRDkwMDBG
Q0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0REY3
NzEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNCMEIwREUxMjMwNUE4QzAwQjEzNDFFIC8qIEluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VDb2RlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4
QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MDAsNyArODg4Niw2IEBA
CiAJCQkJMUFBNTc2MDIxNDk2Qjk3OTAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTFFMDkzMzE4ODYxRDM4MDBEMkRDNDkg
LyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOTBD
MUY1MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkxQTkxMDA3MjEyNjY3NUM0MDAxODQyRjUgLyogVGV4dEluZGljYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0U4MUQ4QzEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzc4RTFBNDkxODIwOENENjAwMzEwMDdBIC8qIFdLTlNTdHJpbmcu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFGMDhCNzE5MjY5RTZEMDBCNjM5MEMgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
OTQwNiw3ICs5MzkxLDYgQEAKIAkJCQlCQ0JBQUM3MjE0NEU2MTk5MDA1M0Y4MkYgLyogV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCQUFDRjUxNDUy
MzI0RjAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MTI5MDk5MjE4M0FDRUFGMDA1NTIyQTYgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNCNEU2MTE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4dElu
ZGljYXRvcldpbmRvdy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMjA0RUVFMTFDODNFQzgwMDhG
MzM3NSAvKiBXS0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzZFNzBGQjE4QjJEQzdB
MDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVC
OUUxMjc3NjFBQzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbQppbmRl
eCAwYjBkYzNhNGNjMGM1OTc3NGJiOTZkMDFmODFkZWRmYTY1MTg0MjQ4Li40ZWQ1ZTI1ZTY3MmZk
YzM2Mzc2MGRjODM2NDBhYjExNzE0YjM3ZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250
ZXh0TWVudUNsaWVudE1hYy5tbQpAQCAtMjksMTMgKzI5LDEzIEBACiAjaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpCiAKICNpbXBvcnQgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKLSNpbXBvcnQgIlRl
eHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9y
dCAiV2ViUGFnZS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4K
ICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29udGV4
dE1lbnVDbGllbnQ6Omxvb2tVcEluRGljdGlvbmFyeShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9w
YWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworICAgIG1fcGFnZS0+cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwg
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7
CiB9CiAKIGJvb2wgV2ViQ29udGV4dE1lbnVDbGllbnQ6OmlzU3BlYWtpbmcoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5k
ZXggMWU2NDJjMjQ5OTVmMzdjZDJhZGQzY2M5Y2YxZDJiMGYwOGEwYWQxZi4uYTg2YjA5NjExYThm
YWY5MWYxNGY3Mzc2Y2YwMmY0MGY0YWEyNWJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGV4dEluZGljYXRvci5oIgogI2lu
Y2x1ZGUgIldLUGFnZS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKQEAgLTQ0LDYgKzQzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dEluZGljYXRvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
MzE0LDcgKzMxNCw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQogI2lmICFQ
TEFURk9STShJT1MpCiBib29sIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kSW5kaWNhdG9yKEZy
YW1lJiBzZWxlY3RlZEZyYW1lLCBib29sIGlzU2hvd2luZ092ZXJsYXksIGJvb2wgc2hvdWxkQW5p
bWF0ZSkKIHsKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gaW5kaWNhdG9yID0gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoKldlYkZyYW1lOjpmcm9tQ29yZUZyYW1l
KHNlbGVjdGVkRnJhbWUpLCBzaG91bGRBbmltYXRlID8gVGV4dEluZGljYXRvcjo6UHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6Qm91bmNlIDogVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Tm9uZSk7CisgICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IGluZGljYXRvciA9IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKHNlbGVjdGVkRnJhbWUsIHNob3Vs
ZEFuaW1hdGUgPyBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlIDog
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUpOwogICAgIGlmICghaW5k
aWNhdG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDRmYWJjMGUyODA3MmI4YTQzMDA1NmI0OTYyZTc2
YWRhNDE3NjlhZjAuLjk1NzZlZmNkMGRiODRkY2RmNmQyZTQ5MTBlYzc2ZjM3YmE3ZTZlNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNDQsNyAr
NDQsNiBAQAogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24u
aCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0SW5kaWNhdG9y
LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RHJhZ0RhdGEuaD4KQEAgLTU4LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VWaXNp
YmlsaXR5U3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFR5cGVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRpY2F0
b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVmlld1N0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24u
aD4KQEAgLTY3Myw3ICs2NzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVhayhjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHN0b3BTcGVha2luZygpOwogCi0gICAgdm9pZCBwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uKTsK
KyAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc1NtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwpAQCAtOTkxLDcgKzk5MSw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHZvaWQgcGVyZm9ybURpY3Rpb25h
cnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yUmFuZ2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpSYW5nZSYsIE5TRGljdGlv
bmFyeSAqb3B0aW9ucywgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cisg
ICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKFdlYkNvcmU6OkZyYW1lKiwg
V2ViQ29yZTo6UmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKIAogICAgIHZvaWQgd2luZG93QW5kVmlld0Zy
YW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVu
Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgd2luZG93RnJhbWVJblVuZmxp
cHBlZFNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpZXdGcmFt
ZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY2Vzc2li
aWxpdHlWaWV3Q29vcmRpbmF0ZXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZTA1ZmM4YjQwNzhiMjA0NzQwYzU0
MmM5ZmQ2YThiMGMyYjU0MzUwOC4uY2RiMjU2Y2E4NzI1YjE2YTE3YTYwNjFjY2QwZTg0NTQwOWZh
OTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQpAQCAtMjk2LDEyICsyOTYsMTIgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clNlbGVjdGlvbihGcmFtZSosIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0SW5kaWNhdG9y
OjpQcmVzZW50YXRpb25UcmFuc2l0aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSosIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJh
bWUqLCBSYW5nZSYsIE5TRGljdGlvbmFyeSAqLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25U
cmFuc2l0aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdl
KEZyYW1lKiwgUmFuZ2UmLCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb24pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5MmY5
YjFlNTBlMDA2ZDBmMGQwMzA0OTcxZWYyMzhhOTlmYmYzYTIzLi43YTEyYzJjYzU3YzA5YjUwNjIz
OGU2OGEyYTMyYzFlODMxNTQ4NWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC00OTQsMTAgKzQ5NCwxMCBAQCB2b2lk
IFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBv
aW50JiBmbG9hdFBvaW50KQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpyYW5nZSwgb3B0aW9ucywg
VGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKKyAgICBwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwogfQogCi12b2lkIFdlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRp
b25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
biBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQogewogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9
IG5pbDsKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSByYW5nZUZvckRpY3Rpb25h
cnlMb29rdXBGb3JTZWxlY3Rpb24oc2VsZWN0aW9uLCAmb3B0aW9ucyk7CkBAIC01MDgsMTAgKzUw
OCwxMCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9u
KEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbAogdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVjdGlvbigpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
Jm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlQW5kQ3Jvc3NmYWRlKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlv
bihmcmFtZSwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKIH0KIAotdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lKiBmcmFtZSwgUmFuZ2Um
IHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlv
blRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3ZvaWQgV2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSogZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBw
cmVzZW50YXRpb25UcmFuc2l0aW9uKQogewogICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0
ZVNwYWNlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDQwLDcgKzEwNDAsNyBA
QCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29y
ZTo6RmxvYXRQb2ludCBsb2NhdGlvbkluVgogICAgICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRp
bmdCb3gudW5pdGUoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91
bmRpbmdCb3goKSkpOwogCiAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhQm91
bmRpbmdCb3ggPSBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgYWN0aW9uTWVudVJl
c3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0
aFJhbmdlKCptYWluUmVzdWx0UmFuZ2UsIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5z
aXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7CisgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0
ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgq
bWFpblJlc3VsdFJhbmdlLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91
bmNlQW5kQ3Jvc3NmYWRlKTsKICAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5kZXRlY3RlZERhdGFP
cmlnaW5hdGluZ1BhZ2VPdmVybGF5ID0gb3ZlcmxheS0+cGFnZU92ZXJsYXlJRCgpOwogICAgICAg
ICBtX2xhc3RBY3Rpb25NZW51UmFuZ2VGb3JTZWxlY3Rpb24gPSBtYWluUmVzdWx0UmFuZ2U7CiAK
QEAgLTEwNTQsNyArMTA1NCw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRU
ZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uSW5WCiAgICAgICAgIGFj
dGlvbk1lbnVSZXN1bHQuYWN0aW9uQ29udGV4dCA9IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1B
cm91bmRIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBkZXRlY3RlZERhdGFSYW5nZSk7CiAgICAgICAgIGlmIChhY3Rpb25NZW51UmVzdWx0LmFjdGlv
bkNvbnRleHQgJiYgZGV0ZWN0ZWREYXRhUmFuZ2UpIHsKICAgICAgICAgICAgIGFjdGlvbk1lbnVS
ZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsK
LSAgICAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqZGV0ZWN0ZWREYXRhUmFuZ2UsIFRleHRJ
bmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7Cisg
ICAgICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBU
ZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmRldGVjdGVkRGF0YVJhbmdlLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKICAgICAg
ICAgICAgIG1fbGFzdEFjdGlvbk1lbnVSYW5nZUZvclNlbGVjdGlvbiA9IGRldGVjdGVkRGF0YVJh
bmdlOwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242041</attachid>
            <date>2014-11-21 04:59:09 -0800</date>
            <delta_ts>2014-11-21 11:24:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138954-20141121140018.patch</filename>
            <type>text/plain</type>
            <size>117033</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBhY2MzMTk2YjM1YTZj
MGY3YjU1YmVhODNmMWFlMjU3MmUwOTQ0YS4uMWRmNTZjOTk2ODNiYzA0NzM4YjJkZTIyYzI5MDVm
ZDhiYzAxZGI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTExLTIxICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgVGV4dElu
ZGljYXRvcntXaW5kb3d9IHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODk1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg5OTIx
ODU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
ZSBUZXh0SW5kaWNhdG9yIGFuZCBUZXh0SW5kaWNhdG9yV2luZG93IHRvIFdlYkNvcmUgc28gdGhh
dCBib3RoCisgICAgICAgIFdlYktpdHMgY2FuIHNoYXJlIHRoZSBpbXBsZW1lbnRhdGlvbi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICBCdWlsZCBUZXh0SW5kaWNhdG9yLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIEV4cG9ydCBUZXh0SW5kaWNhdG9y
e1dpbmRvd30gc3ltYm9scyBmb3IgdGhlIFdlYktpdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcC4K
KyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmguCisgICAgICAgIFN0cmFpZ2hmb3J3YXJkIG1vdmUg
b2YgVGV4dEluZGljYXRvciBmcm9tIFdlYktpdDIsIGV4Y2VwdDoKKworICAgICAgICBNb3ZlIFRl
eHRJbmRpY2F0b3I6OkRhdGEgYW5kIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRp
b24gb3V0IGRpcmVjdGx5CisgICAgICAgIGludG8gdGhlIFdlYkNvcmUgbmFtZXNwYWNlIHRvIGFs
bG93IGZvciBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQyIGFyZ3VtZW50IGNvZGVycy4KKworICAg
ICAgICBVc2UgSW1hZ2UgaW5zdGVhZCBvZiBTaGFyZWFibGVCaXRtYXAgaW50ZXJuYWxseS4KKwor
ICAgICAgICBNb3ZlIHRoZSBUZXh0SW5kaWNhdG9yRGF0YSBlbmNvZGUvZGVjb2RlIHRvIFdlYkNv
cmVBcmd1bWVudENvZGVycy4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9U
ZXh0SW5kaWNhdG9yV2luZG93LmguCisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldp
bmRvdy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5tbS4KKyAgICAgICAgU3RyYWlnaGZvcndhcmQgbW92ZSBvZiBUZXh0SW5k
aWNhdG9yV2luZG93IGZyb20gV2ViS2l0Mi4KKwogMjAxNC0xMS0yMCAgQmVuamFtaW4gUG91bGFp
biAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIHJlbWFpbmluZyB2
ZXN0aWdlcyBvZiBtaW5pbWFsLXVpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDZiYzgxMDJiNDQwMzFlMjdiNDk0
NTk2OWZjZmQ5YTg0NDE1M2I3YS4uOThmNzc1Nzg0Y2UwNzIwOGRkYjhiMjhhZjY0MzdlOTdhNzcw
ZTU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE0LTExLTIxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgVGV4dEluZGljYXRv
cntXaW5kb3d9IHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzODk1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg5OTIxODU+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgUmVtb3ZlIFRleHRJbmRpY2F0b3IuY3BwLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIChzdHJ1Y3Rfb3JfY2xhc3MpOgor
ICAgICAgICAoaGVhZGVyc19mb3JfdHlwZSk6CisgICAgICAgIFRlbGwgbWVzc2FnZXMucHkgdGhh
dCBUZXh0SW5kaWNhdG9yRGF0YSBpcyBhIHN0cnVjdCwgYW5kIGNvbWVzIGZyb20gVGV4dEluZGlj
YXRvci5oLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPFRleHRJbmRpY2F0b3JEYXRhPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxUZXh0SW5kaWNhdG9yRGF0YT46OmRlY29kZSk6CisgICAgICAgIEFkZCBh
cmd1bWVudCBjb2RlcnMgZm9yIFRleHRJbmRpY2F0b3JEYXRhLgorCisgICAgICAgICogU2hhcmVk
L0RpY3Rpb25hcnlQb3B1cEluZm8uaDogICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMvQWN0
aW9uTWVudUhpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL0FjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0Lm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tBY3Rpb25N
ZW51Q29udHJvbGxlci5tbToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4
dE1lbnVDbGllbnRNYWMubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIEFkanVzdCB0byBU
ZXh0SW5kaWNhdG9yIGFuZCBUZXh0SW5kaWNhdG9yV2luZG93J3MgbmV3IGhvbWUuCisKIDIwMTQt
MTEtMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBm
aXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc5NjA0M2Y4YWZiZTcyZjgwMTcwZTRmZTgxMGYw
ZWYwMmVjMjFmMDMuLmUwNTYzYTQ4ZDg4N2E4NjRhOTA4ZjU5ZTUyZjRhMGFkYzM1MzQ3MmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xOTM0LDYgKzE5MzQsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAKICAgICBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cAogICAgIHBhZ2UvU3VzcGVuZGFibGVUaW1lci5jcHAKKyAgICBwYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCiAgICAgcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCiAgICAgcGFnZS9WaXNpdGVkTGlua1N0b3JlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCBiNzkzY2VlNTJlNTBkODIxZTg2NDdmZjEwMTNiNGQ4MDUyYjliYjM3
Li40ZWY5NjM3NDEyMDE5OGM4MmM4MWViZmVmZjY5ZWY0ZjAyZGRiMTU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgpAQCAtMjI5NSw2ICsyMjk1LDEwIEBAIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
N21vdXNlVXBFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjhrZXlFdmVudEVQ
N05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOW1vdXNlRG93bkVQN05TRXZlbnQK
IF9fWk43V2ViQ29yZTEzRGF0YURldGVjdGlvbjI5ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1
bHRFUktOU18xM0hpdFRlc3RSZXN1bHRFUk5TXzlGbG9hdFJlY3RFUk4zV1RGNlJlZlB0cklOU181
UmFuZ2VFRUUKK19fWk43V2ViQ29yZTEzVGV4dEluZGljYXRvcjE1Y3JlYXRlV2l0aFJhbmdlRVJL
TlNfNVJhbmdlRU5TXzM1VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb25FCitfX1pO
N1dlYkNvcmUxM1RleHRJbmRpY2F0b3IyNmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lRVJOU181
RnJhbWVFTlNfMzVUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbkUKK19fWk43V2Vi
Q29yZTEzVGV4dEluZGljYXRvcjZjcmVhdGVFUktOU18xN1RleHRJbmRpY2F0b3JEYXRhRQorX19a
TjdXZWJDb3JlMTNUZXh0SW5kaWNhdG9yRDFFdgogX19aTjdXZWJDb3JlMTNnZXRSYXdDb29raWVz
RVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVM1X1JOM1dURjZWZWN0b3JJ
TlNfNkNvb2tpZUVMajBFTlM2XzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUxM3Rv
RGV2aWNlU3BhY2VFUktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTE0Y29v
a2llc0VuYWJsZWRFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUzVfCkBA
IC0yMzA5LDYgKzIzMTMsOSBAQCBfX1pON1dlYkNvcmUxN1Njcm9sbGJhclRoZW1lTWFjMjNzZXRV
cE92ZXJoYW5nQXJlYVNoYWRvd0VQN0NBTGF5ZXIKIF9fWk43V2ViQ29yZTE3U2Nyb2xsYmFyVGhl
bWVNYWMyNHJlbW92ZU92ZXJoYW5nQXJlYVNoYWRvd0VQN0NBTGF5ZXIKIF9fWk43V2ViQ29yZTE3
U2Nyb2xsYmFyVGhlbWVNYWMyN3NldFVwT3ZlcmhhbmdBcmVhQmFja2dyb3VuZEVQN0NBTGF5ZXJS
S05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE3U2Nyb2xsYmFyVGhlbWVNYWMyOHJlbW92ZU92ZXJo
YW5nQXJlYUJhY2tncm91bmRFUDdDQUxheWVyCitfX1pON1dlYkNvcmUxOVRleHRJbmRpY2F0b3JX
aW5kb3cxNnNldFRleHRJbmRpY2F0b3JFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNUZXh0SW5kaWNh
dG9yRUVFYk5TdDNfXzE4ZnVuY3Rpb25JRnZ2RUVFCitfX1pON1dlYkNvcmUxOVRleHRJbmRpY2F0
b3JXaW5kb3dDMUVQNk5TVmlldworX19aTjdXZWJDb3JlMTlUZXh0SW5kaWNhdG9yV2luZG93RDFF
dgogX19aTjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzU2FmYXJpRXYKIF9fWk43V2ViQ29yZTIwUGxh
dGZvcm1FdmVudEZhY3RvcnkyNGNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudEVQN05TRXZlbnRQNk5T
VmlldwogX19aTjdXZWJDb3JlMjBQbGF0Zm9ybUV2ZW50RmFjdG9yeTI3Y3JlYXRlUGxhdGZvcm1L
ZXlib2FyZEV2ZW50RVA3TlNFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY5OTU1ODJhM2U0NjE4NTNhMTg5ZGU2ZjRkYmEx
YjgyZDcwODBiNzYuLjYzYWMzZDliMWYxM2YyZjIwZjZiYWM1NTVjMjVlZjk5ODhkYTRkMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTExMDQsNiArMTEwNCwxMCBAQAogCQkyRDQ4MUYwMjE0NkI1QzU1MDBBQTc4MzQgLyogQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0
ZWRJbWFnZS5oICovOyB9OwogCQkyRDQ4MUYwMzE0NkI1QzY1MDBBQTc4MzQgLyogR3JhZGllbnRJ
bWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDJGQzA1NjE0NjBDRDZGMDAyNjM2MzMgLyogR3JhZGllbnRJbWFnZS5jcHAgKi87IH07CiAJCTJE
NDgxRjA0MTQ2QjVDNkIwMEFBNzgzNCAvKiBHcmFkaWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJGQzA1NzE0NjBDRDZGMDAyNjM2MzMg
LyogR3JhZGllbnRJbWFnZS5oICovOyB9OworCQkyRDRGOTZGNTFBMUVDQzI0MDA5OEJGODggLyog
VGV4dEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDRGOTZGMTFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgKi87
IH07CisJCTJENEY5NkY2MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDRGOTZGMjFBMUVDQzI0
MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTJENEY5NkY3MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5k
aWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDRGOTZGMzFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvcldpbmRvdy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJENEY5NkY4
MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0Rjk2RjQxQTFFQ0MyNDAwOThCRjg4
IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cubW0gKi87IH07CiAJCTJENThEODU1MUExNUY2NUYwMEE1
RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENThE
ODU2MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1OEQ4NTQxQTE1RjY1RjAwQTVGNzI2IC8q
IERhdGFEZXRlY3Rpb24ubW0gKi87IH07CiAJCTJENTlGMUJGMUEwMDQ0QzYwMDFGM0QyOSAvKiBE
YXRhRGV0ZWN0b3JzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDU5RjFCRTFBMDA0NEM2MDAxRjNEMjkgLyogRGF0YURldGVjdG9yc1NQSS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMyLDYg
KzgxMzYsMTAgQEAKIAkJMkQ0MTNGNjAxQTE4N0EzRjAwNDFBNTIxIC8qIExvb2t1cFNQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb29rdXBTUEkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0NkYwNEQxN0I5NkZCRDAwNTY0N0YwIC8qIEludFBvaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0NkYwNEYxN0I5NkZEMjAwNTY0N0YwIC8qIElu
dFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50U2l6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENEY5NkYxMUExRUNDMjQwMDk4QkY4
OCAvKiBUZXh0SW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRleHRJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDRG
OTZGMjFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZXh0SW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJENEY5NkYzMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbmRpY2F0b3JXaW5kb3cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ0Rjk2RjQxQTFFQ0MyNDAwOThCRjg4IC8q
IFRleHRJbmRpY2F0b3JXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBUZXh0SW5kaWNhdG9yV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDU4RDg1MzFBMTVGNjVGMDBBNUY3MjYgLyogRGF0YURldGVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJENThEODU0MUExNUY2NUYwMEE1RjcyNiAvKiBEYXRhRGV0ZWN0aW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YURldGVjdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1OUYxQkUxQTAwNDRDNjAwMUYz
RDI5IC8qIERhdGFEZXRlY3RvcnNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0YURldGVjdG9yc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY3
MjMsNiArMTY3MzEsOCBAQAogCQkJCTYyNkNERTBEMTE0MDQyNEMwMDFFNUE2OCAvKiBTcGF0aWFs
TmF2aWdhdGlvbi5oICovLAogCQkJCTYyQzEyMTdBMTFBQjlFNzYwMDNDNDYyQyAvKiBTdXNwZW5k
YWJsZVRpbWVyLmNwcCAqLywKIAkJCQk2MkMxMjE3QjExQUI5RTc3MDAzQzQ2MkMgLyogU3VzcGVu
ZGFibGVUaW1lci5oICovLAorCQkJCTJENEY5NkYxMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5k
aWNhdG9yLmNwcCAqLywKKwkJCQkyRDRGOTZGMjFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGlj
YXRvci5oICovLAogCQkJCTFBRTc5RDQwMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwICovLAogCQkJCTFBRTc5RDQxMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29u
dGVudENvbnRyb2xsZXIuaCAqLywKIAkJCQkwMDNGMUZFOTExRTZBQjQzMDA4MjU4RDkgLyogVXNl
ckNvbnRlbnRUeXBlcy5oICovLApAQCAtMTc2MzAsNiArMTc2NDAsOCBAQAogCQkJCTJEOTNBRUUx
MTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJ
MkQ5M0FFRTIxOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Ki8sCiAJCQkJRTFDMkYyNDgxNTMzQTIxMjAwODNGOTc0IC8qIFNldHRpbmdzTWFjLm1tICovLAor
CQkJCTJENEY5NkYzMUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggKi8s
CisJCQkJMkQ0Rjk2RjQxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cubW0g
Ki8sCiAJCQkJMjYyNTVGMDIxODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudE1hYy5tbSAqLywK
IAkJCQlGNTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmlldy5oICovLAog
CQkJKTsKQEAgLTIzNTM3LDYgKzIzNTQ5LDcgQEAKIAkJCQlCQzVFQjVEQjBFODFCN0VBMDBCMjU5
NjUgLyogQm9yZGVyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFRDhDMzdBMTgzQkZGOEMw
MDlFNTNCRCAvKiBCb3hTaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NTUwOTdEOTMw
MjAwOTRDOUU0IC8qIGJyZWFrX2xpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDRGOTZGNjFB
MUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlEREIwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU5OUU3NTkwMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU5QjU5Nzc1MTEwODY1NzkwMDcxNTlFOCAvKiBCcmlkZ2VKU0MuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjYwOTYsNiArMjYxMDksNyBAQAogCQkJCUI4REJEQjRFMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NTEyNTAyMzE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDRGOTZGNzFBMUVDQzI0MDA5OEJGODggLyogVGV4
dEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAw
NTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OUUxNjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNw
b3RMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYyNyw2ICsyNzY0MSw3IEBACiAJ
CQkJODVERjJFRUUwQUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODVDMDUwQkIwQUQ4NEY1RTAwNTUzMkU3IC8qIERPTUhUTUxFbWJlZEVsZW1l
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUJBNENFMDBBQTY4NjFCMDA4ODA1MkQgLyogRE9N
SFRNTEZpZWxkU2V0RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJENEY5NkY4MUExRUND
MjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODVFQ0JFRjAwQUE3NjI2OTAwNTQ0RjBCIC8qIERPTUhUTUxGb250RWxlbWVudC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTg1REYyQzVEMEFBMzQxRjYwMEFENjRDNSAvKiBET01IVE1MRm9ybUVsZW1l
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURGODE5NjBBQTc3RTRCMDA0ODZBRDcgLyogRE9N
SFRNTEZyYW1lRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjk1MzQsNiArMjk1NDksNyBA
QAogCQkJCUZFOEE2NzQ3MTZDREQxOUUwMDkzMEJGOCAvKiBTUUxTdGF0ZW1lbnRCYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTREMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0
ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTRGMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDRGOTZGNTFBMUVD
QzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUUx
ODExMzE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFQUQ3RDg3MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTU0MTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlYTZiMjEwOTUzYmNlMjY4OWI4NDc3
NmU1Nzc5YmMzMWUyMDEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5o
IgorI2luY2x1ZGUgIkZyYW1lU25hcHNob3R0aW5nLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGVzZSBz
aG91bGQgbWF0Y2ggdGhlIHZhbHVlcyBpbiBUZXh0SW5kaWNhdG9yV2luZG93LgorLy8gRklYTUU6
IElkZWFsbHkgdGhlc2Ugd291bGQgb25seSBiZSBpbiBvbmUgcGxhY2UuCisjaWYgRU5BQkxFKExF
R0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKK2NvbnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXIg
PSAzOworY29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXIgPSAxOworY29uc3QgZmxvYXQgZHJvcFNo
YWRvd0JsdXJSYWRpdXMgPSAxLjU7CisjZWxzZQorY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRl
ciA9IDI7Citjb25zdCBmbG9hdCB2ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBmbG9hdCBkcm9w
U2hhZG93Qmx1clJhZGl1cyA9IDEyOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIEZsb2F0UmVjdCBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93KGNvbnN0
IEZsb2F0UmVjdCByZWN0KQoreworICAgIEZsb2F0UmVjdCBvdXRzZXRSZWN0ID0gcmVjdDsKKyAg
ICBvdXRzZXRSZWN0LmluZmxhdGVYKGRyb3BTaGFkb3dCbHVyUmFkaXVzICsgaG9yaXpvbnRhbEJv
cmRlcik7CisgICAgb3V0c2V0UmVjdC5pbmZsYXRlWShkcm9wU2hhZG93Qmx1clJhZGl1cyArIHZl
cnRpY2FsQm9yZGVyKTsKKyAgICByZXR1cm4gb3V0c2V0UmVjdDsKK30KKworc3RhdGljIGJvb2wg
dGV4dEluZGljYXRvcnNGb3JUZXh0UmVjdHNPdmVybGFwKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiB0ZXh0UmVjdHMpCit7CisgICAgc2l6ZV90IGNvdW50ID0gdGV4dFJlY3RzLnNpemUoKTsKKyAg
ICBpZiAoY291bnQgPD0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEZs
b2F0UmVjdD4gaW5kaWNhdG9yUmVjdHM7CisgICAgaW5kaWNhdG9yUmVjdHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShjb3VudCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3QgPSBvdXRzZXRJbmRpY2F0b3JS
ZWN0SW5jbHVkaW5nU2hhZG93KHRleHRSZWN0c1tpXSk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aiA9IGluZGljYXRvclJlY3RzLnNpemUoKTsgajsgKSB7CisgICAgICAgICAgICAtLWo7CisgICAg
ICAgICAgICBpZiAoaW5kaWNhdG9yUmVjdC5pbnRlcnNlY3RzKGluZGljYXRvclJlY3RzW2pdKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGlj
YXRvclJlY3RzLnVuY2hlY2tlZEFwcGVuZChpbmRpY2F0b3JSZWN0KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRv
cjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dEluZGljYXRvcihkYXRhKSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5n
ZSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNp
dGlvbikKK3sKKyAgICBGcmFtZSogZnJhbWUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLmZyYW1lKCk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oJnJh
bmdlKTsKKworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBpbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZSgqZnJhbWUsIHByZXNlbnRhdGlvblRyYW5z
aXRpb24pOworCisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihvbGRTZWxlY3Rp
b24pOworICAgIAorICAgIHJldHVybiBpbmRpY2F0b3IucmVsZWFzZSgpOworfQorCisvLyBGSVhN
RSAoMTM4ODg5KTogSWRlYWxseSB0aGUgRnJhbWVTbmFwc2hvdHRpbmcgZnVuY3Rpb25zIHdvdWxk
IGJlIG1vcmUgZmxleGlibGUKKy8vIGFuZCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGltcGxlbWVudCB0
aGlzIGhlcmUuCitzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gc25hcHNob3RTZWxlY3Rpb25XaXRo
SGlnaGxpZ2h0KEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKKworICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzID0gc2VsZWN0aW9u
LnNlbGVjdGlvbkJvdW5kcygpOworCisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBzZWxl
Y3Rpb24gYm91bmRzIHRvIGJlIGVtcHR5OyBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU2NjQ1LgorICAgIGlmIChzZWxlY3Rpb25Cb3VuZHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgZW5jbG9zaW5nSW50UmVjdChz
ZWxlY3Rpb25Cb3VuZHMpLCAwKTsKKworICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIHNuYXBzaG90LT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdT
dG9yZSwgVW5zY2FsZWQpOworfQorCitQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKK3sKKyAg
ICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbkJvdW5kcygpKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGluZGljYXRvckJpdG1h
cCA9IHNuYXBzaG90U2VsZWN0aW9uKGZyYW1lLCBTbmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNrVGV4
dCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7CisgICAgaWYgKCFpbmRp
Y2F0b3JCaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEltYWdl
PiBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0OworICAgIGlmIChwcmVzZW50YXRpb25UcmFu
c2l0aW9uID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGUpCisgICAgICAgIGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQgPSBzbmFwc2hv
dFNlbGVjdGlvbldpdGhIaWdobGlnaHQoZnJhbWUpOworCisgICAgLy8gU3RvcmUgdGhlIHNlbGVj
dGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkK
KyAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxs
IHByZWNpc2VseSBvdmVybGFwLgorICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coc2VsZWN0aW9uUmVjdCk7
CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkuZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOworCisgICAgLy8g
VGhlIGJvdW5kaW5nIHJlY3Qgb2YgYWxsIHRoZSB0ZXh0IHJlY3RzIGNhbiBiZSBkaWZmZXJlbnQg
dGhhbiB0aGUgc2VsZWN0aW9uCisgICAgLy8gcmVjdCB3aGVuIHRoZSBzZWxlY3Rpb24gc3BhbnMg
bXVsdGlwbGUgbGluZXM7IHRoZSBpbmRpY2F0b3IgZG9lc24ndCBhY3R1YWxseQorICAgIC8vIGNh
cmUgd2hlcmUgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgZ29lcywganVzdCB3aGVyZSB0aGUgdGV4
dCBhY3R1YWxseSBpcy4KKyAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29v
cmRpbmF0ZXM7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5XaW5kb3dDb29yZGlu
YXRlczsKKyAgICBmb3IgKGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3QgOiB0ZXh0UmVjdHMpIHsK
KyAgICAgICAgRmxvYXRSZWN0IHRleHRSZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IGZyYW1lLnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KSk7CisgICAg
ICAgIHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXMuYXBwZW5kKHRleHRSZWN0SW5XaW5kb3dD
b29yZGluYXRlcyk7CisgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
LnVuaXRlKHRleHRSZWN0SW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgfQorCisgICAgVmVjdG9y
PEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKKyAgICBmb3Ig
KGF1dG8gcmVjdCA6IHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgcmVj
dC5tb3ZlQnkoLXRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkp
OworICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLmFwcGVuZChyZWN0
KTsKKyAgICB9CisKKyAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOworICAgIGRhdGEuc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlczsKKyAgICBkYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gdGV4
dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
czsKKyAgICBkYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgIGRhdGEuY29udGVudEltYWdlID0gaW5kaWNhdG9yQml0bWFw
OworICAgIGRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IGluZGljYXRvckJpdG1hcFdp
dGhIaWdobGlnaHQ7CisgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbjsKKworICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7
Cit9CisKK1RleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvckRh
dGEmIGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKK3sKKyAgICBBU1NFUlQobV9kYXRhLmNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yICE9IDEgfHwgbV9kYXRhLmNvbnRlbnRJbWFnZS0+c2l6ZSgpID09
IGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
KS5zaXplKCkpOworCisgICAgaWYgKHRleHRJbmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcCht
X2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykpIHsKKyAgICAgICAgbV9k
YXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV9k
YXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOworICAgICAgICBtX2RhdGEu
dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5zaHJpbmsoMSk7CisgICAgfQorfQor
CitUZXh0SW5kaWNhdG9yOjp+VGV4dEluZGljYXRvcigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmUxMGEz
MzMzZjJmZWUyMzU3MTNlZjcwOGYwYTJkODFmNGM2OGQyNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFRleHRJbmRpY2F0b3JfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yX2gK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA8IDEwMTAwMAorI2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNB
VE9SX1NUWUxFIDEKKyNlbHNlCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1Jf
U1RZTEUgMAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBSYW5nZTsKKworZW51bSBjbGFzcyBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiB7CisgICAgTm9uZSwKKyAgICBCb3VuY2UsCisg
ICAgQm91bmNlQW5kQ3Jvc3NmYWRlCit9OworCitzdHJ1Y3QgVGV4dEluZGljYXRvckRhdGEgewor
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBGbG9h
dFJlY3QgdGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgVmVjdG9yPEZs
b2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKKyAgICBmbG9hdCBj
b250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICBSZWZQdHI8SW1hZ2U+IGNvbnRlbnRJbWFnZVdp
dGhIaWdobGlnaHQ7CisgICAgUmVmUHRyPEltYWdlPiBjb250ZW50SW1hZ2U7CisgICAgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKK307
CisKK2NsYXNzIFRleHRJbmRpY2F0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0SW5kaWNhdG9y
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRl
KGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gY3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGlj
YXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiwgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24pOworCisgICAgflRleHRJbmRpY2F0b3IoKTsKKworICAgIEZsb2F0UmVj
dCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIEZsb2F0UmVjdCB0ZXh0
Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS50
ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7IH0KKyAgICBm
bG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jb250
ZW50SW1hZ2VTY2FsZUZhY3RvcjsgfQorICAgIEltYWdlICpjb250ZW50SW1hZ2VXaXRoSGlnaGxp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQuZ2V0
KCk7IH0KKyAgICBJbWFnZSAqY29udGVudEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNv
bnRlbnRJbWFnZS5nZXQoKTsgfQorICAgIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjsgfQorCisgICAgdm9pZCBzZXRQcmVzZW50YXRpb25UcmFuc2l0aW9u
KFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHRyYW5zaXRpb24pIHsgbV9kYXRh
LnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSB0cmFuc2l0aW9uOyB9CisKKyAgICBUZXh0SW5kaWNh
dG9yRGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKK3ByaXZhdGU6CisgICAg
VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYpOworCisgICAgVGV4dEluZGlj
YXRvckRhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBUZXh0SW5kaWNhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0
b3JXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWQyMTQwZWQ3ZTgyOTQwMTc5NGNjNDQ1Y2M5NGI2Mjdj
ZWY0ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dElu
ZGljYXRvcldpbmRvdy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRl
eHRJbmRpY2F0b3JXaW5kb3dfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yV2luZG93X2gKKworI2lm
IFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCA8ZnVuY3Rpb25hbD4KKyNpbXBvcnQgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKworQGNsYXNzIE5TVmlldzsKK0BjbGFzcyBX
ZWJUZXh0SW5kaWNhdG9yVmlldzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
SW5kaWNhdG9yOworCitjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUZXh0SW5kaWNhdG9yV2luZG93KTsKKworcHVibGljOgorICAgIGV4cGxpY2l0
IFRleHRJbmRpY2F0b3JXaW5kb3coTlNWaWV3ICopOworICAgIH5UZXh0SW5kaWNhdG9yV2luZG93
KCk7CisKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9y
PiwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFuaW1hdGlvbkNvbXBsZXRp
b25IYW5kbGVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7CisKKyAgICB2
b2lkIHN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKTsKKworICAgIE5TVmlldyAqbV90YXJnZXRWaWV3
OworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBtX3RleHRJbmRpY2F0b3I7CisgICAgUmV0YWlu
UHRyPE5TV2luZG93PiBtX3RleHRJbmRpY2F0b3JXaW5kb3c7CisgICAgUmV0YWluUHRyPFdlYlRl
eHRJbmRpY2F0b3JWaWV3PiBtX3RleHRJbmRpY2F0b3JWaWV3OworCisgICAgUnVuTG9vcDo6VGlt
ZXI8VGV4dEluZGljYXRvcldpbmRvdz4gbV9zdGFydEZhZGVPdXRUaW1lcjsKKworICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gbV9ib3VuY2VBbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVGV4dEluZGljYXRvcldpbmRv
d19oCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWM0MjZjNzU3NmFjZGY0YTg5
YzY1NWFhNDA3ZTMzZGY0YmFjMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpAQCAtMCwwICsxLDMzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGV4dEluZGljYXRvcldpbmRvdy5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bXBvcnQgIlF1YXJ0ekNvcmVTUEkuaCIKKyNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKKyNpbXBv
cnQgIldlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZS5oIgorCitjb25zdCBDRlRpbWVJ
bnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Citjb25zdCBDRlRpbWVJbnRl
cnZhbCBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7Citjb25zdCBD
RlRpbWVJbnRlcnZhbCB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0
aW9uICsgMC4yOworY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9u
ID0gMC4zOworCisjaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKK2NvbnN0
IENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAxLjU7Citjb25zdCBDR0Zsb2F0IGhvcml6b250YWxC
b3JkZXIgPSAzOworY29uc3QgQ0dGbG9hdCB2ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBDR0Zs
b2F0IGJvcmRlcldpZHRoID0gMS4wOworY29uc3QgQ0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAzOwor
Y29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Citjb25zdCBDR0Zsb2F0IGRyb3BT
aGFkb3dPZmZzZXRZID0gMTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAx
LjU7CisjZWxzZQorY29uc3QgQ0dGbG9hdCBtaWRCb3VuY2VTY2FsZSA9IDEuMjsKK2NvbnN0IENH
RmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDI7Citjb25zdCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVy
ID0gMTsKK2NvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGggPSAwOworY29uc3QgQ0dGbG9hdCBjb3Ju
ZXJSYWRpdXMgPSAwOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Citjb25z
dCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0gNTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRv
d0JsdXJSYWRpdXMgPSAxMjsKK2NvbnN0IENHRmxvYXQgcmltU2hhZG93Qmx1clJhZGl1cyA9IDI7
CisjZW5kaWYKKworTlNTdHJpbmcgKnRleHRMYXllcktleSA9IEAiVGV4dExheWVyIjsKK05TU3Ry
aW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBAIkRyb3BTaGFkb3dMYXllciI7CitOU1N0cmluZyAq
cmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNoYWRvd0xheWVyIjsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViVGV4dEluZGljYXRvclZpZXcgOiBOU1ZpZXcgewor
ICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRvcjsKKyAgICBSZXRhaW5QdHI8
TlNBcnJheT4gX2JvdW5jZUxheWVyczsKKyAgICBOU1NpemUgX21hcmdpbjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNz
UmVmUHRyPFRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgbWFyZ2luOihOU1NpemUpbWFyZ2lu
OworCistICh2b2lkKXByZXNlbnRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFdlYlRleHRJbmRpY2F0b3JWaWV3CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihO
U1JlY3QpZnJhbWUgdGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPil0ZXh0
SW5kaWNhdG9yIG1hcmdpbjooTlNTaXplKW1hcmdpbgoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX3Rl
eHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yOworICAgIF9tYXJnaW4gPSBtYXJnaW47CisKKyAg
ICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7CisgICAgc2VsZi5sYXllci5hbmNob3JQb2ludCA9IENH
UG9pbnRaZXJvOworCisgICAgYm9vbCB3YW50c0Nyb3NzZmFkZSA9IF90ZXh0SW5kaWNhdG9yLT5w
cmVzZW50YXRpb25UcmFuc2l0aW9uKCkgPT0gVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246OkJvdW5jZUFuZENyb3NzZmFkZTsKKworICAgIEZsb2F0U2l6ZSBjb250ZW50c0ltYWdl
TG9naWNhbFNpemUgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPnNpemUoKTsKKyAg
ICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250
ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVu
dHNJbWFnZTsKKyAgICBpZiAod2FudHNDcm9zc2ZhZGUpCisgICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgZWxzZQorICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3It
PmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IGJvdW5jZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOworCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdodENvbG9yID0gW05T
Q29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOjEgZ3JlZW46MSBibHVlOjAgYWxwaGE6MV0uQ0dDb2xv
cjsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gcmltU2hhZG93Q29sb3IgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAuMTVdLkNHQ29sb3I7CisgICAgUmV0YWluUHRy
PENHQ29sb3JSZWY+IGRyb3BTaGFkb3dDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdo
aXRlOjAgYWxwaGE6MC4yXS5DR0NvbG9yOworCisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGJv
cmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NiBncmVlbjouOTAgYmx1
ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGdyYWRpZW50
RGFya0NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45MjkgZ3JlZW46LjggYmx1
ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGdyYWRpZW50
TGlnaHRDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDouOTQ5IGdyZWVuOi45Mzcg
Ymx1ZTowIGFscGhhOjFdLkNHQ29sb3I7CisKKyAgICBmb3IgKGF1dG8mIHRleHRSZWN0IDogX3Rl
eHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKSkgeworICAg
ICAgICBGbG9hdFJlY3QgYm91bmNlTGF5ZXJSZWN0ID0gdGV4dFJlY3Q7CisgICAgICAgIGJvdW5j
ZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVpZ2h0KTsKKyAgICAgICAg
Ym91bmNlTGF5ZXJSZWN0LmluZmxhdGVYKGhvcml6b250YWxCb3JkZXIpOworICAgICAgICBib3Vu
Y2VMYXllclJlY3QuaW5mbGF0ZVkodmVydGljYWxCb3JkZXIpOworCisgICAgICAgIFJldGFpblB0
cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIFtib3VuY2VMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FM
YXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RnJhbWU6Ym91
bmNlTGF5ZXJSZWN0XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIHNldE9wYWNpdHk6MF07CisgICAg
ICAgIFtib3VuY2VMYXllcnMgYWRkT2JqZWN0OmJvdW5jZUxheWVyLmdldCgpXTsKKworICAgICAg
ICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCksIGJvdW5jZUxheWVy
UmVjdC5zaXplKCkpOworICAgICAgICAvLyBGSVhNRSAoMTM4ODg4KTogSWRlYWxseSB3ZSB3b3Vs
ZG4ndCByZW1vdmUgdGhlIG1hcmdpbiBpbiB0aGlzIGNhc2UsIGJ1dCB3ZSBuZWVkIHRvCisgICAg
ICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB5ZWxsb3cgaGlnaGxpZ2h0IGFuZCBjb250ZW50SW1hZ2VX
aXRoSGlnaGxpZ2h0IG92ZXJsYXAgcHJlY2lzZWx5LgorICAgICAgICBpZiAod2FudHNDcm9zc2Zh
ZGUpIHsKKyAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdodFJlY3QuaW5mbGF0ZVgoLWhvcml6b250
YWxCb3JkZXIpOworICAgICAgICAgICAgeWVsbG93SGlnaGxpZ2h0UmVjdC5pbmZsYXRlWSgtdmVy
dGljYWxCb3JkZXIpOworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IGRy
b3BTaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IFtkcm9wU2hhZG93TGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJE
ZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dDb2xv
cjpkcm9wU2hhZG93Q29sb3IuZ2V0KCldOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNo
YWRvd1JhZGl1czpkcm9wU2hhZG93Qmx1clJhZGl1c107CisgICAgICAgIFtkcm9wU2hhZG93TGF5
ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZU1ha2UoZHJvcFNoYWRvd09mZnNldFgsIGRyb3BTaGFk
b3dPZmZzZXRZKV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aElzQm91
bmRzOllFU107CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsK
KyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsK
KyAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3JuZXJSYWRpdXM6Y29ybmVyUmFkaXVzXTsK
KyAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOmRyb3BTaGFkb3dMYXllci5nZXQoKV07
CisgICAgICAgIFtib3VuY2VMYXllciBzZXRWYWx1ZTpkcm9wU2hhZG93TGF5ZXIuZ2V0KCkgZm9y
S2V5OmRyb3BTaGFkb3dMYXllcktleV07CisKKyNpZiAhRU5BQkxFKExFR0FDWV9URVhUX0lORElD
QVRPUl9TVFlMRSkKKyAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJpbVNoYWRvd0xheWVyID0g
YWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVy
IHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07
CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsK
KyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOnJpbVNoYWRvd0NvbG9yLmdl
dCgpXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1JhZGl1czpyaW1TaGFkb3dC
bHVyUmFkaXVzXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd1BhdGhJc0JvdW5k
czpZRVNdOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVpl
cm9dOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKKyAgICAg
ICAgW3JpbVNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAg
ICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1c107CisgICAgICAg
IFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpyaW1TaGFkb3dMYXllci5nZXQoKV07CisgICAgICAg
IFtib3VuY2VMYXllciBzZXRWYWx1ZTpyaW1TaGFkb3dMYXllci5nZXQoKSBmb3JLZXk6cmltU2hh
ZG93TGF5ZXJLZXldOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9S
X1NUWUxFKQorICAgICAgICBSZXRhaW5QdHI8Q0FHcmFkaWVudExheWVyPiB0ZXh0TGF5ZXIgPSBh
ZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFt0ZXh0TGF5
ZXIgc2V0Q29sb3JzOkBbIChpZClncmFkaWVudExpZ2h0Q29sb3IuZ2V0KCksIChpZClncmFkaWVu
dERhcmtDb2xvci5nZXQoKSBdXTsKKyNlbHNlCisgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiB0
ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworI2VuZGlmCisgICAg
ICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmhpZ2hsaWdodENvbG9yLmdldCgpXTsK
KyAgICAgICAgW3RleHRMYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xvci5nZXQoKV07Cisg
ICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ym9yZGVyV2lkdGhdOworICAgICAgICBb
dGV4dExheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUg
c2hhcmVkXV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHM6KGlkKWNvbnRlbnRzSW1h
Z2UuZ2V0KCldOworCisgICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSB0ZXh0UmVjdDsKKyAg
ICAgICAgaW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzKCkubG9jYXRpb24oKSAtIF90ZXh0SW5kaWNhdG9yLT5zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcygpLmxvY2F0aW9uKCkpOworICAgICAgICBbdGV4dExheWVy
IHNldENvbnRlbnRzUmVjdDpDR1JlY3RNYWtlKGltYWdlUmVjdC54KCkgLyBjb250ZW50c0ltYWdl
TG9naWNhbFNpemUud2lkdGgoKSwgaW1hZ2VSZWN0LnkoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2Fs
U2l6ZS5oZWlnaHQoKSwgaW1hZ2VSZWN0LndpZHRoKCkgLyBjb250ZW50c0ltYWdlTG9naWNhbFNp
emUud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxTaXpl
LmhlaWdodCgpKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5OmtDQUdy
YXZpdHlDZW50ZXJdOworICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzU2NhbGU6X3RleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICBbdGV4dExheWVy
IHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICBbdGV4dExheWVyIHNldENv
cm5lclJhZGl1czpjb3JuZXJSYWRpdXNdOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6
dGV4dExheWVyLmdldCgpIGZvcktleTp0ZXh0TGF5ZXJLZXldOworICAgICAgICBbYm91bmNlTGF5
ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyLmdldCgpXTsKKyAgICB9CisKKyAgICBzZWxmLmxheWVy
LnN1YmxheWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKKyAgICBfYm91bmNlTGF5ZXJzID0gYm91
bmNlTGF5ZXJzOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcHJlc2VudFdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAg
IGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGljYXRvci0+cHJlc2VudGF0aW9uVHJhbnNp
dGlvbigpID09IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRD
cm9zc2ZhZGU7CisgICAgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uID0gd2FudHNDcm9zc2ZhZGUg
PyBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5pbWF0aW9uRHVyYXRpb24gOiBib3VuY2VBbmltYXRpb25E
dXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gYm91bmNlQW5pbWF0
aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJ0cmFuc2Zv
cm0iXTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldFZhbHVlczpAWworICAgICAgICBbTlNWYWx1
ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RJZGVudGl0eV0sCisgICAgICAg
IFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSht
aWRCb3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUsIDEpXSwKKyAgICAgICAgW05TVmFsdWUgdmFs
dWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHldCisgICAgICAgIF1dOwor
ICAgIFtib3VuY2VBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworCisg
ICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbjsKKyAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gZmFkZVNoYWRvd0luQW5pbWF0aW9uOworICAgIGlm
ICh3YW50c0Nyb3NzZmFkZSkgeworICAgICAgICBjcm9zc2ZhZGVBbmltYXRpb24gPSBbQ0FCYXNp
Y0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAImNvbnRlbnRzIl07CisgICAgICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRl
bnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIFtjcm9zc2ZhZGVBbmltYXRpb24g
c2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFnZS5nZXQoKV07CisgICAgICAgIFtjcm9zc2ZhZGVB
bmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgICAgIFtjcm9z
c2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgICAgIFtjcm9z
c2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworCisgICAgICAg
IGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhL
ZXlQYXRoOkAic2hhZG93T3BhY2l0eSJdOworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9u
IHNldEZyb21WYWx1ZTpAMF07CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0VG9W
YWx1ZTpAMV07CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NB
RmlsbE1vZGVGb3J3YXJkc107CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0UmVt
b3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0
RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOworICAgIH0KKworICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlv
bkhhbmRsZXJdOworICAgIGZvciAoQ0FMYXllciogYm91bmNlTGF5ZXIgaW4gX2JvdW5jZUxheWVy
cy5nZXQoKSkgeworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eToxXTsKKyAgICAgICAg
W2JvdW5jZUxheWVyIGFkZEFuaW1hdGlvbjpib3VuY2VBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAi
Ym91bmNlIl07CisgICAgICAgIGlmICh3YW50c0Nyb3NzZmFkZSkgeworICAgICAgICAgICAgW1ti
b3VuY2VMYXllciB2YWx1ZUZvcktleTp0ZXh0TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpjcm9zc2Zh
ZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiY29udGVudFRyYW5zaXRpb24iXTsKKyAgICAgICAg
ICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6ZHJvcFNoYWRvd0xheWVyS2V5XSBhZGRBbmlt
YXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVTaGFkb3dJbiJd
OworICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpyaW1TaGFkb3dMYXllcktl
eV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRl
U2hhZG93SW4iXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworfQorCistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gZmFk
ZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAib3Bh
Y2l0eSJdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMV07CisgICAgW2ZhZGVB
bmltYXRpb24gc2V0VG9WYWx1ZTpAMF07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6
a0NBRmlsbE1vZGVGb3J3YXJkc107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29t
cGxldGlvbjpOT107CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246ZmFkZU91dEFuaW1h
dGlvbkR1cmF0aW9uXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIFtzZWxm
LmxheWVyIGFkZEFuaW1hdGlvbjpmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVPdXQi
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCistIChCT09MKWlzRmxpcHBlZAor
eworICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitU
ZXh0SW5kaWNhdG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KE5TVmlldyAqdGFyZ2V0Vmll
dykKKyAgICA6IG1fdGFyZ2V0Vmlldyh0YXJnZXRWaWV3KQorICAgICwgbV9zdGFydEZhZGVPdXRU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUZXh0SW5kaWNhdG9yV2luZG93OjpzdGFydEZh
ZGVPdXRUaW1lckZpcmVkKQoreworfQorCitUZXh0SW5kaWNhdG9yV2luZG93Ojp+VGV4dEluZGlj
YXRvcldpbmRvdygpCit7CisgICAgY2xvc2VXaW5kb3coKTsKK30KKwordm9pZCBUZXh0SW5kaWNh
dG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4
dEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFuaW1hdGlv
bkNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChtX3RleHRJbmRpY2F0b3IgPT0gdGV4dElu
ZGljYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90ZXh0SW5kaWNhdG9yID0gdGV4dElu
ZGljYXRvcjsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIG9sZCB3aW5kb3cuCisgICAgY2xvc2VX
aW5kb3coKTsKKworICAgIGlmICghbV90ZXh0SW5kaWNhdG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBOU1JlY3QgY29udGVudFJlY3QgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1Jl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKCk7CisKKyAgICBDR0Zsb2F0IGhvcml6b250YWxNYXJnaW4g
PSBzdGQ6Om1heChkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyBob3Jpem9udGFsQm9yZGVyLCBj
b250ZW50UmVjdC5zaXplLndpZHRoICogMik7CisgICAgQ0dGbG9hdCB2ZXJ0aWNhbE1hcmdpbiA9
IHN0ZDo6bWF4KGRyb3BTaGFkb3dCbHVyUmFkaXVzICogMiArIHZlcnRpY2FsQm9yZGVyLCBjb250
ZW50UmVjdC5zaXplLmhlaWdodCAqIDIpOworCisgICAgY29udGVudFJlY3QgPSBOU0luc2V0UmVj
dChjb250ZW50UmVjdCwgLWhvcml6b250YWxNYXJnaW4sIC12ZXJ0aWNhbE1hcmdpbik7CisgICAg
TlNSZWN0IHdpbmRvd0ZyYW1lUmVjdCA9IE5TSW50ZWdyYWxSZWN0KFttX3RhcmdldFZpZXcgY29u
dmVydFJlY3Q6Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOworICAgIHdpbmRvd0ZyYW1lUmVjdCA9
IFtbbV90YXJnZXRWaWV3IHdpbmRvd10gY29udmVydFJlY3RUb1NjcmVlbjp3aW5kb3dGcmFtZVJl
Y3RdOworICAgIE5TUmVjdCB3aW5kb3dDb250ZW50UmVjdCA9IFtOU1dpbmRvdyBjb250ZW50UmVj
dEZvckZyYW1lUmVjdDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRv
d01hc2tdOworCisgICAgbV90ZXh0SW5kaWNhdG9yV2luZG93ID0gYWRvcHROUyhbW05TV2luZG93
IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OndpbmRvd0NvbnRlbnRSZWN0IHN0eWxlTWFzazpO
U0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZl
cjpOT10pOworCisgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6
W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0T3Bh
cXVlOk5PXTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldElnbm9yZXNNb3VzZUV2ZW50
czpZRVNdOworCisgICAgbV90ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMoW1tXZWJUZXh0SW5k
aWNhdG9yVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIFttX3RleHRJ
bmRpY2F0b3JXaW5kb3cgZnJhbWVdLnNpemUud2lkdGgsIFttX3RleHRJbmRpY2F0b3JXaW5kb3cg
ZnJhbWVdLnNpemUuaGVpZ2h0KSB0ZXh0SW5kaWNhdG9yOm1fdGV4dEluZGljYXRvciBtYXJnaW46
TlNNYWtlU2l6ZShob3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbildKTsKKyAgICBbbV90
ZXh0SW5kaWNhdG9yV2luZG93IHNldENvbnRlbnRWaWV3Om1fdGV4dEluZGljYXRvclZpZXcuZ2V0
KCldOworCisgICAgW1ttX3RhcmdldFZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzptX3RleHRJ
bmRpY2F0b3JXaW5kb3cuZ2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKKyAgICBbbV90ZXh0
SW5kaWNhdG9yV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisKKyAgICBpZiAobV90
ZXh0SW5kaWNhdG9yLT5wcmVzZW50YXRpb25UcmFuc2l0aW9uKCkgIT0gVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUpIHsKKyAgICAgICAgW21fdGV4dEluZGljYXRvclZp
ZXcgcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjpbYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRs
ZXJdIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAg
IH1dOworICAgIH0KKworICAgIGlmIChmYWRlT3V0KQorICAgICAgICBtX3N0YXJ0RmFkZU91dFRp
bWVyLnN0YXJ0T25lU2hvdCh0aW1lQmVmb3JlRmFkZVN0YXJ0cyk7Cit9CisKK3ZvaWQgVGV4dElu
ZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQoreworICAgIGlmICghbV90ZXh0SW5kaWNhdG9y
V2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXJ0RmFkZU91dFRpbWVyLnN0b3Ao
KTsKKworICAgIFtbbV90ZXh0SW5kaWNhdG9yV2luZG93IHBhcmVudFdpbmRvd10gcmVtb3ZlQ2hp
bGRXaW5kb3c6bV90ZXh0SW5kaWNhdG9yV2luZG93LmdldCgpXTsKKyAgICBbbV90ZXh0SW5kaWNh
dG9yV2luZG93IGNsb3NlXTsKKyAgICBtX3RleHRJbmRpY2F0b3JXaW5kb3cgPSBudWxscHRyOwor
fQorCit2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKQor
eworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0gbV90ZXh0SW5kaWNh
dG9yV2luZG93OworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRoQ29tcGxldGlvbkhh
bmRsZXI6W2luZGljYXRvcldpbmRvd10geworICAgICAgICBbW2luZGljYXRvcldpbmRvdyBwYXJl
bnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5nZXQoKV07CisgICAg
ICAgIFtpbmRpY2F0b3JXaW5kb3cgY2xvc2VdOworICAgIH1dOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGRlMGI1ZWZkM2UxN2FkMDdiZDE1MjRkYjQyNGQ1NTM5NjFlZTkwYjkuLmZkZWY0NmU4MmM5
MTZhYTE5ZmExMGVmNGU4ZjkxMjVjYTllZmVlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0y
MDcsNyArMjA3LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9TaGFyZWFibGVC
aXRtYXAuY3BwCiAgICAgU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAogICAgIFNoYXJlZC9T
dGF0aXN0aWNzRGF0YS5jcHAKLSAgICBTaGFyZWQvVGV4dEluZGljYXRvci5jcHAKICAgICBTaGFy
ZWQvVXBkYXRlSW5mby5jcHAKICAgICBTaGFyZWQvVXNlckRhdGEuY3BwCiAgICAgU2hhcmVkL1Zp
c2l0ZWRMaW5rVGFibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CmluZGV4IGI2NWVjZjFmMDM5YTBmYzAzZDU0OTMyZjIxYTgyYzhiMWM4YmY4YzkuLmVjNDI3
Y2IwMDU0YmJhMTU0MTE3ODU2MGJmMDZmNDRjNzAwZjIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0xODMsNiArMTgzLDcgQEAgZGVmIHN0cnVjdF9v
cl9jbGFzcyhuYW1lc3BhY2UsIHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6Um90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
JywKICAgICAgICAgJ1dlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24nLAorICAgICAgICAn
V2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEnLAogICAgICAgICAnV2ViQ29yZTo6VGltaW5nRnVu
Y3Rpb24nLAogICAgICAgICAnV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgnLAogICAgICAg
ICAnV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uJywKQEAgLTQzOCw2ICs0MzksNyBAQCBkZWYg
aGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50JzogWyc8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSc6IFsnPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQnOiBbJzxXZWJDb3JlL1RleHRDaGVj
a2VyQ2xpZW50Lmg+J10sCisgICAgICAgICdXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSc6IFsn
PFdlYkNvcmUvVGV4dEluZGljYXRvci5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzJzogWyc8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPiddLAogICAgICAgICAn
V2ViS2l0OjpCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUnOiBbJyJTZXNzaW9uU3RhdGUuaCInXSwK
ICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5oCmluZGV4IGE1NGZj
MDgzNDQ0ZWRmNGRlM2FkZDRkYzMzNDZhZDdjMjA5NzVmNzAuLmVkM2MwMDZjYzY2MDg1Y2VmZDcy
N2Y1ODBmOGE5ZTBlOGJhNzVmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
aWN0aW9uYXJ5UG9wdXBJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25h
cnlQb3B1cEluZm8uaApAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBEaWN0aW9uYXJ5UG9wdXBJ
bmZvX2gKICNkZWZpbmUgRGljdGlvbmFyeVBvcHVwSW5mb19oCiAKLSNpbmNsdWRlICJUZXh0SW5k
aWNhdG9yLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0SW5kaWNhdG9yLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJB
dHRyaWJ1dGVkU3RyaW5nLmgiCkBAIC00Niw3ICs0Niw3IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9w
dXBJbmZvIHsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBE
aWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbjsK
LSAgICBUZXh0SW5kaWNhdG9yOjpEYXRhIHRleHRJbmRpY2F0b3I7CisgICAgV2ViQ29yZTo6VGV4
dEluZGljYXRvckRhdGEgdGV4dEluZGljYXRvcjsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBvcHRpb25zOwogICAgIEF0dHJpYnV0ZWRTdHJpbmcg
YXR0cmlidXRlZFN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0
SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlOTIzMDkxN2JjYzEzYzMzMmM4ZDZkOTk5
MGNlZDA1NWFjNWY4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRl
ICJBcmd1bWVudENvZGVyc0NGLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rl
ci5oIgotI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldl
YkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVNlbGVjdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTbmFwc2hvdHRpbmcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR2VvbWV0cnlV
dGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUg
dmFsdWVzIGluIFRleHRJbmRpY2F0b3JXaW5kb3cuCi0vLyBGSVhNRTogSWRlYWxseSB0aGVzZSB3
b3VsZCBvbmx5IGJlIGluIG9uZSBwbGFjZS4KLSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNB
VE9SX1NUWUxFKQotY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDM7Ci1jb25zdCBmbG9h
dCB2ZXJ0aWNhbEJvcmRlciA9IDE7Ci1jb25zdCBmbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9
IDEuNTsKLSNlbHNlCi1jb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVyID0gMjsKLWNvbnN0IGZs
b2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IGZsb2F0IGRyb3BTaGFkb3dCbHVyUmFkaXVz
ID0gMTI7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBGbG9hdFJlY3Qg
b3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBGbG9hdFJlY3QgcmVjdCkK
LXsKLSAgICBGbG9hdFJlY3Qgb3V0c2V0UmVjdCA9IHJlY3Q7Ci0gICAgb3V0c2V0UmVjdC5pbmZs
YXRlWChkcm9wU2hhZG93Qmx1clJhZGl1cyArIGhvcml6b250YWxCb3JkZXIpOwotICAgIG91dHNl
dFJlY3QuaW5mbGF0ZVkoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKyB2ZXJ0aWNhbEJvcmRlcik7Ci0g
ICAgcmV0dXJuIG91dHNldFJlY3Q7Ci19Ci0KLXN0YXRpYyBib29sIHRleHRJbmRpY2F0b3JzRm9y
VGV4dFJlY3RzT3ZlcmxhcChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzKQotewot
ICAgIHNpemVfdCBjb3VudCA9IHRleHRSZWN0cy5zaXplKCk7Ci0gICAgaWYgKGNvdW50IDw9IDEp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGluZGljYXRv
clJlY3RzOwotICAgIGluZGljYXRvclJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEZs
b2F0UmVjdCBpbmRpY2F0b3JSZWN0ID0gb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRv
dyh0ZXh0UmVjdHNbaV0pOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGogPSBpbmRpY2F0b3JSZWN0
cy5zaXplKCk7IGo7ICkgewotICAgICAgICAgICAgLS1qOwotICAgICAgICAgICAgaWYgKGluZGlj
YXRvclJlY3QuaW50ZXJzZWN0cyhpbmRpY2F0b3JSZWN0c1tqXSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmRpY2F0b3JSZWN0cy51bmNoZWNr
ZWRBcHBlbmQoaW5kaWNhdG9yUmVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1QYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBU
ZXh0SW5kaWNhdG9yOjpEYXRhJiBkYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4
dEluZGljYXRvcihkYXRhKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgUHJlc2VudGF0aW9u
VHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQotewotICAgIEZyYW1lKiBmcmFtZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLQotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBv
bGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigmcmFuZ2UpOwotCi0gICAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZy
YW1lKCpXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpLCBwcmVzZW50YXRpb25UcmFuc2l0
aW9uKTsKLQotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
KTsKLSAgICAKLSAgICByZXR1cm4gaW5kaWNhdG9yLnJlbGVhc2UoKTsKLX0KLQotLy8gRklYTUUg
KDEzODg4OSk6IElkZWFsbHkgdGhlIEZyYW1lU25hcHNob3R0aW5nIGZ1bmN0aW9ucyB3b3VsZCBi
ZSBtb3JlIGZsZXhpYmxlCi0vLyBhbmQgd2Ugd291bGRuJ3QgaGF2ZSB0byBpbXBsZW1lbnQgdGhp
cyBoZXJlLgotc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdFNlbGVj
dGlvbldpdGhIaWdobGlnaHQoRnJhbWUmIGZyYW1lKQotewotICAgIGF1dG8mIHNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpOwotCi0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHMgPSBz
ZWxlY3Rpb24uc2VsZWN0aW9uQm91bmRzKCk7Ci0KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3Ig
dGhlIHNlbGVjdGlvbiBib3VuZHMgdG8gYmUgZW1wdHk7IHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NDUuCi0gICAgaWYgKHNlbGVjdGlvbkJvdW5kcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCBlbmNsb3NpbmdJ
bnRSZWN0KHNlbGVjdGlvbkJvdW5kcyksIDApOwotCi0gICAgaWYgKCFzbmFwc2hvdCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzaGFyZWRT
bmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRl
cm5hbFNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBpZiAoIXNo
YXJlZFNuYXBzaG90KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZ3JhcGhp
Y3NDb250ZXh0ID0gc2hhcmVkU25hcHNob3QtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3Rv
cigpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGRldmljZVNjYWxlRmFj
dG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKHNuYXBzaG90LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFBvaW50KCkp
OwotCi0gICAgcmV0dXJuIHNoYXJlZFNuYXBzaG90LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFt
ZShjb25zdCBXZWJGcmFtZSYgZnJhbWUsIFByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKLXsKLSAgICBGcmFtZSYgY29yZUZyYW1lID0gKmZyYW1lLmNvcmVGcmFt
ZSgpOwotICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29yZUZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygpKTsKLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBpbmRpY2F0b3JCaXRtYXAgPSBmcmFtZS5jcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgp
OwotICAgIGlmICghaW5kaWNhdG9yQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQ7
Ci0gICAgaWYgKHByZXNlbnRhdGlvblRyYW5zaXRpb24gPT0gUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKQotICAgICAgICBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxp
Z2h0ID0gc25hcHNob3RTZWxlY3Rpb25XaXRoSGlnaGxpZ2h0KGNvcmVGcmFtZSk7Ci0KLSAgICAv
LyBTdG9yZSB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1
c2VkIHN1YnNlcXVlbnRseQotICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFu
ZCBzZWxlY3Rpb24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCi0gICAgSW50UmVjdCBzZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IGNvcmVGcmFtZS52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3coc2VsZWN0aW9uUmVjdCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7
Ci0gICAgY29yZUZyYW1lLnNlbGVjdGlvbigpLmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3Rhbmds
ZXModGV4dFJlY3RzKTsKLQotICAgIC8vIFRoZSBib3VuZGluZyByZWN0IG9mIGFsbCB0aGUgdGV4
dCByZWN0cyBjYW4gYmUgZGlmZmVyZW50IHRoYW4gdGhlIHNlbGVjdGlvbgotICAgIC8vIHJlY3Qg
d2hlbiB0aGUgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIGxpbmVzOyB0aGUgaW5kaWNhdG9yIGRv
ZXNuJ3QgYWN0dWFsbHkKLSAgICAvLyBjYXJlIHdoZXJlIHRoZSBzZWxlY3Rpb24gaGlnaGxpZ2h0
IGdvZXMsIGp1c3Qgd2hlcmUgdGhlIHRleHQgYWN0dWFsbHkgaXMuCi0gICAgRmxvYXRSZWN0IHRl
eHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IHRleHRSZWN0c0luV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZm9yIChjb25zdCBGbG9hdFJlY3Qm
IHRleHRSZWN0IDogdGV4dFJlY3RzKSB7Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0UmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXMgPSBjb3JlRnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xv
c2luZ0ludFJlY3QodGV4dFJlY3QpKTsKLSAgICAgICAgdGV4dFJlY3RzSW5XaW5kb3dDb29yZGlu
YXRlcy5hcHBlbmQodGV4dFJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgdGV4dEJv
dW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5k
aW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5XaW5k
b3dDb29yZGluYXRlcykgewotICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgIH0KLQotICAgIFRleHRJbmRpY2F0
b3I6OkRhdGEgZGF0YTsKLSAgICBkYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
ID0gc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS50ZXh0Qm91bmRp
bmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzOwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS5jb250ZW50SW1hZ2VT
Y2FsZUZhY3RvciA9IGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBkYXRh
LmNvbnRlbnRJbWFnZSA9IGluZGljYXRvckJpdG1hcDsKLSAgICBkYXRhLmNvbnRlbnRJbWFnZVdp
dGhIaWdobGlnaHQgPSBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0OwotICAgIGRhdGEucHJl
c2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247Ci0KLSAgICByZXR1
cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwotfQotCi1UZXh0SW5kaWNhdG9yOjpUZXh0
SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmIGRhdGEpCi0gICAgOiBtX2RhdGEo
ZGF0YSkKLXsKLSAgICBBU1NFUlQobV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yICE9IDEg
fHwgbV9kYXRhLmNvbnRlbnRJbWFnZS0+c2l6ZSgpID09IGVuY2xvc2luZ0ludFJlY3QobV9kYXRh
LnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKS5zaXplKCkpOwotCi0gICAgaWYgKHRl
eHRJbmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcChtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcykpIHsKLSAgICAgICAgbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMpOwotICAgICAgICBtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcy5zaHJpbmsoMSk7Ci0gICAgfQotfQotCi1UZXh0SW5kaWNhdG9yOjp+VGV4dElu
ZGljYXRvcigpCi17Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKElQQzo6
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Ci0gICAgZW5jb2RlciA8PCB0ZXh0Qm91bmRpbmdS
ZWN0SW5XaW5kb3dDb29yZGluYXRlczsKLSAgICBlbmNvZGVyIDw8IHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZW5jb2RlciA8PCBjb250ZW50SW1hZ2VTY2FsZUZhY3Rv
cjsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0KLSAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGU7Ci0gICAgaWYgKGNv
bnRlbnRJbWFnZSkKLSAgICAgICAgY29udGVudEltYWdlLT5jcmVhdGVIYW5kbGUoY29udGVudElt
YWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBlbmNvZGVyIDw8IGNvbnRl
bnRJbWFnZUhhbmRsZTsKLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFn
ZVdpdGhIaWdobGlnaHRIYW5kbGU7Ci0gICAgaWYgKGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQp
Ci0gICAgICAgIGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShjb250ZW50
SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBl
bmNvZGVyIDw8IGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGU7Ci19Ci0KLWJvb2wgVGV4
dEluZGljYXRvcjo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBU
ZXh0SW5kaWNhdG9yOjpEYXRhJiB0ZXh0SW5kaWNhdG9yRGF0YSkKLXsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRleHRJbmRpY2F0b3JEYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0
ZXh0SW5kaWNhdG9yRGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dEluZGlj
YXRvckRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dEluZGljYXRvckRhdGEu
Y29udGVudEltYWdlU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0ZXh0SW5kaWNhdG9yRGF0YS5wcmVzZW50YXRpb25UcmFu
c2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUgY29udGVudEltYWdlSGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29udGVu
dEltYWdlSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb250ZW50
SW1hZ2VIYW5kbGUuaXNOdWxsKCkpCi0gICAgICAgIHRleHRJbmRpY2F0b3JEYXRhLmNvbnRlbnRJ
bWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpSZWFkT25seSk7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50
SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29udGVu
dEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZS5pc051bGwoKSkKLSAgICAgICAg
dGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRlMWEyNGI4OTNhOTZmZjMwOTI5OGQzZTI4ZWYzMzA3ZGNkMDBhZDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXh0SW5kaWNhdG9yX2gKLSNkZWZpbmUgVGV4dEluZGlj
YXRvcl9oCi0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEwMDAKLSNkZWZpbmUg
RU5BQkxFX0xFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSAxCi0jZWxzZQotI2RlZmluZSBFTkFC
TEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFIDAKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSYW5nZTsKLX0KLQotbmFtZXNw
YWNlIElQQyB7Ci1jbGFzcyBBcmd1bWVudERlY29kZXI7Ci1jbGFzcyBBcmd1bWVudEVuY29kZXI7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZTsKLQotY2xhc3MgVGV4
dEluZGljYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRJbmRpY2F0b3I+IHsKLXB1YmxpYzoK
LSAgICBlbnVtIGNsYXNzIFByZXNlbnRhdGlvblRyYW5zaXRpb24gewotICAgICAgICBOb25lLAot
ICAgICAgICBCb3VuY2UsCi0gICAgICAgIEJvdW5jZUFuZENyb3NzZmFkZQotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgRGF0YSB7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlczsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRleHRCb3Vu
ZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Rmxv
YXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgICAgICBmbG9h
dCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gY29udGVudEltYWdlV2l0aEhpZ2hsaWdodDsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gY29udGVudEltYWdlOwotICAgICAgICBQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNl
bnRhdGlvblRyYW5zaXRpb247Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVu
Y29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnRE
ZWNvZGVyJiwgRGF0YSYpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5k
aWNhdG9yPiBjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0
IFdlYkZyYW1lJiwgUHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFdlYkNvcmU6OlJhbmdlJiwg
UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Ci0KLSAgICB+VGV4dEluZGljYXRvcigpOwotCi0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOyB9Ci0g
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudGV4dFJlY3Rz
SW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsgfQotICAgIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxl
RmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yOyB9
Ci0gICAgU2hhcmVhYmxlQml0bWFwICpjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQuZ2V0KCk7IH0KLSAgICBT
aGFyZWFibGVCaXRtYXAgKmNvbnRlbnRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jb250
ZW50SW1hZ2UuZ2V0KCk7IH0KLSAgICBQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlv
blRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlv
bjsgfQotCi0gICAgdm9pZCBzZXRQcmVzZW50YXRpb25UcmFuc2l0aW9uKFByZXNlbnRhdGlvblRy
YW5zaXRpb24gdHJhbnNpdGlvbikgeyBtX2RhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHRy
YW5zaXRpb247IH0KLQotICAgIERhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQot
Ci1wcml2YXRlOgotICAgIFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYp
OwotCi0gICAgRGF0YSBtX2RhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFRleHRJbmRpY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCAxMjE5MmZjNjc1ODFiMGUyNzgyMjEwM2Q5N2Q2YzQ1
MjVlOWQwYjMwLi5mNjJkZjZkYTE5M2Y4YjUzYjhlNTJkMDQxZjBjYTYzYTMyZjEzZmIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RpbWluZ0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CkBAIC0xOTYwLDQgKzE5
NjEsNDEgQEAgYm9vbCBBcmd1bWVudENvZGVyPEJsb2JQYXJ0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgQmxvYlBhcnQmIGJsb2JQYXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dm9pZCBBcmd1bWVudENvZGVyPFRleHRJbmRpY2F0b3JEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgVGV4dEluZGljYXRvckRhdGEmIHRleHRJbmRpY2F0b3JEYXRh
KQoreworICAgIGVuY29kZXIgPDwgdGV4dEluZGljYXRvckRhdGEuc2VsZWN0aW9uUmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXM7CisgICAgZW5jb2RlciA8PCB0ZXh0SW5kaWNhdG9yRGF0YS50ZXh0Qm91
bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBlbmNvZGVyIDw8IHRleHRJbmRpY2F0
b3JEYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZW5jb2RlciA8
PCB0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICBlbmNvZGVy
LmVuY29kZUVudW0odGV4dEluZGljYXRvckRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbik7Cisg
ICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlLmdl
dCgpKTsKKyAgICBlbmNvZGVJbWFnZShlbmNvZGVyLCB0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50
SW1hZ2VXaXRoSGlnaGxpZ2h0LmdldCgpKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFRleHRJ
bmRpY2F0b3JEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4dEluZGlj
YXRvckRhdGEmIHRleHRJbmRpY2F0b3JEYXRhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dGV4dEluZGljYXRvckRhdGEuc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHRJbmRpY2F0
b3JEYXRhLnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS5jb250ZW50SW1h
Z2VTY2FsZUZhY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVFbnVtKHRleHRJbmRpY2F0b3JEYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUltYWdlKGRlY29kZXIsIHRl
eHRJbmRpY2F0b3JEYXRhLmNvbnRlbnRJbWFnZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2RlSW1hZ2UoZGVjb2RlciwgdGV4dEluZGljYXRvckRhdGEuY29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA1OTk1ZTVhYjEwYjQ2MGQ2YjhmNTk2ZjNiODU0
ZTIxNmIyMmZkYjEwLi5jNjhlMDlkMzFjYzlmYjBiYjBmYzRhOTY4NWJmYWY1Nzk1MTQ5MzEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC04
NSw2ICs4NSw3IEBAIHN0cnVjdCBQYXN0ZWJvYXJkV2ViQ29udGVudDsKIHN0cnVjdCBQbHVnaW5J
bmZvOwogc3RydWN0IFNjcm9sbGFibGVBcmVhUGFyYW1ldGVyczsKIHN0cnVjdCBUZXh0Q2hlY2tp
bmdSZXN1bHQ7CitzdHJ1Y3QgVGV4dEluZGljYXRvckRhdGE7CiBzdHJ1Y3QgVmlld3BvcnRBdHRy
aWJ1dGVzOwogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtNDM1LDYgKzQzNiwxMSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI+IHsK
IH07CiAjZW5kaWYKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yRGF0YT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYpOworICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYpOwor
fTsKKwogfSAvLyBuYW1lc3BhY2UgSVBDCiAKICNlbmRpZiAvLyBXZWJDb3JlQXJndW1lbnRDb2Rl
cnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0
VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVz
dFJlc3VsdC5oCmluZGV4IGU3YmUxNzA0NDJmODM5ZWUyMmNhMTI3N2Y5MWIzYTIzODU0M2VmNDku
LjcwMmM1NmU5ZjE0OWJkY2IzYjlkNjE5ZGM1NTNiNWIzNWI1NjEzNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmgKQEAgLTI5
LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNpbmNsdWRlICJUZXh0
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBPQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4dDsKQEAgLTU3LDcgKzU3LDcgQEAg
c3RydWN0IEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0IHsKIAogICAgIFJldGFpblB0cjxEREFjdGlv
bkNvbnRleHQ+IGFjdGlvbkNvbnRleHQ7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94OwotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBkZXRlY3RlZERhdGFU
ZXh0SW5kaWNhdG9yOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiBkZXRlY3Rl
ZERhdGFUZXh0SW5kaWNhdG9yOwogICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpQYWdlT3Zlcmxh
eUlEIGRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXk7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbQppbmRl
eCAzNjdjN2FlZmM1ZDc3ZGRiN2E0M2EwNDU1MjM4YTVjZTQzN2NhNWY2Li42OTBiYzlmODJhNzRh
ZTk0MGI4YWQ1ZWI1Y2NhMjNkNDgwYTExY2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQubW0KQEAgLTMxLDkgKzMxLDkgQEAK
ICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKICNpbXBvcnQgIkFyZ3VtZW50RGVjb2Rlci5o
IgogI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgi
CiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRGF0
YURldGVjdG9yc1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC0xMTgsMTEgKzExOCwxMSBAQCBib29sIEFjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEFjdGlv
bk1lbnVIaQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChoYXNUZXh0
SW5kaWNhdG9yKSB7Ci0gICAgICAgICAgICBUZXh0SW5kaWNhdG9yOjpEYXRhIGluZGljYXRvckRh
dGE7CisgICAgICAgICAgICBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3JEYXRh
OwogICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmRpY2F0b3JEYXRhKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUo
aW5kaWNhdG9yRGF0YSk7CisgICAgICAgICAgICBhY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5kZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlKGlu
ZGljYXRvckRhdGEpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNzA2MmE2MWNiNDY1
NTAzN2E5MzdkNDAzMjc1NWJjNDcwZjljNmM4ZC4uY2EyNTA5ZTBmM2VkN2ExZDdhMTkwY2Q1OGM5
Yjg2YjFiMjgxY2I4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIFBhc3NSZWZQdHI8V2Vi
Q29sb3JQaWNrZXI+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb2xvclBpY2tlcihXZWJQYWdlUHJv
eHkqLCBjb25zCiB9CiAjZW5kaWYKIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGlj
YXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIC8qIGZhZGVPdXQgKi8pCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4
dEluZGljYXRvcj4sIGJvb2wgLyogZmFkZU91dCAqLykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNs
aWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmgKaW5kZXggYWM0MGFlZjhhNzgwYzBkMWYzNWViNjkxN2NlYWE2MzJjZWI0Y2M2Mi4uNTZl
MDY1N2JlYzRmNWU2NDEzZTgxYzUxZGMwNzg0NzllODFlNWUwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC05Myw3ICs5Myw3
IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvbG9yUGlja2VyPiBjcmVhdGVDb2xvclBpY2tlcihXZWJQYWdlUHJveHkq
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYgaW50aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBvdmVycmlkZTsKICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW5kaWNhdG9y
KFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yPiwgYm9vbCBmYWRlT3V0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RWRp
dG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgY29u
c3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFdURjo6U3RyaW5nPiYpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
aW5kZXggMDliNTVkNDhkMjdlODkyODEwZDY0NzliNDUxMDU0MGQ1YzJlOGRjYi4uMTYyMGY3NGU0
YjUwMjNlZWJmOWJhNWE3MDU2MWE2Mjc3NDM4Zjk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtNTEsOCArNTEsNiBAQAogI2ltcG9ydCAiU3RyaW5n
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgogI2ltcG9ydCAiVGV4dENoZWNr
ZXJTdGF0ZS5oIgotI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgotI2ltcG9ydCAiVGV4dEluZGlj
YXRvcldpbmRvdy5oIgogI2ltcG9ydCAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94
eS5oIgogI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJWaWV3U25h
cHNob3RTdG9yZS5oIgpAQCAtOTYsNiArOTQsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KICNpbXBvcnQgPFdlYkNv
cmUvVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRp
Y2F0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvcldpbmRvdy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9UZXh0VW5kb0luc2VydGlvbk1hcmt1cE1hYy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9XZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZUNBTGF5ZXJFeHRyYXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCmluZGV4IDA2YmEyMDE0ZTQxYWU4ZDFjMjI1YjljOGVk
NGQ0ZjZkMTJhYzVkZWQuLjY1NGNmOTg1YzAyZjI3NDM3NDM5MGM1OGZhZGVjNjJkNjQ2ODU3M2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVy
bmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJu
YWwuaApAQCAtNDEsMTMgKzQxLDEzIEBAIGNsYXNzIERhdGFSZWZlcmVuY2U7CiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFRleHRJ
bmRpY2F0b3I7CiBzdHJ1Y3QgS2V5cHJlc3NDb21tYW5kOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBMYXllclRyZWVDb250ZXh0OwotY2xh
c3MgVGV4dEluZGljYXRvcjsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYkNvbnRleHQ7
CiBzdHJ1Y3QgQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQ7CkBAIC04MCw4ICs4MCw4IEBAIHN0cnVj
dCBXZWJQYWdlQ29uZmlndXJhdGlvbjsKIC0gKHZvaWQpX3NldEludHJpbnNpY0NvbnRlbnRTaXpl
OihOU1NpemUpaW50cmluc2ljQ29udGVudFNpemU7CiAtIChOU1JlY3QpX2NvbnZlcnRUb0Rldmlj
ZVNwYWNlOihOU1JlY3QpcmVjdDsKIC0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNlOihOU1Jl
Y3QpcmVjdDsKLS0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpU
ZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dDsKLS0gKHZv
aWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPil0
ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBhbmltYXRpb25Db21wbGV0aW9uSGFu
ZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lkICgpPiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4pdGV4
dEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVPdXQ7CistICh2b2lkKV9zZXRUZXh0SW5kaWNh
dG9yOihQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgZmFk
ZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOihzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+KWNvbXBsZXRpb25IYW5kbGVyOwogCiAtICh2b2lkKV9zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjooQ0FMYXllciAqKXJvb3RMYXllcjsKIC0gKENBTGF5
ZXIgKilfYWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3Bw
CmluZGV4IDAyZDAyYzA2MWRhOGIwZjZhNmNlY2Y2ODg5Zjk3NzBkZTQ2MTQ0ODkuLjFjODQ0ZGI2
MDIwYzA1ZTc5NWYwM2YzMjgwNDE3OWJiMTFmMTExOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCkBAIC00
NDgsNyArNDQ4LDcgQEAgUGFzc1JlZlB0cjxXZWJDb2xvclBpY2tlcj4gV2ViVmlldzo6Y3JlYXRl
Q29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ28KIH0KICNlbmRpZgogCi12b2lk
IFdlYlZpZXc6OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiwgYm9v
bCkKK3ZvaWQgV2ViVmlldzo6c2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3I+LCBib29sKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3
LmgKaW5kZXggNWM0MGI4MjA5ZTQxOWJmMjQwNGFhYjEwYjM4YmFkYTAyODNlZWEwYi4uOWY2YTM1
ZjIwNGJlZDdkZDJmMGMzNjViMzkwYTkwZWNiOTk2ZDc2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaApAQCAtMTg0
LDcgKzE4NCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JQ
aWNrZXI+IGNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKICNl
bmRpZgogCi0gICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0
SW5kaWNhdG9yPiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRp
Y2F0b3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yPiwgYm9vbCkgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKaW5kZXggYTg5YjNlMjU1MGFhNTA4MmIyYTVlMTg1MzVkNmNmN2M1MTQzMmEw
MC4uZjE2Y2FmYzEwMTUzYTk0YjhmZTU0MTI2YWRjMDMyOWMxYzBmNWE0YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC00NywxNCArNDcsMTQgQEAgT0JKQ19DTEFTUyBO
U1RleHRBbHRlcm5hdGl2ZXM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEN1cnNvcjsK
LXN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CitjbGFzcyBUZXh0SW5kaWNhdG9yOwogc3RydWN0
IEhpZ2hsaWdodDsKK3N0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CiB9CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwotY2xhc3MgVGV4dEluZGljYXRvcjsK
IGNsYXNzIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjsKIGNsYXNzIFZpZXdTbmFwc2hvdDsKQEAgLTIxNCw3ICsyMTQsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbG9yUGlja2VyPiBjcmVhdGVDb2xvclBpY2tl
cihXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgaW5pdGlhbENvbG9yLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFdlYkNvcmU6
OlRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBl
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjc4MGE0
MTI4ZDQyMGFiZmU2MDdhYjBmMGMyZjZmNDA5ZTUxYzNkNi4uMWYzOTliZmYwMmZmNTM2ZDU1YTQz
MWI0OTgwYjk2NDg1NDI2NmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJQcmludEluZm8uaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNpbmNs
dWRlICJUZXh0SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RQcm94eS5oIgogI2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKQEAgLTk3LDYgKzk2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckVtYmVkZGVkT2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkQ3J5cHRv
S2V5V3JhcC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RleHRJbmRpY2F0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0Zl
YXR1cmVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KQEAgLTM2NTgsNyArMzY1OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRJbWFn
ZUZvckZpbmRNYXRjaChjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVuCiAgICAg
bV9maW5kTWF0Y2hlc0NsaWVudC5kaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0KHRoaXMsIFdlYklt
YWdlOjpjcmVhdGUoU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlKSku
Z2V0KCksIG1hdGNoSW5kZXgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0VGV4dEluZGlj
YXRvcihjb25zdCBUZXh0SW5kaWNhdG9yOjpEYXRhJiBpbmRpY2F0b3JEYXRhLCBib29sIGZhZGVP
dXQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNh
dG9yRGF0YSYgaW5kaWNhdG9yRGF0YSwgYm9vbCBmYWRlT3V0KQogewogICAgIG1fcGFnZUNsaWVu
dC5zZXRUZXh0SW5kaWNhdG9yKFRleHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRpY2F0b3JEYXRhKSwg
ZmFkZU91dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXgg
NWY4Y2ZkOGVkMGRiOTA1NGI5NGRlNDhhZjY0MTE0ODM4MWIwMDkxMS4uMzZkNDZlZjhiYzkyNjlk
NGExNGRhZmZmYWMyMzVjY2NiMDRlMGFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaApAQCAtMTMwLDYgKzEzMCw3IEBAIGNsYXNzIE1lZGlhQ29uc3RyYWludHNJbXBs
OwogY2xhc3MgUHJvdGVjdGlvblNwYWNlOwogY2xhc3MgUnVuTG9vcE9ic2VydmVyOwogY2xhc3Mg
U2hhcmVkQnVmZmVyOworY2xhc3MgVGV4dEluZGljYXRvcjsKIHN0cnVjdCBGaWxlQ2hvb3NlclNl
dHRpbmdzOwogc3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTsKIHN0cnVjdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQ7CkBAIC0xNTUsNyArMTU2LDYgQEAgY2xhc3MgUGFnZUNsaWVudDsKIGNsYXNz
IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwogY2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eTsKIGNsYXNzIFN0cmluZ1BhaXJWZWN0b3I7Ci1jbGFzcyBUZXh0SW5kaWNhdG9y
OwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgVmlzaXRlZExpbmtQcm92aWRlcjsKIGNsYXNz
IFdlYkJhY2tGb3J3YXJkTGlzdDsKQEAgLTY2OCw3ICs2NjgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBoaWRlRmluZFVJKCk7CiAgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5n
JiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQgZGlkQ291
bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwotICAg
IHZvaWQgc2V0VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yOjpEYXRhJiwgYm9vbCBm
YWRlT3V0KTsKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6VGV4dElu
ZGljYXRvckRhdGEmLCBib29sIGZhZGVPdXQpOwogICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9y
KCk7CiAgICAgdm9pZCBkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNo
Q291bnQsIGludDMyX3QgbWF0Y2hJbmRleCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4KaW5kZXggNzRiOWFiN2I4ZTYxMWU3ZTg5ZGE3MjlhZDIwOTlkNGRh
MjRlNGE3Mi4uNjg0Yzc2YTYzZTM2NTJlMDE5NjMzMDM0YjRiYzFkYTc2OTc1MzhkYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0yMjcsNyArMjI3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgICMgRmlu
ZCBtZXNzYWdlcwogICAgIERpZENvdW50U3RyaW5nTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCB1aW50
MzJfdCBtYXRjaENvdW50KQotICAgIFNldFRleHRJbmRpY2F0b3IoV2ViS2l0OjpUZXh0SW5kaWNh
dG9yOjpEYXRhIGluZGljYXRvciwgYm9vbCBmYWRlT3V0KQorICAgIFNldFRleHRJbmRpY2F0b3Io
V2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEgaW5kaWNhdG9yLCBib29sIGZhZGVPdXQpCiAgICAg
Q2xlYXJUZXh0SW5kaWNhdG9yKCkKICAgICBEaWRGaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcsIHVp
bnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKICAgICBEaWRGYWlsVG9GaW5k
U3RyaW5nKFN0cmluZyBzdHJpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLmgKaW5kZXggNzljYmQyZjE5OTc2NDllMTRjOWI1NzMyZTE0Y2Zh
OTE4MTg3Nzk2OC4uZDg5YTIzNjE5Yjk5ODliZDM5M2U1YTVlNDNlMTQxZGIyZDAxYmIyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaApA
QCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3Jl
YXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZh
ZGVPdXQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXcuaAppbmRleCBlNTFlZmEyZTEyM2Q3OTA3Y2VhZWUzMjgxOWNl
ODEwNmMxOTllODY3Li42M2I0YTIwOTJiN2UzZjgxMWJmZjI3ZmFjYTQ1YzkxN2ZkMWM4NTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaApAQCAtNDEs
NyArNDEsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBj
bGFzcyBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk7CiBjbGFzcyBSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjsKLWNsYXNzIFRleHRJbmRpY2F0b3I7CiBjbGFzcyBXZWJDb250ZXh0
OwogY2xhc3MgV2ViRnJhbWVQcm94eTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCA3OTVmODRjNmIzNTEx
YmMxMzZhMzBjYTQ2YTJiY2VkZjhkMmYyZGM3Li5jMmRiOGZiOGM3NWY4Y2I2MjdiZGY4ZjJiMjM0
MDQwOWMyMmE2ODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIEFsdGVybmF0aXZlVGV4dFVJQ29udHJv
bGxlcjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93
OwogCiBjbGFzcyBQYWdlQ2xpZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBQYWdlQ2xpZW50CiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTIwLDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbG9yUGlja2VyPiBjcmVhdGVDb2xvclBpY2tlcihXZWJQ
YWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgaW5pdGlhbENvbG9yLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNz
UmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpOworICAgIHZvaWQgc2V0VGV4dElu
ZGljYXRvcihQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQp
OwogCiAgICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYpOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLm1tCmluZGV4IDgyZDNlMmQyODBhYmRmMzFjYTJmOTNjNzhiMTQ3MmJkYjczZTg1
MTUuLjVlZDdhM2Q0ZjhlNDNiMTJiNDVhZmU2MjVjYzAwMTY2YmFjZjI1ZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtMzcsNyArMzcs
NiBAQAogI2ltcG9ydCAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2ltcG9ydCAiTmF2aWdhdGlv
blN0YXRlLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbXBvcnQgIlRleHRJbmRp
Y2F0b3IuaCIKICNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCiAjaW1wb3J0ICJXS0FQSUNh
c3QuaCIKICNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKQEAgLTYxLDYg
KzYwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvTG9va3VwU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRVbmRv
SW5zZXJ0aW9uTWFya3VwTWFjLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4K
ICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM5MjdmMzNkZmI1M2FhMTFjODExNjNiNWFjZTE4NGFhMmIzZTBlNzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXh0SW5kaWNhdG9yV2luZG93X2gKLSNkZWZp
bmUgVGV4dEluZGljYXRvcldpbmRvd19oCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQg
PGZ1bmN0aW9uYWw+Ci0jaW1wb3J0IDx3dGYvTm9uY29weWFibGUuaD4KLSNpbXBvcnQgPHd0Zi9S
ZWZQdHIuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9SdW5Mb29w
Lmg+Ci0KLUBjbGFzcyBXS1RleHRJbmRpY2F0b3JWaWV3OwotQGNsYXNzIFdLVmlldzsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFRleHRJbmRpY2F0b3I7Ci0KLWNsYXNzIFRleHRJbmRp
Y2F0b3JXaW5kb3cgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRJbmRpY2F0b3JXaW5k
b3cpOwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dEluZGljYXRvcldpbmRvdyhXS1ZpZXcg
Kik7Ci0gICAgflRleHRJbmRpY2F0b3JXaW5kb3coKTsKLQotICAgIHZvaWQgc2V0VGV4dEluZGlj
YXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXIpOwotCi1wcml2YXRlOgotICAg
IHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgIHZvaWQgc3RhcnRGYWRlT3V0VGltZXJGaXJlZCgp
OwotCi0gICAgV0tWaWV3KiBtX3drVmlldzsKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gbV90
ZXh0SW5kaWNhdG9yOwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV90ZXh0SW5kaWNhdG9yV2lu
ZG93OwotICAgIFJldGFpblB0cjxXS1RleHRJbmRpY2F0b3JWaWV3PiBtX3RleHRJbmRpY2F0b3JW
aWV3OwotCi0gICAgUnVuTG9vcDo6VGltZXI8VGV4dEluZGljYXRvcldpbmRvdz4gbV9zdGFydEZh
ZGVPdXRUaW1lcjsKLQotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV9ib3VuY2VBbmltYXRp
b25Db21wbGV0aW9uSGFuZGxlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVGV4dEluZGljYXRvcldpbmRvd19oCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5k
b3cubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MzQ2YjNlYWIyZGY5YzQ2YzM5OTVl
OWM4MzA4NmMyYjEyYWVhMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRleHRJbmRpY2F0b3JXaW5kb3cuaCIKLQotI2lmIFBMQVRG
T1JNKE1BQykKLQotI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgotI2ltcG9ydCAiV0tWaWV3Lmgi
Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9R
dWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5
ZXJEZWxlZ2F0ZS5oPgotCi1jb25zdCBDRlRpbWVJbnRlcnZhbCBib3VuY2VBbmltYXRpb25EdXJh
dGlvbiA9IDAuMTI7Ci1jb25zdCBDRlRpbWVJbnRlcnZhbCBib3VuY2VXaXRoQ3Jvc3NmYWRlQW5p
bWF0aW9uRHVyYXRpb24gPSAwLjM7Ci1jb25zdCBDRlRpbWVJbnRlcnZhbCB0aW1lQmVmb3JlRmFk
ZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOwotY29uc3QgQ0ZUaW1lSW50
ZXJ2YWwgZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uID0gMC4zOwotCi0jaWYgRU5BQkxFKExFR0FD
WV9URVhUX0lORElDQVRPUl9TVFlMRSkKLWNvbnN0IENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAx
LjU7Ci1jb25zdCBDR0Zsb2F0IGhvcml6b250YWxCb3JkZXIgPSAzOwotY29uc3QgQ0dGbG9hdCB2
ZXJ0aWNhbEJvcmRlciA9IDE7Ci1jb25zdCBDR0Zsb2F0IGJvcmRlcldpZHRoID0gMS4wOwotY29u
c3QgQ0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAzOwotY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zm
c2V0WCA9IDA7Ci1jb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZID0gMTsKLWNvbnN0IENH
RmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAxLjU7Ci0jZWxzZQotY29uc3QgQ0dGbG9hdCBt
aWRCb3VuY2VTY2FsZSA9IDEuMjsKLWNvbnN0IENHRmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDI7
Ci1jb25zdCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IENHRmxvYXQgYm9yZGVy
V2lkdGggPSAwOwotY29uc3QgQ0dGbG9hdCBjb3JuZXJSYWRpdXMgPSAwOwotY29uc3QgQ0dGbG9h
dCBkcm9wU2hhZG93T2Zmc2V0WCA9IDA7Ci1jb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRZ
ID0gNTsKLWNvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAxMjsKLWNvbnN0IENH
RmxvYXQgcmltU2hhZG93Qmx1clJhZGl1cyA9IDI7Ci0jZW5kaWYKLQotTlNTdHJpbmcgKnRleHRM
YXllcktleSA9IEAiVGV4dExheWVyIjsKLU5TU3RyaW5nICpkcm9wU2hhZG93TGF5ZXJLZXkgPSBA
IkRyb3BTaGFkb3dMYXllciI7Ci1OU1N0cmluZyAqcmltU2hhZG93TGF5ZXJLZXkgPSBAIlJpbVNo
YWRvd0xheWVyIjsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUBpbnRlcmZhY2UgV0tU
ZXh0SW5kaWNhdG9yVmlldyA6IE5TVmlldyB7Ci0gICAgUmVmUHRyPFdlYktpdDo6VGV4dEluZGlj
YXRvcj4gX3RleHRJbmRpY2F0b3I7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9ib3VuY2VMYXll
cnM7Ci0gICAgTlNTaXplIF9tYXJnaW47Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZy
YW1lOihOU1JlY3QpZnJhbWUgdGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJ
bmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgbWFyZ2luOihOU1NpemUpbWFyZ2luOwotCi0tICh2b2lk
KXByZXNlbnRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXI7Ci0tICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXI7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLVGV4dEluZGlj
YXRvclZpZXcKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0
ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktpdDo6VGV4dEluZGljYXRvcj4pdGV4dEluZGlj
YXRvciBtYXJnaW46KE5TU2l6ZSltYXJnaW4KLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoRnJhbWU6ZnJhbWVdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF90ZXh0SW5k
aWNhdG9yID0gdGV4dEluZGljYXRvcjsKLSAgICBfbWFyZ2luID0gbWFyZ2luOwotCi0gICAgc2Vs
Zi53YW50c0xheWVyID0gWUVTOwotICAgIHNlbGYubGF5ZXIuYW5jaG9yUG9pbnQgPSBDR1BvaW50
WmVybzsKLQotICAgIGJvb2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGljYXRvci0+cHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbigpID09IFdlYktpdDo6VGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlOwotCi0gICAgRmxvYXRTaXplIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+c2l6ZSgp
OwotICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3It
PmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBj
b250ZW50c0ltYWdlOwotICAgIGlmICh3YW50c0Nyb3NzZmFkZSkKLSAgICAgICAgY29udGVudHNJ
bWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPm1ha2VD
R0ltYWdlKCk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0
b3ItPmNvbnRlbnRJbWFnZSgpLT5tYWtlQ0dJbWFnZSgpOwotCi0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBoaWdobGlnaHRDb2xvciA9IFtO
U0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDoxIGdyZWVuOjEgYmx1ZTowIGFscGhhOjFdLkNHQ29s
b3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IHJpbVNoYWRvd0NvbG9yID0gW05TQ29sb3Ig
Y29sb3JXaXRoRGV2aWNlV2hpdGU6MCBhbHBoYTowLjE1XS5DR0NvbG9yOwotICAgIFJldGFpblB0
cjxDR0NvbG9yUmVmPiBkcm9wU2hhZG93Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VX
aGl0ZTowIGFscGhhOjAuMl0uQ0dDb2xvcjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBi
b3JkZXJDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDouOTYgZ3JlZW46LjkwIGJs
dWU6MCBhbHBoYToxXS5DR0NvbG9yOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBncmFkaWVu
dERhcmtDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDouOTI5IGdyZWVuOi44IGJs
dWU6MCBhbHBoYToxXS5DR0NvbG9yOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBncmFkaWVu
dExpZ2h0Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6Ljk0OSBncmVlbjouOTM3
IGJsdWU6MCBhbHBoYToxXS5DR0NvbG9yOwotCi0gICAgZm9yIChhdXRvJiB0ZXh0UmVjdCA6IF90
ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCkpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IGJvdW5jZUxheWVyUmVjdCA9IHRleHRSZWN0OwotICAgICAgICBib3Vu
Y2VMYXllclJlY3QubW92ZShfbWFyZ2luLndpZHRoLCBfbWFyZ2luLmhlaWdodCk7Ci0gICAgICAg
IGJvdW5jZUxheWVyUmVjdC5pbmZsYXRlWChob3Jpem9udGFsQm9yZGVyKTsKLSAgICAgICAgYm91
bmNlTGF5ZXJSZWN0LmluZmxhdGVZKHZlcnRpY2FsQm9yZGVyKTsKLQotICAgICAgICBSZXRhaW5Q
dHI8Q0FMYXllcj4gYm91bmNlTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0p
OwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NB
TGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNldEZyYW1lOmJv
dW5jZUxheWVyUmVjdF07Ci0gICAgICAgIFtib3VuY2VMYXllciBzZXRPcGFjaXR5OjBdOwotICAg
ICAgICBbYm91bmNlTGF5ZXJzIGFkZE9iamVjdDpib3VuY2VMYXllci5nZXQoKV07Ci0KLSAgICAg
ICAgRmxvYXRSZWN0IHllbGxvd0hpZ2hsaWdodFJlY3QoRmxvYXRQb2ludCgpLCBib3VuY2VMYXll
clJlY3Quc2l6ZSgpKTsKLSAgICAgICAgLy8gRklYTUUgKDEzODg4OCk6IElkZWFsbHkgd2Ugd291
bGRuJ3QgcmVtb3ZlIHRoZSBtYXJnaW4gaW4gdGhpcyBjYXNlLCBidXQgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgeWVsbG93IGhpZ2hsaWdodCBhbmQgY29udGVudEltYWdl
V2l0aEhpZ2hsaWdodCBvdmVybGFwIHByZWNpc2VseS4KLSAgICAgICAgaWYgKHdhbnRzQ3Jvc3Nm
YWRlKSB7Ci0gICAgICAgICAgICB5ZWxsb3dIaWdobGlnaHRSZWN0LmluZmxhdGVYKC1ob3Jpem9u
dGFsQm9yZGVyKTsKLSAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdodFJlY3QuaW5mbGF0ZVkoLXZl
cnRpY2FsQm9yZGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBk
cm9wU2hhZG93TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAg
ICBbZHJvcFNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVy
RGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93Q29s
b3I6ZHJvcFNoYWRvd0NvbG9yLmdldCgpXTsKLSAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRT
aGFkb3dSYWRpdXM6ZHJvcFNoYWRvd0JsdXJSYWRpdXNdOwotICAgICAgICBbZHJvcFNoYWRvd0xh
eWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVNYWtlKGRyb3BTaGFkb3dPZmZzZXRYLCBkcm9wU2hh
ZG93T2Zmc2V0WSldOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd1BhdGhJc0Jv
dW5kczpZRVNdOwotICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07
Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07
Ci0gICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1c107
Ci0gICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpkcm9wU2hhZG93TGF5ZXIuZ2V0KCld
OwotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6ZHJvcFNoYWRvd0xheWVyLmdldCgpIGZv
cktleTpkcm9wU2hhZG93TGF5ZXJLZXldOwotCi0jaWYgIUVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJ
Q0FUT1JfU1RZTEUpCi0gICAgICAgIFJldGFpblB0cjxDQUxheWVyPiByaW1TaGFkb3dMYXllciA9
IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtyaW1TaGFkb3dMYXll
ciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1d
OwotICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07
Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dDb2xvcjpyaW1TaGFkb3dDb2xvci5n
ZXQoKV07Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dSYWRpdXM6cmltU2hhZG93
Qmx1clJhZGl1c107Ci0gICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dQYXRoSXNCb3Vu
ZHM6WUVTXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVa
ZXJvXTsKLSAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07Ci0gICAg
ICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKLSAgICAg
ICAgW3JpbVNoYWRvd0xheWVyIHNldENvcm5lclJhZGl1czpjb3JuZXJSYWRpdXNdOwotICAgICAg
ICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6cmltU2hhZG93TGF5ZXIuZ2V0KCldOwotICAgICAg
ICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6cmltU2hhZG93TGF5ZXIuZ2V0KCkgZm9yS2V5OnJpbVNo
YWRvd0xheWVyS2V5XTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRP
Ul9TVFlMRSkKLSAgICAgICAgUmV0YWluUHRyPENBR3JhZGllbnRMYXllcj4gdGV4dExheWVyID0g
YWRvcHROUyhbW0NBR3JhZGllbnRMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBbdGV4dExh
eWVyIHNldENvbG9yczpAWyAoaWQpZ3JhZGllbnRMaWdodENvbG9yLmdldCgpLCAoaWQpZ3JhZGll
bnREYXJrQ29sb3IuZ2V0KCkgXV07Ci0jZWxzZQotICAgICAgICBSZXRhaW5QdHI8Q0FMYXllcj4g
dGV4dExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSNlbmRpZgotICAg
ICAgICBbdGV4dExheWVyIHNldEJhY2tncm91bmRDb2xvcjpoaWdobGlnaHRDb2xvci5nZXQoKV07
Ci0gICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOwot
ICAgICAgICBbdGV4dExheWVyIHNldEJvcmRlcldpZHRoOmJvcmRlcldpZHRoXTsKLSAgICAgICAg
W3RleHRMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRl
IHNoYXJlZF1dOwotICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzOihpZCljb250ZW50c0lt
YWdlLmdldCgpXTsKLQotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gdGV4dFJlY3Q7Ci0g
ICAgICAgIGltYWdlUmVjdC5tb3ZlKF90ZXh0SW5kaWNhdG9yLT50ZXh0Qm91bmRpbmdSZWN0SW5X
aW5kb3dDb29yZGluYXRlcygpLmxvY2F0aW9uKCkgLSBfdGV4dEluZGljYXRvci0+c2VsZWN0aW9u
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKS5sb2NhdGlvbigpKTsKLSAgICAgICAgW3RleHRMYXll
ciBzZXRDb250ZW50c1JlY3Q6Q0dSZWN0TWFrZShpbWFnZVJlY3QueCgpIC8gY29udGVudHNJbWFn
ZUxvZ2ljYWxTaXplLndpZHRoKCksIGltYWdlUmVjdC55KCkgLyBjb250ZW50c0ltYWdlTG9naWNh
bFNpemUuaGVpZ2h0KCksIGltYWdlUmVjdC53aWR0aCgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxT
aXplLndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6
ZS5oZWlnaHQoKSldOwotICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzR3Jhdml0eTprQ0FH
cmF2aXR5Q2VudGVyXTsKLSAgICAgICAgW3RleHRMYXllciBzZXRDb250ZW50c1NjYWxlOl90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpXTsKLSAgICAgICAgW3RleHRMYXll
ciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsKLSAgICAgICAgW3RleHRMYXllciBzZXRD
b3JuZXJSYWRpdXM6Y29ybmVyUmFkaXVzXTsKLSAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVl
OnRleHRMYXllci5nZXQoKSBmb3JLZXk6dGV4dExheWVyS2V5XTsKLSAgICAgICAgW2JvdW5jZUxh
eWVyIGFkZFN1YmxheWVyOnRleHRMYXllci5nZXQoKV07Ci0gICAgfQotCi0gICAgc2VsZi5sYXll
ci5zdWJsYXllcnMgPSBib3VuY2VMYXllcnMuZ2V0KCk7Ci0gICAgX2JvdW5jZUxheWVycyA9IGJv
dW5jZUxheWVyczsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXByZXNlbnRXaXRo
Q29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAg
ICBib29sIHdhbnRzQ3Jvc3NmYWRlID0gX3RleHRJbmRpY2F0b3ItPnByZXNlbnRhdGlvblRyYW5z
aXRpb24oKSA9PSBXZWJLaXQ6OlRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246
OkJvdW5jZUFuZENyb3NzZmFkZTsKLSAgICBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb24gPSB3YW50
c0Nyb3NzZmFkZSA/IGJvdW5jZVdpdGhDcm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbiA6IGJvdW5j
ZUFuaW1hdGlvbkR1cmF0aW9uOwotICAgIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBi
b3VuY2VBbmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0
aDpAInRyYW5zZm9ybSJdOwotICAgIFtib3VuY2VBbmltYXRpb24gc2V0VmFsdWVzOkBbCi0gICAg
ICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50aXR5
XSwKLSAgICAgICAgW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNE
TWFrZVNjYWxlKG1pZEJvdW5jZVNjYWxlLCBtaWRCb3VuY2VTY2FsZSwgMSldLAotICAgICAgICBb
TlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RJZGVudGl0eV0KLSAg
ICAgICAgXV07Ci0gICAgW2JvdW5jZUFuaW1hdGlvbiBzZXREdXJhdGlvbjphbmltYXRpb25EdXJh
dGlvbl07Ci0KLSAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0
aW9uOwotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlU2hhZG93SW5BbmltYXRp
b247Ci0gICAgaWYgKHdhbnRzQ3Jvc3NmYWRlKSB7Ci0gICAgICAgIGNyb3NzZmFkZUFuaW1hdGlv
biA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsK
LSAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGlj
YXRvci0+Y29udGVudEltYWdlKCktPm1ha2VDR0ltYWdlKCk7Ci0gICAgICAgIFtjcm9zc2ZhZGVB
bmltYXRpb24gc2V0VG9WYWx1ZTooaWQpY29udGVudHNJbWFnZS5nZXQoKV07Ci0gICAgICAgIFtj
cm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAg
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAg
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOwot
Ci0gICAgICAgIGZhZGVTaGFkb3dJbkFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1h
dGlvbldpdGhLZXlQYXRoOkAic2hhZG93T3BhY2l0eSJdOwotICAgICAgICBbZmFkZVNoYWRvd0lu
QW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMF07Ci0gICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRp
b24gc2V0VG9WYWx1ZTpAMV07Ci0gICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRpb24gc2V0Rmls
bE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAgICAgIFtmYWRlU2hhZG93SW5BbmltYXRp
b24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAgICAgIFtmYWRlU2hhZG93SW5Bbmlt
YXRpb24gc2V0RHVyYXRpb246YW5pbWF0aW9uRHVyYXRpb25dOwotICAgIH0KLQotICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6
Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGZvciAoQ0FMYXllciogYm91bmNlTGF5ZXIgaW4gX2Jv
dW5jZUxheWVycy5nZXQoKSkgewotICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eToxXTsK
LSAgICAgICAgW2JvdW5jZUxheWVyIGFkZEFuaW1hdGlvbjpib3VuY2VBbmltYXRpb24uZ2V0KCkg
Zm9yS2V5OkAiYm91bmNlIl07Ci0gICAgICAgIGlmICh3YW50c0Nyb3NzZmFkZSkgewotICAgICAg
ICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTp0ZXh0TGF5ZXJLZXldIGFkZEFuaW1hdGlv
bjpjcm9zc2ZhZGVBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiY29udGVudFRyYW5zaXRpb24iXTsK
LSAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6ZHJvcFNoYWRvd0xheWVyS2V5
XSBhZGRBbmltYXRpb246ZmFkZVNoYWRvd0luQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImZhZGVT
aGFkb3dJbiJdOwotICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1ZUZvcktleTpyaW1TaGFk
b3dMYXllcktleV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JL
ZXk6QCJmYWRlU2hhZG93SW4iXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBbQ0FUcmFuc2FjdGlv
biBjb21taXRdOwotfQotCi0tICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1h
dGlvbj4gZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQ
YXRoOkAib3BhY2l0eSJdOwotICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAMV07Ci0g
ICAgW2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTpAMF07Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0
RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0UmVt
b3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246ZmFk
ZU91dEFuaW1hdGlvbkR1cmF0aW9uXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkhhbmRsZXJdOwot
ICAgIFtzZWxmLmxheWVyIGFkZEFuaW1hdGlvbjpmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktleTpA
ImZhZGVPdXQiXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotfQotCi0tIChCT09MKWlz
RmxpcHBlZAotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLVRleHRJbmRpY2F0b3JXaW5kb3c6OlRleHRJbmRpY2F0b3JXaW5kb3coV0tWaWV3ICp3
a1ZpZXcpCi0gICAgOiBtX3drVmlldyh3a1ZpZXcpCi0gICAgLCBtX3N0YXJ0RmFkZU91dFRpbWVy
KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91
dFRpbWVyRmlyZWQpCi17Ci19Ci0KLVRleHRJbmRpY2F0b3JXaW5kb3c6On5UZXh0SW5kaWNhdG9y
V2luZG93KCkKLXsKLSAgICBjbG9zZVdpbmRvdygpOwotfQotCi12b2lkIFRleHRJbmRpY2F0b3JX
aW5kb3c6OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5k
aWNhdG9yLCBib29sIGZhZGVPdXQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gYW5pbWF0aW9uQ29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fdGV4dEluZGljYXRvciA9PSB0ZXh0SW5kaWNh
dG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNh
dG9yOwotCi0gICAgLy8gR2V0IHJpZCBvZiB0aGUgb2xkIHdpbmRvdy4KLSAgICBjbG9zZVdpbmRv
dygpOwotCi0gICAgaWYgKCFtX3RleHRJbmRpY2F0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAg
IE5TUmVjdCBjb250ZW50UmVjdCA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMoKTsKLQotICAgIENHRmxvYXQgaG9yaXpvbnRhbE1hcmdpbiA9IHN0
ZDo6bWF4KGRyb3BTaGFkb3dCbHVyUmFkaXVzICogMiArIGhvcml6b250YWxCb3JkZXIsIGNvbnRl
bnRSZWN0LnNpemUud2lkdGggKiAyKTsKLSAgICBDR0Zsb2F0IHZlcnRpY2FsTWFyZ2luID0gc3Rk
OjptYXgoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKiAyICsgdmVydGljYWxCb3JkZXIsIGNvbnRlbnRS
ZWN0LnNpemUuaGVpZ2h0ICogMik7Ci0KLSAgICBjb250ZW50UmVjdCA9IE5TSW5zZXRSZWN0KGNv
bnRlbnRSZWN0LCAtaG9yaXpvbnRhbE1hcmdpbiwgLXZlcnRpY2FsTWFyZ2luKTsKLSAgICBOU1Jl
Y3Qgd2luZG93RnJhbWVSZWN0ID0gTlNJbnRlZ3JhbFJlY3QoW21fd2tWaWV3IGNvbnZlcnRSZWN0
OmNvbnRlbnRSZWN0IHRvVmlldzpuaWxdKTsKLSAgICB3aW5kb3dGcmFtZVJlY3QgPSBbW21fd2tW
aWV3IHdpbmRvd10gY29udmVydFJlY3RUb1NjcmVlbjp3aW5kb3dGcmFtZVJlY3RdOwotICAgIE5T
UmVjdCB3aW5kb3dDb250ZW50UmVjdCA9IFtOU1dpbmRvdyBjb250ZW50UmVjdEZvckZyYW1lUmVj
dDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2tdOwotCi0g
ICAgbV90ZXh0SW5kaWNhdG9yV2luZG93ID0gYWRvcHROUyhbW05TV2luZG93IGFsbG9jXSBpbml0
V2l0aENvbnRlbnRSZWN0OndpbmRvd0NvbnRlbnRSZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NX
aW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT10pOwotCi0g
ICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgY2xl
YXJDb2xvcl1dOwotICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0T3BhcXVlOk5PXTsKLSAg
ICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldElnbm9yZXNNb3VzZUV2ZW50czpZRVNdOwotCi0g
ICAgbV90ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMoW1tXS1RleHRJbmRpY2F0b3JWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgW21fdGV4dEluZGljYXRvcldpbmRv
dyBmcmFtZV0uc2l6ZS53aWR0aCwgW21fdGV4dEluZGljYXRvcldpbmRvdyBmcmFtZV0uc2l6ZS5o
ZWlnaHQpIHRleHRJbmRpY2F0b3I6bV90ZXh0SW5kaWNhdG9yIG1hcmdpbjpOU01ha2VTaXplKGhv
cml6b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luKV0pOwotICAgIFttX3RleHRJbmRpY2F0b3JX
aW5kb3cgc2V0Q29udGVudFZpZXc6bV90ZXh0SW5kaWNhdG9yVmlldy5nZXQoKV07Ci0KLSAgICBb
W21fd2tWaWV3IHdpbmRvd10gYWRkQ2hpbGRXaW5kb3c6bV90ZXh0SW5kaWNhdG9yV2luZG93Lmdl
dCgpIG9yZGVyZWQ6TlNXaW5kb3dBYm92ZV07Ci0gICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBz
ZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwotCi0gICAgaWYgKG1fdGV4dEluZGljYXRvci0+cHJl
c2VudGF0aW9uVHJhbnNpdGlvbigpICE9IFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5z
aXRpb246Ok5vbmUpIHsKLSAgICAgICAgW21fdGV4dEluZGljYXRvclZpZXcgcHJlc2VudFdpdGhD
b21wbGV0aW9uSGFuZGxlcjpbYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXJdIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH1dOwotICAgIH0KLQot
ICAgIGlmIChmYWRlT3V0KQotICAgICAgICBtX3N0YXJ0RmFkZU91dFRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lQmVmb3JlRmFkZVN0YXJ0cyk7Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6
Y2xvc2VXaW5kb3coKQotewotICAgIGlmICghbV90ZXh0SW5kaWNhdG9yV2luZG93KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3N0YXJ0RmFkZU91dFRpbWVyLnN0b3AoKTsKLQotICAgIFtbbV90
ZXh0SW5kaWNhdG9yV2luZG93IHBhcmVudFdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6bV90ZXh0
SW5kaWNhdG9yV2luZG93LmdldCgpXTsKLSAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IGNsb3Nl
XTsKLSAgICBtX3RleHRJbmRpY2F0b3JXaW5kb3cgPSBudWxscHRyOwotfQotCi12b2lkIFRleHRJ
bmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKQotewotICAgIFJldGFpblB0
cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0gbV90ZXh0SW5kaWNhdG9yV2luZG93OwotICAg
IFttX3RleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6W2luZGljYXRv
cldpbmRvd10gewotICAgICAgICBbW2luZGljYXRvcldpbmRvdyBwYXJlbnRXaW5kb3ddIHJlbW92
ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5nZXQoKV07Ci0gICAgICAgIFtpbmRpY2F0b3JX
aW5kb3cgY2xvc2VdOwotICAgIH1dOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQppbmRleCAwNjdhYjBhZWNiM2YwZmQzZjM5
ZjMzNzBhNmNkYjM0YmQ1NDk0NmMxLi42NDQwZDdmYmVlZWEzYTJjNGVlZDA0NGE0OTZhNjMwYzA5
YjY3NDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9u
TWVudUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Fj
dGlvbk1lbnVDb250cm9sbGVyLm1tCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAKLSNpbXBv
cnQgIlRleHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIldLTlNVUkxFeHRyYXMuaCIKICNpbXBvcnQg
IldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXcuaCIKQEAgLTUwLDYgKzQ5LDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvTlNTaGFyaW5nU2VydmljZVBpY2tlclNQSS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9OU1ZpZXdTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9VUkwu
aD4KIAogU09GVF9MSU5LX0ZSQU1FV09SS19JTl9VTUJSRUxMQShRdWFydHosIEltYWdlS2l0KQpA
QCAtNjUwLDcgKzY1MCw3IEBAIC0gKE5TQXJyYXkgKilfZGVmYXVsdE1lbnVJdGVtc0ZvckRhdGFE
ZXRlY3RlZFRleHQKIAogICAgIE5TQXJyYXkgKm1lbnVJdGVtcyA9IFtbZ2V0RERBY3Rpb25zTWFu
YWdlckNsYXNzKCkgc2hhcmVkTWFuYWdlcl0gbWVudUl0ZW1zRm9yUmVzdWx0OltfY3VycmVudEFj
dGlvbkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDpfY3VycmVudEFjdGlvbkNvbnRl
eHQuZ2V0KCldOwogICAgIGlmIChtZW51SXRlbXMuY291bnQgPT0gMSAmJiBfaGl0VGVzdFJlc3Vs
dC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yKQotICAgICAgICBfaGl0VGVzdFJlc3VsdC5kZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yLT5zZXRQcmVzZW50YXRpb25UcmFuc2l0aW9uKFRleHRJbmRp
Y2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7CisgICAgICAgIF9oaXRUZXN0
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3ItPnNldFByZXNlbnRhdGlvblRyYW5zaXRp
b24oVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7CiAgICAgcmV0
dXJuIG1lbnVJdGVtczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ3MTk5ZDdlNjQxYjhmMzdmNzAzMDk5MmU4NWI3M2Y5
ZDg4YjQ4ZmMuLjY3MTNlMmUyYTYyNDZmYzJkZTBjNGUwNmIyZGIxYmFmNjViZDQyMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTExMCw4ICsxMTAsNiBAQAogCQkwRkNCNEU1MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2Nh
dGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNDExOEJCRTA0NDAwMEZDRkM5IC8qIFdL
R2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbSAqLzsgfTsKIAkJMEZD
QjRFNTQxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNDQxOEJCRTA0NDAwMEZDRkM5IC8q
IFdLU2Nyb2xsVmlldy5oICovOyB9OwogCQkwRkNCNEU1NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tT
Y3JvbGxWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDQjRFNDUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSAqLzsgfTsKLQkJ
MEZDQjRFNjAxOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRpY2F0b3JXaW5kb3cuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTU2MThCQkUzRDkw
MDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93LmggKi87IH07Ci0JCTBGQ0I0RTYxMThCQkUz
RDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNTcxOEJCRTNEOTAwMEZDRkM5IC8qIFRl
eHRJbmRpY2F0b3JXaW5kb3cubW0gKi87IH07CiAJCTBGQ0I0RTYyMThCQkUzRDkwMDBGQ0ZDOSAv
KiBQYWdlQ2xpZW50SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLmggKi87
IH07CiAJCTBGQ0I0RTYzMThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTU5MThCQkUz
RDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLzsgfTsKIAkJMEZDQjRFNjYxOEJCRTNE
OTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGlu
Z1ZpZXcuaCAqLzsgfTsKQEAgLTMwOCw4ICszMDYsNiBAQAogCQkxQTkwQzFFRTEyNjRGRDUwMDAz
RTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9u
cy5oICovOyB9OwogCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYy
MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovOyB9OwogCQkxQTkwQzFGNTEy
NjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZp
bmRDb250cm9sbGVyLmNwcCAqLzsgfTsKLQkJMUE5MTAwNzExMjY2NzVDNDAwMTg0MkY1IC8qIFRl
eHRJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBOTEwMDZGMTI2Njc1QzMwMDE4NDJGNSAvKiBUZXh0SW5kaWNhdG9yLmggKi87IH07Ci0J
CTFBOTEwMDcyMTI2Njc1QzQwMDE4NDJGNSAvKiBUZXh0SW5kaWNhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTEwMDcwMTI2Njc1QzQwMDE4
NDJGNSAvKiBUZXh0SW5kaWNhdG9yLmNwcCAqLzsgfTsKIAkJMUE5MkRDMTExMkY4QkE0NjAwMTdB
RjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250
ZXh0LmggKi87IH07CiAJCTFBOTJEQzEzMTJGOEJBQjkwMDE3QUY2NSAvKiBMYXllclRyZWVDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
OTJEQzEyMTJGOEJBQjkwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmNwcCAqLzsgfTsKIAkJ
MUE5RTMyODkxODIxNjM2OTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlFMzI4NzE4MjE2
MzY5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjA3MSw4ICsyMDY3LDYgQEAKIAkJ
MEZDQjRFNDExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNT
ZWN1cml0eU9yaWdpbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbTsgcGF0aCA9IGlv
cy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTQ0MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9s
bFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tTY3JvbGxWaWV3Lmg7
IHBhdGggPSBpb3MvV0tTY3JvbGxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQ0I0RTQ1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1Njcm9sbFZpZXcubW07IHBhdGggPSBpb3Mv
V0tTY3JvbGxWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNCNEU1NjE4
QkJFM0Q5MDAwRkNGQzkgLyogVGV4dEluZGljYXRvcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZXh0SW5kaWNhdG9yV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGQ0I0RTU3MThCQkUzRDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2lu
ZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dEluZGlj
YXRvcldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNTgxOEJC
RTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmlu
dGluZ1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmludGluZ1Zp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTQsOCArMjI4OCw2IEBACiAJ
CTFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaW5kT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZENvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZp
bmRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZp
bmRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MTAwNkYx
MjY2NzVDMzAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogVGV4dEluZGljYXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0SW5kaWNhdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJl
ZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJUcmVlQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkyREMxMjEyRjhCQUI5MDAx
N0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXllclRyZWVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUE5RTMyODcxODIxNjM2OTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1JlbW90ZU9iamVjdFJlZ2lz
dHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDkzLDggKzQ0ODUsNiBAQAog
CQkJCTUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi8sCiAJ
CQkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi8sCiAJCQkJ
MUE1RTREQTMxMkQzQkQzRDAwOTlBMkJCIC8qIFRleHRDaGVja2VyU3RhdGUuaCAqLywKLQkJCQkx
QTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogVGV4dEluZGljYXRvci5jcHAgKi8sCi0JCQkJMUE5
MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKIAkJCQkxQTY0MjQ1
RDEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5jcHAgKi8sCiAJCQkJMUE2NDI0NUMxMkRF
MjlBMTAwQ0FBRTJDIC8qIFVwZGF0ZUluZm8uaCAqLywKIAkJCQkxQUMxMzM2NTE4NTY1QjU3MDBG
M0VDMDUgLyogVXNlckRhdGEuY3BwICovLApAQCAtNjY0MSw4ICs2NjMxLDYgQEAKIAkJCWNoaWxk
cmVuID0gKAogCQkJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwu
aCAqLywKIAkJCQlCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1t
ICovLAotCQkJCTBGQ0I0RTU2MThCQkUzRDkwMDBGQ0ZDOSAvKiBUZXh0SW5kaWNhdG9yV2luZG93
LmggKi8sCi0JCQkJMEZDQjRFNTcxOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRpY2F0b3JXaW5k
b3cubW0gKi8sCiAJCQkJMUFGREU2NUIxOTU0RThENTAwQzQ4RkZBIC8qIExlZ2FjeVNlc3Npb25T
dGF0ZUNvZGluZy5jcHAgKi8sCiAJCQkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VD
bGllbnRJbXBsLmggKi8sCiAJCQkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGll
bnRJbXBsLm1tICovLApAQCAtNzIzNyw3ICs3MjI1LDYgQEAKIAkJCQk0QTNDQzE4RjE5QjA3QjhB
MDBEMTRBRUYgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFBNTc1RkIxNDk2QjUyNjAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUgLyogVGV4dElu
ZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1RTc3MjgxODNERDZGNjAwMDcyMDNGIC8q
IEFzeW5jUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQx
OTEwIC8qIEZvbnRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUJDM0RGQzE4OTlGNTFDMDA0
RjA2MjYgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNzI4NSw3
ICs3MjcyLDYgQEAKIAkJCQk1MTY1NEVGRTE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0
MDhFODYwMDM2MEYzRiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMTE1REM3MjE5MUQ4MkRBMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0
dGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkNCNEU2MDE4QkJFM0Q5MDAwRkNGQzkgLyogVGV4
dEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNERGNzcxMjBCNUI3OTAw
ODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29k
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OUE0OTExRkZBOENFMDA0OEI0NjQgLyogSlNO
UE1ldGhvZC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTAwLDcgKzg4ODYsNiBAQAogCQkJCTFBQTU3
NjAyMTQ5NkI5NzkwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRTA5MzMxODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dy
ZXNzVHJhY2tlckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTkwQzFGNTEyNjRGRDcx
MDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE5MTAw
NzIxMjY2NzVDNDAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNFODFEOEMxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTM3OEUxQTQ5MTgyMDhDRDYwMDMxMDA3QSAvKiBXS05TU3RyaW5nLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFBRjA4QjcxOTI2OUU2RDAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk0MDYsNyArOTM5
MSw2IEBACiAJCQkJQkNCQUFDNzIxNDRFNjE5OTAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQkFBQ0Y1MTQ1MjMyNEYwMDUzRjgy
RiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyOTA5
OTIxODNBQ0VBRjAwNTUyMkE2IC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEZDQjRFNjExOEJCRTNEOTAwMEZDRkM5IC8qIFRleHRJbmRpY2F0b3JXaW5k
b3cubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzIwNEVFRTExQzgzRUM4MDA4RjMzNzUgLyogV0tC
dW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M2RTcwRkIxOEIyREM3QTAwRjI0RTJFIC8q
IFdlYlByb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNUVFQjlFMTI3NzYxQUMw
MDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkNvbnRleHRNZW51Q2xpZW50TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0KaW5kZXggMGIwZGMzYTRj
YzBjNTk3NzRiYjk2ZDAxZjgxZGVkZmE2NTE4NDI0OC4uNGVkNWUyNWU2NzJmZGMzNjM3NjBkYzgz
NjQwYWIxMTcxNGIzN2ZmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4dE1lbnVDbGll
bnRNYWMubW0KQEAgLTI5LDEzICsyOSwxMyBAQAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQog
CiAjaW1wb3J0ICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCi0jaW1wb3J0ICJUZXh0SW5kaWNhdG9y
LmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIldlYlBhZ2Uu
aCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw3
ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50
Ojpsb29rVXBJbkRpY3Rpb25hcnkoRnJhbWUqIGZyYW1lKQogewotICAgIG1fcGFnZS0+cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNl
QW5kQ3Jvc3NmYWRlKTsKKyAgICBtX3BhZ2UtPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKGZyYW1lLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwogfQogCiBib29s
IFdlYkNvbnRleHRNZW51Q2xpZW50Ojppc1NwZWFraW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDFlNjQyYzI0
OTk1ZjM3Y2QyYWRkM2NjOWNmMWQyYjBmMDhhMGFkMWYuLmE4NmIwOTYxMWE4ZmFmOTFmMTRmNzM3
NmNmMDJmNDBmNGFhMjViYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUg
IkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJXS1Bh
Z2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQ
YWdlLmgiCkBAIC00NCw2ICs0Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJ
bmRpY2F0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTMxNCw3ICszMTQs
NyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRlRmluZFVJKCkKICNpZiAhUExBVEZPUk0oSU9T
KQogYm9vbCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0
ZWRGcmFtZSwgYm9vbCBpc1Nob3dpbmdPdmVybGF5LCBib29sIHNob3VsZEFuaW1hdGUpCiB7Ci0g
ICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKCpXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZShzZWxlY3RlZEZy
YW1lKSwgc2hvdWxkQW5pbWF0ZSA/IFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRp
b246OkJvdW5jZSA6IFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUp
OworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShzZWxlY3RlZEZyYW1lLCBzaG91bGRBbmltYXRlID8g
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSA6IFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lKTsKICAgICBpZiAoIWluZGljYXRvcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCA0ZmFiYzBlMjgwNzJiOGE0MzAwNTZiNDk2MmU3NmFkYTQxNzY5YWYw
Li45NTc2ZWZjZDBkYjg0ZGNkZjZkMmU0OTEwZWM3NmYzN2JhN2U2ZTU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQ0LDcgKzQ0LDYgQEAKICNp
bmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVk
ZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGV4dEluZGljYXRvci5oIgogI2luY2x1
ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvRGljdGF0aW9uQWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+
CkBAIC01OCw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlVmlzaWJpbGl0eVN0YXRl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dENoZWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SW5kaWNhdG9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Vc2VyQWN0aXZpdHkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdTdGF0
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRDb25maWd1cmF0aW9uLmg+CkBAIC02NzMs
NyArNjczLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3BlYWsoY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBzdG9wU3BlYWtpbmcoKTsKIAotICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uJiwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgdm9pZCBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSosIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbik7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNTbWFydEluc2VydERlbGV0
ZUVuYWJsZWQoKTsKQEAgLTk5MSw3ICs5OTEsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKTsKICAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZD
dXJyZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6UmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMsIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb24pOworICAgIHZvaWQgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OlJh
bmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbik7CiAKICAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVz
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHdpbmRvd0ZyYW1lSW5VbmZsaXBwZWRTY3JlZW5D
b29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nv
b3JkaW5hdGVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGUwNWZjOGI0MDc4YjIwNDc0MGM1NDJjOWZkNmE4YjBj
MmI1NDM1MDguLmNkYjI1NmNhODcyNWIxNmExN2E2MDYxY2NkMGU4NDU0MDlmYTk1ODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTI5NiwxMiArMjk2LDEyIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
RnJhbWUqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JT
ZWxlY3Rpb24oRnJhbWUqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lKiwgUmFuZ2Um
LCBOU0RpY3Rpb25hcnkgKiwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbikK
K3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSosIFJh
bmdlJiwgTlNEaWN0aW9uYXJ5ICosIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggOTJmOWIxZTUwZTAwNmQw
ZjBkMDMwNDk3MWVmMjM4YTk5ZmJmM2EyMy4uN2ExMmMyY2M1N2MwOWI1MDYyMzhlNjhhMmEzMmMx
ZTgzMTU0ODVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNDk0LDEwICs0OTQsMTAgQEAgdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQ
b2ludCkKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMsIFRleHRJbmRpY2F0
b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7CisgICAgcGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlv
biBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0
aW9uVHJhbnNpdGlvbikKIHsKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwRm9y
U2VsZWN0aW9uKHNlbGVjdGlvbiwgJm9wdGlvbnMpOwpAQCAtNTA4LDEwICs1MDgsMTAgQEAgdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSogZnJh
bWUsIGNvbnN0IFZpc2libGVTZWwKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBPZkN1cnJlbnRTZWxlY3Rpb24oKQogewogICAgIEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3Nz
ZmFkZSk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSogZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9u
IHByZXNlbnRhdGlvblRyYW5zaXRpb24pCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yUmFuZ2UoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAq
b3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9u
VHJhbnNpdGlvbikKIHsKICAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9p
bnQgbG9jYXRpb25JblYKICAgICAgICAgICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRl
KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkp
KTsKIAogICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0g
ZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Ci0gICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0
ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbWFp
blJlc3VsdFJhbmdlLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2VBbmRDcm9zc2ZhZGUpOworICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKm1haW5SZXN1bHRS
YW5nZSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3Nz
ZmFkZSk7CiAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQ
YWdlT3ZlcmxheSA9IG92ZXJsYXktPnBhZ2VPdmVybGF5SUQoKTsKICAgICAgICAgbV9sYXN0QWN0
aW9uTWVudVJhbmdlRm9yU2VsZWN0aW9uID0gbWFpblJlc3VsdFJhbmdlOwogCkBAIC0xMDU0LDcg
KzEwNTQsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlvbkluVgogICAgICAgICBhY3Rpb25NZW51UmVz
dWx0LmFjdGlvbkNvbnRleHQgPSBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVz
dFJlc3VsdChoaXRUZXN0UmVzdWx0LCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWRE
YXRhUmFuZ2UpOwogICAgICAgICBpZiAoYWN0aW9uTWVudVJlc3VsdC5hY3Rpb25Db250ZXh0ICYm
IGRldGVjdGVkRGF0YVJhbmdlKSB7CiAgICAgICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVj
dGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Ci0gICAgICAgICAg
ICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmRldGVjdGVkRGF0YVJhbmdlLCBUZXh0SW5kaWNhdG9yOjpQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOworICAgICAgICAgICAg
YWN0aW9uTWVudVJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFJhbmdlKCpkZXRlY3RlZERhdGFSYW5nZSwgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZSk7CiAgICAgICAgICAgICBtX2xh
c3RBY3Rpb25NZW51UmFuZ2VGb3JTZWxlY3Rpb24gPSBkZXRlY3RlZERhdGFSYW5nZTsKICAgICAg
ICAgfQogICAgIH0K
</data>
<flag name="review"
          id="266929"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>